geonetwork-ui 2.4.0-dev.9c5250ea → 2.4.0-dev.a1bcfe22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) 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/organizations/organizations-from-groups.service.mjs +2 -1
  6. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -1
  7. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +2 -2
  8. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -5
  9. package/esm2022/libs/common/domain/src/lib/model/record/organization.model.mjs +1 -1
  10. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  11. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  12. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
  13. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  14. package/esm2022/libs/feature/catalog/src/index.mjs +2 -1
  15. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +1 -1
  16. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +6 -6
  17. package/esm2022/libs/feature/catalog/src/lib/organization-url.token.mjs +4 -0
  18. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -6
  19. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  20. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
  21. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +7 -2
  22. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  23. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
  24. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
  25. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -2
  26. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  27. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +1 -2
  28. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +11 -7
  29. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  30. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +143 -60
  31. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  32. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  33. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +4 -3
  34. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
  35. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
  36. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
  37. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +6 -3
  38. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +2 -1
  39. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  40. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +9 -2
  41. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +8 -1
  42. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +9 -3
  43. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  44. package/esm2022/libs/feature/search/src/lib/state/selectors.mjs +4 -1
  45. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
  46. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +5 -5
  47. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +5 -2
  48. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -8
  49. package/esm2022/libs/ui/elements/src/index.mjs +1 -2
  50. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  51. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +5 -3
  52. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +4 -4
  53. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +5 -11
  54. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +3 -3
  55. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +24 -5
  56. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +11 -10
  57. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  58. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  59. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +71 -0
  60. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +1 -1
  61. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
  62. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
  63. package/esm2022/libs/ui/widgets/src/index.mjs +2 -1
  64. package/esm2022/libs/ui/widgets/src/lib/popover/popover.component.mjs +68 -0
  65. package/esm2022/translations/de.json +88 -33
  66. package/esm2022/translations/en.json +59 -4
  67. package/esm2022/translations/es.json +59 -4
  68. package/esm2022/translations/fr.json +60 -5
  69. package/esm2022/translations/it.json +59 -4
  70. package/esm2022/translations/nl.json +59 -4
  71. package/esm2022/translations/pt.json +59 -4
  72. package/fesm2022/geonetwork-ui.mjs +1015 -305
  73. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  74. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  75. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  76. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  77. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  78. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  79. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  80. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  81. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  82. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  83. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -1
  84. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  85. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +1 -0
  86. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  87. package/libs/common/domain/src/lib/platform.service.interface.d.ts +2 -1
  88. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  89. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
  90. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  91. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  92. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  93. package/libs/feature/catalog/src/index.d.ts +1 -0
  94. package/libs/feature/catalog/src/index.d.ts.map +1 -1
  95. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  96. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  97. package/libs/feature/catalog/src/lib/organization-url.token.d.ts +3 -0
  98. package/libs/feature/catalog/src/lib/organization-url.token.d.ts.map +1 -0
  99. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  100. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
  101. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  102. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
  103. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  104. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  105. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  106. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  107. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  108. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  109. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  110. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  111. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
  112. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  113. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
  114. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  115. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
  116. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  117. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  118. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  119. package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
  120. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  121. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
  122. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  123. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  124. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  125. package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
  126. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  127. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  128. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  129. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  130. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  131. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  132. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  133. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  134. package/libs/feature/router/src/lib/default/constants.d.ts +1 -0
  135. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  136. package/libs/feature/router/src/lib/default/router.config.d.ts +1 -0
  137. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  138. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -0
  139. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  140. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +1 -0
  141. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  142. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
  143. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  144. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -0
  145. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  146. package/libs/feature/search/src/lib/state/selectors.d.ts +1 -0
  147. package/libs/feature/search/src/lib/state/selectors.d.ts.map +1 -1
  148. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  149. package/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.d.ts +2 -2
  150. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +2 -1
  151. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  152. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -2
  153. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  154. package/libs/ui/elements/src/index.d.ts +0 -1
  155. package/libs/ui/elements/src/index.d.ts.map +1 -1
  156. package/libs/ui/elements/src/lib/error/error.component.d.ts +3 -1
  157. package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -1
  158. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -3
  159. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  160. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +5 -1
  161. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  162. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +16 -15
  163. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  164. package/libs/ui/layout/src/index.d.ts +1 -0
  165. package/libs/ui/layout/src/index.d.ts.map +1 -1
  166. package/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.d.ts +2 -2
  167. package/libs/ui/layout/src/lib/max-lines/max-lines.component.d.ts.map +1 -0
  168. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  169. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
  170. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  171. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
  172. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  173. package/libs/ui/widgets/src/index.d.ts +1 -0
  174. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  175. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts +19 -0
  176. package/libs/ui/widgets/src/lib/popover/popover.component.d.ts.map +1 -0
  177. package/package.json +1 -1
  178. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  179. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  180. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  181. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
  182. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -0
  183. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +3 -1
  184. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +1 -1
  185. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +26 -15
  186. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +1 -0
  187. package/src/libs/common/domain/src/lib/platform.service.interface.ts +5 -1
  188. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
  189. package/src/libs/common/fixtures/src/index.ts +2 -0
  190. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  191. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  192. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +28 -0
  193. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
  194. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
  195. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  196. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  197. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  198. package/src/libs/feature/catalog/src/index.ts +1 -0
  199. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +0 -1
  200. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.html +1 -1
  201. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +2 -2
  202. package/src/libs/feature/catalog/src/lib/organization-url.token.ts +6 -0
  203. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  204. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
  205. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
  206. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
  207. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  208. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  209. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  210. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +8 -6
  211. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
  212. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
  213. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
  214. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
  215. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
  216. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  217. package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
  218. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
  219. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  220. package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
  221. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  222. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  223. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  224. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  225. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +6 -2
  226. package/src/libs/feature/router/src/lib/default/constants.ts +1 -0
  227. package/src/libs/feature/router/src/lib/default/router.config.ts +1 -0
  228. package/src/libs/feature/router/src/lib/default/router.service.ts +13 -1
  229. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +9 -1
  230. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  231. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
  232. package/src/libs/feature/search/src/lib/state/search.facade.ts +5 -0
  233. package/src/libs/feature/search/src/lib/state/selectors.ts +7 -0
  234. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  235. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +8 -6
  236. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  237. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +2 -0
  238. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +11 -3
  239. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +3 -7
  240. package/src/libs/ui/elements/src/index.ts +0 -1
  241. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  242. package/src/libs/ui/elements/src/lib/error/error.component.html +30 -6
  243. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -0
  244. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +14 -20
  245. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -10
  246. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.html +1 -1
  247. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  248. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +22 -1
  249. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +4 -5
  250. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  251. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  252. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  253. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  254. package/src/libs/ui/layout/src/index.ts +1 -0
  255. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.html +1 -0
  256. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.ts +9 -5
  257. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -1
  258. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  259. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
  260. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
  261. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
  262. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
  263. package/src/libs/ui/widgets/src/index.ts +1 -0
  264. package/src/libs/ui/widgets/src/lib/popover/popover.component.css +0 -0
  265. package/src/libs/ui/widgets/src/lib/popover/popover.component.html +3 -0
  266. package/src/libs/ui/widgets/src/lib/popover/popover.component.ts +85 -0
  267. package/tailwind.base.css +2 -1
  268. package/translations/de.json +88 -33
  269. package/translations/en.json +59 -4
  270. package/translations/es.json +59 -4
  271. package/translations/fr.json +60 -5
  272. package/translations/it.json +59 -4
  273. package/translations/nl.json +59 -4
  274. package/translations/pt.json +59 -4
  275. package/translations/sk.json +60 -5
  276. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  277. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  278. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +0 -69
  279. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  280. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  281. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  282. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  283. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +0 -1
  284. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  285. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
  286. /package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.css +0 -0
@@ -1,7 +1,7 @@
1
1
  import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
2
2
  import format from 'date-fns/format';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, TemplateRef, Host, Pipe, inject } from '@angular/core';
4
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, TemplateRef, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, Host, Pipe, inject } from '@angular/core';
5
5
  import * as i1 from '@angular/common/http';
6
6
  import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
7
7
  import * as i1$1 from '@ngx-translate/core';
@@ -48,7 +48,7 @@ import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
48
48
  import VectorTileLayer from 'ol/layer/VectorTile';
49
49
  import OGCMapTile from 'ol/source/OGCMapTile.js';
50
50
  import ImageLayer from 'ol/layer/Image';
51
- import * as i2$5 from '@angular/material/tabs';
51
+ import * as i2$6 from '@angular/material/tabs';
52
52
  import { MatTabsModule } from '@angular/material/tabs';
53
53
  import * as i2$2 from '@angular/forms';
54
54
  import { FormsModule, ReactiveFormsModule, UntypedFormControl, FormArray, FormControl } from '@angular/forms';
@@ -60,6 +60,7 @@ import * as i5 from 'ngx-chips';
60
60
  import { TagInputModule } from 'ngx-chips';
61
61
  import * as i1$4 from '@angular/material/progress-spinner';
62
62
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
63
+ import tippy from 'tippy.js';
63
64
  import * as i3 from '@angular/material/core';
64
65
  import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
65
66
  import * as i1$5 from '@angular/material/checkbox';
@@ -81,9 +82,10 @@ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/c
81
82
  import EmblaCarousel from 'embla-carousel';
82
83
  import { formatDistance } from 'date-fns';
83
84
  import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
85
+ import * as i2$5 from '@angular/material/menu';
86
+ import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
84
87
  import * as i1$8 from '@ngrx/effects';
85
88
  import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
86
- import tippy from 'tippy.js';
87
89
  import { valid as valid$1 } from 'geojson-validation';
88
90
  import { Polygon } from 'ol/geom';
89
91
  import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
@@ -91,7 +93,7 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
91
93
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
92
94
  import * as i4 from '@angular/cdk/scrolling';
93
95
  import { ScrollingModule } from '@angular/cdk/scrolling';
94
- import * as i2$6 from '@angular/material/sort';
96
+ import * as i2$7 from '@angular/material/sort';
95
97
  import { MatSort, MatSortModule } from '@angular/material/sort';
96
98
  import * as i1$9 from '@angular/material/table';
97
99
  import { MatTableModule } from '@angular/material/table';
@@ -2176,6 +2178,7 @@ const mapKeywords = (thesauri, language) => {
2176
2178
  keywords.push({
2177
2179
  label: selectTranslatedValue(keyword, language),
2178
2180
  type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
2181
+ ...(keyword.link && { key: keyword.link }),
2179
2182
  ...(thesaurus && { thesaurus }),
2180
2183
  });
2181
2184
  }
@@ -8641,11 +8644,7 @@ class RecordsApiService {
8641
8644
  headers = headers.set('Accept', httpHeaderAcceptSelected);
8642
8645
  }
8643
8646
  // to determine the Content-Type header
8644
- const consumes = [
8645
- 'application/xml',
8646
- 'application/json',
8647
- 'application/x-www-form-urlencoded',
8648
- ];
8647
+ const consumes = ['application/xml'];
8649
8648
  const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
8650
8649
  if (httpContentTypeSelected !== undefined) {
8651
8650
  headers = headers.set('Content-Type', httpContentTypeSelected);
@@ -17309,7 +17308,7 @@ var de = {
17309
17308
  "Add Layer As": "",
17310
17309
  "button.login": "",
17311
17310
  "catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
17312
- "catalog.figures.organisations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
17311
+ "catalog.figures.organizations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
17313
17312
  "chart.aggregation.average": "Durchschnitt",
17314
17313
  "chart.aggregation.count": "Anzahl",
17315
17314
  "chart.aggregation.max": "Maximum",
@@ -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,6 +17413,15 @@ 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",
17416
+ "datafeeder.validation.csv.delimiter": "",
17417
+ "datafeeder.validation.csv.delimiter.comma": "",
17418
+ "datafeeder.validation.csv.delimiter.semicolon": "",
17419
+ "datafeeder.validation.csv.lat.field": "",
17420
+ "datafeeder.validation.csv.lng.field": "",
17421
+ "datafeeder.validation.csv.quote.double": "",
17422
+ "datafeeder.validation.csv.quote.none": "",
17423
+ "datafeeder.validation.csv.quote.simple": "",
17424
+ "datafeeder.validation.csv.quoteChar": "",
17414
17425
  "datafeeder.validation.encoding": "Codierung",
17415
17426
  "datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
17416
17427
  "datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
@@ -17424,7 +17435,7 @@ var de = {
17424
17435
  "datahub.header.lastRecords": "Die neuesten",
17425
17436
  "datahub.header.myfavorites": "Meine Favoriten",
17426
17437
  "datahub.header.news": "Startseite",
17427
- "datahub.header.organisations": "Organisationen",
17438
+ "datahub.header.organizations": "Organisationen",
17428
17439
  "datahub.header.popularRecords": "Die beliebtesten",
17429
17440
  "datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
17430
17441
  "datahub.news.contact.contactus": "Kontaktieren Sie uns",
@@ -17460,37 +17471,71 @@ var de = {
17460
17471
  "downloads.format.unknown": "unbekannt",
17461
17472
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
17462
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",
17463
17488
  "editor.record.form.license": "Lizenz",
17464
- "editor.record.form.license.cc-by": "",
17465
- "editor.record.form.license.cc-by-sa": "",
17466
- "editor.record.form.license.cc-zero": "",
17467
- "editor.record.form.license.etalab": "",
17468
- "editor.record.form.license.etalab-v2": "",
17469
- "editor.record.form.license.odbl": "",
17470
- "editor.record.form.license.odc-by": "",
17471
- "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",
17472
17497
  "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
17473
- "editor.record.form.resourceUpdated": "",
17474
- "editor.record.form.temporalExtents": "",
17475
- "editor.record.form.temporalExtents.addDate": "",
17476
- "editor.record.form.temporalExtents.addRange": "",
17477
- "editor.record.form.temporalExtents.date": "",
17478
- "editor.record.form.temporalExtents.range": "",
17479
- "editor.record.form.updateFrequency": "",
17480
- "editor.record.form.updateFrequency.planned": "",
17481
- "editor.record.loadError.body": "",
17482
- "editor.record.loadError.closeMessage": "",
17483
- "editor.record.loadError.title": "",
17484
- "editor.record.publish": "",
17485
- "editor.record.publishError.body": "",
17486
- "editor.record.publishError.closeMessage": "",
17487
- "editor.record.publishError.title": "",
17488
- "editor.record.publishSuccess.body": "",
17489
- "editor.record.publishSuccess.title": "",
17490
- "editor.record.saveStatus.asDraftOnly": "",
17491
- "editor.record.saveStatus.draftWithChangesPending": "",
17492
- "editor.record.saveStatus.recordUpToDate": "",
17493
- "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": "",
17494
17539
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
17495
17540
  "facets.block.title.OrgForResource": "Organisation",
17496
17541
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -17559,11 +17604,16 @@ var de = {
17559
17604
  "organisations.sortBy.nameDesc": "Name Z → A",
17560
17605
  "organisations.sortBy.recordCountAsc": "Veröffentlichungen 0 → 9",
17561
17606
  "organisations.sortBy.recordCountDesc": "Veröffentlichungen 9 → 0",
17607
+ "organization.details.lastPublishedDatasets": "",
17608
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
17609
+ "organization.details.mailContact": "",
17610
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
17562
17611
  "pagination.nextPage": "Nächste Seite",
17563
17612
  "pagination.page": "Seite",
17564
17613
  "pagination.pageOf": "von",
17565
17614
  previous: previous$6,
17566
17615
  "record.action.download": "Herunterladen",
17616
+ "record.action.duplicate": "",
17567
17617
  "record.action.view": "Anzeigen",
17568
17618
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
17569
17619
  "record.metadata.about": "Beschreibung",
@@ -17596,7 +17646,7 @@ var de = {
17596
17646
  "record.metadata.preview": "Vorschau",
17597
17647
  "record.metadata.producer": "Datenproduzent",
17598
17648
  "record.metadata.publication": "Veröffentlichungsdatum",
17599
- "record.metadata.publications": "Veröffentlichungen",
17649
+ "record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
17600
17650
  "record.metadata.quality": "Metadatenqualität",
17601
17651
  "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
17602
17652
  "record.metadata.quality.contact.success": "Kontakt angegeben",
@@ -17656,6 +17706,8 @@ var de = {
17656
17706
  "results.sortBy.relevancy": "Relevanz",
17657
17707
  "search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
17658
17708
  "search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
17709
+ "search.error.organizationHasNoDataset": "",
17710
+ "search.error.organizationNotFound": "",
17659
17711
  "search.error.receivedError": "Ein Fehler ist aufgetreten",
17660
17712
  "search.error.recordHasnolink": "",
17661
17713
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
@@ -17683,9 +17735,11 @@ var de = {
17683
17735
  "search.filters.minimize": "Minimieren",
17684
17736
  "search.filters.myRecords": "Nur meine Datensätze anzeigen",
17685
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": "",
17686
17739
  "search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
17740
+ "search.filters.producerOrg": "",
17687
17741
  "search.filters.publicationYear": "Veröffentlichungsjahr",
17688
- "search.filters.publisher": "Organisationen",
17742
+ "search.filters.publisherOrg": "",
17689
17743
  "search.filters.representationType": "Repräsentationstyp",
17690
17744
  "search.filters.resourceType": "Ressourcentyp",
17691
17745
  "search.filters.standard": "Standard",
@@ -17719,7 +17773,7 @@ var en = {
17719
17773
  "Add Layer As": "",
17720
17774
  "button.login": "Log in",
17721
17775
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
17722
- "catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
17776
+ "catalog.figures.organizations": "{count, plural, =0{organizations} one{organization} other{organizations}}",
17723
17777
  "chart.aggregation.average": "average",
17724
17778
  "chart.aggregation.count": "count",
17725
17779
  "chart.aggregation.max": "max",
@@ -17766,6 +17820,8 @@ var en = {
17766
17820
  "datafeeder.datasetValidation.submitButton": "OK, my data are correct",
17767
17821
  "datafeeder.datasetValidation.title": "Make sure your data are correct",
17768
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:",
17769
17825
  "datafeeder.form.abstract": "How would you describe your dataset?",
17770
17826
  "datafeeder.form.datepicker": "Do you know when the dataset was created?",
17771
17827
  "datafeeder.form.description": "Finally, please describe the process that was used to create the dataset",
@@ -17793,6 +17849,7 @@ var en = {
17793
17849
  "datafeeder.publishSuccess.geonetworkRecord": "Metadata record",
17794
17850
  "datafeeder.publishSuccess.illustration.title": "Done, all is good!",
17795
17851
  "datafeeder.publishSuccess.mapViewer": "Map viewer",
17852
+ "datafeeder.publishSuccess.ogcFeature": "OGC API",
17796
17853
  "datafeeder.publishSuccess.subtitle": "View your data in:",
17797
17854
  "datafeeder.publishSuccess.title": "Congratulation! \n Your dataset has been published",
17798
17855
  "datafeeder.publishSuccess.uploadAnotherData": "Upload another dataset",
@@ -17821,6 +17878,15 @@ var en = {
17821
17878
  "datafeeder.upload.maxFileSize": "Maximum file size is {size} MB",
17822
17879
  "datafeeder.upload.title": "Upload your dataset",
17823
17880
  "datafeeder.upload.uploadButton": "Upload",
17881
+ "datafeeder.validation.csv.delimiter": "Delimiter",
17882
+ "datafeeder.validation.csv.delimiter.comma": "Comma",
17883
+ "datafeeder.validation.csv.delimiter.semicolon": "Semicolon",
17884
+ "datafeeder.validation.csv.lat.field": "Latitude column",
17885
+ "datafeeder.validation.csv.lng.field": "Longitude column",
17886
+ "datafeeder.validation.csv.quote.double": "Double quote",
17887
+ "datafeeder.validation.csv.quote.none": "None",
17888
+ "datafeeder.validation.csv.quote.simple": "Simple quote",
17889
+ "datafeeder.validation.csv.quoteChar": "Quote separator",
17824
17890
  "datafeeder.validation.encoding": "encoding",
17825
17891
  "datafeeder.validation.extent.title": "Here is the dataset extent",
17826
17892
  "datafeeder.validation.extent.title.unknown": "The projection system is unknown",
@@ -17834,7 +17900,7 @@ var en = {
17834
17900
  "datahub.header.lastRecords": "The latest",
17835
17901
  "datahub.header.myfavorites": "My favorites",
17836
17902
  "datahub.header.news": "Home",
17837
- "datahub.header.organisations": "Organisations",
17903
+ "datahub.header.organizations": "Organizations",
17838
17904
  "datahub.header.popularRecords": "The most popular",
17839
17905
  "datahub.header.title.html": "<div class=\"text-white\">Discover open<br> data from my Organization</div>",
17840
17906
  "datahub.news.contact.contactus": "Contact us",
@@ -17870,6 +17936,20 @@ var en = {
17870
17936
  "downloads.format.unknown": "unknown",
17871
17937
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17872
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",
17873
17953
  "editor.record.form.license": "License",
17874
17954
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
17875
17955
  "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -17880,12 +17960,31 @@ var en = {
17880
17960
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
17881
17961
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
17882
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",
17883
17981
  "editor.record.form.resourceUpdated": "Last update date",
17884
17982
  "editor.record.form.temporalExtents": "Temporal extent",
17885
17983
  "editor.record.form.temporalExtents.addDate": "Time instant",
17886
17984
  "editor.record.form.temporalExtents.addRange": "Time period",
17887
17985
  "editor.record.form.temporalExtents.date": "Date",
17888
17986
  "editor.record.form.temporalExtents.range": "Date range",
17987
+ "editor.record.form.unique.identifier": "Unique identifier",
17889
17988
  "editor.record.form.updateFrequency": "Update frequency",
17890
17989
  "editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
17891
17990
  "editor.record.loadError.body": "The record could not be loaded:",
@@ -17901,6 +18000,7 @@ var en = {
17901
18000
  "editor.record.saveStatus.draftWithChangesPending": "Saved as draft - changes are pending",
17902
18001
  "editor.record.saveStatus.recordUpToDate": "Record is up to date",
17903
18002
  "editor.record.upToDate": "This record is up to date",
18003
+ "editor.sidebar.menu.editor": "Editor",
17904
18004
  "externalviewer.dataset.unnamed": "Datahub layer",
17905
18005
  "facets.block.title.OrgForResource": "Organisation",
17906
18006
  "facets.block.title.availableInServices": "Available for",
@@ -17969,11 +18069,16 @@ var en = {
17969
18069
  "organisations.sortBy.nameDesc": "Name Z → A",
17970
18070
  "organisations.sortBy.recordCountAsc": "Publications 0 → 9",
17971
18071
  "organisations.sortBy.recordCountDesc": "Publications 9 → 0",
18072
+ "organization.details.lastPublishedDatasets": "",
18073
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18074
+ "organization.details.mailContact": "Contact by email",
18075
+ "organization.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
17972
18076
  "pagination.nextPage": "Next page",
17973
18077
  "pagination.page": "page",
17974
18078
  "pagination.pageOf": "of",
17975
18079
  previous: previous$5,
17976
18080
  "record.action.download": "Download",
18081
+ "record.action.duplicate": "Duplicate",
17977
18082
  "record.action.view": "View",
17978
18083
  "record.externalViewer.open": "Open in the external map viewer",
17979
18084
  "record.metadata.about": "Description",
@@ -18006,7 +18111,7 @@ var en = {
18006
18111
  "record.metadata.preview": "Preview",
18007
18112
  "record.metadata.producer": "Data producer",
18008
18113
  "record.metadata.publication": "Date of publication",
18009
- "record.metadata.publications": "publications",
18114
+ "record.metadata.publications": "{count, plural, =0{publication} one{publication} other{publications}}",
18010
18115
  "record.metadata.quality": "Metadata Quality",
18011
18116
  "record.metadata.quality.contact.failed": "Contact is not specified",
18012
18117
  "record.metadata.quality.contact.success": "Contact is specified",
@@ -18066,6 +18171,8 @@ var en = {
18066
18171
  "results.sortBy.relevancy": "Relevancy",
18067
18172
  "search.autocomplete.error": "Suggestions could not be fetched:",
18068
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.",
18069
18176
  "search.error.receivedError": "An error was received",
18070
18177
  "search.error.recordHasnolink": "This record currently has no link yet, please come back later.",
18071
18178
  "search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.",
@@ -18093,9 +18200,11 @@ var en = {
18093
18200
  "search.filters.minimize": "Minimize",
18094
18201
  "search.filters.myRecords": "Show only my records",
18095
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",
18096
18204
  "search.filters.otherRecords": "Showing records from another person",
18205
+ "search.filters.producerOrg": "Producer",
18097
18206
  "search.filters.publicationYear": "Publication year",
18098
- "search.filters.publisher": "Organizations",
18207
+ "search.filters.publisherOrg": "Publisher",
18099
18208
  "search.filters.representationType": "Representation type",
18100
18209
  "search.filters.resourceType": "Resource type",
18101
18210
  "search.filters.standard": "Standard",
@@ -18129,7 +18238,7 @@ var es = {
18129
18238
  "Add Layer As": "",
18130
18239
  "button.login": "",
18131
18240
  "catalog.figures.datasets": "conjuntos de datos",
18132
- "catalog.figures.organisations": "organizaciones",
18241
+ "catalog.figures.organizations": "organizaciones",
18133
18242
  "chart.aggregation.average": "promedio",
18134
18243
  "chart.aggregation.count": "conteo",
18135
18244
  "chart.aggregation.max": "máximo",
@@ -18176,6 +18285,8 @@ var es = {
18176
18285
  "datafeeder.datasetValidation.submitButton": "",
18177
18286
  "datafeeder.datasetValidation.title": "",
18178
18287
  "datafeeder.datasetValidation.unknown": "",
18288
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
18289
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
18179
18290
  "datafeeder.form.abstract": "",
18180
18291
  "datafeeder.form.datepicker": "",
18181
18292
  "datafeeder.form.description": "",
@@ -18203,6 +18314,7 @@ var es = {
18203
18314
  "datafeeder.publishSuccess.geonetworkRecord": "",
18204
18315
  "datafeeder.publishSuccess.illustration.title": "",
18205
18316
  "datafeeder.publishSuccess.mapViewer": "",
18317
+ "datafeeder.publishSuccess.ogcFeature": "",
18206
18318
  "datafeeder.publishSuccess.subtitle": "",
18207
18319
  "datafeeder.publishSuccess.title": "",
18208
18320
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -18231,6 +18343,15 @@ var es = {
18231
18343
  "datafeeder.upload.maxFileSize": "",
18232
18344
  "datafeeder.upload.title": "",
18233
18345
  "datafeeder.upload.uploadButton": "",
18346
+ "datafeeder.validation.csv.delimiter": "",
18347
+ "datafeeder.validation.csv.delimiter.comma": "Coma",
18348
+ "datafeeder.validation.csv.delimiter.semicolon": "Punto y coma",
18349
+ "datafeeder.validation.csv.lat.field": "",
18350
+ "datafeeder.validation.csv.lng.field": "",
18351
+ "datafeeder.validation.csv.quote.double": "Comillas dobles",
18352
+ "datafeeder.validation.csv.quote.none": "Ninguno",
18353
+ "datafeeder.validation.csv.quote.simple": "Comillas simples",
18354
+ "datafeeder.validation.csv.quoteChar": "",
18234
18355
  "datafeeder.validation.encoding": "",
18235
18356
  "datafeeder.validation.extent.title": "",
18236
18357
  "datafeeder.validation.extent.title.unknown": "",
@@ -18244,7 +18365,7 @@ var es = {
18244
18365
  "datahub.header.lastRecords": "",
18245
18366
  "datahub.header.myfavorites": "",
18246
18367
  "datahub.header.news": "",
18247
- "datahub.header.organisations": "",
18368
+ "datahub.header.organizations": "",
18248
18369
  "datahub.header.popularRecords": "",
18249
18370
  "datahub.header.title.html": "",
18250
18371
  "datahub.news.contact.contactus": "",
@@ -18280,6 +18401,20 @@ var es = {
18280
18401
  "downloads.format.unknown": "",
18281
18402
  "downloads.wfs.featuretype.not.found": "",
18282
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": "",
18283
18418
  "editor.record.form.license": "",
18284
18419
  "editor.record.form.license.cc-by": "",
18285
18420
  "editor.record.form.license.cc-by-sa": "",
@@ -18290,12 +18425,31 @@ var es = {
18290
18425
  "editor.record.form.license.odc-by": "",
18291
18426
  "editor.record.form.license.pddl": "",
18292
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": "",
18293
18446
  "editor.record.form.resourceUpdated": "",
18294
18447
  "editor.record.form.temporalExtents": "",
18295
18448
  "editor.record.form.temporalExtents.addDate": "",
18296
18449
  "editor.record.form.temporalExtents.addRange": "",
18297
18450
  "editor.record.form.temporalExtents.date": "",
18298
18451
  "editor.record.form.temporalExtents.range": "",
18452
+ "editor.record.form.unique.identifier": "",
18299
18453
  "editor.record.form.updateFrequency": "",
18300
18454
  "editor.record.form.updateFrequency.planned": "",
18301
18455
  "editor.record.loadError.body": "",
@@ -18311,6 +18465,7 @@ var es = {
18311
18465
  "editor.record.saveStatus.draftWithChangesPending": "",
18312
18466
  "editor.record.saveStatus.recordUpToDate": "",
18313
18467
  "editor.record.upToDate": "",
18468
+ "editor.sidebar.menu.editor": "",
18314
18469
  "externalviewer.dataset.unnamed": "",
18315
18470
  "facets.block.title.OrgForResource": "",
18316
18471
  "facets.block.title.availableInServices": "",
@@ -18379,11 +18534,16 @@ var es = {
18379
18534
  "organisations.sortBy.nameDesc": "",
18380
18535
  "organisations.sortBy.recordCountAsc": "",
18381
18536
  "organisations.sortBy.recordCountDesc": "",
18537
+ "organization.details.lastPublishedDatasets": "",
18538
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18539
+ "organization.details.mailContact": "",
18540
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
18382
18541
  "pagination.nextPage": "",
18383
18542
  "pagination.page": "",
18384
18543
  "pagination.pageOf": "",
18385
18544
  previous: previous$4,
18386
18545
  "record.action.download": "",
18546
+ "record.action.duplicate": "",
18387
18547
  "record.action.view": "",
18388
18548
  "record.externalViewer.open": "",
18389
18549
  "record.metadata.about": "",
@@ -18416,7 +18576,7 @@ var es = {
18416
18576
  "record.metadata.preview": "",
18417
18577
  "record.metadata.producer": "",
18418
18578
  "record.metadata.publication": "",
18419
- "record.metadata.publications": "",
18579
+ "record.metadata.publications": "{count, plural, =0{} one{} other{}}",
18420
18580
  "record.metadata.quality": "",
18421
18581
  "record.metadata.quality.contact.failed": "",
18422
18582
  "record.metadata.quality.contact.success": "",
@@ -18476,6 +18636,8 @@ var es = {
18476
18636
  "results.sortBy.relevancy": "",
18477
18637
  "search.autocomplete.error": "",
18478
18638
  "search.error.couldNotReachApi": "",
18639
+ "search.error.organizationHasNoDataset": "",
18640
+ "search.error.organizationNotFound": "",
18479
18641
  "search.error.receivedError": "",
18480
18642
  "search.error.recordHasnolink": "",
18481
18643
  "search.error.recordNotFound": "",
@@ -18503,9 +18665,11 @@ var es = {
18503
18665
  "search.filters.minimize": "",
18504
18666
  "search.filters.myRecords": "",
18505
18667
  "search.filters.myRecordsHelp": "",
18668
+ "search.filters.organization": "",
18506
18669
  "search.filters.otherRecords": "",
18670
+ "search.filters.producerOrg": "",
18507
18671
  "search.filters.publicationYear": "",
18508
- "search.filters.publisher": "",
18672
+ "search.filters.publisherOrg": "",
18509
18673
  "search.filters.representationType": "",
18510
18674
  "search.filters.resourceType": "",
18511
18675
  "search.filters.standard": "",
@@ -18539,7 +18703,7 @@ var fr = {
18539
18703
  "Add Layer As": "",
18540
18704
  "button.login": "Se connecter",
18541
18705
  "catalog.figures.datasets": "{count, plural, =0{données} one{donnée} other{données}}",
18542
- "catalog.figures.organisations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
18706
+ "catalog.figures.organizations": "{count, plural, =0{organisations} one{organisation} other{organisations}}",
18543
18707
  "chart.aggregation.average": "moyenne",
18544
18708
  "chart.aggregation.count": "nombre",
18545
18709
  "chart.aggregation.max": "maximum",
@@ -18586,6 +18750,8 @@ var fr = {
18586
18750
  "datafeeder.datasetValidation.submitButton": "OK, mes données sont correctes",
18587
18751
  "datafeeder.datasetValidation.title": "Vérifiez que vos données sont correctes",
18588
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 :",
18589
18755
  "datafeeder.form.abstract": "Comment décrire votre jeu de données ?",
18590
18756
  "datafeeder.form.datepicker": "Savez-vous quand la donnée a été créée ?",
18591
18757
  "datafeeder.form.description": "Enfin, décrivez le processus utilisé pour créer la donnée",
@@ -18612,7 +18778,8 @@ var fr = {
18612
18778
  "datafeeder.publish.upload": "Upload maintenant",
18613
18779
  "datafeeder.publishSuccess.geonetworkRecord": "Fiche de métadonnée",
18614
18780
  "datafeeder.publishSuccess.illustration.title": "Terminé, tout s'est bien passé !",
18615
- "datafeeder.publishSuccess.mapViewer": "Visualisateur",
18781
+ "datafeeder.publishSuccess.mapViewer": "Visualiseur",
18782
+ "datafeeder.publishSuccess.ogcFeature": "OGC API",
18616
18783
  "datafeeder.publishSuccess.subtitle": "Visualisez vos données :",
18617
18784
  "datafeeder.publishSuccess.title": "Félicitations! \n Vos données ont été publiées",
18618
18785
  "datafeeder.publishSuccess.uploadAnotherData": "Importer une autre donnée",
@@ -18641,6 +18808,15 @@ var fr = {
18641
18808
  "datafeeder.upload.maxFileSize": "La taille maximale est {size} Mo",
18642
18809
  "datafeeder.upload.title": "Importez vos données",
18643
18810
  "datafeeder.upload.uploadButton": "Transférer",
18811
+ "datafeeder.validation.csv.delimiter": "Séparateur de colonne",
18812
+ "datafeeder.validation.csv.delimiter.comma": "Virgule",
18813
+ "datafeeder.validation.csv.delimiter.semicolon": "Point-virgule",
18814
+ "datafeeder.validation.csv.lat.field": "Colonne latitude",
18815
+ "datafeeder.validation.csv.lng.field": "Colonne longitude",
18816
+ "datafeeder.validation.csv.quote.double": "Double guillemets",
18817
+ "datafeeder.validation.csv.quote.none": "Aucun",
18818
+ "datafeeder.validation.csv.quote.simple": "Simple guillemet",
18819
+ "datafeeder.validation.csv.quoteChar": "Séparateur de texte",
18644
18820
  "datafeeder.validation.encoding": "encodage",
18645
18821
  "datafeeder.validation.extent.title": "Voici l'emprise du jeu de données",
18646
18822
  "datafeeder.validation.extent.title.unknown": "Le système de projection est inconnu",
@@ -18654,7 +18830,7 @@ var fr = {
18654
18830
  "datahub.header.lastRecords": "Les plus récentes",
18655
18831
  "datahub.header.myfavorites": "Mes favoris",
18656
18832
  "datahub.header.news": "Accueil",
18657
- "datahub.header.organisations": "Organisations",
18833
+ "datahub.header.organizations": "Organisations",
18658
18834
  "datahub.header.popularRecords": "Les plus appréciées",
18659
18835
  "datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
18660
18836
  "datahub.news.contact.contactus": "Contactez-nous",
@@ -18690,6 +18866,20 @@ var fr = {
18690
18866
  "downloads.format.unknown": "inconnu",
18691
18867
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
18692
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": "",
18693
18883
  "editor.record.form.license": "Licence",
18694
18884
  "editor.record.form.license.cc-by": "",
18695
18885
  "editor.record.form.license.cc-by-sa": "",
@@ -18700,12 +18890,31 @@ var fr = {
18700
18890
  "editor.record.form.license.odc-by": "",
18701
18891
  "editor.record.form.license.pddl": "",
18702
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": "",
18703
18911
  "editor.record.form.resourceUpdated": "Date de dernière révision",
18704
18912
  "editor.record.form.temporalExtents": "Étendue temporelle",
18705
18913
  "editor.record.form.temporalExtents.addDate": "Date déterminée",
18706
18914
  "editor.record.form.temporalExtents.addRange": "Période de temps",
18707
18915
  "editor.record.form.temporalExtents.date": "Date concernée",
18708
18916
  "editor.record.form.temporalExtents.range": "Période concernée",
18917
+ "editor.record.form.unique.identifier": "",
18709
18918
  "editor.record.form.updateFrequency": "Fréquence de mise à jour",
18710
18919
  "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
18711
18920
  "editor.record.loadError.body": "",
@@ -18721,6 +18930,7 @@ var fr = {
18721
18930
  "editor.record.saveStatus.draftWithChangesPending": "Brouillon enregistré - modifications en cours",
18722
18931
  "editor.record.saveStatus.recordUpToDate": "La fiche publiée est à jour",
18723
18932
  "editor.record.upToDate": "",
18933
+ "editor.sidebar.menu.editor": "",
18724
18934
  "externalviewer.dataset.unnamed": "Couche du datahub",
18725
18935
  "facets.block.title.OrgForResource": "Organisation",
18726
18936
  "facets.block.title.availableInServices": "Disponible pour",
@@ -18789,11 +18999,16 @@ var fr = {
18789
18999
  "organisations.sortBy.nameDesc": "Nom Z → A",
18790
19000
  "organisations.sortBy.recordCountAsc": "Données 0 → 9",
18791
19001
  "organisations.sortBy.recordCountDesc": "Données 9 → 0",
19002
+ "organization.details.lastPublishedDatasets": "",
19003
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
19004
+ "organization.details.mailContact": "Contacter par mail",
19005
+ "organization.header.recordCount": "{count, plural, =0{donnée} one{donnée} other{données}}",
18792
19006
  "pagination.nextPage": "Page suivante",
18793
19007
  "pagination.page": "page",
18794
19008
  "pagination.pageOf": "sur",
18795
19009
  previous: previous$3,
18796
19010
  "record.action.download": "Télécharger",
19011
+ "record.action.duplicate": "Dupliquer",
18797
19012
  "record.action.view": "Voir",
18798
19013
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
18799
19014
  "record.metadata.about": "Description",
@@ -18826,7 +19041,7 @@ var fr = {
18826
19041
  "record.metadata.preview": "Aperçu",
18827
19042
  "record.metadata.producer": "Producteur de la donnée",
18828
19043
  "record.metadata.publication": "Date de publication",
18829
- "record.metadata.publications": "données",
19044
+ "record.metadata.publications": "{count, plural, =0{donnée} one{donnée} other{données}}",
18830
19045
  "record.metadata.quality": "Qualité des métadonnées",
18831
19046
  "record.metadata.quality.contact.failed": "Contact n'est pas renseigné",
18832
19047
  "record.metadata.quality.contact.success": "Contact est renseigné",
@@ -18886,6 +19101,8 @@ var fr = {
18886
19101
  "results.sortBy.relevancy": "Pertinence",
18887
19102
  "search.autocomplete.error": "Les suggestions ne peuvent pas être récupérées",
18888
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.",
18889
19106
  "search.error.receivedError": "Erreur retournée",
18890
19107
  "search.error.recordHasnolink": "Ce dataset n'a pas encore de lien, réessayez plus tard s'il vous plaît.",
18891
19108
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
@@ -18913,9 +19130,11 @@ var fr = {
18913
19130
  "search.filters.minimize": "Réduire",
18914
19131
  "search.filters.myRecords": "Voir mes données",
18915
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",
18916
19134
  "search.filters.otherRecords": "Affichage des données d'un autre utilisateur",
19135
+ "search.filters.producerOrg": "Producteur",
18917
19136
  "search.filters.publicationYear": "Année de publication",
18918
- "search.filters.publisher": "Organisations",
19137
+ "search.filters.publisherOrg": "Distributeur",
18919
19138
  "search.filters.representationType": "Type de représentation",
18920
19139
  "search.filters.resourceType": "Type de ressource",
18921
19140
  "search.filters.standard": "Standard",
@@ -18949,7 +19168,7 @@ var it = {
18949
19168
  "Add Layer As": "",
18950
19169
  "button.login": "",
18951
19170
  "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
18952
- "catalog.figures.organisations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
19171
+ "catalog.figures.organizations": "{count, plural, =0{organizzazioni} one{organizzazione} other{organizzazioni}}",
18953
19172
  "chart.aggregation.average": "media",
18954
19173
  "chart.aggregation.count": "conteggio",
18955
19174
  "chart.aggregation.max": "massimo",
@@ -18996,6 +19215,8 @@ var it = {
18996
19215
  "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
18997
19216
  "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
18998
19217
  "datafeeder.datasetValidation.unknown": " - ",
19218
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19219
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
18999
19220
  "datafeeder.form.abstract": "Come descrivere il suo dataset?",
19000
19221
  "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
19001
19222
  "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
@@ -19023,6 +19244,7 @@ var it = {
19023
19244
  "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
19024
19245
  "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
19025
19246
  "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
19247
+ "datafeeder.publishSuccess.ogcFeature": "",
19026
19248
  "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
19027
19249
  "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
19028
19250
  "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
@@ -19051,6 +19273,15 @@ var it = {
19051
19273
  "datafeeder.upload.maxFileSize": "Dimensione massima: {size} MB",
19052
19274
  "datafeeder.upload.title": "Importa i suoi dati",
19053
19275
  "datafeeder.upload.uploadButton": "Carica",
19276
+ "datafeeder.validation.csv.delimiter": "",
19277
+ "datafeeder.validation.csv.delimiter.comma": "",
19278
+ "datafeeder.validation.csv.delimiter.semicolon": "",
19279
+ "datafeeder.validation.csv.lat.field": "",
19280
+ "datafeeder.validation.csv.lng.field": "",
19281
+ "datafeeder.validation.csv.quote.double": "",
19282
+ "datafeeder.validation.csv.quote.none": "",
19283
+ "datafeeder.validation.csv.quote.simple": "",
19284
+ "datafeeder.validation.csv.quoteChar": "",
19054
19285
  "datafeeder.validation.encoding": "Codifica",
19055
19286
  "datafeeder.validation.extent.title": "Ecco l'estensione del dataset",
19056
19287
  "datafeeder.validation.extent.title.unknown": "Sistema di proiezione sconosciuto",
@@ -19064,7 +19295,7 @@ var it = {
19064
19295
  "datahub.header.lastRecords": "Ultimi",
19065
19296
  "datahub.header.myfavorites": "Miei preferiti",
19066
19297
  "datahub.header.news": "Home",
19067
- "datahub.header.organisations": "Organizzazioni",
19298
+ "datahub.header.organizations": "Organizzazioni",
19068
19299
  "datahub.header.popularRecords": "Più popolari",
19069
19300
  "datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
19070
19301
  "datahub.news.contact.contactus": "Contattateci",
@@ -19100,6 +19331,20 @@ var it = {
19100
19331
  "downloads.format.unknown": "sconosciuto",
19101
19332
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
19102
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": "",
19103
19348
  "editor.record.form.license": "Licenza",
19104
19349
  "editor.record.form.license.cc-by": "",
19105
19350
  "editor.record.form.license.cc-by-sa": "",
@@ -19110,12 +19355,31 @@ var it = {
19110
19355
  "editor.record.form.license.odc-by": "",
19111
19356
  "editor.record.form.license.pddl": "",
19112
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": "",
19113
19376
  "editor.record.form.resourceUpdated": "",
19114
19377
  "editor.record.form.temporalExtents": "",
19115
19378
  "editor.record.form.temporalExtents.addDate": "",
19116
19379
  "editor.record.form.temporalExtents.addRange": "",
19117
19380
  "editor.record.form.temporalExtents.date": "",
19118
19381
  "editor.record.form.temporalExtents.range": "",
19382
+ "editor.record.form.unique.identifier": "",
19119
19383
  "editor.record.form.updateFrequency": "",
19120
19384
  "editor.record.form.updateFrequency.planned": "",
19121
19385
  "editor.record.loadError.body": "",
@@ -19131,6 +19395,7 @@ var it = {
19131
19395
  "editor.record.saveStatus.draftWithChangesPending": "",
19132
19396
  "editor.record.saveStatus.recordUpToDate": "",
19133
19397
  "editor.record.upToDate": "",
19398
+ "editor.sidebar.menu.editor": "",
19134
19399
  "externalviewer.dataset.unnamed": "Layer del datahub",
19135
19400
  "facets.block.title.OrgForResource": "Organizzazione",
19136
19401
  "facets.block.title.availableInServices": "Disponibile per",
@@ -19199,11 +19464,16 @@ var it = {
19199
19464
  "organisations.sortBy.nameDesc": "Nome Z → A",
19200
19465
  "organisations.sortBy.recordCountAsc": "Dati 0 → 9",
19201
19466
  "organisations.sortBy.recordCountDesc": "Dati 9 → 0",
19467
+ "organization.details.lastPublishedDatasets": "",
19468
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
19469
+ "organization.details.mailContact": "",
19470
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19202
19471
  "pagination.nextPage": "Pagina successiva",
19203
19472
  "pagination.page": "pagina",
19204
19473
  "pagination.pageOf": "di",
19205
19474
  previous: previous$2,
19206
19475
  "record.action.download": "Scarica",
19476
+ "record.action.duplicate": "",
19207
19477
  "record.action.view": "Visualizza",
19208
19478
  "record.externalViewer.open": "Apri nell'visualizzatore esterno",
19209
19479
  "record.metadata.about": "Descrizione",
@@ -19236,7 +19506,7 @@ var it = {
19236
19506
  "record.metadata.preview": "Anteprima",
19237
19507
  "record.metadata.producer": "Produttore dei dati",
19238
19508
  "record.metadata.publication": "Data di pubblicazione",
19239
- "record.metadata.publications": "pubblicazioni",
19509
+ "record.metadata.publications": "{count, plural, =0{pubblicazione} one{pubblicazione} other{pubblicazioni}}",
19240
19510
  "record.metadata.quality": "Qualità dei metadati",
19241
19511
  "record.metadata.quality.contact.failed": "Il contatto non è specificato",
19242
19512
  "record.metadata.quality.contact.success": "Il contatto è specificato",
@@ -19296,6 +19566,8 @@ var it = {
19296
19566
  "results.sortBy.relevancy": "Rilevanza",
19297
19567
  "search.autocomplete.error": "Impossibile recuperare le suggerimenti",
19298
19568
  "search.error.couldNotReachApi": "Problema di connessione all'API",
19569
+ "search.error.organizationHasNoDataset": "",
19570
+ "search.error.organizationNotFound": "",
19299
19571
  "search.error.receivedError": "Errore ricevuto",
19300
19572
  "search.error.recordHasnolink": "",
19301
19573
  "search.error.recordNotFound": "Impossibile trovare questo dato",
@@ -19323,9 +19595,11 @@ var it = {
19323
19595
  "search.filters.minimize": "Riduci",
19324
19596
  "search.filters.myRecords": "Visualizza i miei dati",
19325
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": "",
19326
19599
  "search.filters.otherRecords": "Visualizzazione dei dati di un altro utente",
19600
+ "search.filters.producerOrg": "",
19327
19601
  "search.filters.publicationYear": "Anno di pubblicazione",
19328
- "search.filters.publisher": "Organizzazioni",
19602
+ "search.filters.publisherOrg": "",
19329
19603
  "search.filters.representationType": "Tipo di rappresentazione",
19330
19604
  "search.filters.resourceType": "Tipo di risorsa",
19331
19605
  "search.filters.standard": "Standard",
@@ -19359,7 +19633,7 @@ var nl = {
19359
19633
  "Add Layer As": "",
19360
19634
  "button.login": "",
19361
19635
  "catalog.figures.datasets": "datasets",
19362
- "catalog.figures.organisations": "organisaties",
19636
+ "catalog.figures.organizations": "organisaties",
19363
19637
  "chart.aggregation.average": "gemiddelde",
19364
19638
  "chart.aggregation.count": "aantal",
19365
19639
  "chart.aggregation.max": "max",
@@ -19406,6 +19680,8 @@ var nl = {
19406
19680
  "datafeeder.datasetValidation.submitButton": "",
19407
19681
  "datafeeder.datasetValidation.title": "",
19408
19682
  "datafeeder.datasetValidation.unknown": "",
19683
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19684
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19409
19685
  "datafeeder.form.abstract": "",
19410
19686
  "datafeeder.form.datepicker": "",
19411
19687
  "datafeeder.form.description": "",
@@ -19433,6 +19709,7 @@ var nl = {
19433
19709
  "datafeeder.publishSuccess.geonetworkRecord": "",
19434
19710
  "datafeeder.publishSuccess.illustration.title": "",
19435
19711
  "datafeeder.publishSuccess.mapViewer": "",
19712
+ "datafeeder.publishSuccess.ogcFeature": "",
19436
19713
  "datafeeder.publishSuccess.subtitle": "",
19437
19714
  "datafeeder.publishSuccess.title": "",
19438
19715
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -19461,6 +19738,15 @@ var nl = {
19461
19738
  "datafeeder.upload.maxFileSize": "",
19462
19739
  "datafeeder.upload.title": "",
19463
19740
  "datafeeder.upload.uploadButton": "",
19741
+ "datafeeder.validation.csv.delimiter": "",
19742
+ "datafeeder.validation.csv.delimiter.comma": "",
19743
+ "datafeeder.validation.csv.delimiter.semicolon": "",
19744
+ "datafeeder.validation.csv.lat.field": "",
19745
+ "datafeeder.validation.csv.lng.field": "",
19746
+ "datafeeder.validation.csv.quote.double": "",
19747
+ "datafeeder.validation.csv.quote.none": "",
19748
+ "datafeeder.validation.csv.quote.simple": "",
19749
+ "datafeeder.validation.csv.quoteChar": "",
19464
19750
  "datafeeder.validation.encoding": "",
19465
19751
  "datafeeder.validation.extent.title": "",
19466
19752
  "datafeeder.validation.extent.title.unknown": "",
@@ -19474,7 +19760,7 @@ var nl = {
19474
19760
  "datahub.header.lastRecords": "",
19475
19761
  "datahub.header.myfavorites": "",
19476
19762
  "datahub.header.news": "",
19477
- "datahub.header.organisations": "",
19763
+ "datahub.header.organizations": "",
19478
19764
  "datahub.header.popularRecords": "",
19479
19765
  "datahub.header.title.html": "",
19480
19766
  "datahub.news.contact.contactus": "",
@@ -19510,6 +19796,20 @@ var nl = {
19510
19796
  "downloads.format.unknown": "",
19511
19797
  "downloads.wfs.featuretype.not.found": "",
19512
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": "",
19513
19813
  "editor.record.form.license": "",
19514
19814
  "editor.record.form.license.cc-by": "",
19515
19815
  "editor.record.form.license.cc-by-sa": "",
@@ -19520,12 +19820,31 @@ var nl = {
19520
19820
  "editor.record.form.license.odc-by": "",
19521
19821
  "editor.record.form.license.pddl": "",
19522
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": "",
19523
19841
  "editor.record.form.resourceUpdated": "",
19524
19842
  "editor.record.form.temporalExtents": "",
19525
19843
  "editor.record.form.temporalExtents.addDate": "",
19526
19844
  "editor.record.form.temporalExtents.addRange": "",
19527
19845
  "editor.record.form.temporalExtents.date": "",
19528
19846
  "editor.record.form.temporalExtents.range": "",
19847
+ "editor.record.form.unique.identifier": "",
19529
19848
  "editor.record.form.updateFrequency": "",
19530
19849
  "editor.record.form.updateFrequency.planned": "",
19531
19850
  "editor.record.loadError.body": "",
@@ -19541,6 +19860,7 @@ var nl = {
19541
19860
  "editor.record.saveStatus.draftWithChangesPending": "",
19542
19861
  "editor.record.saveStatus.recordUpToDate": "",
19543
19862
  "editor.record.upToDate": "",
19863
+ "editor.sidebar.menu.editor": "",
19544
19864
  "externalviewer.dataset.unnamed": "",
19545
19865
  "facets.block.title.OrgForResource": "",
19546
19866
  "facets.block.title.availableInServices": "",
@@ -19609,11 +19929,16 @@ var nl = {
19609
19929
  "organisations.sortBy.nameDesc": "",
19610
19930
  "organisations.sortBy.recordCountAsc": "",
19611
19931
  "organisations.sortBy.recordCountDesc": "",
19932
+ "organization.details.lastPublishedDatasets": "",
19933
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
19934
+ "organization.details.mailContact": "",
19935
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
19612
19936
  "pagination.nextPage": "",
19613
19937
  "pagination.page": "",
19614
19938
  "pagination.pageOf": "",
19615
19939
  previous: previous$1,
19616
19940
  "record.action.download": "",
19941
+ "record.action.duplicate": "",
19617
19942
  "record.action.view": "",
19618
19943
  "record.externalViewer.open": "",
19619
19944
  "record.metadata.about": "",
@@ -19646,7 +19971,7 @@ var nl = {
19646
19971
  "record.metadata.preview": "",
19647
19972
  "record.metadata.producer": "",
19648
19973
  "record.metadata.publication": "",
19649
- "record.metadata.publications": "",
19974
+ "record.metadata.publications": "{count, plural, =0{} one{} other{}}",
19650
19975
  "record.metadata.quality": "",
19651
19976
  "record.metadata.quality.contact.failed": "",
19652
19977
  "record.metadata.quality.contact.success": "",
@@ -19706,6 +20031,8 @@ var nl = {
19706
20031
  "results.sortBy.relevancy": "",
19707
20032
  "search.autocomplete.error": "",
19708
20033
  "search.error.couldNotReachApi": "",
20034
+ "search.error.organizationHasNoDataset": "",
20035
+ "search.error.organizationNotFound": "",
19709
20036
  "search.error.receivedError": "",
19710
20037
  "search.error.recordHasnolink": "",
19711
20038
  "search.error.recordNotFound": "",
@@ -19733,9 +20060,11 @@ var nl = {
19733
20060
  "search.filters.minimize": "",
19734
20061
  "search.filters.myRecords": "",
19735
20062
  "search.filters.myRecordsHelp": "",
20063
+ "search.filters.organization": "",
19736
20064
  "search.filters.otherRecords": "",
20065
+ "search.filters.producerOrg": "",
19737
20066
  "search.filters.publicationYear": "",
19738
- "search.filters.publisher": "",
20067
+ "search.filters.publisherOrg": "",
19739
20068
  "search.filters.representationType": "",
19740
20069
  "search.filters.resourceType": "",
19741
20070
  "search.filters.standard": "",
@@ -19769,7 +20098,7 @@ var pt = {
19769
20098
  "Add Layer As": "",
19770
20099
  "button.login": "",
19771
20100
  "catalog.figures.datasets": "conjuntos de dados",
19772
- "catalog.figures.organisations": "organizações",
20101
+ "catalog.figures.organizations": "organizações",
19773
20102
  "chart.aggregation.average": "média",
19774
20103
  "chart.aggregation.count": "contagem",
19775
20104
  "chart.aggregation.max": "máximo",
@@ -19816,6 +20145,8 @@ var pt = {
19816
20145
  "datafeeder.datasetValidation.submitButton": "",
19817
20146
  "datafeeder.datasetValidation.title": "",
19818
20147
  "datafeeder.datasetValidation.unknown": "",
20148
+ "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
20149
+ "datafeeder.datasetValidationCsv.lineNumbers": "",
19819
20150
  "datafeeder.form.abstract": "",
19820
20151
  "datafeeder.form.datepicker": "",
19821
20152
  "datafeeder.form.description": "",
@@ -19843,6 +20174,7 @@ var pt = {
19843
20174
  "datafeeder.publishSuccess.geonetworkRecord": "",
19844
20175
  "datafeeder.publishSuccess.illustration.title": "",
19845
20176
  "datafeeder.publishSuccess.mapViewer": "",
20177
+ "datafeeder.publishSuccess.ogcFeature": "",
19846
20178
  "datafeeder.publishSuccess.subtitle": "",
19847
20179
  "datafeeder.publishSuccess.title": "",
19848
20180
  "datafeeder.publishSuccess.uploadAnotherData": "",
@@ -19871,6 +20203,15 @@ var pt = {
19871
20203
  "datafeeder.upload.maxFileSize": "",
19872
20204
  "datafeeder.upload.title": "",
19873
20205
  "datafeeder.upload.uploadButton": "",
20206
+ "datafeeder.validation.csv.delimiter": "",
20207
+ "datafeeder.validation.csv.delimiter.comma": "",
20208
+ "datafeeder.validation.csv.delimiter.semicolon": "",
20209
+ "datafeeder.validation.csv.lat.field": "",
20210
+ "datafeeder.validation.csv.lng.field": "",
20211
+ "datafeeder.validation.csv.quote.double": "",
20212
+ "datafeeder.validation.csv.quote.none": "",
20213
+ "datafeeder.validation.csv.quote.simple": "",
20214
+ "datafeeder.validation.csv.quoteChar": "",
19874
20215
  "datafeeder.validation.encoding": "",
19875
20216
  "datafeeder.validation.extent.title": "",
19876
20217
  "datafeeder.validation.extent.title.unknown": "",
@@ -19884,7 +20225,7 @@ var pt = {
19884
20225
  "datahub.header.lastRecords": "",
19885
20226
  "datahub.header.myfavorites": "",
19886
20227
  "datahub.header.news": "",
19887
- "datahub.header.organisations": "",
20228
+ "datahub.header.organizations": "",
19888
20229
  "datahub.header.popularRecords": "",
19889
20230
  "datahub.header.title.html": "",
19890
20231
  "datahub.news.contact.contactus": "",
@@ -19920,6 +20261,20 @@ var pt = {
19920
20261
  "downloads.format.unknown": "",
19921
20262
  "downloads.wfs.featuretype.not.found": "",
19922
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": "",
19923
20278
  "editor.record.form.license": "",
19924
20279
  "editor.record.form.license.cc-by": "",
19925
20280
  "editor.record.form.license.cc-by-sa": "",
@@ -19930,12 +20285,31 @@ var pt = {
19930
20285
  "editor.record.form.license.odc-by": "",
19931
20286
  "editor.record.form.license.pddl": "",
19932
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": "",
19933
20306
  "editor.record.form.resourceUpdated": "",
19934
20307
  "editor.record.form.temporalExtents": "",
19935
20308
  "editor.record.form.temporalExtents.addDate": "",
19936
20309
  "editor.record.form.temporalExtents.addRange": "",
19937
20310
  "editor.record.form.temporalExtents.date": "",
19938
20311
  "editor.record.form.temporalExtents.range": "",
20312
+ "editor.record.form.unique.identifier": "",
19939
20313
  "editor.record.form.updateFrequency": "",
19940
20314
  "editor.record.form.updateFrequency.planned": "",
19941
20315
  "editor.record.loadError.body": "",
@@ -19951,6 +20325,7 @@ var pt = {
19951
20325
  "editor.record.saveStatus.draftWithChangesPending": "",
19952
20326
  "editor.record.saveStatus.recordUpToDate": "",
19953
20327
  "editor.record.upToDate": "",
20328
+ "editor.sidebar.menu.editor": "",
19954
20329
  "externalviewer.dataset.unnamed": "",
19955
20330
  "facets.block.title.OrgForResource": "",
19956
20331
  "facets.block.title.availableInServices": "",
@@ -20019,11 +20394,16 @@ var pt = {
20019
20394
  "organisations.sortBy.nameDesc": "",
20020
20395
  "organisations.sortBy.recordCountAsc": "",
20021
20396
  "organisations.sortBy.recordCountDesc": "",
20397
+ "organization.details.lastPublishedDatasets": "",
20398
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
20399
+ "organization.details.mailContact": "",
20400
+ "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
20022
20401
  "pagination.nextPage": "",
20023
20402
  "pagination.page": "",
20024
20403
  "pagination.pageOf": "",
20025
20404
  previous: previous,
20026
20405
  "record.action.download": "",
20406
+ "record.action.duplicate": "",
20027
20407
  "record.action.view": "",
20028
20408
  "record.externalViewer.open": "",
20029
20409
  "record.metadata.about": "",
@@ -20056,7 +20436,7 @@ var pt = {
20056
20436
  "record.metadata.preview": "",
20057
20437
  "record.metadata.producer": "",
20058
20438
  "record.metadata.publication": "",
20059
- "record.metadata.publications": "",
20439
+ "record.metadata.publications": "{count, plural, =0{} one{} other{}}",
20060
20440
  "record.metadata.quality": "",
20061
20441
  "record.metadata.quality.contact.failed": "",
20062
20442
  "record.metadata.quality.contact.success": "",
@@ -20116,6 +20496,8 @@ var pt = {
20116
20496
  "results.sortBy.relevancy": "",
20117
20497
  "search.autocomplete.error": "",
20118
20498
  "search.error.couldNotReachApi": "",
20499
+ "search.error.organizationHasNoDataset": "",
20500
+ "search.error.organizationNotFound": "",
20119
20501
  "search.error.receivedError": "",
20120
20502
  "search.error.recordHasnolink": "",
20121
20503
  "search.error.recordNotFound": "",
@@ -20143,9 +20525,11 @@ var pt = {
20143
20525
  "search.filters.minimize": "",
20144
20526
  "search.filters.myRecords": "",
20145
20527
  "search.filters.myRecordsHelp": "",
20528
+ "search.filters.organization": "",
20146
20529
  "search.filters.otherRecords": "",
20530
+ "search.filters.producerOrg": "",
20147
20531
  "search.filters.publicationYear": "",
20148
- "search.filters.publisher": "",
20532
+ "search.filters.publisherOrg": "",
20149
20533
  "search.filters.representationType": "",
20150
20534
  "search.filters.resourceType": "",
20151
20535
  "search.filters.standard": "",
@@ -21152,6 +21536,17 @@ class Gn4Repository {
21152
21536
  .then((record) => [record, xml, isSavedAlready]);
21153
21537
  }));
21154
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
+ }
21155
21550
  serializeRecordToXml(record, referenceRecordSource) {
21156
21551
  // if there's a reference record, use that standard; otherwise, use iso19139
21157
21552
  const converter = referenceRecordSource
@@ -21311,9 +21706,11 @@ class OrganizationsFromMetadataService {
21311
21706
  return fullOrg;
21312
21707
  return {
21313
21708
  ...fullOrg,
21709
+ email: emails[0],
21314
21710
  ...(group.description && { description: group.description }),
21315
21711
  ...(group.logo && { logoUrl: getAsUrl(`${IMAGE_URL$1}${group.logo}`) }),
21316
21712
  ...(group.website && { website: getAsUrl(group.website) }),
21713
+ ...(group.email && { email: group.email }),
21317
21714
  };
21318
21715
  });
21319
21716
  }
@@ -21414,6 +21811,7 @@ class OrganizationsFromGroupsService {
21414
21811
  return {
21415
21812
  name: group.label[lang3],
21416
21813
  ...(group.description && { description: group.description }),
21814
+ ...(group.email && { email: group.email }),
21417
21815
  ...(group.logo && {
21418
21816
  logoUrl: getAsUrl(`${IMAGE_URL}${group.logo}`),
21419
21817
  }),
@@ -21678,7 +22076,7 @@ class Gn4PlatformMapper {
21678
22076
  userFromApi(apiUser) {
21679
22077
  if (!apiUser)
21680
22078
  return null;
21681
- const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
22079
+ const { enabled, emailAddresses, organization, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
21682
22080
  return { ...apiUser, id: id.toString() };
21683
22081
  }
21684
22082
  keywordsFromApi(keywords, thesaurus, lang3) {
@@ -21780,8 +22178,6 @@ class Gn4PlatformService {
21780
22178
  this.allThesaurus$ = this.httpClient
21781
22179
  .get(`${this.registriesApiService.configuration.basePath}/thesaurus?_content_type=json`)
21782
22180
  .pipe(map$1((thesaurus) => {
21783
- // FIXME: find a better way to exclude place keywords
21784
- // thesaurus[0].filter((thes) => thes.dname !== 'place')
21785
22181
  return thesaurus[0];
21786
22182
  }), shareReplay(1));
21787
22183
  this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
@@ -21825,8 +22221,14 @@ class Gn4PlatformService {
21825
22221
  }
21826
22222
  return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
21827
22223
  }
21828
- searchKeywords(query) {
21829
- 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
+ }));
21830
22232
  return combineLatest([keywords$, this.allThesaurus$]).pipe(map$1(([keywords, thesaurus]) => {
21831
22233
  return this.mapper.keywordsFromApi(keywords, thesaurus, this.langService.iso3);
21832
22234
  }));
@@ -24507,6 +24909,70 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
24507
24909
  }]
24508
24910
  }] });
24509
24911
 
24912
+ class PopoverComponent {
24913
+ constructor(viewContainerRef, renderer) {
24914
+ this.viewContainerRef = viewContainerRef;
24915
+ this.renderer = renderer;
24916
+ }
24917
+ getContent() {
24918
+ if (this.content instanceof TemplateRef) {
24919
+ if (this.view) {
24920
+ this.view.destroy();
24921
+ }
24922
+ this.view = this.viewContainerRef.createEmbeddedView(this.content);
24923
+ this.view.detectChanges();
24924
+ const wrapper = this.renderer.createElement('div'); // Create a wrapper div
24925
+ this.view.rootNodes.forEach((node) => {
24926
+ this.renderer.appendChild(wrapper, node); // Append each root node to the wrapper
24927
+ });
24928
+ return wrapper;
24929
+ }
24930
+ return this.content;
24931
+ }
24932
+ ngAfterViewInit() {
24933
+ this.tippyInstance = tippy(this.popoverContent.nativeElement, {
24934
+ content: this.getContent(),
24935
+ allowHTML: true,
24936
+ theme: this.theme,
24937
+ });
24938
+ }
24939
+ ngOnChanges(changes) {
24940
+ if (changes['theme']) {
24941
+ this.theme = changes['theme'].currentValue;
24942
+ if (this.tippyInstance) {
24943
+ this.tippyInstance.setProps({ theme: this.theme });
24944
+ }
24945
+ }
24946
+ if (changes['content']) {
24947
+ this.content = changes['content'].currentValue;
24948
+ if (this.tippyInstance) {
24949
+ this.tippyInstance.setContent(this.getContent());
24950
+ }
24951
+ }
24952
+ }
24953
+ ngOnDestroy() {
24954
+ if (this.tippyInstance) {
24955
+ this.tippyInstance.destroy();
24956
+ }
24957
+ if (this.view) {
24958
+ this.view.destroy();
24959
+ }
24960
+ }
24961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PopoverComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
24962
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PopoverComponent, isStandalone: true, selector: "gn-ui-popover", inputs: { content: "content", theme: "theme" }, viewQueries: [{ propertyName: "popoverContent", first: true, predicate: ["popoverContent"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span #popoverContent>\n <ng-content></ng-content>\n</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
24963
+ }
24964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PopoverComponent, decorators: [{
24965
+ type: Component,
24966
+ args: [{ selector: 'gn-ui-popover', standalone: true, imports: [CommonModule], template: "<span #popoverContent>\n <ng-content></ng-content>\n</span>\n" }]
24967
+ }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: i0.Renderer2 }]; }, propDecorators: { popoverContent: [{
24968
+ type: ViewChild,
24969
+ args: ['popoverContent', { static: false }]
24970
+ }], content: [{
24971
+ type: Input
24972
+ }], theme: [{
24973
+ type: Input
24974
+ }] } });
24975
+
24510
24976
  class PopupAlertComponent {
24511
24977
  constructor(changeDetector) {
24512
24978
  this.changeDetector = changeDetector;
@@ -26621,11 +27087,11 @@ class MetadataQualityItemComponent {
26621
27087
  return `record.metadata.quality.${this.name}.${this.value ? 'success' : 'failed'}`;
26622
27088
  }
26623
27089
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26624
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: { name: "name", value: "value" }, ngImport: i0, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n", dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27090
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: { name: "name", value: "value" }, ngImport: i0, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined min-w-fit\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n", dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26625
27091
  }
26626
27092
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityItemComponent, decorators: [{
26627
27093
  type: Component,
26628
- args: [{ selector: 'gn-ui-metadata-quality-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n" }]
27094
+ args: [{ selector: 'gn-ui-metadata-quality-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ml-4 flex flex-row\">\n <mat-icon class=\"material-symbols-outlined min-w-fit\">{{ icon }}</mat-icon>\n <p class=\"ml-2 text\">{{ labelKey | translate }}</p>\n</div>\n" }]
26629
27095
  }], propDecorators: { name: [{
26630
27096
  type: Input
26631
27097
  }], value: [{
@@ -26636,7 +27102,6 @@ class MetadataQualityComponent {
26636
27102
  constructor() {
26637
27103
  this.smaller = false;
26638
27104
  this.items = [];
26639
- this.isMenuShown = false;
26640
27105
  }
26641
27106
  get qualityScore() {
26642
27107
  const qualityScore = this.metadata?.extras?.qualityScore;
@@ -26647,12 +27112,6 @@ class MetadataQualityComponent {
26647
27112
  get calculatedQualityScore() {
26648
27113
  return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
26649
27114
  }
26650
- showMenu() {
26651
- this.isMenuShown = true;
26652
- }
26653
- hideMenu() {
26654
- this.isMenuShown = false;
26655
- }
26656
27115
  add(name, value) {
26657
27116
  if (this.metadataQualityDisplay?.[name] !== false) {
26658
27117
  this.items.push({ name, value });
@@ -26676,11 +27135,11 @@ class MetadataQualityComponent {
26676
27135
  }
26677
27136
  }
26678
27137
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26679
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"mb-6 metadata-quality\"\n (mouseenter)=\"showMenu()\"\n (mouseleave)=\"hideMenu()\"\n>\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n (focus)=\"showMenu()\"\n (blur)=\"hideMenu()\"\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n <div\n class=\"absolute z-10 bg-white border border-black border-opacity-35 rounded-lg shadow-lg p-5 whitespace-nowrap\"\n [class]=\"isMenuShown ? 'block' : 'hidden'\"\n >\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</div>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27138
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26680
27139
  }
26681
27140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataQualityComponent, decorators: [{
26682
27141
  type: Component,
26683
- args: [{ selector: 'gn-ui-metadata-quality', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"mb-6 metadata-quality\"\n (mouseenter)=\"showMenu()\"\n (mouseleave)=\"hideMenu()\"\n>\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n (focus)=\"showMenu()\"\n (blur)=\"hideMenu()\"\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n <div\n class=\"absolute z-10 bg-white border border-black border-opacity-35 rounded-lg shadow-lg p-5 whitespace-nowrap\"\n [class]=\"isMenuShown ? 'block' : 'hidden'\"\n >\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</div>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
27142
+ args: [{ selector: 'gn-ui-metadata-quality', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
26684
27143
  }], propDecorators: { metadata: [{
26685
27144
  type: Input
26686
27145
  }], smaller: [{
@@ -26875,11 +27334,11 @@ class ApiCardComponent {
26875
27334
  }
26876
27335
  }
26877
27336
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26878
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27337
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26879
27338
  }
26880
27339
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, decorators: [{
26881
27340
  type: Component,
26882
- args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n" }]
27341
+ args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
26883
27342
  }], propDecorators: { link: [{
26884
27343
  type: Input
26885
27344
  }], currentLink: [{
@@ -27024,17 +27483,19 @@ var ErrorType;
27024
27483
  ErrorType[ErrorType["RECEIVED_ERROR"] = 1] = "RECEIVED_ERROR";
27025
27484
  ErrorType[ErrorType["RECORD_NOT_FOUND"] = 2] = "RECORD_NOT_FOUND";
27026
27485
  ErrorType[ErrorType["DATASET_HAS_NO_LINK"] = 3] = "DATASET_HAS_NO_LINK";
27486
+ ErrorType[ErrorType["ORGANIZATION_HAS_NO_DATASET"] = 4] = "ORGANIZATION_HAS_NO_DATASET";
27487
+ ErrorType[ErrorType["ORGANIZATION_NOT_FOUND"] = 5] = "ORGANIZATION_NOT_FOUND";
27027
27488
  })(ErrorType || (ErrorType = {}));
27028
27489
  class ErrorComponent {
27029
27490
  constructor() {
27030
27491
  this.types = ErrorType;
27031
27492
  }
27032
27493
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27033
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorComponent, selector: "gn-ui-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">computer</mat-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27494
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ErrorComponent, selector: "gn-ui-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark\n </mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark\n </mat-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">computer</mat-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27034
27495
  }
27035
27496
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorComponent, decorators: [{
27036
27497
  type: Component,
27037
- args: [{ selector: 'gn-ui-error', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">computer</mat-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"] }]
27498
+ args: [{ selector: 'gn-ui-error', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div\n *ngIf=\"type === types.COULD_NOT_REACH_API\"\n data-test=\"could-not-reach-api-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark\n </mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark\n </mat-icon>\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div\n *ngIf=\"type === types.DATASET_HAS_NO_LINK\"\n data-test=\"dataset-has-no-link-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">computer</mat-icon>\n </div>\n <div translate>search.error.recordHasnolink</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\" data-test=\"received-error-error\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.ORGANIZATION_HAS_NO_DATASET\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate>search.error.organizationHasNoDataset</div>\n </div>\n <div\n *ngIf=\"type === types.RECORD_NOT_FOUND\"\n data-test=\"record-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div\n *ngIf=\"type === types.ORGANIZATION_NOT_FOUND\"\n data-test=\"org-not-found-error\"\n >\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark\n </mat-icon>\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.organizationNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"] }]
27038
27499
  }], propDecorators: { type: [{
27039
27500
  type: Input
27040
27501
  }], error: [{
@@ -27134,71 +27595,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27134
27595
  type: Output
27135
27596
  }] } });
27136
27597
 
27137
- class MaxLinesComponent {
27138
- constructor(cdr) {
27139
- this.cdr = cdr;
27140
- this.maxLines = 6;
27141
- this.isExpanded = false;
27142
- this.maxHeight = '';
27143
- this.showToggleButton = false;
27144
- }
27145
- ngAfterViewInit() {
27146
- this.calculateMaxHeight();
27147
- this.observer = new ResizeObserver((mutations) => {
27148
- mutations.forEach(() => {
27149
- this.calculateMaxHeight();
27150
- });
27151
- });
27152
- this.observer.observe(this.container.nativeElement.children[0]);
27153
- }
27154
- toggleDisplay() {
27155
- this.isExpanded = !this.isExpanded;
27156
- this.calculateMaxHeight();
27157
- }
27158
- calculateMaxHeight() {
27159
- const containerElement = this.container.nativeElement;
27160
- const contentElement = containerElement.children[0];
27161
- const contentHeight = contentElement.getBoundingClientRect().height;
27162
- if (contentHeight) {
27163
- if (contentHeight > this.maxLines * this.getLineHeight(contentElement)) {
27164
- this.showToggleButton = true;
27165
- this.maxHeight = this.isExpanded
27166
- ? `${contentHeight}px`
27167
- : `${this.maxLines * this.getLineHeight(contentElement)}px`;
27168
- }
27169
- else {
27170
- this.showToggleButton = false;
27171
- this.maxHeight = `${contentHeight}px`;
27172
- }
27173
- containerElement.setAttribute('style', `max-height: ${this.maxHeight}; overflow: hidden`);
27174
- this.cdr.detectChanges();
27175
- }
27176
- }
27177
- getLineHeight(element) {
27178
- const computedStyle = window.getComputedStyle(element);
27179
- const lineHeight = parseFloat(computedStyle.lineHeight);
27180
- const fontSize = parseFloat(computedStyle.fontSize || '14');
27181
- const result = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight; // Use a default if line height is not specified
27182
- return result;
27183
- }
27184
- ngOnDestroy() {
27185
- if (!this.observer)
27186
- return;
27187
- this.observer.unobserve(this.container.nativeElement.children[0]);
27188
- }
27189
- 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 }); }
27190
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27191
- }
27192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, decorators: [{
27193
- type: Component,
27194
- args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
27195
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
27196
- type: Input
27197
- }], container: [{
27198
- type: ViewChild,
27199
- args: ['container']
27200
- }] } });
27201
-
27202
27598
  class MetadataCatalogComponent {
27203
27599
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataCatalogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27204
27600
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataCatalogComponent, selector: "gn-ui-metadata-catalog", inputs: { sourceLabel: "sourceLabel" }, ngImport: i0, template: "<div>\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.catalog\n </p>\n <p class=\"text-primary font-title text-21 mb-1\">\n {{ sourceLabel }}\n </p>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -27273,6 +27669,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27273
27669
  args: ['contentDiv']
27274
27670
  }] } });
27275
27671
 
27672
+ class MaxLinesComponent {
27673
+ constructor(cdr) {
27674
+ this.cdr = cdr;
27675
+ this.maxLines = 6;
27676
+ this.isExpanded = false;
27677
+ this.maxHeight = '';
27678
+ this.showToggleButton = false;
27679
+ }
27680
+ ngAfterViewInit() {
27681
+ this.calculateMaxHeight();
27682
+ this.observer = new ResizeObserver((mutations) => {
27683
+ mutations.forEach(() => {
27684
+ this.calculateMaxHeight();
27685
+ });
27686
+ });
27687
+ this.observer.observe(this.container.nativeElement.children[0]);
27688
+ }
27689
+ toggleDisplay() {
27690
+ this.isExpanded = !this.isExpanded;
27691
+ this.calculateMaxHeight();
27692
+ }
27693
+ calculateMaxHeight() {
27694
+ const containerElement = this.container.nativeElement;
27695
+ const contentElement = containerElement.children[0];
27696
+ const contentHeight = contentElement.getBoundingClientRect().height;
27697
+ if (contentHeight) {
27698
+ if (contentHeight > this.maxLines * this.getLineHeight(contentElement)) {
27699
+ this.showToggleButton = true;
27700
+ this.maxHeight = this.isExpanded
27701
+ ? `${contentHeight}px`
27702
+ : `${this.maxLines * this.getLineHeight(contentElement)}px`;
27703
+ }
27704
+ else {
27705
+ this.showToggleButton = false;
27706
+ this.maxHeight = `${contentHeight}px`;
27707
+ }
27708
+ containerElement.setAttribute('style', `max-height: ${this.maxHeight}; overflow: hidden`);
27709
+ this.cdr.detectChanges();
27710
+ }
27711
+ }
27712
+ getLineHeight(element) {
27713
+ const computedStyle = window.getComputedStyle(element);
27714
+ const lineHeight = parseFloat(computedStyle.lineHeight);
27715
+ const fontSize = parseFloat(computedStyle.fontSize || '14');
27716
+ const result = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight; // Use a default if line height is not specified
27717
+ return result;
27718
+ }
27719
+ ngOnDestroy() {
27720
+ if (!this.observer)
27721
+ return;
27722
+ this.observer.unobserve(this.container.nativeElement.children[0]);
27723
+ }
27724
+ 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 }); }
27725
+ 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 }); }
27726
+ }
27727
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, decorators: [{
27728
+ type: Component,
27729
+ 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" }]
27730
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
27731
+ type: Input
27732
+ }], container: [{
27733
+ type: ViewChild,
27734
+ args: ['container']
27735
+ }] } });
27736
+
27276
27737
  /* eslint-disable @angular-eslint/directive-selector */
27277
27738
  class GnUiLinkifyDirective {
27278
27739
  constructor(el, renderer) {
@@ -27412,7 +27873,7 @@ class MetadataInfoComponent {
27412
27873
  this.keyword.emit(keyword);
27413
27874
  }
27414
27875
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27415
- 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: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27876
+ 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 }); }
27416
27877
  }
27417
27878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataInfoComponent, decorators: [{
27418
27879
  type: Component,
@@ -27683,13 +28144,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27683
28144
  }] } });
27684
28145
 
27685
28146
  class RelatedRecordCardComponent {
28147
+ constructor() {
28148
+ this.extraClass = '';
28149
+ this.baseClasses = [
28150
+ 'w-72',
28151
+ 'h-96',
28152
+ 'overflow-hidden',
28153
+ 'rounded-lg',
28154
+ 'bg-white',
28155
+ 'cursor-pointer',
28156
+ 'block',
28157
+ 'hover:-translate-y-2 ',
28158
+ 'duration-[180ms]',
28159
+ ].join(' ');
28160
+ }
28161
+ get classList() {
28162
+ return `${this.baseClasses} ${this.extraClass}`;
28163
+ }
27686
28164
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27687
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ 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: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record", extraClass: "extraClass" }, ngImport: i0, template: "<a\n [class]=\"classList\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ 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: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27688
28166
  }
27689
28167
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
27690
28168
  type: Component,
27691
- args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
27692
- }], propDecorators: { record: [{
28169
+ args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n [class]=\"classList\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
28170
+ }], ctorParameters: function () { return []; }, propDecorators: { record: [{
28171
+ type: Input
28172
+ }], extraClass: [{
27693
28173
  type: Input
27694
28174
  }] } });
27695
28175
 
@@ -28113,11 +28593,11 @@ class UserPreviewComponent {
28113
28593
  return (this.user.name + ' ' + this.user.surname).trim();
28114
28594
  }
28115
28595
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28596
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28117
28597
  }
28118
28598
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, decorators: [{
28119
28599
  type: Component,
28120
- args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28600
+ args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28121
28601
  }], propDecorators: { user: [{
28122
28602
  type: Input
28123
28603
  }], avatarPlaceholder: [{
@@ -28246,7 +28726,6 @@ class UiElementsModule {
28246
28726
  UserPreviewComponent,
28247
28727
  GnUiLinkifyDirective,
28248
28728
  PaginationButtonsComponent,
28249
- MaxLinesComponent,
28250
28729
  RecordApiFormComponent,
28251
28730
  UserFeedbackItemComponent,
28252
28731
  ImageOverlayPreviewComponent], imports: [CommonModule,
@@ -28258,10 +28737,12 @@ class UiElementsModule {
28258
28737
  UiInputsModule,
28259
28738
  FormsModule,
28260
28739
  NgOptimizedImage,
28740
+ PopoverComponent,
28261
28741
  MarkdownParserComponent,
28262
28742
  ThumbnailComponent,
28263
28743
  TimeSincePipe,
28264
- BadgeComponent], exports: [MetadataInfoComponent,
28744
+ BadgeComponent,
28745
+ MaxLinesComponent], exports: [MetadataInfoComponent,
28265
28746
  ContentGhostComponent,
28266
28747
  DownloadItemComponent,
28267
28748
  DownloadsListComponent,
@@ -28277,7 +28758,6 @@ class UiElementsModule {
28277
28758
  AvatarComponent,
28278
28759
  UserPreviewComponent,
28279
28760
  PaginationButtonsComponent,
28280
- MaxLinesComponent,
28281
28761
  RecordApiFormComponent,
28282
28762
  MarkdownParserComponent,
28283
28763
  UserFeedbackItemComponent,
@@ -28292,8 +28772,10 @@ class UiElementsModule {
28292
28772
  RouterModule,
28293
28773
  UiInputsModule,
28294
28774
  FormsModule,
28775
+ PopoverComponent,
28295
28776
  ThumbnailComponent,
28296
- BadgeComponent] }); }
28777
+ BadgeComponent,
28778
+ MaxLinesComponent] }); }
28297
28779
  }
28298
28780
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UiElementsModule, decorators: [{
28299
28781
  type: NgModule,
@@ -28310,10 +28792,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28310
28792
  UiInputsModule,
28311
28793
  FormsModule,
28312
28794
  NgOptimizedImage,
28795
+ PopoverComponent,
28313
28796
  MarkdownParserComponent,
28314
28797
  ThumbnailComponent,
28315
28798
  TimeSincePipe,
28316
28799
  BadgeComponent,
28800
+ MaxLinesComponent,
28317
28801
  ],
28318
28802
  declarations: [
28319
28803
  MetadataInfoComponent,
@@ -28332,7 +28816,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28332
28816
  UserPreviewComponent,
28333
28817
  GnUiLinkifyDirective,
28334
28818
  PaginationButtonsComponent,
28335
- MaxLinesComponent,
28336
28819
  RecordApiFormComponent,
28337
28820
  UserFeedbackItemComponent,
28338
28821
  ImageOverlayPreviewComponent,
@@ -28354,7 +28837,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28354
28837
  AvatarComponent,
28355
28838
  UserPreviewComponent,
28356
28839
  PaginationButtonsComponent,
28357
- MaxLinesComponent,
28358
28840
  RecordApiFormComponent,
28359
28841
  MarkdownParserComponent,
28360
28842
  UserFeedbackItemComponent,
@@ -28467,6 +28949,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28467
28949
  }]
28468
28950
  }] });
28469
28951
 
28952
+ class ActionMenuComponent {
28953
+ constructor() {
28954
+ this.duplicate = new EventEmitter();
28955
+ }
28956
+ openMenu() {
28957
+ this.trigger.openMenu();
28958
+ }
28959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28960
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", outputs: { duplicate: "duplicate" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2$5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28961
+ }
28962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, decorators: [{
28963
+ type: Component,
28964
+ args: [{ selector: 'gn-ui-action-menu', standalone: true, imports: [MatIconModule, ButtonComponent, MatMenuModule, TranslateModule], template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n" }]
28965
+ }], propDecorators: { duplicate: [{
28966
+ type: Output
28967
+ }], trigger: [{
28968
+ type: ViewChild,
28969
+ args: [MatMenuTrigger]
28970
+ }] } });
28971
+
28470
28972
  class ResultsTableComponent {
28471
28973
  constructor() {
28472
28974
  this.records = [];
@@ -28476,6 +28978,7 @@ class ResultsTableComponent {
28476
28978
  // emits the column (field) as well as the order
28477
28979
  this.sortByChange = new EventEmitter();
28478
28980
  this.recordClick = new EventEmitter();
28981
+ this.duplicateRecord = new EventEmitter();
28479
28982
  this.recordsSelectedChange = new EventEmitter();
28480
28983
  }
28481
28984
  dateToString(date) {
@@ -28510,6 +29013,9 @@ class ResultsTableComponent {
28510
29013
  handleRecordClick(item) {
28511
29014
  this.recordClick.emit(item);
28512
29015
  }
29016
+ handleDuplicate(item) {
29017
+ this.duplicateRecord.emit(item);
29018
+ }
28513
29019
  setSortBy(col, order) {
28514
29020
  this.sortByChange.emit([col, order]);
28515
29021
  }
@@ -28545,7 +29051,7 @@ class ResultsTableComponent {
28545
29051
  return !allSelected && someSelected;
28546
29052
  }
28547
29053
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28548
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
29054
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", outputs: ["duplicate"] }] }); }
28549
29055
  }
28550
29056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, decorators: [{
28551
29057
  type: Component,
@@ -28557,7 +29063,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28557
29063
  MatIconModule,
28558
29064
  TranslateModule,
28559
29065
  BadgeComponent,
28560
- ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
29066
+ ActionMenuComponent,
29067
+ ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
28561
29068
  }], propDecorators: { records: [{
28562
29069
  type: Input
28563
29070
  }], selectedRecordsIdentifiers: [{
@@ -28570,6 +29077,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28570
29077
  type: Output
28571
29078
  }], recordClick: [{
28572
29079
  type: Output
29080
+ }], duplicateRecord: [{
29081
+ type: Output
28573
29082
  }], recordsSelectedChange: [{
28574
29083
  type: Output
28575
29084
  }] } });
@@ -29111,6 +29620,9 @@ const getSearchResults = createSelector(getSearchStateSearch, (state) => state.r
29111
29620
  const getSearchResultsLoading = createSelector(getSearchStateSearch, (state) => state.loadingResults);
29112
29621
  const getSearchResultsAggregations = createSelector(getSearchStateSearch, (state) => state.results.aggregations);
29113
29622
  const getSearchResultsHits = createSelector(getSearchStateSearch, (state) => state.results.count);
29623
+ const isBeginningOfResults = createSelector(getSearchStateSearch, (state) => {
29624
+ return state.params.currentPage === 0;
29625
+ });
29114
29626
  const isEndOfResults = createSelector(getSearchStateSearch, (state) => {
29115
29627
  return (state.params.currentPage * state.params.pageSize +
29116
29628
  state.params.pageSize >=
@@ -29144,6 +29656,7 @@ class SearchFacade {
29144
29656
  this.isLoading$ = this.store.pipe(select(getSearchResultsLoading, searchId));
29145
29657
  this.searchFilters$ = this.store.pipe(select(getSearchFilters, searchId));
29146
29658
  this.resultsHits$ = this.store.pipe(select(getSearchResultsHits, searchId));
29659
+ this.isBeginningOfResults$ = this.store.pipe(select(isBeginningOfResults, searchId));
29147
29660
  this.isEndOfResults$ = this.store.pipe(select(isEndOfResults, searchId));
29148
29661
  this.totalPages$ = this.store.pipe(select(totalPages, searchId));
29149
29662
  this.currentPage$ = this.store.pipe(select(currentPage, searchId));
@@ -30340,12 +30853,14 @@ marker('search.filters.keyword');
30340
30853
  marker('search.filters.isSpatial');
30341
30854
  marker('search.filters.license');
30342
30855
  marker('search.filters.publicationYear');
30343
- marker('search.filters.publisher');
30856
+ marker('search.filters.organization');
30344
30857
  marker('search.filters.representationType');
30345
30858
  marker('search.filters.resourceType');
30346
30859
  marker('search.filters.standard');
30347
30860
  marker('search.filters.topic');
30348
30861
  marker('search.filters.contact');
30862
+ marker('search.filters.producerOrg');
30863
+ marker('search.filters.publisherOrg');
30349
30864
  class FieldsService {
30350
30865
  get supportedFields() {
30351
30866
  return Object.keys(this.fields);
@@ -30353,7 +30868,7 @@ class FieldsService {
30353
30868
  constructor(injector) {
30354
30869
  this.injector = injector;
30355
30870
  this.fields = {
30356
- publisher: new OrganizationSearchField(this.injector),
30871
+ organization: new OrganizationSearchField(this.injector),
30357
30872
  format: new SimpleSearchField('format', this.injector, 'asc'),
30358
30873
  resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
30359
30874
  representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
@@ -30366,6 +30881,8 @@ class FieldsService {
30366
30881
  q: new FullTextSearchField(),
30367
30882
  license: new LicenseSearchField(this.injector),
30368
30883
  owner: new OwnerSearchField(this.injector),
30884
+ producerOrg: new MultilingualSearchField('originatorOrgForResourceObject', this.injector, 'asc', 'key'),
30885
+ publisherOrg: new MultilingualSearchField('distributorOrgForResourceObject', this.injector, 'asc', 'key'),
30369
30886
  };
30370
30887
  }
30371
30888
  getAvailableValues(fieldName) {
@@ -30543,6 +31060,7 @@ class ResultsTableContainerComponent {
30543
31060
  this.selectionService = selectionService;
30544
31061
  this.recordsRepository = recordsRepository;
30545
31062
  this.recordClick = new EventEmitter();
31063
+ this.duplicateRecord = new EventEmitter();
30546
31064
  this.records$ = this.searchFacade.results$;
30547
31065
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
30548
31066
  this.sortBy$ = this.searchFacade.sortBy$;
@@ -30551,6 +31069,9 @@ class ResultsTableContainerComponent {
30551
31069
  handleRecordClick(item) {
30552
31070
  this.recordClick.emit(item);
30553
31071
  }
31072
+ handleDuplicateRecord(item) {
31073
+ this.duplicateRecord.emit(item);
31074
+ }
30554
31075
  handleSortByChange(col, order) {
30555
31076
  this.searchService.setSortBy([order, col]);
30556
31077
  }
@@ -30563,13 +31084,15 @@ class ResultsTableContainerComponent {
30563
31084
  }
30564
31085
  }
30565
31086
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
30566
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "recordsSelectedChange"] }] }); }
31087
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "recordsSelectedChange"] }] }); }
30567
31088
  }
30568
31089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
30569
31090
  type: Component,
30570
- args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
31091
+ args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
30571
31092
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }]; }, propDecorators: { recordClick: [{
30572
31093
  type: Output
31094
+ }], duplicateRecord: [{
31095
+ type: Output
30573
31096
  }] } });
30574
31097
 
30575
31098
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
@@ -30869,7 +31392,7 @@ class LayersPanelComponent {
30869
31392
  this.mapFacade.addLayer(layer);
30870
31393
  }
30871
31394
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
30872
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31395
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30873
31396
  }
30874
31397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, decorators: [{
30875
31398
  type: Component,
@@ -31383,12 +31906,9 @@ const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => sta
31383
31906
 
31384
31907
  class FigureComponent {
31385
31908
  constructor() {
31909
+ this.unit = '';
31386
31910
  this.color = 'primary';
31387
31911
  }
31388
- get hoverTitle() {
31389
- return `${this.figure.toString()} ${this.unit || ''}
31390
- ${this.title}`;
31391
- }
31392
31912
  get textClass() {
31393
31913
  return this.color === 'primary' ? 'text-primary' : 'text-secondary';
31394
31914
  }
@@ -31396,11 +31916,11 @@ ${this.title}`;
31396
31916
  return this.color === 'primary' ? 'bg-primary-white' : 'bg-secondary-white';
31397
31917
  }
31398
31918
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FigureComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31399
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FigureComponent, selector: "gn-ui-figure", inputs: { icon: "icon", title: "title", figure: "figure", unit: "unit", color: "color" }, ngImport: i0, template: "<div\n translate\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n [title]=\"hoverTitle\"\n>\n <mat-icon\n class=\"material-symbols-outlined {{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] p-[0.6em] w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n >\n {{ icon }}\n </mat-icon>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\">{{ figure }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31919
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FigureComponent, selector: "gn-ui-figure", inputs: { icon: "icon", title: "title", figure: "figure", unit: "unit", color: "color" }, ngImport: i0, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <mat-icon\n class=\"material-symbols-outlined {{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] p-[0.6em] w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n >\n {{ icon }}\n </mat-icon>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31400
31920
  }
31401
31921
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FigureComponent, decorators: [{
31402
31922
  type: Component,
31403
- args: [{ selector: 'gn-ui-figure', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n translate\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n [title]=\"hoverTitle\"\n>\n <mat-icon\n class=\"material-symbols-outlined {{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] p-[0.6em] w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n >\n {{ icon }}\n </mat-icon>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\">{{ figure }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"] }]
31923
+ args: [{ selector: 'gn-ui-figure', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-row justify-start items-center overflow-hidden\"\n data-test=\"figureTitle\"\n [title]=\"\n figure.toString() +\n ' ' +\n unit +\n ' ' +\n (title | translate: { count: figure })\n \"\n>\n <mat-icon\n class=\"material-symbols-outlined {{ bgClass }} {{\n textClass\n }} text-[1.875em] rounded-full mr-[0.55em] p-[0.6em] w-[2.2em] h-[2.2em] shrink-0\"\n style=\"width: 2.2em; height: 2.2em\"\n >\n {{ icon }}\n </mat-icon>\n <div class=\"shrink overflow-hidden\">\n <div class=\"figure-block text-[1.5em] text-black\">\n <span class=\"figure font-medium mr-[0.3em]\" data-test=\"figure\">{{\n figure\n }}</span>\n <span class=\"unit text-[0.665em]\">{{ unit }}</span>\n </div>\n <div translate class=\"title truncate\" [translateParams]=\"{ count: figure }\">\n {{ title }}\n </div>\n </div>\n</div>\n", styles: [":host{display:inherit}\n"] }]
31404
31924
  }], propDecorators: { icon: [{
31405
31925
  type: Input
31406
31926
  }], title: [{
@@ -31614,7 +32134,7 @@ class TableComponent {
31614
32134
  return rowIdPrefix + id;
31615
32135
  }
31616
32136
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
31617
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$6.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$7.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$7.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31618
32138
  }
31619
32139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
31620
32140
  type: Component,
@@ -32987,7 +33507,10 @@ class MdViewFacade {
32987
33507
  return collectionRecords && collectionRecords.geometry
32988
33508
  ? link
32989
33509
  : null;
32990
- }), defaultIfEmpty(null));
33510
+ }), defaultIfEmpty(null), catchError((e) => {
33511
+ console.error(e);
33512
+ return of(null);
33513
+ }));
32991
33514
  }
32992
33515
  else {
32993
33516
  return of(link);
@@ -33348,15 +33871,15 @@ class OrganisationPreviewComponent {
33348
33871
  }
33349
33872
  clickOrganisation(event) {
33350
33873
  event.preventDefault();
33351
- this.clickedOrganisation.emit(this.organisation);
33874
+ this.clickedOrganisation.emit(this.organization);
33352
33875
  }
33353
33876
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33354
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col grow overflow-hidden\">\n <span\n class=\"shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 grow shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33877
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organization: "organization", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organization.name\"\n >\n <div\n class=\"shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col grow overflow-hidden\">\n <span\n class=\"shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organization.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 grow shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organization.description }}\n </p>\n <div class=\"shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organization.recordCount\n }}</span>\n <span translate [translateParams]=\"{ count: organization.recordCount }\"\n >record.metadata.publications</span\n >\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33355
33878
  }
33356
33879
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
33357
33880
  type: Component,
33358
- args: [{ selector: 'gn-ui-organisation-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col grow overflow-hidden\">\n <span\n class=\"shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 grow shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"] }]
33359
- }], propDecorators: { organisation: [{
33881
+ args: [{ selector: 'gn-ui-organisation-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organization.name\"\n >\n <div\n class=\"shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col grow overflow-hidden\">\n <span\n class=\"shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organization.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 grow shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organization.description }}\n </p>\n <div class=\"shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organization.recordCount\n }}</span>\n <span translate [translateParams]=\"{ count: organization.recordCount }\"\n >record.metadata.publications</span\n >\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"] }]
33882
+ }], propDecorators: { organization: [{
33360
33883
  type: Input
33361
33884
  }], organisationUrl: [{
33362
33885
  type: Input
@@ -33468,7 +33991,8 @@ class UiCatalogModule {
33468
33991
  LanguageSwitcherComponent,
33469
33992
  OrganisationsResultComponent], imports: [CommonModule, i1$1.TranslateModule, UiElementsModule,
33470
33993
  UiInputsModule,
33471
- MatIconModule], exports: [CatalogTitleComponent,
33994
+ MatIconModule,
33995
+ RouterLink], exports: [CatalogTitleComponent,
33472
33996
  OrganisationPreviewComponent,
33473
33997
  OrganisationsFilterComponent,
33474
33998
  LanguageSwitcherComponent,
@@ -33495,6 +34019,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33495
34019
  UiElementsModule,
33496
34020
  UiInputsModule,
33497
34021
  MatIconModule,
34022
+ RouterLink,
33498
34023
  ],
33499
34024
  exports: [
33500
34025
  CatalogTitleComponent,
@@ -33542,6 +34067,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33542
34067
  type: Input
33543
34068
  }] } });
33544
34069
 
34070
+ // expects the replacement key ${name}
34071
+ const ORGANIZATION_PAGE_URL_TOKEN = new InjectionToken('organization-page-url-token');
34072
+
33545
34073
  class OrganisationsComponent {
33546
34074
  constructor(organisationsService, urlTemplate) {
33547
34075
  this.organisationsService = organisationsService;
@@ -33613,17 +34141,17 @@ class OrganisationsComponent {
33613
34141
  return null;
33614
34142
  return this.urlTemplate.replace('${name}', organisation.name);
33615
34143
  }
33616
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationsComponent, deps: [{ token: OrganizationsServiceInterface }, { token: ORGANIZATION_URL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
33617
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OrganisationsComponent, selector: "gn-ui-organisations", inputs: { itemsOnPage: "itemsOnPage" }, outputs: { orgSelect: "orgSelect" }, ngImport: i0, template: "<gn-ui-organisations-filter\n (sortBy)=\"setSortBy($event)\"\n (filterBy)=\"setFilterBy($event)\"\n></gn-ui-organisations-filter>\n<div class=\"mt-6 rounded-lg text-gray-800 p-4 bg-slate-100\">\n <gn-ui-organisations-result\n *ngIf=\"organisationsTotal$ | async\"\n [hits]=\"organisationResults\"\n [total]=\"organisationsTotal$ | async\"\n ></gn-ui-organisations-result>\n</div>\n<div\n class=\"grid grid-cols-1 mt-6 gap-x-6 gap-y-8 sm:grid-cols-2 lg:grid-cols-3\"\n>\n <gn-ui-content-ghost\n class=\"h-[300px]\"\n ghostClass=\"h-full mb-36\"\n *ngFor=\"let organisation of organisations$ | async; trackBy: trackByIndex\"\n [showContent]=\"!!organisation.name\"\n >\n <gn-ui-organisation-preview\n [organisation]=\"organisation\"\n [organisationUrl]=\"getOrganisationUrl(organisation)\"\n (clickedOrganisation)=\"orgSelect.emit($event)\"\n ></gn-ui-organisation-preview>\n </gn-ui-content-ghost>\n</div>\n<div class=\"py-20\">\n <gn-ui-pagination\n [currentPage]=\"currentPage$ | async\"\n [nPages]=\"totalPages\"\n (newCurrentPageEvent)=\"setCurrentPage($event)\"\n ></gn-ui-pagination>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: ["organisation", "organisationUrl"], outputs: ["clickedOrganisation"] }, { kind: "component", type: OrganisationsFilterComponent, selector: "gn-ui-organisations-filter", outputs: ["sortBy", "filterBy"] }, { kind: "component", type: OrganisationsResultComponent, selector: "gn-ui-organisations-result", inputs: ["hits", "total"] }, { 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: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: PaginationComponent, selector: "gn-ui-pagination", inputs: ["currentPage", "nPages", "hideButton"], outputs: ["newCurrentPageEvent"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34144
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationsComponent, deps: [{ token: OrganizationsServiceInterface }, { token: ORGANIZATION_PAGE_URL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
34145
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: OrganisationsComponent, selector: "gn-ui-organisations", inputs: { itemsOnPage: "itemsOnPage" }, outputs: { orgSelect: "orgSelect" }, ngImport: i0, template: "<gn-ui-organisations-filter\n (sortBy)=\"setSortBy($event)\"\n (filterBy)=\"setFilterBy($event)\"\n></gn-ui-organisations-filter>\n<div class=\"mt-6 rounded-lg text-gray-800 p-4 bg-slate-100\">\n <gn-ui-organisations-result\n *ngIf=\"organisationsTotal$ | async\"\n [hits]=\"organisationResults\"\n [total]=\"organisationsTotal$ | async\"\n ></gn-ui-organisations-result>\n</div>\n<div\n class=\"grid grid-cols-1 mt-6 gap-x-6 gap-y-8 sm:grid-cols-2 lg:grid-cols-3\"\n>\n <gn-ui-content-ghost\n class=\"h-[300px]\"\n ghostClass=\"h-full mb-36\"\n *ngFor=\"let organisation of organisations$ | async; trackBy: trackByIndex\"\n [showContent]=\"!!organisation.name\"\n >\n <gn-ui-organisation-preview\n [organization]=\"organisation\"\n [organisationUrl]=\"getOrganisationUrl(organisation)\"\n (clickedOrganisation)=\"orgSelect.emit($event)\"\n ></gn-ui-organisation-preview>\n </gn-ui-content-ghost>\n</div>\n<div class=\"py-20\">\n <gn-ui-pagination\n [currentPage]=\"currentPage$ | async\"\n [nPages]=\"totalPages\"\n (newCurrentPageEvent)=\"setCurrentPage($event)\"\n ></gn-ui-pagination>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: ["organization", "organisationUrl"], outputs: ["clickedOrganisation"] }, { kind: "component", type: OrganisationsFilterComponent, selector: "gn-ui-organisations-filter", outputs: ["sortBy", "filterBy"] }, { kind: "component", type: OrganisationsResultComponent, selector: "gn-ui-organisations-result", inputs: ["hits", "total"] }, { 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: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: PaginationComponent, selector: "gn-ui-pagination", inputs: ["currentPage", "nPages", "hideButton"], outputs: ["newCurrentPageEvent"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33618
34146
  }
33619
34147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationsComponent, decorators: [{
33620
34148
  type: Component,
33621
- args: [{ selector: 'gn-ui-organisations', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-organisations-filter\n (sortBy)=\"setSortBy($event)\"\n (filterBy)=\"setFilterBy($event)\"\n></gn-ui-organisations-filter>\n<div class=\"mt-6 rounded-lg text-gray-800 p-4 bg-slate-100\">\n <gn-ui-organisations-result\n *ngIf=\"organisationsTotal$ | async\"\n [hits]=\"organisationResults\"\n [total]=\"organisationsTotal$ | async\"\n ></gn-ui-organisations-result>\n</div>\n<div\n class=\"grid grid-cols-1 mt-6 gap-x-6 gap-y-8 sm:grid-cols-2 lg:grid-cols-3\"\n>\n <gn-ui-content-ghost\n class=\"h-[300px]\"\n ghostClass=\"h-full mb-36\"\n *ngFor=\"let organisation of organisations$ | async; trackBy: trackByIndex\"\n [showContent]=\"!!organisation.name\"\n >\n <gn-ui-organisation-preview\n [organisation]=\"organisation\"\n [organisationUrl]=\"getOrganisationUrl(organisation)\"\n (clickedOrganisation)=\"orgSelect.emit($event)\"\n ></gn-ui-organisation-preview>\n </gn-ui-content-ghost>\n</div>\n<div class=\"py-20\">\n <gn-ui-pagination\n [currentPage]=\"currentPage$ | async\"\n [nPages]=\"totalPages\"\n (newCurrentPageEvent)=\"setCurrentPage($event)\"\n ></gn-ui-pagination>\n</div>\n" }]
34149
+ args: [{ selector: 'gn-ui-organisations', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-organisations-filter\n (sortBy)=\"setSortBy($event)\"\n (filterBy)=\"setFilterBy($event)\"\n></gn-ui-organisations-filter>\n<div class=\"mt-6 rounded-lg text-gray-800 p-4 bg-slate-100\">\n <gn-ui-organisations-result\n *ngIf=\"organisationsTotal$ | async\"\n [hits]=\"organisationResults\"\n [total]=\"organisationsTotal$ | async\"\n ></gn-ui-organisations-result>\n</div>\n<div\n class=\"grid grid-cols-1 mt-6 gap-x-6 gap-y-8 sm:grid-cols-2 lg:grid-cols-3\"\n>\n <gn-ui-content-ghost\n class=\"h-[300px]\"\n ghostClass=\"h-full mb-36\"\n *ngFor=\"let organisation of organisations$ | async; trackBy: trackByIndex\"\n [showContent]=\"!!organisation.name\"\n >\n <gn-ui-organisation-preview\n [organization]=\"organisation\"\n [organisationUrl]=\"getOrganisationUrl(organisation)\"\n (clickedOrganisation)=\"orgSelect.emit($event)\"\n ></gn-ui-organisation-preview>\n </gn-ui-content-ghost>\n</div>\n<div class=\"py-20\">\n <gn-ui-pagination\n [currentPage]=\"currentPage$ | async\"\n [nPages]=\"totalPages\"\n (newCurrentPageEvent)=\"setCurrentPage($event)\"\n ></gn-ui-pagination>\n</div>\n" }]
33622
34150
  }], ctorParameters: function () { return [{ type: OrganizationsServiceInterface }, { type: undefined, decorators: [{
33623
34151
  type: Optional
33624
34152
  }, {
33625
34153
  type: Inject,
33626
- args: [ORGANIZATION_URL_TOKEN]
34154
+ args: [ORGANIZATION_PAGE_URL_TOKEN]
33627
34155
  }] }]; }, propDecorators: { itemsOnPage: [{
33628
34156
  type: Input
33629
34157
  }], orgSelect: [{
@@ -33702,9 +34230,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33702
34230
  class RecordsService {
33703
34231
  constructor(recordsRepository) {
33704
34232
  this.recordsRepository = recordsRepository;
33705
- this.recordsCount$ = this.recordsRepository
33706
- .getMatchesCount({})
33707
- .pipe(shareReplay(1), catchError(() => of(0)));
34233
+ this.recordsCount$ = of(true).pipe(switchMap(() => this.recordsRepository.getMatchesCount({})), shareReplay(1));
33708
34234
  }
33709
34235
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, deps: [{ token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
33710
34236
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, providedIn: 'root' }); }
@@ -33754,37 +34280,54 @@ const GN_UI_VERSION = new InjectionToken('gnUiVersion');
33754
34280
 
33755
34281
  const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
33756
34282
  class DataViewPermalinkComponent {
34283
+ set viewType(value) {
34284
+ this.viewType$.next(value);
34285
+ }
33757
34286
  constructor(config, wcEmbedderBaseUrl, version, facade) {
33758
34287
  this.config = config;
33759
34288
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33760
34289
  this.version = version;
33761
34290
  this.facade = facade;
34291
+ this.viewType$ = new BehaviorSubject('map');
33762
34292
  this.permalinkUrl$ = combineLatest([
34293
+ this.viewType$,
33763
34294
  this.facade.chartConfig$,
33764
34295
  this.facade.metadata$,
33765
- ]).pipe(map$2(([config, metadata]) => {
33766
- if (config) {
33767
- const { aggregation, xProperty, yProperty, chartType } = config;
33768
- const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
33769
- url.searchParams.set('v', `${this.version}`);
33770
- url.searchParams.append('e', `gn-dataset-view-chart`);
33771
- url.searchParams.append('a', `api-url=${this.config.basePath}`);
33772
- url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
33773
- url.searchParams.append('a', `primary-color=#0f4395`);
33774
- url.searchParams.append('a', `secondary-color=#8bc832`);
33775
- url.searchParams.append('a', `main-color=#555`);
33776
- url.searchParams.append('a', `background-color=#fdfbff`);
33777
- url.searchParams.append('a', `aggregation=${aggregation}`);
33778
- url.searchParams.append('a', `x-property=${xProperty}`);
33779
- url.searchParams.append('a', `y-property=${yProperty}`);
33780
- url.searchParams.append('a', `chart-type=${chartType}`);
33781
- return url.toString();
34296
+ ]).pipe(map$2(([viewType, config, metadata]) => {
34297
+ const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
34298
+ url.searchParams.set('v', `${this.version}`);
34299
+ if (viewType === 'chart') {
34300
+ if (config) {
34301
+ const { aggregation, xProperty, yProperty, chartType } = config;
34302
+ url.searchParams.append('e', `gn-dataset-view-chart`);
34303
+ url.searchParams.append('a', `aggregation=${aggregation}`);
34304
+ url.searchParams.append('a', `x-property=${xProperty}`);
34305
+ url.searchParams.append('a', `y-property=${yProperty}`);
34306
+ url.searchParams.append('a', `chart-type=${chartType}`);
34307
+ }
34308
+ else {
34309
+ return '';
34310
+ }
33782
34311
  }
33783
- return '';
34312
+ else if (viewType === 'table') {
34313
+ // table
34314
+ url.searchParams.append('e', `gn-dataset-view-table`);
34315
+ }
34316
+ else {
34317
+ // map
34318
+ url.searchParams.append('e', `gn-dataset-view-map`);
34319
+ }
34320
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
34321
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
34322
+ url.searchParams.append('a', `primary-color=#0f4395`);
34323
+ url.searchParams.append('a', `secondary-color=#8bc832`);
34324
+ url.searchParams.append('a', `main-color=#555`);
34325
+ url.searchParams.append('a', `background-color=#fdfbff`);
34326
+ return url.toString();
33784
34327
  }));
33785
34328
  }
33786
34329
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
33787
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34330
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33788
34331
  }
33789
34332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
33790
34333
  type: Component,
@@ -33800,37 +34343,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33800
34343
  }] }, { type: undefined, decorators: [{
33801
34344
  type: Inject,
33802
34345
  args: [GN_UI_VERSION]
33803
- }] }, { type: MdViewFacade }]; } });
34346
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34347
+ type: Input
34348
+ }] } });
33804
34349
 
33805
34350
  class DataViewWebComponentComponent {
34351
+ set viewType(value) {
34352
+ this.viewType$.next(value);
34353
+ }
33806
34354
  constructor(config, version, facade) {
33807
34355
  this.config = config;
33808
34356
  this.version = version;
33809
34357
  this.facade = facade;
33810
- this.webComponentHtml$ = combineLatest(this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([config, metadata]) => {
33811
- if (config) {
33812
- const { aggregation, xProperty, yProperty, chartType } = config;
34358
+ this.viewType$ = new BehaviorSubject('map');
34359
+ this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
34360
+ if (viewType === 'chart') {
34361
+ if (config) {
34362
+ const { aggregation, xProperty, yProperty, chartType } = config;
34363
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34364
+ <gn-dataset-view-chart
34365
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34366
+ dataset-id="${metadata.uniqueIdentifier}"
34367
+ aggregation="${aggregation}"
34368
+ x-property="${xProperty}"
34369
+ y-property="${yProperty}"
34370
+ chart-type="${chartType}"
34371
+ primary-color="#0f4395"
34372
+ secondary-color="#8bc832"
34373
+ main-color="#555"
34374
+ background-color="#fdfbff"
34375
+ main-font="'Inter', sans-serif"
34376
+ title-font="'DM Serif Display', serif"
34377
+ ></gn-dataset-view-chart>`;
34378
+ }
34379
+ return '';
34380
+ }
34381
+ else if (viewType === 'table') {
33813
34382
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
33814
- <gn-dataset-view-chart
34383
+ <gn-dataset-view-table
34384
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34385
+ dataset-id="${metadata.uniqueIdentifier}"
34386
+ primary-color="#0f4395"
34387
+ secondary-color="#8bc832"
34388
+ main-color="#555"
34389
+ background-color="#fdfbff"
34390
+ main-font="'Inter', sans-serif"
34391
+ title-font="'DM Serif Display', serif"
34392
+ ></gn-dataset-view-table>`;
34393
+ }
34394
+ else {
34395
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34396
+ <gn-dataset-view-map
33815
34397
  api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
33816
34398
  dataset-id="${metadata.uniqueIdentifier}"
33817
- aggregation="${aggregation}"
33818
- x-property="${xProperty}"
33819
- y-property="${yProperty}"
33820
- chart-type="${chartType}"
33821
34399
  primary-color="#0f4395"
33822
34400
  secondary-color="#8bc832"
33823
34401
  main-color="#555"
33824
34402
  background-color="#fdfbff"
33825
34403
  main-font="'Inter', sans-serif"
33826
34404
  title-font="'DM Serif Display', serif"
33827
- ></gn-dataset-view-chart>`;
34405
+ ></gn-dataset-view-map>`;
33828
34406
  }
33829
- return '';
33830
34407
  }));
33831
34408
  }
33832
34409
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
33833
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34410
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33834
34411
  }
33835
34412
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
33836
34413
  type: Component,
@@ -33841,24 +34418,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33841
34418
  }] }, { type: undefined, decorators: [{
33842
34419
  type: Inject,
33843
34420
  args: [GN_UI_VERSION]
33844
- }] }, { type: MdViewFacade }]; } });
34421
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34422
+ type: Input
34423
+ }] } });
33845
34424
 
33846
34425
  class DataViewShareComponent {
34426
+ set viewType(value) {
34427
+ this._viewType = value;
34428
+ }
34429
+ get viewType() {
34430
+ return this._viewType;
34431
+ }
33847
34432
  constructor(wcEmbedderBaseUrl) {
33848
34433
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33849
34434
  }
33850
34435
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, deps: [{ token: WEB_COMPONENT_EMBEDDER_URL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
33851
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$5.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink" }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", inputs: { viewType: "viewType" }, ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: ["viewType"] }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: ["viewType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33852
34437
  }
33853
34438
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, decorators: [{
33854
34439
  type: Component,
33855
- args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
34440
+ args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
33856
34441
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
33857
34442
  type: Optional
33858
34443
  }, {
33859
34444
  type: Inject,
33860
34445
  args: [WEB_COMPONENT_EMBEDDER_URL]
33861
- }] }]; } });
34446
+ }] }]; }, propDecorators: { viewType: [{
34447
+ type: Input
34448
+ }] } });
33862
34449
 
33863
34450
  class FeatureRecordModule {
33864
34451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeatureRecordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -33948,75 +34535,159 @@ const saveRecord = createAction('[Editor] Save record');
33948
34535
  const saveRecordSuccess = createAction('[Editor] Save record success');
33949
34536
  const saveRecordFailure = createAction('[Editor] Save record failure', props());
33950
34537
  const draftSaveSuccess = createAction('[Editor] Draft save success');
34538
+ const setCurrentPage = createAction('[Editor] Set current page', props());
33951
34539
 
33952
- const DEFAULT_FIELDS = [
33953
- {
33954
- model: 'title',
33955
- formFieldConfig: {
33956
- labelKey: 'Metadata title',
33957
- type: 'text',
33958
- },
34540
+ /**
34541
+ * This file contains the configuration of the fields that will be displayed in the editor.
34542
+ * To add a new field, you need to create a new EditorField object in the fields part of this file.
34543
+ * Then add it to the corresponding section in the sections part of this file.
34544
+ * Finally, add the section to the corresponding page in the pages part of this file.
34545
+ */
34546
+ /************************************************************
34547
+ *************** FIELDS *****************
34548
+ ************************************************************
34549
+ */
34550
+ const RECORD_LICENSE_FIELD = {
34551
+ model: 'licenses',
34552
+ formFieldConfig: {
34553
+ labelKey: marker('editor.record.form.field.license'),
33959
34554
  },
33960
- {
33961
- model: 'abstract',
33962
- formFieldConfig: {
33963
- labelKey: 'Abstract',
33964
- type: 'rich',
33965
- },
34555
+ };
34556
+ const RECORD_KEYWORDS_FIELD = {
34557
+ model: 'keywords',
34558
+ formFieldConfig: {
34559
+ labelKey: marker('editor.record.form.field.keywords'),
33966
34560
  },
33967
- {
33968
- model: 'uniqueIdentifier',
33969
- formFieldConfig: {
33970
- labelKey: 'Unique identifier',
33971
- type: 'text',
33972
- locked: true,
33973
- },
34561
+ };
34562
+ const RECORD_UNIQUE_IDENTIFIER_FIELD = {
34563
+ model: 'uniqueIdentifier',
34564
+ formFieldConfig: {
34565
+ labelKey: marker('editor.record.form.field.uniqueIdentifier'),
34566
+ locked: true,
33974
34567
  },
33975
- {
33976
- model: 'recordUpdated',
33977
- formFieldConfig: {
33978
- labelKey: 'Record Updated',
33979
- type: 'text',
33980
- locked: true,
33981
- },
33982
- onSaveProcess: '${dateNow()}',
34568
+ };
34569
+ const RECORD_RESOURCE_UPDATED_FIELD = {
34570
+ model: 'resourceUpdated',
34571
+ formFieldConfig: {
34572
+ labelKey: marker('editor.record.form.field.resourceUpdated'),
33983
34573
  },
33984
- {
33985
- model: 'licenses',
33986
- formFieldConfig: {
33987
- labelKey: marker('editor.record.form.license'),
33988
- type: 'list',
33989
- },
34574
+ };
34575
+ const RECORD_UPDATED_FIELD = {
34576
+ model: 'recordUpdated',
34577
+ formFieldConfig: {
34578
+ labelKey: marker('editor.record.form.field.recordUpdated'),
34579
+ locked: true,
33990
34580
  },
33991
- {
33992
- model: 'resourceUpdated',
33993
- formFieldConfig: {
33994
- labelKey: marker('editor.record.form.resourceUpdated'),
33995
- type: 'date',
33996
- },
34581
+ onSaveProcess: '${dateNow()}',
34582
+ };
34583
+ const RECORD_UPDATE_FREQUENCY_FIELD = {
34584
+ model: 'updateFrequency',
34585
+ formFieldConfig: {
34586
+ labelKey: marker('editor.record.form.field.updateFrequency'),
33997
34587
  },
33998
- {
33999
- model: 'updateFrequency',
34000
- formFieldConfig: {
34001
- labelKey: marker('editor.record.form.updateFrequency'),
34002
- type: 'text',
34003
- },
34588
+ };
34589
+ const RECORD_TEMPORAL_EXTENTS_FIELD = {
34590
+ model: 'temporalExtents',
34591
+ formFieldConfig: {
34592
+ labelKey: marker('editor.record.form.field.temporalExtents'),
34004
34593
  },
34005
- {
34006
- model: 'temporalExtents',
34007
- formFieldConfig: {
34008
- labelKey: marker('editor.record.form.temporalExtents'),
34009
- type: 'list',
34010
- },
34594
+ };
34595
+ const RECORD_TITLE_FIELD = {
34596
+ model: 'title',
34597
+ formFieldConfig: {
34598
+ labelKey: marker('editor.record.form.field.title'),
34011
34599
  },
34012
- {
34013
- model: 'keywords',
34014
- formFieldConfig: {
34015
- labelKey: marker('editor.record.form.keywords'),
34016
- type: 'list',
34017
- },
34600
+ };
34601
+ const RECORD_ABSTRACT_FIELD = {
34602
+ model: 'abstract',
34603
+ formFieldConfig: {
34604
+ labelKey: marker('editor.record.form.field.abstract'),
34018
34605
  },
34019
- ];
34606
+ };
34607
+ /************************************************************
34608
+ *************** SECTIONS *****************
34609
+ ************************************************************
34610
+ */
34611
+ const TITLE_SECTION = {
34612
+ hidden: false,
34613
+ fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD],
34614
+ };
34615
+ const ABOUT_SECTION = {
34616
+ labelKey: marker('editor.record.form.section.about.label'),
34617
+ descriptionKey: marker('editor.record.form.section.about.description'),
34618
+ hidden: false,
34619
+ fields: [
34620
+ RECORD_UNIQUE_IDENTIFIER_FIELD,
34621
+ RECORD_RESOURCE_UPDATED_FIELD,
34622
+ RECORD_UPDATED_FIELD,
34623
+ RECORD_UPDATE_FREQUENCY_FIELD,
34624
+ RECORD_TEMPORAL_EXTENTS_FIELD,
34625
+ ],
34626
+ };
34627
+ const GEOGRAPHICAL_COVERAGE_SECTION = {
34628
+ labelKey: marker('editor.record.form.section.geographicalCoverage.label'),
34629
+ hidden: false,
34630
+ fields: [],
34631
+ };
34632
+ const ASSOCIATED_RESOURCES_SECTION = {
34633
+ labelKey: marker('editor.record.form.section.associatedResources.label'),
34634
+ descriptionKey: marker('editor.record.form.section.associatedResources.description'),
34635
+ hidden: false,
34636
+ fields: [],
34637
+ };
34638
+ const ANNEXES_SECTION = {
34639
+ labelKey: marker('editor.record.form.section.annexes.label'),
34640
+ hidden: false,
34641
+ fields: [],
34642
+ };
34643
+ const CLASSIFICATION_SECTION = {
34644
+ labelKey: marker('editor.record.form.section.classification.label'),
34645
+ descriptionKey: marker('editor.record.form.section.classification.description'),
34646
+ hidden: false,
34647
+ fields: [RECORD_KEYWORDS_FIELD],
34648
+ };
34649
+ const USE_AND_ACCESS_CONDITIONS_SECTION = {
34650
+ labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
34651
+ hidden: false,
34652
+ fields: [RECORD_LICENSE_FIELD],
34653
+ };
34654
+ const DATA_MANAGERS_SECTION = {
34655
+ labelKey: marker('editor.record.form.section.dataManagers.label'),
34656
+ descriptionKey: marker('editor.record.form.section.dataManagers.description'),
34657
+ hidden: false,
34658
+ fields: [],
34659
+ };
34660
+ const DATA_POINT_OF_CONTACT_SECTION = {
34661
+ labelKey: marker('editor.record.form.section.dataPointOfContact.label'),
34662
+ descriptionKey: marker('editor.record.form.section.dataPointOfContact.description'),
34663
+ hidden: false,
34664
+ fields: [],
34665
+ };
34666
+ /************************************************************
34667
+ *************** PAGES *****************
34668
+ ************************************************************
34669
+ */
34670
+ const DEFAULT_CONFIGURATION = {
34671
+ pages: [
34672
+ {
34673
+ labelKey: marker('editor.record.form.page.description'),
34674
+ sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
34675
+ },
34676
+ {
34677
+ labelKey: marker('editor.record.form.page.ressources'),
34678
+ sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
34679
+ },
34680
+ {
34681
+ labelKey: marker('editor.record.form.page.accessAndContact'),
34682
+ sections: [
34683
+ CLASSIFICATION_SECTION,
34684
+ USE_AND_ACCESS_CONDITIONS_SECTION,
34685
+ DATA_MANAGERS_SECTION,
34686
+ DATA_POINT_OF_CONTACT_SECTION,
34687
+ ],
34688
+ },
34689
+ ],
34690
+ };
34020
34691
 
34021
34692
  const EDITOR_FEATURE_KEY = 'editor';
34022
34693
  const initialEditorState = {
@@ -34026,7 +34697,8 @@ const initialEditorState = {
34026
34697
  saving: false,
34027
34698
  saveError: null,
34028
34699
  changedSinceSave: false,
34029
- fieldsConfig: DEFAULT_FIELDS,
34700
+ editorConfig: DEFAULT_CONFIGURATION,
34701
+ currentPage: 0,
34030
34702
  };
34031
34703
  const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
34032
34704
  ...state,
@@ -34056,6 +34728,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
34056
34728
  })), on(markRecordAsChanged, (state) => ({
34057
34729
  ...state,
34058
34730
  changedSinceSave: true,
34731
+ })), on(setCurrentPage, (state, { page }) => ({
34732
+ ...state,
34733
+ currentPage: page,
34059
34734
  })));
34060
34735
  function editorReducer(state, action) {
34061
34736
  return reducer(state, action);
@@ -34068,11 +34743,21 @@ const selectRecordSaving = createSelector(selectEditorState, (state) => state.sa
34068
34743
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
34069
34744
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
34070
34745
  const selectRecordAlreadySavedOnce = createSelector(selectEditorState, (state) => state.alreadySavedOnce);
34071
- const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
34072
- const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
34073
- config: fieldConfig,
34074
- value: state.record?.[fieldConfig.model] ?? null,
34075
- })));
34746
+ const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
34747
+ const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
34748
+ const selectRecordSections = createSelector(selectEditorState, (state) => {
34749
+ const currentPage = state.editorConfig.pages[state.currentPage];
34750
+ if (!currentPage) {
34751
+ return [];
34752
+ }
34753
+ return currentPage.sections.map((section) => ({
34754
+ ...section,
34755
+ fieldsWithValues: section.fields.map((fieldConfig) => ({
34756
+ config: fieldConfig,
34757
+ value: state.record?.[fieldConfig.model] ?? null,
34758
+ })),
34759
+ }));
34760
+ });
34076
34761
 
34077
34762
  class EditorFacade {
34078
34763
  constructor() {
@@ -34085,8 +34770,10 @@ class EditorFacade {
34085
34770
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
34086
34771
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
34087
34772
  this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
34088
- this.recordFields$ = this.store.pipe(select(selectRecordFields));
34773
+ this.currentSections$ = this.store.pipe(select(selectRecordSections));
34089
34774
  this.draftSaveSuccess$ = this.actions$.pipe(ofType(draftSaveSuccess));
34775
+ this.currentPage$ = this.store.pipe(select(selectCurrentPage));
34776
+ this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
34090
34777
  }
34091
34778
  openRecord(record, recordSource, alreadySavedOnce) {
34092
34779
  this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
@@ -34097,6 +34784,9 @@ class EditorFacade {
34097
34784
  updateRecordField(field, value) {
34098
34785
  this.store.dispatch(updateRecordField({ field, value }));
34099
34786
  }
34787
+ setCurrentPage(page) {
34788
+ this.store.dispatch(setCurrentPage({ page }));
34789
+ }
34100
34790
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34101
34791
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade }); }
34102
34792
  }
@@ -34124,12 +34814,13 @@ class EditorService {
34124
34814
  // returns the record as it was when saved, alongside its source
34125
34815
  saveRecord(record, fieldsConfig, generateNewUniqueIdentifier = false) {
34126
34816
  const savedRecord = { ...record };
34817
+ const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
34127
34818
  // run onSave processes
34128
- for (const field of fieldsConfig) {
34819
+ for (const field of fields) {
34129
34820
  if (field.onSaveProcess && field.model) {
34130
34821
  const evaluator = evaluate(field.onSaveProcess);
34131
34822
  savedRecord[field.model] = evaluator({
34132
- config: field,
34823
+ model: field.model,
34133
34824
  value: record[field.model],
34134
34825
  });
34135
34826
  }
@@ -34166,7 +34857,7 @@ class EditorEffects {
34166
34857
  this.editorService = inject(EditorService);
34167
34858
  this.recordsRepository = inject(RecordsRepositoryInterface);
34168
34859
  this.store = inject(Store);
34169
- this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34860
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectEditorConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34170
34861
  .saveRecord(record, fieldsConfig, !alreadySavedOnce)
34171
34862
  .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
34172
34863
  record,
@@ -34603,7 +35294,9 @@ class FormFieldKeywordsComponent {
34603
35294
  return `${item.title} (${item.value.thesaurus?.name})`;
34604
35295
  };
34605
35296
  this.autoCompleteAction = (query) => {
34606
- return this.platformService.searchKeywords(query).pipe(map$2((keywords) => keywords.map((keyword) => {
35297
+ return this.platformService
35298
+ .searchKeywords(query, ['temporal', 'theme', 'other'])
35299
+ .pipe(map$2((keywords) => keywords.map((keyword) => {
34607
35300
  return { title: keyword.label, value: keyword };
34608
35301
  })));
34609
35302
  };
@@ -35117,7 +35810,7 @@ class FormFieldComponent {
35117
35810
  return this.model === 'title' || this.model === 'abstract';
35118
35811
  }
35119
35812
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35120
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35813
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35121
35814
  }
35122
35815
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
35123
35816
  type: Component,
@@ -35140,7 +35833,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35140
35833
  FormFieldArrayComponent,
35141
35834
  FormFieldKeywordsComponent,
35142
35835
  TranslateModule,
35143
- ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35836
+ ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35144
35837
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
35145
35838
  type: Input
35146
35839
  }], config: [{
@@ -35157,28 +35850,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35157
35850
  class RecordFormComponent {
35158
35851
  constructor(facade) {
35159
35852
  this.facade = facade;
35160
- this.fields$ = this.facade.recordFields$;
35161
35853
  }
35162
- handleFieldValueChange(field, newValue) {
35163
- if (!field.config.model) {
35854
+ handleFieldValueChange(model, newValue) {
35855
+ if (!model) {
35164
35856
  return;
35165
35857
  }
35166
- this.facade.updateRecordField(field.config.model, newValue);
35858
+ this.facade.updateRecordField(model, newValue);
35167
35859
  }
35168
35860
  fieldTracker(index, field) {
35169
35861
  return field.config.model;
35170
35862
  }
35863
+ sectionTracker(index, section) {
35864
+ return section.labelKey;
35865
+ }
35171
35866
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
35172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35867
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35173
35868
  }
35174
35869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, decorators: [{
35175
35870
  type: Component,
35176
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
35871
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n" }]
35177
35872
  }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
35178
35873
 
35179
35874
  const ROUTER_STATE_KEY = 'router';
35180
35875
  const ROUTER_ROUTE_SEARCH = 'search';
35181
35876
  const ROUTER_ROUTE_DATASET = 'dataset';
35877
+ const ROUTER_ROUTE_ORGANIZATION = 'organization';
35182
35878
  var ROUTE_PARAMS;
35183
35879
  (function (ROUTE_PARAMS) {
35184
35880
  ROUTE_PARAMS["SORT"] = "_sort";
@@ -35210,11 +35906,18 @@ class RouterService {
35210
35906
  path: `${ROUTER_ROUTE_DATASET}/:metadataUuid`,
35211
35907
  component: this.routerConfig.recordRouteComponent,
35212
35908
  },
35909
+ {
35910
+ path: `${ROUTER_ROUTE_ORGANIZATION}/:name`,
35911
+ component: this.routerConfig.organizationRouteComponent,
35912
+ },
35213
35913
  ];
35214
35914
  }
35215
35915
  getSearchRoute() {
35216
35916
  return ROUTER_ROUTE_SEARCH;
35217
35917
  }
35918
+ getOrganizationPageRoute() {
35919
+ return ROUTER_ROUTE_ORGANIZATION;
35920
+ }
35218
35921
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$7.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
35219
35922
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterService, providedIn: 'root' }); }
35220
35923
  }
@@ -35261,6 +35964,13 @@ class RouterFacade {
35261
35964
  this.store.dispatch(setIncompleteMetadata({ incomplete: metadata }));
35262
35965
  });
35263
35966
  }
35967
+ goToOrganization(organizationName) {
35968
+ const path = `${this.routerService.getOrganizationPageRoute()}/${organizationName}`;
35969
+ this.go({
35970
+ path,
35971
+ queryParamsHandling: '',
35972
+ });
35973
+ }
35264
35974
  updateSearch(query) {
35265
35975
  this.go({
35266
35976
  path: this.routerService.getSearchRoute(),
@@ -35541,5 +36251,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35541
36251
  * Generated bundle index. Do not edit.
35542
36252
  */
35543
36253
 
35544
- 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_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_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, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectRecordSource, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
36254
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setCurrentPage, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
35545
36255
  //# sourceMappingURL=geonetwork-ui.mjs.map