geonetwork-ui 2.4.0-dev.e1bb65c4 → 2.4.0-dev.e6ae55aa

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 (268) 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/related-record-card/related-record-card.component.mjs +24 -5
  54. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -9
  55. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  56. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  57. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +71 -0
  58. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +1 -1
  59. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
  60. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
  61. package/esm2022/translations/de.json +88 -33
  62. package/esm2022/translations/en.json +59 -4
  63. package/esm2022/translations/es.json +59 -4
  64. package/esm2022/translations/fr.json +60 -5
  65. package/esm2022/translations/it.json +59 -4
  66. package/esm2022/translations/nl.json +59 -4
  67. package/esm2022/translations/pt.json +59 -4
  68. package/fesm2022/geonetwork-ui.mjs +942 -292
  69. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  70. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  71. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  72. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  73. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  74. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  75. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  76. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  77. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  78. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  79. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -1
  80. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  81. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +1 -0
  82. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  83. package/libs/common/domain/src/lib/platform.service.interface.d.ts +2 -1
  84. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  85. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
  86. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  87. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  88. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  89. package/libs/feature/catalog/src/index.d.ts +1 -0
  90. package/libs/feature/catalog/src/index.d.ts.map +1 -1
  91. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  92. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  93. package/libs/feature/catalog/src/lib/organization-url.token.d.ts +3 -0
  94. package/libs/feature/catalog/src/lib/organization-url.token.d.ts.map +1 -0
  95. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  96. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
  97. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  98. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
  99. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  100. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  101. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  102. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  103. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  104. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  105. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  106. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  107. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
  108. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  109. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
  110. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  111. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
  112. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  113. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  114. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  115. package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
  116. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  117. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
  118. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  119. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  120. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  121. package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
  122. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  123. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  124. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  125. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  126. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  127. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  128. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  129. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  130. package/libs/feature/router/src/lib/default/constants.d.ts +1 -0
  131. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  132. package/libs/feature/router/src/lib/default/router.config.d.ts +1 -0
  133. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  134. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -0
  135. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  136. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +1 -0
  137. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  138. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
  139. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  140. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -0
  141. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  142. package/libs/feature/search/src/lib/state/selectors.d.ts +1 -0
  143. package/libs/feature/search/src/lib/state/selectors.d.ts.map +1 -1
  144. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  145. package/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.d.ts +2 -2
  146. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +2 -1
  147. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  148. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -2
  149. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  150. package/libs/ui/elements/src/index.d.ts +0 -1
  151. package/libs/ui/elements/src/index.d.ts.map +1 -1
  152. package/libs/ui/elements/src/lib/error/error.component.d.ts +3 -1
  153. package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -1
  154. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +5 -1
  155. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  156. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +19 -19
  157. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  158. package/libs/ui/layout/src/index.d.ts +1 -0
  159. package/libs/ui/layout/src/index.d.ts.map +1 -1
  160. package/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.d.ts +2 -2
  161. package/libs/ui/layout/src/lib/max-lines/max-lines.component.d.ts.map +1 -0
  162. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  163. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
  164. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  165. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
  166. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  167. package/package.json +1 -1
  168. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  169. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  170. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  171. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
  172. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -0
  173. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +3 -1
  174. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +1 -1
  175. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +26 -15
  176. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +1 -0
  177. package/src/libs/common/domain/src/lib/platform.service.interface.ts +5 -1
  178. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
  179. package/src/libs/common/fixtures/src/index.ts +2 -0
  180. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  181. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  182. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +28 -0
  183. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
  184. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
  185. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  186. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  187. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  188. package/src/libs/feature/catalog/src/index.ts +1 -0
  189. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +0 -1
  190. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.html +1 -1
  191. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +2 -2
  192. package/src/libs/feature/catalog/src/lib/organization-url.token.ts +6 -0
  193. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  194. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
  195. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
  196. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
  197. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  198. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  199. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  200. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +8 -6
  201. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
  202. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
  203. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
  204. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
  205. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
  206. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  207. package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
  208. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
  209. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  210. package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
  211. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  212. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  213. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  214. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  215. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +6 -2
  216. package/src/libs/feature/router/src/lib/default/constants.ts +1 -0
  217. package/src/libs/feature/router/src/lib/default/router.config.ts +1 -0
  218. package/src/libs/feature/router/src/lib/default/router.service.ts +13 -1
  219. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +9 -1
  220. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  221. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
  222. package/src/libs/feature/search/src/lib/state/search.facade.ts +5 -0
  223. package/src/libs/feature/search/src/lib/state/selectors.ts +7 -0
  224. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  225. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +8 -6
  226. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  227. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +2 -0
  228. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +11 -3
  229. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +3 -7
  230. package/src/libs/ui/elements/src/index.ts +0 -1
  231. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  232. package/src/libs/ui/elements/src/lib/error/error.component.html +30 -6
  233. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -0
  234. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  235. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +22 -1
  236. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -4
  237. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  238. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  239. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  240. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  241. package/src/libs/ui/layout/src/index.ts +1 -0
  242. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.html +1 -0
  243. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.ts +9 -5
  244. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -1
  245. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  246. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
  247. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
  248. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
  249. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
  250. package/translations/de.json +88 -33
  251. package/translations/en.json +59 -4
  252. package/translations/es.json +59 -4
  253. package/translations/fr.json +60 -5
  254. package/translations/it.json +59 -4
  255. package/translations/nl.json +59 -4
  256. package/translations/pt.json +59 -4
  257. package/translations/sk.json +60 -5
  258. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  259. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  260. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +0 -69
  261. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  262. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  263. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  264. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  265. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +0 -1
  266. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  267. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
  268. /package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.css +0 -0
@@ -48,7 +48,7 @@ import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
48
48
  import VectorTileLayer from 'ol/layer/VectorTile';
49
49
  import OGCMapTile from 'ol/source/OGCMapTile.js';
50
50
  import ImageLayer from 'ol/layer/Image';
51
- import * as i2$5 from '@angular/material/tabs';
51
+ import * as i2$6 from '@angular/material/tabs';
52
52
  import { MatTabsModule } from '@angular/material/tabs';
53
53
  import * as i2$2 from '@angular/forms';
54
54
  import { FormsModule, ReactiveFormsModule, UntypedFormControl, FormArray, FormControl } from '@angular/forms';
@@ -81,6 +81,8 @@ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/c
81
81
  import EmblaCarousel from 'embla-carousel';
82
82
  import { formatDistance } from 'date-fns';
83
83
  import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
84
+ import * as i2$5 from '@angular/material/menu';
85
+ import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
84
86
  import * as i1$8 from '@ngrx/effects';
85
87
  import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
86
88
  import tippy from 'tippy.js';
@@ -91,7 +93,7 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
91
93
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
92
94
  import * as i4 from '@angular/cdk/scrolling';
93
95
  import { ScrollingModule } from '@angular/cdk/scrolling';
94
- import * as i2$6 from '@angular/material/sort';
96
+ import * as i2$7 from '@angular/material/sort';
95
97
  import { MatSort, MatSortModule } from '@angular/material/sort';
96
98
  import * as i1$9 from '@angular/material/table';
97
99
  import { MatTableModule } from '@angular/material/table';
@@ -2176,6 +2178,7 @@ const mapKeywords = (thesauri, language) => {
2176
2178
  keywords.push({
2177
2179
  label: selectTranslatedValue(keyword, language),
2178
2180
  type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
2181
+ ...(keyword.link && { key: keyword.link }),
2179
2182
  ...(thesaurus && { thesaurus }),
2180
2183
  });
2181
2184
  }
@@ -8641,11 +8644,7 @@ class RecordsApiService {
8641
8644
  headers = headers.set('Accept', httpHeaderAcceptSelected);
8642
8645
  }
8643
8646
  // to determine the Content-Type header
8644
- const consumes = [
8645
- 'application/xml',
8646
- 'application/json',
8647
- 'application/x-www-form-urlencoded',
8648
- ];
8647
+ const consumes = ['application/xml'];
8649
8648
  const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
8650
8649
  if (httpContentTypeSelected !== undefined) {
8651
8650
  headers = headers.set('Content-Type', httpContentTypeSelected);
@@ -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
  }));
@@ -26875,11 +27277,11 @@ class ApiCardComponent {
26875
27277
  }
26876
27278
  }
26877
27279
  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 }); }
27280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26879
27281
  }
26880
27282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ApiCardComponent, decorators: [{
26881
27283
  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" }]
27284
+ args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden cursor-default\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <gn-ui-copy-text-button\n [text]=\"link.url\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n (click)=\"openRecordApiFormPanel()\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n </div>\n</div>\n" }]
26883
27285
  }], propDecorators: { link: [{
26884
27286
  type: Input
26885
27287
  }], currentLink: [{
@@ -27024,17 +27426,19 @@ var ErrorType;
27024
27426
  ErrorType[ErrorType["RECEIVED_ERROR"] = 1] = "RECEIVED_ERROR";
27025
27427
  ErrorType[ErrorType["RECORD_NOT_FOUND"] = 2] = "RECORD_NOT_FOUND";
27026
27428
  ErrorType[ErrorType["DATASET_HAS_NO_LINK"] = 3] = "DATASET_HAS_NO_LINK";
27429
+ ErrorType[ErrorType["ORGANIZATION_HAS_NO_DATASET"] = 4] = "ORGANIZATION_HAS_NO_DATASET";
27430
+ ErrorType[ErrorType["ORGANIZATION_NOT_FOUND"] = 5] = "ORGANIZATION_NOT_FOUND";
27027
27431
  })(ErrorType || (ErrorType = {}));
27028
27432
  class ErrorComponent {
27029
27433
  constructor() {
27030
27434
  this.types = ErrorType;
27031
27435
  }
27032
27436
  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 }); }
27437
+ 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
27438
  }
27035
27439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ErrorComponent, decorators: [{
27036
27440
  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"] }]
27441
+ 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
27442
  }], propDecorators: { type: [{
27039
27443
  type: Input
27040
27444
  }], error: [{
@@ -27134,71 +27538,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27134
27538
  type: Output
27135
27539
  }] } });
27136
27540
 
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
27541
  class MetadataCatalogComponent {
27203
27542
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataCatalogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27204
27543
  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 +27612,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27273
27612
  args: ['contentDiv']
27274
27613
  }] } });
27275
27614
 
27615
+ class MaxLinesComponent {
27616
+ constructor(cdr) {
27617
+ this.cdr = cdr;
27618
+ this.maxLines = 6;
27619
+ this.isExpanded = false;
27620
+ this.maxHeight = '';
27621
+ this.showToggleButton = false;
27622
+ }
27623
+ ngAfterViewInit() {
27624
+ this.calculateMaxHeight();
27625
+ this.observer = new ResizeObserver((mutations) => {
27626
+ mutations.forEach(() => {
27627
+ this.calculateMaxHeight();
27628
+ });
27629
+ });
27630
+ this.observer.observe(this.container.nativeElement.children[0]);
27631
+ }
27632
+ toggleDisplay() {
27633
+ this.isExpanded = !this.isExpanded;
27634
+ this.calculateMaxHeight();
27635
+ }
27636
+ calculateMaxHeight() {
27637
+ const containerElement = this.container.nativeElement;
27638
+ const contentElement = containerElement.children[0];
27639
+ const contentHeight = contentElement.getBoundingClientRect().height;
27640
+ if (contentHeight) {
27641
+ if (contentHeight > this.maxLines * this.getLineHeight(contentElement)) {
27642
+ this.showToggleButton = true;
27643
+ this.maxHeight = this.isExpanded
27644
+ ? `${contentHeight}px`
27645
+ : `${this.maxLines * this.getLineHeight(contentElement)}px`;
27646
+ }
27647
+ else {
27648
+ this.showToggleButton = false;
27649
+ this.maxHeight = `${contentHeight}px`;
27650
+ }
27651
+ containerElement.setAttribute('style', `max-height: ${this.maxHeight}; overflow: hidden`);
27652
+ this.cdr.detectChanges();
27653
+ }
27654
+ }
27655
+ getLineHeight(element) {
27656
+ const computedStyle = window.getComputedStyle(element);
27657
+ const lineHeight = parseFloat(computedStyle.lineHeight);
27658
+ const fontSize = parseFloat(computedStyle.fontSize || '14');
27659
+ const result = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight; // Use a default if line height is not specified
27660
+ return result;
27661
+ }
27662
+ ngOnDestroy() {
27663
+ if (!this.observer)
27664
+ return;
27665
+ this.observer.unobserve(this.container.nativeElement.children[0]);
27666
+ }
27667
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27668
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MaxLinesComponent, isStandalone: true, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n data-cy=\"readMoreButton\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27669
+ }
27670
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaxLinesComponent, decorators: [{
27671
+ type: Component,
27672
+ args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, TranslateModule], template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n data-cy=\"readMoreButton\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
27673
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
27674
+ type: Input
27675
+ }], container: [{
27676
+ type: ViewChild,
27677
+ args: ['container']
27678
+ }] } });
27679
+
27276
27680
  /* eslint-disable @angular-eslint/directive-selector */
27277
27681
  class GnUiLinkifyDirective {
27278
27682
  constructor(el, renderer) {
@@ -27412,7 +27816,7 @@ class MetadataInfoComponent {
27412
27816
  this.keyword.emit(keyword);
27413
27817
  }
27414
27818
  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 }); }
27819
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27416
27820
  }
27417
27821
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetadataInfoComponent, decorators: [{
27418
27822
  type: Component,
@@ -27683,13 +28087,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
27683
28087
  }] } });
27684
28088
 
27685
28089
  class RelatedRecordCardComponent {
28090
+ constructor() {
28091
+ this.extraClass = '';
28092
+ this.baseClasses = [
28093
+ 'w-72',
28094
+ 'h-96',
28095
+ 'overflow-hidden',
28096
+ 'rounded-lg',
28097
+ 'bg-white',
28098
+ 'cursor-pointer',
28099
+ 'block',
28100
+ 'hover:-translate-y-2 ',
28101
+ 'duration-[180ms]',
28102
+ ].join(' ');
28103
+ }
28104
+ get classList() {
28105
+ return `${this.baseClasses} ${this.extraClass}`;
28106
+ }
27686
28107
  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 }); }
28108
+ 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
28109
  }
27689
28110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
27690
28111
  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: [{
28112
+ 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" }]
28113
+ }], ctorParameters: function () { return []; }, propDecorators: { record: [{
28114
+ type: Input
28115
+ }], extraClass: [{
27693
28116
  type: Input
27694
28117
  }] } });
27695
28118
 
@@ -28113,11 +28536,11 @@ class UserPreviewComponent {
28113
28536
  return (this.user.name + ' ' + this.user.surname).trim();
28114
28537
  }
28115
28538
  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 }); }
28539
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28117
28540
  }
28118
28541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, decorators: [{
28119
28542
  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" }]
28543
+ args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28121
28544
  }], propDecorators: { user: [{
28122
28545
  type: Input
28123
28546
  }], avatarPlaceholder: [{
@@ -28246,7 +28669,6 @@ class UiElementsModule {
28246
28669
  UserPreviewComponent,
28247
28670
  GnUiLinkifyDirective,
28248
28671
  PaginationButtonsComponent,
28249
- MaxLinesComponent,
28250
28672
  RecordApiFormComponent,
28251
28673
  UserFeedbackItemComponent,
28252
28674
  ImageOverlayPreviewComponent], imports: [CommonModule,
@@ -28261,7 +28683,8 @@ class UiElementsModule {
28261
28683
  MarkdownParserComponent,
28262
28684
  ThumbnailComponent,
28263
28685
  TimeSincePipe,
28264
- BadgeComponent], exports: [MetadataInfoComponent,
28686
+ BadgeComponent,
28687
+ MaxLinesComponent], exports: [MetadataInfoComponent,
28265
28688
  ContentGhostComponent,
28266
28689
  DownloadItemComponent,
28267
28690
  DownloadsListComponent,
@@ -28277,7 +28700,6 @@ class UiElementsModule {
28277
28700
  AvatarComponent,
28278
28701
  UserPreviewComponent,
28279
28702
  PaginationButtonsComponent,
28280
- MaxLinesComponent,
28281
28703
  RecordApiFormComponent,
28282
28704
  MarkdownParserComponent,
28283
28705
  UserFeedbackItemComponent,
@@ -28293,7 +28715,8 @@ class UiElementsModule {
28293
28715
  UiInputsModule,
28294
28716
  FormsModule,
28295
28717
  ThumbnailComponent,
28296
- BadgeComponent] }); }
28718
+ BadgeComponent,
28719
+ MaxLinesComponent] }); }
28297
28720
  }
28298
28721
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UiElementsModule, decorators: [{
28299
28722
  type: NgModule,
@@ -28314,6 +28737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28314
28737
  ThumbnailComponent,
28315
28738
  TimeSincePipe,
28316
28739
  BadgeComponent,
28740
+ MaxLinesComponent,
28317
28741
  ],
28318
28742
  declarations: [
28319
28743
  MetadataInfoComponent,
@@ -28332,7 +28756,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28332
28756
  UserPreviewComponent,
28333
28757
  GnUiLinkifyDirective,
28334
28758
  PaginationButtonsComponent,
28335
- MaxLinesComponent,
28336
28759
  RecordApiFormComponent,
28337
28760
  UserFeedbackItemComponent,
28338
28761
  ImageOverlayPreviewComponent,
@@ -28354,7 +28777,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28354
28777
  AvatarComponent,
28355
28778
  UserPreviewComponent,
28356
28779
  PaginationButtonsComponent,
28357
- MaxLinesComponent,
28358
28780
  RecordApiFormComponent,
28359
28781
  MarkdownParserComponent,
28360
28782
  UserFeedbackItemComponent,
@@ -28467,6 +28889,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28467
28889
  }]
28468
28890
  }] });
28469
28891
 
28892
+ class ActionMenuComponent {
28893
+ constructor() {
28894
+ this.duplicate = new EventEmitter();
28895
+ }
28896
+ openMenu() {
28897
+ this.trigger.openMenu();
28898
+ }
28899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28900
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", outputs: { duplicate: "duplicate" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2$5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28901
+ }
28902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, decorators: [{
28903
+ type: Component,
28904
+ args: [{ selector: 'gn-ui-action-menu', standalone: true, imports: [MatIconModule, ButtonComponent, MatMenuModule, TranslateModule], template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n" }]
28905
+ }], propDecorators: { duplicate: [{
28906
+ type: Output
28907
+ }], trigger: [{
28908
+ type: ViewChild,
28909
+ args: [MatMenuTrigger]
28910
+ }] } });
28911
+
28470
28912
  class ResultsTableComponent {
28471
28913
  constructor() {
28472
28914
  this.records = [];
@@ -28476,6 +28918,7 @@ class ResultsTableComponent {
28476
28918
  // emits the column (field) as well as the order
28477
28919
  this.sortByChange = new EventEmitter();
28478
28920
  this.recordClick = new EventEmitter();
28921
+ this.duplicateRecord = new EventEmitter();
28479
28922
  this.recordsSelectedChange = new EventEmitter();
28480
28923
  }
28481
28924
  dateToString(date) {
@@ -28510,6 +28953,9 @@ class ResultsTableComponent {
28510
28953
  handleRecordClick(item) {
28511
28954
  this.recordClick.emit(item);
28512
28955
  }
28956
+ handleDuplicate(item) {
28957
+ this.duplicateRecord.emit(item);
28958
+ }
28513
28959
  setSortBy(col, order) {
28514
28960
  this.sortByChange.emit([col, order]);
28515
28961
  }
@@ -28545,7 +28991,7 @@ class ResultsTableComponent {
28545
28991
  return !allSelected && someSelected;
28546
28992
  }
28547
28993
  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"] }] }); }
28994
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", outputs: ["duplicate"] }] }); }
28549
28995
  }
28550
28996
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, decorators: [{
28551
28997
  type: Component,
@@ -28557,7 +29003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28557
29003
  MatIconModule,
28558
29004
  TranslateModule,
28559
29005
  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" }]
29006
+ ActionMenuComponent,
29007
+ ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
28561
29008
  }], propDecorators: { records: [{
28562
29009
  type: Input
28563
29010
  }], selectedRecordsIdentifiers: [{
@@ -28570,6 +29017,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28570
29017
  type: Output
28571
29018
  }], recordClick: [{
28572
29019
  type: Output
29020
+ }], duplicateRecord: [{
29021
+ type: Output
28573
29022
  }], recordsSelectedChange: [{
28574
29023
  type: Output
28575
29024
  }] } });
@@ -29111,6 +29560,9 @@ const getSearchResults = createSelector(getSearchStateSearch, (state) => state.r
29111
29560
  const getSearchResultsLoading = createSelector(getSearchStateSearch, (state) => state.loadingResults);
29112
29561
  const getSearchResultsAggregations = createSelector(getSearchStateSearch, (state) => state.results.aggregations);
29113
29562
  const getSearchResultsHits = createSelector(getSearchStateSearch, (state) => state.results.count);
29563
+ const isBeginningOfResults = createSelector(getSearchStateSearch, (state) => {
29564
+ return state.params.currentPage === 0;
29565
+ });
29114
29566
  const isEndOfResults = createSelector(getSearchStateSearch, (state) => {
29115
29567
  return (state.params.currentPage * state.params.pageSize +
29116
29568
  state.params.pageSize >=
@@ -29144,6 +29596,7 @@ class SearchFacade {
29144
29596
  this.isLoading$ = this.store.pipe(select(getSearchResultsLoading, searchId));
29145
29597
  this.searchFilters$ = this.store.pipe(select(getSearchFilters, searchId));
29146
29598
  this.resultsHits$ = this.store.pipe(select(getSearchResultsHits, searchId));
29599
+ this.isBeginningOfResults$ = this.store.pipe(select(isBeginningOfResults, searchId));
29147
29600
  this.isEndOfResults$ = this.store.pipe(select(isEndOfResults, searchId));
29148
29601
  this.totalPages$ = this.store.pipe(select(totalPages, searchId));
29149
29602
  this.currentPage$ = this.store.pipe(select(currentPage, searchId));
@@ -30340,12 +30793,14 @@ marker('search.filters.keyword');
30340
30793
  marker('search.filters.isSpatial');
30341
30794
  marker('search.filters.license');
30342
30795
  marker('search.filters.publicationYear');
30343
- marker('search.filters.publisher');
30796
+ marker('search.filters.organization');
30344
30797
  marker('search.filters.representationType');
30345
30798
  marker('search.filters.resourceType');
30346
30799
  marker('search.filters.standard');
30347
30800
  marker('search.filters.topic');
30348
30801
  marker('search.filters.contact');
30802
+ marker('search.filters.producerOrg');
30803
+ marker('search.filters.publisherOrg');
30349
30804
  class FieldsService {
30350
30805
  get supportedFields() {
30351
30806
  return Object.keys(this.fields);
@@ -30353,7 +30808,7 @@ class FieldsService {
30353
30808
  constructor(injector) {
30354
30809
  this.injector = injector;
30355
30810
  this.fields = {
30356
- publisher: new OrganizationSearchField(this.injector),
30811
+ organization: new OrganizationSearchField(this.injector),
30357
30812
  format: new SimpleSearchField('format', this.injector, 'asc'),
30358
30813
  resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
30359
30814
  representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
@@ -30366,6 +30821,8 @@ class FieldsService {
30366
30821
  q: new FullTextSearchField(),
30367
30822
  license: new LicenseSearchField(this.injector),
30368
30823
  owner: new OwnerSearchField(this.injector),
30824
+ producerOrg: new MultilingualSearchField('originatorOrgForResourceObject', this.injector, 'asc', 'key'),
30825
+ publisherOrg: new MultilingualSearchField('distributorOrgForResourceObject', this.injector, 'asc', 'key'),
30369
30826
  };
30370
30827
  }
30371
30828
  getAvailableValues(fieldName) {
@@ -30543,6 +31000,7 @@ class ResultsTableContainerComponent {
30543
31000
  this.selectionService = selectionService;
30544
31001
  this.recordsRepository = recordsRepository;
30545
31002
  this.recordClick = new EventEmitter();
31003
+ this.duplicateRecord = new EventEmitter();
30546
31004
  this.records$ = this.searchFacade.results$;
30547
31005
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
30548
31006
  this.sortBy$ = this.searchFacade.sortBy$;
@@ -30551,6 +31009,9 @@ class ResultsTableContainerComponent {
30551
31009
  handleRecordClick(item) {
30552
31010
  this.recordClick.emit(item);
30553
31011
  }
31012
+ handleDuplicateRecord(item) {
31013
+ this.duplicateRecord.emit(item);
31014
+ }
30554
31015
  handleSortByChange(col, order) {
30555
31016
  this.searchService.setSortBy([order, col]);
30556
31017
  }
@@ -30563,13 +31024,15 @@ class ResultsTableContainerComponent {
30563
31024
  }
30564
31025
  }
30565
31026
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
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"] }] }); }
31027
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "recordsSelectedChange"] }] }); }
30567
31028
  }
30568
31029
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
30569
31030
  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" }]
31031
+ args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
30571
31032
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }]; }, propDecorators: { recordClick: [{
30572
31033
  type: Output
31034
+ }], duplicateRecord: [{
31035
+ type: Output
30573
31036
  }] } });
30574
31037
 
30575
31038
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
@@ -30869,7 +31332,7 @@ class LayersPanelComponent {
30869
31332
  this.mapFacade.addLayer(layer);
30870
31333
  }
30871
31334
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
31335
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30873
31336
  }
30874
31337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, decorators: [{
30875
31338
  type: Component,
@@ -31383,12 +31846,9 @@ const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => sta
31383
31846
 
31384
31847
  class FigureComponent {
31385
31848
  constructor() {
31849
+ this.unit = '';
31386
31850
  this.color = 'primary';
31387
31851
  }
31388
- get hoverTitle() {
31389
- return `${this.figure.toString()} ${this.unit || ''}
31390
- ${this.title}`;
31391
- }
31392
31852
  get textClass() {
31393
31853
  return this.color === 'primary' ? 'text-primary' : 'text-secondary';
31394
31854
  }
@@ -31396,11 +31856,11 @@ ${this.title}`;
31396
31856
  return this.color === 'primary' ? 'bg-primary-white' : 'bg-secondary-white';
31397
31857
  }
31398
31858
  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 }); }
31859
+ 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
31860
  }
31401
31861
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FigureComponent, decorators: [{
31402
31862
  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"] }]
31863
+ 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
31864
  }], propDecorators: { icon: [{
31405
31865
  type: Input
31406
31866
  }], title: [{
@@ -31614,7 +32074,7 @@ class TableComponent {
31614
32074
  return rowIdPrefix + id;
31615
32075
  }
31616
32076
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
32077
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$7.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$7.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31618
32078
  }
31619
32079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
31620
32080
  type: Component,
@@ -32987,7 +33447,10 @@ class MdViewFacade {
32987
33447
  return collectionRecords && collectionRecords.geometry
32988
33448
  ? link
32989
33449
  : null;
32990
- }), defaultIfEmpty(null));
33450
+ }), defaultIfEmpty(null), catchError((e) => {
33451
+ console.error(e);
33452
+ return of(null);
33453
+ }));
32991
33454
  }
32992
33455
  else {
32993
33456
  return of(link);
@@ -33348,15 +33811,15 @@ class OrganisationPreviewComponent {
33348
33811
  }
33349
33812
  clickOrganisation(event) {
33350
33813
  event.preventDefault();
33351
- this.clickedOrganisation.emit(this.organisation);
33814
+ this.clickedOrganisation.emit(this.organization);
33352
33815
  }
33353
33816
  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 }); }
33817
+ 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
33818
  }
33356
33819
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
33357
33820
  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: [{
33821
+ 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"] }]
33822
+ }], propDecorators: { organization: [{
33360
33823
  type: Input
33361
33824
  }], organisationUrl: [{
33362
33825
  type: Input
@@ -33468,7 +33931,8 @@ class UiCatalogModule {
33468
33931
  LanguageSwitcherComponent,
33469
33932
  OrganisationsResultComponent], imports: [CommonModule, i1$1.TranslateModule, UiElementsModule,
33470
33933
  UiInputsModule,
33471
- MatIconModule], exports: [CatalogTitleComponent,
33934
+ MatIconModule,
33935
+ RouterLink], exports: [CatalogTitleComponent,
33472
33936
  OrganisationPreviewComponent,
33473
33937
  OrganisationsFilterComponent,
33474
33938
  LanguageSwitcherComponent,
@@ -33495,6 +33959,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33495
33959
  UiElementsModule,
33496
33960
  UiInputsModule,
33497
33961
  MatIconModule,
33962
+ RouterLink,
33498
33963
  ],
33499
33964
  exports: [
33500
33965
  CatalogTitleComponent,
@@ -33542,6 +34007,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33542
34007
  type: Input
33543
34008
  }] } });
33544
34009
 
34010
+ // expects the replacement key ${name}
34011
+ const ORGANIZATION_PAGE_URL_TOKEN = new InjectionToken('organization-page-url-token');
34012
+
33545
34013
  class OrganisationsComponent {
33546
34014
  constructor(organisationsService, urlTemplate) {
33547
34015
  this.organisationsService = organisationsService;
@@ -33613,17 +34081,17 @@ class OrganisationsComponent {
33613
34081
  return null;
33614
34082
  return this.urlTemplate.replace('${name}', organisation.name);
33615
34083
  }
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 }); }
34084
+ 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 }); }
34085
+ 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
34086
  }
33619
34087
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: OrganisationsComponent, decorators: [{
33620
34088
  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" }]
34089
+ 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
34090
  }], ctorParameters: function () { return [{ type: OrganizationsServiceInterface }, { type: undefined, decorators: [{
33623
34091
  type: Optional
33624
34092
  }, {
33625
34093
  type: Inject,
33626
- args: [ORGANIZATION_URL_TOKEN]
34094
+ args: [ORGANIZATION_PAGE_URL_TOKEN]
33627
34095
  }] }]; }, propDecorators: { itemsOnPage: [{
33628
34096
  type: Input
33629
34097
  }], orgSelect: [{
@@ -33702,9 +34170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33702
34170
  class RecordsService {
33703
34171
  constructor(recordsRepository) {
33704
34172
  this.recordsRepository = recordsRepository;
33705
- this.recordsCount$ = this.recordsRepository
33706
- .getMatchesCount({})
33707
- .pipe(shareReplay(1), catchError(() => of(0)));
34173
+ this.recordsCount$ = of(true).pipe(switchMap(() => this.recordsRepository.getMatchesCount({})), shareReplay(1));
33708
34174
  }
33709
34175
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, deps: [{ token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
33710
34176
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordsService, providedIn: 'root' }); }
@@ -33754,37 +34220,54 @@ const GN_UI_VERSION = new InjectionToken('gnUiVersion');
33754
34220
 
33755
34221
  const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
33756
34222
  class DataViewPermalinkComponent {
34223
+ set viewType(value) {
34224
+ this.viewType$.next(value);
34225
+ }
33757
34226
  constructor(config, wcEmbedderBaseUrl, version, facade) {
33758
34227
  this.config = config;
33759
34228
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33760
34229
  this.version = version;
33761
34230
  this.facade = facade;
34231
+ this.viewType$ = new BehaviorSubject('map');
33762
34232
  this.permalinkUrl$ = combineLatest([
34233
+ this.viewType$,
33763
34234
  this.facade.chartConfig$,
33764
34235
  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();
34236
+ ]).pipe(map$2(([viewType, config, metadata]) => {
34237
+ const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
34238
+ url.searchParams.set('v', `${this.version}`);
34239
+ if (viewType === 'chart') {
34240
+ if (config) {
34241
+ const { aggregation, xProperty, yProperty, chartType } = config;
34242
+ url.searchParams.append('e', `gn-dataset-view-chart`);
34243
+ url.searchParams.append('a', `aggregation=${aggregation}`);
34244
+ url.searchParams.append('a', `x-property=${xProperty}`);
34245
+ url.searchParams.append('a', `y-property=${yProperty}`);
34246
+ url.searchParams.append('a', `chart-type=${chartType}`);
34247
+ }
34248
+ else {
34249
+ return '';
34250
+ }
33782
34251
  }
33783
- return '';
34252
+ else if (viewType === 'table') {
34253
+ // table
34254
+ url.searchParams.append('e', `gn-dataset-view-table`);
34255
+ }
34256
+ else {
34257
+ // map
34258
+ url.searchParams.append('e', `gn-dataset-view-map`);
34259
+ }
34260
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
34261
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
34262
+ url.searchParams.append('a', `primary-color=#0f4395`);
34263
+ url.searchParams.append('a', `secondary-color=#8bc832`);
34264
+ url.searchParams.append('a', `main-color=#555`);
34265
+ url.searchParams.append('a', `background-color=#fdfbff`);
34266
+ return url.toString();
33784
34267
  }));
33785
34268
  }
33786
34269
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
34270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33788
34271
  }
33789
34272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
33790
34273
  type: Component,
@@ -33800,37 +34283,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33800
34283
  }] }, { type: undefined, decorators: [{
33801
34284
  type: Inject,
33802
34285
  args: [GN_UI_VERSION]
33803
- }] }, { type: MdViewFacade }]; } });
34286
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34287
+ type: Input
34288
+ }] } });
33804
34289
 
33805
34290
  class DataViewWebComponentComponent {
34291
+ set viewType(value) {
34292
+ this.viewType$.next(value);
34293
+ }
33806
34294
  constructor(config, version, facade) {
33807
34295
  this.config = config;
33808
34296
  this.version = version;
33809
34297
  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;
34298
+ this.viewType$ = new BehaviorSubject('map');
34299
+ this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
34300
+ if (viewType === 'chart') {
34301
+ if (config) {
34302
+ const { aggregation, xProperty, yProperty, chartType } = config;
34303
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34304
+ <gn-dataset-view-chart
34305
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34306
+ dataset-id="${metadata.uniqueIdentifier}"
34307
+ aggregation="${aggregation}"
34308
+ x-property="${xProperty}"
34309
+ y-property="${yProperty}"
34310
+ chart-type="${chartType}"
34311
+ primary-color="#0f4395"
34312
+ secondary-color="#8bc832"
34313
+ main-color="#555"
34314
+ background-color="#fdfbff"
34315
+ main-font="'Inter', sans-serif"
34316
+ title-font="'DM Serif Display', serif"
34317
+ ></gn-dataset-view-chart>`;
34318
+ }
34319
+ return '';
34320
+ }
34321
+ else if (viewType === 'table') {
33813
34322
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
33814
- <gn-dataset-view-chart
34323
+ <gn-dataset-view-table
34324
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34325
+ dataset-id="${metadata.uniqueIdentifier}"
34326
+ primary-color="#0f4395"
34327
+ secondary-color="#8bc832"
34328
+ main-color="#555"
34329
+ background-color="#fdfbff"
34330
+ main-font="'Inter', sans-serif"
34331
+ title-font="'DM Serif Display', serif"
34332
+ ></gn-dataset-view-table>`;
34333
+ }
34334
+ else {
34335
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34336
+ <gn-dataset-view-map
33815
34337
  api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
33816
34338
  dataset-id="${metadata.uniqueIdentifier}"
33817
- aggregation="${aggregation}"
33818
- x-property="${xProperty}"
33819
- y-property="${yProperty}"
33820
- chart-type="${chartType}"
33821
34339
  primary-color="#0f4395"
33822
34340
  secondary-color="#8bc832"
33823
34341
  main-color="#555"
33824
34342
  background-color="#fdfbff"
33825
34343
  main-font="'Inter', sans-serif"
33826
34344
  title-font="'DM Serif Display', serif"
33827
- ></gn-dataset-view-chart>`;
34345
+ ></gn-dataset-view-map>`;
33828
34346
  }
33829
- return '';
33830
34347
  }));
33831
34348
  }
33832
34349
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
34350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33834
34351
  }
33835
34352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
33836
34353
  type: Component,
@@ -33841,24 +34358,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33841
34358
  }] }, { type: undefined, decorators: [{
33842
34359
  type: Inject,
33843
34360
  args: [GN_UI_VERSION]
33844
- }] }, { type: MdViewFacade }]; } });
34361
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34362
+ type: Input
34363
+ }] } });
33845
34364
 
33846
34365
  class DataViewShareComponent {
34366
+ set viewType(value) {
34367
+ this._viewType = value;
34368
+ }
34369
+ get viewType() {
34370
+ return this._viewType;
34371
+ }
33847
34372
  constructor(wcEmbedderBaseUrl) {
33848
34373
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33849
34374
  }
33850
34375
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, deps: [{ token: WEB_COMPONENT_EMBEDDER_URL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
34376
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", inputs: { viewType: "viewType" }, ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: ["viewType"] }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: ["viewType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33852
34377
  }
33853
34378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, decorators: [{
33854
34379
  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"] }]
34380
+ args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
33856
34381
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
33857
34382
  type: Optional
33858
34383
  }, {
33859
34384
  type: Inject,
33860
34385
  args: [WEB_COMPONENT_EMBEDDER_URL]
33861
- }] }]; } });
34386
+ }] }]; }, propDecorators: { viewType: [{
34387
+ type: Input
34388
+ }] } });
33862
34389
 
33863
34390
  class FeatureRecordModule {
33864
34391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeatureRecordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -33948,75 +34475,159 @@ const saveRecord = createAction('[Editor] Save record');
33948
34475
  const saveRecordSuccess = createAction('[Editor] Save record success');
33949
34476
  const saveRecordFailure = createAction('[Editor] Save record failure', props());
33950
34477
  const draftSaveSuccess = createAction('[Editor] Draft save success');
34478
+ const setCurrentPage = createAction('[Editor] Set current page', props());
33951
34479
 
33952
- const DEFAULT_FIELDS = [
33953
- {
33954
- model: 'title',
33955
- formFieldConfig: {
33956
- labelKey: 'Metadata title',
33957
- type: 'text',
33958
- },
34480
+ /**
34481
+ * This file contains the configuration of the fields that will be displayed in the editor.
34482
+ * To add a new field, you need to create a new EditorField object in the fields part of this file.
34483
+ * Then add it to the corresponding section in the sections part of this file.
34484
+ * Finally, add the section to the corresponding page in the pages part of this file.
34485
+ */
34486
+ /************************************************************
34487
+ *************** FIELDS *****************
34488
+ ************************************************************
34489
+ */
34490
+ const RECORD_LICENSE_FIELD = {
34491
+ model: 'licenses',
34492
+ formFieldConfig: {
34493
+ labelKey: marker('editor.record.form.field.license'),
33959
34494
  },
33960
- {
33961
- model: 'abstract',
33962
- formFieldConfig: {
33963
- labelKey: 'Abstract',
33964
- type: 'rich',
33965
- },
34495
+ };
34496
+ const RECORD_KEYWORDS_FIELD = {
34497
+ model: 'keywords',
34498
+ formFieldConfig: {
34499
+ labelKey: marker('editor.record.form.field.keywords'),
33966
34500
  },
33967
- {
33968
- model: 'uniqueIdentifier',
33969
- formFieldConfig: {
33970
- labelKey: 'Unique identifier',
33971
- type: 'text',
33972
- locked: true,
33973
- },
34501
+ };
34502
+ const RECORD_UNIQUE_IDENTIFIER_FIELD = {
34503
+ model: 'uniqueIdentifier',
34504
+ formFieldConfig: {
34505
+ labelKey: marker('editor.record.form.field.uniqueIdentifier'),
34506
+ locked: true,
33974
34507
  },
33975
- {
33976
- model: 'recordUpdated',
33977
- formFieldConfig: {
33978
- labelKey: 'Record Updated',
33979
- type: 'text',
33980
- locked: true,
33981
- },
33982
- onSaveProcess: '${dateNow()}',
34508
+ };
34509
+ const RECORD_RESOURCE_UPDATED_FIELD = {
34510
+ model: 'resourceUpdated',
34511
+ formFieldConfig: {
34512
+ labelKey: marker('editor.record.form.field.resourceUpdated'),
33983
34513
  },
33984
- {
33985
- model: 'licenses',
33986
- formFieldConfig: {
33987
- labelKey: marker('editor.record.form.license'),
33988
- type: 'list',
33989
- },
34514
+ };
34515
+ const RECORD_UPDATED_FIELD = {
34516
+ model: 'recordUpdated',
34517
+ formFieldConfig: {
34518
+ labelKey: marker('editor.record.form.field.recordUpdated'),
34519
+ locked: true,
33990
34520
  },
33991
- {
33992
- model: 'resourceUpdated',
33993
- formFieldConfig: {
33994
- labelKey: marker('editor.record.form.resourceUpdated'),
33995
- type: 'date',
33996
- },
34521
+ onSaveProcess: '${dateNow()}',
34522
+ };
34523
+ const RECORD_UPDATE_FREQUENCY_FIELD = {
34524
+ model: 'updateFrequency',
34525
+ formFieldConfig: {
34526
+ labelKey: marker('editor.record.form.field.updateFrequency'),
33997
34527
  },
33998
- {
33999
- model: 'updateFrequency',
34000
- formFieldConfig: {
34001
- labelKey: marker('editor.record.form.updateFrequency'),
34002
- type: 'text',
34003
- },
34528
+ };
34529
+ const RECORD_TEMPORAL_EXTENTS_FIELD = {
34530
+ model: 'temporalExtents',
34531
+ formFieldConfig: {
34532
+ labelKey: marker('editor.record.form.field.temporalExtents'),
34004
34533
  },
34005
- {
34006
- model: 'temporalExtents',
34007
- formFieldConfig: {
34008
- labelKey: marker('editor.record.form.temporalExtents'),
34009
- type: 'list',
34010
- },
34534
+ };
34535
+ const RECORD_TITLE_FIELD = {
34536
+ model: 'title',
34537
+ formFieldConfig: {
34538
+ labelKey: marker('editor.record.form.field.title'),
34011
34539
  },
34012
- {
34013
- model: 'keywords',
34014
- formFieldConfig: {
34015
- labelKey: marker('editor.record.form.keywords'),
34016
- type: 'list',
34017
- },
34540
+ };
34541
+ const RECORD_ABSTRACT_FIELD = {
34542
+ model: 'abstract',
34543
+ formFieldConfig: {
34544
+ labelKey: marker('editor.record.form.field.abstract'),
34018
34545
  },
34019
- ];
34546
+ };
34547
+ /************************************************************
34548
+ *************** SECTIONS *****************
34549
+ ************************************************************
34550
+ */
34551
+ const TITLE_SECTION = {
34552
+ hidden: false,
34553
+ fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD],
34554
+ };
34555
+ const ABOUT_SECTION = {
34556
+ labelKey: marker('editor.record.form.section.about.label'),
34557
+ descriptionKey: marker('editor.record.form.section.about.description'),
34558
+ hidden: false,
34559
+ fields: [
34560
+ RECORD_UNIQUE_IDENTIFIER_FIELD,
34561
+ RECORD_RESOURCE_UPDATED_FIELD,
34562
+ RECORD_UPDATED_FIELD,
34563
+ RECORD_UPDATE_FREQUENCY_FIELD,
34564
+ RECORD_TEMPORAL_EXTENTS_FIELD,
34565
+ ],
34566
+ };
34567
+ const GEOGRAPHICAL_COVERAGE_SECTION = {
34568
+ labelKey: marker('editor.record.form.section.geographicalCoverage.label'),
34569
+ hidden: false,
34570
+ fields: [],
34571
+ };
34572
+ const ASSOCIATED_RESOURCES_SECTION = {
34573
+ labelKey: marker('editor.record.form.section.associatedResources.label'),
34574
+ descriptionKey: marker('editor.record.form.section.associatedResources.description'),
34575
+ hidden: false,
34576
+ fields: [],
34577
+ };
34578
+ const ANNEXES_SECTION = {
34579
+ labelKey: marker('editor.record.form.section.annexes.label'),
34580
+ hidden: false,
34581
+ fields: [],
34582
+ };
34583
+ const CLASSIFICATION_SECTION = {
34584
+ labelKey: marker('editor.record.form.section.classification.label'),
34585
+ descriptionKey: marker('editor.record.form.section.classification.description'),
34586
+ hidden: false,
34587
+ fields: [RECORD_KEYWORDS_FIELD],
34588
+ };
34589
+ const USE_AND_ACCESS_CONDITIONS_SECTION = {
34590
+ labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
34591
+ hidden: false,
34592
+ fields: [RECORD_LICENSE_FIELD],
34593
+ };
34594
+ const DATA_MANAGERS_SECTION = {
34595
+ labelKey: marker('editor.record.form.section.dataManagers.label'),
34596
+ descriptionKey: marker('editor.record.form.section.dataManagers.description'),
34597
+ hidden: false,
34598
+ fields: [],
34599
+ };
34600
+ const DATA_POINT_OF_CONTACT_SECTION = {
34601
+ labelKey: marker('editor.record.form.section.dataPointOfContact.label'),
34602
+ descriptionKey: marker('editor.record.form.section.dataPointOfContact.description'),
34603
+ hidden: false,
34604
+ fields: [],
34605
+ };
34606
+ /************************************************************
34607
+ *************** PAGES *****************
34608
+ ************************************************************
34609
+ */
34610
+ const DEFAULT_CONFIGURATION = {
34611
+ pages: [
34612
+ {
34613
+ labelKey: marker('editor.record.form.page.description'),
34614
+ sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
34615
+ },
34616
+ {
34617
+ labelKey: marker('editor.record.form.page.ressources'),
34618
+ sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
34619
+ },
34620
+ {
34621
+ labelKey: marker('editor.record.form.page.accessAndContact'),
34622
+ sections: [
34623
+ CLASSIFICATION_SECTION,
34624
+ USE_AND_ACCESS_CONDITIONS_SECTION,
34625
+ DATA_MANAGERS_SECTION,
34626
+ DATA_POINT_OF_CONTACT_SECTION,
34627
+ ],
34628
+ },
34629
+ ],
34630
+ };
34020
34631
 
34021
34632
  const EDITOR_FEATURE_KEY = 'editor';
34022
34633
  const initialEditorState = {
@@ -34026,7 +34637,8 @@ const initialEditorState = {
34026
34637
  saving: false,
34027
34638
  saveError: null,
34028
34639
  changedSinceSave: false,
34029
- fieldsConfig: DEFAULT_FIELDS,
34640
+ editorConfig: DEFAULT_CONFIGURATION,
34641
+ currentPage: 0,
34030
34642
  };
34031
34643
  const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
34032
34644
  ...state,
@@ -34056,6 +34668,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
34056
34668
  })), on(markRecordAsChanged, (state) => ({
34057
34669
  ...state,
34058
34670
  changedSinceSave: true,
34671
+ })), on(setCurrentPage, (state, { page }) => ({
34672
+ ...state,
34673
+ currentPage: page,
34059
34674
  })));
34060
34675
  function editorReducer(state, action) {
34061
34676
  return reducer(state, action);
@@ -34068,11 +34683,21 @@ const selectRecordSaving = createSelector(selectEditorState, (state) => state.sa
34068
34683
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
34069
34684
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
34070
34685
  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
- })));
34686
+ const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
34687
+ const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
34688
+ const selectRecordSections = createSelector(selectEditorState, (state) => {
34689
+ const currentPage = state.editorConfig.pages[state.currentPage];
34690
+ if (!currentPage) {
34691
+ return [];
34692
+ }
34693
+ return currentPage.sections.map((section) => ({
34694
+ ...section,
34695
+ fieldsWithValues: section.fields.map((fieldConfig) => ({
34696
+ config: fieldConfig,
34697
+ value: state.record?.[fieldConfig.model] ?? null,
34698
+ })),
34699
+ }));
34700
+ });
34076
34701
 
34077
34702
  class EditorFacade {
34078
34703
  constructor() {
@@ -34085,8 +34710,10 @@ class EditorFacade {
34085
34710
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
34086
34711
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
34087
34712
  this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
34088
- this.recordFields$ = this.store.pipe(select(selectRecordFields));
34713
+ this.currentSections$ = this.store.pipe(select(selectRecordSections));
34089
34714
  this.draftSaveSuccess$ = this.actions$.pipe(ofType(draftSaveSuccess));
34715
+ this.currentPage$ = this.store.pipe(select(selectCurrentPage));
34716
+ this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
34090
34717
  }
34091
34718
  openRecord(record, recordSource, alreadySavedOnce) {
34092
34719
  this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
@@ -34097,6 +34724,9 @@ class EditorFacade {
34097
34724
  updateRecordField(field, value) {
34098
34725
  this.store.dispatch(updateRecordField({ field, value }));
34099
34726
  }
34727
+ setCurrentPage(page) {
34728
+ this.store.dispatch(setCurrentPage({ page }));
34729
+ }
34100
34730
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34101
34731
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade }); }
34102
34732
  }
@@ -34124,12 +34754,13 @@ class EditorService {
34124
34754
  // returns the record as it was when saved, alongside its source
34125
34755
  saveRecord(record, fieldsConfig, generateNewUniqueIdentifier = false) {
34126
34756
  const savedRecord = { ...record };
34757
+ const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
34127
34758
  // run onSave processes
34128
- for (const field of fieldsConfig) {
34759
+ for (const field of fields) {
34129
34760
  if (field.onSaveProcess && field.model) {
34130
34761
  const evaluator = evaluate(field.onSaveProcess);
34131
34762
  savedRecord[field.model] = evaluator({
34132
- config: field,
34763
+ model: field.model,
34133
34764
  value: record[field.model],
34134
34765
  });
34135
34766
  }
@@ -34166,7 +34797,7 @@ class EditorEffects {
34166
34797
  this.editorService = inject(EditorService);
34167
34798
  this.recordsRepository = inject(RecordsRepositoryInterface);
34168
34799
  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
34800
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectEditorConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34170
34801
  .saveRecord(record, fieldsConfig, !alreadySavedOnce)
34171
34802
  .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
34172
34803
  record,
@@ -34603,7 +35234,9 @@ class FormFieldKeywordsComponent {
34603
35234
  return `${item.title} (${item.value.thesaurus?.name})`;
34604
35235
  };
34605
35236
  this.autoCompleteAction = (query) => {
34606
- return this.platformService.searchKeywords(query).pipe(map$2((keywords) => keywords.map((keyword) => {
35237
+ return this.platformService
35238
+ .searchKeywords(query, ['temporal', 'theme', 'other'])
35239
+ .pipe(map$2((keywords) => keywords.map((keyword) => {
34607
35240
  return { title: keyword.label, value: keyword };
34608
35241
  })));
34609
35242
  };
@@ -35117,7 +35750,7 @@ class FormFieldComponent {
35117
35750
  return this.model === 'title' || this.model === 'abstract';
35118
35751
  }
35119
35752
  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 }); }
35753
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35121
35754
  }
35122
35755
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
35123
35756
  type: Component,
@@ -35140,7 +35773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35140
35773
  FormFieldArrayComponent,
35141
35774
  FormFieldKeywordsComponent,
35142
35775
  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" }]
35776
+ ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35144
35777
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
35145
35778
  type: Input
35146
35779
  }], config: [{
@@ -35157,28 +35790,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35157
35790
  class RecordFormComponent {
35158
35791
  constructor(facade) {
35159
35792
  this.facade = facade;
35160
- this.fields$ = this.facade.recordFields$;
35161
35793
  }
35162
- handleFieldValueChange(field, newValue) {
35163
- if (!field.config.model) {
35794
+ handleFieldValueChange(model, newValue) {
35795
+ if (!model) {
35164
35796
  return;
35165
35797
  }
35166
- this.facade.updateRecordField(field.config.model, newValue);
35798
+ this.facade.updateRecordField(model, newValue);
35167
35799
  }
35168
35800
  fieldTracker(index, field) {
35169
35801
  return field.config.model;
35170
35802
  }
35803
+ sectionTracker(index, section) {
35804
+ return section.labelKey;
35805
+ }
35171
35806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
35807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35173
35808
  }
35174
35809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, decorators: [{
35175
35810
  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" }]
35811
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n" }]
35177
35812
  }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
35178
35813
 
35179
35814
  const ROUTER_STATE_KEY = 'router';
35180
35815
  const ROUTER_ROUTE_SEARCH = 'search';
35181
35816
  const ROUTER_ROUTE_DATASET = 'dataset';
35817
+ const ROUTER_ROUTE_ORGANIZATION = 'organization';
35182
35818
  var ROUTE_PARAMS;
35183
35819
  (function (ROUTE_PARAMS) {
35184
35820
  ROUTE_PARAMS["SORT"] = "_sort";
@@ -35210,11 +35846,18 @@ class RouterService {
35210
35846
  path: `${ROUTER_ROUTE_DATASET}/:metadataUuid`,
35211
35847
  component: this.routerConfig.recordRouteComponent,
35212
35848
  },
35849
+ {
35850
+ path: `${ROUTER_ROUTE_ORGANIZATION}/:name`,
35851
+ component: this.routerConfig.organizationRouteComponent,
35852
+ },
35213
35853
  ];
35214
35854
  }
35215
35855
  getSearchRoute() {
35216
35856
  return ROUTER_ROUTE_SEARCH;
35217
35857
  }
35858
+ getOrganizationPageRoute() {
35859
+ return ROUTER_ROUTE_ORGANIZATION;
35860
+ }
35218
35861
  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
35862
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RouterService, providedIn: 'root' }); }
35220
35863
  }
@@ -35261,6 +35904,13 @@ class RouterFacade {
35261
35904
  this.store.dispatch(setIncompleteMetadata({ incomplete: metadata }));
35262
35905
  });
35263
35906
  }
35907
+ goToOrganization(organizationName) {
35908
+ const path = `${this.routerService.getOrganizationPageRoute()}/${organizationName}`;
35909
+ this.go({
35910
+ path,
35911
+ queryParamsHandling: '',
35912
+ });
35913
+ }
35264
35914
  updateSearch(query) {
35265
35915
  this.go({
35266
35916
  path: this.routerService.getSearchRoute(),
@@ -35541,5 +36191,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35541
36191
  * Generated bundle index. Do not edit.
35542
36192
  */
35543
36193
 
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 };
36194
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setCurrentPage, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
35545
36195
  //# sourceMappingURL=geonetwork-ui.mjs.map