geonetwork-ui 2.2.0-dev.e0d0f7a1 → 2.2.0-dev.eaf94daa

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 (249) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +36 -2
  3. package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  7. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  8. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  9. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  10. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  11. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
  12. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
  13. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
  14. package/esm2022/libs/feature/map/src/index.mjs +2 -1
  15. package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
  16. package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
  17. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +17 -3
  18. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
  19. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
  20. package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
  21. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
  22. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
  23. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  24. package/esm2022/libs/feature/search/src/index.mjs +4 -1
  25. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
  26. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  27. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
  28. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  29. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  30. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  31. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  32. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
  33. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
  34. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  35. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  36. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
  37. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +3 -3
  38. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
  39. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  40. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +3 -1
  41. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  42. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  43. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -2
  44. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
  45. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  46. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
  47. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +8 -3
  48. package/esm2022/libs/ui/layout/src/index.mjs +3 -1
  49. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
  50. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
  51. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
  52. package/esm2022/libs/ui/search/src/index.mjs +1 -2
  53. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
  54. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  55. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
  56. package/esm2022/translations/de.json +5 -3
  57. package/esm2022/translations/en.json +6 -4
  58. package/esm2022/translations/es.json +5 -3
  59. package/esm2022/translations/fr.json +6 -4
  60. package/esm2022/translations/it.json +5 -3
  61. package/esm2022/translations/nl.json +5 -3
  62. package/esm2022/translations/pt.json +5 -3
  63. package/fesm2022/geonetwork-ui.mjs +586 -454
  64. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +1 -0
  66. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  67. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
  69. package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
  70. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
  71. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
  72. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +10 -5
  73. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  74. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  75. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  76. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  77. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  78. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  79. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  81. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  82. package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
  83. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  84. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
  85. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
  86. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
  87. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  88. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
  89. package/libs/feature/map/src/index.d.ts +1 -0
  90. package/libs/feature/map/src/index.d.ts.map +1 -1
  91. package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
  92. package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
  93. package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
  94. package/libs/feature/map/src/lib/feature-map.module.d.ts +13 -12
  95. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  96. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
  97. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
  98. package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
  99. package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
  100. package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
  101. package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
  102. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
  103. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  104. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
  105. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  106. package/libs/feature/search/src/index.d.ts +3 -0
  107. package/libs/feature/search/src/index.d.ts.map +1 -1
  108. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
  109. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  110. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  111. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  112. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
  113. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  114. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  115. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  116. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  117. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  118. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  119. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  120. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
  121. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  122. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  123. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  124. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  125. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
  126. package/libs/ui/elements/src/index.d.ts +1 -0
  127. package/libs/ui/elements/src/index.d.ts.map +1 -1
  128. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  129. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +1 -1
  130. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  131. package/libs/ui/inputs/src/index.d.ts +1 -0
  132. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  133. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
  134. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
  135. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +2 -1
  136. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  137. package/libs/ui/layout/src/index.d.ts +2 -0
  138. package/libs/ui/layout/src/index.d.ts.map +1 -1
  139. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
  140. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
  141. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
  142. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
  143. package/libs/ui/search/src/index.d.ts +0 -1
  144. package/libs/ui/search/src/index.d.ts.map +1 -1
  145. package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
  146. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  147. package/libs/util/i18n/src/index.d.ts +0 -1
  148. package/libs/util/i18n/src/index.d.ts.map +1 -1
  149. package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
  150. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  151. package/package.json +4 -1
  152. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +3 -0
  153. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +43 -0
  154. package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
  155. package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
  156. package/src/libs/common/domain/src/lib/index.ts +2 -0
  157. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -7
  158. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  159. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  160. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  161. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  162. package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
  163. package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
  164. package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
  165. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
  166. package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
  167. package/src/libs/feature/map/src/index.ts +1 -0
  168. package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
  169. package/src/libs/feature/map/src/lib/feature-map.module.ts +8 -0
  170. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
  171. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
  172. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
  173. package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
  174. package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
  175. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
  176. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
  177. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  178. package/src/libs/feature/search/src/index.ts +3 -0
  179. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
  180. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  181. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
  182. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  183. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  184. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  185. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  186. package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
  187. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
  188. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
  189. package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
  190. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  191. package/src/libs/ui/elements/src/index.ts +1 -0
  192. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
  193. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +3 -2
  194. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +52 -52
  195. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
  196. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -0
  197. package/src/libs/ui/inputs/src/index.ts +1 -0
  198. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  199. package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
  200. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
  201. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  202. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
  203. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -0
  204. package/src/libs/ui/layout/src/index.ts +2 -0
  205. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
  206. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
  207. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
  208. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
  209. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
  210. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
  211. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
  212. package/src/libs/ui/search/src/index.ts +0 -1
  213. package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
  214. package/src/libs/util/i18n/src/index.ts +0 -1
  215. package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
  216. package/translations/de.json +5 -3
  217. package/translations/en.json +6 -4
  218. package/translations/es.json +5 -3
  219. package/translations/fr.json +6 -4
  220. package/translations/it.json +5 -3
  221. package/translations/nl.json +5 -3
  222. package/translations/pt.json +5 -3
  223. package/translations/sk.json +5 -3
  224. package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
  225. package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
  226. package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
  227. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  228. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  229. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  230. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
  231. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
  232. package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
  233. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
  234. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
  235. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  236. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  237. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  238. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  239. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  240. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  241. package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
  242. package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
  243. package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
  244. package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
  245. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  246. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  247. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
  248. /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
  249. /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
@@ -1,18 +1,18 @@
1
1
  import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
2
2
  import format from 'date-fns/format';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ElementRef, ViewChildren } from '@angular/core';
4
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
5
5
  import * as i1 from '@angular/common/http';
6
6
  import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
7
7
  import * as i1$1 from '@ngx-translate/core';
8
- import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService, TranslateFakeCompiler, TranslateDefaultParser, FakeMissingTranslationHandler } from '@ngx-translate/core';
8
+ import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
9
9
  import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
10
10
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
11
11
  import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take, withLatestFrom, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
12
12
  import { marker } from '@biesbjerg/ngx-translate-extract-marker';
13
13
  import * as i1$3 from '@angular/common';
14
14
  import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
15
- import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, tap as tap$2, fromEvent, timer, from, Subscription, animationFrameScheduler, firstValueFrom, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, EMPTY, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
15
+ import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
16
16
  import { valid, coerce, satisfies, ltr } from 'semver';
17
17
  import * as i1$2 from '@ngrx/store';
18
18
  import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
@@ -32,8 +32,8 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
32
32
  import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
33
33
  import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
34
34
  import WMTSCapabilities from 'ol/format/WMTSCapabilities';
35
- import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
36
35
  import chroma from 'chroma-js';
36
+ import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
37
37
  import { register, fromEPSGCode } from 'ol/proj/proj4';
38
38
  import proj4 from 'proj4/dist/proj4';
39
39
  import * as TOML from '@ltd/j-toml';
@@ -78,6 +78,8 @@ import * as i1$8 from '@ngrx/effects';
78
78
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
79
79
  import tippy from 'tippy.js';
80
80
  import { valid as valid$1 } from 'geojson-validation';
81
+ import { Polygon } from 'ol/geom';
82
+ import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
81
83
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
82
84
  import * as i4$1 from '@angular/cdk/scrolling';
83
85
  import { ScrollingModule } from '@angular/cdk/scrolling';
@@ -1414,6 +1416,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
1414
1416
  const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
1415
1417
  const toDate = (field) => new Date(field);
1416
1418
  const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
1419
+ const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
1417
1420
  const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
1418
1421
  const getAsUrl = (field, location = window.location.toString()) => {
1419
1422
  // an empty string is not a valid url, even though it could be considered an empty path to the root
@@ -16540,133 +16543,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
16540
16543
  }]
16541
16544
  }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
16542
16545
 
16543
- // IMPORTANT:
16544
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
16545
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
16546
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
16547
- class TestTranslateLoader extends TranslateLoader {
16548
- constructor(_translations = {}) {
16549
- super();
16550
- this._translations = _translations;
16551
- }
16552
- /**
16553
- * Returns an {Observable} of translations for the specified language. If the
16554
- * language is not recognized, an empty translations object will be returned.
16555
- *
16556
- * @param language the language for which the translations should be retrieved.
16557
- * @returns the translations for the specified
16558
- * language or an empty set of translations if the language is not recognized.
16559
- */
16560
- getTranslation(language) {
16561
- return of(this._translations[language] || {});
16562
- }
16563
- }
16564
-
16565
- // IMPORTANT:
16566
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
16567
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
16568
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
16569
- /**
16570
- * The TranslateTestingModule provides the {TranslateModule} as well as a
16571
- * {TranslateService} configured to return translations specific for the
16572
- * test environment.
16573
- *
16574
- * @export
16575
- */
16576
- class TranslateTestingModule {
16577
- constructor() {
16578
- this._translations = {};
16579
- }
16580
- static withTranslations(languageOrTranslations, translations) {
16581
- const translateTestingModule = new TranslateTestingModule();
16582
- if (typeof languageOrTranslations === 'string') {
16583
- return translateTestingModule.withTranslations(languageOrTranslations, translations);
16584
- }
16585
- return translateTestingModule.withTranslations(languageOrTranslations);
16586
- }
16587
- get ngModule() {
16588
- return TranslateTestingModule;
16589
- }
16590
- get providers() {
16591
- const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
16592
- return [
16593
- {
16594
- provide: TranslateService,
16595
- useValue: translateService,
16596
- },
16597
- ];
16598
- }
16599
- withTranslations(languageOrTranslations, translations) {
16600
- if (typeof languageOrTranslations === 'string' && translations) {
16601
- this.addTranslations(languageOrTranslations, translations);
16602
- this._defaultLanguage = languageOrTranslations;
16603
- }
16604
- else if (languageOrTranslations) {
16605
- Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
16606
- }
16607
- return this;
16608
- }
16609
- /**
16610
- * Updates the {TranslationTestingModule} to provide a {TranslateService} that will
16611
- * use the provided {TranslateCompiler} to translate the test translations.
16612
- *
16613
- * @example
16614
- *
16615
- * TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
16616
- * .withCompiler(new TranslateMessageFormatCompiler());
16617
- *
16618
- * @param compiler the compiler to use to compile the test translations.
16619
- * @returns the instance that can be used to chain additional configuration.
16620
- * @memberof TranslateTestingModule
16621
- */
16622
- withCompiler(compiler) {
16623
- this._compiler = compiler;
16624
- return this;
16625
- }
16626
- /**
16627
- * Updates the {TranslateTestingModule} to use the provided language as the default language.
16628
- * By default, the default language will be set to the first language provided.
16629
- *
16630
- * @example
16631
- *
16632
- * TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
16633
- * .withTranslations('en', ENGLISH_TRANSLATIONS)
16634
- * .withDefaultLanguage('en');
16635
- *
16636
- * @param language the new default language for translations.
16637
- * @returns the instance that can be used to chain additional configuration.
16638
- * @memberof TranslateTestingModule
16639
- */
16640
- withDefaultLanguage(language) {
16641
- this._defaultLanguage = language || this._defaultLanguage;
16642
- return this;
16643
- }
16644
- addTranslations(language, translations) {
16645
- if (!this._defaultLanguage) {
16646
- this._defaultLanguage = language;
16647
- }
16648
- if (this._translations[language]) {
16649
- this._translations[language] = {
16650
- ...this._translations[language],
16651
- ...translations,
16652
- };
16653
- }
16654
- else {
16655
- this._translations[language] = translations;
16656
- }
16657
- }
16658
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16659
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
16660
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
16661
- }
16662
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
16663
- type: NgModule,
16664
- args: [{
16665
- imports: [TranslateModule],
16666
- exports: [TranslateModule],
16667
- }]
16668
- }] });
16669
-
16670
16546
  var dropFile$6 = "Datei ablegen";
16671
16547
  var next$6 = "weiter";
16672
16548
  var previous$6 = "zurück";
@@ -16689,20 +16565,21 @@ var de = {
16689
16565
  "chart.type.line": "Liniendiagramm",
16690
16566
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
16691
16567
  "chart.type.pie": "Kreisdiagramm",
16568
+ "dashboard.createRecord": "",
16692
16569
  "dashboard.labels.mySpace": "Mein Bereich",
16693
16570
  "dashboard.records.all": "Katalog",
16694
16571
  "dashboard.records.myDraft": "Meine Entwürfe",
16695
16572
  "dashboard.records.myLibrary": "Meine Bibliothek",
16696
16573
  "dashboard.records.myOrg": "Meine Organisation",
16697
16574
  "dashboard.records.myRecords": "Meine Datensätze",
16698
- "dashboard.records.noRecord": "Kein Datensatz für diese Organisation",
16699
- "dashboard.records.noUser": "Keine Benutzer für diese Organisation",
16700
16575
  "dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
16701
16576
  "dashboard.records.search": "Suche nach \"{searchText}\"",
16702
16577
  "dashboard.records.userDetail": "Name",
16703
16578
  "dashboard.records.userEmail": "E-Mail",
16704
16579
  "dashboard.records.username": "Benutzername",
16705
16580
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
16581
+ "dashboard.results.listMetadata": "",
16582
+ "dashboard.results.listResources": "",
16706
16583
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
16707
16584
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
16708
16585
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -16850,6 +16727,7 @@ var de = {
16850
16727
  "map.add.layer.wfs": "Aus WFS",
16851
16728
  "map.add.layer.wms": "Aus WMS",
16852
16729
  "map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
16730
+ "map.geocoding.placeholder": "",
16853
16731
  "map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
16854
16732
  "map.layer.add": "Hinzufügen",
16855
16733
  "map.layers.available": "Verfügbare Layer",
@@ -16893,7 +16771,6 @@ var de = {
16893
16771
  "record.metadata.author": "Autor",
16894
16772
  "record.metadata.catalog": "Katalog",
16895
16773
  "record.metadata.contact": "Kontakt",
16896
- "record.metadata.createdOn": "Erstellt am",
16897
16774
  "record.metadata.details": "Technische Informationen",
16898
16775
  "record.metadata.download": "Downloads",
16899
16776
  "record.metadata.formats": "Formate",
@@ -16926,6 +16803,7 @@ var de = {
16926
16803
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
16927
16804
  "record.metadata.related": "Ähnliche Datensätze",
16928
16805
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16806
+ "record.metadata.status": "",
16929
16807
  "record.metadata.themes": "Kategorien",
16930
16808
  "record.metadata.title": "Titel",
16931
16809
  "record.metadata.type": "Geographischer Datensatz",
@@ -17027,20 +16905,21 @@ var en = {
17027
16905
  "chart.type.line": "line chart",
17028
16906
  "chart.type.lineSmooth": "smooth line chart",
17029
16907
  "chart.type.pie": "pie chart",
16908
+ "dashboard.createRecord": "New record",
17030
16909
  "dashboard.labels.mySpace": "My space",
17031
- "dashboard.records.all": "Catalog",
16910
+ "dashboard.records.all": "Metadata records",
17032
16911
  "dashboard.records.myDraft": "My drafts",
17033
16912
  "dashboard.records.myLibrary": "My library",
17034
16913
  "dashboard.records.myOrg": "Organization",
17035
16914
  "dashboard.records.myRecords": "My Records",
17036
- "dashboard.records.noRecord": "No record for this organization",
17037
- "dashboard.records.noUser": "No users for this organization",
17038
16915
  "dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
17039
16916
  "dashboard.records.search": "Search for \"{searchText}\"",
17040
16917
  "dashboard.records.userDetail": "Name",
17041
16918
  "dashboard.records.userEmail": "Email",
17042
16919
  "dashboard.records.username": "Username",
17043
16920
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
16921
+ "dashboard.results.listMetadata": "Show metadata",
16922
+ "dashboard.results.listResources": "Show resources",
17044
16923
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
17045
16924
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
17046
16925
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
@@ -17188,6 +17067,7 @@ var en = {
17188
17067
  "map.add.layer.wfs": "From WFS",
17189
17068
  "map.add.layer.wms": "From WMS",
17190
17069
  "map.addFromFile.placeholder": "Click or drop a file here",
17070
+ "map.geocoding.placeholder": "Search for a place",
17191
17071
  "map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
17192
17072
  "map.layer.add": "Add",
17193
17073
  "map.layers.available": "Available Layers",
@@ -17231,7 +17111,6 @@ var en = {
17231
17111
  "record.metadata.author": "Author",
17232
17112
  "record.metadata.catalog": "Catalog",
17233
17113
  "record.metadata.contact": "Contact",
17234
- "record.metadata.createdOn": "Created on",
17235
17114
  "record.metadata.details": "Technical information",
17236
17115
  "record.metadata.download": "Downloads",
17237
17116
  "record.metadata.formats": "Formats",
@@ -17264,6 +17143,7 @@ var en = {
17264
17143
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
17265
17144
  "record.metadata.related": "Related records",
17266
17145
  "record.metadata.sheet": "Original metadata",
17146
+ "record.metadata.status": "Status",
17267
17147
  "record.metadata.themes": "Categories",
17268
17148
  "record.metadata.title": "Title",
17269
17149
  "record.metadata.type": "Geographical dataset",
@@ -17365,20 +17245,21 @@ var es = {
17365
17245
  "chart.type.line": "gráfico de líneas",
17366
17246
  "chart.type.lineSmooth": "gráfico de líneas suave",
17367
17247
  "chart.type.pie": "gráfico circular",
17248
+ "dashboard.createRecord": "",
17368
17249
  "dashboard.labels.mySpace": "Mi espacio",
17369
17250
  "dashboard.records.all": "Catálogo",
17370
17251
  "dashboard.records.myDraft": "Mis borradores",
17371
17252
  "dashboard.records.myLibrary": "Mi biblioteca",
17372
17253
  "dashboard.records.myOrg": "Organización",
17373
17254
  "dashboard.records.myRecords": "Mis Registros",
17374
- "dashboard.records.noRecord": "",
17375
- "dashboard.records.noUser": "",
17376
17255
  "dashboard.records.publishedRecords": "",
17377
17256
  "dashboard.records.search": "Buscar \"{searchText}\"",
17378
17257
  "dashboard.records.userDetail": "",
17379
17258
  "dashboard.records.userEmail": "",
17380
17259
  "dashboard.records.username": "",
17381
17260
  "dashboard.records.users": "",
17261
+ "dashboard.results.listMetadata": "",
17262
+ "dashboard.results.listResources": "",
17382
17263
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
17383
17264
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
17384
17265
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -17526,6 +17407,7 @@ var es = {
17526
17407
  "map.add.layer.wfs": "",
17527
17408
  "map.add.layer.wms": "",
17528
17409
  "map.addFromFile.placeholder": "",
17410
+ "map.geocoding.placeholder": "",
17529
17411
  "map.help.addFromFile": "",
17530
17412
  "map.layer.add": "",
17531
17413
  "map.layers.available": "",
@@ -17569,7 +17451,6 @@ var es = {
17569
17451
  "record.metadata.author": "",
17570
17452
  "record.metadata.catalog": "",
17571
17453
  "record.metadata.contact": "",
17572
- "record.metadata.createdOn": "",
17573
17454
  "record.metadata.details": "",
17574
17455
  "record.metadata.download": "",
17575
17456
  "record.metadata.formats": "",
@@ -17602,6 +17483,7 @@ var es = {
17602
17483
  "record.metadata.quality.updateFrequency.success": "",
17603
17484
  "record.metadata.related": "",
17604
17485
  "record.metadata.sheet": "",
17486
+ "record.metadata.status": "",
17605
17487
  "record.metadata.themes": "",
17606
17488
  "record.metadata.title": "",
17607
17489
  "record.metadata.type": "",
@@ -17703,20 +17585,21 @@ var fr = {
17703
17585
  "chart.type.line": "ligne",
17704
17586
  "chart.type.lineSmooth": "ligne lisse",
17705
17587
  "chart.type.pie": "camembert",
17588
+ "dashboard.createRecord": "",
17706
17589
  "dashboard.labels.mySpace": "Mon espace",
17707
17590
  "dashboard.records.all": "Catalogue",
17708
17591
  "dashboard.records.myDraft": "Mes brouillons",
17709
17592
  "dashboard.records.myLibrary": "Ma bibliothèque",
17710
17593
  "dashboard.records.myOrg": "Mon organisation",
17711
17594
  "dashboard.records.myRecords": "Mes fiches publiées",
17712
- "dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
17713
- "dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
17714
17595
  "dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
17715
17596
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
17716
17597
  "dashboard.records.userDetail": "Nom",
17717
17598
  "dashboard.records.userEmail": "Email",
17718
17599
  "dashboard.records.username": "Nom d'utilisateur",
17719
17600
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
17601
+ "dashboard.results.listMetadata": "",
17602
+ "dashboard.results.listResources": "",
17720
17603
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
17721
17604
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
17722
17605
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
@@ -17798,7 +17681,7 @@ var fr = {
17798
17681
  "datahub.header.popularRecords": "Les plus appréciées",
17799
17682
  "datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
17800
17683
  "datahub.news.contact.contactus": "Contactez-nous",
17801
- "datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont la pour vous répondre.</p>",
17684
+ "datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont pour vous répondre.</p>",
17802
17685
  "datahub.news.contact.title": "Un besoin spécifique ?",
17803
17686
  "datahub.news.feed": "Fil d'activité",
17804
17687
  "datahub.news.figures": "Quelques chiffres",
@@ -17864,6 +17747,7 @@ var fr = {
17864
17747
  "map.add.layer.wfs": "",
17865
17748
  "map.add.layer.wms": "",
17866
17749
  "map.addFromFile.placeholder": "",
17750
+ "map.geocoding.placeholder": "",
17867
17751
  "map.help.addFromFile": "",
17868
17752
  "map.layer.add": "",
17869
17753
  "map.layers.available": "",
@@ -17907,7 +17791,6 @@ var fr = {
17907
17791
  "record.metadata.author": "Auteur",
17908
17792
  "record.metadata.catalog": "Catalogue",
17909
17793
  "record.metadata.contact": "Contact",
17910
- "record.metadata.createdOn": "Créé le",
17911
17794
  "record.metadata.details": "Informations techniques",
17912
17795
  "record.metadata.download": "Téléchargements",
17913
17796
  "record.metadata.formats": "Formats",
@@ -17940,6 +17823,7 @@ var fr = {
17940
17823
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17941
17824
  "record.metadata.related": "Voir aussi",
17942
17825
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
17826
+ "record.metadata.status": "",
17943
17827
  "record.metadata.themes": "Catégories",
17944
17828
  "record.metadata.title": "Titre",
17945
17829
  "record.metadata.type": "Donnée géographique",
@@ -18041,20 +17925,21 @@ var it = {
18041
17925
  "chart.type.line": "grafico a linee",
18042
17926
  "chart.type.lineSmooth": "grafico a linea liscia",
18043
17927
  "chart.type.pie": "grafico a torta",
17928
+ "dashboard.createRecord": "",
18044
17929
  "dashboard.labels.mySpace": "Il mio spazio",
18045
17930
  "dashboard.records.all": "Catalogo",
18046
17931
  "dashboard.records.myDraft": "Le mie bozze",
18047
17932
  "dashboard.records.myLibrary": "La mia biblioteca",
18048
17933
  "dashboard.records.myOrg": "La mia organizzazione",
18049
17934
  "dashboard.records.myRecords": "I miei dati",
18050
- "dashboard.records.noRecord": "Nessun dati per questa organizzazione",
18051
- "dashboard.records.noUser": "Nessun utente per questa organizzazione",
18052
17935
  "dashboard.records.publishedRecords": "dati pubblicati",
18053
17936
  "dashboard.records.search": "Risultati per \"{searchText}\"",
18054
17937
  "dashboard.records.userDetail": "Nome",
18055
17938
  "dashboard.records.userEmail": "Email",
18056
17939
  "dashboard.records.username": "Nome utente",
18057
17940
  "dashboard.records.users": "utenti",
17941
+ "dashboard.results.listMetadata": "",
17942
+ "dashboard.results.listResources": "",
18058
17943
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
18059
17944
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
18060
17945
  "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
@@ -18202,6 +18087,7 @@ var it = {
18202
18087
  "map.add.layer.wfs": "Da un WFS",
18203
18088
  "map.add.layer.wms": "Da un WMS",
18204
18089
  "map.addFromFile.placeholder": "",
18090
+ "map.geocoding.placeholder": "",
18205
18091
  "map.help.addFromFile": "",
18206
18092
  "map.layer.add": "",
18207
18093
  "map.layers.available": "",
@@ -18245,7 +18131,6 @@ var it = {
18245
18131
  "record.metadata.author": "Autore",
18246
18132
  "record.metadata.catalog": "Catalogo",
18247
18133
  "record.metadata.contact": "Contatto",
18248
- "record.metadata.createdOn": "Creato il",
18249
18134
  "record.metadata.details": "Informazioni tecniche",
18250
18135
  "record.metadata.download": "Download",
18251
18136
  "record.metadata.formats": "Formati",
@@ -18278,6 +18163,7 @@ var it = {
18278
18163
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18279
18164
  "record.metadata.related": "Vedi anche",
18280
18165
  "record.metadata.sheet": "Origine del metadata",
18166
+ "record.metadata.status": "",
18281
18167
  "record.metadata.themes": "Categorie",
18282
18168
  "record.metadata.title": "Titolo",
18283
18169
  "record.metadata.type": "Dati geografici",
@@ -18379,20 +18265,21 @@ var nl = {
18379
18265
  "chart.type.line": "lijndiagram",
18380
18266
  "chart.type.lineSmooth": "glad lijndiagram",
18381
18267
  "chart.type.pie": "cirkeldiagram",
18268
+ "dashboard.createRecord": "",
18382
18269
  "dashboard.labels.mySpace": "Mijn ruimte",
18383
18270
  "dashboard.records.all": "Catalogus",
18384
18271
  "dashboard.records.myDraft": "Mijn concepten",
18385
18272
  "dashboard.records.myLibrary": "Mijn bibliotheek",
18386
18273
  "dashboard.records.myOrg": "Organisatie",
18387
18274
  "dashboard.records.myRecords": "Mijn Records",
18388
- "dashboard.records.noRecord": "",
18389
- "dashboard.records.noUser": "",
18390
18275
  "dashboard.records.publishedRecords": "",
18391
18276
  "dashboard.records.search": "Zoeken naar \"{searchText}\"",
18392
18277
  "dashboard.records.userDetail": "",
18393
18278
  "dashboard.records.userEmail": "",
18394
18279
  "dashboard.records.username": "",
18395
18280
  "dashboard.records.users": "",
18281
+ "dashboard.results.listMetadata": "",
18282
+ "dashboard.results.listResources": "",
18396
18283
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
18397
18284
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
18398
18285
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -18540,6 +18427,7 @@ var nl = {
18540
18427
  "map.add.layer.wfs": "",
18541
18428
  "map.add.layer.wms": "",
18542
18429
  "map.addFromFile.placeholder": "",
18430
+ "map.geocoding.placeholder": "",
18543
18431
  "map.help.addFromFile": "",
18544
18432
  "map.layer.add": "",
18545
18433
  "map.layers.available": "",
@@ -18583,7 +18471,6 @@ var nl = {
18583
18471
  "record.metadata.author": "",
18584
18472
  "record.metadata.catalog": "",
18585
18473
  "record.metadata.contact": "",
18586
- "record.metadata.createdOn": "",
18587
18474
  "record.metadata.details": "",
18588
18475
  "record.metadata.download": "",
18589
18476
  "record.metadata.formats": "",
@@ -18616,6 +18503,7 @@ var nl = {
18616
18503
  "record.metadata.quality.updateFrequency.success": "",
18617
18504
  "record.metadata.related": "",
18618
18505
  "record.metadata.sheet": "",
18506
+ "record.metadata.status": "",
18619
18507
  "record.metadata.themes": "",
18620
18508
  "record.metadata.title": "",
18621
18509
  "record.metadata.type": "",
@@ -18717,20 +18605,21 @@ var pt = {
18717
18605
  "chart.type.line": "gráfico de linha",
18718
18606
  "chart.type.lineSmooth": "gráfico de linha suave",
18719
18607
  "chart.type.pie": "gráfico de pizza",
18608
+ "dashboard.createRecord": "",
18720
18609
  "dashboard.labels.mySpace": "Meu espaço",
18721
18610
  "dashboard.records.all": "Catálogo",
18722
18611
  "dashboard.records.myDraft": "Meus rascunhos",
18723
18612
  "dashboard.records.myLibrary": "Minha biblioteca",
18724
18613
  "dashboard.records.myOrg": "Organização",
18725
18614
  "dashboard.records.myRecords": "Meus Registros",
18726
- "dashboard.records.noRecord": "",
18727
- "dashboard.records.noUser": "",
18728
18615
  "dashboard.records.publishedRecords": "",
18729
18616
  "dashboard.records.search": "Buscar por \"{searchText}\"",
18730
18617
  "dashboard.records.userDetail": "",
18731
18618
  "dashboard.records.userEmail": "",
18732
18619
  "dashboard.records.username": "",
18733
18620
  "dashboard.records.users": "",
18621
+ "dashboard.results.listMetadata": "",
18622
+ "dashboard.results.listResources": "",
18734
18623
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
18735
18624
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
18736
18625
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -18878,6 +18767,7 @@ var pt = {
18878
18767
  "map.add.layer.wfs": "",
18879
18768
  "map.add.layer.wms": "",
18880
18769
  "map.addFromFile.placeholder": "",
18770
+ "map.geocoding.placeholder": "",
18881
18771
  "map.help.addFromFile": "",
18882
18772
  "map.layer.add": "",
18883
18773
  "map.layers.available": "",
@@ -18921,7 +18811,6 @@ var pt = {
18921
18811
  "record.metadata.author": "",
18922
18812
  "record.metadata.catalog": "",
18923
18813
  "record.metadata.contact": "",
18924
- "record.metadata.createdOn": "",
18925
18814
  "record.metadata.details": "",
18926
18815
  "record.metadata.download": "",
18927
18816
  "record.metadata.formats": "",
@@ -18954,6 +18843,7 @@ var pt = {
18954
18843
  "record.metadata.quality.updateFrequency.success": "",
18955
18844
  "record.metadata.related": "",
18956
18845
  "record.metadata.sheet": "",
18846
+ "record.metadata.status": "",
18957
18847
  "record.metadata.themes": "",
18958
18848
  "record.metadata.title": "",
18959
18849
  "record.metadata.type": "",
@@ -19205,6 +19095,40 @@ class Gn4FieldMapper {
19205
19095
  kind,
19206
19096
  };
19207
19097
  },
19098
+ geom: (output, source) => {
19099
+ const geoms = getAsArray(selectField(source, 'geom'));
19100
+ const shapes = getAsArray(selectField(source, 'shape'));
19101
+ const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
19102
+ const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
19103
+ return {
19104
+ ...output,
19105
+ spatialExtents: [
19106
+ ...spatialExtents,
19107
+ ...geoms.map((geom, index) => {
19108
+ const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
19109
+ const geometry = shapes[index] ?? geom;
19110
+ return {
19111
+ ...(description !== null ? { description } : null),
19112
+ geometry,
19113
+ };
19114
+ }),
19115
+ ],
19116
+ };
19117
+ },
19118
+ resourceTemporalDateRange: (output, source) => {
19119
+ const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
19120
+ return {
19121
+ ...output,
19122
+ temporalExtents: ranges.map((range) => {
19123
+ const start = selectField(range, 'gte');
19124
+ const end = selectField(range, 'lte');
19125
+ return {
19126
+ ...(start !== null ? { start: toDate(start) } : null),
19127
+ ...(end !== null ? { end: toDate(end) } : null),
19128
+ };
19129
+ }),
19130
+ };
19131
+ },
19208
19132
  };
19209
19133
  this.genericField = (output) => output;
19210
19134
  this.constraintField = (fieldName, output, source) => ({
@@ -20393,36 +20317,23 @@ class SelectionService {
20393
20317
  this.selectedRecordsIdentifiers$.next(filtered);
20394
20318
  }
20395
20319
  selectRecords(records) {
20396
- const newIds = [];
20397
- records.map((record) => {
20398
- newIds.push(record.uniqueIdentifier);
20399
- });
20400
- const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
20401
- return apiResponse.pipe(tap$2(() => {
20320
+ const newIds = records.map((record) => record.uniqueIdentifier);
20321
+ this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
20402
20322
  this.addIdsToSelected(newIds);
20403
- }), map$2(() => undefined));
20323
+ });
20404
20324
  }
20405
20325
  deselectRecords(records) {
20406
- const idsToBeRemoved = [];
20407
- records.map((record) => {
20408
- idsToBeRemoved.push(record.uniqueIdentifier);
20409
- });
20410
- const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
20411
- return apiResponse.pipe(tap$2(() => {
20326
+ const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
20327
+ this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
20412
20328
  this.removeIdsFromSelected(idsToBeRemoved);
20413
- }), map$2(() => undefined));
20414
- }
20415
- clearSelection() {
20416
- const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
20417
- let currentSelection;
20418
- this.subscription = currentSelectedResponse.subscribe((value) => {
20419
- currentSelection = [...value];
20420
20329
  });
20421
- this.selectionsApi.clear(BUCKET_ID, currentSelection);
20422
- const apiResponse = this.selectionsApi.clear(BUCKET_ID, currentSelection);
20423
- return apiResponse.pipe(tap$2(() => {
20330
+ }
20331
+ async clearSelection() {
20332
+ const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
20333
+ const currentSelection = Array.from(response);
20334
+ this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
20424
20335
  this.removeIdsFromSelected(currentSelection);
20425
- }), map$2(() => undefined));
20336
+ });
20426
20337
  }
20427
20338
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
20428
20339
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
@@ -20740,6 +20651,8 @@ const defaultMapOptions = {
20740
20651
  };
20741
20652
  const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
20742
20653
 
20654
+ const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
20655
+
20743
20656
  var MapContextLayerTypeEnum;
20744
20657
  (function (MapContextLayerTypeEnum) {
20745
20658
  MapContextLayerTypeEnum["XYZ"] = "xyz";
@@ -21115,9 +21028,15 @@ const FORMATS = {
21115
21028
  color: '#328556',
21116
21029
  mimeTypes: ['x-gis/x-shapefile'],
21117
21030
  },
21031
+ gml: {
21032
+ extensions: ['gml'],
21033
+ priority: 5,
21034
+ color: '#c92bce',
21035
+ mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
21036
+ },
21118
21037
  kml: {
21119
21038
  extensions: ['kml', 'kmz'],
21120
- priority: 5,
21039
+ priority: 6,
21121
21040
  color: '#348009',
21122
21041
  mimeTypes: [
21123
21042
  'application/vnd.google-earth.kml+xml',
@@ -21126,34 +21045,40 @@ const FORMATS = {
21126
21045
  },
21127
21046
  gpkg: {
21128
21047
  extensions: ['gpkg', 'geopackage'],
21129
- priority: 6,
21048
+ priority: 7,
21130
21049
  color: '#ea79ba',
21131
21050
  mimeTypes: ['application/geopackage+sqlite3'],
21132
21051
  },
21133
21052
  zip: {
21134
21053
  extensions: ['zip', 'tar.gz'],
21135
- priority: 7,
21054
+ priority: 8,
21136
21055
  color: '#f2bb3a',
21137
21056
  mimeTypes: ['application/zip', 'application/x-zip'],
21138
21057
  },
21139
21058
  pdf: {
21140
21059
  extensions: ['pdf'],
21141
- priority: 8,
21060
+ priority: 9,
21142
21061
  color: '#db544a',
21143
21062
  mimeTypes: ['application/pdf'],
21144
21063
  },
21145
21064
  jpg: {
21146
21065
  extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
21147
- priority: 8,
21066
+ priority: 9,
21148
21067
  color: '#673ab7',
21149
21068
  mimeTypes: ['image/jpg'],
21150
21069
  },
21151
21070
  svg: {
21152
21071
  extensions: ['svg'],
21153
- priority: 9,
21072
+ priority: 10,
21154
21073
  color: '#d98294',
21155
21074
  mimeTypes: ['image/svg+xml'],
21156
21075
  },
21076
+ dxf: {
21077
+ extensions: ['dxf'],
21078
+ priority: 11,
21079
+ color: '#de630b',
21080
+ mimeTypes: ['application/x-dxf', 'image/x-dxf'],
21081
+ },
21157
21082
  };
21158
21083
  function getFormatPriority(linkFormat) {
21159
21084
  for (const format in FORMATS) {
@@ -21170,14 +21095,18 @@ function getFormatPriority(linkFormat) {
21170
21095
  function getLinkPriority(link) {
21171
21096
  return getFormatPriority(getFileFormat(link));
21172
21097
  }
21173
- function extensionToFormat(extension) {
21174
- for (const format in FORMATS) {
21175
- for (const alias of FORMATS[format].extensions) {
21176
- if (alias === extension.toLowerCase())
21177
- return format;
21098
+ function getFileFormatFromServiceOutput(serviceOutput) {
21099
+ function formatMatcher(format) {
21100
+ const output = serviceOutput.toLowerCase();
21101
+ return (format.extensions.some((extension) => output.includes(extension)) ||
21102
+ format.mimeTypes.some((mimeType) => output.includes(mimeType)));
21103
+ }
21104
+ for (const formatName in FORMATS) {
21105
+ if (formatMatcher(FORMATS[formatName])) {
21106
+ return formatName;
21178
21107
  }
21179
21108
  }
21180
- return undefined;
21109
+ return null;
21181
21110
  }
21182
21111
  function getFileFormat(link) {
21183
21112
  if ('mimeType' in link) {
@@ -21318,72 +21247,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
21318
21247
  }]
21319
21248
  }] });
21320
21249
 
21321
- const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
21322
-
21323
- class MapUtilsWMSService {
21324
- constructor(proxy) {
21325
- this.proxy = proxy;
21326
- }
21327
- getCapabilities(layer) {
21328
- return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
21329
- }
21330
- getLayerFull(layer) {
21331
- return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
21332
- }
21333
- getLayerLonLatBBox(layer) {
21334
- return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
21335
- }
21336
- async getLonLatBBox(wmsLayerFull) {
21337
- const { boundingBoxes } = wmsLayerFull;
21338
- const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
21339
- if (lonLatCRS) {
21340
- return boundingBoxes[lonLatCRS];
21341
- }
21342
- else {
21343
- const availableEPSGCode = Object.keys(boundingBoxes)[0];
21344
- register(proj4);
21345
- const proj = await fromEPSGCode(availableEPSGCode);
21346
- proj4.defs(availableEPSGCode, proj);
21347
- const bboxWithFiniteNumbers = [
21348
- parseFloat(boundingBoxes[availableEPSGCode][0]),
21349
- parseFloat(boundingBoxes[availableEPSGCode][1]),
21350
- parseFloat(boundingBoxes[availableEPSGCode][2]),
21351
- parseFloat(boundingBoxes[availableEPSGCode][3]),
21352
- ];
21353
- const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
21354
- return extent;
21355
- }
21356
- }
21357
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
21358
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
21359
- }
21360
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
21361
- type: Injectable,
21362
- args: [{
21363
- providedIn: 'root',
21364
- }]
21365
- }], ctorParameters: function () { return [{ type: ProxyService }]; } });
21366
-
21367
21250
  const FEATURE_PROJECTION = 'EPSG:3857';
21368
21251
  const DATA_PROJECTION = 'EPSG:4326';
21252
+ const GEOJSON = new GeoJSON();
21369
21253
  class MapUtilsService {
21370
- constructor(http, wmsUtils) {
21254
+ constructor(http, proxy) {
21371
21255
  this.http = http;
21372
- this.wmsUtils = wmsUtils;
21256
+ this.proxy = proxy;
21373
21257
  this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
21374
- const olFeatures = new GeoJSON().readFeatures(featureCollection, {
21258
+ return GEOJSON.readFeatures(featureCollection, {
21375
21259
  featureProjection,
21376
21260
  dataProjection,
21377
21261
  });
21378
- return olFeatures;
21379
21262
  };
21380
21263
  }
21381
21264
  createEmptyMap() {
21382
- const map = new Map$1({
21265
+ return new Map$1({
21383
21266
  controls: [],
21384
21267
  pixelRatio: 1,
21385
21268
  });
21386
- return map;
21387
21269
  }
21388
21270
  isWMSLayer(layer) {
21389
21271
  return (layer.getSource() instanceof TileWMS ||
@@ -21398,8 +21280,7 @@ class MapUtilsService {
21398
21280
  ...source.getParams(),
21399
21281
  INFO_FORMAT: 'application/json',
21400
21282
  };
21401
- const url = source.getFeatureInfoUrl(coordinate, resolution, projection, params);
21402
- return url;
21283
+ return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
21403
21284
  }
21404
21285
  getVectorFeaturesFromClick(olMap, event) {
21405
21286
  const features = [];
@@ -21427,38 +21308,56 @@ class MapUtilsService {
21427
21308
  /**
21428
21309
  * Will emit `null` if no extent could be computed
21429
21310
  */
21430
- getLayerExtent(layer) {
21431
- let geographicExtent;
21311
+ async getLayerExtent(layer) {
21312
+ let latLonExtent;
21432
21313
  if (layer &&
21433
21314
  layer.type === 'geojson' &&
21434
21315
  'data' in layer &&
21435
21316
  typeof layer.data === 'object' &&
21436
21317
  layer.data.features[0] &&
21437
21318
  layer.data.features[0].geometry) {
21438
- geographicExtent = of(layer.data).pipe(map$1((layerData) => new GeoJSON()
21439
- .readFeatures(layerData)
21319
+ latLonExtent = new GeoJSON()
21320
+ .readFeatures(layer.data)
21440
21321
  .map((feature) => feature.getGeometry())
21441
21322
  .filter((geom) => !!geom)
21442
- .reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)));
21323
+ .reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
21443
21324
  }
21444
21325
  else if (layer && layer.type === 'wms') {
21445
- geographicExtent = this.wmsUtils.getLayerLonLatBBox(layer);
21326
+ latLonExtent = await this.getWmsLayerExtent(layer);
21446
21327
  }
21447
21328
  else if (layer && layer.type === 'wmts') {
21448
21329
  if (layer.extent) {
21449
- geographicExtent = of(layer.extent);
21330
+ latLonExtent = layer.extent;
21450
21331
  }
21451
21332
  else {
21452
- return of(layer.options.tileGrid.getExtent());
21333
+ return layer.options.tileGrid.getExtent();
21453
21334
  }
21454
21335
  }
21455
21336
  else {
21456
- return of(null);
21337
+ return null;
21338
+ }
21339
+ if (!latLonExtent || isEmpty(latLonExtent)) {
21340
+ return null;
21341
+ }
21342
+ return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
21343
+ }
21344
+ async getWmsLayerExtent(layer) {
21345
+ const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
21346
+ const { boundingBoxes } = endpoint.getLayerByName(layer.name);
21347
+ if (!Object.keys(boundingBoxes).length) {
21348
+ return null;
21349
+ }
21350
+ const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
21351
+ if (lonLatCRS) {
21352
+ return boundingBoxes[lonLatCRS].map(parseFloat);
21353
+ }
21354
+ else {
21355
+ const availableEPSGCode = Object.keys(boundingBoxes)[0];
21356
+ register(proj4);
21357
+ const proj = await fromEPSGCode(availableEPSGCode);
21358
+ const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
21359
+ return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
21457
21360
  }
21458
- return geographicExtent.pipe(map$1((extent) => [
21459
- ...fromLonLat([extent[0], extent[1]], 'EPSG:3857'),
21460
- ...fromLonLat([extent[2], extent[3]], 'EPSG:3857'),
21461
- ]), map$1((extent) => (isEmpty(extent) ? null : extent)));
21462
21361
  }
21463
21362
  getWmtsLayerFromCapabilities(link) {
21464
21363
  const getCapabilitiesUrl = new URL(link.url, window.location.toString());
@@ -21514,7 +21413,18 @@ ${e.stack || e.message || e}`);
21514
21413
  ])
21515
21414
  .getArray());
21516
21415
  }
21517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: MapUtilsWMSService }], target: i0.ɵɵFactoryTarget.Injectable }); }
21416
+ getRecordExtent(record) {
21417
+ if (!('spatialExtents' in record)) {
21418
+ return null;
21419
+ }
21420
+ // transform an array of geojson geometries into a bbox
21421
+ const totalExtent = record.spatialExtents.reduce((prev, curr) => {
21422
+ const geom = GEOJSON.readGeometry(curr.geometry);
21423
+ return extend(prev, geom.getExtent());
21424
+ }, [Infinity, Infinity, -Infinity, -Infinity]);
21425
+ return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
21426
+ }
21427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
21518
21428
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
21519
21429
  }
21520
21430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
@@ -21522,7 +21432,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
21522
21432
  args: [{
21523
21433
  providedIn: 'root',
21524
21434
  }]
21525
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: MapUtilsWMSService }]; } });
21435
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
21526
21436
  function dragPanCondition(event) {
21527
21437
  const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
21528
21438
  if (!dragPanCondition) {
@@ -24021,11 +23931,11 @@ class MarkdownParserComponent {
24021
23931
  return marked.parse(this.textContent);
24022
23932
  }
24023
23933
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24024
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /deep/ .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /deep/ .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host /deep/ .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23934
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24025
23935
  }
24026
23936
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
24027
23937
  type: Component,
24028
- args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /deep/ .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /deep/ .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host /deep/ .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"] }]
23938
+ args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
24029
23939
  }], propDecorators: { textContent: [{
24030
23940
  type: Input
24031
23941
  }] } });
@@ -24145,11 +24055,11 @@ class ButtonComponent {
24145
24055
  propagateToDocumentOnly(event);
24146
24056
  }
24147
24057
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24148
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host /deep/ mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24058
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24149
24059
  }
24150
24060
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
24151
24061
  type: Component,
24152
- args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host /deep/ mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24062
+ args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24153
24063
  }], propDecorators: { type: [{
24154
24064
  type: Input
24155
24065
  }], disabled: [{
@@ -24224,11 +24134,11 @@ class DownloadsListComponent {
24224
24134
  return link.type === 'service' && link.accessServiceProtocol === 'wfs';
24225
24135
  }
24226
24136
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
24227
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\">\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], 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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], 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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24228
24138
  }
24229
24139
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
24230
24140
  type: Component,
24231
- args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\">\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
24141
+ args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
24232
24142
  }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
24233
24143
  type: Input
24234
24144
  }] } });
@@ -24429,11 +24339,11 @@ class CarouselComponent {
24429
24339
  this.emblaApi.scrollTo(stepIndex);
24430
24340
  }
24431
24341
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
24432
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24342
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24433
24343
  }
24434
24344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
24435
24345
  type: Component,
24436
- args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24346
+ args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24437
24347
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
24438
24348
  type: Input
24439
24349
  }], stepsContainerClass: [{
@@ -24477,6 +24387,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
24477
24387
  }]
24478
24388
  }] });
24479
24389
 
24390
+ class InteractiveTableColumnComponent {
24391
+ constructor() {
24392
+ this.grow = false;
24393
+ this.sortable = false;
24394
+ this.activeSort = null;
24395
+ this.sortChange = new EventEmitter();
24396
+ }
24397
+ handleSortChange() {
24398
+ this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
24399
+ this.sortChange.emit(this.activeSort);
24400
+ }
24401
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24402
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableColumnComponent, isStandalone: true, selector: "gn-ui-interactive-table-column", inputs: { grow: "grow", sortable: "sortable", activeSort: "activeSort" }, outputs: { sortChange: "sortChange" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "cell", first: true, predicate: ["cell"], descendants: true }], ngImport: i0, template: "<span>empty</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24403
+ }
24404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
24405
+ type: Component,
24406
+ args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
24407
+ }], propDecorators: { header: [{
24408
+ type: ContentChild,
24409
+ args: ['header']
24410
+ }], cell: [{
24411
+ type: ContentChild,
24412
+ args: ['cell']
24413
+ }], grow: [{
24414
+ type: Input
24415
+ }], sortable: [{
24416
+ type: Input
24417
+ }], activeSort: [{
24418
+ type: Input
24419
+ }], sortChange: [{
24420
+ type: Output
24421
+ }] } });
24422
+
24423
+ class InteractiveTableComponent {
24424
+ constructor() {
24425
+ this.items = [];
24426
+ this.itemClick = new EventEmitter();
24427
+ }
24428
+ get gridStyle() {
24429
+ return {
24430
+ 'grid-template-columns': this.columns
24431
+ .map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
24432
+ .join(' '),
24433
+ };
24434
+ }
24435
+ handleRowClick(item) {
24436
+ this.itemClick.emit(item);
24437
+ }
24438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24439
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"], 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: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24440
+ }
24441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
24442
+ type: Component,
24443
+ args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"] }]
24444
+ }], propDecorators: { columns: [{
24445
+ type: ContentChildren,
24446
+ args: [InteractiveTableColumnComponent]
24447
+ }], items: [{
24448
+ type: Input
24449
+ }], itemClick: [{
24450
+ type: Output
24451
+ }] } });
24452
+
24480
24453
  class LinkCardComponent {
24481
24454
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24482
24455
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n", styles: [""], 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -24522,11 +24495,11 @@ class MetadataContactComponent {
24522
24495
  this.organizationClick.emit(this.shownOrganization);
24523
24496
  }
24524
24497
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24525
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6 sm:mb-12\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.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>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.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=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], 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: "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24498
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.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>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.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=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], 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: "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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24526
24499
  }
24527
24500
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
24528
24501
  type: Component,
24529
- args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6 sm:mb-12\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.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>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.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=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24502
+ args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.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]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.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>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.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=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24530
24503
  }], propDecorators: { metadata: [{
24531
24504
  type: Input
24532
24505
  }], organizationClick: [{
@@ -24930,11 +24903,11 @@ class DropdownMultiselectComponent {
24930
24903
  this.setFocus();
24931
24904
  }
24932
24905
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
24933
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, $event.target.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], 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: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24906
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], 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: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24934
24907
  }
24935
24908
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
24936
24909
  type: Component,
24937
- args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, $event.target.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
24910
+ args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
24938
24911
  }], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
24939
24912
  type: Input
24940
24913
  }], choices: [{
@@ -25193,11 +25166,11 @@ class AutocompleteComponent {
25193
25166
  }
25194
25167
  }
25195
25168
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
25196
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter($event.target.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25169
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25197
25170
  }
25198
25171
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
25199
25172
  type: Component,
25200
- args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter($event.target.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
25173
+ args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
25201
25174
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
25202
25175
  type: Input
25203
25176
  }], action: [{
@@ -25573,11 +25546,11 @@ class CheckboxComponent {
25573
25546
  this.changed.emit(this.checked);
25574
25547
  }
25575
25548
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25576
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n type=\"checkbox\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25549
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25577
25550
  }
25578
25551
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
25579
25552
  type: Component,
25580
- args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n type=\"checkbox\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
25553
+ args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
25581
25554
  }], propDecorators: { type: [{
25582
25555
  type: Input
25583
25556
  }], checked: [{
@@ -25632,6 +25605,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25632
25605
  args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
25633
25606
  }] });
25634
25607
 
25608
+ class EditableLabelDirective {
25609
+ constructor(el, renderer) {
25610
+ this.el = el;
25611
+ this.renderer = renderer;
25612
+ this.editableLabelChanged = new EventEmitter();
25613
+ }
25614
+ ngAfterViewInit() {
25615
+ if (this.gnUiEditableLabel !== false) {
25616
+ const appendedInput = this.renderer.createElement('input');
25617
+ this.renderer.setStyle(appendedInput, 'background', 'inherit');
25618
+ this.renderer.setStyle(appendedInput, 'color', 'inherit');
25619
+ this.renderer.setStyle(appendedInput, 'font', 'inherit');
25620
+ this.renderer.setStyle(appendedInput, 'border', 'inherit');
25621
+ this.renderer.setStyle(appendedInput, 'width', '100%');
25622
+ this.renderer.setStyle(appendedInput, 'padding', 'inherit');
25623
+ this.renderer.setStyle(appendedInput, 'margin', '0');
25624
+ this.renderer.setStyle(appendedInput, 'height', 'inherit');
25625
+ this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
25626
+ this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
25627
+ const hostContent = this.el.nativeElement.textContent || '';
25628
+ const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
25629
+ this.renderer.setProperty(appendedInput, 'value', formattedContent);
25630
+ this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
25631
+ this.renderer.listen(appendedInput, 'input', (event) => {
25632
+ this.editableLabelChanged.emit(event.target.value);
25633
+ });
25634
+ this.renderer.appendChild(this.el.nativeElement, appendedInput);
25635
+ }
25636
+ }
25637
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
25638
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
25639
+ }
25640
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
25641
+ type: Directive,
25642
+ args: [{
25643
+ selector: '[gnUiEditableLabel]',
25644
+ standalone: true,
25645
+ }]
25646
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
25647
+ type: Output
25648
+ }], gnUiEditableLabel: [{
25649
+ type: Input
25650
+ }] } });
25651
+
25635
25652
  class UiInputsModule {
25636
25653
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25637
25654
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
@@ -25671,7 +25688,8 @@ class UiInputsModule {
25671
25688
  MatFormFieldModule,
25672
25689
  MatInputModule,
25673
25690
  MatDatepickerModule,
25674
- MatNativeDateModule], exports: [DropdownSelectorComponent,
25691
+ MatNativeDateModule,
25692
+ EditableLabelDirective], exports: [DropdownSelectorComponent,
25675
25693
  AutocompleteComponent,
25676
25694
  ButtonComponent,
25677
25695
  TextInputComponent,
@@ -25687,7 +25705,8 @@ class UiInputsModule {
25687
25705
  CopyTextButtonComponent,
25688
25706
  CheckboxComponent,
25689
25707
  SearchInputComponent,
25690
- DateRangePickerComponent] }); }
25708
+ DateRangePickerComponent,
25709
+ EditableLabelDirective] }); }
25691
25710
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
25692
25711
  TranslateModule.forChild(),
25693
25712
  NgxDropzoneModule,
@@ -25753,6 +25772,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25753
25772
  MatInputModule,
25754
25773
  MatDatepickerModule,
25755
25774
  MatNativeDateModule,
25775
+ EditableLabelDirective,
25756
25776
  ],
25757
25777
  exports: [
25758
25778
  DropdownSelectorComponent,
@@ -25772,6 +25792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25772
25792
  CheckboxComponent,
25773
25793
  SearchInputComponent,
25774
25794
  DateRangePickerComponent,
25795
+ EditableLabelDirective,
25775
25796
  ],
25776
25797
  }]
25777
25798
  }] });
@@ -25937,11 +25958,11 @@ class ImageOverlayPreviewComponent {
25937
25958
  basicLightbox.create(`<img src="${src}"/>`).show();
25938
25959
  }
25939
25960
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25940
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-36 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36 group-hover:shadow-xl group-hover:border-0 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], 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: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
25961
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], 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: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
25941
25962
  }
25942
25963
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
25943
25964
  type: Component,
25944
- args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-36 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36 group-hover:shadow-xl group-hover:border-0 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
25965
+ args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
25945
25966
  }], propDecorators: { imageUrl: [{
25946
25967
  type: Input
25947
25968
  }], isPlaceholderShown: [{
@@ -25996,6 +26017,7 @@ class UiElementsModule {
25996
26017
  AvatarComponent,
25997
26018
  UserPreviewComponent,
25998
26019
  PaginationButtonsComponent,
26020
+ MaxLinesComponent,
25999
26021
  RecordApiFormComponent,
26000
26022
  MarkdownParserComponent,
26001
26023
  ImageOverlayPreviewComponent] }); }
@@ -26068,6 +26090,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26068
26090
  AvatarComponent,
26069
26091
  UserPreviewComponent,
26070
26092
  PaginationButtonsComponent,
26093
+ MaxLinesComponent,
26071
26094
  RecordApiFormComponent,
26072
26095
  MarkdownParserComponent,
26073
26096
  ImageOverlayPreviewComponent,
@@ -26075,143 +26098,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26075
26098
  }]
26076
26099
  }] });
26077
26100
 
26078
- class RecordTableComponent {
26079
- constructor() {
26080
- this.selectedRecords = [];
26081
- this.records = [];
26082
- this.recordClick = new EventEmitter();
26083
- this.recordsSelect = new EventEmitter();
26084
- this.recordsDeselect = new EventEmitter();
26085
- this.sortByChange = new EventEmitter();
26086
- }
26087
- dateToString(date) {
26088
- return date?.toLocaleDateString(undefined, {
26089
- year: 'numeric',
26090
- month: 'long',
26091
- day: 'numeric',
26092
- timeZone: 'UTC',
26093
- });
26094
- }
26095
- getStatus(isPublishedToAll) {
26096
- return isPublishedToAll ? 'published' : 'not published';
26097
- }
26098
- formatUserInfo(userInfo) {
26099
- const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
26100
- if (infos && infos.length === 4) {
26101
- return `${infos[2]} ${infos[1]}`;
26102
- }
26103
- return undefined;
26104
- }
26105
- getRecordFormats(record) {
26106
- if (record.kind === 'service' || !('distributions' in record)) {
26107
- return [];
26108
- }
26109
- const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
26110
- formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
26111
- return formats;
26112
- }
26113
- getBadgeColor(format) {
26114
- return getBadgeColor(format);
26115
- }
26116
- getOrderForColumn(col) {
26117
- if (!this.sortBy) {
26118
- return null;
26119
- }
26120
- let order = null;
26121
- const sortedArray = Array.isArray(this.sortBy[0])
26122
- ? this.sortBy
26123
- : [this.sortBy];
26124
- sortedArray.forEach((sortedCol) => {
26125
- if (sortedCol[1] === col) {
26126
- order = sortedCol[0];
26127
- }
26128
- });
26129
- return order;
26130
- }
26131
- setSortBy(col) {
26132
- const sortOrder = this.getOrderForColumn(col);
26133
- let newOrder;
26134
- if (sortOrder) {
26135
- newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
26136
- }
26137
- else {
26138
- newOrder = 'asc';
26139
- }
26140
- this.sortByChange.emit([newOrder, col]);
26141
- this.sortBy = [newOrder, col];
26142
- }
26143
- isSortedBy(col, order) {
26144
- const sortOrder = this.getOrderForColumn(col);
26145
- return sortOrder === order;
26146
- }
26147
- isChecked(record) {
26148
- if (this.selectedRecords.includes(record.uniqueIdentifier)) {
26149
- return true;
26150
- }
26151
- return false;
26152
- }
26153
- handleRecordSelectedChange(selected, record) {
26154
- if (!selected) {
26155
- this.recordsDeselect.emit([record]);
26156
- this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
26157
- }
26158
- else {
26159
- this.recordsSelect.emit([record]);
26160
- this.selectedRecords.push(record.uniqueIdentifier);
26161
- }
26162
- }
26163
- selectAll() {
26164
- if (this.isAllSelected()) {
26165
- this.recordsDeselect.emit(this.records);
26166
- this.selectedRecords = [];
26167
- }
26168
- else {
26169
- this.recordsSelect.emit(this.records);
26170
- this.selectedRecords = this.records.map((record) => {
26171
- return record.uniqueIdentifier;
26172
- });
26173
- }
26174
- }
26175
- isAllSelected() {
26176
- if (this.selectedRecords.length === this.records.length) {
26177
- const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
26178
- if (allRecords.length === this.records.length) {
26179
- return true;
26180
- }
26181
- }
26182
- return false;
26183
- }
26184
- isSomeSelected() {
26185
- if (this.selectedRecords.length > 0 &&
26186
- this.selectedRecords.length < this.records.length) {
26187
- return true;
26188
- }
26189
- return false;
26190
- }
26191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-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 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
26193
- }
26194
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
26195
- type: Component,
26196
- args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-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 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
26197
- }], propDecorators: { selectedRecords: [{
26198
- type: Input
26199
- }], records: [{
26200
- type: Input
26201
- }], totalHits: [{
26202
- type: Input
26203
- }], sortBy: [{
26204
- type: Input
26205
- }], recordClick: [{
26206
- type: Output
26207
- }], recordsSelect: [{
26208
- type: Output
26209
- }], recordsDeselect: [{
26210
- type: Output
26211
- }], sortByChange: [{
26212
- type: Output
26213
- }] } });
26214
-
26215
26101
  class UiSearchModule {
26216
26102
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26217
26103
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
@@ -26224,8 +26110,7 @@ class UiSearchModule {
26224
26110
  ResultsHitsNumberComponent,
26225
26111
  ResultsListItemComponent,
26226
26112
  RecordPreviewFeedComponent,
26227
- RecordPreviewRowComponent,
26228
- RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
26113
+ RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
26229
26114
  FacetsModule$1,
26230
26115
  FormsModule,
26231
26116
  ReactiveFormsModule,
@@ -26236,7 +26121,8 @@ class UiSearchModule {
26236
26121
  UiElementsModule,
26237
26122
  MatIconModule,
26238
26123
  MatCheckboxModule,
26239
- RouterLink], exports: [RecordPreviewListComponent,
26124
+ RouterLink,
26125
+ InteractiveTableComponent], exports: [RecordPreviewListComponent,
26240
26126
  RecordPreviewCardComponent,
26241
26127
  RecordPreviewTextComponent,
26242
26128
  RecordPreviewTitleComponent,
@@ -26246,8 +26132,7 @@ class UiSearchModule {
26246
26132
  RecordPreviewComponent,
26247
26133
  ResultsHitsNumberComponent,
26248
26134
  RecordPreviewFeedComponent,
26249
- RecordPreviewRowComponent,
26250
- RecordTableComponent] }); }
26135
+ RecordPreviewRowComponent] }); }
26251
26136
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
26252
26137
  { provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
26253
26138
  ], imports: [CommonModule,
@@ -26262,7 +26147,8 @@ class UiSearchModule {
26262
26147
  UiInputsModule,
26263
26148
  UiElementsModule,
26264
26149
  MatIconModule,
26265
- MatCheckboxModule, FacetsModule$1] }); }
26150
+ MatCheckboxModule,
26151
+ InteractiveTableComponent, FacetsModule$1] }); }
26266
26152
  }
26267
26153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
26268
26154
  type: NgModule,
@@ -26279,7 +26165,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26279
26165
  ResultsListItemComponent,
26280
26166
  RecordPreviewFeedComponent,
26281
26167
  RecordPreviewRowComponent,
26282
- RecordTableComponent,
26283
26168
  ],
26284
26169
  imports: [
26285
26170
  CommonModule,
@@ -26296,6 +26181,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26296
26181
  MatIconModule,
26297
26182
  MatCheckboxModule,
26298
26183
  RouterLink,
26184
+ InteractiveTableComponent,
26299
26185
  ],
26300
26186
  exports: [
26301
26187
  RecordPreviewListComponent,
@@ -26309,7 +26195,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26309
26195
  ResultsHitsNumberComponent,
26310
26196
  RecordPreviewFeedComponent,
26311
26197
  RecordPreviewRowComponent,
26312
- RecordTableComponent,
26313
26198
  ],
26314
26199
  providers: [
26315
26200
  { provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
@@ -26868,6 +26753,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
26868
26753
  const getError = createSelector(getSearchStateSearch, (state) => state.error);
26869
26754
  const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
26870
26755
 
26756
+ // this geometry will be used to filter & boost results accordingly
26757
+ const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
26758
+
26871
26759
  class SearchFacade {
26872
26760
  constructor(store, filterGeometry) {
26873
26761
  this.store = store;
@@ -26972,6 +26860,7 @@ class SearchFacade {
26972
26860
  this.store.dispatch(new SetFilters({}, this.searchId));
26973
26861
  this.store.dispatch(new SetSortBy([], this.searchId));
26974
26862
  this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
26863
+ return this;
26975
26864
  }
26976
26865
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
26977
26866
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
@@ -27356,8 +27245,11 @@ class FuzzySearchComponent {
27356
27245
  this.searchService.updateFilters({ any });
27357
27246
  }
27358
27247
  }
27359
- handleInputCleared() {
27360
- this.searchService.updateFilters({ any: '' });
27248
+ async handleInputCleared() {
27249
+ const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
27250
+ if (currentSearchFilters.any) {
27251
+ this.searchService.updateFilters({ any: '' });
27252
+ }
27361
27253
  }
27362
27254
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
27363
27255
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -27437,6 +27329,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
27437
27329
  args: [RESULTS_LAYOUT_CONFIG]
27438
27330
  }] }]; } });
27439
27331
 
27332
+ // expects the replacement key ${uuid}
27333
+ const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
27334
+
27440
27335
  class FavoriteStarComponent {
27441
27336
  set record(value) {
27442
27337
  this.record_ = value;
@@ -27698,9 +27593,11 @@ class SearchEffects {
27698
27593
  // I could not get this to work (maybe a bug in rxjs?)
27699
27594
  switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
27700
27595
  if (!state.params.useSpatialFilter || !this.filterGeometry$) {
27701
- return of([state, favorites, null]);
27596
+ return of([state, favorites, undefined]);
27702
27597
  }
27703
27598
  return this.filterGeometry$.pipe(tap$2((geom) => {
27599
+ if (!geom)
27600
+ return;
27704
27601
  try {
27705
27602
  const trace = valid$1(geom, true);
27706
27603
  if (trace?.length > 0) {
@@ -27712,7 +27609,7 @@ class SearchEffects {
27712
27609
  throw new Error();
27713
27610
  }
27714
27611
  }), map$1((geom) => [state, favorites, geom]), catchError((e) => {
27715
- return of([state, favorites, null]);
27612
+ return of([state, favorites, undefined]);
27716
27613
  }));
27717
27614
  }), switchMap$1(([state, favorites, geometry]) => {
27718
27615
  const { currentPage, pageSize, sort } = state.params;
@@ -28149,10 +28046,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28149
28046
  type: Input
28150
28047
  }] } });
28151
28048
 
28152
- // this geometry will be used to filter & boost results accordingly
28153
- const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
28154
- // expects the replacement key ${uuid}
28155
- const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
28156
28049
  class FeatureSearchModule {
28157
28050
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
28158
28051
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
@@ -28251,6 +28144,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28251
28144
  }]
28252
28145
  }] });
28253
28146
 
28147
+ class ResultsTableComponent {
28148
+ constructor(searchFacade, searchService, selectionService) {
28149
+ this.searchFacade = searchFacade;
28150
+ this.searchService = searchService;
28151
+ this.selectionService = selectionService;
28152
+ this.recordClick = new EventEmitter();
28153
+ this.records$ = this.searchFacade.results$;
28154
+ this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
28155
+ }
28156
+ dateToString(date) {
28157
+ return date?.toLocaleDateString(undefined, {
28158
+ year: 'numeric',
28159
+ month: 'long',
28160
+ day: 'numeric',
28161
+ timeZone: 'UTC',
28162
+ });
28163
+ }
28164
+ getStatus(isPublishedToAll) {
28165
+ return isPublishedToAll ? 'published' : 'not published';
28166
+ }
28167
+ getRecordFormats(record) {
28168
+ if (record.kind === 'service' || !('distributions' in record)) {
28169
+ return [];
28170
+ }
28171
+ const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
28172
+ formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
28173
+ return formats;
28174
+ }
28175
+ formatUserInfo(userInfo) {
28176
+ const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
28177
+ if (infos && infos.length === 4) {
28178
+ return `${infos[2]} ${infos[1]}`;
28179
+ }
28180
+ return undefined;
28181
+ }
28182
+ getBadgeColor(format) {
28183
+ return getBadgeColor(format);
28184
+ }
28185
+ handleRecordClick(item) {
28186
+ this.recordClick.emit(item);
28187
+ }
28188
+ setSortBy(col, order) {
28189
+ this.searchService.setSortBy([order, col]);
28190
+ }
28191
+ isSortedBy(col) {
28192
+ return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
28193
+ const sortArray = Array.isArray(sortOrder[0])
28194
+ ? sortOrder
28195
+ : [sortOrder];
28196
+ for (const sort of sortArray) {
28197
+ if (sort[1] === col) {
28198
+ return sort[0];
28199
+ }
28200
+ }
28201
+ return null;
28202
+ }));
28203
+ }
28204
+ isChecked(record) {
28205
+ return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
28206
+ return selectedRecords.includes(record.uniqueIdentifier);
28207
+ }));
28208
+ }
28209
+ handleRecordSelectedChange(selected, record) {
28210
+ if (!selected) {
28211
+ this.selectionService.deselectRecords([record]);
28212
+ }
28213
+ else {
28214
+ this.selectionService.selectRecords([record]);
28215
+ }
28216
+ }
28217
+ async toggleSelectAll() {
28218
+ const records = await firstValueFrom(this.records$);
28219
+ if (await firstValueFrom(this.isAllSelected())) {
28220
+ this.selectionService.deselectRecords(records);
28221
+ }
28222
+ else {
28223
+ this.selectionService.selectRecords(records);
28224
+ }
28225
+ }
28226
+ isAllSelected() {
28227
+ return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
28228
+ return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
28229
+ }));
28230
+ }
28231
+ isSomeSelected() {
28232
+ return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
28233
+ const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
28234
+ const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
28235
+ return !allSelected && someSelected;
28236
+ }));
28237
+ }
28238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
28239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\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() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\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) | async\"\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') | async\"\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 {{ item.title }}\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 flex-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 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-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') | async\"\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') | async\"\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: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { 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"] }] }); }
28240
+ }
28241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
28242
+ type: Component,
28243
+ args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
28244
+ CommonModule,
28245
+ UiInputsModule,
28246
+ InteractiveTableComponent,
28247
+ InteractiveTableColumnComponent,
28248
+ MatIconModule,
28249
+ TranslateModule,
28250
+ ], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\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() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\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) | async\"\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') | async\"\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 {{ item.title }}\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 flex-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 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-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') | async\"\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') | async\"\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" }]
28251
+ }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
28252
+ type: Output
28253
+ }] } });
28254
+
28254
28255
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
28255
28256
  get mapLinks() {
28256
28257
  return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
@@ -28577,6 +28578,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28577
28578
  args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
28578
28579
  }], ctorParameters: function () { return [{ type: MapFacade }]; } });
28579
28580
 
28581
+ const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
28582
+ class GeocodingService {
28583
+ constructor(provider) {
28584
+ this.provider = provider;
28585
+ }
28586
+ query(text) {
28587
+ let queryObservable;
28588
+ switch (this.provider[0]) {
28589
+ case 'geoadmin':
28590
+ queryObservable = from(queryGeoadmin(text, this.provider[1]));
28591
+ break;
28592
+ case 'geonames':
28593
+ queryObservable = from(queryGeonames(text, this.provider[1]));
28594
+ break;
28595
+ case 'data-gouv-fr':
28596
+ queryObservable = from(queryDataGouvFr(text, this.provider[1]));
28597
+ break;
28598
+ default:
28599
+ return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
28600
+ }
28601
+ return queryObservable.pipe(catchError((error) => throwError(error)));
28602
+ }
28603
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, deps: [{ token: GEOCODING_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
28604
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
28605
+ }
28606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
28607
+ type: Injectable,
28608
+ args: [{
28609
+ providedIn: 'root',
28610
+ }]
28611
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
28612
+ type: Inject,
28613
+ args: [GEOCODING_PROVIDER]
28614
+ }] }]; } });
28615
+
28616
+ class GeocodingComponent {
28617
+ constructor(mapManager, geocodingService) {
28618
+ this.mapManager = mapManager;
28619
+ this.geocodingService = geocodingService;
28620
+ this.searchText = '';
28621
+ this.results = [];
28622
+ this.searchTextChanged = new Subject();
28623
+ this.destroy$ = new Subject();
28624
+ this.errorMessage = null;
28625
+ this.searchTextChanged
28626
+ .pipe(debounceTime(300), switchMap$1((searchText) => {
28627
+ return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
28628
+ this.errorMessage =
28629
+ 'An error occurred while searching. Please try again.';
28630
+ console.error(error);
28631
+ return [];
28632
+ }));
28633
+ }), takeUntil(this.destroy$))
28634
+ .subscribe((results) => {
28635
+ this.results = results;
28636
+ });
28637
+ }
28638
+ ngOnDestroy() {
28639
+ this.destroy$.next();
28640
+ this.destroy$.complete();
28641
+ }
28642
+ onSearchChange(searchText) {
28643
+ if (!searchText) {
28644
+ this.clearSearch();
28645
+ return;
28646
+ }
28647
+ else {
28648
+ this.searchTextChanged.next(searchText);
28649
+ }
28650
+ }
28651
+ clearSearch() {
28652
+ this.searchText = '';
28653
+ this.results = [];
28654
+ this.errorMessage = null;
28655
+ }
28656
+ zoomToLocation(result) {
28657
+ const map = this.mapManager.map;
28658
+ const view = map.getView();
28659
+ const geometry = result.geom;
28660
+ if (geometry.type === 'Point') {
28661
+ this.zoomToPoint(geometry.coordinates, view);
28662
+ }
28663
+ else if (geometry.type === 'Polygon') {
28664
+ this.zoomToPolygon(geometry.coordinates, view);
28665
+ }
28666
+ else {
28667
+ console.error(`Unsupported geometry type: ${geometry.type}`);
28668
+ }
28669
+ }
28670
+ zoomToPoint(pointCoords, view) {
28671
+ const transformedCoords = fromLonLat(pointCoords);
28672
+ view.setCenter(transformedCoords);
28673
+ view.setZoom(12);
28674
+ }
28675
+ zoomToPolygon(polygonCoords, view) {
28676
+ const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
28677
+ const polygon = new Polygon([transformedCoords]);
28678
+ view.fit(polygon, {
28679
+ duration: 100,
28680
+ maxZoom: 12,
28681
+ });
28682
+ }
28683
+ onEnterPress() {
28684
+ if (this.results && this.results.length > 0) {
28685
+ this.zoomToLocation(this.results[0]);
28686
+ }
28687
+ }
28688
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }, { token: GeocodingService }], target: i0.ɵɵFactoryTarget.Component }); }
28689
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: GeocodingComponent, selector: "gn-ui-geocoding", ngImport: i0, template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n", styles: [""], 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: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
28690
+ }
28691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
28692
+ type: Component,
28693
+ args: [{ selector: 'gn-ui-geocoding', template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n" }]
28694
+ }], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
28695
+
28580
28696
  class FeatureMapModule {
28581
28697
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
28582
28698
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
@@ -28587,7 +28703,8 @@ class FeatureMapModule {
28587
28703
  AddLayerRecordPreviewComponent,
28588
28704
  AddLayerFromWmsComponent,
28589
28705
  AddLayerFromFileComponent,
28590
- AddLayerFromWfsComponent], imports: [CommonModule,
28706
+ AddLayerFromWfsComponent,
28707
+ GeocodingComponent], imports: [CommonModule,
28591
28708
  UiMapModule,
28592
28709
  UiLayoutModule,
28593
28710
  MatIconModule,
@@ -28598,13 +28715,18 @@ class FeatureMapModule {
28598
28715
  MapInstanceDirective,
28599
28716
  LayersPanelComponent,
28600
28717
  AddLayerFromCatalogComponent,
28601
- MapContainerComponent] }); }
28718
+ MapContainerComponent,
28719
+ GeocodingComponent] }); }
28602
28720
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
28603
28721
  {
28604
28722
  provide: FEATURE_MAP_OPTIONS,
28605
28723
  useValue: defaultMapOptions,
28606
28724
  },
28607
28725
  MapFacade,
28726
+ {
28727
+ provide: GEOCODING_PROVIDER,
28728
+ useValue: ['geonames', { maxRows: 5 }],
28729
+ },
28608
28730
  ], imports: [CommonModule,
28609
28731
  UiMapModule,
28610
28732
  UiLayoutModule,
@@ -28630,6 +28752,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28630
28752
  AddLayerFromWmsComponent,
28631
28753
  AddLayerFromFileComponent,
28632
28754
  AddLayerFromWfsComponent,
28755
+ GeocodingComponent,
28633
28756
  ],
28634
28757
  exports: [
28635
28758
  MapContextComponent,
@@ -28637,6 +28760,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28637
28760
  LayersPanelComponent,
28638
28761
  AddLayerFromCatalogComponent,
28639
28762
  MapContainerComponent,
28763
+ GeocodingComponent,
28640
28764
  ],
28641
28765
  imports: [
28642
28766
  CommonModule,
@@ -28657,6 +28781,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28657
28781
  useValue: defaultMapOptions,
28658
28782
  },
28659
28783
  MapFacade,
28784
+ {
28785
+ provide: GEOCODING_PROVIDER,
28786
+ useValue: ['geonames', { maxRows: 5 }],
28787
+ },
28660
28788
  ],
28661
28789
  }]
28662
28790
  }] });
@@ -28751,7 +28879,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
28751
28879
  ...state,
28752
28880
  chartConfig,
28753
28881
  })), on(close, (state) => {
28754
- // eslint-disable-next-line
28882
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
28755
28883
  const { metadata, related, ...stateWithoutMd } = state;
28756
28884
  return stateWithoutMd;
28757
28885
  }));
@@ -30018,15 +30146,16 @@ class DataService {
30018
30146
  // Pour DL toutes les données
30019
30147
  return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
30020
30148
  ...wfsLink,
30149
+ type: 'download',
30021
30150
  url: new URL(urls[format]),
30022
- mimeType: getMimeTypeForFormat(extensionToFormat(format)) || format,
30151
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
30023
30152
  }))));
30024
30153
  }
30025
30154
  getDownloadLinksFromEsriRest(esriRestLink) {
30026
30155
  return ['json', 'geojson'].map((format) => ({
30027
30156
  ...esriRestLink,
30028
30157
  url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
30029
- mimeType: getMimeTypeForFormat(extensionToFormat(format)) || format,
30158
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
30030
30159
  }));
30031
30160
  }
30032
30161
  readAsGeoJson(link) {
@@ -30420,12 +30549,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
30420
30549
  }] } });
30421
30550
 
30422
30551
  class MapViewComponent {
30423
- constructor(mdViewFacade, mapManager, mapUtils, dataService, proxy, featureInfo, changeRef, styleService) {
30552
+ constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
30424
30553
  this.mdViewFacade = mdViewFacade;
30425
30554
  this.mapManager = mapManager;
30426
30555
  this.mapUtils = mapUtils;
30427
30556
  this.dataService = dataService;
30428
- this.proxy = proxy;
30429
30557
  this.featureInfo = featureInfo;
30430
30558
  this.changeRef = changeRef;
30431
30559
  this.styleService = styleService;
@@ -30460,7 +30588,7 @@ class MapViewComponent {
30460
30588
  return of([]);
30461
30589
  }), finalize(() => (this.loading = false)));
30462
30590
  }));
30463
- this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
30591
+ this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
30464
30592
  console.warn(error); // FIXME: report this to the user somehow
30465
30593
  return of(undefined);
30466
30594
  }), map$1((extent) => ({
@@ -30468,7 +30596,18 @@ class MapViewComponent {
30468
30596
  view: {
30469
30597
  extent,
30470
30598
  },
30471
- })), tap$1(() => this.resetSelection()))));
30599
+ })), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
30600
+ if (context.view.extent)
30601
+ return context;
30602
+ const extent = this.mapUtils.getRecordExtent(metadata);
30603
+ return {
30604
+ ...context,
30605
+ view: {
30606
+ ...context.view,
30607
+ extent,
30608
+ },
30609
+ };
30610
+ }));
30472
30611
  }
30473
30612
  ngOnDestroy() {
30474
30613
  this.subscription.unsubscribe();
@@ -30521,13 +30660,13 @@ class MapViewComponent {
30521
30660
  selectLinkToDisplay(link) {
30522
30661
  this.selectedLinkIndex$.next(link);
30523
30662
  }
30524
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: ProxyService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
30663
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
30525
30664
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30526
30665
  }
30527
30666
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
30528
30667
  type: Component,
30529
30668
  args: [{ selector: 'gn-ui-map-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
30530
- }], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: ProxyService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
30669
+ }], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
30531
30670
 
30532
30671
  class DataViewComponent {
30533
30672
  constructor(mdViewFacade) {
@@ -30979,13 +31118,6 @@ class MyOrgService {
30979
31118
  constructor(platformService, orgService) {
30980
31119
  this.platformService = platformService;
30981
31120
  this.orgService = orgService;
30982
- this.myOrgDataSubject = new BehaviorSubject({
30983
- orgName: '',
30984
- logoUrl: '',
30985
- recordCount: 0,
30986
- userCount: 0,
30987
- userList: [],
30988
- });
30989
31121
  this.myOrgData$ = combineLatest([
30990
31122
  this.platformService.getMe(),
30991
31123
  this.platformService.getUsers(),
@@ -31004,7 +31136,7 @@ class MyOrgService {
31004
31136
  userList,
31005
31137
  userCount,
31006
31138
  };
31007
- }));
31139
+ }), shareReplay(1));
31008
31140
  }
31009
31141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
31010
31142
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
@@ -31697,11 +31829,11 @@ class RecordFormComponent {
31697
31829
  return field.config.model;
31698
31830
  }
31699
31831
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
31700
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31832
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31701
31833
  }
31702
31834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
31703
31835
  type: Component,
31704
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
31836
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
31705
31837
  }], ctorParameters: function () { return [{ type: EditorService }]; } });
31706
31838
 
31707
31839
  const ROUTER_STATE_KEY = 'router';
@@ -32069,5 +32201,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
32069
32201
  * Generated bundle index. Do not edit.
32070
32202
  */
32071
32203
 
32072
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, 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, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, 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, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, 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, MapUtilsWMSService, MapViewComponent, MarkdownParserComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordTableComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, 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, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, 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, TranslateTestingModule, 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, dragPanCondition, dropEmptyTranslations, extensionToFormat, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, 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, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32204
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, 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, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, 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, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, 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, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_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, 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, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, 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, 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, dragPanCondition, dropEmptyTranslations, 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, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32073
32205
  //# sourceMappingURL=geonetwork-ui.mjs.map