geonetwork-ui 2.4.0-dev.9121e5f4 → 2.4.0-dev.a1bcfe22

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 (169) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +12 -1
  5. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  6. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
  7. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +7 -2
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +1 -2
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +11 -7
  16. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  17. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +143 -60
  18. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  19. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  20. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +4 -3
  21. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
  22. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
  23. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
  24. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +9 -3
  25. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
  26. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  27. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +5 -11
  28. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +3 -3
  29. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +5 -2
  30. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  31. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
  32. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
  33. package/esm2022/libs/ui/widgets/src/index.mjs +2 -1
  34. package/esm2022/libs/ui/widgets/src/lib/popover/popover.component.mjs +68 -0
  35. package/esm2022/translations/de.json +71 -32
  36. package/esm2022/translations/en.json +41 -5
  37. package/esm2022/translations/es.json +40 -1
  38. package/esm2022/translations/fr.json +42 -6
  39. package/esm2022/translations/it.json +40 -1
  40. package/esm2022/translations/nl.json +40 -1
  41. package/esm2022/translations/pt.json +40 -1
  42. package/fesm2022/geonetwork-ui.mjs +733 -192
  43. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  44. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  45. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  48. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  49. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  50. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  51. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
  52. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  53. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  54. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
  55. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  56. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
  57. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  58. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  59. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  60. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  61. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  62. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  63. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  64. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
  65. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  68. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
  69. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  70. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  71. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  72. package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
  73. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  74. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
  75. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  76. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  77. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  78. package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
  79. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  80. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  81. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  82. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  83. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  84. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  85. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  86. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
  87. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  88. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  89. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -3
  90. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  91. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +7 -6
  92. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  93. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
  94. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  95. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
  96. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  97. package/libs/ui/widgets/src/index.d.ts +1 -0
  98. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  99. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts +19 -0
  100. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts.map +1 -0
  101. package/package.json +1 -1
  102. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  103. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  104. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  105. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
  106. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
  107. package/src/libs/common/fixtures/src/index.ts +2 -0
  108. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  109. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  110. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  111. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  112. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
  113. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
  114. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
  115. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  116. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  117. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  118. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
  119. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
  120. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
  121. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
  122. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
  123. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  124. package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
  125. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
  126. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  127. package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
  128. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  129. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  130. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  131. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  132. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  133. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
  134. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  135. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  136. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +14 -20
  137. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -10
  138. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.html +1 -1
  139. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -1
  140. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  141. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  142. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  143. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  144. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  145. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
  146. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
  147. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
  148. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
  149. package/src/libs/ui/widgets/src/index.ts +1 -0
  150. package/src/libs/ui/widgets/src/lib/popover/popover.component.css +0 -0
  151. package/src/libs/ui/widgets/src/lib/popover/popover.component.html +3 -0
  152. package/src/libs/ui/widgets/src/lib/popover/popover.component.ts +85 -0
  153. package/tailwind.base.css +2 -1
  154. package/translations/de.json +71 -32
  155. package/translations/en.json +41 -5
  156. package/translations/es.json +40 -1
  157. package/translations/fr.json +42 -6
  158. package/translations/it.json +40 -1
  159. package/translations/nl.json +40 -1
  160. package/translations/pt.json +40 -1
  161. package/translations/sk.json +40 -1
  162. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  163. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  164. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  165. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  166. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  167. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  168. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  169. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
@@ -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, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, TemplateRef, Host, Pipe, inject } from '@angular/core';
4
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, TemplateRef, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, Host, Pipe, 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';
@@ -48,7 +48,7 @@ import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
48
48
  import VectorTileLayer from 'ol/layer/VectorTile';
49
49
  import OGCMapTile from 'ol/source/OGCMapTile.js';
50
50
  import ImageLayer from 'ol/layer/Image';
51
- import * as i2$5 from '@angular/material/tabs';
51
+ import * as i2$6 from '@angular/material/tabs';
52
52
  import { MatTabsModule } from '@angular/material/tabs';
53
53
  import * as i2$2 from '@angular/forms';
54
54
  import { FormsModule, ReactiveFormsModule, UntypedFormControl, FormArray, FormControl } from '@angular/forms';
@@ -60,6 +60,7 @@ import * as i5 from 'ngx-chips';
60
60
  import { TagInputModule } from 'ngx-chips';
61
61
  import * as i1$4 from '@angular/material/progress-spinner';
62
62
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
63
+ import tippy from 'tippy.js';
63
64
  import * as i3 from '@angular/material/core';
64
65
  import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
65
66
  import * as i1$5 from '@angular/material/checkbox';
@@ -81,9 +82,10 @@ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/c
81
82
  import EmblaCarousel from 'embla-carousel';
82
83
  import { formatDistance } from 'date-fns';
83
84
  import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
85
+ import * as i2$5 from '@angular/material/menu';
86
+ import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
84
87
  import * as i1$8 from '@ngrx/effects';
85
88
  import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
86
- import tippy from 'tippy.js';
87
89
  import { valid as valid$1 } from 'geojson-validation';
88
90
  import { Polygon } from 'ol/geom';
89
91
  import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
@@ -91,7 +93,7 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
91
93
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
92
94
  import * as i4 from '@angular/cdk/scrolling';
93
95
  import { ScrollingModule } from '@angular/cdk/scrolling';
94
- import * as i2$6 from '@angular/material/sort';
96
+ import * as i2$7 from '@angular/material/sort';
95
97
  import { MatSort, MatSortModule } from '@angular/material/sort';
96
98
  import * as i1$9 from '@angular/material/table';
97
99
  import { MatTableModule } from '@angular/material/table';
@@ -2176,6 +2178,7 @@ const mapKeywords = (thesauri, language) => {
2176
2178
  keywords.push({
2177
2179
  label: selectTranslatedValue(keyword, language),
2178
2180
  type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
2181
+ ...(keyword.link && { key: keyword.link }),
2179
2182
  ...(thesaurus && { thesaurus }),
2180
2183
  });
2181
2184
  }
@@ -8641,11 +8644,7 @@ class RecordsApiService {
8641
8644
  headers = headers.set('Accept', httpHeaderAcceptSelected);
8642
8645
  }
8643
8646
  // to determine the Content-Type header
8644
- const consumes = [
8645
- 'application/xml',
8646
- 'application/json',
8647
- 'application/x-www-form-urlencoded',
8648
- ];
8647
+ const consumes = ['application/xml'];
8649
8648
  const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
8650
8649
  if (httpContentTypeSelected !== undefined) {
8651
8650
  headers = headers.set('Content-Type', httpContentTypeSelected);
@@ -17356,6 +17355,8 @@ var de = {
17356
17355
  "datafeeder.datasetValidation.submitButton": "OK, meine Daten sind korrekt",
17357
17356
  "datafeeder.datasetValidation.title": "Stellen Sie sicher, dass Ihre Daten korrekt sind",
17358
17357
  "datafeeder.datasetValidation.unknown": " - ",
17358
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
17359
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
17359
17360
  "datafeeder.form.abstract": "Wie würden Sie Ihren Datensatz beschreiben?",
17360
17361
  "datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
17361
17362
  "datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
@@ -17383,6 +17384,7 @@ var de = {
17383
17384
  "datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
17384
17385
  "datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
17385
17386
  "datafeeder.publishSuccess.mapViewer": "Kartenviewer",
17387
+ "datafeeder.publishSuccess.ogcFeature": "",
17386
17388
  "datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
17387
17389
  "datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
17388
17390
  "datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
@@ -17411,7 +17413,6 @@ var de = {
17411
17413
  "datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
17412
17414
  "datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
17413
17415
  "datafeeder.upload.uploadButton": "Hochladen",
17414
- "datafeeder.validation.encoding": "Codierung",
17415
17416
  "datafeeder.validation.csv.delimiter": "",
17416
17417
  "datafeeder.validation.csv.delimiter.comma": "",
17417
17418
  "datafeeder.validation.csv.delimiter.semicolon": "",
@@ -17421,6 +17422,7 @@ var de = {
17421
17422
  "datafeeder.validation.csv.quote.none": "",
17422
17423
  "datafeeder.validation.csv.quote.simple": "",
17423
17424
  "datafeeder.validation.csv.quoteChar": "",
17425
+ "datafeeder.validation.encoding": "Codierung",
17424
17426
  "datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
17425
17427
  "datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
17426
17428
  "datafeeder.validation.projection": "Raumbezugssystem:",
@@ -17469,38 +17471,71 @@ var de = {
17469
17471
  "downloads.format.unknown": "unbekannt",
17470
17472
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
17471
17473
  dropFile: dropFile$6,
17472
- "editor.record.form.keywords": "Schlagwörter",
17474
+ "editor.record.form.bottomButtons.comeBackLater": "",
17475
+ "editor.record.form.bottomButtons.next": "",
17476
+ "editor.record.form.bottomButtons.previous": "",
17477
+ "editor.record.form.field.abstract": "",
17478
+ "editor.record.form.field.keywords": "Schlagwörter",
17479
+ "editor.record.form.field.license": "Lizenz",
17480
+ "editor.record.form.field.recordUpdated": "",
17481
+ "editor.record.form.field.resourceUpdated": "",
17482
+ "editor.record.form.field.temporalExtents": "",
17483
+ "editor.record.form.field.title": "",
17484
+ "editor.record.form.field.uniqueIdentifier": "",
17485
+ "editor.record.form.field.updateFrequency": "",
17486
+ "editor.record.form.abstract": "Kurzbeschreibung",
17487
+ "editor.record.form.keywords": "Schlüsselwörter",
17473
17488
  "editor.record.form.license": "Lizenz",
17474
- "editor.record.form.license.cc-by": "",
17475
- "editor.record.form.license.cc-by-sa": "",
17476
- "editor.record.form.license.cc-zero": "",
17477
- "editor.record.form.license.etalab": "",
17478
- "editor.record.form.license.etalab-v2": "",
17479
- "editor.record.form.license.odbl": "",
17480
- "editor.record.form.license.odc-by": "",
17481
- "editor.record.form.license.pddl": "",
17489
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
17490
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
17491
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
17492
+ "editor.record.form.license.etalab": "Offene Lizenz (Etalab)",
17493
+ "editor.record.form.license.etalab-v2": "Offene Lizenz v2.0 (Etalab)",
17494
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
17495
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
17496
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
17482
17497
  "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
17483
- "editor.record.form.resourceUpdated": "",
17484
- "editor.record.form.temporalExtents": "",
17485
- "editor.record.form.temporalExtents.addDate": "",
17486
- "editor.record.form.temporalExtents.addRange": "",
17487
- "editor.record.form.temporalExtents.date": "",
17488
- "editor.record.form.temporalExtents.range": "",
17489
- "editor.record.form.updateFrequency": "",
17490
- "editor.record.form.updateFrequency.planned": "",
17491
- "editor.record.loadError.body": "",
17492
- "editor.record.loadError.closeMessage": "",
17493
- "editor.record.loadError.title": "",
17494
- "editor.record.publish": "",
17495
- "editor.record.publishError.body": "",
17496
- "editor.record.publishError.closeMessage": "",
17497
- "editor.record.publishError.title": "",
17498
- "editor.record.publishSuccess.body": "",
17499
- "editor.record.publishSuccess.title": "",
17500
- "editor.record.saveStatus.asDraftOnly": "",
17501
- "editor.record.saveStatus.draftWithChangesPending": "",
17502
- "editor.record.saveStatus.recordUpToDate": "",
17503
- "editor.record.upToDate": "",
17498
+ "editor.record.form.page.accessAndContact": "",
17499
+ "editor.record.form.page.description": "",
17500
+ "editor.record.form.page.ressources": "",
17501
+ "editor.record.form.section.about.description": "",
17502
+ "editor.record.form.section.about.label": "",
17503
+ "editor.record.form.section.annexes.label": "",
17504
+ "editor.record.form.section.associatedResources.description": "",
17505
+ "editor.record.form.section.associatedResources.label": "",
17506
+ "editor.record.form.section.classification.description": "",
17507
+ "editor.record.form.section.classification.label": "",
17508
+ "editor.record.form.section.dataManagers.description": "",
17509
+ "editor.record.form.section.dataManagers.label": "",
17510
+ "editor.record.form.section.dataPointOfContact.description": "",
17511
+ "editor.record.form.section.dataPointOfContact.label": "",
17512
+ "editor.record.form.section.geographicalCoverage.label": "",
17513
+ "editor.record.form.section.useAndAccessConditions.label": "",
17514
+ "editor.record.form.metadata.title": "Metadaten-Titel",
17515
+ "editor.record.form.record.updated": "Datensatz zuletzt aktualisiert",
17516
+ "editor.record.form.resourceUpdated": "Letztes Aktualisierungsdatum",
17517
+ "editor.record.form.temporalExtents": "Zeitlicher Umfang",
17518
+ "editor.record.form.temporalExtents.addDate": "Zeitpunkt",
17519
+ "editor.record.form.temporalExtents.addRange": "Zeitraum",
17520
+ "editor.record.form.temporalExtents.date": "Datum",
17521
+ "editor.record.form.temporalExtents.range": "Datumsbereich",
17522
+ "editor.record.form.unique.identifier": "Eindeutige Kennung (ID)",
17523
+ "editor.record.form.updateFrequency": "Aktualisierungshäufigkeit",
17524
+ "editor.record.form.updateFrequency.planned": "Die Daten sollten regelmäßig aktualisiert werden.",
17525
+ "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
17526
+ "editor.record.loadError.closeMessage": "Verstanden",
17527
+ "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
17528
+ "editor.record.publish": "Diesen Datensatz veröffentlichen",
17529
+ "editor.record.publishError.body": "Der Datensatz konnte nicht veröffentlicht werden:",
17530
+ "editor.record.publishError.closeMessage": "Verstanden",
17531
+ "editor.record.publishError.title": "Fehler beim Veröffentlichen des Datensatzes",
17532
+ "editor.record.publishSuccess.body": "Der Datensatz wurde erfolgreich veröffentlicht!",
17533
+ "editor.record.publishSuccess.title": "Veröffentlichung erfolgreich",
17534
+ "editor.record.saveStatus.asDraftOnly": "Nur als Entwurf gespeichert - noch nicht veröffentlicht",
17535
+ "editor.record.saveStatus.draftWithChangesPending": "Als Entwurf gespeichert - Änderungen stehen aus",
17536
+ "editor.record.saveStatus.recordUpToDate": "Datensatz ist auf dem neuesten Stand",
17537
+ "editor.record.upToDate": "Dieser Datensatz ist auf dem neuesten Stand",
17538
+ "editor.sidebar.menu.editor": "",
17504
17539
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
17505
17540
  "facets.block.title.OrgForResource": "Organisation",
17506
17541
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -17578,6 +17613,7 @@ var de = {
17578
17613
  "pagination.pageOf": "von",
17579
17614
  previous: previous$6,
17580
17615
  "record.action.download": "Herunterladen",
17616
+ "record.action.duplicate": "",
17581
17617
  "record.action.view": "Anzeigen",
17582
17618
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
17583
17619
  "record.metadata.about": "Beschreibung",
@@ -17699,9 +17735,11 @@ var de = {
17699
17735
  "search.filters.minimize": "Minimieren",
17700
17736
  "search.filters.myRecords": "Nur meine Datensätze anzeigen",
17701
17737
  "search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
17738
+ "search.filters.organization": "",
17702
17739
  "search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
17740
+ "search.filters.producerOrg": "",
17703
17741
  "search.filters.publicationYear": "Veröffentlichungsjahr",
17704
- "search.filters.publisher": "Organisationen",
17742
+ "search.filters.publisherOrg": "",
17705
17743
  "search.filters.representationType": "Repräsentationstyp",
17706
17744
  "search.filters.resourceType": "Ressourcentyp",
17707
17745
  "search.filters.standard": "Standard",
@@ -17779,11 +17817,11 @@ var en = {
17779
17817
  "datafeeder.analysisProgressBar.subtitle": "The analysis may take several minutes, please wait.",
17780
17818
  "datafeeder.analysisProgressBar.title": "Analyze in progress",
17781
17819
  "datafeeder.datasetValidation.datasetInformation": "The provided dataset contains {number} entities",
17782
- "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
17783
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
17784
17820
  "datafeeder.datasetValidation.submitButton": "OK, my data are correct",
17785
17821
  "datafeeder.datasetValidation.title": "Make sure your data are correct",
17786
17822
  "datafeeder.datasetValidation.unknown": " - ",
17823
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
17824
+ "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
17787
17825
  "datafeeder.form.abstract": "How would you describe your dataset?",
17788
17826
  "datafeeder.form.datepicker": "Do you know when the dataset was created?",
17789
17827
  "datafeeder.form.description": "Finally, please describe the process that was used to create the dataset",
@@ -17898,6 +17936,19 @@ var en = {
17898
17936
  "downloads.format.unknown": "unknown",
17899
17937
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17900
17938
  dropFile: dropFile$5,
17939
+ "editor.record.form.bottomButtons.comeBackLater": "Come back later",
17940
+ "editor.record.form.bottomButtons.next": "Next",
17941
+ "editor.record.form.bottomButtons.previous": "Previous",
17942
+ "editor.record.form.field.abstract": "Abstract",
17943
+ "editor.record.form.field.keywords": "Keywords",
17944
+ "editor.record.form.field.license": "License",
17945
+ "editor.record.form.field.recordUpdated": "Record Updated",
17946
+ "editor.record.form.field.resourceUpdated": "Resource Updated",
17947
+ "editor.record.form.field.temporalExtents": "Temporal extents",
17948
+ "editor.record.form.field.title": "Metadata title",
17949
+ "editor.record.form.field.uniqueIdentifier": "Unique identifier",
17950
+ "editor.record.form.field.updateFrequency": "Update frequency",
17951
+ "editor.record.form.abstract": "Abstract",
17901
17952
  "editor.record.form.keywords": "Keywords",
17902
17953
  "editor.record.form.license": "License",
17903
17954
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
@@ -17909,12 +17960,31 @@ var en = {
17909
17960
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
17910
17961
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
17911
17962
  "editor.record.form.license.unknown": "Unknown or absent",
17963
+ "editor.record.form.page.accessAndContact": "Access and contact",
17964
+ "editor.record.form.page.description": "Resource description",
17965
+ "editor.record.form.page.ressources": "Resources",
17966
+ "editor.record.form.section.about.description": "This section describes the resource.",
17967
+ "editor.record.form.section.about.label": "About the resource",
17968
+ "editor.record.form.section.annexes.label": "Annexes",
17969
+ "editor.record.form.section.associatedResources.description": "Drop files here to associate them with the resource.",
17970
+ "editor.record.form.section.associatedResources.label": "Associated resources",
17971
+ "editor.record.form.section.classification.description": "The classification has an impact on the access to the data.",
17972
+ "editor.record.form.section.classification.label": "Classification",
17973
+ "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data.",
17974
+ "editor.record.form.section.dataManagers.label": "Data managers",
17975
+ "editor.record.form.section.dataPointOfContact.description": "This information concerns the metadata.",
17976
+ "editor.record.form.section.dataPointOfContact.label": "Data point of contact",
17977
+ "editor.record.form.section.geographicalCoverage.label": "Geographical coverage",
17978
+ "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions",
17979
+ "editor.record.form.metadata.title": "Metadata title",
17980
+ "editor.record.form.record.updated": "Record updated",
17912
17981
  "editor.record.form.resourceUpdated": "Last update date",
17913
17982
  "editor.record.form.temporalExtents": "Temporal extent",
17914
17983
  "editor.record.form.temporalExtents.addDate": "Time instant",
17915
17984
  "editor.record.form.temporalExtents.addRange": "Time period",
17916
17985
  "editor.record.form.temporalExtents.date": "Date",
17917
17986
  "editor.record.form.temporalExtents.range": "Date range",
17987
+ "editor.record.form.unique.identifier": "Unique identifier",
17918
17988
  "editor.record.form.updateFrequency": "Update frequency",
17919
17989
  "editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
17920
17990
  "editor.record.loadError.body": "The record could not be loaded:",
@@ -17930,6 +18000,7 @@ var en = {
17930
18000
  "editor.record.saveStatus.draftWithChangesPending": "Saved as draft - changes are pending",
17931
18001
  "editor.record.saveStatus.recordUpToDate": "Record is up to date",
17932
18002
  "editor.record.upToDate": "This record is up to date",
18003
+ "editor.sidebar.menu.editor": "Editor",
17933
18004
  "externalviewer.dataset.unnamed": "Datahub layer",
17934
18005
  "facets.block.title.OrgForResource": "Organisation",
17935
18006
  "facets.block.title.availableInServices": "Available for",
@@ -17998,8 +18069,8 @@ var en = {
17998
18069
  "organisations.sortBy.nameDesc": "Name Z → A",
17999
18070
  "organisations.sortBy.recordCountAsc": "Publications 0 → 9",
18000
18071
  "organisations.sortBy.recordCountDesc": "Publications 9 → 0",
18001
- "organization.details.lastPublishedDatasets": "Last published datasets",
18002
- "organization.details.lastPublishedDatasets.searchAllButton": "Search all",
18072
+ "organization.details.lastPublishedDatasets": "",
18073
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18003
18074
  "organization.details.mailContact": "Contact by email",
18004
18075
  "organization.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
18005
18076
  "pagination.nextPage": "Next page",
@@ -18007,6 +18078,7 @@ var en = {
18007
18078
  "pagination.pageOf": "of",
18008
18079
  previous: previous$5,
18009
18080
  "record.action.download": "Download",
18081
+ "record.action.duplicate": "Duplicate",
18010
18082
  "record.action.view": "View",
18011
18083
  "record.externalViewer.open": "Open in the external map viewer",
18012
18084
  "record.metadata.about": "Description",
@@ -18128,9 +18200,11 @@ var en = {
18128
18200
  "search.filters.minimize": "Minimize",
18129
18201
  "search.filters.myRecords": "Show only my records",
18130
18202
  "search.filters.myRecordsHelp": "When this is enabled, records only created by myself are shown; records created by others will not show up.",
18203
+ "search.filters.organization": "Organization",
18131
18204
  "search.filters.otherRecords": "Showing records from another person",
18205
+ "search.filters.producerOrg": "Producer",
18132
18206
  "search.filters.publicationYear": "Publication year",
18133
- "search.filters.publisher": "Organizations",
18207
+ "search.filters.publisherOrg": "Publisher",
18134
18208
  "search.filters.representationType": "Representation type",
18135
18209
  "search.filters.resourceType": "Resource type",
18136
18210
  "search.filters.standard": "Standard",
@@ -18211,6 +18285,8 @@ var es = {
18211
18285
  "datafeeder.datasetValidation.submitButton": "",
18212
18286
  "datafeeder.datasetValidation.title": "",
18213
18287
  "datafeeder.datasetValidation.unknown": "",
18288
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
18289
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
18214
18290
  "datafeeder.form.abstract": "",
18215
18291
  "datafeeder.form.datepicker": "",
18216
18292
  "datafeeder.form.description": "",
@@ -18238,6 +18314,7 @@ var es = {
18238
18314
  "datafeeder.publishSuccess.geonetworkRecord": "",
18239
18315
  "datafeeder.publishSuccess.illustration.title": "",
18240
18316
  "datafeeder.publishSuccess.mapViewer": "",
18317
+ "datafeeder.publishSuccess.ogcFeature": "",
18241
18318
  "datafeeder.publishSuccess.subtitle": "",
18242
18319
  "datafeeder.publishSuccess.title": "",
18243
18320
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -18324,6 +18401,19 @@ var es = {
18324
18401
  "downloads.format.unknown": "",
18325
18402
  "downloads.wfs.featuretype.not.found": "",
18326
18403
  dropFile: dropFile$4,
18404
+ "editor.record.form.bottomButtons.comeBackLater": "",
18405
+ "editor.record.form.bottomButtons.next": "",
18406
+ "editor.record.form.bottomButtons.previous": "",
18407
+ "editor.record.form.field.abstract": "",
18408
+ "editor.record.form.field.keywords": "",
18409
+ "editor.record.form.field.license": "",
18410
+ "editor.record.form.field.recordUpdated": "",
18411
+ "editor.record.form.field.resourceUpdated": "",
18412
+ "editor.record.form.field.temporalExtents": "",
18413
+ "editor.record.form.field.title": "",
18414
+ "editor.record.form.field.uniqueIdentifier": "",
18415
+ "editor.record.form.field.updateFrequency": "",
18416
+ "editor.record.form.abstract": "",
18327
18417
  "editor.record.form.keywords": "",
18328
18418
  "editor.record.form.license": "",
18329
18419
  "editor.record.form.license.cc-by": "",
@@ -18335,12 +18425,31 @@ var es = {
18335
18425
  "editor.record.form.license.odc-by": "",
18336
18426
  "editor.record.form.license.pddl": "",
18337
18427
  "editor.record.form.license.unknown": "",
18428
+ "editor.record.form.page.accessAndContact": "",
18429
+ "editor.record.form.page.description": "",
18430
+ "editor.record.form.page.ressources": "",
18431
+ "editor.record.form.section.about.description": "",
18432
+ "editor.record.form.section.about.label": "",
18433
+ "editor.record.form.section.annexes.label": "",
18434
+ "editor.record.form.section.associatedResources.description": "",
18435
+ "editor.record.form.section.associatedResources.label": "",
18436
+ "editor.record.form.section.classification.description": "",
18437
+ "editor.record.form.section.classification.label": "",
18438
+ "editor.record.form.section.dataManagers.description": "",
18439
+ "editor.record.form.section.dataManagers.label": "",
18440
+ "editor.record.form.section.dataPointOfContact.description": "",
18441
+ "editor.record.form.section.dataPointOfContact.label": "",
18442
+ "editor.record.form.section.geographicalCoverage.label": "",
18443
+ "editor.record.form.section.useAndAccessConditions.label": "",
18444
+ "editor.record.form.metadata.title": "",
18445
+ "editor.record.form.record.updated": "",
18338
18446
  "editor.record.form.resourceUpdated": "",
18339
18447
  "editor.record.form.temporalExtents": "",
18340
18448
  "editor.record.form.temporalExtents.addDate": "",
18341
18449
  "editor.record.form.temporalExtents.addRange": "",
18342
18450
  "editor.record.form.temporalExtents.date": "",
18343
18451
  "editor.record.form.temporalExtents.range": "",
18452
+ "editor.record.form.unique.identifier": "",
18344
18453
  "editor.record.form.updateFrequency": "",
18345
18454
  "editor.record.form.updateFrequency.planned": "",
18346
18455
  "editor.record.loadError.body": "",
@@ -18356,6 +18465,7 @@ var es = {
18356
18465
  "editor.record.saveStatus.draftWithChangesPending": "",
18357
18466
  "editor.record.saveStatus.recordUpToDate": "",
18358
18467
  "editor.record.upToDate": "",
18468
+ "editor.sidebar.menu.editor": "",
18359
18469
  "externalviewer.dataset.unnamed": "",
18360
18470
  "facets.block.title.OrgForResource": "",
18361
18471
  "facets.block.title.availableInServices": "",
@@ -18433,6 +18543,7 @@ var es = {
18433
18543
  "pagination.pageOf": "",
18434
18544
  previous: previous$4,
18435
18545
  "record.action.download": "",
18546
+ "record.action.duplicate": "",
18436
18547
  "record.action.view": "",
18437
18548
  "record.externalViewer.open": "",
18438
18549
  "record.metadata.about": "",
@@ -18554,9 +18665,11 @@ var es = {
18554
18665
  "search.filters.minimize": "",
18555
18666
  "search.filters.myRecords": "",
18556
18667
  "search.filters.myRecordsHelp": "",
18668
+ "search.filters.organization": "",
18557
18669
  "search.filters.otherRecords": "",
18670
+ "search.filters.producerOrg": "",
18558
18671
  "search.filters.publicationYear": "",
18559
- "search.filters.publisher": "",
18672
+ "search.filters.publisherOrg": "",
18560
18673
  "search.filters.representationType": "",
18561
18674
  "search.filters.resourceType": "",
18562
18675
  "search.filters.standard": "",
@@ -18634,11 +18747,11 @@ var fr = {
18634
18747
  "datafeeder.analysisProgressBar.subtitle": "L'analyse peut prendre plusieurs minutes, merci d'attendre.",
18635
18748
  "datafeeder.analysisProgressBar.title": "Analyse en cours",
18636
18749
  "datafeeder.datasetValidation.datasetInformation": "Le jeu de données fourni contient {number} entités",
18637
- "datafeeder.datasetValidationCsv.lineNumbers": "Résumé des 5 premières lignes* du CSV :",
18638
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*Le tableau doit afficher les 5 premières lignes (hors en-tête)<br>Si ce n'est pas le cas, vérifier que le fichier est bien formatté",
18639
18750
  "datafeeder.datasetValidation.submitButton": "OK, mes données sont correctes",
18640
18751
  "datafeeder.datasetValidation.title": "Vérifiez que vos données sont correctes",
18641
18752
  "datafeeder.datasetValidation.unknown": " - ",
18753
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "*Le tableau doit afficher les 5 premières lignes (hors en-tête)<br>Si ce n'est pas le cas, vérifier que le fichier est bien formatté",
18754
+ "datafeeder.datasetValidationCsv.lineNumbers": "Résumé des 5 premières lignes* du CSV :",
18642
18755
  "datafeeder.form.abstract": "Comment décrire votre jeu de données ?",
18643
18756
  "datafeeder.form.datepicker": "Savez-vous quand la donnée a été créée ?",
18644
18757
  "datafeeder.form.description": "Enfin, décrivez le processus utilisé pour créer la donnée",
@@ -18753,7 +18866,20 @@ var fr = {
18753
18866
  "downloads.format.unknown": "inconnu",
18754
18867
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
18755
18868
  dropFile: dropFile$3,
18756
- "editor.record.form.keywords": "Mots-clés",
18869
+ "editor.record.form.bottomButtons.comeBackLater": "Revenir plus tard",
18870
+ "editor.record.form.bottomButtons.next": "Suivant",
18871
+ "editor.record.form.bottomButtons.previous": "Précédent",
18872
+ "editor.record.form.field.abstract": "Résumé",
18873
+ "editor.record.form.field.keywords": "Mots-clés",
18874
+ "editor.record.form.field.license": "Licence",
18875
+ "editor.record.form.field.recordUpdated": "Date de dernière révision",
18876
+ "editor.record.form.field.resourceUpdated": "Date de dernière révision",
18877
+ "editor.record.form.field.temporalExtents": "Étendue temporelle",
18878
+ "editor.record.form.field.title": "Titre",
18879
+ "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
18880
+ "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
18881
+ "editor.record.form.abstract": "",
18882
+ "editor.record.form.keywords": "",
18757
18883
  "editor.record.form.license": "Licence",
18758
18884
  "editor.record.form.license.cc-by": "",
18759
18885
  "editor.record.form.license.cc-by-sa": "",
@@ -18764,12 +18890,31 @@ var fr = {
18764
18890
  "editor.record.form.license.odc-by": "",
18765
18891
  "editor.record.form.license.pddl": "",
18766
18892
  "editor.record.form.license.unknown": "Non-reconnue ou absente",
18893
+ "editor.record.form.page.accessAndContact": "Acces et contact",
18894
+ "editor.record.form.page.description": "Description de la ressource",
18895
+ "editor.record.form.page.ressources": "Ressources",
18896
+ "editor.record.form.section.about.description": "Ces informations concernent la donnée.",
18897
+ "editor.record.form.section.about.label": "A propos de la ressource",
18898
+ "editor.record.form.section.annexes.label": "Annexes",
18899
+ "editor.record.form.section.associatedResources.description": "Déposez les jeux de données associées à cette fiche de métadonnée.",
18900
+ "editor.record.form.section.associatedResources.label": "Ressources associees",
18901
+ "editor.record.form.section.classification.description": "La classification a un impact sur la recherche du jeux de données.",
18902
+ "editor.record.form.section.classification.label": "Classification",
18903
+ "editor.record.form.section.dataManagers.description": "Cette information concerne la donnée.",
18904
+ "editor.record.form.section.dataManagers.label": "Responsables de la donnee",
18905
+ "editor.record.form.section.dataPointOfContact.description": "Cette information concerne la fiche de métadonnée.",
18906
+ "editor.record.form.section.dataPointOfContact.label": "Point de contact de la metadonee",
18907
+ "editor.record.form.section.geographicalCoverage.label": "Couverture geographique",
18908
+ "editor.record.form.section.useAndAccessConditions.label": "Conditions d'acces et usage",
18909
+ "editor.record.form.metadata.title": "",
18910
+ "editor.record.form.record.updated": "",
18767
18911
  "editor.record.form.resourceUpdated": "Date de dernière révision",
18768
18912
  "editor.record.form.temporalExtents": "Étendue temporelle",
18769
18913
  "editor.record.form.temporalExtents.addDate": "Date déterminée",
18770
18914
  "editor.record.form.temporalExtents.addRange": "Période de temps",
18771
18915
  "editor.record.form.temporalExtents.date": "Date concernée",
18772
18916
  "editor.record.form.temporalExtents.range": "Période concernée",
18917
+ "editor.record.form.unique.identifier": "",
18773
18918
  "editor.record.form.updateFrequency": "Fréquence de mise à jour",
18774
18919
  "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
18775
18920
  "editor.record.loadError.body": "",
@@ -18785,6 +18930,7 @@ var fr = {
18785
18930
  "editor.record.saveStatus.draftWithChangesPending": "Brouillon enregistré - modifications en cours",
18786
18931
  "editor.record.saveStatus.recordUpToDate": "La fiche publiée est à jour",
18787
18932
  "editor.record.upToDate": "",
18933
+ "editor.sidebar.menu.editor": "",
18788
18934
  "externalviewer.dataset.unnamed": "Couche du datahub",
18789
18935
  "facets.block.title.OrgForResource": "Organisation",
18790
18936
  "facets.block.title.availableInServices": "Disponible pour",
@@ -18853,8 +18999,8 @@ var fr = {
18853
18999
  "organisations.sortBy.nameDesc": "Nom Z → A",
18854
19000
  "organisations.sortBy.recordCountAsc": "Données 0 → 9",
18855
19001
  "organisations.sortBy.recordCountDesc": "Données 9 → 0",
18856
- "organization.details.lastPublishedDatasets": "Dernières données publiées",
18857
- "organization.details.lastPublishedDatasets.searchAllButton": "Rechercher tous",
19002
+ "organization.details.lastPublishedDatasets": "",
19003
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18858
19004
  "organization.details.mailContact": "Contacter par mail",
18859
19005
  "organization.header.recordCount": "{count, plural, =0{donnée} one{donnée} other{données}}",
18860
19006
  "pagination.nextPage": "Page suivante",
@@ -18862,6 +19008,7 @@ var fr = {
18862
19008
  "pagination.pageOf": "sur",
18863
19009
  previous: previous$3,
18864
19010
  "record.action.download": "Télécharger",
19011
+ "record.action.duplicate": "Dupliquer",
18865
19012
  "record.action.view": "Voir",
18866
19013
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
18867
19014
  "record.metadata.about": "Description",
@@ -18983,9 +19130,11 @@ var fr = {
18983
19130
  "search.filters.minimize": "Réduire",
18984
19131
  "search.filters.myRecords": "Voir mes données",
18985
19132
  "search.filters.myRecordsHelp": "Quand activé, n'affiche que les données créées avec mon utilisateur. Les données créées par les autres utilisateurs ne sont pas affichées.",
19133
+ "search.filters.organization": "Organisation",
18986
19134
  "search.filters.otherRecords": "Affichage des données d'un autre utilisateur",
19135
+ "search.filters.producerOrg": "Producteur",
18987
19136
  "search.filters.publicationYear": "Année de publication",
18988
- "search.filters.publisher": "Organisations",
19137
+ "search.filters.publisherOrg": "Distributeur",
18989
19138
  "search.filters.representationType": "Type de représentation",
18990
19139
  "search.filters.resourceType": "Type de ressource",
18991
19140
  "search.filters.standard": "Standard",
@@ -19066,6 +19215,8 @@ var it = {
19066
19215
  "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
19067
19216
  "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
19068
19217
  "datafeeder.datasetValidation.unknown": " - ",
19218
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19219
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19069
19220
  "datafeeder.form.abstract": "Come descrivere il suo dataset?",
19070
19221
  "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
19071
19222
  "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
@@ -19093,6 +19244,7 @@ var it = {
19093
19244
  "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
19094
19245
  "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
19095
19246
  "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
19247
+ "datafeeder.publishSuccess.ogcFeature": "",
19096
19248
  "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
19097
19249
  "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
19098
19250
  "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
@@ -19179,6 +19331,19 @@ var it = {
19179
19331
  "downloads.format.unknown": "sconosciuto",
19180
19332
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
19181
19333
  dropFile: dropFile$2,
19334
+ "editor.record.form.bottomButtons.comeBackLater": "",
19335
+ "editor.record.form.bottomButtons.next": "",
19336
+ "editor.record.form.bottomButtons.previous": "",
19337
+ "editor.record.form.field.abstract": "",
19338
+ "editor.record.form.field.keywords": "",
19339
+ "editor.record.form.field.license": "Licenza",
19340
+ "editor.record.form.field.recordUpdated": "",
19341
+ "editor.record.form.field.resourceUpdated": "",
19342
+ "editor.record.form.field.temporalExtents": "",
19343
+ "editor.record.form.field.title": "",
19344
+ "editor.record.form.field.uniqueIdentifier": "",
19345
+ "editor.record.form.field.updateFrequency": "",
19346
+ "editor.record.form.abstract": "",
19182
19347
  "editor.record.form.keywords": "",
19183
19348
  "editor.record.form.license": "Licenza",
19184
19349
  "editor.record.form.license.cc-by": "",
@@ -19190,12 +19355,31 @@ var it = {
19190
19355
  "editor.record.form.license.odc-by": "",
19191
19356
  "editor.record.form.license.pddl": "",
19192
19357
  "editor.record.form.license.unknown": "Non riconosciuta o assente",
19358
+ "editor.record.form.page.accessAndContact": "",
19359
+ "editor.record.form.page.description": "",
19360
+ "editor.record.form.page.ressources": "",
19361
+ "editor.record.form.section.about.description": "",
19362
+ "editor.record.form.section.about.label": "",
19363
+ "editor.record.form.section.annexes.label": "",
19364
+ "editor.record.form.section.associatedResources.description": "",
19365
+ "editor.record.form.section.associatedResources.label": "",
19366
+ "editor.record.form.section.classification.description": "",
19367
+ "editor.record.form.section.classification.label": "",
19368
+ "editor.record.form.section.dataManagers.description": "",
19369
+ "editor.record.form.section.dataManagers.label": "",
19370
+ "editor.record.form.section.dataPointOfContact.description": "",
19371
+ "editor.record.form.section.dataPointOfContact.label": "",
19372
+ "editor.record.form.section.geographicalCoverage.label": "",
19373
+ "editor.record.form.section.useAndAccessConditions.label": "",
19374
+ "editor.record.form.metadata.title": "",
19375
+ "editor.record.form.record.updated": "",
19193
19376
  "editor.record.form.resourceUpdated": "",
19194
19377
  "editor.record.form.temporalExtents": "",
19195
19378
  "editor.record.form.temporalExtents.addDate": "",
19196
19379
  "editor.record.form.temporalExtents.addRange": "",
19197
19380
  "editor.record.form.temporalExtents.date": "",
19198
19381
  "editor.record.form.temporalExtents.range": "",
19382
+ "editor.record.form.unique.identifier": "",
19199
19383
  "editor.record.form.updateFrequency": "",
19200
19384
  "editor.record.form.updateFrequency.planned": "",
19201
19385
  "editor.record.loadError.body": "",
@@ -19211,6 +19395,7 @@ var it = {
19211
19395
  "editor.record.saveStatus.draftWithChangesPending": "",
19212
19396
  "editor.record.saveStatus.recordUpToDate": "",
19213
19397
  "editor.record.upToDate": "",
19398
+ "editor.sidebar.menu.editor": "",
19214
19399
  "externalviewer.dataset.unnamed": "Layer del datahub",
19215
19400
  "facets.block.title.OrgForResource": "Organizzazione",
19216
19401
  "facets.block.title.availableInServices": "Disponibile per",
@@ -19288,6 +19473,7 @@ var it = {
19288
19473
  "pagination.pageOf": "di",
19289
19474
  previous: previous$2,
19290
19475
  "record.action.download": "Scarica",
19476
+ "record.action.duplicate": "",
19291
19477
  "record.action.view": "Visualizza",
19292
19478
  "record.externalViewer.open": "Apri nell'visualizzatore esterno",
19293
19479
  "record.metadata.about": "Descrizione",
@@ -19409,9 +19595,11 @@ var it = {
19409
19595
  "search.filters.minimize": "Riduci",
19410
19596
  "search.filters.myRecords": "Visualizza i miei dati",
19411
19597
  "search.filters.myRecordsHelp": "Quando attivato, mostra solo i dati creati con il mio utente. I dati creati da altri utenti non sono visualizzati.",
19598
+ "search.filters.organization": "",
19412
19599
  "search.filters.otherRecords": "Visualizzazione dei dati di un altro utente",
19600
+ "search.filters.producerOrg": "",
19413
19601
  "search.filters.publicationYear": "Anno di pubblicazione",
19414
- "search.filters.publisher": "Organizzazioni",
19602
+ "search.filters.publisherOrg": "",
19415
19603
  "search.filters.representationType": "Tipo di rappresentazione",
19416
19604
  "search.filters.resourceType": "Tipo di risorsa",
19417
19605
  "search.filters.standard": "Standard",
@@ -19492,6 +19680,8 @@ var nl = {
19492
19680
  "datafeeder.datasetValidation.submitButton": "",
19493
19681
  "datafeeder.datasetValidation.title": "",
19494
19682
  "datafeeder.datasetValidation.unknown": "",
19683
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19684
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19495
19685
  "datafeeder.form.abstract": "",
19496
19686
  "datafeeder.form.datepicker": "",
19497
19687
  "datafeeder.form.description": "",
@@ -19519,6 +19709,7 @@ var nl = {
19519
19709
  "datafeeder.publishSuccess.geonetworkRecord": "",
19520
19710
  "datafeeder.publishSuccess.illustration.title": "",
19521
19711
  "datafeeder.publishSuccess.mapViewer": "",
19712
+ "datafeeder.publishSuccess.ogcFeature": "",
19522
19713
  "datafeeder.publishSuccess.subtitle": "",
19523
19714
  "datafeeder.publishSuccess.title": "",
19524
19715
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -19605,6 +19796,19 @@ var nl = {
19605
19796
  "downloads.format.unknown": "",
19606
19797
  "downloads.wfs.featuretype.not.found": "",
19607
19798
  dropFile: dropFile$1,
19799
+ "editor.record.form.bottomButtons.comeBackLater": "",
19800
+ "editor.record.form.bottomButtons.next": "",
19801
+ "editor.record.form.bottomButtons.previous": "",
19802
+ "editor.record.form.field.abstract": "",
19803
+ "editor.record.form.field.keywords": "",
19804
+ "editor.record.form.field.license": "",
19805
+ "editor.record.form.field.recordUpdated": "",
19806
+ "editor.record.form.field.resourceUpdated": "",
19807
+ "editor.record.form.field.temporalExtents": "",
19808
+ "editor.record.form.field.title": "",
19809
+ "editor.record.form.field.uniqueIdentifier": "",
19810
+ "editor.record.form.field.updateFrequency": "",
19811
+ "editor.record.form.abstract": "",
19608
19812
  "editor.record.form.keywords": "",
19609
19813
  "editor.record.form.license": "",
19610
19814
  "editor.record.form.license.cc-by": "",
@@ -19616,12 +19820,31 @@ var nl = {
19616
19820
  "editor.record.form.license.odc-by": "",
19617
19821
  "editor.record.form.license.pddl": "",
19618
19822
  "editor.record.form.license.unknown": "",
19823
+ "editor.record.form.page.accessAndContact": "",
19824
+ "editor.record.form.page.description": "",
19825
+ "editor.record.form.page.ressources": "",
19826
+ "editor.record.form.section.about.description": "",
19827
+ "editor.record.form.section.about.label": "",
19828
+ "editor.record.form.section.annexes.label": "",
19829
+ "editor.record.form.section.associatedResources.description": "",
19830
+ "editor.record.form.section.associatedResources.label": "",
19831
+ "editor.record.form.section.classification.description": "",
19832
+ "editor.record.form.section.classification.label": "",
19833
+ "editor.record.form.section.dataManagers.description": "",
19834
+ "editor.record.form.section.dataManagers.label": "",
19835
+ "editor.record.form.section.dataPointOfContact.description": "",
19836
+ "editor.record.form.section.dataPointOfContact.label": "",
19837
+ "editor.record.form.section.geographicalCoverage.label": "",
19838
+ "editor.record.form.section.useAndAccessConditions.label": "",
19839
+ "editor.record.form.metadata.title": "",
19840
+ "editor.record.form.record.updated": "",
19619
19841
  "editor.record.form.resourceUpdated": "",
19620
19842
  "editor.record.form.temporalExtents": "",
19621
19843
  "editor.record.form.temporalExtents.addDate": "",
19622
19844
  "editor.record.form.temporalExtents.addRange": "",
19623
19845
  "editor.record.form.temporalExtents.date": "",
19624
19846
  "editor.record.form.temporalExtents.range": "",
19847
+ "editor.record.form.unique.identifier": "",
19625
19848
  "editor.record.form.updateFrequency": "",
19626
19849
  "editor.record.form.updateFrequency.planned": "",
19627
19850
  "editor.record.loadError.body": "",
@@ -19637,6 +19860,7 @@ var nl = {
19637
19860
  "editor.record.saveStatus.draftWithChangesPending": "",
19638
19861
  "editor.record.saveStatus.recordUpToDate": "",
19639
19862
  "editor.record.upToDate": "",
19863
+ "editor.sidebar.menu.editor": "",
19640
19864
  "externalviewer.dataset.unnamed": "",
19641
19865
  "facets.block.title.OrgForResource": "",
19642
19866
  "facets.block.title.availableInServices": "",
@@ -19714,6 +19938,7 @@ var nl = {
19714
19938
  "pagination.pageOf": "",
19715
19939
  previous: previous$1,
19716
19940
  "record.action.download": "",
19941
+ "record.action.duplicate": "",
19717
19942
  "record.action.view": "",
19718
19943
  "record.externalViewer.open": "",
19719
19944
  "record.metadata.about": "",
@@ -19835,9 +20060,11 @@ var nl = {
19835
20060
  "search.filters.minimize": "",
19836
20061
  "search.filters.myRecords": "",
19837
20062
  "search.filters.myRecordsHelp": "",
20063
+ "search.filters.organization": "",
19838
20064
  "search.filters.otherRecords": "",
20065
+ "search.filters.producerOrg": "",
19839
20066
  "search.filters.publicationYear": "",
19840
- "search.filters.publisher": "",
20067
+ "search.filters.publisherOrg": "",
19841
20068
  "search.filters.representationType": "",
19842
20069
  "search.filters.resourceType": "",
19843
20070
  "search.filters.standard": "",
@@ -19918,6 +20145,8 @@ var pt = {
19918
20145
  "datafeeder.datasetValidation.submitButton": "",
19919
20146
  "datafeeder.datasetValidation.title": "",
19920
20147
  "datafeeder.datasetValidation.unknown": "",
20148
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
20149
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19921
20150
  "datafeeder.form.abstract": "",
19922
20151
  "datafeeder.form.datepicker": "",
19923
20152
  "datafeeder.form.description": "",
@@ -19945,6 +20174,7 @@ var pt = {
19945
20174
  "datafeeder.publishSuccess.geonetworkRecord": "",
19946
20175
  "datafeeder.publishSuccess.illustration.title": "",
19947
20176
  "datafeeder.publishSuccess.mapViewer": "",
20177
+ "datafeeder.publishSuccess.ogcFeature": "",
19948
20178
  "datafeeder.publishSuccess.subtitle": "",
19949
20179
  "datafeeder.publishSuccess.title": "",
19950
20180
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -20031,6 +20261,19 @@ var pt = {
20031
20261
  "downloads.format.unknown": "",
20032
20262
  "downloads.wfs.featuretype.not.found": "",
20033
20263
  dropFile: dropFile,
20264
+ "editor.record.form.bottomButtons.comeBackLater": "",
20265
+ "editor.record.form.bottomButtons.next": "",
20266
+ "editor.record.form.bottomButtons.previous": "",
20267
+ "editor.record.form.field.abstract": "",
20268
+ "editor.record.form.field.keywords": "",
20269
+ "editor.record.form.field.license": "",
20270
+ "editor.record.form.field.recordUpdated": "",
20271
+ "editor.record.form.field.resourceUpdated": "",
20272
+ "editor.record.form.field.temporalExtents": "",
20273
+ "editor.record.form.field.title": "",
20274
+ "editor.record.form.field.uniqueIdentifier": "",
20275
+ "editor.record.form.field.updateFrequency": "",
20276
+ "editor.record.form.abstract": "",
20034
20277
  "editor.record.form.keywords": "",
20035
20278
  "editor.record.form.license": "",
20036
20279
  "editor.record.form.license.cc-by": "",
@@ -20042,12 +20285,31 @@ var pt = {
20042
20285
  "editor.record.form.license.odc-by": "",
20043
20286
  "editor.record.form.license.pddl": "",
20044
20287
  "editor.record.form.license.unknown": "",
20288
+ "editor.record.form.page.accessAndContact": "",
20289
+ "editor.record.form.page.description": "",
20290
+ "editor.record.form.page.ressources": "",
20291
+ "editor.record.form.section.about.description": "",
20292
+ "editor.record.form.section.about.label": "",
20293
+ "editor.record.form.section.annexes.label": "",
20294
+ "editor.record.form.section.associatedResources.description": "",
20295
+ "editor.record.form.section.associatedResources.label": "",
20296
+ "editor.record.form.section.classification.description": "",
20297
+ "editor.record.form.section.classification.label": "",
20298
+ "editor.record.form.section.dataManagers.description": "",
20299
+ "editor.record.form.section.dataManagers.label": "",
20300
+ "editor.record.form.section.dataPointOfContact.description": "",
20301
+ "editor.record.form.section.dataPointOfContact.label": "",
20302
+ "editor.record.form.section.geographicalCoverage.label": "",
20303
+ "editor.record.form.section.useAndAccessConditions.label": "",
20304
+ "editor.record.form.metadata.title": "",
20305
+ "editor.record.form.record.updated": "",
20045
20306
  "editor.record.form.resourceUpdated": "",
20046
20307
  "editor.record.form.temporalExtents": "",
20047
20308
  "editor.record.form.temporalExtents.addDate": "",
20048
20309
  "editor.record.form.temporalExtents.addRange": "",
20049
20310
  "editor.record.form.temporalExtents.date": "",
20050
20311
  "editor.record.form.temporalExtents.range": "",
20312
+ "editor.record.form.unique.identifier": "",
20051
20313
  "editor.record.form.updateFrequency": "",
20052
20314
  "editor.record.form.updateFrequency.planned": "",
20053
20315
  "editor.record.loadError.body": "",
@@ -20063,6 +20325,7 @@ var pt = {
20063
20325
  "editor.record.saveStatus.draftWithChangesPending": "",
20064
20326
  "editor.record.saveStatus.recordUpToDate": "",
20065
20327
  "editor.record.upToDate": "",
20328
+ "editor.sidebar.menu.editor": "",
20066
20329
  "externalviewer.dataset.unnamed": "",
20067
20330
  "facets.block.title.OrgForResource": "",
20068
20331
  "facets.block.title.availableInServices": "",
@@ -20140,6 +20403,7 @@ var pt = {
20140
20403
  "pagination.pageOf": "",
20141
20404
  previous: previous,
20142
20405
  "record.action.download": "",
20406
+ "record.action.duplicate": "",
20143
20407
  "record.action.view": "",
20144
20408
  "record.externalViewer.open": "",
20145
20409
  "record.metadata.about": "",
@@ -20261,9 +20525,11 @@ var pt = {
20261
20525
  "search.filters.minimize": "",
20262
20526
  "search.filters.myRecords": "",
20263
20527
  "search.filters.myRecordsHelp": "",
20528
+ "search.filters.organization": "",
20264
20529
  "search.filters.otherRecords": "",
20530
+ "search.filters.producerOrg": "",
20265
20531
  "search.filters.publicationYear": "",
20266
- "search.filters.publisher": "",
20532
+ "search.filters.publisherOrg": "",
20267
20533
  "search.filters.representationType": "",
20268
20534
  "search.filters.resourceType": "",
20269
20535
  "search.filters.standard": "",
@@ -21270,6 +21536,17 @@ class Gn4Repository {
21270
21536
  .then((record) => [record, xml, isSavedAlready]);
21271
21537
  }));
21272
21538
  }
21539
+ openRecordForDuplication(uniqueIdentifier) {
21540
+ return this.loadRecordAsXml(uniqueIdentifier).pipe(switchMap(async (recordAsXml) => {
21541
+ const converter = findConverterForDocument(recordAsXml);
21542
+ const record = await converter.readRecord(recordAsXml);
21543
+ record.uniqueIdentifier = `TEMP-ID-${Date.now()}`;
21544
+ record.title = `${record.title} (Copy)`;
21545
+ const xml = await converter.writeRecord(record, recordAsXml);
21546
+ window.localStorage.setItem(this.getLocalStorageKeyForRecord(record.uniqueIdentifier), xml);
21547
+ return [record, xml, false];
21548
+ }));
21549
+ }
21273
21550
  serializeRecordToXml(record, referenceRecordSource) {
21274
21551
  // if there's a reference record, use that standard; otherwise, use iso19139
21275
21552
  const converter = referenceRecordSource
@@ -24632,6 +24909,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
24632
24909
  }]
24633
24910
  }] });
24634
24911
 
24912
+ class PopoverComponent {
24913
+ constructor(viewContainerRef, renderer) {
24914
+ this.viewContainerRef = viewContainerRef;
24915
+ this.renderer = renderer;
24916
+ }
24917
+ getContent() {
24918
+ if (this.content instanceof TemplateRef) {
24919
+ if (this.view) {
24920
+ this.view.destroy();
24921
+ }
24922
+ this.view = this.viewContainerRef.createEmbeddedView(this.content);
24923
+ this.view.detectChanges();
24924
+ const wrapper = this.renderer.createElement('div'); // Create a wrapper div
24925
+ this.view.rootNodes.forEach((node) => {
24926
+ this.renderer.appendChild(wrapper, node); // Append each root node to the wrapper
24927
+ });
24928
+ return wrapper;
24929
+ }
24930
+ return this.content;
24931
+ }
24932
+ ngAfterViewInit() {
24933
+ this.tippyInstance = tippy(this.popoverContent.nativeElement, {
24934
+ content: this.getContent(),
24935
+ allowHTML: true,
24936
+ theme: this.theme,
24937
+ });
24938
+ }
24939
+ ngOnChanges(changes) {
24940
+ if (changes['theme']) {
24941
+ this.theme = changes['theme'].currentValue;
24942
+ if (this.tippyInstance) {
24943
+ this.tippyInstance.setProps({ theme: this.theme });
24944
+ }
24945
+ }
24946
+ if (changes['content']) {
24947
+ this.content = changes['content'].currentValue;
24948
+ if (this.tippyInstance) {
24949
+ this.tippyInstance.setContent(this.getContent());
24950
+ }
24951
+ }
24952
+ }
24953
+ ngOnDestroy() {
24954
+ if (this.tippyInstance) {
24955
+ this.tippyInstance.destroy();
24956
+ }
24957
+ if (this.view) {
24958
+ this.view.destroy();
24959
+ }
24960
+ }
24961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
24962
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PopoverComponent, isStandalone: true, selector: "gn-ui-popover", inputs: { content: "content", theme: "theme" }, viewQueries: [{ propertyName: "popoverContent", first: true, predicate: ["popoverContent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span #popoverContent>\n <ng-content></ng-content>\n</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
24963
+ }
24964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PopoverComponent, decorators: [{
24965
+ type: Component,
24966
+ args: [{ selector: 'gn-ui-popover', standalone: true, imports: [CommonModule], template: "<span #popoverContent>\n <ng-content></ng-content>\n</span>\n" }]
24967
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }]; }, propDecorators: { popoverContent: [{
24968
+ type: ViewChild,
24969
+ args: ['popoverContent', { static: false }]
24970
+ }], content: [{
24971
+ type: Input
24972
+ }], theme: [{
24973
+ type: Input
24974
+ }] } });
24975
+
24635
24976
  class PopupAlertComponent {
24636
24977
  constructor(changeDetector) {
24637
24978
  this.changeDetector = changeDetector;
@@ -26746,11 +27087,11 @@ class MetadataQualityItemComponent {
26746
27087
  return `record.metadata.quality.${this.name}.${this.value ? 'success' : 'failed'}`;
26747
27088
  }
26748
27089
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26749
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: { name: "name", value: "value" }, ngImport: i0, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n", dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27090
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: { name: "name", value: "value" }, ngImport: i0, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined min-w-fit\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n", dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26750
27091
  }
26751
27092
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityItemComponent, decorators: [{
26752
27093
  type: Component,
26753
- args: [{ selector: 'gn-ui-metadata-quality-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n" }]
27094
+ args: [{ selector: 'gn-ui-metadata-quality-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined min-w-fit\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n" }]
26754
27095
  }], propDecorators: { name: [{
26755
27096
  type: Input
26756
27097
  }], value: [{
@@ -26761,7 +27102,6 @@ class MetadataQualityComponent {
26761
27102
  constructor() {
26762
27103
  this.smaller = false;
26763
27104
  this.items = [];
26764
- this.isMenuShown = false;
26765
27105
  }
26766
27106
  get qualityScore() {
26767
27107
  const qualityScore = this.metadata?.extras?.qualityScore;
@@ -26772,12 +27112,6 @@ class MetadataQualityComponent {
26772
27112
  get calculatedQualityScore() {
26773
27113
  return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
26774
27114
  }
26775
- showMenu() {
26776
- this.isMenuShown = true;
26777
- }
26778
- hideMenu() {
26779
- this.isMenuShown = false;
26780
- }
26781
27115
  add(name, value) {
26782
27116
  if (this.metadataQualityDisplay?.[name] !== false) {
26783
27117
  this.items.push({ name, value });
@@ -26801,11 +27135,11 @@ class MetadataQualityComponent {
26801
27135
  }
26802
27136
  }
26803
27137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26804
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"mb-6 metadata-quality\"\n (mouseenter)=\"showMenu()\"\n (mouseleave)=\"hideMenu()\"\n>\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n (focus)=\"showMenu()\"\n (blur)=\"hideMenu()\"\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n <div\n class=\"absolute z-10 bg-white border border-black border-opacity-35 rounded-lg shadow-lg p-5 whitespace-nowrap\"\n [class]=\"isMenuShown ? 'block' : 'hidden'\"\n >\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</div>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\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: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\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: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26805
27139
  }
26806
27140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityComponent, decorators: [{
26807
27141
  type: Component,
26808
- args: [{ selector: 'gn-ui-metadata-quality', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"mb-6 metadata-quality\"\n (mouseenter)=\"showMenu()\"\n (mouseleave)=\"hideMenu()\"\n>\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n (focus)=\"showMenu()\"\n (blur)=\"hideMenu()\"\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n <div\n class=\"absolute z-10 bg-white border border-black border-opacity-35 rounded-lg shadow-lg p-5 whitespace-nowrap\"\n [class]=\"isMenuShown ? 'block' : 'hidden'\"\n >\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</div>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
27142
+ args: [{ selector: 'gn-ui-metadata-quality', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
26809
27143
  }], propDecorators: { metadata: [{
26810
27144
  type: Input
26811
27145
  }], smaller: [{
@@ -27000,11 +27334,11 @@ class ApiCardComponent {
27000
27334
  }
27001
27335
  }
27002
27336
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27003
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\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: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27337
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\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: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27004
27338
  }
27005
27339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, decorators: [{
27006
27340
  type: Component,
27007
- args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n" }]
27341
+ args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
27008
27342
  }], propDecorators: { link: [{
27009
27343
  type: Input
27010
27344
  }], currentLink: [{
@@ -28259,11 +28593,11 @@ class UserPreviewComponent {
28259
28593
  return (this.user.name + ' ' + this.user.surname).trim();
28260
28594
  }
28261
28595
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28262
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28596
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28263
28597
  }
28264
28598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, decorators: [{
28265
28599
  type: Component,
28266
- args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28600
+ args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28267
28601
  }], propDecorators: { user: [{
28268
28602
  type: Input
28269
28603
  }], avatarPlaceholder: [{
@@ -28403,6 +28737,7 @@ class UiElementsModule {
28403
28737
  UiInputsModule,
28404
28738
  FormsModule,
28405
28739
  NgOptimizedImage,
28740
+ PopoverComponent,
28406
28741
  MarkdownParserComponent,
28407
28742
  ThumbnailComponent,
28408
28743
  TimeSincePipe,
@@ -28437,6 +28772,7 @@ class UiElementsModule {
28437
28772
  RouterModule,
28438
28773
  UiInputsModule,
28439
28774
  FormsModule,
28775
+ PopoverComponent,
28440
28776
  ThumbnailComponent,
28441
28777
  BadgeComponent,
28442
28778
  MaxLinesComponent] }); }
@@ -28456,6 +28792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28456
28792
  UiInputsModule,
28457
28793
  FormsModule,
28458
28794
  NgOptimizedImage,
28795
+ PopoverComponent,
28459
28796
  MarkdownParserComponent,
28460
28797
  ThumbnailComponent,
28461
28798
  TimeSincePipe,
@@ -28612,6 +28949,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28612
28949
  }]
28613
28950
  }] });
28614
28951
 
28952
+ class ActionMenuComponent {
28953
+ constructor() {
28954
+ this.duplicate = new EventEmitter();
28955
+ }
28956
+ openMenu() {
28957
+ this.trigger.openMenu();
28958
+ }
28959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28960
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", outputs: { duplicate: "duplicate" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2$5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28961
+ }
28962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, decorators: [{
28963
+ type: Component,
28964
+ args: [{ selector: 'gn-ui-action-menu', standalone: true, imports: [MatIconModule, ButtonComponent, MatMenuModule, TranslateModule], template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n" }]
28965
+ }], propDecorators: { duplicate: [{
28966
+ type: Output
28967
+ }], trigger: [{
28968
+ type: ViewChild,
28969
+ args: [MatMenuTrigger]
28970
+ }] } });
28971
+
28615
28972
  class ResultsTableComponent {
28616
28973
  constructor() {
28617
28974
  this.records = [];
@@ -28621,6 +28978,7 @@ class ResultsTableComponent {
28621
28978
  // emits the column (field) as well as the order
28622
28979
  this.sortByChange = new EventEmitter();
28623
28980
  this.recordClick = new EventEmitter();
28981
+ this.duplicateRecord = new EventEmitter();
28624
28982
  this.recordsSelectedChange = new EventEmitter();
28625
28983
  }
28626
28984
  dateToString(date) {
@@ -28655,6 +29013,9 @@ class ResultsTableComponent {
28655
29013
  handleRecordClick(item) {
28656
29014
  this.recordClick.emit(item);
28657
29015
  }
29016
+ handleDuplicate(item) {
29017
+ this.duplicateRecord.emit(item);
29018
+ }
28658
29019
  setSortBy(col, order) {
28659
29020
  this.sortByChange.emit([col, order]);
28660
29021
  }
@@ -28690,7 +29051,7 @@ class ResultsTableComponent {
28690
29051
  return !allSelected && someSelected;
28691
29052
  }
28692
29053
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28693
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
29054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", outputs: ["duplicate"] }] }); }
28694
29055
  }
28695
29056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, decorators: [{
28696
29057
  type: Component,
@@ -28702,7 +29063,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28702
29063
  MatIconModule,
28703
29064
  TranslateModule,
28704
29065
  BadgeComponent,
28705
- ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
29066
+ ActionMenuComponent,
29067
+ ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
28706
29068
  }], propDecorators: { records: [{
28707
29069
  type: Input
28708
29070
  }], selectedRecordsIdentifiers: [{
@@ -28715,6 +29077,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28715
29077
  type: Output
28716
29078
  }], recordClick: [{
28717
29079
  type: Output
29080
+ }], duplicateRecord: [{
29081
+ type: Output
28718
29082
  }], recordsSelectedChange: [{
28719
29083
  type: Output
28720
29084
  }] } });
@@ -30489,12 +30853,14 @@ marker('search.filters.keyword');
30489
30853
  marker('search.filters.isSpatial');
30490
30854
  marker('search.filters.license');
30491
30855
  marker('search.filters.publicationYear');
30492
- marker('search.filters.publisher');
30856
+ marker('search.filters.organization');
30493
30857
  marker('search.filters.representationType');
30494
30858
  marker('search.filters.resourceType');
30495
30859
  marker('search.filters.standard');
30496
30860
  marker('search.filters.topic');
30497
30861
  marker('search.filters.contact');
30862
+ marker('search.filters.producerOrg');
30863
+ marker('search.filters.publisherOrg');
30498
30864
  class FieldsService {
30499
30865
  get supportedFields() {
30500
30866
  return Object.keys(this.fields);
@@ -30502,7 +30868,7 @@ class FieldsService {
30502
30868
  constructor(injector) {
30503
30869
  this.injector = injector;
30504
30870
  this.fields = {
30505
- publisher: new OrganizationSearchField(this.injector),
30871
+ organization: new OrganizationSearchField(this.injector),
30506
30872
  format: new SimpleSearchField('format', this.injector, 'asc'),
30507
30873
  resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
30508
30874
  representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
@@ -30515,6 +30881,8 @@ class FieldsService {
30515
30881
  q: new FullTextSearchField(),
30516
30882
  license: new LicenseSearchField(this.injector),
30517
30883
  owner: new OwnerSearchField(this.injector),
30884
+ producerOrg: new MultilingualSearchField('originatorOrgForResourceObject', this.injector, 'asc', 'key'),
30885
+ publisherOrg: new MultilingualSearchField('distributorOrgForResourceObject', this.injector, 'asc', 'key'),
30518
30886
  };
30519
30887
  }
30520
30888
  getAvailableValues(fieldName) {
@@ -30692,6 +31060,7 @@ class ResultsTableContainerComponent {
30692
31060
  this.selectionService = selectionService;
30693
31061
  this.recordsRepository = recordsRepository;
30694
31062
  this.recordClick = new EventEmitter();
31063
+ this.duplicateRecord = new EventEmitter();
30695
31064
  this.records$ = this.searchFacade.results$;
30696
31065
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
30697
31066
  this.sortBy$ = this.searchFacade.sortBy$;
@@ -30700,6 +31069,9 @@ class ResultsTableContainerComponent {
30700
31069
  handleRecordClick(item) {
30701
31070
  this.recordClick.emit(item);
30702
31071
  }
31072
+ handleDuplicateRecord(item) {
31073
+ this.duplicateRecord.emit(item);
31074
+ }
30703
31075
  handleSortByChange(col, order) {
30704
31076
  this.searchService.setSortBy([order, col]);
30705
31077
  }
@@ -30712,13 +31084,15 @@ class ResultsTableContainerComponent {
30712
31084
  }
30713
31085
  }
30714
31086
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
30715
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "recordsSelectedChange"] }] }); }
31087
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "recordsSelectedChange"] }] }); }
30716
31088
  }
30717
31089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
30718
31090
  type: Component,
30719
- args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
31091
+ args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
30720
31092
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }]; }, propDecorators: { recordClick: [{
30721
31093
  type: Output
31094
+ }], duplicateRecord: [{
31095
+ type: Output
30722
31096
  }] } });
30723
31097
 
30724
31098
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
@@ -31018,7 +31392,7 @@ class LayersPanelComponent {
31018
31392
  this.mapFacade.addLayer(layer);
31019
31393
  }
31020
31394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
31021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31022
31396
  }
31023
31397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, decorators: [{
31024
31398
  type: Component,
@@ -31760,7 +32134,7 @@ class TableComponent {
31760
32134
  return rowIdPrefix + id;
31761
32135
  }
31762
32136
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
31763
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$6.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$7.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$7.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31764
32138
  }
31765
32139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
31766
32140
  type: Component,
@@ -33906,37 +34280,54 @@ const GN_UI_VERSION = new InjectionToken('gnUiVersion');
33906
34280
 
33907
34281
  const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
33908
34282
  class DataViewPermalinkComponent {
34283
+ set viewType(value) {
34284
+ this.viewType$.next(value);
34285
+ }
33909
34286
  constructor(config, wcEmbedderBaseUrl, version, facade) {
33910
34287
  this.config = config;
33911
34288
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33912
34289
  this.version = version;
33913
34290
  this.facade = facade;
34291
+ this.viewType$ = new BehaviorSubject('map');
33914
34292
  this.permalinkUrl$ = combineLatest([
34293
+ this.viewType$,
33915
34294
  this.facade.chartConfig$,
33916
34295
  this.facade.metadata$,
33917
- ]).pipe(map$2(([config, metadata]) => {
33918
- if (config) {
33919
- const { aggregation, xProperty, yProperty, chartType } = config;
33920
- const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
33921
- url.searchParams.set('v', `${this.version}`);
33922
- url.searchParams.append('e', `gn-dataset-view-chart`);
33923
- url.searchParams.append('a', `api-url=${this.config.basePath}`);
33924
- url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
33925
- url.searchParams.append('a', `primary-color=#0f4395`);
33926
- url.searchParams.append('a', `secondary-color=#8bc832`);
33927
- url.searchParams.append('a', `main-color=#555`);
33928
- url.searchParams.append('a', `background-color=#fdfbff`);
33929
- url.searchParams.append('a', `aggregation=${aggregation}`);
33930
- url.searchParams.append('a', `x-property=${xProperty}`);
33931
- url.searchParams.append('a', `y-property=${yProperty}`);
33932
- url.searchParams.append('a', `chart-type=${chartType}`);
33933
- return url.toString();
34296
+ ]).pipe(map$2(([viewType, config, metadata]) => {
34297
+ const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
34298
+ url.searchParams.set('v', `${this.version}`);
34299
+ if (viewType === 'chart') {
34300
+ if (config) {
34301
+ const { aggregation, xProperty, yProperty, chartType } = config;
34302
+ url.searchParams.append('e', `gn-dataset-view-chart`);
34303
+ url.searchParams.append('a', `aggregation=${aggregation}`);
34304
+ url.searchParams.append('a', `x-property=${xProperty}`);
34305
+ url.searchParams.append('a', `y-property=${yProperty}`);
34306
+ url.searchParams.append('a', `chart-type=${chartType}`);
34307
+ }
34308
+ else {
34309
+ return '';
34310
+ }
33934
34311
  }
33935
- return '';
34312
+ else if (viewType === 'table') {
34313
+ // table
34314
+ url.searchParams.append('e', `gn-dataset-view-table`);
34315
+ }
34316
+ else {
34317
+ // map
34318
+ url.searchParams.append('e', `gn-dataset-view-map`);
34319
+ }
34320
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
34321
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
34322
+ url.searchParams.append('a', `primary-color=#0f4395`);
34323
+ url.searchParams.append('a', `secondary-color=#8bc832`);
34324
+ url.searchParams.append('a', `main-color=#555`);
34325
+ url.searchParams.append('a', `background-color=#fdfbff`);
34326
+ return url.toString();
33936
34327
  }));
33937
34328
  }
33938
34329
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
33939
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33940
34331
  }
33941
34332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
33942
34333
  type: Component,
@@ -33952,37 +34343,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33952
34343
  }] }, { type: undefined, decorators: [{
33953
34344
  type: Inject,
33954
34345
  args: [GN_UI_VERSION]
33955
- }] }, { type: MdViewFacade }]; } });
34346
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34347
+ type: Input
34348
+ }] } });
33956
34349
 
33957
34350
  class DataViewWebComponentComponent {
34351
+ set viewType(value) {
34352
+ this.viewType$.next(value);
34353
+ }
33958
34354
  constructor(config, version, facade) {
33959
34355
  this.config = config;
33960
34356
  this.version = version;
33961
34357
  this.facade = facade;
33962
- this.webComponentHtml$ = combineLatest(this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([config, metadata]) => {
33963
- if (config) {
33964
- const { aggregation, xProperty, yProperty, chartType } = config;
34358
+ this.viewType$ = new BehaviorSubject('map');
34359
+ this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
34360
+ if (viewType === 'chart') {
34361
+ if (config) {
34362
+ const { aggregation, xProperty, yProperty, chartType } = config;
34363
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34364
+ <gn-dataset-view-chart
34365
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34366
+ dataset-id="${metadata.uniqueIdentifier}"
34367
+ aggregation="${aggregation}"
34368
+ x-property="${xProperty}"
34369
+ y-property="${yProperty}"
34370
+ chart-type="${chartType}"
34371
+ primary-color="#0f4395"
34372
+ secondary-color="#8bc832"
34373
+ main-color="#555"
34374
+ background-color="#fdfbff"
34375
+ main-font="'Inter', sans-serif"
34376
+ title-font="'DM Serif Display', serif"
34377
+ ></gn-dataset-view-chart>`;
34378
+ }
34379
+ return '';
34380
+ }
34381
+ else if (viewType === 'table') {
33965
34382
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
33966
- <gn-dataset-view-chart
34383
+ <gn-dataset-view-table
34384
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34385
+ dataset-id="${metadata.uniqueIdentifier}"
34386
+ primary-color="#0f4395"
34387
+ secondary-color="#8bc832"
34388
+ main-color="#555"
34389
+ background-color="#fdfbff"
34390
+ main-font="'Inter', sans-serif"
34391
+ title-font="'DM Serif Display', serif"
34392
+ ></gn-dataset-view-table>`;
34393
+ }
34394
+ else {
34395
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34396
+ <gn-dataset-view-map
33967
34397
  api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
33968
34398
  dataset-id="${metadata.uniqueIdentifier}"
33969
- aggregation="${aggregation}"
33970
- x-property="${xProperty}"
33971
- y-property="${yProperty}"
33972
- chart-type="${chartType}"
33973
34399
  primary-color="#0f4395"
33974
34400
  secondary-color="#8bc832"
33975
34401
  main-color="#555"
33976
34402
  background-color="#fdfbff"
33977
34403
  main-font="'Inter', sans-serif"
33978
34404
  title-font="'DM Serif Display', serif"
33979
- ></gn-dataset-view-chart>`;
34405
+ ></gn-dataset-view-map>`;
33980
34406
  }
33981
- return '';
33982
34407
  }));
33983
34408
  }
33984
34409
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
33985
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34410
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33986
34411
  }
33987
34412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
33988
34413
  type: Component,
@@ -33993,24 +34418,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33993
34418
  }] }, { type: undefined, decorators: [{
33994
34419
  type: Inject,
33995
34420
  args: [GN_UI_VERSION]
33996
- }] }, { type: MdViewFacade }]; } });
34421
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34422
+ type: Input
34423
+ }] } });
33997
34424
 
33998
34425
  class DataViewShareComponent {
34426
+ set viewType(value) {
34427
+ this._viewType = value;
34428
+ }
34429
+ get viewType() {
34430
+ return this._viewType;
34431
+ }
33999
34432
  constructor(wcEmbedderBaseUrl) {
34000
34433
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
34001
34434
  }
34002
34435
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, deps: [{ token: WEB_COMPONENT_EMBEDDER_URL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
34003
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$5.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink" }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", inputs: { viewType: "viewType" }, ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: ["viewType"] }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: ["viewType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34004
34437
  }
34005
34438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, decorators: [{
34006
34439
  type: Component,
34007
- args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
34440
+ args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
34008
34441
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
34009
34442
  type: Optional
34010
34443
  }, {
34011
34444
  type: Inject,
34012
34445
  args: [WEB_COMPONENT_EMBEDDER_URL]
34013
- }] }]; } });
34446
+ }] }]; }, propDecorators: { viewType: [{
34447
+ type: Input
34448
+ }] } });
34014
34449
 
34015
34450
  class FeatureRecordModule {
34016
34451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeatureRecordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -34100,75 +34535,159 @@ const saveRecord = createAction('[Editor] Save record');
34100
34535
  const saveRecordSuccess = createAction('[Editor] Save record success');
34101
34536
  const saveRecordFailure = createAction('[Editor] Save record failure', props());
34102
34537
  const draftSaveSuccess = createAction('[Editor] Draft save success');
34538
+ const setCurrentPage = createAction('[Editor] Set current page', props());
34103
34539
 
34104
- const DEFAULT_FIELDS = [
34105
- {
34106
- model: 'title',
34107
- formFieldConfig: {
34108
- labelKey: 'Metadata title',
34109
- type: 'text',
34110
- },
34540
+ /**
34541
+ * This file contains the configuration of the fields that will be displayed in the editor.
34542
+ * To add a new field, you need to create a new EditorField object in the fields part of this file.
34543
+ * Then add it to the corresponding section in the sections part of this file.
34544
+ * Finally, add the section to the corresponding page in the pages part of this file.
34545
+ */
34546
+ /************************************************************
34547
+ *************** FIELDS *****************
34548
+ ************************************************************
34549
+ */
34550
+ const RECORD_LICENSE_FIELD = {
34551
+ model: 'licenses',
34552
+ formFieldConfig: {
34553
+ labelKey: marker('editor.record.form.field.license'),
34111
34554
  },
34112
- {
34113
- model: 'abstract',
34114
- formFieldConfig: {
34115
- labelKey: 'Abstract',
34116
- type: 'rich',
34117
- },
34555
+ };
34556
+ const RECORD_KEYWORDS_FIELD = {
34557
+ model: 'keywords',
34558
+ formFieldConfig: {
34559
+ labelKey: marker('editor.record.form.field.keywords'),
34118
34560
  },
34119
- {
34120
- model: 'uniqueIdentifier',
34121
- formFieldConfig: {
34122
- labelKey: 'Unique identifier',
34123
- type: 'text',
34124
- locked: true,
34125
- },
34561
+ };
34562
+ const RECORD_UNIQUE_IDENTIFIER_FIELD = {
34563
+ model: 'uniqueIdentifier',
34564
+ formFieldConfig: {
34565
+ labelKey: marker('editor.record.form.field.uniqueIdentifier'),
34566
+ locked: true,
34126
34567
  },
34127
- {
34128
- model: 'recordUpdated',
34129
- formFieldConfig: {
34130
- labelKey: 'Record Updated',
34131
- type: 'text',
34132
- locked: true,
34133
- },
34134
- onSaveProcess: '${dateNow()}',
34568
+ };
34569
+ const RECORD_RESOURCE_UPDATED_FIELD = {
34570
+ model: 'resourceUpdated',
34571
+ formFieldConfig: {
34572
+ labelKey: marker('editor.record.form.field.resourceUpdated'),
34135
34573
  },
34136
- {
34137
- model: 'licenses',
34138
- formFieldConfig: {
34139
- labelKey: marker('editor.record.form.license'),
34140
- type: 'list',
34141
- },
34574
+ };
34575
+ const RECORD_UPDATED_FIELD = {
34576
+ model: 'recordUpdated',
34577
+ formFieldConfig: {
34578
+ labelKey: marker('editor.record.form.field.recordUpdated'),
34579
+ locked: true,
34142
34580
  },
34143
- {
34144
- model: 'resourceUpdated',
34145
- formFieldConfig: {
34146
- labelKey: marker('editor.record.form.resourceUpdated'),
34147
- type: 'date',
34148
- },
34581
+ onSaveProcess: '${dateNow()}',
34582
+ };
34583
+ const RECORD_UPDATE_FREQUENCY_FIELD = {
34584
+ model: 'updateFrequency',
34585
+ formFieldConfig: {
34586
+ labelKey: marker('editor.record.form.field.updateFrequency'),
34149
34587
  },
34150
- {
34151
- model: 'updateFrequency',
34152
- formFieldConfig: {
34153
- labelKey: marker('editor.record.form.updateFrequency'),
34154
- type: 'text',
34155
- },
34588
+ };
34589
+ const RECORD_TEMPORAL_EXTENTS_FIELD = {
34590
+ model: 'temporalExtents',
34591
+ formFieldConfig: {
34592
+ labelKey: marker('editor.record.form.field.temporalExtents'),
34156
34593
  },
34157
- {
34158
- model: 'temporalExtents',
34159
- formFieldConfig: {
34160
- labelKey: marker('editor.record.form.temporalExtents'),
34161
- type: 'list',
34162
- },
34594
+ };
34595
+ const RECORD_TITLE_FIELD = {
34596
+ model: 'title',
34597
+ formFieldConfig: {
34598
+ labelKey: marker('editor.record.form.field.title'),
34163
34599
  },
34164
- {
34165
- model: 'keywords',
34166
- formFieldConfig: {
34167
- labelKey: marker('editor.record.form.keywords'),
34168
- type: 'list',
34169
- },
34600
+ };
34601
+ const RECORD_ABSTRACT_FIELD = {
34602
+ model: 'abstract',
34603
+ formFieldConfig: {
34604
+ labelKey: marker('editor.record.form.field.abstract'),
34170
34605
  },
34171
- ];
34606
+ };
34607
+ /************************************************************
34608
+ *************** SECTIONS *****************
34609
+ ************************************************************
34610
+ */
34611
+ const TITLE_SECTION = {
34612
+ hidden: false,
34613
+ fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD],
34614
+ };
34615
+ const ABOUT_SECTION = {
34616
+ labelKey: marker('editor.record.form.section.about.label'),
34617
+ descriptionKey: marker('editor.record.form.section.about.description'),
34618
+ hidden: false,
34619
+ fields: [
34620
+ RECORD_UNIQUE_IDENTIFIER_FIELD,
34621
+ RECORD_RESOURCE_UPDATED_FIELD,
34622
+ RECORD_UPDATED_FIELD,
34623
+ RECORD_UPDATE_FREQUENCY_FIELD,
34624
+ RECORD_TEMPORAL_EXTENTS_FIELD,
34625
+ ],
34626
+ };
34627
+ const GEOGRAPHICAL_COVERAGE_SECTION = {
34628
+ labelKey: marker('editor.record.form.section.geographicalCoverage.label'),
34629
+ hidden: false,
34630
+ fields: [],
34631
+ };
34632
+ const ASSOCIATED_RESOURCES_SECTION = {
34633
+ labelKey: marker('editor.record.form.section.associatedResources.label'),
34634
+ descriptionKey: marker('editor.record.form.section.associatedResources.description'),
34635
+ hidden: false,
34636
+ fields: [],
34637
+ };
34638
+ const ANNEXES_SECTION = {
34639
+ labelKey: marker('editor.record.form.section.annexes.label'),
34640
+ hidden: false,
34641
+ fields: [],
34642
+ };
34643
+ const CLASSIFICATION_SECTION = {
34644
+ labelKey: marker('editor.record.form.section.classification.label'),
34645
+ descriptionKey: marker('editor.record.form.section.classification.description'),
34646
+ hidden: false,
34647
+ fields: [RECORD_KEYWORDS_FIELD],
34648
+ };
34649
+ const USE_AND_ACCESS_CONDITIONS_SECTION = {
34650
+ labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
34651
+ hidden: false,
34652
+ fields: [RECORD_LICENSE_FIELD],
34653
+ };
34654
+ const DATA_MANAGERS_SECTION = {
34655
+ labelKey: marker('editor.record.form.section.dataManagers.label'),
34656
+ descriptionKey: marker('editor.record.form.section.dataManagers.description'),
34657
+ hidden: false,
34658
+ fields: [],
34659
+ };
34660
+ const DATA_POINT_OF_CONTACT_SECTION = {
34661
+ labelKey: marker('editor.record.form.section.dataPointOfContact.label'),
34662
+ descriptionKey: marker('editor.record.form.section.dataPointOfContact.description'),
34663
+ hidden: false,
34664
+ fields: [],
34665
+ };
34666
+ /************************************************************
34667
+ *************** PAGES *****************
34668
+ ************************************************************
34669
+ */
34670
+ const DEFAULT_CONFIGURATION = {
34671
+ pages: [
34672
+ {
34673
+ labelKey: marker('editor.record.form.page.description'),
34674
+ sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
34675
+ },
34676
+ {
34677
+ labelKey: marker('editor.record.form.page.ressources'),
34678
+ sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
34679
+ },
34680
+ {
34681
+ labelKey: marker('editor.record.form.page.accessAndContact'),
34682
+ sections: [
34683
+ CLASSIFICATION_SECTION,
34684
+ USE_AND_ACCESS_CONDITIONS_SECTION,
34685
+ DATA_MANAGERS_SECTION,
34686
+ DATA_POINT_OF_CONTACT_SECTION,
34687
+ ],
34688
+ },
34689
+ ],
34690
+ };
34172
34691
 
34173
34692
  const EDITOR_FEATURE_KEY = 'editor';
34174
34693
  const initialEditorState = {
@@ -34178,7 +34697,8 @@ const initialEditorState = {
34178
34697
  saving: false,
34179
34698
  saveError: null,
34180
34699
  changedSinceSave: false,
34181
- fieldsConfig: DEFAULT_FIELDS,
34700
+ editorConfig: DEFAULT_CONFIGURATION,
34701
+ currentPage: 0,
34182
34702
  };
34183
34703
  const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
34184
34704
  ...state,
@@ -34208,6 +34728,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
34208
34728
  })), on(markRecordAsChanged, (state) => ({
34209
34729
  ...state,
34210
34730
  changedSinceSave: true,
34731
+ })), on(setCurrentPage, (state, { page }) => ({
34732
+ ...state,
34733
+ currentPage: page,
34211
34734
  })));
34212
34735
  function editorReducer(state, action) {
34213
34736
  return reducer(state, action);
@@ -34220,11 +34743,21 @@ const selectRecordSaving = createSelector(selectEditorState, (state) => state.sa
34220
34743
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
34221
34744
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
34222
34745
  const selectRecordAlreadySavedOnce = createSelector(selectEditorState, (state) => state.alreadySavedOnce);
34223
- const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
34224
- const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
34225
- config: fieldConfig,
34226
- value: state.record?.[fieldConfig.model] ?? null,
34227
- })));
34746
+ const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
34747
+ const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
34748
+ const selectRecordSections = createSelector(selectEditorState, (state) => {
34749
+ const currentPage = state.editorConfig.pages[state.currentPage];
34750
+ if (!currentPage) {
34751
+ return [];
34752
+ }
34753
+ return currentPage.sections.map((section) => ({
34754
+ ...section,
34755
+ fieldsWithValues: section.fields.map((fieldConfig) => ({
34756
+ config: fieldConfig,
34757
+ value: state.record?.[fieldConfig.model] ?? null,
34758
+ })),
34759
+ }));
34760
+ });
34228
34761
 
34229
34762
  class EditorFacade {
34230
34763
  constructor() {
@@ -34237,8 +34770,10 @@ class EditorFacade {
34237
34770
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
34238
34771
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
34239
34772
  this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
34240
- this.recordFields$ = this.store.pipe(select(selectRecordFields));
34773
+ this.currentSections$ = this.store.pipe(select(selectRecordSections));
34241
34774
  this.draftSaveSuccess$ = this.actions$.pipe(ofType(draftSaveSuccess));
34775
+ this.currentPage$ = this.store.pipe(select(selectCurrentPage));
34776
+ this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
34242
34777
  }
34243
34778
  openRecord(record, recordSource, alreadySavedOnce) {
34244
34779
  this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
@@ -34249,6 +34784,9 @@ class EditorFacade {
34249
34784
  updateRecordField(field, value) {
34250
34785
  this.store.dispatch(updateRecordField({ field, value }));
34251
34786
  }
34787
+ setCurrentPage(page) {
34788
+ this.store.dispatch(setCurrentPage({ page }));
34789
+ }
34252
34790
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34253
34791
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade }); }
34254
34792
  }
@@ -34276,12 +34814,13 @@ class EditorService {
34276
34814
  // returns the record as it was when saved, alongside its source
34277
34815
  saveRecord(record, fieldsConfig, generateNewUniqueIdentifier = false) {
34278
34816
  const savedRecord = { ...record };
34817
+ const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
34279
34818
  // run onSave processes
34280
- for (const field of fieldsConfig) {
34819
+ for (const field of fields) {
34281
34820
  if (field.onSaveProcess && field.model) {
34282
34821
  const evaluator = evaluate(field.onSaveProcess);
34283
34822
  savedRecord[field.model] = evaluator({
34284
- config: field,
34823
+ model: field.model,
34285
34824
  value: record[field.model],
34286
34825
  });
34287
34826
  }
@@ -34318,7 +34857,7 @@ class EditorEffects {
34318
34857
  this.editorService = inject(EditorService);
34319
34858
  this.recordsRepository = inject(RecordsRepositoryInterface);
34320
34859
  this.store = inject(Store);
34321
- this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34860
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectEditorConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34322
34861
  .saveRecord(record, fieldsConfig, !alreadySavedOnce)
34323
34862
  .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
34324
34863
  record,
@@ -35271,7 +35810,7 @@ class FormFieldComponent {
35271
35810
  return this.model === 'title' || this.model === 'abstract';
35272
35811
  }
35273
35812
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35274
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35813
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35275
35814
  }
35276
35815
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
35277
35816
  type: Component,
@@ -35294,7 +35833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35294
35833
  FormFieldArrayComponent,
35295
35834
  FormFieldKeywordsComponent,
35296
35835
  TranslateModule,
35297
- ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35836
+ ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35298
35837
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
35299
35838
  type: Input
35300
35839
  }], config: [{
@@ -35311,23 +35850,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35311
35850
  class RecordFormComponent {
35312
35851
  constructor(facade) {
35313
35852
  this.facade = facade;
35314
- this.fields$ = this.facade.recordFields$;
35315
35853
  }
35316
- handleFieldValueChange(field, newValue) {
35317
- if (!field.config.model) {
35854
+ handleFieldValueChange(model, newValue) {
35855
+ if (!model) {
35318
35856
  return;
35319
35857
  }
35320
- this.facade.updateRecordField(field.config.model, newValue);
35858
+ this.facade.updateRecordField(model, newValue);
35321
35859
  }
35322
35860
  fieldTracker(index, field) {
35323
35861
  return field.config.model;
35324
35862
  }
35863
+ sectionTracker(index, section) {
35864
+ return section.labelKey;
35865
+ }
35325
35866
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
35326
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", 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 [model]=\"field.config.model\"\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: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35867
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35327
35868
  }
35328
35869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, decorators: [{
35329
35870
  type: Component,
35330
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent], 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 [model]=\"field.config.model\"\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" }]
35871
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n" }]
35331
35872
  }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
35332
35873
 
35333
35874
  const ROUTER_STATE_KEY = 'router';
@@ -35710,5 +36251,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35710
36251
  * Generated bundle index. Do not edit.
35711
36252
  */
35712
36253
 
35713
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, BlockListComponent, 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, DatePickerComponent, 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, ErrorComponent, 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, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, 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, LicenseSearchField, 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, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, 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, ResultsTableContainerComponent, 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, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, 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, TranslatedSearchField, 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, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, 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, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, 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, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectRecordSource, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
36254
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, 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, DatePickerComponent, 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, ErrorComponent, 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, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, 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, LicenseSearchField, 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, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, 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, ResultsTableContainerComponent, 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, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, 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, TranslatedSearchField, 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, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, 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, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setCurrentPage, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
35714
36255
  //# sourceMappingURL=geonetwork-ui.mjs.map