geonetwork-ui 2.4.0-dev.81e72b2e → 2.4.0-dev.83f48876

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/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -5
  6. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  7. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  8. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
  9. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -6
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +7 -2
  13. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  14. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
  15. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -2
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +1 -2
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +11 -7
  20. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  21. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +143 -60
  22. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  23. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  24. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +4 -3
  25. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
  26. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
  27. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
  28. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +9 -3
  29. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
  30. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  31. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -4
  32. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -4
  33. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  34. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +3 -3
  35. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
  36. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
  37. package/esm2022/translations/de.json +77 -39
  38. package/esm2022/translations/en.json +47 -12
  39. package/esm2022/translations/es.json +47 -9
  40. package/esm2022/translations/fr.json +46 -11
  41. package/esm2022/translations/it.json +47 -9
  42. package/esm2022/translations/nl.json +47 -9
  43. package/esm2022/translations/pt.json +47 -9
  44. package/fesm2022/geonetwork-ui.mjs +787 -306
  45. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  46. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  47. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  50. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  51. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  52. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  53. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -1
  54. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  55. package/libs/common/domain/src/lib/platform.service.interface.d.ts +2 -1
  56. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  57. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
  58. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  59. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  60. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
  62. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  63. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
  64. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  66. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  68. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  70. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  72. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  74. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
  75. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  76. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
  77. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  78. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  79. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  80. package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
  81. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  82. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
  83. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  84. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  85. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  86. package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
  87. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  88. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  89. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  90. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  91. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  92. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  93. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  94. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
  95. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  96. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  97. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  98. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  99. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
  100. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  101. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
  102. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  103. package/package.json +1 -1
  104. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  105. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  106. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  107. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
  108. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +26 -15
  109. package/src/libs/common/domain/src/lib/platform.service.interface.ts +5 -1
  110. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
  111. package/src/libs/common/fixtures/src/index.ts +2 -0
  112. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  113. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  114. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  115. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  116. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  117. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
  118. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
  119. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
  120. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  121. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  122. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  123. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +8 -6
  124. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
  125. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
  126. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
  127. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
  128. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
  129. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  130. package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
  131. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
  132. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  133. package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
  134. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  135. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  136. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  137. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  138. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  139. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
  140. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  141. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  142. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -1
  143. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  144. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  145. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  146. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  147. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.html +1 -0
  148. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  149. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
  150. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
  151. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
  152. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
  153. package/tailwind.base.css +2 -1
  154. package/translations/de.json +77 -39
  155. package/translations/en.json +47 -12
  156. package/translations/es.json +47 -9
  157. package/translations/fr.json +46 -11
  158. package/translations/it.json +47 -9
  159. package/translations/nl.json +47 -9
  160. package/translations/pt.json +47 -9
  161. package/translations/sk.json +47 -9
  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
@@ -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';
@@ -81,6 +81,8 @@ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/c
81
81
  import EmblaCarousel from 'embla-carousel';
82
82
  import { formatDistance } from 'date-fns';
83
83
  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';
84
+ import * as i2$5 from '@angular/material/menu';
85
+ import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
84
86
  import * as i1$8 from '@ngrx/effects';
85
87
  import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
86
88
  import tippy from 'tippy.js';
@@ -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:",
@@ -17433,7 +17435,7 @@ var de = {
17433
17435
  "datahub.header.lastRecords": "Die neuesten",
17434
17436
  "datahub.header.myfavorites": "Meine Favoriten",
17435
17437
  "datahub.header.news": "Startseite",
17436
- "datahub.header.organisations": "Organisationen",
17438
+ "datahub.header.organizations": "Organisationen",
17437
17439
  "datahub.header.popularRecords": "Die beliebtesten",
17438
17440
  "datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
17439
17441
  "datahub.news.contact.contactus": "Kontaktieren Sie uns",
@@ -17469,37 +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,
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",
17472
17488
  "editor.record.form.license": "Lizenz",
17473
- "editor.record.form.license.cc-by": "",
17474
- "editor.record.form.license.cc-by-sa": "",
17475
- "editor.record.form.license.cc-zero": "",
17476
- "editor.record.form.license.etalab": "",
17477
- "editor.record.form.license.etalab-v2": "",
17478
- "editor.record.form.license.odbl": "",
17479
- "editor.record.form.license.odc-by": "",
17480
- "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",
17481
17497
  "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
17482
- "editor.record.form.resourceUpdated": "",
17483
- "editor.record.form.temporalExtents": "",
17484
- "editor.record.form.temporalExtents.addDate": "",
17485
- "editor.record.form.temporalExtents.addRange": "",
17486
- "editor.record.form.temporalExtents.date": "",
17487
- "editor.record.form.temporalExtents.range": "",
17488
- "editor.record.form.updateFrequency": "",
17489
- "editor.record.form.updateFrequency.planned": "",
17490
- "editor.record.loadError.body": "",
17491
- "editor.record.loadError.closeMessage": "",
17492
- "editor.record.loadError.title": "",
17493
- "editor.record.publish": "",
17494
- "editor.record.publishError.body": "",
17495
- "editor.record.publishError.closeMessage": "",
17496
- "editor.record.publishError.title": "",
17497
- "editor.record.publishSuccess.body": "",
17498
- "editor.record.publishSuccess.title": "",
17499
- "editor.record.saveStatus.asDraftOnly": "",
17500
- "editor.record.saveStatus.draftWithChangesPending": "",
17501
- "editor.record.saveStatus.recordUpToDate": "",
17502
- "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": "",
17503
17539
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
17504
17540
  "facets.block.title.OrgForResource": "Organisation",
17505
17541
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -17568,17 +17604,16 @@ var de = {
17568
17604
  "organisations.sortBy.nameDesc": "Name Z → A",
17569
17605
  "organisations.sortBy.recordCountAsc": "Veröffentlichungen 0 → 9",
17570
17606
  "organisations.sortBy.recordCountDesc": "Veröffentlichungen 9 → 0",
17571
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
17572
- "organization.details.publishedDataset": "{count, plural, =0{} one{} other{}}",
17607
+ "organization.details.lastPublishedDatasets": "",
17608
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
17573
17609
  "organization.details.mailContact": "",
17574
- "organization.datasets": "",
17575
- "organization.lastPublishedDatasets": "",
17576
- "organization.lastPublishedDatasets.searchAllButton": "",
17610
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
17577
17611
  "pagination.nextPage": "Nächste Seite",
17578
17612
  "pagination.page": "Seite",
17579
17613
  "pagination.pageOf": "von",
17580
17614
  previous: previous$6,
17581
17615
  "record.action.download": "Herunterladen",
17616
+ "record.action.duplicate": "",
17582
17617
  "record.action.view": "Anzeigen",
17583
17618
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
17584
17619
  "record.metadata.about": "Beschreibung",
@@ -17671,11 +17706,11 @@ var de = {
17671
17706
  "results.sortBy.relevancy": "Relevanz",
17672
17707
  "search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
17673
17708
  "search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
17709
+ "search.error.organizationHasNoDataset": "",
17710
+ "search.error.organizationNotFound": "",
17674
17711
  "search.error.receivedError": "Ein Fehler ist aufgetreten",
17675
17712
  "search.error.recordHasnolink": "",
17676
17713
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
17677
- "search.error.organizationNotFound": "",
17678
- "search.error.organizationHasNoDataset": "",
17679
17714
  "search.field.any.placeholder": "Suche Datensätze ...",
17680
17715
  "search.field.sortBy": "Sortieren nach:",
17681
17716
  "search.filters.clear": "Zurücksetzen",
@@ -17700,9 +17735,11 @@ var de = {
17700
17735
  "search.filters.minimize": "Minimieren",
17701
17736
  "search.filters.myRecords": "Nur meine Datensätze anzeigen",
17702
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": "",
17703
17739
  "search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
17740
+ "search.filters.producerOrg": "",
17704
17741
  "search.filters.publicationYear": "Veröffentlichungsjahr",
17705
- "search.filters.publisher": "Organisationen",
17742
+ "search.filters.publisherOrg": "",
17706
17743
  "search.filters.representationType": "Repräsentationstyp",
17707
17744
  "search.filters.resourceType": "Ressourcentyp",
17708
17745
  "search.filters.standard": "Standard",
@@ -17736,7 +17773,7 @@ var en = {
17736
17773
  "Add Layer As": "",
17737
17774
  "button.login": "Log in",
17738
17775
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
17739
- "catalog.figures.organizations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
17776
+ "catalog.figures.organizations": "{count, plural, =0{organizations} one{organization} other{organizations}}",
17740
17777
  "chart.aggregation.average": "average",
17741
17778
  "chart.aggregation.count": "count",
17742
17779
  "chart.aggregation.max": "max",
@@ -17780,11 +17817,11 @@ var en = {
17780
17817
  "datafeeder.analysisProgressBar.subtitle": "The analysis may take several minutes, please wait.",
17781
17818
  "datafeeder.analysisProgressBar.title": "Analyze in progress",
17782
17819
  "datafeeder.datasetValidation.datasetInformation": "The provided dataset contains {number} entities",
17783
- "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
17784
- "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",
17785
17820
  "datafeeder.datasetValidation.submitButton": "OK, my data are correct",
17786
17821
  "datafeeder.datasetValidation.title": "Make sure your data are correct",
17787
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:",
17788
17825
  "datafeeder.form.abstract": "How would you describe your dataset?",
17789
17826
  "datafeeder.form.datepicker": "Do you know when the dataset was created?",
17790
17827
  "datafeeder.form.description": "Finally, please describe the process that was used to create the dataset",
@@ -17863,7 +17900,7 @@ var en = {
17863
17900
  "datahub.header.lastRecords": "The latest",
17864
17901
  "datahub.header.myfavorites": "My favorites",
17865
17902
  "datahub.header.news": "Home",
17866
- "datahub.header.organisations": "Organisations",
17903
+ "datahub.header.organizations": "Organizations",
17867
17904
  "datahub.header.popularRecords": "The most popular",
17868
17905
  "datahub.header.title.html": "<div class=\"text-white\">Discover open<br> data from my Organization</div>",
17869
17906
  "datahub.news.contact.contactus": "Contact us",
@@ -17899,6 +17936,20 @@ var en = {
17899
17936
  "downloads.format.unknown": "unknown",
17900
17937
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17901
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",
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",
17904
17955
  "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -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,17 +18069,16 @@ 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.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
18002
- "organization.details.publishedDataset": "{count, plural, =0{published dataset} one{published dataset} other{published datasets}}",
18072
+ "organization.details.lastPublishedDatasets": "",
18073
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18003
18074
  "organization.details.mailContact": "Contact by email",
18004
- "organization.datasets": "Datasets",
18005
- "organization.lastPublishedDatasets": "Last published datasets",
18006
- "organization.lastPublishedDatasets.searchAllButton": "Search all",
18075
+ "organization.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
18007
18076
  "pagination.nextPage": "Next page",
18008
18077
  "pagination.page": "page",
18009
18078
  "pagination.pageOf": "of",
18010
18079
  previous: previous$5,
18011
18080
  "record.action.download": "Download",
18081
+ "record.action.duplicate": "Duplicate",
18012
18082
  "record.action.view": "View",
18013
18083
  "record.externalViewer.open": "Open in the external map viewer",
18014
18084
  "record.metadata.about": "Description",
@@ -18101,11 +18171,11 @@ var en = {
18101
18171
  "results.sortBy.relevancy": "Relevancy",
18102
18172
  "search.autocomplete.error": "Suggestions could not be fetched:",
18103
18173
  "search.error.couldNotReachApi": "The API could not be reached",
18174
+ "search.error.organizationHasNoDataset": "This organization has no dataset yet.",
18175
+ "search.error.organizationNotFound": "This organization could not be found.",
18104
18176
  "search.error.receivedError": "An error was received",
18105
18177
  "search.error.recordHasnolink": "This record currently has no link yet, please come back later.",
18106
18178
  "search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.",
18107
- "search.error.organizationNotFound": "This organization could not be found.",
18108
- "search.error.organizationHasNoDataset": "This organization has no dataset yet.",
18109
18179
  "search.field.any.placeholder": "Search datasets ...",
18110
18180
  "search.field.sortBy": "Sort by:",
18111
18181
  "search.filters.clear": "Reset",
@@ -18130,9 +18200,11 @@ var en = {
18130
18200
  "search.filters.minimize": "Minimize",
18131
18201
  "search.filters.myRecords": "Show only my records",
18132
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",
18133
18204
  "search.filters.otherRecords": "Showing records from another person",
18205
+ "search.filters.producerOrg": "Producer",
18134
18206
  "search.filters.publicationYear": "Publication year",
18135
- "search.filters.publisher": "Organizations",
18207
+ "search.filters.publisherOrg": "Publisher",
18136
18208
  "search.filters.representationType": "Representation type",
18137
18209
  "search.filters.resourceType": "Resource type",
18138
18210
  "search.filters.standard": "Standard",
@@ -18213,6 +18285,8 @@ var es = {
18213
18285
  "datafeeder.datasetValidation.submitButton": "",
18214
18286
  "datafeeder.datasetValidation.title": "",
18215
18287
  "datafeeder.datasetValidation.unknown": "",
18288
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
18289
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
18216
18290
  "datafeeder.form.abstract": "",
18217
18291
  "datafeeder.form.datepicker": "",
18218
18292
  "datafeeder.form.description": "",
@@ -18240,6 +18314,7 @@ var es = {
18240
18314
  "datafeeder.publishSuccess.geonetworkRecord": "",
18241
18315
  "datafeeder.publishSuccess.illustration.title": "",
18242
18316
  "datafeeder.publishSuccess.mapViewer": "",
18317
+ "datafeeder.publishSuccess.ogcFeature": "",
18243
18318
  "datafeeder.publishSuccess.subtitle": "",
18244
18319
  "datafeeder.publishSuccess.title": "",
18245
18320
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -18290,7 +18365,7 @@ var es = {
18290
18365
  "datahub.header.lastRecords": "",
18291
18366
  "datahub.header.myfavorites": "",
18292
18367
  "datahub.header.news": "",
18293
- "datahub.header.organisations": "",
18368
+ "datahub.header.organizations": "",
18294
18369
  "datahub.header.popularRecords": "",
18295
18370
  "datahub.header.title.html": "",
18296
18371
  "datahub.news.contact.contactus": "",
@@ -18326,6 +18401,20 @@ var es = {
18326
18401
  "downloads.format.unknown": "",
18327
18402
  "downloads.wfs.featuretype.not.found": "",
18328
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": "",
18417
+ "editor.record.form.keywords": "",
18329
18418
  "editor.record.form.license": "",
18330
18419
  "editor.record.form.license.cc-by": "",
18331
18420
  "editor.record.form.license.cc-by-sa": "",
@@ -18336,12 +18425,31 @@ var es = {
18336
18425
  "editor.record.form.license.odc-by": "",
18337
18426
  "editor.record.form.license.pddl": "",
18338
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": "",
18339
18446
  "editor.record.form.resourceUpdated": "",
18340
18447
  "editor.record.form.temporalExtents": "",
18341
18448
  "editor.record.form.temporalExtents.addDate": "",
18342
18449
  "editor.record.form.temporalExtents.addRange": "",
18343
18450
  "editor.record.form.temporalExtents.date": "",
18344
18451
  "editor.record.form.temporalExtents.range": "",
18452
+ "editor.record.form.unique.identifier": "",
18345
18453
  "editor.record.form.updateFrequency": "",
18346
18454
  "editor.record.form.updateFrequency.planned": "",
18347
18455
  "editor.record.loadError.body": "",
@@ -18357,6 +18465,7 @@ var es = {
18357
18465
  "editor.record.saveStatus.draftWithChangesPending": "",
18358
18466
  "editor.record.saveStatus.recordUpToDate": "",
18359
18467
  "editor.record.upToDate": "",
18468
+ "editor.sidebar.menu.editor": "",
18360
18469
  "externalviewer.dataset.unnamed": "",
18361
18470
  "facets.block.title.OrgForResource": "",
18362
18471
  "facets.block.title.availableInServices": "",
@@ -18425,17 +18534,16 @@ var es = {
18425
18534
  "organisations.sortBy.nameDesc": "",
18426
18535
  "organisations.sortBy.recordCountAsc": "",
18427
18536
  "organisations.sortBy.recordCountDesc": "",
18428
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
18429
- "organization.details.publishedDataset": "{count, plural, =0{} one{} other{{}}",
18537
+ "organization.details.lastPublishedDatasets": "",
18538
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18430
18539
  "organization.details.mailContact": "",
18431
- "organization.datasets": "",
18432
- "organization.lastPublishedDatasets": "",
18433
- "organization.lastPublishedDatasets.searchAllButton": "",
18540
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
18434
18541
  "pagination.nextPage": "",
18435
18542
  "pagination.page": "",
18436
18543
  "pagination.pageOf": "",
18437
18544
  previous: previous$4,
18438
18545
  "record.action.download": "",
18546
+ "record.action.duplicate": "",
18439
18547
  "record.action.view": "",
18440
18548
  "record.externalViewer.open": "",
18441
18549
  "record.metadata.about": "",
@@ -18528,11 +18636,11 @@ var es = {
18528
18636
  "results.sortBy.relevancy": "",
18529
18637
  "search.autocomplete.error": "",
18530
18638
  "search.error.couldNotReachApi": "",
18639
+ "search.error.organizationHasNoDataset": "",
18640
+ "search.error.organizationNotFound": "",
18531
18641
  "search.error.receivedError": "",
18532
18642
  "search.error.recordHasnolink": "",
18533
18643
  "search.error.recordNotFound": "",
18534
- "search.error.organizationNotFound": "",
18535
- "search.error.organizationHasNoDataset": "",
18536
18644
  "search.field.any.placeholder": "",
18537
18645
  "search.field.sortBy": "",
18538
18646
  "search.filters.clear": "",
@@ -18557,9 +18665,11 @@ var es = {
18557
18665
  "search.filters.minimize": "",
18558
18666
  "search.filters.myRecords": "",
18559
18667
  "search.filters.myRecordsHelp": "",
18668
+ "search.filters.organization": "",
18560
18669
  "search.filters.otherRecords": "",
18670
+ "search.filters.producerOrg": "",
18561
18671
  "search.filters.publicationYear": "",
18562
- "search.filters.publisher": "",
18672
+ "search.filters.publisherOrg": "",
18563
18673
  "search.filters.representationType": "",
18564
18674
  "search.filters.resourceType": "",
18565
18675
  "search.filters.standard": "",
@@ -18637,11 +18747,11 @@ var fr = {
18637
18747
  "datafeeder.analysisProgressBar.subtitle": "L'analyse peut prendre plusieurs minutes, merci d'attendre.",
18638
18748
  "datafeeder.analysisProgressBar.title": "Analyse en cours",
18639
18749
  "datafeeder.datasetValidation.datasetInformation": "Le jeu de données fourni contient {number} entités",
18640
- "datafeeder.datasetValidationCsv.lineNumbers": "Résumé des 5 premières lignes* du CSV :",
18641
- "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é",
18642
18750
  "datafeeder.datasetValidation.submitButton": "OK, mes données sont correctes",
18643
18751
  "datafeeder.datasetValidation.title": "Vérifiez que vos données sont correctes",
18644
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 :",
18645
18755
  "datafeeder.form.abstract": "Comment décrire votre jeu de données ?",
18646
18756
  "datafeeder.form.datepicker": "Savez-vous quand la donnée a été créée ?",
18647
18757
  "datafeeder.form.description": "Enfin, décrivez le processus utilisé pour créer la donnée",
@@ -18720,7 +18830,7 @@ var fr = {
18720
18830
  "datahub.header.lastRecords": "Les plus récentes",
18721
18831
  "datahub.header.myfavorites": "Mes favoris",
18722
18832
  "datahub.header.news": "Accueil",
18723
- "datahub.header.organisations": "Organisations",
18833
+ "datahub.header.organizations": "Organisations",
18724
18834
  "datahub.header.popularRecords": "Les plus appréciées",
18725
18835
  "datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
18726
18836
  "datahub.news.contact.contactus": "Contactez-nous",
@@ -18756,6 +18866,20 @@ var fr = {
18756
18866
  "downloads.format.unknown": "inconnu",
18757
18867
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
18758
18868
  dropFile: dropFile$3,
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": "",
18759
18883
  "editor.record.form.license": "Licence",
18760
18884
  "editor.record.form.license.cc-by": "",
18761
18885
  "editor.record.form.license.cc-by-sa": "",
@@ -18766,12 +18890,31 @@ var fr = {
18766
18890
  "editor.record.form.license.odc-by": "",
18767
18891
  "editor.record.form.license.pddl": "",
18768
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": "",
18769
18911
  "editor.record.form.resourceUpdated": "Date de dernière révision",
18770
18912
  "editor.record.form.temporalExtents": "Étendue temporelle",
18771
18913
  "editor.record.form.temporalExtents.addDate": "Date déterminée",
18772
18914
  "editor.record.form.temporalExtents.addRange": "Période de temps",
18773
18915
  "editor.record.form.temporalExtents.date": "Date concernée",
18774
18916
  "editor.record.form.temporalExtents.range": "Période concernée",
18917
+ "editor.record.form.unique.identifier": "",
18775
18918
  "editor.record.form.updateFrequency": "Fréquence de mise à jour",
18776
18919
  "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
18777
18920
  "editor.record.loadError.body": "",
@@ -18787,6 +18930,7 @@ var fr = {
18787
18930
  "editor.record.saveStatus.draftWithChangesPending": "Brouillon enregistré - modifications en cours",
18788
18931
  "editor.record.saveStatus.recordUpToDate": "La fiche publiée est à jour",
18789
18932
  "editor.record.upToDate": "",
18933
+ "editor.sidebar.menu.editor": "",
18790
18934
  "externalviewer.dataset.unnamed": "Couche du datahub",
18791
18935
  "facets.block.title.OrgForResource": "Organisation",
18792
18936
  "facets.block.title.availableInServices": "Disponible pour",
@@ -18855,17 +18999,16 @@ var fr = {
18855
18999
  "organisations.sortBy.nameDesc": "Nom Z → A",
18856
19000
  "organisations.sortBy.recordCountAsc": "Données 0 → 9",
18857
19001
  "organisations.sortBy.recordCountDesc": "Données 9 → 0",
18858
- "organization.header.recordCount": "{count, plural, =0{donnée} one{donnée} other{données}}",
18859
- "organization.details.publishedDataset": "{count, plural, =0{donnée publiée} one{donnée publiée} other{données publiées}}",
19002
+ "organization.details.lastPublishedDatasets": "",
19003
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18860
19004
  "organization.details.mailContact": "Contacter par mail",
18861
- "organization.datasets": "Données",
18862
- "organization.lastPublishedDatasets": "Dernières données publiées",
18863
- "organization.lastPublishedDatasets.searchAllButton": "Rechercher tous",
19005
+ "organization.header.recordCount": "{count, plural, =0{donnée} one{donnée} other{données}}",
18864
19006
  "pagination.nextPage": "Page suivante",
18865
19007
  "pagination.page": "page",
18866
19008
  "pagination.pageOf": "sur",
18867
19009
  previous: previous$3,
18868
19010
  "record.action.download": "Télécharger",
19011
+ "record.action.duplicate": "Dupliquer",
18869
19012
  "record.action.view": "Voir",
18870
19013
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
18871
19014
  "record.metadata.about": "Description",
@@ -18958,11 +19101,11 @@ var fr = {
18958
19101
  "results.sortBy.relevancy": "Pertinence",
18959
19102
  "search.autocomplete.error": "Les suggestions ne peuvent pas être récupérées",
18960
19103
  "search.error.couldNotReachApi": "Problème de connexion à l'API",
19104
+ "search.error.organizationHasNoDataset": "Cette organisation n'a pas encore de données.",
19105
+ "search.error.organizationNotFound": "L'organisation n'a pas pu être trouvée.",
18961
19106
  "search.error.receivedError": "Erreur retournée",
18962
19107
  "search.error.recordHasnolink": "Ce dataset n'a pas encore de lien, réessayez plus tard s'il vous plaît.",
18963
19108
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
18964
- "search.error.organizationNotFound": "L'organisation n'a pas pu être trouvée.",
18965
- "search.error.organizationHasNoDataset": "Cette organisation n'a pas encore de données.",
18966
19109
  "search.field.any.placeholder": "Rechercher une donnée...",
18967
19110
  "search.field.sortBy": "Trier par :",
18968
19111
  "search.filters.clear": "Réinitialiser",
@@ -18987,9 +19130,11 @@ var fr = {
18987
19130
  "search.filters.minimize": "Réduire",
18988
19131
  "search.filters.myRecords": "Voir mes données",
18989
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",
18990
19134
  "search.filters.otherRecords": "Affichage des données d'un autre utilisateur",
19135
+ "search.filters.producerOrg": "Producteur",
18991
19136
  "search.filters.publicationYear": "Année de publication",
18992
- "search.filters.publisher": "Organisations",
19137
+ "search.filters.publisherOrg": "Distributeur",
18993
19138
  "search.filters.representationType": "Type de représentation",
18994
19139
  "search.filters.resourceType": "Type de ressource",
18995
19140
  "search.filters.standard": "Standard",
@@ -19070,6 +19215,8 @@ var it = {
19070
19215
  "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
19071
19216
  "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
19072
19217
  "datafeeder.datasetValidation.unknown": " - ",
19218
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19219
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19073
19220
  "datafeeder.form.abstract": "Come descrivere il suo dataset?",
19074
19221
  "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
19075
19222
  "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
@@ -19097,6 +19244,7 @@ var it = {
19097
19244
  "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
19098
19245
  "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
19099
19246
  "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
19247
+ "datafeeder.publishSuccess.ogcFeature": "",
19100
19248
  "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
19101
19249
  "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
19102
19250
  "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
@@ -19147,7 +19295,7 @@ var it = {
19147
19295
  "datahub.header.lastRecords": "Ultimi",
19148
19296
  "datahub.header.myfavorites": "Miei preferiti",
19149
19297
  "datahub.header.news": "Home",
19150
- "datahub.header.organisations": "Organizzazioni",
19298
+ "datahub.header.organizations": "Organizzazioni",
19151
19299
  "datahub.header.popularRecords": "Più popolari",
19152
19300
  "datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
19153
19301
  "datahub.news.contact.contactus": "Contattateci",
@@ -19183,6 +19331,20 @@ var it = {
19183
19331
  "downloads.format.unknown": "sconosciuto",
19184
19332
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
19185
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": "",
19347
+ "editor.record.form.keywords": "",
19186
19348
  "editor.record.form.license": "Licenza",
19187
19349
  "editor.record.form.license.cc-by": "",
19188
19350
  "editor.record.form.license.cc-by-sa": "",
@@ -19193,12 +19355,31 @@ var it = {
19193
19355
  "editor.record.form.license.odc-by": "",
19194
19356
  "editor.record.form.license.pddl": "",
19195
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": "",
19196
19376
  "editor.record.form.resourceUpdated": "",
19197
19377
  "editor.record.form.temporalExtents": "",
19198
19378
  "editor.record.form.temporalExtents.addDate": "",
19199
19379
  "editor.record.form.temporalExtents.addRange": "",
19200
19380
  "editor.record.form.temporalExtents.date": "",
19201
19381
  "editor.record.form.temporalExtents.range": "",
19382
+ "editor.record.form.unique.identifier": "",
19202
19383
  "editor.record.form.updateFrequency": "",
19203
19384
  "editor.record.form.updateFrequency.planned": "",
19204
19385
  "editor.record.loadError.body": "",
@@ -19214,6 +19395,7 @@ var it = {
19214
19395
  "editor.record.saveStatus.draftWithChangesPending": "",
19215
19396
  "editor.record.saveStatus.recordUpToDate": "",
19216
19397
  "editor.record.upToDate": "",
19398
+ "editor.sidebar.menu.editor": "",
19217
19399
  "externalviewer.dataset.unnamed": "Layer del datahub",
19218
19400
  "facets.block.title.OrgForResource": "Organizzazione",
19219
19401
  "facets.block.title.availableInServices": "Disponibile per",
@@ -19282,17 +19464,16 @@ var it = {
19282
19464
  "organisations.sortBy.nameDesc": "Nome Z → A",
19283
19465
  "organisations.sortBy.recordCountAsc": "Dati 0 → 9",
19284
19466
  "organisations.sortBy.recordCountDesc": "Dati 9 → 0",
19285
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19286
- "organization.details.publishedDataset": "{count, plural, =0{} one{} other{{}}",
19467
+ "organization.details.lastPublishedDatasets": "",
19468
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
19287
19469
  "organization.details.mailContact": "",
19288
- "organization.datasets": "",
19289
- "organization.lastPublishedDatasets": "",
19290
- "organization.lastPublishedDatasets.searchAllButton": "",
19470
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19291
19471
  "pagination.nextPage": "Pagina successiva",
19292
19472
  "pagination.page": "pagina",
19293
19473
  "pagination.pageOf": "di",
19294
19474
  previous: previous$2,
19295
19475
  "record.action.download": "Scarica",
19476
+ "record.action.duplicate": "",
19296
19477
  "record.action.view": "Visualizza",
19297
19478
  "record.externalViewer.open": "Apri nell'visualizzatore esterno",
19298
19479
  "record.metadata.about": "Descrizione",
@@ -19385,11 +19566,11 @@ var it = {
19385
19566
  "results.sortBy.relevancy": "Rilevanza",
19386
19567
  "search.autocomplete.error": "Impossibile recuperare le suggerimenti",
19387
19568
  "search.error.couldNotReachApi": "Problema di connessione all'API",
19569
+ "search.error.organizationHasNoDataset": "",
19570
+ "search.error.organizationNotFound": "",
19388
19571
  "search.error.receivedError": "Errore ricevuto",
19389
19572
  "search.error.recordHasnolink": "",
19390
19573
  "search.error.recordNotFound": "Impossibile trovare questo dato",
19391
- "search.error.organizationNotFound": "",
19392
- "search.error.organizationHasNoDataset": "",
19393
19574
  "search.field.any.placeholder": "Cerca un dato...",
19394
19575
  "search.field.sortBy": "Ordina per:",
19395
19576
  "search.filters.clear": "Ripristina",
@@ -19414,9 +19595,11 @@ var it = {
19414
19595
  "search.filters.minimize": "Riduci",
19415
19596
  "search.filters.myRecords": "Visualizza i miei dati",
19416
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": "",
19417
19599
  "search.filters.otherRecords": "Visualizzazione dei dati di un altro utente",
19600
+ "search.filters.producerOrg": "",
19418
19601
  "search.filters.publicationYear": "Anno di pubblicazione",
19419
- "search.filters.publisher": "Organizzazioni",
19602
+ "search.filters.publisherOrg": "",
19420
19603
  "search.filters.representationType": "Tipo di rappresentazione",
19421
19604
  "search.filters.resourceType": "Tipo di risorsa",
19422
19605
  "search.filters.standard": "Standard",
@@ -19497,6 +19680,8 @@ var nl = {
19497
19680
  "datafeeder.datasetValidation.submitButton": "",
19498
19681
  "datafeeder.datasetValidation.title": "",
19499
19682
  "datafeeder.datasetValidation.unknown": "",
19683
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19684
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19500
19685
  "datafeeder.form.abstract": "",
19501
19686
  "datafeeder.form.datepicker": "",
19502
19687
  "datafeeder.form.description": "",
@@ -19524,6 +19709,7 @@ var nl = {
19524
19709
  "datafeeder.publishSuccess.geonetworkRecord": "",
19525
19710
  "datafeeder.publishSuccess.illustration.title": "",
19526
19711
  "datafeeder.publishSuccess.mapViewer": "",
19712
+ "datafeeder.publishSuccess.ogcFeature": "",
19527
19713
  "datafeeder.publishSuccess.subtitle": "",
19528
19714
  "datafeeder.publishSuccess.title": "",
19529
19715
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -19574,7 +19760,7 @@ var nl = {
19574
19760
  "datahub.header.lastRecords": "",
19575
19761
  "datahub.header.myfavorites": "",
19576
19762
  "datahub.header.news": "",
19577
- "datahub.header.organisations": "",
19763
+ "datahub.header.organizations": "",
19578
19764
  "datahub.header.popularRecords": "",
19579
19765
  "datahub.header.title.html": "",
19580
19766
  "datahub.news.contact.contactus": "",
@@ -19610,6 +19796,20 @@ var nl = {
19610
19796
  "downloads.format.unknown": "",
19611
19797
  "downloads.wfs.featuretype.not.found": "",
19612
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": "",
19812
+ "editor.record.form.keywords": "",
19613
19813
  "editor.record.form.license": "",
19614
19814
  "editor.record.form.license.cc-by": "",
19615
19815
  "editor.record.form.license.cc-by-sa": "",
@@ -19620,12 +19820,31 @@ var nl = {
19620
19820
  "editor.record.form.license.odc-by": "",
19621
19821
  "editor.record.form.license.pddl": "",
19622
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": "",
19623
19841
  "editor.record.form.resourceUpdated": "",
19624
19842
  "editor.record.form.temporalExtents": "",
19625
19843
  "editor.record.form.temporalExtents.addDate": "",
19626
19844
  "editor.record.form.temporalExtents.addRange": "",
19627
19845
  "editor.record.form.temporalExtents.date": "",
19628
19846
  "editor.record.form.temporalExtents.range": "",
19847
+ "editor.record.form.unique.identifier": "",
19629
19848
  "editor.record.form.updateFrequency": "",
19630
19849
  "editor.record.form.updateFrequency.planned": "",
19631
19850
  "editor.record.loadError.body": "",
@@ -19641,6 +19860,7 @@ var nl = {
19641
19860
  "editor.record.saveStatus.draftWithChangesPending": "",
19642
19861
  "editor.record.saveStatus.recordUpToDate": "",
19643
19862
  "editor.record.upToDate": "",
19863
+ "editor.sidebar.menu.editor": "",
19644
19864
  "externalviewer.dataset.unnamed": "",
19645
19865
  "facets.block.title.OrgForResource": "",
19646
19866
  "facets.block.title.availableInServices": "",
@@ -19709,17 +19929,16 @@ var nl = {
19709
19929
  "organisations.sortBy.nameDesc": "",
19710
19930
  "organisations.sortBy.recordCountAsc": "",
19711
19931
  "organisations.sortBy.recordCountDesc": "",
19712
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19713
- "organization.details.publishedDataset": "{count, plural, =0{} one{} other{{}}",
19932
+ "organization.details.lastPublishedDatasets": "",
19933
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
19714
19934
  "organization.details.mailContact": "",
19715
- "organization.datasets": "",
19716
- "organization.lastPublishedDatasets": "",
19717
- "organization.lastPublishedDatasets.searchAllButton": "",
19935
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19718
19936
  "pagination.nextPage": "",
19719
19937
  "pagination.page": "",
19720
19938
  "pagination.pageOf": "",
19721
19939
  previous: previous$1,
19722
19940
  "record.action.download": "",
19941
+ "record.action.duplicate": "",
19723
19942
  "record.action.view": "",
19724
19943
  "record.externalViewer.open": "",
19725
19944
  "record.metadata.about": "",
@@ -19812,11 +20031,11 @@ var nl = {
19812
20031
  "results.sortBy.relevancy": "",
19813
20032
  "search.autocomplete.error": "",
19814
20033
  "search.error.couldNotReachApi": "",
20034
+ "search.error.organizationHasNoDataset": "",
20035
+ "search.error.organizationNotFound": "",
19815
20036
  "search.error.receivedError": "",
19816
20037
  "search.error.recordHasnolink": "",
19817
20038
  "search.error.recordNotFound": "",
19818
- "search.error.organizationNotFound": "",
19819
- "search.error.organizationHasNoDataset": "",
19820
20039
  "search.field.any.placeholder": "",
19821
20040
  "search.field.sortBy": "",
19822
20041
  "search.filters.clear": "",
@@ -19841,9 +20060,11 @@ var nl = {
19841
20060
  "search.filters.minimize": "",
19842
20061
  "search.filters.myRecords": "",
19843
20062
  "search.filters.myRecordsHelp": "",
20063
+ "search.filters.organization": "",
19844
20064
  "search.filters.otherRecords": "",
20065
+ "search.filters.producerOrg": "",
19845
20066
  "search.filters.publicationYear": "",
19846
- "search.filters.publisher": "",
20067
+ "search.filters.publisherOrg": "",
19847
20068
  "search.filters.representationType": "",
19848
20069
  "search.filters.resourceType": "",
19849
20070
  "search.filters.standard": "",
@@ -19924,6 +20145,8 @@ var pt = {
19924
20145
  "datafeeder.datasetValidation.submitButton": "",
19925
20146
  "datafeeder.datasetValidation.title": "",
19926
20147
  "datafeeder.datasetValidation.unknown": "",
20148
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
20149
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19927
20150
  "datafeeder.form.abstract": "",
19928
20151
  "datafeeder.form.datepicker": "",
19929
20152
  "datafeeder.form.description": "",
@@ -19951,6 +20174,7 @@ var pt = {
19951
20174
  "datafeeder.publishSuccess.geonetworkRecord": "",
19952
20175
  "datafeeder.publishSuccess.illustration.title": "",
19953
20176
  "datafeeder.publishSuccess.mapViewer": "",
20177
+ "datafeeder.publishSuccess.ogcFeature": "",
19954
20178
  "datafeeder.publishSuccess.subtitle": "",
19955
20179
  "datafeeder.publishSuccess.title": "",
19956
20180
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -20001,7 +20225,7 @@ var pt = {
20001
20225
  "datahub.header.lastRecords": "",
20002
20226
  "datahub.header.myfavorites": "",
20003
20227
  "datahub.header.news": "",
20004
- "datahub.header.organisations": "",
20228
+ "datahub.header.organizations": "",
20005
20229
  "datahub.header.popularRecords": "",
20006
20230
  "datahub.header.title.html": "",
20007
20231
  "datahub.news.contact.contactus": "",
@@ -20037,6 +20261,20 @@ var pt = {
20037
20261
  "downloads.format.unknown": "",
20038
20262
  "downloads.wfs.featuretype.not.found": "",
20039
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": "",
20277
+ "editor.record.form.keywords": "",
20040
20278
  "editor.record.form.license": "",
20041
20279
  "editor.record.form.license.cc-by": "",
20042
20280
  "editor.record.form.license.cc-by-sa": "",
@@ -20047,12 +20285,31 @@ var pt = {
20047
20285
  "editor.record.form.license.odc-by": "",
20048
20286
  "editor.record.form.license.pddl": "",
20049
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": "",
20050
20306
  "editor.record.form.resourceUpdated": "",
20051
20307
  "editor.record.form.temporalExtents": "",
20052
20308
  "editor.record.form.temporalExtents.addDate": "",
20053
20309
  "editor.record.form.temporalExtents.addRange": "",
20054
20310
  "editor.record.form.temporalExtents.date": "",
20055
20311
  "editor.record.form.temporalExtents.range": "",
20312
+ "editor.record.form.unique.identifier": "",
20056
20313
  "editor.record.form.updateFrequency": "",
20057
20314
  "editor.record.form.updateFrequency.planned": "",
20058
20315
  "editor.record.loadError.body": "",
@@ -20068,6 +20325,7 @@ var pt = {
20068
20325
  "editor.record.saveStatus.draftWithChangesPending": "",
20069
20326
  "editor.record.saveStatus.recordUpToDate": "",
20070
20327
  "editor.record.upToDate": "",
20328
+ "editor.sidebar.menu.editor": "",
20071
20329
  "externalviewer.dataset.unnamed": "",
20072
20330
  "facets.block.title.OrgForResource": "",
20073
20331
  "facets.block.title.availableInServices": "",
@@ -20136,17 +20394,16 @@ var pt = {
20136
20394
  "organisations.sortBy.nameDesc": "",
20137
20395
  "organisations.sortBy.recordCountAsc": "",
20138
20396
  "organisations.sortBy.recordCountDesc": "",
20139
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
20140
- "organization.details.publishedDataset": "{count, plural, =0{} one{} other{{}}",
20397
+ "organization.details.lastPublishedDatasets": "",
20398
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
20141
20399
  "organization.details.mailContact": "",
20142
- "organization.datasets": "",
20143
- "organization.lastPublishedDatasets": "",
20144
- "organization.lastPublishedDatasets.searchAllButton": "",
20400
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
20145
20401
  "pagination.nextPage": "",
20146
20402
  "pagination.page": "",
20147
20403
  "pagination.pageOf": "",
20148
20404
  previous: previous,
20149
20405
  "record.action.download": "",
20406
+ "record.action.duplicate": "",
20150
20407
  "record.action.view": "",
20151
20408
  "record.externalViewer.open": "",
20152
20409
  "record.metadata.about": "",
@@ -20239,11 +20496,11 @@ var pt = {
20239
20496
  "results.sortBy.relevancy": "",
20240
20497
  "search.autocomplete.error": "",
20241
20498
  "search.error.couldNotReachApi": "",
20499
+ "search.error.organizationHasNoDataset": "",
20500
+ "search.error.organizationNotFound": "",
20242
20501
  "search.error.receivedError": "",
20243
20502
  "search.error.recordHasnolink": "",
20244
20503
  "search.error.recordNotFound": "",
20245
- "search.error.organizationNotFound": "",
20246
- "search.error.organizationHasNoDataset": "",
20247
20504
  "search.field.any.placeholder": "",
20248
20505
  "search.field.sortBy": "",
20249
20506
  "search.filters.clear": "",
@@ -20268,9 +20525,11 @@ var pt = {
20268
20525
  "search.filters.minimize": "",
20269
20526
  "search.filters.myRecords": "",
20270
20527
  "search.filters.myRecordsHelp": "",
20528
+ "search.filters.organization": "",
20271
20529
  "search.filters.otherRecords": "",
20530
+ "search.filters.producerOrg": "",
20272
20531
  "search.filters.publicationYear": "",
20273
- "search.filters.publisher": "",
20532
+ "search.filters.publisherOrg": "",
20274
20533
  "search.filters.representationType": "",
20275
20534
  "search.filters.resourceType": "",
20276
20535
  "search.filters.standard": "",
@@ -21277,6 +21536,17 @@ class Gn4Repository {
21277
21536
  .then((record) => [record, xml, isSavedAlready]);
21278
21537
  }));
21279
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
+ }
21280
21550
  serializeRecordToXml(record, referenceRecordSource) {
21281
21551
  // if there's a reference record, use that standard; otherwise, use iso19139
21282
21552
  const converter = referenceRecordSource
@@ -21908,8 +22178,6 @@ class Gn4PlatformService {
21908
22178
  this.allThesaurus$ = this.httpClient
21909
22179
  .get(`${this.registriesApiService.configuration.basePath}/thesaurus?_content_type=json`)
21910
22180
  .pipe(map$1((thesaurus) => {
21911
- // FIXME: find a better way to exclude place keywords
21912
- // thesaurus[0].filter((thes) => thes.dname !== 'place')
21913
22181
  return thesaurus[0];
21914
22182
  }), shareReplay(1));
21915
22183
  this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
@@ -21953,8 +22221,14 @@ class Gn4PlatformService {
21953
22221
  }
21954
22222
  return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
21955
22223
  }
21956
- searchKeywords(query) {
21957
- const keywords$ = this.registriesApiService.searchKeywords(query, this.langService.iso3, 10, 0, null, null, null, `*${query}*`);
22224
+ searchKeywords(query, keywordTypes) {
22225
+ const keywords$ = this.allThesaurus$.pipe(switchMap((thesaurus) => {
22226
+ const selectedThesauri = [];
22227
+ keywordTypes.map((keywordType) => {
22228
+ selectedThesauri.push(...thesaurus.filter((thes) => thes.dname === keywordType));
22229
+ });
22230
+ return this.registriesApiService.searchKeywords(query, this.langService.iso3, 10, 0, null, selectedThesauri.map((thes) => thes.key), null, `*${query}*`);
22231
+ }));
21958
22232
  return combineLatest([keywords$, this.allThesaurus$]).pipe(map$1(([keywords, thesaurus]) => {
21959
22233
  return this.mapper.keywordsFromApi(keywords, thesaurus, this.langService.iso3);
21960
22234
  }));
@@ -27003,11 +27277,11 @@ class ApiCardComponent {
27003
27277
  }
27004
27278
  }
27005
27279
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27006
- 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 }); }
27280
+ 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 }); }
27007
27281
  }
27008
27282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, decorators: [{
27009
27283
  type: Component,
27010
- 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" }]
27284
+ 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" }]
27011
27285
  }], propDecorators: { link: [{
27012
27286
  type: Input
27013
27287
  }], currentLink: [{
@@ -27338,6 +27612,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27338
27612
  args: ['contentDiv']
27339
27613
  }] } });
27340
27614
 
27615
+ class MaxLinesComponent {
27616
+ constructor(cdr) {
27617
+ this.cdr = cdr;
27618
+ this.maxLines = 6;
27619
+ this.isExpanded = false;
27620
+ this.maxHeight = '';
27621
+ this.showToggleButton = false;
27622
+ }
27623
+ ngAfterViewInit() {
27624
+ this.calculateMaxHeight();
27625
+ this.observer = new ResizeObserver((mutations) => {
27626
+ mutations.forEach(() => {
27627
+ this.calculateMaxHeight();
27628
+ });
27629
+ });
27630
+ this.observer.observe(this.container.nativeElement.children[0]);
27631
+ }
27632
+ toggleDisplay() {
27633
+ this.isExpanded = !this.isExpanded;
27634
+ this.calculateMaxHeight();
27635
+ }
27636
+ calculateMaxHeight() {
27637
+ const containerElement = this.container.nativeElement;
27638
+ const contentElement = containerElement.children[0];
27639
+ const contentHeight = contentElement.getBoundingClientRect().height;
27640
+ if (contentHeight) {
27641
+ if (contentHeight > this.maxLines * this.getLineHeight(contentElement)) {
27642
+ this.showToggleButton = true;
27643
+ this.maxHeight = this.isExpanded
27644
+ ? `${contentHeight}px`
27645
+ : `${this.maxLines * this.getLineHeight(contentElement)}px`;
27646
+ }
27647
+ else {
27648
+ this.showToggleButton = false;
27649
+ this.maxHeight = `${contentHeight}px`;
27650
+ }
27651
+ containerElement.setAttribute('style', `max-height: ${this.maxHeight}; overflow: hidden`);
27652
+ this.cdr.detectChanges();
27653
+ }
27654
+ }
27655
+ getLineHeight(element) {
27656
+ const computedStyle = window.getComputedStyle(element);
27657
+ const lineHeight = parseFloat(computedStyle.lineHeight);
27658
+ const fontSize = parseFloat(computedStyle.fontSize || '14');
27659
+ const result = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight; // Use a default if line height is not specified
27660
+ return result;
27661
+ }
27662
+ ngOnDestroy() {
27663
+ if (!this.observer)
27664
+ return;
27665
+ this.observer.unobserve(this.container.nativeElement.children[0]);
27666
+ }
27667
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27668
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MaxLinesComponent, isStandalone: true, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n data-cy=\"readMoreButton\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27669
+ }
27670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, decorators: [{
27671
+ type: Component,
27672
+ args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, TranslateModule], template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n data-cy=\"readMoreButton\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
27673
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
27674
+ type: Input
27675
+ }], container: [{
27676
+ type: ViewChild,
27677
+ args: ['container']
27678
+ }] } });
27679
+
27341
27680
  /* eslint-disable @angular-eslint/directive-selector */
27342
27681
  class GnUiLinkifyDirective {
27343
27682
  constructor(el, renderer) {
@@ -27477,7 +27816,7 @@ class MetadataInfoComponent {
27477
27816
  this.keyword.emit(keyword);
27478
27817
  }
27479
27818
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27819
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27481
27820
  }
27482
27821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataInfoComponent, decorators: [{
27483
27822
  type: Component,
@@ -27952,71 +28291,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27952
28291
  type: Input
27953
28292
  }] } });
27954
28293
 
27955
- class MaxLinesComponent {
27956
- constructor(cdr) {
27957
- this.cdr = cdr;
27958
- this.maxLines = 6;
27959
- this.isExpanded = false;
27960
- this.maxHeight = '';
27961
- this.showToggleButton = false;
27962
- }
27963
- ngAfterViewInit() {
27964
- this.calculateMaxHeight();
27965
- this.observer = new ResizeObserver((mutations) => {
27966
- mutations.forEach(() => {
27967
- this.calculateMaxHeight();
27968
- });
27969
- });
27970
- this.observer.observe(this.container.nativeElement.children[0]);
27971
- }
27972
- toggleDisplay() {
27973
- this.isExpanded = !this.isExpanded;
27974
- this.calculateMaxHeight();
27975
- }
27976
- calculateMaxHeight() {
27977
- const containerElement = this.container.nativeElement;
27978
- const contentElement = containerElement.children[0];
27979
- const contentHeight = contentElement.getBoundingClientRect().height;
27980
- if (contentHeight) {
27981
- if (contentHeight > this.maxLines * this.getLineHeight(contentElement)) {
27982
- this.showToggleButton = true;
27983
- this.maxHeight = this.isExpanded
27984
- ? `${contentHeight}px`
27985
- : `${this.maxLines * this.getLineHeight(contentElement)}px`;
27986
- }
27987
- else {
27988
- this.showToggleButton = false;
27989
- this.maxHeight = `${contentHeight}px`;
27990
- }
27991
- containerElement.setAttribute('style', `max-height: ${this.maxHeight}; overflow: hidden`);
27992
- this.cdr.detectChanges();
27993
- }
27994
- }
27995
- getLineHeight(element) {
27996
- const computedStyle = window.getComputedStyle(element);
27997
- const lineHeight = parseFloat(computedStyle.lineHeight);
27998
- const fontSize = parseFloat(computedStyle.fontSize || '14');
27999
- const result = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight; // Use a default if line height is not specified
28000
- return result;
28001
- }
28002
- ngOnDestroy() {
28003
- if (!this.observer)
28004
- return;
28005
- this.observer.unobserve(this.container.nativeElement.children[0]);
28006
- }
28007
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
28008
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MaxLinesComponent, isStandalone: true, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28009
- }
28010
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, decorators: [{
28011
- type: Component,
28012
- args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, TranslateModule], template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
28013
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
28014
- type: Input
28015
- }], container: [{
28016
- type: ViewChild,
28017
- args: ['container']
28018
- }] } });
28019
-
28020
28294
  class InteractiveTableColumnComponent {
28021
28295
  constructor() {
28022
28296
  this.grow = false;
@@ -28262,11 +28536,11 @@ class UserPreviewComponent {
28262
28536
  return (this.user.name + ' ' + this.user.surname).trim();
28263
28537
  }
28264
28538
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28265
- 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 }); }
28539
+ 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 }); }
28266
28540
  }
28267
28541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, decorators: [{
28268
28542
  type: Component,
28269
- 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" }]
28543
+ 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" }]
28270
28544
  }], propDecorators: { user: [{
28271
28545
  type: Input
28272
28546
  }], avatarPlaceholder: [{
@@ -28409,7 +28683,8 @@ class UiElementsModule {
28409
28683
  MarkdownParserComponent,
28410
28684
  ThumbnailComponent,
28411
28685
  TimeSincePipe,
28412
- BadgeComponent], exports: [MetadataInfoComponent,
28686
+ BadgeComponent,
28687
+ MaxLinesComponent], exports: [MetadataInfoComponent,
28413
28688
  ContentGhostComponent,
28414
28689
  DownloadItemComponent,
28415
28690
  DownloadsListComponent,
@@ -28440,7 +28715,8 @@ class UiElementsModule {
28440
28715
  UiInputsModule,
28441
28716
  FormsModule,
28442
28717
  ThumbnailComponent,
28443
- BadgeComponent] }); }
28718
+ BadgeComponent,
28719
+ MaxLinesComponent] }); }
28444
28720
  }
28445
28721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UiElementsModule, decorators: [{
28446
28722
  type: NgModule,
@@ -28461,6 +28737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28461
28737
  ThumbnailComponent,
28462
28738
  TimeSincePipe,
28463
28739
  BadgeComponent,
28740
+ MaxLinesComponent,
28464
28741
  ],
28465
28742
  declarations: [
28466
28743
  MetadataInfoComponent,
@@ -28612,6 +28889,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28612
28889
  }]
28613
28890
  }] });
28614
28891
 
28892
+ class ActionMenuComponent {
28893
+ constructor() {
28894
+ this.duplicate = new EventEmitter();
28895
+ }
28896
+ openMenu() {
28897
+ this.trigger.openMenu();
28898
+ }
28899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28900
+ 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"] }] }); }
28901
+ }
28902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, decorators: [{
28903
+ type: Component,
28904
+ 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" }]
28905
+ }], propDecorators: { duplicate: [{
28906
+ type: Output
28907
+ }], trigger: [{
28908
+ type: ViewChild,
28909
+ args: [MatMenuTrigger]
28910
+ }] } });
28911
+
28615
28912
  class ResultsTableComponent {
28616
28913
  constructor() {
28617
28914
  this.records = [];
@@ -28621,6 +28918,7 @@ class ResultsTableComponent {
28621
28918
  // emits the column (field) as well as the order
28622
28919
  this.sortByChange = new EventEmitter();
28623
28920
  this.recordClick = new EventEmitter();
28921
+ this.duplicateRecord = new EventEmitter();
28624
28922
  this.recordsSelectedChange = new EventEmitter();
28625
28923
  }
28626
28924
  dateToString(date) {
@@ -28655,6 +28953,9 @@ class ResultsTableComponent {
28655
28953
  handleRecordClick(item) {
28656
28954
  this.recordClick.emit(item);
28657
28955
  }
28956
+ handleDuplicate(item) {
28957
+ this.duplicateRecord.emit(item);
28958
+ }
28658
28959
  setSortBy(col, order) {
28659
28960
  this.sortByChange.emit([col, order]);
28660
28961
  }
@@ -28690,7 +28991,7 @@ class ResultsTableComponent {
28690
28991
  return !allSelected && someSelected;
28691
28992
  }
28692
28993
  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"] }] }); }
28994
+ 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
28995
  }
28695
28996
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, decorators: [{
28696
28997
  type: Component,
@@ -28702,7 +29003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28702
29003
  MatIconModule,
28703
29004
  TranslateModule,
28704
29005
  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" }]
29006
+ ActionMenuComponent,
29007
+ ], 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
29008
  }], propDecorators: { records: [{
28707
29009
  type: Input
28708
29010
  }], selectedRecordsIdentifiers: [{
@@ -28715,6 +29017,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28715
29017
  type: Output
28716
29018
  }], recordClick: [{
28717
29019
  type: Output
29020
+ }], duplicateRecord: [{
29021
+ type: Output
28718
29022
  }], recordsSelectedChange: [{
28719
29023
  type: Output
28720
29024
  }] } });
@@ -30489,12 +30793,14 @@ marker('search.filters.keyword');
30489
30793
  marker('search.filters.isSpatial');
30490
30794
  marker('search.filters.license');
30491
30795
  marker('search.filters.publicationYear');
30492
- marker('search.filters.publisher');
30796
+ marker('search.filters.organization');
30493
30797
  marker('search.filters.representationType');
30494
30798
  marker('search.filters.resourceType');
30495
30799
  marker('search.filters.standard');
30496
30800
  marker('search.filters.topic');
30497
30801
  marker('search.filters.contact');
30802
+ marker('search.filters.producerOrg');
30803
+ marker('search.filters.publisherOrg');
30498
30804
  class FieldsService {
30499
30805
  get supportedFields() {
30500
30806
  return Object.keys(this.fields);
@@ -30502,7 +30808,7 @@ class FieldsService {
30502
30808
  constructor(injector) {
30503
30809
  this.injector = injector;
30504
30810
  this.fields = {
30505
- publisher: new OrganizationSearchField(this.injector),
30811
+ organization: new OrganizationSearchField(this.injector),
30506
30812
  format: new SimpleSearchField('format', this.injector, 'asc'),
30507
30813
  resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
30508
30814
  representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
@@ -30515,6 +30821,8 @@ class FieldsService {
30515
30821
  q: new FullTextSearchField(),
30516
30822
  license: new LicenseSearchField(this.injector),
30517
30823
  owner: new OwnerSearchField(this.injector),
30824
+ producerOrg: new MultilingualSearchField('originatorOrgForResourceObject', this.injector, 'asc', 'key'),
30825
+ publisherOrg: new MultilingualSearchField('distributorOrgForResourceObject', this.injector, 'asc', 'key'),
30518
30826
  };
30519
30827
  }
30520
30828
  getAvailableValues(fieldName) {
@@ -30692,6 +31000,7 @@ class ResultsTableContainerComponent {
30692
31000
  this.selectionService = selectionService;
30693
31001
  this.recordsRepository = recordsRepository;
30694
31002
  this.recordClick = new EventEmitter();
31003
+ this.duplicateRecord = new EventEmitter();
30695
31004
  this.records$ = this.searchFacade.results$;
30696
31005
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
30697
31006
  this.sortBy$ = this.searchFacade.sortBy$;
@@ -30700,6 +31009,9 @@ class ResultsTableContainerComponent {
30700
31009
  handleRecordClick(item) {
30701
31010
  this.recordClick.emit(item);
30702
31011
  }
31012
+ handleDuplicateRecord(item) {
31013
+ this.duplicateRecord.emit(item);
31014
+ }
30703
31015
  handleSortByChange(col, order) {
30704
31016
  this.searchService.setSortBy([order, col]);
30705
31017
  }
@@ -30712,13 +31024,15 @@ class ResultsTableContainerComponent {
30712
31024
  }
30713
31025
  }
30714
31026
  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"] }] }); }
31027
+ 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
31028
  }
30717
31029
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
30718
31030
  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" }]
31031
+ 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
31032
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }]; }, propDecorators: { recordClick: [{
30721
31033
  type: Output
31034
+ }], duplicateRecord: [{
31035
+ type: Output
30722
31036
  }] } });
30723
31037
 
30724
31038
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
@@ -31018,7 +31332,7 @@ class LayersPanelComponent {
31018
31332
  this.mapFacade.addLayer(layer);
31019
31333
  }
31020
31334
  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 }); }
31335
+ 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
31336
  }
31023
31337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, decorators: [{
31024
31338
  type: Component,
@@ -31760,7 +32074,7 @@ class TableComponent {
31760
32074
  return rowIdPrefix + id;
31761
32075
  }
31762
32076
  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 }); }
32077
+ 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
32078
  }
31765
32079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
31766
32080
  type: Component,
@@ -33856,9 +34170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33856
34170
  class RecordsService {
33857
34171
  constructor(recordsRepository) {
33858
34172
  this.recordsRepository = recordsRepository;
33859
- this.recordsCount$ = this.recordsRepository
33860
- .getMatchesCount({})
33861
- .pipe(shareReplay(1), catchError(() => of(0)));
34173
+ this.recordsCount$ = of(true).pipe(switchMap(() => this.recordsRepository.getMatchesCount({})), shareReplay(1));
33862
34174
  }
33863
34175
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, deps: [{ token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
33864
34176
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, providedIn: 'root' }); }
@@ -33908,37 +34220,54 @@ const GN_UI_VERSION = new InjectionToken('gnUiVersion');
33908
34220
 
33909
34221
  const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
33910
34222
  class DataViewPermalinkComponent {
34223
+ set viewType(value) {
34224
+ this.viewType$.next(value);
34225
+ }
33911
34226
  constructor(config, wcEmbedderBaseUrl, version, facade) {
33912
34227
  this.config = config;
33913
34228
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33914
34229
  this.version = version;
33915
34230
  this.facade = facade;
34231
+ this.viewType$ = new BehaviorSubject('map');
33916
34232
  this.permalinkUrl$ = combineLatest([
34233
+ this.viewType$,
33917
34234
  this.facade.chartConfig$,
33918
34235
  this.facade.metadata$,
33919
- ]).pipe(map$2(([config, metadata]) => {
33920
- if (config) {
33921
- const { aggregation, xProperty, yProperty, chartType } = config;
33922
- const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
33923
- url.searchParams.set('v', `${this.version}`);
33924
- url.searchParams.append('e', `gn-dataset-view-chart`);
33925
- url.searchParams.append('a', `api-url=${this.config.basePath}`);
33926
- url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
33927
- url.searchParams.append('a', `primary-color=#0f4395`);
33928
- url.searchParams.append('a', `secondary-color=#8bc832`);
33929
- url.searchParams.append('a', `main-color=#555`);
33930
- url.searchParams.append('a', `background-color=#fdfbff`);
33931
- url.searchParams.append('a', `aggregation=${aggregation}`);
33932
- url.searchParams.append('a', `x-property=${xProperty}`);
33933
- url.searchParams.append('a', `y-property=${yProperty}`);
33934
- url.searchParams.append('a', `chart-type=${chartType}`);
33935
- return url.toString();
34236
+ ]).pipe(map$2(([viewType, config, metadata]) => {
34237
+ const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
34238
+ url.searchParams.set('v', `${this.version}`);
34239
+ if (viewType === 'chart') {
34240
+ if (config) {
34241
+ const { aggregation, xProperty, yProperty, chartType } = config;
34242
+ url.searchParams.append('e', `gn-dataset-view-chart`);
34243
+ url.searchParams.append('a', `aggregation=${aggregation}`);
34244
+ url.searchParams.append('a', `x-property=${xProperty}`);
34245
+ url.searchParams.append('a', `y-property=${yProperty}`);
34246
+ url.searchParams.append('a', `chart-type=${chartType}`);
34247
+ }
34248
+ else {
34249
+ return '';
34250
+ }
33936
34251
  }
33937
- return '';
34252
+ else if (viewType === 'table') {
34253
+ // table
34254
+ url.searchParams.append('e', `gn-dataset-view-table`);
34255
+ }
34256
+ else {
34257
+ // map
34258
+ url.searchParams.append('e', `gn-dataset-view-map`);
34259
+ }
34260
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
34261
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
34262
+ url.searchParams.append('a', `primary-color=#0f4395`);
34263
+ url.searchParams.append('a', `secondary-color=#8bc832`);
34264
+ url.searchParams.append('a', `main-color=#555`);
34265
+ url.searchParams.append('a', `background-color=#fdfbff`);
34266
+ return url.toString();
33938
34267
  }));
33939
34268
  }
33940
34269
  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 }); }
33941
- 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 }); }
34270
+ 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 }); }
33942
34271
  }
33943
34272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
33944
34273
  type: Component,
@@ -33954,37 +34283,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33954
34283
  }] }, { type: undefined, decorators: [{
33955
34284
  type: Inject,
33956
34285
  args: [GN_UI_VERSION]
33957
- }] }, { type: MdViewFacade }]; } });
34286
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34287
+ type: Input
34288
+ }] } });
33958
34289
 
33959
34290
  class DataViewWebComponentComponent {
34291
+ set viewType(value) {
34292
+ this.viewType$.next(value);
34293
+ }
33960
34294
  constructor(config, version, facade) {
33961
34295
  this.config = config;
33962
34296
  this.version = version;
33963
34297
  this.facade = facade;
33964
- this.webComponentHtml$ = combineLatest(this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([config, metadata]) => {
33965
- if (config) {
33966
- const { aggregation, xProperty, yProperty, chartType } = config;
34298
+ this.viewType$ = new BehaviorSubject('map');
34299
+ this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
34300
+ if (viewType === 'chart') {
34301
+ if (config) {
34302
+ const { aggregation, xProperty, yProperty, chartType } = config;
34303
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34304
+ <gn-dataset-view-chart
34305
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34306
+ dataset-id="${metadata.uniqueIdentifier}"
34307
+ aggregation="${aggregation}"
34308
+ x-property="${xProperty}"
34309
+ y-property="${yProperty}"
34310
+ chart-type="${chartType}"
34311
+ primary-color="#0f4395"
34312
+ secondary-color="#8bc832"
34313
+ main-color="#555"
34314
+ background-color="#fdfbff"
34315
+ main-font="'Inter', sans-serif"
34316
+ title-font="'DM Serif Display', serif"
34317
+ ></gn-dataset-view-chart>`;
34318
+ }
34319
+ return '';
34320
+ }
34321
+ else if (viewType === 'table') {
34322
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34323
+ <gn-dataset-view-table
34324
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34325
+ dataset-id="${metadata.uniqueIdentifier}"
34326
+ primary-color="#0f4395"
34327
+ secondary-color="#8bc832"
34328
+ main-color="#555"
34329
+ background-color="#fdfbff"
34330
+ main-font="'Inter', sans-serif"
34331
+ title-font="'DM Serif Display', serif"
34332
+ ></gn-dataset-view-table>`;
34333
+ }
34334
+ else {
33967
34335
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
33968
- <gn-dataset-view-chart
34336
+ <gn-dataset-view-map
33969
34337
  api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
33970
34338
  dataset-id="${metadata.uniqueIdentifier}"
33971
- aggregation="${aggregation}"
33972
- x-property="${xProperty}"
33973
- y-property="${yProperty}"
33974
- chart-type="${chartType}"
33975
34339
  primary-color="#0f4395"
33976
34340
  secondary-color="#8bc832"
33977
34341
  main-color="#555"
33978
34342
  background-color="#fdfbff"
33979
34343
  main-font="'Inter', sans-serif"
33980
34344
  title-font="'DM Serif Display', serif"
33981
- ></gn-dataset-view-chart>`;
34345
+ ></gn-dataset-view-map>`;
33982
34346
  }
33983
- return '';
33984
34347
  }));
33985
34348
  }
33986
34349
  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 }); }
33987
- 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 }); }
34350
+ 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 }); }
33988
34351
  }
33989
34352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
33990
34353
  type: Component,
@@ -33995,24 +34358,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33995
34358
  }] }, { type: undefined, decorators: [{
33996
34359
  type: Inject,
33997
34360
  args: [GN_UI_VERSION]
33998
- }] }, { type: MdViewFacade }]; } });
34361
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34362
+ type: Input
34363
+ }] } });
33999
34364
 
34000
34365
  class DataViewShareComponent {
34366
+ set viewType(value) {
34367
+ this._viewType = value;
34368
+ }
34369
+ get viewType() {
34370
+ return this._viewType;
34371
+ }
34001
34372
  constructor(wcEmbedderBaseUrl) {
34002
34373
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
34003
34374
  }
34004
34375
  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 }); }
34005
- 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 }); }
34376
+ 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 }); }
34006
34377
  }
34007
34378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, decorators: [{
34008
34379
  type: Component,
34009
- 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"] }]
34380
+ 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"] }]
34010
34381
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
34011
34382
  type: Optional
34012
34383
  }, {
34013
34384
  type: Inject,
34014
34385
  args: [WEB_COMPONENT_EMBEDDER_URL]
34015
- }] }]; } });
34386
+ }] }]; }, propDecorators: { viewType: [{
34387
+ type: Input
34388
+ }] } });
34016
34389
 
34017
34390
  class FeatureRecordModule {
34018
34391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeatureRecordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -34102,75 +34475,159 @@ const saveRecord = createAction('[Editor] Save record');
34102
34475
  const saveRecordSuccess = createAction('[Editor] Save record success');
34103
34476
  const saveRecordFailure = createAction('[Editor] Save record failure', props());
34104
34477
  const draftSaveSuccess = createAction('[Editor] Draft save success');
34478
+ const setCurrentPage = createAction('[Editor] Set current page', props());
34105
34479
 
34106
- const DEFAULT_FIELDS = [
34107
- {
34108
- model: 'title',
34109
- formFieldConfig: {
34110
- labelKey: 'Metadata title',
34111
- type: 'text',
34112
- },
34480
+ /**
34481
+ * This file contains the configuration of the fields that will be displayed in the editor.
34482
+ * To add a new field, you need to create a new EditorField object in the fields part of this file.
34483
+ * Then add it to the corresponding section in the sections part of this file.
34484
+ * Finally, add the section to the corresponding page in the pages part of this file.
34485
+ */
34486
+ /************************************************************
34487
+ *************** FIELDS *****************
34488
+ ************************************************************
34489
+ */
34490
+ const RECORD_LICENSE_FIELD = {
34491
+ model: 'licenses',
34492
+ formFieldConfig: {
34493
+ labelKey: marker('editor.record.form.field.license'),
34113
34494
  },
34114
- {
34115
- model: 'abstract',
34116
- formFieldConfig: {
34117
- labelKey: 'Abstract',
34118
- type: 'rich',
34119
- },
34495
+ };
34496
+ const RECORD_KEYWORDS_FIELD = {
34497
+ model: 'keywords',
34498
+ formFieldConfig: {
34499
+ labelKey: marker('editor.record.form.field.keywords'),
34120
34500
  },
34121
- {
34122
- model: 'uniqueIdentifier',
34123
- formFieldConfig: {
34124
- labelKey: 'Unique identifier',
34125
- type: 'text',
34126
- locked: true,
34127
- },
34501
+ };
34502
+ const RECORD_UNIQUE_IDENTIFIER_FIELD = {
34503
+ model: 'uniqueIdentifier',
34504
+ formFieldConfig: {
34505
+ labelKey: marker('editor.record.form.field.uniqueIdentifier'),
34506
+ locked: true,
34128
34507
  },
34129
- {
34130
- model: 'recordUpdated',
34131
- formFieldConfig: {
34132
- labelKey: 'Record Updated',
34133
- type: 'text',
34134
- locked: true,
34135
- },
34136
- onSaveProcess: '${dateNow()}',
34508
+ };
34509
+ const RECORD_RESOURCE_UPDATED_FIELD = {
34510
+ model: 'resourceUpdated',
34511
+ formFieldConfig: {
34512
+ labelKey: marker('editor.record.form.field.resourceUpdated'),
34137
34513
  },
34138
- {
34139
- model: 'licenses',
34140
- formFieldConfig: {
34141
- labelKey: marker('editor.record.form.license'),
34142
- type: 'list',
34143
- },
34514
+ };
34515
+ const RECORD_UPDATED_FIELD = {
34516
+ model: 'recordUpdated',
34517
+ formFieldConfig: {
34518
+ labelKey: marker('editor.record.form.field.recordUpdated'),
34519
+ locked: true,
34144
34520
  },
34145
- {
34146
- model: 'resourceUpdated',
34147
- formFieldConfig: {
34148
- labelKey: marker('editor.record.form.resourceUpdated'),
34149
- type: 'date',
34150
- },
34521
+ onSaveProcess: '${dateNow()}',
34522
+ };
34523
+ const RECORD_UPDATE_FREQUENCY_FIELD = {
34524
+ model: 'updateFrequency',
34525
+ formFieldConfig: {
34526
+ labelKey: marker('editor.record.form.field.updateFrequency'),
34151
34527
  },
34152
- {
34153
- model: 'updateFrequency',
34154
- formFieldConfig: {
34155
- labelKey: marker('editor.record.form.updateFrequency'),
34156
- type: 'text',
34157
- },
34528
+ };
34529
+ const RECORD_TEMPORAL_EXTENTS_FIELD = {
34530
+ model: 'temporalExtents',
34531
+ formFieldConfig: {
34532
+ labelKey: marker('editor.record.form.field.temporalExtents'),
34158
34533
  },
34159
- {
34160
- model: 'temporalExtents',
34161
- formFieldConfig: {
34162
- labelKey: marker('editor.record.form.temporalExtents'),
34163
- type: 'list',
34164
- },
34534
+ };
34535
+ const RECORD_TITLE_FIELD = {
34536
+ model: 'title',
34537
+ formFieldConfig: {
34538
+ labelKey: marker('editor.record.form.field.title'),
34165
34539
  },
34166
- {
34167
- model: 'keywords',
34168
- formFieldConfig: {
34169
- labelKey: marker('editor.record.form.keywords'),
34170
- type: 'list',
34171
- },
34540
+ };
34541
+ const RECORD_ABSTRACT_FIELD = {
34542
+ model: 'abstract',
34543
+ formFieldConfig: {
34544
+ labelKey: marker('editor.record.form.field.abstract'),
34172
34545
  },
34173
- ];
34546
+ };
34547
+ /************************************************************
34548
+ *************** SECTIONS *****************
34549
+ ************************************************************
34550
+ */
34551
+ const TITLE_SECTION = {
34552
+ hidden: false,
34553
+ fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD],
34554
+ };
34555
+ const ABOUT_SECTION = {
34556
+ labelKey: marker('editor.record.form.section.about.label'),
34557
+ descriptionKey: marker('editor.record.form.section.about.description'),
34558
+ hidden: false,
34559
+ fields: [
34560
+ RECORD_UNIQUE_IDENTIFIER_FIELD,
34561
+ RECORD_RESOURCE_UPDATED_FIELD,
34562
+ RECORD_UPDATED_FIELD,
34563
+ RECORD_UPDATE_FREQUENCY_FIELD,
34564
+ RECORD_TEMPORAL_EXTENTS_FIELD,
34565
+ ],
34566
+ };
34567
+ const GEOGRAPHICAL_COVERAGE_SECTION = {
34568
+ labelKey: marker('editor.record.form.section.geographicalCoverage.label'),
34569
+ hidden: false,
34570
+ fields: [],
34571
+ };
34572
+ const ASSOCIATED_RESOURCES_SECTION = {
34573
+ labelKey: marker('editor.record.form.section.associatedResources.label'),
34574
+ descriptionKey: marker('editor.record.form.section.associatedResources.description'),
34575
+ hidden: false,
34576
+ fields: [],
34577
+ };
34578
+ const ANNEXES_SECTION = {
34579
+ labelKey: marker('editor.record.form.section.annexes.label'),
34580
+ hidden: false,
34581
+ fields: [],
34582
+ };
34583
+ const CLASSIFICATION_SECTION = {
34584
+ labelKey: marker('editor.record.form.section.classification.label'),
34585
+ descriptionKey: marker('editor.record.form.section.classification.description'),
34586
+ hidden: false,
34587
+ fields: [RECORD_KEYWORDS_FIELD],
34588
+ };
34589
+ const USE_AND_ACCESS_CONDITIONS_SECTION = {
34590
+ labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
34591
+ hidden: false,
34592
+ fields: [RECORD_LICENSE_FIELD],
34593
+ };
34594
+ const DATA_MANAGERS_SECTION = {
34595
+ labelKey: marker('editor.record.form.section.dataManagers.label'),
34596
+ descriptionKey: marker('editor.record.form.section.dataManagers.description'),
34597
+ hidden: false,
34598
+ fields: [],
34599
+ };
34600
+ const DATA_POINT_OF_CONTACT_SECTION = {
34601
+ labelKey: marker('editor.record.form.section.dataPointOfContact.label'),
34602
+ descriptionKey: marker('editor.record.form.section.dataPointOfContact.description'),
34603
+ hidden: false,
34604
+ fields: [],
34605
+ };
34606
+ /************************************************************
34607
+ *************** PAGES *****************
34608
+ ************************************************************
34609
+ */
34610
+ const DEFAULT_CONFIGURATION = {
34611
+ pages: [
34612
+ {
34613
+ labelKey: marker('editor.record.form.page.description'),
34614
+ sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
34615
+ },
34616
+ {
34617
+ labelKey: marker('editor.record.form.page.ressources'),
34618
+ sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
34619
+ },
34620
+ {
34621
+ labelKey: marker('editor.record.form.page.accessAndContact'),
34622
+ sections: [
34623
+ CLASSIFICATION_SECTION,
34624
+ USE_AND_ACCESS_CONDITIONS_SECTION,
34625
+ DATA_MANAGERS_SECTION,
34626
+ DATA_POINT_OF_CONTACT_SECTION,
34627
+ ],
34628
+ },
34629
+ ],
34630
+ };
34174
34631
 
34175
34632
  const EDITOR_FEATURE_KEY = 'editor';
34176
34633
  const initialEditorState = {
@@ -34180,7 +34637,8 @@ const initialEditorState = {
34180
34637
  saving: false,
34181
34638
  saveError: null,
34182
34639
  changedSinceSave: false,
34183
- fieldsConfig: DEFAULT_FIELDS,
34640
+ editorConfig: DEFAULT_CONFIGURATION,
34641
+ currentPage: 0,
34184
34642
  };
34185
34643
  const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
34186
34644
  ...state,
@@ -34210,6 +34668,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
34210
34668
  })), on(markRecordAsChanged, (state) => ({
34211
34669
  ...state,
34212
34670
  changedSinceSave: true,
34671
+ })), on(setCurrentPage, (state, { page }) => ({
34672
+ ...state,
34673
+ currentPage: page,
34213
34674
  })));
34214
34675
  function editorReducer(state, action) {
34215
34676
  return reducer(state, action);
@@ -34222,11 +34683,21 @@ const selectRecordSaving = createSelector(selectEditorState, (state) => state.sa
34222
34683
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
34223
34684
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
34224
34685
  const selectRecordAlreadySavedOnce = createSelector(selectEditorState, (state) => state.alreadySavedOnce);
34225
- const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
34226
- const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
34227
- config: fieldConfig,
34228
- value: state.record?.[fieldConfig.model] ?? null,
34229
- })));
34686
+ const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
34687
+ const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
34688
+ const selectRecordSections = createSelector(selectEditorState, (state) => {
34689
+ const currentPage = state.editorConfig.pages[state.currentPage];
34690
+ if (!currentPage) {
34691
+ return [];
34692
+ }
34693
+ return currentPage.sections.map((section) => ({
34694
+ ...section,
34695
+ fieldsWithValues: section.fields.map((fieldConfig) => ({
34696
+ config: fieldConfig,
34697
+ value: state.record?.[fieldConfig.model] ?? null,
34698
+ })),
34699
+ }));
34700
+ });
34230
34701
 
34231
34702
  class EditorFacade {
34232
34703
  constructor() {
@@ -34239,8 +34710,10 @@ class EditorFacade {
34239
34710
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
34240
34711
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
34241
34712
  this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
34242
- this.recordFields$ = this.store.pipe(select(selectRecordFields));
34713
+ this.currentSections$ = this.store.pipe(select(selectRecordSections));
34243
34714
  this.draftSaveSuccess$ = this.actions$.pipe(ofType(draftSaveSuccess));
34715
+ this.currentPage$ = this.store.pipe(select(selectCurrentPage));
34716
+ this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
34244
34717
  }
34245
34718
  openRecord(record, recordSource, alreadySavedOnce) {
34246
34719
  this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
@@ -34251,6 +34724,9 @@ class EditorFacade {
34251
34724
  updateRecordField(field, value) {
34252
34725
  this.store.dispatch(updateRecordField({ field, value }));
34253
34726
  }
34727
+ setCurrentPage(page) {
34728
+ this.store.dispatch(setCurrentPage({ page }));
34729
+ }
34254
34730
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34255
34731
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade }); }
34256
34732
  }
@@ -34278,12 +34754,13 @@ class EditorService {
34278
34754
  // returns the record as it was when saved, alongside its source
34279
34755
  saveRecord(record, fieldsConfig, generateNewUniqueIdentifier = false) {
34280
34756
  const savedRecord = { ...record };
34757
+ const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
34281
34758
  // run onSave processes
34282
- for (const field of fieldsConfig) {
34759
+ for (const field of fields) {
34283
34760
  if (field.onSaveProcess && field.model) {
34284
34761
  const evaluator = evaluate(field.onSaveProcess);
34285
34762
  savedRecord[field.model] = evaluator({
34286
- config: field,
34763
+ model: field.model,
34287
34764
  value: record[field.model],
34288
34765
  });
34289
34766
  }
@@ -34320,7 +34797,7 @@ class EditorEffects {
34320
34797
  this.editorService = inject(EditorService);
34321
34798
  this.recordsRepository = inject(RecordsRepositoryInterface);
34322
34799
  this.store = inject(Store);
34323
- 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
34800
+ 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
34324
34801
  .saveRecord(record, fieldsConfig, !alreadySavedOnce)
34325
34802
  .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
34326
34803
  record,
@@ -34757,7 +35234,9 @@ class FormFieldKeywordsComponent {
34757
35234
  return `${item.title} (${item.value.thesaurus?.name})`;
34758
35235
  };
34759
35236
  this.autoCompleteAction = (query) => {
34760
- return this.platformService.searchKeywords(query).pipe(map$2((keywords) => keywords.map((keyword) => {
35237
+ return this.platformService
35238
+ .searchKeywords(query, ['temporal', 'theme', 'other'])
35239
+ .pipe(map$2((keywords) => keywords.map((keyword) => {
34761
35240
  return { title: keyword.label, value: keyword };
34762
35241
  })));
34763
35242
  };
@@ -35271,7 +35750,7 @@ class FormFieldComponent {
35271
35750
  return this.model === 'title' || this.model === 'abstract';
35272
35751
  }
35273
35752
  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 }); }
35753
+ 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
35754
  }
35276
35755
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
35277
35756
  type: Component,
@@ -35294,7 +35773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35294
35773
  FormFieldArrayComponent,
35295
35774
  FormFieldKeywordsComponent,
35296
35775
  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" }]
35776
+ ], 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
35777
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
35299
35778
  type: Input
35300
35779
  }], config: [{
@@ -35311,23 +35790,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35311
35790
  class RecordFormComponent {
35312
35791
  constructor(facade) {
35313
35792
  this.facade = facade;
35314
- this.fields$ = this.facade.recordFields$;
35315
35793
  }
35316
- handleFieldValueChange(field, newValue) {
35317
- if (!field.config.model) {
35794
+ handleFieldValueChange(model, newValue) {
35795
+ if (!model) {
35318
35796
  return;
35319
35797
  }
35320
- this.facade.updateRecordField(field.config.model, newValue);
35798
+ this.facade.updateRecordField(model, newValue);
35321
35799
  }
35322
35800
  fieldTracker(index, field) {
35323
35801
  return field.config.model;
35324
35802
  }
35803
+ sectionTracker(index, section) {
35804
+ return section.labelKey;
35805
+ }
35325
35806
  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 }); }
35807
+ 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
35808
  }
35328
35809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, decorators: [{
35329
35810
  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" }]
35811
+ 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
35812
  }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
35332
35813
 
35333
35814
  const ROUTER_STATE_KEY = 'router';
@@ -35710,5 +36191,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35710
36191
  * Generated bundle index. Do not edit.
35711
36192
  */
35712
36193
 
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 };
36194
+ 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, 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
36195
  //# sourceMappingURL=geonetwork-ui.mjs.map