geonetwork-ui 2.6.0-dev.6681b0ab3 → 2.6.0-dev.6e0b3d33d

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 (235) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +40 -4
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
  8. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +2 -1
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +3 -3
  10. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +77 -17
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  12. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  13. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  15. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +32 -2
  16. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
  17. package/esm2022/libs/feature/record/src/index.mjs +2 -3
  18. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +31 -5
  19. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
  20. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
  21. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +7 -13
  22. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
  23. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
  24. package/esm2022/libs/feature/search/src/lib/constants.mjs +2 -1
  25. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -2
  26. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  27. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  28. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +55 -0
  29. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +42 -83
  30. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  31. package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +22 -5
  32. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -3
  33. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
  34. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +17 -7
  35. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +12 -4
  36. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +14 -4
  37. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  38. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +3 -3
  39. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  40. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  41. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
  42. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
  43. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
  44. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  45. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -8
  46. package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +3 -3
  47. package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
  48. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  49. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +21 -12
  50. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +39 -18
  51. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
  52. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
  53. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
  54. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -1
  55. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -1
  56. package/esm2022/translations/de.json +39 -12
  57. package/esm2022/translations/en.json +36 -11
  58. package/esm2022/translations/es.json +38 -11
  59. package/esm2022/translations/fr.json +36 -11
  60. package/esm2022/translations/it.json +71 -44
  61. package/esm2022/translations/nl.json +38 -11
  62. package/esm2022/translations/pt.json +38 -11
  63. package/fesm2022/geonetwork-ui.mjs +2354 -1454
  64. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  66. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  67. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
  68. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  69. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  70. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  71. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
  72. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  73. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  74. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  75. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -1
  76. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  77. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +13 -2
  78. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  79. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  80. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  81. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  82. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  83. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +21 -18
  84. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  85. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +6 -0
  86. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  87. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
  88. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  89. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
  90. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  91. package/libs/feature/record/src/index.d.ts +1 -2
  92. package/libs/feature/record/src/index.d.ts.map +1 -1
  93. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  94. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
  95. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  96. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
  97. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  98. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +24 -21
  99. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  100. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
  101. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  102. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  103. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  105. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +1 -1
  106. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
  107. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  108. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  109. package/libs/ui/elements/src/index.d.ts +1 -0
  110. package/libs/ui/elements/src/index.d.ts.map +1 -1
  111. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
  112. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
  113. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +6 -13
  114. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  115. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  116. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  117. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +3 -1
  118. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
  119. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  120. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  121. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +8 -1
  122. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  123. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +1 -0
  124. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  125. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +3 -1
  126. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  127. package/libs/ui/layout/src/index.d.ts +1 -0
  128. package/libs/ui/layout/src/index.d.ts.map +1 -1
  129. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  130. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  131. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  132. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  133. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
  134. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  135. package/libs/ui/search/src/index.d.ts +1 -0
  136. package/libs/ui/search/src/index.d.ts.map +1 -1
  137. package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
  138. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
  139. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  140. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
  141. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  142. package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
  143. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  144. package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
  145. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  146. package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
  147. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  148. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  149. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  150. package/package.json +1 -1
  151. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
  152. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  153. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +62 -4
  154. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
  155. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
  156. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
  157. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +8 -4
  158. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
  159. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +1 -0
  160. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +2 -2
  161. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +116 -17
  162. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  163. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  164. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +22 -14
  165. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +6 -0
  166. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +10 -0
  167. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +14 -0
  168. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +64 -1
  169. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +37 -0
  170. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
  171. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
  172. package/src/libs/feature/record/src/index.ts +1 -2
  173. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +35 -4
  174. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
  175. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
  176. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -15
  177. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
  178. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
  179. package/src/libs/feature/search/src/lib/constants.ts +1 -0
  180. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +2 -0
  181. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  182. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  183. package/src/libs/ui/elements/src/index.ts +1 -0
  184. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
  185. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
  186. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
  187. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +68 -141
  188. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +38 -97
  189. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  190. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  191. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +7 -5
  192. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +21 -2
  193. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -1
  194. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  195. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
  196. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +8 -29
  197. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +14 -1
  198. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +15 -1
  199. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +9 -1
  200. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +5 -0
  201. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  202. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -2
  203. package/src/libs/ui/layout/src/index.ts +1 -0
  204. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  205. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  206. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -2
  207. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
  208. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  209. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
  210. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
  211. package/src/libs/ui/search/src/index.ts +1 -0
  212. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
  213. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +1 -0
  214. package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
  215. package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -1
  216. package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
  217. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
  218. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +15 -11
  219. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
  220. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +31 -27
  221. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +33 -15
  222. package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
  223. package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
  224. package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
  225. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +3 -0
  226. package/src/libs/util/shared/src/lib/links/link-utils.ts +3 -0
  227. package/tailwind.base.css +1 -1
  228. package/translations/de.json +39 -12
  229. package/translations/en.json +36 -11
  230. package/translations/es.json +38 -11
  231. package/translations/fr.json +36 -11
  232. package/translations/it.json +71 -44
  233. package/translations/nl.json +38 -11
  234. package/translations/pt.json +38 -11
  235. package/translations/sk.json +38 -11
@@ -13,8 +13,12 @@ import {
13
13
  iconoirCreditCard,
14
14
  } from '@ng-icons/iconoir'
15
15
  import { NgIconsModule } from '@ng-icons/core'
16
- import { BadgeComponent } from '../../../../../../libs/ui/inputs/src'
17
16
  import { TranslateModule } from '@ngx-translate/core'
17
+ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
18
+
19
+ marker('record.kind.dataset')
20
+ marker('record.kind.reuse')
21
+ marker('record.kind.service')
18
22
 
19
23
  enum KindConfig {
20
24
  all = 'iconoirAppleWallet', // (this one is for filter)
@@ -37,9 +41,10 @@ enum KindConfig {
37
41
  ],
38
42
  changeDetection: ChangeDetectionStrategy.OnPush,
39
43
  standalone: true,
40
- imports: [NgIconsModule, CommonModule, BadgeComponent, TranslateModule],
44
+ imports: [NgIconsModule, CommonModule, TranslateModule],
41
45
  })
42
46
  export class KindBadgeComponent {
47
+ @Input() styling = 'default'
43
48
  @Input() contentTemplate: TemplateRef<unknown>
44
49
  @Input() kind: string
45
50
 
@@ -48,4 +53,18 @@ export class KindBadgeComponent {
48
53
  get iconKind() {
49
54
  return KindConfig[this.kind] || KindConfig.dataset
50
55
  }
56
+
57
+ get badgeClasses(): string {
58
+ const baseClasses =
59
+ 'badge-btn text-white text-xs px-2 font-bold shrink-0 flex items-center h-6 min-h-6'
60
+
61
+ switch (this.styling) {
62
+ case 'outline':
63
+ return `${baseClasses} bg-transparent border border-white py-1.5`
64
+ case 'default':
65
+ return `${baseClasses} bg-primary py-0.5`
66
+ default:
67
+ return 'flex items-center'
68
+ }
69
+ }
51
70
  }
@@ -2,7 +2,7 @@
2
2
  <div
3
3
  class="flex items-center"
4
4
  [class]="min - w - 0"
5
- [ngClass]="{ 'leading-[8px] m-h-[120px]': smaller }"
5
+ [ngClass]="{ 'text-xs leading-[8px] m-h-[120px]': smaller }"
6
6
  >
7
7
  <gn-ui-progress-bar
8
8
  tabindex="0"
@@ -1,48 +1,107 @@
1
- <div class="flex flex-col gap-2 py-5 px-5 h-[562px] overflow-y-auto">
2
- <div
3
- *ngFor="let featureType of filteredFeatureCatalog?.featureTypes"
4
- class="rounded shadow bg-white"
5
- >
6
- <gn-ui-expandable-panel
7
- [collapsed]="filteredFeatureCatalog?.featureTypes?.length !== 1"
8
- iconColor="black"
1
+ <div
2
+ cdkScrollable
3
+ class="h-[562px] relative overflow-y-auto overflow-hidden"
4
+ data-cy="feat-catalog-scrollable"
5
+ >
6
+ <div #scrollContainer class="flex flex-col gap-2 py-5 px-5">
7
+ <div
8
+ *ngFor="let featureType of filteredFeatureCatalog?.featureTypes"
9
+ class="rounded shadow bg-white"
9
10
  >
10
- <ng-template #titleTemplate>
11
- <div class="px-2">
12
- <div class="text-lg font-bold">{{ featureType.name }}</div>
13
- <div class="text-sm" *ngIf="featureType.definition">
14
- {{ featureType.definition }}
15
- </div>
16
- </div>
17
- </ng-template>
18
- <div
19
- class="grid gap-0"
20
- [style.grid-template-columns]="gridTemplateColumns"
21
- data-cy="feature-type-content"
11
+ <gn-ui-expandable-panel
12
+ #expanel
13
+ [collapsed]="filteredFeatureCatalog?.featureTypes?.length !== 1"
14
+ iconColor="black"
22
15
  >
16
+ <ng-template #titleTemplate>
17
+ <div class="px-2">
18
+ <div class="text-lg font-bold">{{ featureType.name }}</div>
19
+ <div class="text-sm" *ngIf="featureType.definition">
20
+ {{ featureType.definition }}
21
+ </div>
22
+ </div>
23
+ </ng-template>
23
24
  <div
24
- class="py-1 px-2 text-sm font-bold text-left border-t"
25
- [class.border-l]="i > 0"
26
- [class.border-gray-300]="i > 0"
27
- *ngFor="let col of columns; let i = index"
28
- data-test="column-label"
25
+ *ngIf="expanel && !expanel.collapsed"
26
+ class="grid gap-0"
27
+ [style.grid-template-columns]="
28
+ getGridTemplateColumns(featureType.attributes)
29
+ "
30
+ data-cy="feature-type-content"
29
31
  >
30
- {{ col.label | translate }}
31
- </div>
32
- <ng-container *ngFor="let row of featureType.attributes">
33
32
  <div
34
- class="bg-white text-sm font-normal text-left border-t"
33
+ class="py-1 px-2 text-sm font-bold text-left border-t break-all"
35
34
  [class.border-l]="i > 0"
36
35
  [class.border-gray-300]="i > 0"
37
- *ngFor="let col of columns; let i = index"
36
+ [ngClass]="col.class || ''"
37
+ *ngFor="
38
+ let col of getColumnsDefinition(featureType.attributes);
39
+ trackBy: trackByColumn;
40
+ let i = index
41
+ "
42
+ data-test="column-label"
38
43
  >
39
- <gn-ui-truncated-text
40
- extraClass="py-3 px-2"
41
- [text]="row[col.key]"
42
- ></gn-ui-truncated-text>
44
+ {{ 'feature.catalog.attribute.' + col.key | translate }}
43
45
  </div>
44
- </ng-container>
45
- </div>
46
- </gn-ui-expandable-panel>
46
+ <ng-container *ngIf="expanel && !expanel.collapsed">
47
+ <ng-container *ngFor="let row of featureType.attributes">
48
+ <div
49
+ class="bg-white text-sm font-normal text-left border-t"
50
+ [class.border-l]="i > 0"
51
+ [class.border-gray-300]="i > 0"
52
+ *ngFor="
53
+ let col of getColumnsDefinition(featureType.attributes);
54
+ trackBy: trackByColumn;
55
+ let i = index
56
+ "
57
+ data-test="cell-content"
58
+ >
59
+ <ng-container
60
+ *ngIf="col.key === 'values'; then tplValues; else defaultTpl"
61
+ ></ng-container>
62
+
63
+ <ng-template #defaultTpl>
64
+ <gn-ui-truncated-text
65
+ [scrollContainer]="scrollContainer"
66
+ [cdkScrollContainer]="scrollable"
67
+ [text]="row[col.key]"
68
+ ></gn-ui-truncated-text>
69
+ </ng-template>
70
+
71
+ <ng-template #tplValues>
72
+ <gn-ui-cell-popin
73
+ #popinRef
74
+ [scrollContainer]="scrollContainer"
75
+ [cdkScrollContainer]="scrollable"
76
+ *ngIf="row.values?.length > 0"
77
+ >
78
+ <div cellContent data-cy="values-cell-popin-trigger">
79
+ <gn-ui-button
80
+ type="light"
81
+ extraClass="bg-transparent border-none"
82
+ (buttonClick)="popinRef.openOverlay()"
83
+ >
84
+ <ng-icon name="iconoirList" size="24"></ng-icon>
85
+ </gn-ui-button>
86
+ </div>
87
+ <div
88
+ popinContent
89
+ class="max-h-60 overflow-y-auto min-w-64 py-4 px-6"
90
+ style="scrollbar-width: thin"
91
+ >
92
+ <ul class="list-disc list-inside mr-4">
93
+ <li *ngFor="let v of row.values">
94
+ {{ v.label || v.code }}
95
+ </li>
96
+ </ul>
97
+ </div>
98
+ </gn-ui-cell-popin>
99
+ </ng-template>
100
+ </div>
101
+ </ng-container>
102
+ </ng-container>
103
+ </div>
104
+ </gn-ui-expandable-panel>
105
+ </div>
47
106
  </div>
48
107
  </div>
@@ -1,52 +1,83 @@
1
- import { Component, Input, OnInit } from '@angular/core'
1
+ import { Component, ElementRef, Input, ViewChild } from '@angular/core'
2
2
  import { CommonModule } from '@angular/common'
3
3
  import { TranslateModule } from '@ngx-translate/core'
4
- import { DatasetFeatureCatalog } from '../../../../../../../libs/common/domain/src/lib/model/record'
4
+ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
5
5
  import {
6
+ DatasetFeatureAttribute,
7
+ DatasetFeatureCatalog,
8
+ } from '../../../../../../../libs/common/domain/src/lib/model/record'
9
+ import { ButtonComponent } from '../../../../../../../libs/ui/inputs/src'
10
+ import {
11
+ CellPopinComponent,
6
12
  ExpandablePanelComponent,
7
13
  TruncatedTextComponent,
8
14
  } from '../../../../../../../libs/ui/layout/src'
15
+ import { CdkScrollable, ScrollingModule } from '@angular/cdk/scrolling'
16
+ import { provideIcons, NgIconComponent } from '@ng-icons/core'
17
+ import { iconoirList } from '@ng-icons/iconoir'
18
+
19
+ marker('feature.catalog.attribute.type')
20
+ marker('feature.catalog.attribute.name')
21
+ marker('feature.catalog.attribute.code')
22
+ marker('feature.catalog.attribute.definition')
23
+ marker('feature.catalog.attribute.values')
24
+
25
+ interface ColumnDefinition {
26
+ key: string
27
+ width: string
28
+ class?: string
29
+ }
9
30
 
10
31
  @Component({
11
32
  selector: 'gn-ui-feature-catalog-list',
12
33
  templateUrl: './feature-catalog-list.component.html',
34
+ styleUrls: [],
13
35
  standalone: true,
14
36
  imports: [
37
+ ButtonComponent,
38
+ CellPopinComponent,
15
39
  CommonModule,
16
40
  TranslateModule,
17
41
  ExpandablePanelComponent,
18
42
  TruncatedTextComponent,
43
+ NgIconComponent,
44
+ ScrollingModule,
19
45
  ],
46
+ providers: [provideIcons({ iconoirList })],
20
47
  })
21
- export class FeatureCatalogListComponent implements OnInit {
22
- @Input() filteredFeatureCatalog: DatasetFeatureCatalog
23
-
24
- columns = [
25
- {
26
- key: 'type',
27
- label: 'feature.catalog.attribute.type',
28
- width: '19%',
29
- },
30
- {
31
- key: 'name',
32
- label: 'feature.catalog.attribute.name',
33
- width: '32%',
34
- },
35
- {
36
- key: 'code',
37
- label: 'feature.catalog.attribute.code',
38
- width: '24%',
39
- },
40
- {
41
- key: 'title',
42
- label: 'feature.catalog.attribute.description',
43
- width: '25%',
44
- },
48
+ export class FeatureCatalogListComponent {
49
+ @Input() filteredFeatureCatalog!: DatasetFeatureCatalog
50
+
51
+ @ViewChild('scrollContainer') scrollContainer!: ElementRef
52
+ @ViewChild(CdkScrollable, { static: true }) scrollable!: CdkScrollable
53
+ @ViewChild('expanel', { read: ExpandablePanelComponent, static: true })
54
+ panelComponent: ExpandablePanelComponent
55
+
56
+ readonly COLUMNS_DEFAULT: ColumnDefinition[] = [
57
+ { key: 'type', width: '17%' },
58
+ { key: 'name', width: '32%' },
59
+ { key: 'code', width: '17%' },
60
+ { key: 'definition', width: 'minmax(0px, 1fr)' },
45
61
  ]
46
62
 
47
- gridTemplateColumns = ''
63
+ readonly COLUMN_VALUES: ColumnDefinition = {
64
+ key: 'values',
65
+ width: '73px',
66
+ class: 'text-center',
67
+ }
68
+
69
+ getColumnsDefinition(attrs: DatasetFeatureAttribute[]): ColumnDefinition[] {
70
+ const hasValues = attrs.some((a) => a.values?.length > 0)
71
+ return [...this.COLUMNS_DEFAULT, ...(hasValues ? [this.COLUMN_VALUES] : [])]
72
+ }
73
+
74
+ getGridTemplateColumns(attributes: DatasetFeatureAttribute[]) {
75
+ return this.getColumnsDefinition(attributes)
76
+ .map((col) => col.width)
77
+ .join(' ')
78
+ }
48
79
 
49
- ngOnInit(): void {
50
- this.gridTemplateColumns = this.columns.map((col) => col.width).join(' ')
80
+ trackByColumn(_i: number, col: { key: string }) {
81
+ return col.key
51
82
  }
52
83
  }
@@ -1,30 +1,9 @@
1
- <a
2
- [class]="classList"
3
- [routerLink]="['/dataset', record.uniqueIdentifier]"
4
- target="_blank"
1
+ <gn-ui-internal-link-card
2
+ [linkHref]="linkHref"
3
+ [linkTarget]="'_blank'"
4
+ [record]="record"
5
+ [favoriteTemplate]="favoriteTemplate"
6
+ [metadataQualityDisplay]="metadataQualityDisplay"
7
+ [size]="size"
5
8
  >
6
- <div class="h-52 bg-gray-100">
7
- <gn-ui-thumbnail
8
- class="h-52 w-full object-cover"
9
- [thumbnailUrl]="record.overviews?.[0]?.url.toString()"
10
- ></gn-ui-thumbnail>
11
- </div>
12
- <div class="flex flex-col justify-between h-44 px-5 pt-4 pb-6">
13
- <h4
14
- class="max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden"
15
- >
16
- {{ record.title }}
17
- </h4>
18
- <div>
19
- <button
20
- [matTooltip]="'tooltip.url.open' | translate"
21
- matTooltipPosition="above"
22
- >
23
- <ng-icon
24
- class="align-middle text-secondary"
25
- name="matOpenInNew"
26
- ></ng-icon>
27
- </button>
28
- </div>
29
- </div>
30
- </a>
9
+ </gn-ui-internal-link-card>
@@ -1,11 +1,19 @@
1
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ EventEmitter,
5
+ Input,
6
+ Output,
7
+ } from '@angular/core'
2
8
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
3
9
  import { ThumbnailComponent } from '../thumbnail/thumbnail.component'
10
+ import { InternalLinkCardComponent } from '../internal-link-card/internal-link-card.component'
4
11
  import { RouterLink } from '@angular/router'
5
12
  import { MatTooltipModule } from '@angular/material/tooltip'
6
13
  import { NgIcon, provideIcons } from '@ng-icons/core'
7
14
  import { TranslateModule } from '@ngx-translate/core'
8
15
  import { matOpenInNew } from '@ng-icons/material-icons/baseline'
16
+ import { TemplateRef } from '@angular/core'
9
17
 
10
18
  @Component({
11
19
  selector: 'gn-ui-related-record-card',
@@ -13,6 +21,7 @@ import { matOpenInNew } from '@ng-icons/material-icons/baseline'
13
21
  styleUrls: ['./related-record-card.component.css'],
14
22
  changeDetection: ChangeDetectionStrategy.OnPush,
15
23
  imports: [
24
+ InternalLinkCardComponent,
16
25
  ThumbnailComponent,
17
26
  RouterLink,
18
27
  MatTooltipModule,
@@ -25,8 +34,12 @@ import { matOpenInNew } from '@ng-icons/material-icons/baseline'
25
34
  export class RelatedRecordCardComponent {
26
35
  private readonly baseClasses: string
27
36
 
37
+ @Input() linkHref: string = null
28
38
  @Input() record: CatalogRecord
29
39
  @Input() extraClass = ''
40
+ @Input() favoriteTemplate: TemplateRef<{ $implicit: CatalogRecord }>
41
+ @Input() metadataQualityDisplay: boolean
42
+ @Input() size: string
30
43
 
31
44
  constructor() {
32
45
  this.baseClasses = [
@@ -16,17 +16,31 @@
16
16
  <div class="h-14 md:w-2/5 w-full mb-4 flex flex-row relative">
17
17
  <gn-ui-text-input
18
18
  class="w-full"
19
+ [(value)]="searchQuery"
19
20
  [extraClass]="getExtraInputClass()"
20
21
  [placeholder]="'service.metadata.search' | translate"
21
22
  (input)="onSearchChange($event)"
22
23
  (keydown.enter)="onSearchEnter($event)"
23
24
  >
24
25
  </gn-ui-text-input>
26
+ <div
27
+ class="absolute right-14 h-14 w-14 flex items-center justify-center"
28
+ >
29
+ <button
30
+ #inputBtn
31
+ *ngIf="searchQuery"
32
+ [aria-label]="'service.metadata.search.clear' | translate"
33
+ (click)="clearSearch()"
34
+ class="h-12 w-12 border-0 flex items-center justify-center"
35
+ >
36
+ <ng-icon name="matClose"></ng-icon>
37
+ </button>
38
+ </div>
25
39
  <div class="border-l absolute border-gray-200 right-0 h-14 w-14">
26
40
  <gn-ui-button
27
41
  #inputBtn
28
42
  type="outline"
29
- extraClass="h-12 w-12 border-0 absolute right-1 top-1"
43
+ extraClass="h-12 w-12 border-0 absolute right-1 top-1 bg-white"
30
44
  (buttonClick)="searchLayers()"
31
45
  >
32
46
  <ng-icon name="iconoirSearch"></ng-icon>
@@ -16,6 +16,7 @@ import {
16
16
  WmsLayerFull,
17
17
  WmtsLayer,
18
18
  } from '@camptocamp/ogc-client'
19
+ import { matClose } from '@ng-icons/material-icons/baseline'
19
20
 
20
21
  marker(`service.metadata.search`)
21
22
  marker(`service.metadata.capabilities.title`)
@@ -48,6 +49,7 @@ marker(`service.metadata.capabilities.attribution`)
48
49
  provideIcons({
49
50
  iconoirSearch,
50
51
  matInfoOutline,
52
+ matClose,
51
53
  }),
52
54
  ],
53
55
  templateUrl: './service-capabilities.component.html',
@@ -104,6 +106,12 @@ export class ServiceCapabilitiesComponent implements OnInit {
104
106
  }
105
107
  }
106
108
 
109
+ clearSearch() {
110
+ this.searchActive = false
111
+ this.searchQuery = ''
112
+ this.filteredLayers = this.availableLayers
113
+ }
114
+
107
115
  async loadLayers() {
108
116
  if (
109
117
  this.apiLinks.length > 0 &&
@@ -176,7 +184,7 @@ export class ServiceCapabilitiesComponent implements OnInit {
176
184
  }
177
185
 
178
186
  getExtraClass(layerItem) {
179
- return layerItem.title === this.selectedLayer?.title
187
+ return layerItem === this.selectedLayer
180
188
  ? `h-8 rounded-lg bg-primary-darker text-white hover:text-primary-darker hover:bg-white`
181
189
  : `h-8 rounded-lg`
182
190
  }
@@ -15,6 +15,7 @@ import { provideNgIconsConfig } from '@ng-icons/core'
15
15
  import { TranslateModule } from '@ngx-translate/core'
16
16
  import { AvatarComponent } from './avatar/avatar.component'
17
17
  import { ImageInputComponent } from './image-input/image-input.component'
18
+ import { GeoDataBadgeComponent } from './geo-data-badge/geo-data-badge.component'
18
19
  import { MarkdownParserComponent } from './markdown-parser/markdown-parser.component'
19
20
  import { KindBadgeComponent } from './kind-badge/kind-badge.component'
20
21
  import { ThumbnailComponent } from './thumbnail/thumbnail.component'
@@ -23,6 +24,7 @@ import { UserPreviewComponent } from './user-preview/user-preview.component'
23
24
  import { ApplicationBannerComponent } from './application-banner/application-banner.component'
24
25
  import { InternalLinkCardComponent } from './internal-link-card/internal-link-card.component'
25
26
  import { ServiceCapabilitiesComponent } from './service-capabilities/service-capabilities.component'
27
+ import { ScrollingModule } from '@angular/cdk/scrolling'
26
28
  @NgModule({
27
29
  imports: [
28
30
  CommonModule,
@@ -47,6 +49,8 @@ import { ServiceCapabilitiesComponent } from './service-capabilities/service-cap
47
49
  InternalLinkCardComponent,
48
50
  ServiceCapabilitiesComponent,
49
51
  KindBadgeComponent,
52
+ GeoDataBadgeComponent,
53
+ ScrollingModule,
50
54
  ],
51
55
  providers: [
52
56
  provideNgIconsConfig({
@@ -64,6 +68,7 @@ import { ServiceCapabilitiesComponent } from './service-capabilities/service-cap
64
68
  InternalLinkCardComponent,
65
69
  ServiceCapabilitiesComponent,
66
70
  KindBadgeComponent,
71
+ GeoDataBadgeComponent,
67
72
  ],
68
73
  })
69
74
  export class UiElementsModule {}
@@ -79,7 +79,7 @@
79
79
  <mat-option
80
80
  *ngFor="let suggestion of suggestions$ | async"
81
81
  [value]="suggestion"
82
- class="p-2 suggestion"
82
+ class="p-2 suggestion text-start"
83
83
  >
84
84
  {{ displayWithFnInternal(suggestion) }}
85
85
  </mat-option>
@@ -1,8 +1,7 @@
1
- <div class="inline-block relative align-middle" style="line-height: 0.7em">
1
+ <div class="inline-block relative align-middle">
2
2
  <gn-ui-button
3
3
  [type]="'outline'"
4
4
  [disabled]="disabled"
5
- class="-m-[8px] p-[8px]"
6
5
  (buttonClick)="toggle($event)"
7
6
  [ngClass]="{
8
7
  enabled: toggled,
@@ -1,5 +1,6 @@
1
1
  export * from './lib/anchor-link/anchor-link.directive'
2
2
  export * from './lib/carousel/carousel.component'
3
+ export * from './lib/cell-popin/cell-popin.component'
3
4
  export * from './lib/expandable-panel-button/expandable-panel-button.component'
4
5
  export * from './lib/expandable-panel/expandable-panel.component'
5
6
  export * from './lib/form-field-wrapper/form-field-wrapper.component'
@@ -0,0 +1,40 @@
1
+ <div
2
+ class="h-full flex items-center justify-center"
3
+ cdkOverlayOrigin
4
+ #anchorRef
5
+ #trigger="cdkOverlayOrigin"
6
+ [class]="extraClass"
7
+ data-cy="cell-popin"
8
+ >
9
+ <ng-content select="[cellContent]"></ng-content>
10
+ <ng-template
11
+ *ngIf="activePopin"
12
+ cdkConnectedOverlay
13
+ [cdkConnectedOverlayPush]="false"
14
+ [cdkConnectedOverlayOrigin]="trigger"
15
+ [cdkConnectedOverlayOpen]="isOpen"
16
+ [cdkConnectedOverlayPositions]="overlayPositions"
17
+ [cdkConnectedOverlayWidth]="'auto'"
18
+ [cdkConnectedOverlayFlexibleDimensions]="true"
19
+ [cdkConnectedOverlayGrowAfterOpen]="true"
20
+ (detach)="closeOverlay()"
21
+ >
22
+ <div
23
+ *ngIf="activePopin && isVisible"
24
+ class="bg-white shadow-lg border border-gray-300 relative"
25
+ data-cy="cell-popin-content"
26
+ >
27
+ <ng-content select="[popinContent]"></ng-content>
28
+ <gn-ui-button
29
+ data-cy="cell-popin-close"
30
+ [style.--gn-ui-button-background]="'bg-transparent'"
31
+ class="absolute top-2 right-2"
32
+ type="light"
33
+ (buttonClick)="closeOverlay()"
34
+ extraClass="w-10 h-8 px-1"
35
+ >
36
+ <ng-icon name="iconoirReduce" size="24"></ng-icon>
37
+ </gn-ui-button>
38
+ </div>
39
+ </ng-template>
40
+ </div>