geonetwork-ui 2.5.0-dev.77e75b46a → 2.5.0-dev.8be73f10b

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 (291) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +11 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +50 -32
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +23 -3
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +7 -4
  8. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +18 -16
  9. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +24 -14
  10. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +16 -18
  11. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +2 -2
  13. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +2 -2
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +2 -2
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +3 -2
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +2 -2
  17. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -23
  18. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  19. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +3 -4
  20. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  21. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +25 -5
  22. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +6 -7
  23. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +10 -7
  24. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +4 -1
  25. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -2
  26. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +9 -1
  27. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +19 -1
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +6 -1
  29. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +6 -3
  30. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +1 -1
  31. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +46 -1
  32. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +3 -2
  33. package/esm2022/libs/ui/dataviz/src/index.mjs +3 -3
  34. package/esm2022/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.mjs +51 -0
  35. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +133 -0
  36. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.data.source.mjs +24 -0
  37. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.mjs +82 -0
  38. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  39. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +78 -0
  40. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  41. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +2 -1
  42. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  43. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  44. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +43 -3
  45. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +1 -6
  46. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +14 -4
  47. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -3
  48. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  49. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -6
  50. package/esm2022/libs/util/data-fetcher/src/index.mjs +3 -1
  51. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -4
  52. package/esm2022/libs/util/data-fetcher/src/lib/model.mjs +7 -3
  53. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-cache.mjs +12 -0
  54. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-file.mjs +3 -3
  55. package/esm2022/libs/util/data-fetcher/src/lib/readers/base.mjs +1 -1
  56. package/esm2022/libs/util/data-fetcher/src/lib/readers/csv.mjs +2 -2
  57. package/esm2022/libs/util/data-fetcher/src/lib/readers/excel.mjs +2 -2
  58. package/esm2022/libs/util/data-fetcher/src/lib/readers/geojson.mjs +2 -2
  59. package/esm2022/libs/util/data-fetcher/src/lib/readers/gml.mjs +5 -3
  60. package/esm2022/libs/util/data-fetcher/src/lib/readers/json.mjs +2 -2
  61. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +35 -9
  62. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +14 -10
  63. package/esm2022/translations/de.json +10 -75
  64. package/esm2022/translations/en.json +10 -75
  65. package/esm2022/translations/es.json +9 -74
  66. package/esm2022/translations/fr.json +22 -87
  67. package/esm2022/translations/it.json +27 -91
  68. package/esm2022/translations/nl.json +9 -74
  69. package/esm2022/translations/pt.json +9 -74
  70. package/fesm2022/geonetwork-ui.mjs +911 -975
  71. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  72. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  73. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -0
  74. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  75. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +3 -1
  76. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  77. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -1
  78. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  79. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -0
  80. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  81. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +2 -1
  82. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  83. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -1
  84. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  85. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts +7 -9
  86. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts.map +1 -1
  87. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -2
  88. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  89. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -7
  90. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  91. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  92. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  93. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +1 -3
  94. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +1 -1
  95. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +2 -3
  96. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +1 -1
  97. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +5 -1
  98. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  99. package/libs/feature/record/src/lib/feature-record.module.d.ts +2 -2
  100. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  101. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -2
  102. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  103. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +16 -1
  104. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  105. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +5 -0
  106. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  107. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  108. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  109. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -1
  110. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  111. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  112. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  113. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  114. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  115. package/libs/feature/search/src/lib/utils/service/fields.d.ts +10 -0
  116. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  117. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  118. package/libs/ui/dataviz/src/index.d.ts +2 -2
  119. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  120. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts +14 -0
  121. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts.map +1 -0
  122. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +45 -0
  123. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -0
  124. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts +12 -0
  125. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts.map +1 -0
  126. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts +10 -0
  127. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts.map +1 -0
  128. package/libs/ui/elements/src/index.d.ts +1 -0
  129. package/libs/ui/elements/src/index.d.ts.map +1 -1
  130. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts +16 -0
  131. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts.map +1 -0
  132. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  133. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  134. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  135. package/libs/ui/inputs/src/index.d.ts +0 -1
  136. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  137. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +16 -1
  138. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  139. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -28
  140. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  141. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -2
  142. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  143. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -1
  144. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  145. package/libs/ui/widgets/src/index.d.ts +0 -1
  146. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  147. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +8 -9
  148. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  149. package/libs/util/data-fetcher/src/index.d.ts +3 -1
  150. package/libs/util/data-fetcher/src/index.d.ts.map +1 -1
  151. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +2 -2
  152. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  153. package/libs/util/data-fetcher/src/lib/model.d.ts +1 -1
  154. package/libs/util/data-fetcher/src/lib/model.d.ts.map +1 -1
  155. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts +8 -0
  156. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts.map +1 -0
  157. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts +2 -2
  158. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts.map +1 -1
  159. package/libs/util/data-fetcher/src/lib/readers/base.d.ts +2 -2
  160. package/libs/util/data-fetcher/src/lib/readers/base.d.ts.map +1 -1
  161. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts +5 -3
  162. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  163. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +7 -4
  164. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -1
  165. package/libs/util/data-fetcher/src/lib/utils.d.ts +2 -2
  166. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  167. package/package.json +1 -1
  168. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +25 -0
  169. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -0
  170. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +55 -32
  171. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +42 -7
  172. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -1
  173. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  174. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +75 -0
  175. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -1
  176. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.html +3 -3
  177. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.ts +17 -15
  178. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +43 -20
  179. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +4 -3
  180. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +10 -18
  181. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  182. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +1 -0
  183. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +1 -1
  184. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -13
  185. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -20
  186. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  187. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -1
  188. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +24 -11
  189. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +26 -4
  190. package/src/libs/feature/record/src/lib/feature-record.module.ts +6 -4
  191. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +71 -60
  192. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +6 -3
  193. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +16 -0
  194. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +21 -2
  195. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -0
  196. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +30 -1
  197. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +12 -0
  198. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -0
  199. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  200. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -0
  201. package/src/libs/feature/search/src/lib/utils/service/fields.ts +55 -0
  202. package/src/libs/ui/dataviz/src/index.ts +2 -2
  203. package/src/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.ts +52 -0
  204. package/src/libs/ui/dataviz/src/lib/{table/table.component.css → data-table/data-table.component.css} +4 -0
  205. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +67 -0
  206. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +173 -0
  207. package/src/libs/ui/dataviz/src/lib/data-table/data-table.data.source.ts +33 -0
  208. package/src/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.ts +84 -0
  209. package/src/libs/ui/elements/src/index.ts +1 -0
  210. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.css +0 -0
  211. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +25 -0
  212. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +70 -0
  213. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
  214. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +2 -0
  215. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  216. package/src/libs/ui/inputs/src/index.ts +0 -1
  217. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +48 -0
  218. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -3
  219. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +37 -1
  220. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +8 -2
  221. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -0
  222. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -0
  223. package/src/libs/ui/widgets/src/index.ts +0 -1
  224. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +2 -3
  225. package/src/libs/util/data-fetcher/src/index.ts +3 -0
  226. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +13 -4
  227. package/src/libs/util/data-fetcher/src/lib/model.ts +6 -2
  228. package/src/libs/util/data-fetcher/src/lib/readers/base-cache.ts +14 -0
  229. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +2 -1
  230. package/src/libs/util/data-fetcher/src/lib/readers/base.ts +2 -2
  231. package/src/libs/util/data-fetcher/src/lib/readers/csv.ts +1 -1
  232. package/src/libs/util/data-fetcher/src/lib/readers/excel.ts +1 -1
  233. package/src/libs/util/data-fetcher/src/lib/readers/geojson.ts +1 -1
  234. package/src/libs/util/data-fetcher/src/lib/readers/gml.ts +7 -7
  235. package/src/libs/util/data-fetcher/src/lib/readers/json.ts +1 -1
  236. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +53 -8
  237. package/src/libs/util/data-fetcher/src/lib/utils.ts +38 -32
  238. package/translations/de.json +10 -75
  239. package/translations/en.json +10 -75
  240. package/translations/es.json +9 -74
  241. package/translations/fr.json +22 -87
  242. package/translations/it.json +27 -91
  243. package/translations/nl.json +9 -74
  244. package/translations/pt.json +9 -74
  245. package/translations/sk.json +9 -74
  246. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +0 -61
  247. package/esm2022/libs/ui/dataviz/src/lib/table/table.fixtures.mjs +0 -40
  248. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +0 -78
  249. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +0 -55
  250. package/libs/ui/dataviz/src/lib/table/table.component.d.ts +0 -29
  251. package/libs/ui/dataviz/src/lib/table/table.component.d.ts.map +0 -1
  252. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts +0 -11
  253. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts.map +0 -1
  254. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts +0 -33
  255. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +0 -1
  256. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts +0 -21
  257. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts.map +0 -1
  258. package/src/libs/data-access/datafeeder/src/index.ts +0 -1
  259. package/src/libs/data-access/datafeeder/src/openapi/api/api.ts +0 -11
  260. package/src/libs/data-access/datafeeder/src/openapi/api/config.api.service.ts +0 -168
  261. package/src/libs/data-access/datafeeder/src/openapi/api/dataPublishing.api.service.ts +0 -270
  262. package/src/libs/data-access/datafeeder/src/openapi/api/fileUpload.api.service.ts +0 -734
  263. package/src/libs/data-access/datafeeder/src/openapi/api.module.ts +0 -46
  264. package/src/libs/data-access/datafeeder/src/openapi/configuration.ts +0 -125
  265. package/src/libs/data-access/datafeeder/src/openapi/encoder.ts +0 -20
  266. package/src/libs/data-access/datafeeder/src/openapi/index.ts +0 -5
  267. package/src/libs/data-access/datafeeder/src/openapi/model/analysisStatusEnum.api.model.ts +0 -24
  268. package/src/libs/data-access/datafeeder/src/openapi/model/boundingBox.api.model.ts +0 -20
  269. package/src/libs/data-access/datafeeder/src/openapi/model/cRS.api.model.ts +0 -25
  270. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +0 -45
  271. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishRequest.api.model.ts +0 -39
  272. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishingStatus.api.model.ts +0 -50
  273. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +0 -39
  274. package/src/libs/data-access/datafeeder/src/openapi/model/models.ts +0 -13
  275. package/src/libs/data-access/datafeeder/src/openapi/model/property.api.model.ts +0 -17
  276. package/src/libs/data-access/datafeeder/src/openapi/model/publishJobStatus.api.model.ts +0 -33
  277. package/src/libs/data-access/datafeeder/src/openapi/model/publishRequest.api.model.ts +0 -16
  278. package/src/libs/data-access/datafeeder/src/openapi/model/publishStatusEnum.api.model.ts +0 -20
  279. package/src/libs/data-access/datafeeder/src/openapi/model/publishStepEnum.api.model.ts +0 -42
  280. package/src/libs/data-access/datafeeder/src/openapi/model/uploadJobStatus.api.model.ts +0 -33
  281. package/src/libs/data-access/datafeeder/src/openapi/variables.ts +0 -9
  282. package/src/libs/data-access/datafeeder/src/spec.yaml +0 -537
  283. package/src/libs/ui/dataviz/src/lib/table/table.component.html +0 -40
  284. package/src/libs/ui/dataviz/src/lib/table/table.component.ts +0 -80
  285. package/src/libs/ui/dataviz/src/lib/table/table.fixtures.ts +0 -40
  286. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.css +0 -36
  287. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.html +0 -23
  288. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +0 -81
  289. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.css +0 -3
  290. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.html +0 -13
  291. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.ts +0 -55
@@ -16,7 +16,7 @@ import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-comp
16
16
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
17
17
  import { map as map$1, catchError, tap as tap$1, shareReplay, filter, startWith, withLatestFrom, switchMap as switchMap$1, take, mergeMap, throttleTime, distinctUntilChanged, debounceTime, finalize, first as first$1, share, pairwise, delay, defaultIfEmpty, toArray } from 'rxjs/operators';
18
18
  import * as i1$2 from '@angular/common';
19
- import { CommonModule, NgOptimizedImage, DatePipe, NgIf, NgForOf } from '@angular/common';
19
+ import { CommonModule, NgOptimizedImage, DatePipe, NgIf } from '@angular/common';
20
20
  import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, animationFrameScheduler, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, filter as filter$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, timer, takeUntil, EMPTY, mergeMap as mergeMap$1, startWith as startWith$1, withLatestFrom as withLatestFrom$1, shareReplay as shareReplay$1, pairwise as pairwise$1 } from 'rxjs';
21
21
  import { lt, valid, coerce, satisfies, ltr } from 'semver';
22
22
  import chroma from 'chroma-js';
@@ -27,7 +27,7 @@ import EmblaCarousel from 'embla-carousel';
27
27
  import * as i2$2 from '@ng-icons/core';
28
28
  import { provideIcons, NgIcon, NgIconComponent, provideNgIconsConfig, NgIconsModule } from '@ng-icons/core';
29
29
  import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirUser, iconoirLock, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment, iconoirRefresh } from '@ng-icons/iconoir';
30
- import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
30
+ import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matWarning, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
31
31
  import * as i1$4 from '@angular/material/tooltip';
32
32
  import { MatTooltipModule } from '@angular/material/tooltip';
33
33
  import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
@@ -37,7 +37,6 @@ import * as i1$6 from '@angular/material/autocomplete';
37
37
  import { MatAutocompleteTrigger, MatAutocomplete, MatAutocompleteModule } from '@angular/material/autocomplete';
38
38
  import * as i3 from 'ngx-dropzone';
39
39
  import { NgxDropzoneModule } from 'ngx-dropzone';
40
- import * as i5 from 'ngx-chips';
41
40
  import { TagInputModule } from 'ngx-chips';
42
41
  import * as i1$5 from '@angular/material/progress-spinner';
43
42
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
@@ -59,7 +58,7 @@ import * as i1$b from '@angular/material/dialog';
59
58
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
60
59
  import * as i2$3 from '@angular/material/tabs';
61
60
  import { MatTabsModule } from '@angular/material/tabs';
62
- import * as i1$f from '@angular/router';
61
+ import * as i1$e from '@angular/router';
63
62
  import { RouterLink, RouterModule, RouteReuseStrategy } from '@angular/router';
64
63
  import { marked } from 'marked';
65
64
  import Duration from 'duration-relativetimeformat';
@@ -89,16 +88,16 @@ import { parseISO } from 'date-fns/parseISO';
89
88
  import { WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
90
89
  import { tablerFolderOpen } from '@ng-icons/tabler-icons';
91
90
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
92
- import * as i4 from '@angular/cdk/scrolling';
93
91
  import { ScrollingModule } from '@angular/cdk/scrolling';
94
- import * as i2$4 from '@angular/material/sort';
92
+ import * as i3$1 from '@angular/material/sort';
95
93
  import { MatSort, MatSortModule } from '@angular/material/sort';
96
- import * as i1$d from '@angular/material/table';
94
+ import * as i2$4 from '@angular/material/table';
97
95
  import { MatTableModule } from '@angular/material/table';
98
- import * as i3$1 from 'ng-table-virtual-scroll';
99
- import { TableVirtualScrollDataSource, TableVirtualScrollModule } from 'ng-table-virtual-scroll';
96
+ import * as i4 from '@angular/material/paginator';
97
+ import { MatPaginatorIntl, MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
98
+ import { LetDirective } from '@ngrx/component';
100
99
  import axios from 'axios';
101
- import * as i1$e from '@angular/platform-browser';
100
+ import * as i1$d from '@angular/platform-browser';
102
101
  import { MomentDateAdapter, MAT_MOMENT_DATE_ADAPTER_OPTIONS } from '@angular/material-moment-adapter';
103
102
  import { Polygon } from 'ol/geom';
104
103
  import * as i4$1 from '@angular/material/radio';
@@ -18621,8 +18620,6 @@ var de = {
18621
18620
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
18622
18621
  "chart.type.pie": "Kreisdiagramm",
18623
18622
  "dashboard.catalog.allRecords": "Metadatenkatalog",
18624
- "dashboard.catalog.contacts": "Kontakte",
18625
- "dashboard.catalog.thesaurus": "Thesaurus",
18626
18623
  "dashboard.createRecord": "Neuer Eintrag",
18627
18624
  "dashboard.importRecord": "",
18628
18625
  "dashboard.importRecord.importExternal": "",
@@ -18635,29 +18632,10 @@ var de = {
18635
18632
  "dashboard.records.myDraft": "Meine Entwürfe",
18636
18633
  "dashboard.records.myRecords": "Meine Datensätze",
18637
18634
  "dashboard.records.search": "Suche nach \"{searchText}\"",
18638
- "dashboard.records.templates": "Vorlagen",
18639
18635
  "dashboard.records.userDetail": "Name",
18640
18636
  "dashboard.records.userEmail": "E-Mail",
18641
18637
  "dashboard.records.username": "Benutzername",
18642
18638
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
18643
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
18644
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
18645
- "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
18646
- "datafeeder.analysisProgressBar.subtitle": "Die Analyse kann einige Minuten dauern. Bitte warten Sie.",
18647
- "datafeeder.analysisProgressBar.title": "Analyse in Bearbeitung",
18648
- "datafeeder.datasetValidation.datasetInformation": "Der bereitgestellte Datensatz enthält {number} Elemente",
18649
- "datafeeder.datasetValidation.submitButton": "OK, meine Daten sind korrekt",
18650
- "datafeeder.datasetValidation.title": "Stellen Sie sicher, dass Ihre Daten korrekt sind",
18651
- "datafeeder.datasetValidation.unknown": " - ",
18652
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
18653
- "datafeeder.datasetValidationCsv.lineNumbers": "",
18654
- "datafeeder.form.abstract": "Wie würden Sie Ihren Datensatz beschreiben?",
18655
- "datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
18656
- "datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
18657
- "datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
18658
- "datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
18659
- "datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
18660
- "datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
18661
18639
  "datafeeder.month.april": "April",
18662
18640
  "datafeeder.month.august": "August",
18663
18641
  "datafeeder.month.december": "Dezember",
@@ -18670,59 +18648,6 @@ var de = {
18670
18648
  "datafeeder.month.november": "November",
18671
18649
  "datafeeder.month.october": "Oktober",
18672
18650
  "datafeeder.month.september": "September",
18673
- "datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
18674
- "datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
18675
- "datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
18676
- "datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
18677
- "datafeeder.publish.upload": "Jetzt hochladen",
18678
- "datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
18679
- "datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
18680
- "datafeeder.publishSuccess.mapViewer": "Kartenviewer",
18681
- "datafeeder.publishSuccess.ogcFeature": "",
18682
- "datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
18683
- "datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
18684
- "datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
18685
- "datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
18686
- "datafeeder.summarizePage.previous": "Zurück",
18687
- "datafeeder.summarizePage.submit": "Absenden",
18688
- "datafeeder.summarizePage.title": "Sie sind fast fertig...",
18689
- "datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
18690
- "datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
18691
- "datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
18692
- "datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
18693
- "datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
18694
- "datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
18695
- "datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
18696
- "datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
18697
- "datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
18698
- "datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
18699
- "datafeeder.upload.error.title.fileSize": "Die Dateigröße ist zu groß",
18700
- "datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
18701
- "datafeeder.upload.illustration.enrichment": "Anreicherung",
18702
- "datafeeder.upload.illustration.import": "Import",
18703
- "datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
18704
- "datafeeder.upload.illustration.validation": "Validierung",
18705
- "datafeeder.upload.illustration.verification": "Überprüfung",
18706
- "datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
18707
- "datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
18708
- "datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
18709
- "datafeeder.upload.uploadButton": "Hochladen",
18710
- "datafeeder.validation.csv.delimiter": "",
18711
- "datafeeder.validation.csv.delimiter.comma": "",
18712
- "datafeeder.validation.csv.delimiter.semicolon": "",
18713
- "datafeeder.validation.csv.lat.field": "",
18714
- "datafeeder.validation.csv.lng.field": "",
18715
- "datafeeder.validation.csv.quote.double": "",
18716
- "datafeeder.validation.csv.quote.none": "",
18717
- "datafeeder.validation.csv.quote.simple": "",
18718
- "datafeeder.validation.csv.quoteChar": "",
18719
- "datafeeder.validation.encoding": "Codierung",
18720
- "datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
18721
- "datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
18722
- "datafeeder.validation.projection": "Raumbezugssystem:",
18723
- "datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
18724
- "datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
18725
- "datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
18726
18651
  "datafeeder.wizardSummarize.createdAt": "Erstellt am",
18727
18652
  "datafeeder.wizardSummarize.scale": "Maßstab",
18728
18653
  "datahub.header.datasets": "Datensätze",
@@ -19026,9 +18951,10 @@ var de = {
19026
18951
  "record.action.download": "Herunterladen",
19027
18952
  "record.action.duplicate": "",
19028
18953
  "record.action.duplicating": "",
18954
+ "record.action.rollback": "",
19029
18955
  "record.action.view": "Anzeigen",
19030
18956
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
19031
- "record.feature.limit": "Die Ressource enthält mehr als {count} Features und kann hier nicht angezeigt werden.",
18957
+ "record.feature.limit": "Die Vorschau wurde aufgrund zu vieler Elemente deaktiviert",
19032
18958
  "record.metadata.about": "Beschreibung",
19033
18959
  "record.metadata.api": "API",
19034
18960
  "record.metadata.api.form.closeButton": "Schließen",
@@ -19148,6 +19074,8 @@ var de = {
19148
19074
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
19149
19075
  "search.field.any.placeholder": "Suche Datensätze ...",
19150
19076
  "search.field.sortBy": "Sortieren nach:",
19077
+ "search.filters.availableServices.download": "",
19078
+ "search.filters.availableServices.view": "",
19151
19079
  "search.filters.changeDate": "Letzte Aktualisierung",
19152
19080
  "search.filters.clear": "Zurücksetzen",
19153
19081
  "search.filters.contact": "Kontakte",
@@ -19190,6 +19118,12 @@ var de = {
19190
19118
  "share.tab.webComponent": "Integrieren",
19191
19119
  "table.loading.data": "Daten werden geladen...",
19192
19120
  "table.object.count": "Objekte in diesem Datensatz",
19121
+ "table.paginator.firstPage": "Erste Seite",
19122
+ "table.paginator.itemsPerPage": "Elemente pro Seite",
19123
+ "table.paginator.lastPage": "Letzte Seite",
19124
+ "table.paginator.nextPage": "Nächste Seite",
19125
+ "table.paginator.previousPage": "Vorherige Seite",
19126
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} von {length}",
19193
19127
  "table.select.data": "Datenquelle",
19194
19128
  "tooltip.html.copy": "HTML kopieren",
19195
19129
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
@@ -19231,8 +19165,6 @@ var en = {
19231
19165
  "chart.type.lineSmooth": "smooth line chart",
19232
19166
  "chart.type.pie": "pie chart",
19233
19167
  "dashboard.catalog.allRecords": "Datasets",
19234
- "dashboard.catalog.contacts": "Contacts",
19235
- "dashboard.catalog.thesaurus": "Thesaurus",
19236
19168
  "dashboard.createRecord": "New dataset",
19237
19169
  "dashboard.importRecord": "Import",
19238
19170
  "dashboard.importRecord.importExternal": "Import an external file",
@@ -19245,29 +19177,10 @@ var en = {
19245
19177
  "dashboard.records.myDraft": "My drafts",
19246
19178
  "dashboard.records.myRecords": "My datasets",
19247
19179
  "dashboard.records.search": "Search for \"{searchText}\"",
19248
- "dashboard.records.templates": "Templates",
19249
19180
  "dashboard.records.userDetail": "Name",
19250
19181
  "dashboard.records.userEmail": "Email",
19251
19182
  "dashboard.records.username": "Username",
19252
19183
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
19253
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
19254
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
19255
- "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
19256
- "datafeeder.analysisProgressBar.subtitle": "The analysis may take several minutes, please wait.",
19257
- "datafeeder.analysisProgressBar.title": "Analysis in progress",
19258
- "datafeeder.datasetValidation.datasetInformation": "The provided dataset contains {number} entities",
19259
- "datafeeder.datasetValidation.submitButton": "OK, my data is correct",
19260
- "datafeeder.datasetValidation.title": "Make sure your data is correct",
19261
- "datafeeder.datasetValidation.unknown": " - ",
19262
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
19263
- "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
19264
- "datafeeder.form.abstract": "How would you describe your dataset?",
19265
- "datafeeder.form.datepicker": "Do you know when the dataset was created?",
19266
- "datafeeder.form.description": "Finally, please describe the process used to create the dataset",
19267
- "datafeeder.form.dropdown": "For which scale was it created?",
19268
- "datafeeder.form.tags": "Select one or more tags that fit your dataset",
19269
- "datafeeder.form.title": "Give your dataset the best title",
19270
- "datafeeder.formsPage.title": "Tell us more about your dataset",
19271
19184
  "datafeeder.month.april": "April",
19272
19185
  "datafeeder.month.august": "August",
19273
19186
  "datafeeder.month.december": "December",
@@ -19280,59 +19193,6 @@ var en = {
19280
19193
  "datafeeder.month.november": "November",
19281
19194
  "datafeeder.month.october": "October",
19282
19195
  "datafeeder.month.september": "September",
19283
- "datafeeder.publish.hint": "You can safely exit this page, you will be notified when the process is over",
19284
- "datafeeder.publish.illustration.title": "Another dataset \n to publish?",
19285
- "datafeeder.publish.subtitle": "Publishing may take several minutes.",
19286
- "datafeeder.publish.title": "Thank you! \n Your dataset is being published",
19287
- "datafeeder.publish.upload": "Upload it now",
19288
- "datafeeder.publishSuccess.geonetworkRecord": "Metadata record",
19289
- "datafeeder.publishSuccess.illustration.title": "Done, all is good!",
19290
- "datafeeder.publishSuccess.mapViewer": "Map viewer",
19291
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
19292
- "datafeeder.publishSuccess.subtitle": "View your data in:",
19293
- "datafeeder.publishSuccess.title": "Congratulations! \n Your dataset has been published",
19294
- "datafeeder.publishSuccess.uploadAnotherData": "Upload another dataset",
19295
- "datafeeder.summarizePage.illustration": "No mistake? Let's go!",
19296
- "datafeeder.summarizePage.previous": "Previous",
19297
- "datafeeder.summarizePage.submit": "Submit",
19298
- "datafeeder.summarizePage.title": "You're almost there...",
19299
- "datafeeder.upload.acceptedFormats": "Accepted file formats:",
19300
- "datafeeder.upload.checkboxLabel": "I hold the rights to publish this dataset",
19301
- "datafeeder.upload.error.subtitle.analysis": "Check that the file contains a valid geospatial dataset",
19302
- "datafeeder.upload.error.subtitle.cantOpenFile": "Please check that the file is valid",
19303
- "datafeeder.upload.error.subtitle.fileFormat": "Remember: only SHP",
19304
- "datafeeder.upload.error.subtitle.fileSize": "Remember: {size} MB maximum",
19305
- "datafeeder.upload.error.title.analysis": "Error during the dataset analysis",
19306
- "datafeeder.upload.error.title.cantOpenFile": "Error while opening the file",
19307
- "datafeeder.upload.error.title.fileFormat": "The selected file format is not supported",
19308
- "datafeeder.upload.error.title.fileHasntSelected": "No file selected",
19309
- "datafeeder.upload.error.title.fileSize": "The file size is too large",
19310
- "datafeeder.upload.error.title.noRightsToSendData": "You are not allowed to publish this dataset",
19311
- "datafeeder.upload.illustration.enrichment": "Enrichment",
19312
- "datafeeder.upload.illustration.import": "Import",
19313
- "datafeeder.upload.illustration.title": "Adding data \n has never been easier",
19314
- "datafeeder.upload.illustration.validation": "Validation",
19315
- "datafeeder.upload.illustration.verification": "Verification",
19316
- "datafeeder.upload.inputLabel": "Import your file",
19317
- "datafeeder.upload.maxFileSize": "Maximum file size is {size} MB",
19318
- "datafeeder.upload.title": "Upload your dataset",
19319
- "datafeeder.upload.uploadButton": "Upload",
19320
- "datafeeder.validation.csv.delimiter": "Delimiter",
19321
- "datafeeder.validation.csv.delimiter.comma": "Comma",
19322
- "datafeeder.validation.csv.delimiter.semicolon": "Semicolon",
19323
- "datafeeder.validation.csv.lat.field": "Latitude column",
19324
- "datafeeder.validation.csv.lng.field": "Longitude column",
19325
- "datafeeder.validation.csv.quote.double": "Double quote",
19326
- "datafeeder.validation.csv.quote.none": "None",
19327
- "datafeeder.validation.csv.quote.simple": "Single quote",
19328
- "datafeeder.validation.csv.quoteChar": "Quote separator",
19329
- "datafeeder.validation.encoding": "Encoding",
19330
- "datafeeder.validation.extent.title": "Here is the dataset extent",
19331
- "datafeeder.validation.extent.title.unknown": "The projection system is unknown",
19332
- "datafeeder.validation.projection": "Spatial reference system:",
19333
- "datafeeder.validation.projection.unknown": "Choose a spatial reference system",
19334
- "datafeeder.validation.sample.title": "And a sample entity from the dataset",
19335
- "datafeeder.wizard.emptyRequiredValuesMessage": "Please fill in mandatory fields",
19336
19196
  "datafeeder.wizardSummarize.createdAt": "Created at",
19337
19197
  "datafeeder.wizardSummarize.scale": "Scale",
19338
19198
  "datahub.header.datasets": "Datasets",
@@ -19636,9 +19496,10 @@ var en = {
19636
19496
  "record.action.download": "Download",
19637
19497
  "record.action.duplicate": "Duplicate",
19638
19498
  "record.action.duplicating": "Duplicating...",
19499
+ "record.action.rollback": "Rollback",
19639
19500
  "record.action.view": "View",
19640
19501
  "record.externalViewer.open": "Open in the external map viewer",
19641
- "record.feature.limit": "The resource contains more than {count} features and cannot be displayed here.",
19502
+ "record.feature.limit": "Preview disabled due to too many elements",
19642
19503
  "record.metadata.about": "Description",
19643
19504
  "record.metadata.api": "API",
19644
19505
  "record.metadata.api.form.closeButton": "Close",
@@ -19758,6 +19619,8 @@ var en = {
19758
19619
  "search.error.recordNotFound": "The dataset with identifier \"{ id }\" could not be found.",
19759
19620
  "search.field.any.placeholder": "Search datasets ...",
19760
19621
  "search.field.sortBy": "Sort by:",
19622
+ "search.filters.availableServices.download": "",
19623
+ "search.filters.availableServices.view": "",
19761
19624
  "search.filters.changeDate": "Updated",
19762
19625
  "search.filters.clear": "Reset",
19763
19626
  "search.filters.contact": "Contacts",
@@ -19800,6 +19663,12 @@ var en = {
19800
19663
  "share.tab.webComponent": "Integrate",
19801
19664
  "table.loading.data": "Loading data...",
19802
19665
  "table.object.count": "Objects in this dataset",
19666
+ "table.paginator.firstPage": "First page",
19667
+ "table.paginator.itemsPerPage": "Items per page",
19668
+ "table.paginator.lastPage": "Last page",
19669
+ "table.paginator.nextPage": "Next page",
19670
+ "table.paginator.previousPage": "Previous page",
19671
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} of {length}",
19803
19672
  "table.select.data": "Data source",
19804
19673
  "tooltip.html.copy": "Copy HTML",
19805
19674
  "tooltip.id.copy": "Copy unique identifier",
@@ -19841,8 +19710,6 @@ var es = {
19841
19710
  "chart.type.lineSmooth": "gráfico de líneas suave",
19842
19711
  "chart.type.pie": "gráfico circular",
19843
19712
  "dashboard.catalog.allRecords": "",
19844
- "dashboard.catalog.contacts": "",
19845
- "dashboard.catalog.thesaurus": "",
19846
19713
  "dashboard.createRecord": "",
19847
19714
  "dashboard.importRecord": "",
19848
19715
  "dashboard.importRecord.importExternal": "",
@@ -19855,29 +19722,10 @@ var es = {
19855
19722
  "dashboard.records.myDraft": "Mis borradores",
19856
19723
  "dashboard.records.myRecords": "Mis Registros",
19857
19724
  "dashboard.records.search": "Buscar \"{searchText}\"",
19858
- "dashboard.records.templates": "",
19859
19725
  "dashboard.records.userDetail": "",
19860
19726
  "dashboard.records.userEmail": "",
19861
19727
  "dashboard.records.username": "",
19862
19728
  "dashboard.records.users": "",
19863
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
19864
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
19865
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
19866
- "datafeeder.analysisProgressBar.subtitle": "",
19867
- "datafeeder.analysisProgressBar.title": "",
19868
- "datafeeder.datasetValidation.datasetInformation": "",
19869
- "datafeeder.datasetValidation.submitButton": "",
19870
- "datafeeder.datasetValidation.title": "",
19871
- "datafeeder.datasetValidation.unknown": "",
19872
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19873
- "datafeeder.datasetValidationCsv.lineNumbers": "",
19874
- "datafeeder.form.abstract": "",
19875
- "datafeeder.form.datepicker": "",
19876
- "datafeeder.form.description": "",
19877
- "datafeeder.form.dropdown": "",
19878
- "datafeeder.form.tags": "",
19879
- "datafeeder.form.title": "",
19880
- "datafeeder.formsPage.title": "",
19881
19729
  "datafeeder.month.april": "",
19882
19730
  "datafeeder.month.august": "",
19883
19731
  "datafeeder.month.december": "",
@@ -19890,59 +19738,6 @@ var es = {
19890
19738
  "datafeeder.month.november": "",
19891
19739
  "datafeeder.month.october": "",
19892
19740
  "datafeeder.month.september": "",
19893
- "datafeeder.publish.hint": "",
19894
- "datafeeder.publish.illustration.title": "",
19895
- "datafeeder.publish.subtitle": "",
19896
- "datafeeder.publish.title": "",
19897
- "datafeeder.publish.upload": "",
19898
- "datafeeder.publishSuccess.geonetworkRecord": "",
19899
- "datafeeder.publishSuccess.illustration.title": "",
19900
- "datafeeder.publishSuccess.mapViewer": "",
19901
- "datafeeder.publishSuccess.ogcFeature": "",
19902
- "datafeeder.publishSuccess.subtitle": "",
19903
- "datafeeder.publishSuccess.title": "",
19904
- "datafeeder.publishSuccess.uploadAnotherData": "",
19905
- "datafeeder.summarizePage.illustration": "",
19906
- "datafeeder.summarizePage.previous": "",
19907
- "datafeeder.summarizePage.submit": "",
19908
- "datafeeder.summarizePage.title": "",
19909
- "datafeeder.upload.acceptedFormats": "",
19910
- "datafeeder.upload.checkboxLabel": "",
19911
- "datafeeder.upload.error.subtitle.analysis": "",
19912
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
19913
- "datafeeder.upload.error.subtitle.fileFormat": "",
19914
- "datafeeder.upload.error.subtitle.fileSize": "",
19915
- "datafeeder.upload.error.title.analysis": "",
19916
- "datafeeder.upload.error.title.cantOpenFile": "",
19917
- "datafeeder.upload.error.title.fileFormat": "",
19918
- "datafeeder.upload.error.title.fileHasntSelected": "",
19919
- "datafeeder.upload.error.title.fileSize": "",
19920
- "datafeeder.upload.error.title.noRightsToSendData": "",
19921
- "datafeeder.upload.illustration.enrichment": "",
19922
- "datafeeder.upload.illustration.import": "",
19923
- "datafeeder.upload.illustration.title": "",
19924
- "datafeeder.upload.illustration.validation": "",
19925
- "datafeeder.upload.illustration.verification": "",
19926
- "datafeeder.upload.inputLabel": "",
19927
- "datafeeder.upload.maxFileSize": "",
19928
- "datafeeder.upload.title": "",
19929
- "datafeeder.upload.uploadButton": "",
19930
- "datafeeder.validation.csv.delimiter": "",
19931
- "datafeeder.validation.csv.delimiter.comma": "Coma",
19932
- "datafeeder.validation.csv.delimiter.semicolon": "Punto y coma",
19933
- "datafeeder.validation.csv.lat.field": "",
19934
- "datafeeder.validation.csv.lng.field": "",
19935
- "datafeeder.validation.csv.quote.double": "Comillas dobles",
19936
- "datafeeder.validation.csv.quote.none": "Ninguno",
19937
- "datafeeder.validation.csv.quote.simple": "Comillas simples",
19938
- "datafeeder.validation.csv.quoteChar": "",
19939
- "datafeeder.validation.encoding": "",
19940
- "datafeeder.validation.extent.title": "",
19941
- "datafeeder.validation.extent.title.unknown": "",
19942
- "datafeeder.validation.projection": "",
19943
- "datafeeder.validation.projection.unknown": "",
19944
- "datafeeder.validation.sample.title": "",
19945
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
19946
19741
  "datafeeder.wizardSummarize.createdAt": "",
19947
19742
  "datafeeder.wizardSummarize.scale": "",
19948
19743
  "datahub.header.datasets": "",
@@ -20246,6 +20041,7 @@ var es = {
20246
20041
  "record.action.download": "",
20247
20042
  "record.action.duplicate": "",
20248
20043
  "record.action.duplicating": "",
20044
+ "record.action.rollback": "",
20249
20045
  "record.action.view": "",
20250
20046
  "record.externalViewer.open": "",
20251
20047
  "record.feature.limit": "",
@@ -20368,6 +20164,8 @@ var es = {
20368
20164
  "search.error.recordNotFound": "",
20369
20165
  "search.field.any.placeholder": "",
20370
20166
  "search.field.sortBy": "",
20167
+ "search.filters.availableServices.download": "",
20168
+ "search.filters.availableServices.view": "",
20371
20169
  "search.filters.changeDate": "Última actualización",
20372
20170
  "search.filters.clear": "",
20373
20171
  "search.filters.contact": "",
@@ -20410,6 +20208,12 @@ var es = {
20410
20208
  "share.tab.webComponent": "",
20411
20209
  "table.loading.data": "",
20412
20210
  "table.object.count": "",
20211
+ "table.paginator.firstPage": "Primera página",
20212
+ "table.paginator.itemsPerPage": "Elementos por página",
20213
+ "table.paginator.lastPage": "Última página",
20214
+ "table.paginator.nextPage": "Página siguiente",
20215
+ "table.paginator.previousPage": "Página anterior",
20216
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} de {length}",
20413
20217
  "table.select.data": "",
20414
20218
  "tooltip.html.copy": "",
20415
20219
  "tooltip.id.copy": "",
@@ -20451,8 +20255,6 @@ var fr = {
20451
20255
  "chart.type.lineSmooth": "ligne lisse",
20452
20256
  "chart.type.pie": "camembert",
20453
20257
  "dashboard.catalog.allRecords": "Jeux de données",
20454
- "dashboard.catalog.contacts": "Annuaire",
20455
- "dashboard.catalog.thesaurus": "Thésaurus",
20456
20258
  "dashboard.createRecord": "Nouveau jeu de données",
20457
20259
  "dashboard.importRecord": "Importer",
20458
20260
  "dashboard.importRecord.importExternal": "Importer un jeu de données externe",
@@ -20465,29 +20267,10 @@ var fr = {
20465
20267
  "dashboard.records.myDraft": "Mes brouillons",
20466
20268
  "dashboard.records.myRecords": "Mes jeux de données",
20467
20269
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
20468
- "dashboard.records.templates": "Modèles pré-remplis",
20469
20270
  "dashboard.records.userDetail": "Nom",
20470
20271
  "dashboard.records.userEmail": "Email",
20471
20272
  "dashboard.records.username": "Nom d'utilisateur",
20472
20273
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
20473
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
20474
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
20475
- "datafeeder.analysisProgressBar.illustration.samplingData": "Échantillonnage \n des données",
20476
- "datafeeder.analysisProgressBar.subtitle": "L'analyse peut prendre plusieurs minutes, merci de patienter.",
20477
- "datafeeder.analysisProgressBar.title": "Analyse en cours",
20478
- "datafeeder.datasetValidation.datasetInformation": "Le jeu de données fourni contient {number} entités",
20479
- "datafeeder.datasetValidation.submitButton": "OK, mes données sont correctes",
20480
- "datafeeder.datasetValidation.title": "Vérifiez que vos données sont correctes",
20481
- "datafeeder.datasetValidation.unknown": " - ",
20482
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*Le tableau doit afficher les 5 premières lignes (hors en-tête)<br>Si ce n'est pas le cas, vérifiez que le fichier est bien formaté",
20483
- "datafeeder.datasetValidationCsv.lineNumbers": "Résumé des 5 premières lignes* du CSV :",
20484
- "datafeeder.form.abstract": "Comment décrire votre jeu de données ?",
20485
- "datafeeder.form.datepicker": "Savez-vous quand la donnée a été créée ?",
20486
- "datafeeder.form.description": "Enfin, décrivez le processus utilisé pour créer la donnée",
20487
- "datafeeder.form.dropdown": "Et pour quelle échelle ?",
20488
- "datafeeder.form.tags": "Choisissez un ou plusieurs mots-clés correspondant à vos données",
20489
- "datafeeder.form.title": "Donnez un titre à votre jeu de données",
20490
- "datafeeder.formsPage.title": "Dites-nous en plus sur ces données",
20491
20274
  "datafeeder.month.april": "Avril",
20492
20275
  "datafeeder.month.august": "Août",
20493
20276
  "datafeeder.month.december": "Décembre",
@@ -20500,59 +20283,6 @@ var fr = {
20500
20283
  "datafeeder.month.november": "Novembre",
20501
20284
  "datafeeder.month.october": "Octobre",
20502
20285
  "datafeeder.month.september": "Septembre",
20503
- "datafeeder.publish.hint": "Vous pouvez quitter cette page en toute sécurité, vous serez prévenus quand le processus sera terminé",
20504
- "datafeeder.publish.illustration.title": "Une autre donnée \n à publier ?",
20505
- "datafeeder.publish.subtitle": "La publication peut prendre plusieurs minutes.",
20506
- "datafeeder.publish.title": "Merci! \n Vos données sont en cours de publication",
20507
- "datafeeder.publish.upload": "Télécharger maintenant",
20508
- "datafeeder.publishSuccess.geonetworkRecord": "Fiche de métadonnées",
20509
- "datafeeder.publishSuccess.illustration.title": "Terminé, tout s'est bien passé !",
20510
- "datafeeder.publishSuccess.mapViewer": "Visualiseur",
20511
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
20512
- "datafeeder.publishSuccess.subtitle": "Visualisez vos données :",
20513
- "datafeeder.publishSuccess.title": "Félicitations! \n Vos données ont été publiées",
20514
- "datafeeder.publishSuccess.uploadAnotherData": "Importer une autre donnée",
20515
- "datafeeder.summarizePage.illustration": "Pas d'erreur ? C'est parti !",
20516
- "datafeeder.summarizePage.previous": "Précédent",
20517
- "datafeeder.summarizePage.submit": "Publier",
20518
- "datafeeder.summarizePage.title": "On y est presque...",
20519
- "datafeeder.upload.acceptedFormats": "Formats de fichier acceptés :",
20520
- "datafeeder.upload.checkboxLabel": "J'ai le droit de publier cette donnée",
20521
- "datafeeder.upload.error.subtitle.analysis": "Le fichier transféré contient-il des données géographiques valides ?",
20522
- "datafeeder.upload.error.subtitle.cantOpenFile": "Vérifiez la validité du fichier sélectionné",
20523
- "datafeeder.upload.error.subtitle.fileFormat": "Rappel : uniquement des SHP",
20524
- "datafeeder.upload.error.subtitle.fileSize": "Rappel : {size} Mo maximum",
20525
- "datafeeder.upload.error.title.analysis": "Erreur lors de l'analyse des données",
20526
- "datafeeder.upload.error.title.cantOpenFile": "Erreur lors de l'ouverture du fichier",
20527
- "datafeeder.upload.error.title.fileFormat": "Le format du fichier n'est pas supporté",
20528
- "datafeeder.upload.error.title.fileHasntSelected": "Aucun fichier n'a été sélectionné",
20529
- "datafeeder.upload.error.title.fileSize": "La taille du fichier est trop importante",
20530
- "datafeeder.upload.error.title.noRightsToSendData": "Vous n'avez pas validé les droits de publication",
20531
- "datafeeder.upload.illustration.enrichment": "Enrichissement",
20532
- "datafeeder.upload.illustration.import": "Import",
20533
- "datafeeder.upload.illustration.title": "Ajouter des données n'a jamais été aussi simple",
20534
- "datafeeder.upload.illustration.validation": "Validation",
20535
- "datafeeder.upload.illustration.verification": "Vérification",
20536
- "datafeeder.upload.inputLabel": "Ajouter votre fichier",
20537
- "datafeeder.upload.maxFileSize": "La taille maximale est {size} Mo",
20538
- "datafeeder.upload.title": "Importez vos données",
20539
- "datafeeder.upload.uploadButton": "Transférer",
20540
- "datafeeder.validation.csv.delimiter": "Séparateur de colonne",
20541
- "datafeeder.validation.csv.delimiter.comma": "Virgule",
20542
- "datafeeder.validation.csv.delimiter.semicolon": "Point-virgule",
20543
- "datafeeder.validation.csv.lat.field": "Colonne latitude",
20544
- "datafeeder.validation.csv.lng.field": "Colonne longitude",
20545
- "datafeeder.validation.csv.quote.double": "Double guillemets",
20546
- "datafeeder.validation.csv.quote.none": "Aucun",
20547
- "datafeeder.validation.csv.quote.simple": "Simple guillemet",
20548
- "datafeeder.validation.csv.quoteChar": "Séparateur de texte",
20549
- "datafeeder.validation.encoding": "Encodage",
20550
- "datafeeder.validation.extent.title": "Voici l'emprise du jeu de données",
20551
- "datafeeder.validation.extent.title.unknown": "Le système de projection est inconnu",
20552
- "datafeeder.validation.projection": "Projection :",
20553
- "datafeeder.validation.projection.unknown": "Choisissez une projection",
20554
- "datafeeder.validation.sample.title": "Et un exemple d'objet",
20555
- "datafeeder.wizard.emptyRequiredValuesMessage": "Veuillez remplir les champs obligatoires",
20556
20286
  "datafeeder.wizardSummarize.createdAt": "Créée le",
20557
20287
  "datafeeder.wizardSummarize.scale": "Échelle",
20558
20288
  "datahub.header.datasets": "Données",
@@ -20592,7 +20322,7 @@ var fr = {
20592
20322
  "domain.contact.role.point_of_contact": "Point de contact",
20593
20323
  "domain.contact.role.principal_investigator": "Chercheur principal",
20594
20324
  "domain.contact.role.processor": "Processeur",
20595
- "domain.contact.role.publisher": "Éditeur",
20325
+ "domain.contact.role.publisher": "Producteur",
20596
20326
  "domain.contact.role.resource_provider": "Fournisseur",
20597
20327
  "domain.contact.role.rights_holder": "Détenteur des droits",
20598
20328
  "domain.contact.role.sponsor": "Sponsor",
@@ -20656,7 +20386,7 @@ var fr = {
20656
20386
  "editor.record.form.constraint.otherConstraints": "Autres contraintes",
20657
20387
  "editor.record.form.constraint.securityConstraints": "Contraintes de sécurité",
20658
20388
  "editor.record.form.draft.updateAlert": "Depuis la création de ce brouillon, ce jeu de données a été modifié le { date } par { user }. Publier votre version peut supprimer ses modifications. Pour éviter cela, vous pouvez annuler vos changements, ou publier votre version en connaissance de cause.",
20659
- "editor.record.form.field.abstract": "Résumé",
20389
+ "editor.record.form.field.abstract": "Description",
20660
20390
  "editor.record.form.field.constraintsShortcuts": "",
20661
20391
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20662
20392
  "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
@@ -20698,14 +20428,14 @@ var fr = {
20698
20428
  "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
20699
20429
  "editor.record.form.keywords.place.withoutExtent": "Ce mot-clé n'a pas de localisation géographique associée",
20700
20430
  "editor.record.form.keywords.placeholder": "Sélectionnez un mot-clé",
20701
- "editor.record.form.license.cc-by": "",
20702
- "editor.record.form.license.cc-by-sa": "",
20703
- "editor.record.form.license.cc-zero": "",
20431
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
20432
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
20433
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
20704
20434
  "editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
20705
20435
  "editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
20706
- "editor.record.form.license.odbl": "",
20707
- "editor.record.form.license.odc-by": "",
20708
- "editor.record.form.license.pddl": "",
20436
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
20437
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
20438
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
20709
20439
  "editor.record.form.license.unknown": "Inconnue ou absente",
20710
20440
  "editor.record.form.page.accessAndContact": "Informations pour l'utilisation",
20711
20441
  "editor.record.form.page.description": "Description du jeu de données",
@@ -20758,7 +20488,7 @@ var fr = {
20758
20488
  "editor.record.resourceError.closeMessage": "Compris",
20759
20489
  "editor.record.resourceError.title": "Erreur avec les pièces jointes",
20760
20490
  "editor.record.saveStatus.draftWithChangesPending": "Sauvegardé - Modifications non publiées",
20761
- "editor.record.saveStatus.recordNotPublished": "",
20491
+ "editor.record.saveStatus.recordNotPublished": "Sauvegardé - non publié",
20762
20492
  "editor.record.saveStatus.recordUpToDate": "Sauvegardé - Jeu de données à jour",
20763
20493
  "editor.record.undo.confirmation.cancelText": "Garder les modifications",
20764
20494
  "editor.record.undo.confirmation.confirmText": "Retirer les modifications",
@@ -20768,7 +20498,7 @@ var fr = {
20768
20498
  "editor.record.undo.tooltip.enabled": "Cliquer sur ce bouton pour annuler les modifications apportées à ce jeu de données",
20769
20499
  "editor.record.upToDate": "Ce jeu de données est à jour",
20770
20500
  "editor.sidebar.logout": "Se déconnecter",
20771
- "editor.sidebar.menu.editor": "",
20501
+ "editor.sidebar.menu.editor": "Editeur",
20772
20502
  "editor.temporary.disabled": "Pas encore implémenté",
20773
20503
  "externalviewer.dataset.unnamed": "Couche du datahub",
20774
20504
  "facets.block.title.OrgForResource": "Organisation",
@@ -20816,7 +20546,7 @@ var fr = {
20816
20546
  "map.add.layer": "Ajouter une couche",
20817
20547
  "map.add.layer.catalog": "Du catalogue",
20818
20548
  "map.add.layer.file": "À partir d'un fichier",
20819
- "map.add.layer.ogc.api": "",
20549
+ "map.add.layer.ogc.api": "Depuis un service OGC API",
20820
20550
  "map.add.layer.wfs": "Depuis un service WFS",
20821
20551
  "map.add.layer.wms": "Depuis un service WMS",
20822
20552
  "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
@@ -20829,7 +20559,7 @@ var fr = {
20829
20559
  "map.loading.data": "Chargement des données...",
20830
20560
  "map.loading.service": "Chargement du service...",
20831
20561
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
20832
- "map.ogc.urlInput.hint": "",
20562
+ "map.ogc.urlInput.hint": "Entrez l'URL du service OGC API",
20833
20563
  "map.select.layer": "Source de données",
20834
20564
  "map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
20835
20565
  "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
@@ -20856,9 +20586,10 @@ var fr = {
20856
20586
  "record.action.download": "Télécharger",
20857
20587
  "record.action.duplicate": "Dupliquer",
20858
20588
  "record.action.duplicating": "Duplication...",
20589
+ "record.action.rollback": "Restaurer",
20859
20590
  "record.action.view": "Voir",
20860
20591
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
20861
- "record.feature.limit": "La ressource contient plus de {count} entités et ne peut pas être affichée ici.",
20592
+ "record.feature.limit": "L’aperçu a été désactivé en raison d’un trop grand nombre d'éléments",
20862
20593
  "record.metadata.about": "Description",
20863
20594
  "record.metadata.api": "API",
20864
20595
  "record.metadata.api.form.closeButton": "Fermer",
@@ -20978,6 +20709,8 @@ var fr = {
20978
20709
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
20979
20710
  "search.field.any.placeholder": "Rechercher un jeu de données...",
20980
20711
  "search.field.sortBy": "Trier par :",
20712
+ "search.filters.availableServices.download": "",
20713
+ "search.filters.availableServices.view": "",
20981
20714
  "search.filters.changeDate": "Mise à jour",
20982
20715
  "search.filters.clear": "Réinitialiser",
20983
20716
  "search.filters.contact": "Contacts",
@@ -21020,6 +20753,12 @@ var fr = {
21020
20753
  "share.tab.webComponent": "Intégrer",
21021
20754
  "table.loading.data": "Chargement des données...",
21022
20755
  "table.object.count": "enregistrements dans ces données",
20756
+ "table.paginator.firstPage": "Première page",
20757
+ "table.paginator.itemsPerPage": "Éléments par page",
20758
+ "table.paginator.lastPage": "Dernière page",
20759
+ "table.paginator.nextPage": "Page suivante",
20760
+ "table.paginator.previousPage": "Page précédente",
20761
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} sur {length}",
21023
20762
  "table.select.data": "Source de données",
21024
20763
  "tooltip.html.copy": "Copier le HTML",
21025
20764
  "tooltip.id.copy": "Copier l'identifiant unique",
@@ -21061,8 +20800,6 @@ var it = {
21061
20800
  "chart.type.lineSmooth": "grafico a linea liscia",
21062
20801
  "chart.type.pie": "grafico a torta",
21063
20802
  "dashboard.catalog.allRecords": "Datasets",
21064
- "dashboard.catalog.contacts": "Contatti",
21065
- "dashboard.catalog.thesaurus": "Thesauri",
21066
20803
  "dashboard.createRecord": "Crea un record",
21067
20804
  "dashboard.importRecord": "Importare",
21068
20805
  "dashboard.importRecord.importExternal": "Importare un dataset esterno",
@@ -21075,29 +20812,10 @@ var it = {
21075
20812
  "dashboard.records.myDraft": "Le mie bozze",
21076
20813
  "dashboard.records.myRecords": "I miei dati",
21077
20814
  "dashboard.records.search": "Risultati per \"{searchText}\"",
21078
- "dashboard.records.templates": "Modelli precompilati",
21079
20815
  "dashboard.records.userDetail": "Nome",
21080
20816
  "dashboard.records.userEmail": "Email",
21081
20817
  "dashboard.records.username": "Nome utente",
21082
20818
  "dashboard.records.users": "utenti",
21083
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
21084
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
21085
- "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
21086
- "datafeeder.analysisProgressBar.subtitle": "L'analisi potrebbe richiedere alcuni minuti, si prega di attendere.",
21087
- "datafeeder.analysisProgressBar.title": "Analisi in corso",
21088
- "datafeeder.datasetValidation.datasetInformation": "Il dataset fornito contiene {number} entità",
21089
- "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
21090
- "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
21091
- "datafeeder.datasetValidation.unknown": " - ",
21092
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*La tabella dovrebbe visualizzare le prime 5 righe (esclusa l'intestazione)<br>In caso contrario, verificare che il file sia formattato correttamente",
21093
- "datafeeder.datasetValidationCsv.lineNumbers": "Riepilogo delle prime 5 righe del CSV:",
21094
- "datafeeder.form.abstract": "Come descrivere il suo dataset?",
21095
- "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
21096
- "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
21097
- "datafeeder.form.dropdown": "Per quale scala è stato creato?",
21098
- "datafeeder.form.tags": "Seleziona uno o più parole chiave che corrispondano al suo dataset",
21099
- "datafeeder.form.title": "Dà al suo dataset il miglior titolo",
21100
- "datafeeder.formsPage.title": "Diteci di più sul suo dataset",
21101
20819
  "datafeeder.month.april": "Aprile",
21102
20820
  "datafeeder.month.august": "Agosto",
21103
20821
  "datafeeder.month.december": "Dicembre",
@@ -21110,59 +20828,6 @@ var it = {
21110
20828
  "datafeeder.month.november": "Novembre",
21111
20829
  "datafeeder.month.october": "Ottobre",
21112
20830
  "datafeeder.month.september": "Settembre",
21113
- "datafeeder.publish.hint": "Puo lasciare questa pagina in sicurezza, sarà avvisato quando il processo sarà completo",
21114
- "datafeeder.publish.illustration.title": "Un altro dato da pubblicare?",
21115
- "datafeeder.publish.subtitle": "La pubblicazione potrebbe richiedere alcuni minuti.",
21116
- "datafeeder.publish.title": "Grazie! \n I suei dati sono in fase di pubblicazione",
21117
- "datafeeder.publish.upload": "Carica ora",
21118
- "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
21119
- "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
21120
- "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
21121
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
21122
- "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
21123
- "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
21124
- "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
21125
- "datafeeder.summarizePage.illustration": "Nessun errore? Avanti!",
21126
- "datafeeder.summarizePage.previous": "Precedente",
21127
- "datafeeder.summarizePage.submit": "Pubblica",
21128
- "datafeeder.summarizePage.title": "Ci siamo quasi...",
21129
- "datafeeder.upload.acceptedFormats": "Formati di file accettati:",
21130
- "datafeeder.upload.checkboxLabel": "Ho il diritto di pubblicare questi dati",
21131
- "datafeeder.upload.error.subtitle.analysis": "Il file trasferito contiene dati geografici validi?",
21132
- "datafeeder.upload.error.subtitle.cantOpenFile": "Verifica la validità del file selezionato",
21133
- "datafeeder.upload.error.subtitle.fileFormat": "Ricorda: solo SHP",
21134
- "datafeeder.upload.error.subtitle.fileSize": "Ricorda: dimensione massima {size} MB",
21135
- "datafeeder.upload.error.title.analysis": "Errore durante l'analisi dei dati",
21136
- "datafeeder.upload.error.title.cantOpenFile": "Errore durante l'apertura del file",
21137
- "datafeeder.upload.error.title.fileFormat": "Formato del file non supportato",
21138
- "datafeeder.upload.error.title.fileHasntSelected": "Nessun file selezionato",
21139
- "datafeeder.upload.error.title.fileSize": "Dimensione del file troppo grande",
21140
- "datafeeder.upload.error.title.noRightsToSendData": "Non avete validato i diritti di pubblicazione",
21141
- "datafeeder.upload.illustration.enrichment": "Arricchimento",
21142
- "datafeeder.upload.illustration.import": "Importazione",
21143
- "datafeeder.upload.illustration.title": "Aggiungere dati non è mai stato così facile",
21144
- "datafeeder.upload.illustration.validation": "Validazione",
21145
- "datafeeder.upload.illustration.verification": "Verifica",
21146
- "datafeeder.upload.inputLabel": "Aggiunge il suo file",
21147
- "datafeeder.upload.maxFileSize": "Dimensione massima: {size} MB",
21148
- "datafeeder.upload.title": "Importa i suoi dati",
21149
- "datafeeder.upload.uploadButton": "Carica",
21150
- "datafeeder.validation.csv.delimiter": "Separatore di colonne",
21151
- "datafeeder.validation.csv.delimiter.comma": "Virgola",
21152
- "datafeeder.validation.csv.delimiter.semicolon": "Punto e virgola",
21153
- "datafeeder.validation.csv.lat.field": "Colonna di latitudine",
21154
- "datafeeder.validation.csv.lng.field": "Colonna di longitudine",
21155
- "datafeeder.validation.csv.quote.double": "Virgolette doppie",
21156
- "datafeeder.validation.csv.quote.none": "Nessun",
21157
- "datafeeder.validation.csv.quote.simple": "Citazione semplice",
21158
- "datafeeder.validation.csv.quoteChar": "Separatore di testo",
21159
- "datafeeder.validation.encoding": "Codifica",
21160
- "datafeeder.validation.extent.title": "Ecco l'estensione del dataset",
21161
- "datafeeder.validation.extent.title.unknown": "Sistema di proiezione sconosciuto",
21162
- "datafeeder.validation.projection": "Proiezione:",
21163
- "datafeeder.validation.projection.unknown": "Seleziona una proiezione",
21164
- "datafeeder.validation.sample.title": "E un esempio di oggetto",
21165
- "datafeeder.wizard.emptyRequiredValuesMessage": "Si prega di compilare i campi obbligatori",
21166
20831
  "datafeeder.wizardSummarize.createdAt": "Creato il",
21167
20832
  "datafeeder.wizardSummarize.scale": "Scala",
21168
20833
  "datahub.header.datasets": "Dati",
@@ -21246,9 +20911,9 @@ var it = {
21246
20911
  "editor.record.deleteError.title": "Errore durante l'eliminazione",
21247
20912
  "editor.record.deleteSuccess.body": "Il dataset è stato eliminato correttamente",
21248
20913
  "editor.record.deleteSuccess.title": "Eliminazione riuscita",
21249
- "editor.record.error.back": "",
21250
- "editor.record.error.explanation": "",
21251
- "editor.record.error.message": "",
20914
+ "editor.record.error.back": "Ritorna al catalogo",
20915
+ "editor.record.error.explanation": "Forse non ha accesso a questa pagina oppure questo collegamento potrebbe non essere valido.",
20916
+ "editor.record.error.message": "Qualcosa è andato storto",
21252
20917
  "editor.record.form.bottomButtons.comeBackLater": "Ritorna più tardi",
21253
20918
  "editor.record.form.bottomButtons.next": "Avanti",
21254
20919
  "editor.record.form.bottomButtons.previous": "Precedente",
@@ -21308,18 +20973,18 @@ var it = {
21308
20973
  "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
21309
20974
  "editor.record.form.keywords.place.withoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21310
20975
  "editor.record.form.keywords.placeholder": "Seleziona una parola chiave",
21311
- "editor.record.form.license.cc-by": "",
21312
- "editor.record.form.license.cc-by-sa": "",
21313
- "editor.record.form.license.cc-zero": "",
20976
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
20977
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
20978
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
21314
20979
  "editor.record.form.license.etalab": "Licenza aperta (Etalab)",
21315
20980
  "editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
21316
- "editor.record.form.license.odbl": "",
21317
- "editor.record.form.license.odc-by": "",
21318
- "editor.record.form.license.pddl": "",
20981
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
20982
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
20983
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
21319
20984
  "editor.record.form.license.unknown": "Sconosciuto o assente",
21320
20985
  "editor.record.form.page.accessAndContact": "Informazioni per l'uso",
21321
20986
  "editor.record.form.page.description": "Descrizione del dataset",
21322
- "editor.record.form.page.resources": "",
20987
+ "editor.record.form.page.resources": "Risorse",
21323
20988
  "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset",
21324
20989
  "editor.record.form.section.about.label": "Informazioni sul dataset",
21325
20990
  "editor.record.form.section.annexes.description": "Gli allegati sono risorse facoltative. Sono allegati al dataset e aiutano a comprendere meglio i dati (avviso, ecc.).",
@@ -21346,7 +21011,7 @@ var it = {
21346
21011
  "editor.record.loadError.body": "Impossibile caricare il dataset:",
21347
21012
  "editor.record.loadError.closeMessage": "Capito",
21348
21013
  "editor.record.loadError.title": "Errore durante il caricamento",
21349
- "editor.record.lock.reason": "",
21014
+ "editor.record.lock.reason": "Non è un editore di uno dei gruppi autorizzati",
21350
21015
  "editor.record.onlineResource.protocol.other": "Altro",
21351
21016
  "editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
21352
21017
  "editor.record.onlineResourceError.closeMessage": "Capito",
@@ -21368,7 +21033,7 @@ var it = {
21368
21033
  "editor.record.resourceError.closeMessage": "Capito",
21369
21034
  "editor.record.resourceError.title": "Errore con gli allegati",
21370
21035
  "editor.record.saveStatus.draftWithChangesPending": "Salvato - Modifiche non pubblicate",
21371
- "editor.record.saveStatus.recordNotPublished": "",
21036
+ "editor.record.saveStatus.recordNotPublished": "Salvato - non pubblicato",
21372
21037
  "editor.record.saveStatus.recordUpToDate": "Salvato - Dataset aggiornato",
21373
21038
  "editor.record.undo.confirmation.cancelText": "Mantieni le modifiche",
21374
21039
  "editor.record.undo.confirmation.confirmText": "Annulla le modifiche",
@@ -21378,7 +21043,7 @@ var it = {
21378
21043
  "editor.record.undo.tooltip.enabled": "Fare clic su questo pulsante per annullare le modifiche apportate a questo dataset",
21379
21044
  "editor.record.upToDate": "Questo dataset è aggiornato",
21380
21045
  "editor.sidebar.logout": "Esci",
21381
- "editor.sidebar.menu.editor": "",
21046
+ "editor.sidebar.menu.editor": "Editore",
21382
21047
  "editor.temporary.disabled": "Non ancora implementato",
21383
21048
  "externalviewer.dataset.unnamed": "Layer del datahub",
21384
21049
  "facets.block.title.OrgForResource": "Organizzazione",
@@ -21426,7 +21091,7 @@ var it = {
21426
21091
  "map.add.layer": "Aggiungere un layer",
21427
21092
  "map.add.layer.catalog": "Dal catalogo",
21428
21093
  "map.add.layer.file": "Da un file",
21429
- "map.add.layer.ogc.api": "",
21094
+ "map.add.layer.ogc.api": "Da OGC API",
21430
21095
  "map.add.layer.wfs": "Da un WFS",
21431
21096
  "map.add.layer.wms": "Da un WMS",
21432
21097
  "map.addFromFile.placeholder": "Clicca o trascina un file qui",
@@ -21439,7 +21104,7 @@ var it = {
21439
21104
  "map.loading.data": "Caricamento dati...",
21440
21105
  "map.loading.service": "Caricamento del servizio...",
21441
21106
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
21442
- "map.ogc.urlInput.hint": "",
21107
+ "map.ogc.urlInput.hint": "Inserisci URL del servizio OGC API",
21443
21108
  "map.select.layer": "Sorgente dati",
21444
21109
  "map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
21445
21110
  "map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
@@ -21465,10 +21130,11 @@ var it = {
21465
21130
  "record.action.delete": "Elimina",
21466
21131
  "record.action.download": "Scarica",
21467
21132
  "record.action.duplicate": "Duplicato",
21468
- "record.action.duplicating": "",
21133
+ "record.action.duplicating": "Duplicazione",
21134
+ "record.action.rollback": "Annulla",
21469
21135
  "record.action.view": "Visualizza",
21470
21136
  "record.externalViewer.open": "Aprire nel visualizzatore esterno",
21471
- "record.feature.limit": "La risorsa contiene più di {count} funzionalità e non può essere visualizzata qui.",
21137
+ "record.feature.limit": "La visualizzazione è stata disabilitata a causa di troppi elementi ",
21472
21138
  "record.metadata.about": "Descrizione",
21473
21139
  "record.metadata.api": "API",
21474
21140
  "record.metadata.api.form.closeButton": "Chiude",
@@ -21588,6 +21254,8 @@ var it = {
21588
21254
  "search.error.recordNotFound": "Impossibile trovare questi dati.",
21589
21255
  "search.field.any.placeholder": "Cerca un dataset...",
21590
21256
  "search.field.sortBy": "Ordina per:",
21257
+ "search.filters.availableServices.download": "",
21258
+ "search.filters.availableServices.view": "",
21591
21259
  "search.filters.changeDate": "Aggiornato",
21592
21260
  "search.filters.clear": "Ripristina",
21593
21261
  "search.filters.contact": "Contatti",
@@ -21630,6 +21298,12 @@ var it = {
21630
21298
  "share.tab.webComponent": "Incorporare",
21631
21299
  "table.loading.data": "Caricamento dei dati...",
21632
21300
  "table.object.count": "record in questi dati",
21301
+ "table.paginator.firstPage": "Prima pagina",
21302
+ "table.paginator.itemsPerPage": "Elementi per pagina",
21303
+ "table.paginator.lastPage": "Ultima pagina",
21304
+ "table.paginator.nextPage": "Pagina successiva",
21305
+ "table.paginator.previousPage": "Pagina precedente",
21306
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} di {total}",
21633
21307
  "table.select.data": "Sorgente dati",
21634
21308
  "tooltip.html.copy": "Copiare il HTML",
21635
21309
  "tooltip.id.copy": "Copiare l'identificatore unico",
@@ -21637,6 +21311,7 @@ var it = {
21637
21311
  "tooltip.url.open": "Aprire l'URL",
21638
21312
  "ui.readLess": "Ridurre",
21639
21313
  "ui.readMore": "Leggere di più",
21314
+ "wfs.aggregations.notsupported": "Aggregazioni non supportate per i servizi WFS",
21640
21315
  "wfs.feature.limit": "Troppi oggetti per visualizzare il WFS layer!",
21641
21316
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
21642
21317
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
@@ -21671,8 +21346,6 @@ var nl = {
21671
21346
  "chart.type.lineSmooth": "glad lijndiagram",
21672
21347
  "chart.type.pie": "cirkeldiagram",
21673
21348
  "dashboard.catalog.allRecords": "",
21674
- "dashboard.catalog.contacts": "",
21675
- "dashboard.catalog.thesaurus": "",
21676
21349
  "dashboard.createRecord": "",
21677
21350
  "dashboard.importRecord": "",
21678
21351
  "dashboard.importRecord.importExternal": "",
@@ -21685,29 +21358,10 @@ var nl = {
21685
21358
  "dashboard.records.myDraft": "Mijn concepten",
21686
21359
  "dashboard.records.myRecords": "Mijn Records",
21687
21360
  "dashboard.records.search": "Zoeken naar \"{searchText}\"",
21688
- "dashboard.records.templates": "",
21689
21361
  "dashboard.records.userDetail": "",
21690
21362
  "dashboard.records.userEmail": "",
21691
21363
  "dashboard.records.username": "",
21692
21364
  "dashboard.records.users": "",
21693
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
21694
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
21695
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
21696
- "datafeeder.analysisProgressBar.subtitle": "",
21697
- "datafeeder.analysisProgressBar.title": "",
21698
- "datafeeder.datasetValidation.datasetInformation": "",
21699
- "datafeeder.datasetValidation.submitButton": "",
21700
- "datafeeder.datasetValidation.title": "",
21701
- "datafeeder.datasetValidation.unknown": "",
21702
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
21703
- "datafeeder.datasetValidationCsv.lineNumbers": "",
21704
- "datafeeder.form.abstract": "",
21705
- "datafeeder.form.datepicker": "",
21706
- "datafeeder.form.description": "",
21707
- "datafeeder.form.dropdown": "",
21708
- "datafeeder.form.tags": "",
21709
- "datafeeder.form.title": "",
21710
- "datafeeder.formsPage.title": "",
21711
21365
  "datafeeder.month.april": "",
21712
21366
  "datafeeder.month.august": "",
21713
21367
  "datafeeder.month.december": "",
@@ -21720,59 +21374,6 @@ var nl = {
21720
21374
  "datafeeder.month.november": "",
21721
21375
  "datafeeder.month.october": "",
21722
21376
  "datafeeder.month.september": "",
21723
- "datafeeder.publish.hint": "",
21724
- "datafeeder.publish.illustration.title": "",
21725
- "datafeeder.publish.subtitle": "",
21726
- "datafeeder.publish.title": "",
21727
- "datafeeder.publish.upload": "",
21728
- "datafeeder.publishSuccess.geonetworkRecord": "",
21729
- "datafeeder.publishSuccess.illustration.title": "",
21730
- "datafeeder.publishSuccess.mapViewer": "",
21731
- "datafeeder.publishSuccess.ogcFeature": "",
21732
- "datafeeder.publishSuccess.subtitle": "",
21733
- "datafeeder.publishSuccess.title": "",
21734
- "datafeeder.publishSuccess.uploadAnotherData": "",
21735
- "datafeeder.summarizePage.illustration": "",
21736
- "datafeeder.summarizePage.previous": "",
21737
- "datafeeder.summarizePage.submit": "",
21738
- "datafeeder.summarizePage.title": "",
21739
- "datafeeder.upload.acceptedFormats": "",
21740
- "datafeeder.upload.checkboxLabel": "",
21741
- "datafeeder.upload.error.subtitle.analysis": "",
21742
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
21743
- "datafeeder.upload.error.subtitle.fileFormat": "",
21744
- "datafeeder.upload.error.subtitle.fileSize": "",
21745
- "datafeeder.upload.error.title.analysis": "",
21746
- "datafeeder.upload.error.title.cantOpenFile": "",
21747
- "datafeeder.upload.error.title.fileFormat": "",
21748
- "datafeeder.upload.error.title.fileHasntSelected": "",
21749
- "datafeeder.upload.error.title.fileSize": "",
21750
- "datafeeder.upload.error.title.noRightsToSendData": "",
21751
- "datafeeder.upload.illustration.enrichment": "",
21752
- "datafeeder.upload.illustration.import": "",
21753
- "datafeeder.upload.illustration.title": "",
21754
- "datafeeder.upload.illustration.validation": "",
21755
- "datafeeder.upload.illustration.verification": "",
21756
- "datafeeder.upload.inputLabel": "",
21757
- "datafeeder.upload.maxFileSize": "",
21758
- "datafeeder.upload.title": "",
21759
- "datafeeder.upload.uploadButton": "",
21760
- "datafeeder.validation.csv.delimiter": "",
21761
- "datafeeder.validation.csv.delimiter.comma": "",
21762
- "datafeeder.validation.csv.delimiter.semicolon": "",
21763
- "datafeeder.validation.csv.lat.field": "",
21764
- "datafeeder.validation.csv.lng.field": "",
21765
- "datafeeder.validation.csv.quote.double": "",
21766
- "datafeeder.validation.csv.quote.none": "",
21767
- "datafeeder.validation.csv.quote.simple": "",
21768
- "datafeeder.validation.csv.quoteChar": "",
21769
- "datafeeder.validation.encoding": "",
21770
- "datafeeder.validation.extent.title": "",
21771
- "datafeeder.validation.extent.title.unknown": "",
21772
- "datafeeder.validation.projection": "",
21773
- "datafeeder.validation.projection.unknown": "",
21774
- "datafeeder.validation.sample.title": "",
21775
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
21776
21377
  "datafeeder.wizardSummarize.createdAt": "",
21777
21378
  "datafeeder.wizardSummarize.scale": "",
21778
21379
  "datahub.header.datasets": "",
@@ -22076,6 +21677,7 @@ var nl = {
22076
21677
  "record.action.download": "",
22077
21678
  "record.action.duplicate": "",
22078
21679
  "record.action.duplicating": "",
21680
+ "record.action.rollback": "",
22079
21681
  "record.action.view": "",
22080
21682
  "record.externalViewer.open": "",
22081
21683
  "record.feature.limit": "",
@@ -22198,6 +21800,8 @@ var nl = {
22198
21800
  "search.error.recordNotFound": "",
22199
21801
  "search.field.any.placeholder": "",
22200
21802
  "search.field.sortBy": "",
21803
+ "search.filters.availableServices.download": "",
21804
+ "search.filters.availableServices.view": "",
22201
21805
  "search.filters.changeDate": "",
22202
21806
  "search.filters.clear": "",
22203
21807
  "search.filters.contact": "",
@@ -22240,6 +21844,12 @@ var nl = {
22240
21844
  "share.tab.webComponent": "",
22241
21845
  "table.loading.data": "",
22242
21846
  "table.object.count": "",
21847
+ "table.paginator.firstPage": "",
21848
+ "table.paginator.itemsPerPage": "",
21849
+ "table.paginator.lastPage": "",
21850
+ "table.paginator.nextPage": "",
21851
+ "table.paginator.previousPage": "",
21852
+ "table.paginator.rangeLabel": "",
22243
21853
  "table.select.data": "",
22244
21854
  "tooltip.html.copy": "",
22245
21855
  "tooltip.id.copy": "",
@@ -22281,8 +21891,6 @@ var pt = {
22281
21891
  "chart.type.lineSmooth": "gráfico de linha suave",
22282
21892
  "chart.type.pie": "gráfico de pizza",
22283
21893
  "dashboard.catalog.allRecords": "",
22284
- "dashboard.catalog.contacts": "",
22285
- "dashboard.catalog.thesaurus": "",
22286
21894
  "dashboard.createRecord": "",
22287
21895
  "dashboard.importRecord": "",
22288
21896
  "dashboard.importRecord.importExternal": "",
@@ -22295,29 +21903,10 @@ var pt = {
22295
21903
  "dashboard.records.myDraft": "Meus rascunhos",
22296
21904
  "dashboard.records.myRecords": "Meus Registros",
22297
21905
  "dashboard.records.search": "Buscar por \"{searchText}\"",
22298
- "dashboard.records.templates": "",
22299
21906
  "dashboard.records.userDetail": "",
22300
21907
  "dashboard.records.userEmail": "",
22301
21908
  "dashboard.records.username": "",
22302
21909
  "dashboard.records.users": "",
22303
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
22304
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
22305
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
22306
- "datafeeder.analysisProgressBar.subtitle": "",
22307
- "datafeeder.analysisProgressBar.title": "",
22308
- "datafeeder.datasetValidation.datasetInformation": "",
22309
- "datafeeder.datasetValidation.submitButton": "",
22310
- "datafeeder.datasetValidation.title": "",
22311
- "datafeeder.datasetValidation.unknown": "",
22312
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
22313
- "datafeeder.datasetValidationCsv.lineNumbers": "",
22314
- "datafeeder.form.abstract": "",
22315
- "datafeeder.form.datepicker": "",
22316
- "datafeeder.form.description": "",
22317
- "datafeeder.form.dropdown": "",
22318
- "datafeeder.form.tags": "",
22319
- "datafeeder.form.title": "",
22320
- "datafeeder.formsPage.title": "",
22321
21910
  "datafeeder.month.april": "",
22322
21911
  "datafeeder.month.august": "",
22323
21912
  "datafeeder.month.december": "",
@@ -22330,59 +21919,6 @@ var pt = {
22330
21919
  "datafeeder.month.november": "",
22331
21920
  "datafeeder.month.october": "",
22332
21921
  "datafeeder.month.september": "",
22333
- "datafeeder.publish.hint": "",
22334
- "datafeeder.publish.illustration.title": "",
22335
- "datafeeder.publish.subtitle": "",
22336
- "datafeeder.publish.title": "",
22337
- "datafeeder.publish.upload": "",
22338
- "datafeeder.publishSuccess.geonetworkRecord": "",
22339
- "datafeeder.publishSuccess.illustration.title": "",
22340
- "datafeeder.publishSuccess.mapViewer": "",
22341
- "datafeeder.publishSuccess.ogcFeature": "",
22342
- "datafeeder.publishSuccess.subtitle": "",
22343
- "datafeeder.publishSuccess.title": "",
22344
- "datafeeder.publishSuccess.uploadAnotherData": "",
22345
- "datafeeder.summarizePage.illustration": "",
22346
- "datafeeder.summarizePage.previous": "",
22347
- "datafeeder.summarizePage.submit": "",
22348
- "datafeeder.summarizePage.title": "",
22349
- "datafeeder.upload.acceptedFormats": "",
22350
- "datafeeder.upload.checkboxLabel": "",
22351
- "datafeeder.upload.error.subtitle.analysis": "",
22352
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
22353
- "datafeeder.upload.error.subtitle.fileFormat": "",
22354
- "datafeeder.upload.error.subtitle.fileSize": "",
22355
- "datafeeder.upload.error.title.analysis": "",
22356
- "datafeeder.upload.error.title.cantOpenFile": "",
22357
- "datafeeder.upload.error.title.fileFormat": "",
22358
- "datafeeder.upload.error.title.fileHasntSelected": "",
22359
- "datafeeder.upload.error.title.fileSize": "",
22360
- "datafeeder.upload.error.title.noRightsToSendData": "",
22361
- "datafeeder.upload.illustration.enrichment": "",
22362
- "datafeeder.upload.illustration.import": "",
22363
- "datafeeder.upload.illustration.title": "",
22364
- "datafeeder.upload.illustration.validation": "",
22365
- "datafeeder.upload.illustration.verification": "",
22366
- "datafeeder.upload.inputLabel": "",
22367
- "datafeeder.upload.maxFileSize": "",
22368
- "datafeeder.upload.title": "",
22369
- "datafeeder.upload.uploadButton": "",
22370
- "datafeeder.validation.csv.delimiter": "",
22371
- "datafeeder.validation.csv.delimiter.comma": "",
22372
- "datafeeder.validation.csv.delimiter.semicolon": "",
22373
- "datafeeder.validation.csv.lat.field": "",
22374
- "datafeeder.validation.csv.lng.field": "",
22375
- "datafeeder.validation.csv.quote.double": "",
22376
- "datafeeder.validation.csv.quote.none": "",
22377
- "datafeeder.validation.csv.quote.simple": "",
22378
- "datafeeder.validation.csv.quoteChar": "",
22379
- "datafeeder.validation.encoding": "",
22380
- "datafeeder.validation.extent.title": "",
22381
- "datafeeder.validation.extent.title.unknown": "",
22382
- "datafeeder.validation.projection": "",
22383
- "datafeeder.validation.projection.unknown": "",
22384
- "datafeeder.validation.sample.title": "",
22385
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
22386
21922
  "datafeeder.wizardSummarize.createdAt": "",
22387
21923
  "datafeeder.wizardSummarize.scale": "",
22388
21924
  "datahub.header.datasets": "",
@@ -22686,6 +22222,7 @@ var pt = {
22686
22222
  "record.action.download": "",
22687
22223
  "record.action.duplicate": "",
22688
22224
  "record.action.duplicating": "",
22225
+ "record.action.rollback": "",
22689
22226
  "record.action.view": "",
22690
22227
  "record.externalViewer.open": "",
22691
22228
  "record.feature.limit": "",
@@ -22808,6 +22345,8 @@ var pt = {
22808
22345
  "search.error.recordNotFound": "",
22809
22346
  "search.field.any.placeholder": "",
22810
22347
  "search.field.sortBy": "",
22348
+ "search.filters.availableServices.download": "",
22349
+ "search.filters.availableServices.view": "",
22811
22350
  "search.filters.changeDate": "",
22812
22351
  "search.filters.clear": "",
22813
22352
  "search.filters.contact": "",
@@ -22850,6 +22389,12 @@ var pt = {
22850
22389
  "share.tab.webComponent": "",
22851
22390
  "table.loading.data": "",
22852
22391
  "table.object.count": "",
22392
+ "table.paginator.firstPage": "",
22393
+ "table.paginator.itemsPerPage": "",
22394
+ "table.paginator.lastPage": "",
22395
+ "table.paginator.nextPage": "",
22396
+ "table.paginator.previousPage": "",
22397
+ "table.paginator.rangeLabel": "",
22853
22398
  "table.select.data": "",
22854
22399
  "tooltip.html.copy": "",
22855
22400
  "tooltip.id.copy": "",
@@ -23043,6 +22588,16 @@ class Gn4FieldMapper {
23043
22588
  isOpenData: (output, source) => this.addExtra({
23044
22589
  isOpenData: selectField(source, 'isOpenData') !== 'false',
23045
22590
  }, output),
22591
+ featureTypes: (output, source) => this.addExtra({
22592
+ featureTypes: selectField(source, 'featureTypes'),
22593
+ }, output),
22594
+ related: (output, source) => {
22595
+ const fcatSource = selectField(getFirstValue(selectField(selectField(source, 'related'), 'fcats')), '_source');
22596
+ const featureCatalogIdentifier = selectField(fcatSource, 'uuid');
22597
+ return featureCatalogIdentifier
22598
+ ? this.addExtra({ featureCatalogIdentifier }, output)
22599
+ : output;
22600
+ },
23046
22601
  isPublishedToAll: (output, source) => this.addExtra({
23047
22602
  isPublishedToAll: selectField(source, 'isPublishedToAll'),
23048
22603
  }, output),
@@ -23360,7 +22915,7 @@ class ElasticsearchService {
23360
22915
  this.runtimeFields = {};
23361
22916
  this.lang3 = this.langService.iso3;
23362
22917
  }
23363
- getSearchRequestBody(aggregations = {}, size = 0, from = 0, sortBy = null, requestFields = [], searchFilters = {}, configFilters = {}, uuids, geometry) {
22918
+ getSearchRequestBody(aggregations = {}, size = 0, from = 0, sortBy = null, requestFields = null, searchFilters = {}, configFilters = {}, uuids, geometry) {
23364
22919
  const payload = {
23365
22920
  aggregations,
23366
22921
  from,
@@ -23368,7 +22923,7 @@ class ElasticsearchService {
23368
22923
  sort: this.buildPayloadSort(sortBy),
23369
22924
  query: this.buildPayloadQuery(searchFilters, configFilters, uuids, geometry),
23370
22925
  ...(size > 0 ? { track_total_hits: true } : {}),
23371
- _source: requestFields,
22926
+ ...(requestFields && { _source: requestFields }),
23372
22927
  };
23373
22928
  this.processRuntimeFields(payload);
23374
22929
  return payload;
@@ -23428,7 +22983,7 @@ class ElasticsearchService {
23428
22983
  },
23429
22984
  };
23430
22985
  }
23431
- getRelatedRecordPayload(title, uuid, size = 6, _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']) {
22986
+ getRelatedRecordPayload(record, size = 6, _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']) {
23432
22987
  return {
23433
22988
  query: {
23434
22989
  bool: {
@@ -23438,9 +22993,21 @@ class ElasticsearchService {
23438
22993
  fields: [
23439
22994
  'resourceTitleObject.default',
23440
22995
  'resourceAbstractObject.default',
23441
- 'tag.raw',
22996
+ 'allKeywords',
22997
+ ],
22998
+ like: [
22999
+ {
23000
+ doc: {
23001
+ resourceTitleObject: {
23002
+ default: record.title,
23003
+ },
23004
+ resourceAbstractObject: {
23005
+ default: record.abstract,
23006
+ },
23007
+ allKeywords: record.keywords.map((keyword) => keyword.label),
23008
+ },
23009
+ },
23442
23010
  ],
23443
- like: title,
23444
23011
  min_term_freq: 1,
23445
23012
  max_query_terms: 12,
23446
23013
  },
@@ -23456,7 +23023,7 @@ class ElasticsearchService {
23456
23023
  },
23457
23024
  },
23458
23025
  ],
23459
- must_not: [{ wildcard: { uuid: uuid } }],
23026
+ must_not: [{ wildcard: { uuid: record.uniqueIdentifier } }],
23460
23027
  },
23461
23028
  },
23462
23029
  size,
@@ -23503,6 +23070,7 @@ class ElasticsearchService {
23503
23070
  return this.metadataLang === 'current';
23504
23071
  }
23505
23072
  filtersToQuery(filters) {
23073
+ const addQuote = (key) => (/^\/.+\/$/.test(key) ? key : `"${key}"`);
23506
23074
  const makeQuery = (filter) => {
23507
23075
  if (typeof filter === 'string') {
23508
23076
  return filter;
@@ -23510,9 +23078,9 @@ class ElasticsearchService {
23510
23078
  return Object.keys(filter)
23511
23079
  .map((key) => {
23512
23080
  if (filter[key] === true) {
23513
- return `"${key}"`;
23081
+ return addQuote(key);
23514
23082
  }
23515
- return `-"${key}"`;
23083
+ return `-${addQuote(key)}`;
23516
23084
  })
23517
23085
  .join(' OR ');
23518
23086
  };
@@ -23555,16 +23123,26 @@ class ElasticsearchService {
23555
23123
  ].filter(Boolean);
23556
23124
  return queryParts.length > 0 ? queryParts : undefined;
23557
23125
  }
23126
+ mustNotFilters() {
23127
+ return [
23128
+ {
23129
+ ...this.queryFilterOnValues('resourceType', [
23130
+ 'service',
23131
+ 'map',
23132
+ 'map/static',
23133
+ 'mapDigital',
23134
+ ]),
23135
+ },
23136
+ {
23137
+ query_string: {
23138
+ query: 'resourceType:featureCatalog AND !resourceType:dataset AND !cl_level.key:dataset',
23139
+ },
23140
+ },
23141
+ ];
23142
+ }
23558
23143
  buildPayloadQuery({ any, ...fieldSearchFilters }, configFilters, uuids, geometry) {
23559
23144
  const must = [];
23560
- const must_not = {
23561
- ...this.queryFilterOnValues('resourceType', [
23562
- 'service',
23563
- 'map',
23564
- 'map/static',
23565
- 'mapDigital',
23566
- ]),
23567
- };
23145
+ const must_not = this.mustNotFilters();
23568
23146
  const should = [];
23569
23147
  const filter = [this.queryFilterOnValues('isTemplate', 'n')];
23570
23148
  if (any) {
@@ -23650,14 +23228,7 @@ class ElasticsearchService {
23650
23228
  },
23651
23229
  },
23652
23230
  ],
23653
- must_not: {
23654
- ...this.queryFilterOnValues('resourceType', [
23655
- 'service',
23656
- 'map',
23657
- 'map/static',
23658
- 'mapDigital',
23659
- ]),
23660
- },
23231
+ must_not: this.mustNotFilters(),
23661
23232
  },
23662
23233
  },
23663
23234
  _source: ['resourceTitleObject', 'uuid'],
@@ -23758,13 +23329,15 @@ class ElasticsearchService {
23758
23329
  switch (aggregation.type) {
23759
23330
  case 'filters':
23760
23331
  return {
23761
- filters: Object.keys(aggregation.filters).reduce((prev, curr) => {
23762
- const filter = aggregation.filters[curr];
23763
- return {
23764
- ...prev,
23765
- [curr]: this.filtersToQuery(filter)[0],
23766
- };
23767
- }, {}),
23332
+ filters: {
23333
+ filters: Object.keys(aggregation.filters).reduce((prev, curr) => {
23334
+ const filter = aggregation.filters[curr];
23335
+ return {
23336
+ ...prev,
23337
+ [curr]: this.filtersToQuery(filter)[0],
23338
+ };
23339
+ }, {}),
23340
+ },
23768
23341
  };
23769
23342
  case 'terms':
23770
23343
  return {
@@ -23872,12 +23445,32 @@ class Gn4Repository {
23872
23445
  }
23873
23446
  getRecord(uniqueIdentifier) {
23874
23447
  return this.gn4SearchApi
23875
- .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23448
+ .search('bucket', ['fcats'], JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23876
23449
  .pipe(map$1((results) => results.hits.hits[0]), switchMap((record) => record ? this.gn4Mapper.readRecord(record) : of(null)));
23877
23450
  }
23451
+ getFeatureCatalog(record, visited = new Set() // prevent looping
23452
+ ) {
23453
+ if (record.extras &&
23454
+ record.extras['featureTypes'] &&
23455
+ record.extras['featureTypes'][0]?.attributeTable &&
23456
+ Array.isArray(record.extras['featureTypes'][0].attributeTable)) {
23457
+ return of({
23458
+ attributes: record.extras['featureTypes'][0]?.attributeTable?.map((attr) => ({
23459
+ name: attr.name,
23460
+ title: attr.definition,
23461
+ })),
23462
+ });
23463
+ }
23464
+ const featureCatalogIdentifier = record.extras['featureCatalogIdentifier'];
23465
+ if (featureCatalogIdentifier && !visited.has(featureCatalogIdentifier)) {
23466
+ visited.add(featureCatalogIdentifier);
23467
+ return this.getRecord(featureCatalogIdentifier).pipe(switchMap((record) => record ? this.getFeatureCatalog(record, visited) : of(null)));
23468
+ }
23469
+ return of(null);
23470
+ }
23878
23471
  getSimilarRecords(similarTo) {
23879
23472
  return this.gn4SearchApi
23880
- .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getRelatedRecordPayload(similarTo.title, similarTo.uniqueIdentifier, 3)))
23473
+ .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getRelatedRecordPayload(similarTo, 3)))
23881
23474
  .pipe(switchMap((results) => this.gn4Mapper.readRecords(results.hits.hits)));
23882
23475
  }
23883
23476
  aggregate(params) {
@@ -26260,66 +25853,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26260
25853
  args: [{ selector: 'gn-ui-color-scale', template: "<div class=\"flex flex-row items-center\">\n <div class=\"text-xs text-gray-700 font-bold m-2 w-32 text-right\">primary</div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-black\"\n title=\"primary-black\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-darkest\"\n title=\"primary-darkest\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-darker\"\n title=\"primary-darker\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary border-2 border-primary-darkest\"\n title=\"primary\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-lighter\"\n title=\"primary-lighter\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-lightest\"\n title=\"primary-lightest\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-primary-white\"\n title=\"primary-white\"\n ></div>\n</div>\n<div class=\"flex flex-row\">\n <div class=\"text-xs text-gray-700 font-bold m-2 w-32 text-right\">\n secondary\n </div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-black\"\n title=\"secondary-black\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-darkest\"\n title=\"secondary-darkest\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-darker\"\n title=\"secondary-darker\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary border-2 border-secondary-darkest\"\n title=\"secondary\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-lighter\"\n title=\"secondary-lighter\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-lightest\"\n title=\"secondary-lightest\"\n ></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-secondary-white\"\n title=\"secondary-white\"\n ></div>\n</div>\n<div class=\"flex flex-row\">\n <div class=\"text-xs text-gray-700 font-bold m-2 w-32 text-right\">main</div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-main\" title=\"main\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-900\" title=\"gray-900\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-800\" title=\"gray-800\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-700\" title=\"gray-700\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-600\" title=\"gray-600\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-500\" title=\"gray-500\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-400\" title=\"gray-400\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-300\" title=\"gray-300\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-200\" title=\"gray-200\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-100\" title=\"gray-100\"></div>\n <div class=\"shadow-md rounded w-6 h-6 m-2 bg-gray-50\" title=\"gray-50\"></div>\n <div\n class=\"shadow-md rounded w-6 h-6 m-2 bg-background\"\n title=\"background\"\n ></div>\n <div class=\"text-xs text-gray-700 font-bold m-2 w-32\">background</div>\n</div>\n" }]
26261
25854
  }] });
26262
25855
 
26263
- class StepBarComponent {
26264
- constructor(cdr) {
26265
- this.cdr = cdr;
26266
- this.currentStep = 1;
26267
- this.type = 'default';
26268
- }
26269
- get stepCounter() {
26270
- return new Array(this.steps);
26271
- }
26272
- get color() {
26273
- switch (this.type) {
26274
- case 'default':
26275
- return {
26276
- outerBar: 'bg-gray-200',
26277
- innerBar: 'bg-gray-100',
26278
- };
26279
- case 'primary':
26280
- return {
26281
- outerBar: 'bg-primary',
26282
- innerBar: 'bg-primary-lighter',
26283
- };
26284
- case 'secondary':
26285
- return {
26286
- outerBar: 'bg-secondary',
26287
- innerBar: 'bg-secondary-lighter',
26288
- };
26289
- }
26290
- }
26291
- getCircleColor(index) {
26292
- return index === this.currentStep
26293
- ? 'bg-black'
26294
- : index < this.currentStep
26295
- ? 'bg-white'
26296
- : this.color.innerBar;
26297
- }
26298
- getChecked(index) {
26299
- return index + 1 < this.currentStep;
26300
- }
26301
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StepBarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
26302
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StepBarComponent, selector: "gn-ui-step-bar", inputs: { steps: "steps", currentStep: "currentStep", type: "type" }, ngImport: i0, template: "<div class=\"relative flex flex-col justify-center\">\n <div class=\"flex justify-between ml-16 mr-16 z-10 circle-steps\">\n <div\n *ngFor=\"let step of stepCounter; let i = index\"\n class=\"shadow-md rounded-full h-6 w-6 {{ getCircleColor(i + 1) }}\"\n >\n <span class=\"icon-check pl-1\" *ngIf=\"getChecked(i)\"></span>\n </div>\n </div>\n <div\n class=\"absolute rounded-lg right-0 w-full {{ color.outerBar }} h-2 z-0\"\n ></div>\n</div>\n", styles: [".icon-check{color:var(--color-primary)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
26303
- }
26304
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StepBarComponent, decorators: [{
26305
- type: Component,
26306
- args: [{ selector: 'gn-ui-step-bar', template: "<div class=\"relative flex flex-col justify-center\">\n <div class=\"flex justify-between ml-16 mr-16 z-10 circle-steps\">\n <div\n *ngFor=\"let step of stepCounter; let i = index\"\n class=\"shadow-md rounded-full h-6 w-6 {{ getCircleColor(i + 1) }}\"\n >\n <span class=\"icon-check pl-1\" *ngIf=\"getChecked(i)\"></span>\n </div>\n </div>\n <div\n class=\"absolute rounded-lg right-0 w-full {{ color.outerBar }} h-2 z-0\"\n ></div>\n</div>\n", styles: [".icon-check{color:var(--color-primary)}\n"] }]
26307
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { steps: [{
26308
- type: Input
26309
- }], currentStep: [{
26310
- type: Input
26311
- }], type: [{
26312
- type: Input
26313
- }] } });
26314
-
26315
25856
  class UiWidgetsModule {
26316
25857
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26317
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, declarations: [ColorScaleComponent, StepBarComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
25858
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, declarations: [ColorScaleComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
26318
25859
  FormsModule,
26319
25860
  ReactiveFormsModule,
26320
25861
  TagInputModule,
26321
25862
  UtilSharedModule,
26322
- MatProgressSpinnerModule], exports: [StepBarComponent] }); }
25863
+ MatProgressSpinnerModule] }); }
26323
25864
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, imports: [CommonModule,
26324
25865
  TranslateModule.forChild(),
26325
25866
  NgxDropzoneModule,
@@ -26332,7 +25873,7 @@ class UiWidgetsModule {
26332
25873
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, decorators: [{
26333
25874
  type: NgModule,
26334
25875
  args: [{
26335
- declarations: [ColorScaleComponent, StepBarComponent],
25876
+ declarations: [ColorScaleComponent],
26336
25877
  imports: [
26337
25878
  CommonModule,
26338
25879
  TranslateModule.forChild(),
@@ -26343,7 +25884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26343
25884
  UtilSharedModule,
26344
25885
  MatProgressSpinnerModule,
26345
25886
  ],
26346
- exports: [StepBarComponent],
25887
+ exports: [],
26347
25888
  }]
26348
25889
  }] });
26349
25890
 
@@ -26587,6 +26128,7 @@ class AutocompleteComponent {
26587
26128
  this.minCharacterCount = 3;
26588
26129
  // this will show a submit button next to the input; if false, a search icon will appear on the left
26589
26130
  this.allowSubmit = false;
26131
+ this.forceTrackPosition = false;
26590
26132
  this.itemSelected = new EventEmitter();
26591
26133
  this.inputSubmitted = new EventEmitter();
26592
26134
  this.inputCleared = new EventEmitter();
@@ -26596,12 +26138,30 @@ class AutocompleteComponent {
26596
26138
  this.lastInputValue$ = new ReplaySubject(1);
26597
26139
  this.error = null;
26598
26140
  this.subscription = new Subscription();
26141
+ this.lastPosition = null;
26599
26142
  this.displayWithFn = (item) => item.toString();
26600
26143
  this.displayWithFnInternal = (item) => {
26601
26144
  if (item === null || item === undefined)
26602
26145
  return null;
26603
26146
  return this.displayWithFn(item);
26604
26147
  };
26148
+ /**
26149
+ * !!! This function is used only for web component mode,
26150
+ * the autocomplete dropdown may not update its position
26151
+ * if the page or container is disabling wind scroll.
26152
+ */
26153
+ this.trackPosition = () => {
26154
+ const dropdownOpened = this.triggerRef && this.triggerRef.panelOpen;
26155
+ const rect = this.inputRef.nativeElement.getBoundingClientRect();
26156
+ if (dropdownOpened &&
26157
+ (!this.lastPosition ||
26158
+ rect.top !== this.lastPosition.top ||
26159
+ rect.left !== this.lastPosition.left)) {
26160
+ this.triggerRef.updatePosition();
26161
+ }
26162
+ this.lastPosition = rect;
26163
+ requestAnimationFrame(this.trackPosition);
26164
+ };
26605
26165
  }
26606
26166
  ngOnChanges(changes) {
26607
26167
  const { value } = changes;
@@ -26620,7 +26180,12 @@ class AutocompleteComponent {
26620
26180
  const suggestionsFromAction = merge(newValue$.pipe(filter((value) => value.length >= this.minCharacterCount)), externalValueChange$).pipe(tap$1(() => {
26621
26181
  this.searching = true;
26622
26182
  this.error = null;
26623
- }), switchMap$1((value) => this.action(value)), catchError((error) => {
26183
+ }), switchMap$1((value) => this.action(value)), tap$1((suggestions) => {
26184
+ // forcing the panel to open if there are suggestions
26185
+ if (suggestions.length > 0) {
26186
+ this.triggerRef?.openPanel();
26187
+ }
26188
+ }), catchError((error) => {
26624
26189
  this.error = error.message;
26625
26190
  return of([]);
26626
26191
  }), finalize(() => (this.searching = false)));
@@ -26648,9 +26213,23 @@ class AutocompleteComponent {
26648
26213
  this.inputRef.nativeElement.focus();
26649
26214
  this.cdRef.detectChanges();
26650
26215
  }
26216
+ this.startTrackingPosition();
26217
+ }
26218
+ /**
26219
+ * !!! This function is used only for web component mode,
26220
+ * the autocomplete dropdown may not update its position
26221
+ * if the page or container is disabling wind scroll.
26222
+ */
26223
+ startTrackingPosition() {
26224
+ if (this.forceTrackPosition) {
26225
+ requestAnimationFrame(this.trackPosition);
26226
+ }
26651
26227
  }
26652
26228
  ngOnDestroy() {
26653
26229
  this.subscription?.unsubscribe();
26230
+ if (this.intervalIdPosition) {
26231
+ clearInterval(this.intervalIdPosition);
26232
+ }
26654
26233
  }
26655
26234
  updateInputValue(value) {
26656
26235
  if (value) {
@@ -26698,7 +26277,7 @@ class AutocompleteComponent {
26698
26277
  }
26699
26278
  }
26700
26279
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
26701
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AutocompleteComponent, isStandalone: true, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", preventCompleteOnSelection: "preventCompleteOnSelection", autoFocus: "autoFocus", minCharacterCount: "minCharacterCount", allowSubmit: "allowSubmit", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, providers: [
26280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AutocompleteComponent, isStandalone: true, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", preventCompleteOnSelection: "preventCompleteOnSelection", autoFocus: "autoFocus", minCharacterCount: "minCharacterCount", allowSubmit: "allowSubmit", forceTrackPosition: "forceTrackPosition", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, providers: [
26702
26281
  provideIcons({
26703
26282
  iconoirSearch,
26704
26283
  matClose,
@@ -26743,6 +26322,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26743
26322
  type: Input
26744
26323
  }], allowSubmit: [{
26745
26324
  type: Input
26325
+ }], forceTrackPosition: [{
26326
+ type: Input
26746
26327
  }], itemSelected: [{
26747
26328
  type: Output
26748
26329
  }], inputSubmitted: [{
@@ -26856,72 +26437,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26856
26437
  type: Output
26857
26438
  }] } });
26858
26439
 
26859
- class ChipsInputComponent {
26860
- onChange(event) {
26861
- this.rawChange.next(event);
26862
- }
26863
- constructor(http, translate) {
26864
- this.http = http;
26865
- this.translate = translate;
26866
- this.required = false;
26867
- this.loadOnce = false;
26868
- this.autocompleteItems = [];
26869
- this.invalid = false;
26870
- this.items = [];
26871
- this.requestAutocompleteItems = (text) => {
26872
- if (this.url) {
26873
- if (this.loadOnce && this.loadedItems) {
26874
- return this.loadedItems;
26875
- }
26876
- const url = this.url(text);
26877
- const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
26878
- return this.http
26879
- .get(url.replace('${lang}', lang))
26880
- .pipe(map$1((item) => item.map((i) => i.values[lang])));
26881
- }
26882
- else {
26883
- return of(this.autocompleteItems || []);
26884
- }
26885
- };
26886
- this.rawChange = new Subject();
26887
- this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
26888
- this.subscription = new Subscription();
26889
- }
26890
- ngOnInit() {
26891
- if (this.loadOnce) {
26892
- this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
26893
- }
26894
- this.items = this.selectedItems;
26895
- this.subscription = this.rawChange
26896
- .pipe(tap$1((v) => (this.invalid = v.length === 0)))
26897
- .subscribe();
26898
- this.rawChange.next(this.items);
26899
- }
26900
- ngOnDestroy() {
26901
- this.subscription.unsubscribe();
26902
- }
26903
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChipsInputComponent, deps: [{ token: i1.HttpClient }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
26904
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: { url: "url", placeholder: "placeholder", selectedItems: "selectedItems", required: "required", loadOnce: "loadOnce", autocompleteItems: "autocompleteItems" }, outputs: { itemsChange: "itemsChange" }, ngImport: i0, template: "<tag-input\n [ngModel]=\"items\"\n (ngModelChange)=\"onChange($event)\"\n onlyFromAutocomplete=\"true\"\n [placeholder]=\"placeholder\"\n [secondaryPlaceholder]=\"placeholder\"\n [ripple]=\"false\"\n [animationDuration]=\"{ enter: '0ms', leave: '0ms' }\"\n [onTextChangeDebounce]=\"100\"\n class=\"border-2 border-primary h-full rounded-lg p-2 bg-white text-sm focus:border-primary\"\n [ngClass]=\"{ invalid: invalid }\"\n>\n <tag-input-dropdown\n [autocompleteObservable]=\"requestAutocompleteItems\"\n [minimumTextLength]=\"0\"\n [keepOpen]=\"false\"\n [showDropdownIfEmpty]=\"true\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n</tag-input>\n", styles: ["tag-input::ng-deep .ng2-tag-input{border-bottom:none}tag-input::ng-deep .ng2-tag-input.ng2-tag-input--focused{border-bottom:none}tag-input::ng-deep tag{border-radius:5px;background:var(--color-primary-lightest);font-family:inherit;align-content:center;font-style:italic}tag-input::ng-deep tag::ng-deep:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,tag-input::ng-deep tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:var(--color-primary)!important}tag-input::ng-deep .tag__text{padding-right:7px}tag-input::ng-deep div,tag-input::ng-deep form{height:100%}tag-input.invalid{border-color:var(--color-secondary)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i5.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i5.TagInputDropdown, selector: "tag-input-dropdown", inputs: ["offset", "focusFirstElement", "showDropdownIfEmpty", "autocompleteObservable", "minimumTextLength", "limitItemsTo", "displayBy", "identifyBy", "matchingFn", "appendToBody", "keepOpen", "dynamicUpdate", "zIndex", "autocompleteItems"] }] }); }
26905
- }
26906
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChipsInputComponent, decorators: [{
26907
- type: Component,
26908
- args: [{ selector: 'gn-ui-chips-input', template: "<tag-input\n [ngModel]=\"items\"\n (ngModelChange)=\"onChange($event)\"\n onlyFromAutocomplete=\"true\"\n [placeholder]=\"placeholder\"\n [secondaryPlaceholder]=\"placeholder\"\n [ripple]=\"false\"\n [animationDuration]=\"{ enter: '0ms', leave: '0ms' }\"\n [onTextChangeDebounce]=\"100\"\n class=\"border-2 border-primary h-full rounded-lg p-2 bg-white text-sm focus:border-primary\"\n [ngClass]=\"{ invalid: invalid }\"\n>\n <tag-input-dropdown\n [autocompleteObservable]=\"requestAutocompleteItems\"\n [minimumTextLength]=\"0\"\n [keepOpen]=\"false\"\n [showDropdownIfEmpty]=\"true\"\n >\n <ng-template let-item=\"item\" let-index=\"index\">\n {{ item.display }}\n </ng-template>\n </tag-input-dropdown>\n</tag-input>\n", styles: ["tag-input::ng-deep .ng2-tag-input{border-bottom:none}tag-input::ng-deep .ng2-tag-input.ng2-tag-input--focused{border-bottom:none}tag-input::ng-deep tag{border-radius:5px;background:var(--color-primary-lightest);font-family:inherit;align-content:center;font-style:italic}tag-input::ng-deep tag::ng-deep:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover,tag-input::ng-deep tag:not(:focus):not(.tag--editing):not(:active):not(.readonly):hover{background:var(--color-primary)!important}tag-input::ng-deep .tag__text{padding-right:7px}tag-input::ng-deep div,tag-input::ng-deep form{height:100%}tag-input.invalid{border-color:var(--color-secondary)}\n"] }]
26909
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.TranslateService }], propDecorators: { url: [{
26910
- type: Input
26911
- }], placeholder: [{
26912
- type: Input
26913
- }], selectedItems: [{
26914
- type: Input
26915
- }], required: [{
26916
- type: Input
26917
- }], loadOnce: [{
26918
- type: Input
26919
- }], autocompleteItems: [{
26920
- type: Input
26921
- }], itemsChange: [{
26922
- type: Output
26923
- }] } });
26924
-
26925
26440
  class CopyTextButtonComponent {
26926
26441
  constructor() {
26927
26442
  this.displayText = true;
@@ -28001,7 +27516,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28001
27516
  class UiInputsModule {
28002
27517
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
28003
27518
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, declarations: [DragAndDropFileInputComponent,
28004
- ChipsInputComponent,
28005
27519
  DropdownMultiselectComponent,
28006
27520
  ViewportIntersectorComponent,
28007
27521
  CheckboxComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
@@ -28029,7 +27543,6 @@ class UiInputsModule {
28029
27543
  ButtonComponent,
28030
27544
  DragAndDropFileInputComponent,
28031
27545
  TextAreaComponent,
28032
- ChipsInputComponent,
28033
27546
  DropdownMultiselectComponent,
28034
27547
  ViewportIntersectorComponent,
28035
27548
  CheckToggleComponent,
@@ -28074,7 +27587,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28074
27587
  args: [{
28075
27588
  declarations: [
28076
27589
  DragAndDropFileInputComponent,
28077
- ChipsInputComponent,
28078
27590
  DropdownMultiselectComponent,
28079
27591
  ViewportIntersectorComponent,
28080
27592
  CheckboxComponent,
@@ -28120,7 +27632,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28120
27632
  ButtonComponent,
28121
27633
  DragAndDropFileInputComponent,
28122
27634
  TextAreaComponent,
28123
- ChipsInputComponent,
28124
27635
  DropdownMultiselectComponent,
28125
27636
  ViewportIntersectorComponent,
28126
27637
  CheckToggleComponent,
@@ -28786,7 +28297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28786
28297
 
28787
28298
  class MarkdownParserComponent {
28788
28299
  get parsedMarkdown() {
28789
- return marked.parse(this.textContent);
28300
+ return marked.parse(this.textContent ?? '');
28790
28301
  }
28791
28302
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28792
28303
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MarkdownParserComponent, isStandalone: true, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent", whitoutStyles: "whitoutStyles" }, ngImport: i0, template: "<div\n [class]=\"whitoutStyles ? '' : 'markdown-body'\"\n [innerHTML]=\"parsedMarkdown\"\n></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0;line-height:1.5;word-wrap:break-word;height:100%}: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 :first-child{margin-top:0}: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}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}: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 }); }
@@ -30030,6 +29541,7 @@ class RecordApiFormComponent {
30030
29541
  maxFeatures: limit !== '-1' ? Number(limit) : undefined,
30031
29542
  limit: limit !== '-1' ? Number(limit) : -1,
30032
29543
  offset: offset !== '' ? Number(offset) : undefined,
29544
+ outputCrs: format === ('application/json' || 'geojson') ? 'EPSG:4326' : undefined,
30033
29545
  };
30034
29546
  if (this.endpoint instanceof WfsEndpoint) {
30035
29547
  delete options.limit;
@@ -30161,6 +29673,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30161
29673
  type: Input
30162
29674
  }] } });
30163
29675
 
29676
+ class ApplicationBannerComponent {
29677
+ constructor() {
29678
+ this.closeEnabled = false;
29679
+ this.extraClass = '';
29680
+ this.icon = '';
29681
+ this.msgClass = '';
29682
+ this.bannerOpen = true;
29683
+ }
29684
+ set type(value) {
29685
+ switch (value) {
29686
+ case 'primary':
29687
+ this.msgClass = 'bg-primary-darkest border-primary text-white';
29688
+ this.icon = 'matWarning';
29689
+ break;
29690
+ case 'light':
29691
+ this.msgClass =
29692
+ 'bg-primary-opacity-10 border-primary-lightest text-black';
29693
+ this.icon = 'matInfoOutline';
29694
+ break;
29695
+ case 'secondary':
29696
+ default:
29697
+ this.msgClass = 'bg-primary-opacity-50 border-primary-darker text-black';
29698
+ this.icon = 'matWarningAmberOutline';
29699
+ break;
29700
+ }
29701
+ }
29702
+ get classList() {
29703
+ if (this.message.length > 200) {
29704
+ return `${this.msgClass} ${this.extraClass} overflow-y-scroll items-start`;
29705
+ }
29706
+ return `${this.msgClass} ${this.extraClass} items-center`;
29707
+ }
29708
+ closeMessage() {
29709
+ this.bannerOpen = false;
29710
+ }
29711
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29712
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApplicationBannerComponent, isStandalone: true, selector: "gn-ui-application-banner", inputs: { message: "message", title: "title", closeEnabled: "closeEnabled", extraClass: "extraClass", icon: "icon", type: "type" }, providers: [
29713
+ provideIcons({
29714
+ matWarningAmberOutline,
29715
+ matInfoOutline,
29716
+ matCloseOutline,
29717
+ matWarning,
29718
+ }),
29719
+ provideNgIconsConfig({ size: '1.5em' }),
29720
+ ], ngImport: i0, template: "<div\n *ngIf=\"message && bannerOpen\"\n class=\"absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24\"\n>\n <div\n class=\"flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20\"\n [ngClass]=\"classList\"\n >\n <div [ngClass]=\"message.length > 200 ? 'pt-5' : 'pt-1'\">\n <ng-icon [name]=\"icon\"></ng-icon>\n </div>\n <div class=\"flex flex-col justify-start gap-2.5\">\n <span *ngIf=\"title\" class=\"font-bold\">{{ title }}</span>\n <span class=\"font-medium max-w-2xl\" [innerHTML]=\"message\"></span>\n </div>\n <button\n *ngIf=\"closeEnabled\"\n class=\"self-start\"\n type=\"button\"\n (click)=\"closeMessage()\"\n >\n <ng-icon name=\"matCloseOutline\"> </ng-icon>\n </button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29721
+ }
29722
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, decorators: [{
29723
+ type: Component,
29724
+ args: [{ selector: 'gn-ui-application-banner', standalone: true, imports: [CommonModule, NgIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
29725
+ provideIcons({
29726
+ matWarningAmberOutline,
29727
+ matInfoOutline,
29728
+ matCloseOutline,
29729
+ matWarning,
29730
+ }),
29731
+ provideNgIconsConfig({ size: '1.5em' }),
29732
+ ], template: "<div\n *ngIf=\"message && bannerOpen\"\n class=\"absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24\"\n>\n <div\n class=\"flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20\"\n [ngClass]=\"classList\"\n >\n <div [ngClass]=\"message.length > 200 ? 'pt-5' : 'pt-1'\">\n <ng-icon [name]=\"icon\"></ng-icon>\n </div>\n <div class=\"flex flex-col justify-start gap-2.5\">\n <span *ngIf=\"title\" class=\"font-bold\">{{ title }}</span>\n <span class=\"font-medium max-w-2xl\" [innerHTML]=\"message\"></span>\n </div>\n <button\n *ngIf=\"closeEnabled\"\n class=\"self-start\"\n type=\"button\"\n (click)=\"closeMessage()\"\n >\n <ng-icon name=\"matCloseOutline\"> </ng-icon>\n </button>\n </div>\n</div>\n" }]
29733
+ }], propDecorators: { message: [{
29734
+ type: Input
29735
+ }], title: [{
29736
+ type: Input
29737
+ }], closeEnabled: [{
29738
+ type: Input
29739
+ }], extraClass: [{
29740
+ type: Input
29741
+ }], icon: [{
29742
+ type: Input
29743
+ }], type: [{
29744
+ type: Input
29745
+ }] } });
29746
+
30164
29747
  class UiElementsModule {
30165
29748
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30166
29749
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
@@ -30178,11 +29761,13 @@ class UiElementsModule {
30178
29761
  BadgeComponent,
30179
29762
  MaxLinesComponent,
30180
29763
  TextInputComponent,
30181
- ImageInputComponent], exports: [ThumbnailComponent,
29764
+ ImageInputComponent,
29765
+ ApplicationBannerComponent], exports: [ThumbnailComponent,
30182
29766
  AvatarComponent,
30183
29767
  UserPreviewComponent,
30184
29768
  MarkdownParserComponent,
30185
- ImageInputComponent] }); }
29769
+ ImageInputComponent,
29770
+ ApplicationBannerComponent] }); }
30186
29771
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
30187
29772
  provideNgIconsConfig({
30188
29773
  size: '1.5em',
@@ -30201,7 +29786,8 @@ class UiElementsModule {
30201
29786
  BadgeComponent,
30202
29787
  MaxLinesComponent,
30203
29788
  TextInputComponent,
30204
- ImageInputComponent] }); }
29789
+ ImageInputComponent,
29790
+ ApplicationBannerComponent] }); }
30205
29791
  }
30206
29792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
30207
29793
  type: NgModule,
@@ -30225,6 +29811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30225
29811
  MaxLinesComponent,
30226
29812
  TextInputComponent,
30227
29813
  ImageInputComponent,
29814
+ ApplicationBannerComponent,
30228
29815
  ],
30229
29816
  providers: [
30230
29817
  provideNgIconsConfig({
@@ -30238,6 +29825,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30238
29825
  UserPreviewComponent,
30239
29826
  MarkdownParserComponent,
30240
29827
  ImageInputComponent,
29828
+ ApplicationBannerComponent,
30241
29829
  ],
30242
29830
  }]
30243
29831
  }] });
@@ -30439,6 +30027,7 @@ class ActionMenuComponent {
30439
30027
  this.duplicate = new EventEmitter();
30440
30028
  this.delete = new EventEmitter();
30441
30029
  this.closeActionMenu = new EventEmitter();
30030
+ this.rollback = new EventEmitter();
30442
30031
  this.sectionDisplayed = 'mainMenu';
30443
30032
  }
30444
30033
  openMenu() {
@@ -30449,11 +30038,16 @@ class ActionMenuComponent {
30449
30038
  this.cdr.markForCheck();
30450
30039
  }
30451
30040
  displayDeleteMenu() {
30452
- this.sectionDisplayed = 'deleteMenu';
30041
+ if (this.isDraftPage) {
30042
+ this.sectionDisplayed = 'rollbackMenu';
30043
+ }
30044
+ else {
30045
+ this.sectionDisplayed = 'deleteMenu';
30046
+ }
30453
30047
  this.cdr.markForCheck();
30454
30048
  }
30455
30049
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionMenuComponent, deps: [{ token: i1$b.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
30456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete" }, outputs: { duplicate: "duplicate", delete: "delete", closeActionMenu: "closeActionMenu" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span translate>record.action.delete</span></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
30050
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage" }, outputs: { duplicate: "duplicate", delete: "delete", closeActionMenu: "closeActionMenu", rollback: "rollback" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n *ngIf=\"!isDraftPage\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span *ngIf=\"!isDraftPage\" translate>record.action.delete</span>\n <span *ngIf=\"isDraftPage\" translate\n >record.action.rollback</span\n ></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'rollbackMenu'\">\n <div\n data-test=\"rollbackMenuSection\"\n class=\"w-80 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.undo.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.undo.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"rollback.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'120px'\"\n >{{\n 'editor.record.undo.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'120px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.undo.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
30457
30051
  }
30458
30052
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionMenuComponent, decorators: [{
30459
30053
  type: Component,
@@ -30464,17 +30058,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30464
30058
  MatDialogModule,
30465
30059
  ConfirmationDialogComponent,
30466
30060
  TranslateModule,
30467
- ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span translate>record.action.delete</span></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n" }]
30061
+ ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n *ngIf=\"!isDraftPage\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span *ngIf=\"!isDraftPage\" translate>record.action.delete</span>\n <span *ngIf=\"isDraftPage\" translate\n >record.action.rollback</span\n ></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'rollbackMenu'\">\n <div\n data-test=\"rollbackMenuSection\"\n class=\"w-80 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.undo.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.undo.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"rollback.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'120px'\"\n >{{\n 'editor.record.undo.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'120px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.undo.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n" }]
30468
30062
  }], ctorParameters: () => [{ type: i1$b.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { canDuplicate: [{
30469
30063
  type: Input
30470
30064
  }], canDelete: [{
30471
30065
  type: Input
30066
+ }], isDraftPage: [{
30067
+ type: Input
30472
30068
  }], duplicate: [{
30473
30069
  type: Output
30474
30070
  }], delete: [{
30475
30071
  type: Output
30476
30072
  }], closeActionMenu: [{
30477
30073
  type: Output
30074
+ }], rollback: [{
30075
+ type: Output
30478
30076
  }], trigger: [{
30479
30077
  type: ViewChild,
30480
30078
  args: [MatMenuTrigger]
@@ -30499,6 +30097,7 @@ class ResultsTableComponent {
30499
30097
  this.recordClick = new EventEmitter();
30500
30098
  this.duplicateRecord = new EventEmitter();
30501
30099
  this.deleteRecord = new EventEmitter();
30100
+ this.rollbackDraft = new EventEmitter();
30502
30101
  this.recordsSelectedChange = new EventEmitter();
30503
30102
  this.isActionMenuOpen = false;
30504
30103
  }
@@ -30577,6 +30176,10 @@ class ResultsTableComponent {
30577
30176
  this.deleteRecord.emit(item);
30578
30177
  this.closeActionMenu();
30579
30178
  }
30179
+ handleRollback(item) {
30180
+ this.rollbackDraft.emit(item);
30181
+ this.closeActionMenu();
30182
+ }
30580
30183
  setSortBy(col, order) {
30581
30184
  this.sortByChange.emit([col, order]);
30582
30185
  }
@@ -30601,7 +30204,7 @@ class ResultsTableComponent {
30601
30204
  this.recordsSelectedChange.emit([[record], selected]);
30602
30205
  }
30603
30206
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, deps: [{ token: i1$9.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
30604
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\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 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *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 [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\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$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { 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: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", rollbackDraft: "rollbackDraft", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\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 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *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 [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\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$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { 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: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete", "isDraftPage"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30605
30208
  }
30606
30209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
30607
30210
  type: Component,
@@ -30615,7 +30218,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30615
30218
  ActionMenuComponent,
30616
30219
  NgIconComponent,
30617
30220
  CdkOverlayOrigin,
30618
- ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\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 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *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 [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30221
+ ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\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 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *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 [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30619
30222
  }], ctorParameters: () => [{ type: i1$9.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: DateService }], propDecorators: { records: [{
30620
30223
  type: Input
30621
30224
  }], selectedRecordsIdentifiers: [{
@@ -30640,6 +30243,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30640
30243
  type: Output
30641
30244
  }], deleteRecord: [{
30642
30245
  type: Output
30246
+ }], rollbackDraft: [{
30247
+ type: Output
30643
30248
  }], recordsSelectedChange: [{
30644
30249
  type: Output
30645
30250
  }], actionMenuButtons: [{
@@ -31653,6 +31258,7 @@ class FuzzySearchComponent {
31653
31258
  this.searchService = searchService;
31654
31259
  this.recordsRepository = recordsRepository;
31655
31260
  this.autoFocus = false;
31261
+ this.forceTrackPosition = false;
31656
31262
  this.itemSelected = new EventEmitter();
31657
31263
  this.inputSubmitted = new EventEmitter();
31658
31264
  this.displayWithFn = (record) => record.title;
@@ -31695,16 +31301,18 @@ class FuzzySearchComponent {
31695
31301
  }
31696
31302
  }
31697
31303
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
31698
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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 [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31304
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus", forceTrackPosition: "forceTrackPosition" }, 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 [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n [forceTrackPosition]=\"forceTrackPosition\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31699
31305
  }
31700
31306
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FuzzySearchComponent, decorators: [{
31701
31307
  type: Component,
31702
- args: [{ selector: 'gn-ui-fuzzy-search', changeDetection: ChangeDetectionStrategy.OnPush, 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 [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n></gn-ui-autocomplete>\n" }]
31308
+ args: [{ selector: 'gn-ui-fuzzy-search', changeDetection: ChangeDetectionStrategy.OnPush, 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 [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n [forceTrackPosition]=\"forceTrackPosition\"\n></gn-ui-autocomplete>\n" }]
31703
31309
  }], ctorParameters: () => [{ type: SearchFacade }, { type: SearchService }, { type: RecordsRepositoryInterface }], propDecorators: { autocomplete: [{
31704
31310
  type: ViewChild,
31705
31311
  args: [AutocompleteComponent]
31706
31312
  }], autoFocus: [{
31707
31313
  type: Input
31314
+ }], forceTrackPosition: [{
31315
+ type: Input
31708
31316
  }], itemSelected: [{
31709
31317
  type: Output
31710
31318
  }], inputSubmitted: [{
@@ -32468,6 +32076,51 @@ class DateRangeSearchField extends SimpleSearchField {
32468
32076
  return 'dateRange';
32469
32077
  }
32470
32078
  }
32079
+ marker('search.filters.availableServices.view');
32080
+ marker('search.filters.availableServices.download');
32081
+ class AvailableServicesField extends SimpleSearchField {
32082
+ constructor(injector) {
32083
+ super('availableServices', injector, 'asc');
32084
+ this.translateService = this.injector.get(TranslateService);
32085
+ this.linkProtocolViewFilter = '/OGC:WMT?S.*/';
32086
+ this.linkProtocolDownloadFilter = '/OGC:WFS.*/';
32087
+ }
32088
+ async getBucketLabel(bucket) {
32089
+ return firstValueFrom(this.translateService.get(`search.filters.availableServices.${bucket.term}`));
32090
+ }
32091
+ getAggregations() {
32092
+ return {
32093
+ availableServices: {
32094
+ type: 'filters',
32095
+ filters: {
32096
+ view: `+linkProtocol:${this.linkProtocolViewFilter}`,
32097
+ download: `+linkProtocol:${this.linkProtocolDownloadFilter}`,
32098
+ },
32099
+ },
32100
+ };
32101
+ }
32102
+ getFiltersForValues(values) {
32103
+ const filters = {};
32104
+ if (values.includes('view'))
32105
+ filters[this.linkProtocolViewFilter] = true;
32106
+ if (values.includes('download'))
32107
+ filters[this.linkProtocolDownloadFilter] = true;
32108
+ return of({
32109
+ linkProtocol: filters,
32110
+ });
32111
+ }
32112
+ getValuesForFilter(filters) {
32113
+ const linkFilter = filters.linkProtocol;
32114
+ if (!linkFilter)
32115
+ return of([]);
32116
+ const values = [];
32117
+ if (linkFilter[this.linkProtocolViewFilter])
32118
+ values.push('view');
32119
+ if (linkFilter[this.linkProtocolDownloadFilter])
32120
+ values.push('download');
32121
+ return of(values);
32122
+ }
32123
+ }
32471
32124
 
32472
32125
  marker('search.filters.format');
32473
32126
  marker('search.filters.inspireKeyword');
@@ -32509,6 +32162,7 @@ class FieldsService {
32509
32162
  publisherOrg: new MultilingualSearchField('distributorOrgForResourceObject', this.injector, 'asc', 'key'),
32510
32163
  user: new UserSearchField(this.injector),
32511
32164
  changeDate: new DateRangeSearchField('changeDate', this.injector, 'desc'),
32165
+ availableServices: new AvailableServicesField(this.injector),
32512
32166
  };
32513
32167
  }
32514
32168
  getAvailableValues(fieldName) {
@@ -32850,7 +32504,7 @@ class ResultsTableContainerComponent {
32850
32504
  this.subscription.unsubscribe();
32851
32505
  }
32852
32506
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }, { token: NotificationsService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
32853
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDuplicating: "isDuplicating" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n [isDuplicating]=\"isDuplicating\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "canDelete", "isDraftPage", "isDuplicating"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "recordsSelectedChange"] }] }); }
32507
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDuplicating: "isDuplicating" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n [isDuplicating]=\"isDuplicating\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "canDelete", "isDraftPage", "isDuplicating"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "rollbackDraft", "recordsSelectedChange"] }] }); }
32854
32508
  }
32855
32509
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
32856
32510
  type: Component,
@@ -34721,7 +34375,7 @@ class AddLayerFromCatalogComponent {
34721
34375
  ADDLAYER: new ResultsLayoutConfigItem(AddLayerRecordPreviewComponent, 'py-2', '', 'flex flex-col divide-y divide-y-grey-50'),
34722
34376
  },
34723
34377
  },
34724
- ], ngImport: i0, template: "<div class=\"h-full text-sm\">\n <gn-ui-fuzzy-search></gn-ui-fuzzy-search>\n <gn-ui-results-list-container\n layout=\"ADDLAYER\"\n ></gn-ui-results-list-container>\n</div>\n", styles: ["::ng-deep .mat-tab-body-wrapper{flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: FeatureSearchModule }, { kind: "component", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: ["autoFocus"], outputs: ["itemSelected", "inputSubmitted"] }, { kind: "component", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: ["metadataQualityDisplay", "layout", "showMore"], outputs: ["mdSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34378
+ ], ngImport: i0, template: "<div class=\"h-full text-sm\">\n <gn-ui-fuzzy-search></gn-ui-fuzzy-search>\n <gn-ui-results-list-container\n layout=\"ADDLAYER\"\n ></gn-ui-results-list-container>\n</div>\n", styles: ["::ng-deep .mat-tab-body-wrapper{flex-grow:1}\n"], dependencies: [{ kind: "ngmodule", type: FeatureSearchModule }, { kind: "component", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: ["autoFocus", "forceTrackPosition"], outputs: ["itemSelected", "inputSubmitted"] }, { kind: "component", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: ["metadataQualityDisplay", "layout", "showMore"], outputs: ["mdSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34725
34379
  }
34726
34380
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLayerFromCatalogComponent, decorators: [{
34727
34381
  type: Component,
@@ -34999,6 +34653,9 @@ const loadFullMetadata = createAction('[Metadata view] Load full metadata', prop
34999
34653
  const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
35000
34654
  const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
35001
34655
  const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
34656
+ const loadFeatureCatalog = createAction("[Metadata view] Load metadata's feature catalog", props());
34657
+ const loadFeatureCatalogSuccess = createAction('[Metadata view] Load metadata feature catalog success', props());
34658
+ const loadFeatureCatalogFailure = createAction('[Metadata view] Load metadata feature catalog failure', props());
35002
34659
  const closeMetadata = createAction('[Metadata view] close');
35003
34660
  /*
35004
34661
  Related actions
@@ -35024,6 +34681,9 @@ var mdview_actions = /*#__PURE__*/Object.freeze({
35024
34681
  addUserFeedbackFailure: addUserFeedbackFailure,
35025
34682
  addUserFeedbackSuccess: addUserFeedbackSuccess,
35026
34683
  closeMetadata: closeMetadata,
34684
+ loadFeatureCatalog: loadFeatureCatalog,
34685
+ loadFeatureCatalogFailure: loadFeatureCatalogFailure,
34686
+ loadFeatureCatalogSuccess: loadFeatureCatalogSuccess,
35027
34687
  loadFullMetadata: loadFullMetadata,
35028
34688
  loadFullMetadataFailure: loadFullMetadataFailure,
35029
34689
  loadFullMetadataSuccess: loadFullMetadataSuccess,
@@ -35041,6 +34701,8 @@ const initialMetadataViewState = {
35041
34701
  loadingFull: false,
35042
34702
  allUserFeedbacksLoading: false,
35043
34703
  addUserFeedbackLoading: false,
34704
+ featureCatalogLoading: false,
34705
+ featureCatalogError: null,
35044
34706
  };
35045
34707
  const metadataViewReducer = createReducer(initialMetadataViewState,
35046
34708
  /*
@@ -35100,6 +34762,22 @@ on(loadUserFeedbacks, (state) => ({
35100
34762
  error: { otherError, notFound },
35101
34763
  addUserFeedbackLoading: false,
35102
34764
  allUserFeedbacksLoading: false,
34765
+ })),
34766
+ /**
34767
+ * FeatureCatalog reducers
34768
+ */
34769
+ on(loadFeatureCatalog, (state) => ({
34770
+ ...state,
34771
+ featureCatalogError: null,
34772
+ featureCatalogLoading: true,
34773
+ })), on(loadFeatureCatalogSuccess, (state, { datasetCatalog }) => ({
34774
+ ...state,
34775
+ featureCatalog: datasetCatalog,
34776
+ featureCatalogLoading: false,
34777
+ })), on(loadFeatureCatalogFailure, (state, { error }) => ({
34778
+ ...state,
34779
+ featureCatalogError: error,
34780
+ featureCatalogLoading: false,
35103
34781
  })));
35104
34782
  function reducer$1(metadataViewState, action) {
35105
34783
  return metadataViewReducer(metadataViewState, action);
@@ -35128,6 +34806,11 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
35128
34806
  const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
35129
34807
  const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
35130
34808
  const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
34809
+ /*
34810
+ Feature Catalog Selectors
34811
+ */
34812
+ const getFeatureCatalog = createSelector(getMdViewState, (state) => state.featureCatalog);
34813
+ const getFeatureCatalogIsLoading = createSelector(getMdViewState, (state) => state.featureCatalogLoading);
35131
34814
 
35132
34815
  class FetchError {
35133
34816
  constructor(type, info, httpStatus = 0) {
@@ -35137,8 +34820,12 @@ class FetchError {
35137
34820
  this.stack = null;
35138
34821
  this.message = `An error happened in the data fetcher, type: ${type}, info: ${info}`;
35139
34822
  }
35140
- static http(code) {
35141
- return new FetchError('http', '', code);
34823
+ static http(code, body) {
34824
+ const info = body
34825
+ ? `Error ${code}
34826
+ ${body}`
34827
+ : `${code}`;
34828
+ return new FetchError('http', info, code);
35142
34829
  }
35143
34830
  static corsOrNetwork(message) {
35144
34831
  return new FetchError('network', message, 0);
@@ -35239,30 +34926,34 @@ function fetchHeaders(url) {
35239
34926
  return parseHeaders(response.headers);
35240
34927
  });
35241
34928
  }
35242
- function fetchDataAsText(url) {
35243
- return useCache(() => sharedFetch(url)
34929
+ function fetchDataAsText(url, cacheActive) {
34930
+ const fetchFactory = () => sharedFetch(url)
35244
34931
  .catch((error) => {
35245
34932
  throw FetchError.corsOrNetwork(error.message);
35246
34933
  })
35247
34934
  .then(async (response) => {
35248
34935
  if (!response.ok) {
35249
- throw FetchError.http(response.status);
34936
+ const clonedResponse = response.clone();
34937
+ throw FetchError.http(response.status, await clonedResponse.text());
35250
34938
  }
35251
- return response.text();
35252
- }), url, 'asText');
34939
+ const clonedResponse = response.clone();
34940
+ return clonedResponse.text();
34941
+ });
34942
+ return cacheActive ? useCache(fetchFactory, url, 'asText') : fetchFactory();
35253
34943
  }
35254
- function fetchDataAsArrayBuffer(url) {
35255
- return useCache(() => sharedFetch(url)
34944
+ function fetchDataAsArrayBuffer(url, cacheActive) {
34945
+ const fetchFactory = () => sharedFetch(url)
35256
34946
  .catch((error) => {
35257
34947
  throw FetchError.corsOrNetwork(error.message);
35258
34948
  })
35259
34949
  .then(async (response) => {
35260
34950
  if (!response.ok) {
35261
- throw FetchError.http(response.status);
34951
+ throw FetchError.http(response.status, await response.text());
35262
34952
  }
35263
34953
  // convert to a numeric array so that we can store the response in cache
35264
34954
  return Array.from(new Uint8Array(await response.arrayBuffer()));
35265
- }), url, 'asArrayBuffer').then((array) => {
34955
+ });
34956
+ return (cacheActive ? useCache(fetchFactory, url, 'asArrayBuffer') : fetchFactory()).then((array) => {
35266
34957
  return new Uint8Array(array).buffer;
35267
34958
  });
35268
34959
  }
@@ -35408,68 +35099,6 @@ function getJsonDataItemsProxy(items) {
35408
35099
  });
35409
35100
  }
35410
35101
 
35411
- class BaseReader {
35412
- constructor(url) {
35413
- this.url = url;
35414
- this.selected = null;
35415
- this.groupedBy = null;
35416
- this.aggregations = null;
35417
- this.filter = null;
35418
- this.sort = null;
35419
- this.startIndex = null;
35420
- this.count = null;
35421
- }
35422
- load() {
35423
- throw new Error('not implemented');
35424
- }
35425
- get properties() {
35426
- throw new Error('not implemented');
35427
- }
35428
- get info() {
35429
- throw new Error('not implemented');
35430
- }
35431
- read() {
35432
- throw new Error('not implemented');
35433
- }
35434
- selectAll() {
35435
- this.groupedBy = null;
35436
- this.aggregations = null;
35437
- this.selected = null;
35438
- this.filter = null;
35439
- this.startIndex = null;
35440
- this.count = null;
35441
- return this;
35442
- }
35443
- select(...selectedFields) {
35444
- this.selected = selectedFields;
35445
- this.aggregations = null; // clear aggregations & groups when selecting fields
35446
- this.groupedBy = null;
35447
- return this;
35448
- }
35449
- groupBy(...groupBy) {
35450
- this.groupedBy = groupBy;
35451
- this.selected = null; // clear normal field selection when aggregating
35452
- return this;
35453
- }
35454
- aggregate(...aggregations) {
35455
- this.aggregations = aggregations;
35456
- return this;
35457
- }
35458
- where(filter) {
35459
- this.filter = filter;
35460
- return this;
35461
- }
35462
- orderBy(...fieldSorts) {
35463
- this.sort = fieldSorts;
35464
- return this;
35465
- }
35466
- limit(startIndex, count) {
35467
- this.startIndex = startIndex;
35468
- this.count = count;
35469
- return this;
35470
- }
35471
- }
35472
-
35473
35102
  function filterToSql(filter) {
35474
35103
  const operator = filter[0];
35475
35104
  const args = filter.slice(1);
@@ -35563,7 +35192,80 @@ function generateSqlQuery(selected = null, filter = null, sort = null, startInde
35563
35192
  return sqlSelect + sqlFrom + sqlGroupBy + sqlOrderBy + sqlWhere + sqlLimit;
35564
35193
  }
35565
35194
 
35566
- class BaseFileReader extends BaseReader {
35195
+ class BaseReader {
35196
+ constructor(url) {
35197
+ this.url = url;
35198
+ this.selected = null;
35199
+ this.groupedBy = null;
35200
+ this.aggregations = null;
35201
+ this.filter = null;
35202
+ this.sort = null;
35203
+ this.startIndex = null;
35204
+ this.count = null;
35205
+ }
35206
+ load() {
35207
+ throw new Error('not implemented');
35208
+ }
35209
+ get properties() {
35210
+ throw new Error('not implemented');
35211
+ }
35212
+ get info() {
35213
+ throw new Error('not implemented');
35214
+ }
35215
+ read() {
35216
+ throw new Error('not implemented');
35217
+ }
35218
+ selectAll() {
35219
+ this.groupedBy = null;
35220
+ this.aggregations = null;
35221
+ this.selected = null;
35222
+ this.filter = null;
35223
+ this.startIndex = null;
35224
+ this.count = null;
35225
+ return this;
35226
+ }
35227
+ select(...selectedFields) {
35228
+ this.selected = selectedFields;
35229
+ this.aggregations = null; // clear aggregations & groups when selecting fields
35230
+ this.groupedBy = null;
35231
+ return this;
35232
+ }
35233
+ groupBy(...groupBy) {
35234
+ this.groupedBy = groupBy;
35235
+ this.selected = null; // clear normal field selection when aggregating
35236
+ return this;
35237
+ }
35238
+ aggregate(...aggregations) {
35239
+ this.aggregations = aggregations;
35240
+ return this;
35241
+ }
35242
+ where(filter) {
35243
+ this.filter = filter;
35244
+ return this;
35245
+ }
35246
+ orderBy(...fieldSorts) {
35247
+ this.sort = fieldSorts;
35248
+ return this;
35249
+ }
35250
+ limit(startIndex, count) {
35251
+ this.startIndex = startIndex;
35252
+ this.count = count;
35253
+ return this;
35254
+ }
35255
+ }
35256
+
35257
+ class BaseCacheReader extends BaseReader {
35258
+ constructor(url, cacheActive = true) {
35259
+ super(url);
35260
+ this.url = url;
35261
+ this.cacheActive = cacheActive;
35262
+ }
35263
+ setCacheActive(value) {
35264
+ this.cacheActive = value;
35265
+ }
35266
+ }
35267
+
35268
+ class BaseFileReader extends BaseCacheReader {
35567
35269
  getData() {
35568
35270
  throw new Error('not implemented');
35569
35271
  }
@@ -35627,7 +35329,7 @@ function parseCsv(text) {
35627
35329
  }
35628
35330
  class CsvReader extends BaseFileReader {
35629
35331
  getData() {
35630
- return fetchDataAsText(this.url).then(parseCsv);
35332
+ return fetchDataAsText(this.url, this.cacheActive).then(parseCsv);
35631
35333
  }
35632
35334
  }
35633
35335
 
@@ -35644,7 +35346,7 @@ function parseJson(text) {
35644
35346
  }
35645
35347
  class JsonReader extends BaseFileReader {
35646
35348
  getData() {
35647
- return fetchDataAsText(this.url).then(parseJson);
35349
+ return fetchDataAsText(this.url, this.cacheActive).then(parseJson);
35648
35350
  }
35649
35351
  }
35650
35352
 
@@ -35663,7 +35365,7 @@ function parseGeojson(text) {
35663
35365
  }
35664
35366
  class GeojsonReader extends BaseFileReader {
35665
35367
  getData() {
35666
- return fetchDataAsText(this.url).then(parseGeojson);
35368
+ return fetchDataAsText(this.url, this.cacheActive).then(parseGeojson);
35667
35369
  }
35668
35370
  }
35669
35371
 
@@ -35685,7 +35387,7 @@ function parseExcel(buffer) {
35685
35387
  }
35686
35388
  class ExcelReader extends BaseFileReader {
35687
35389
  getData() {
35688
- return fetchDataAsArrayBuffer(this.url).then(parseExcel);
35390
+ return fetchDataAsArrayBuffer(this.url, this.cacheActive).then(parseExcel);
35689
35391
  }
35690
35392
  }
35691
35393
 
@@ -35712,25 +35414,39 @@ function parseGml(text, namespace, version) {
35712
35414
  throw Error("Couldn't retrieve namespace url");
35713
35415
  }
35714
35416
  class GmlReader extends BaseFileReader {
35715
- constructor(url, namespace, version) {
35417
+ constructor(url, namespace, version, cacheActive = true) {
35716
35418
  super(url);
35419
+ this.url = url;
35717
35420
  this.namespace = namespace;
35718
35421
  this.version = version;
35422
+ this.cacheActive = cacheActive;
35719
35423
  }
35720
35424
  getData() {
35721
- return fetchDataAsText(this.url).then((text) => parseGml(text, this.namespace, this.version));
35425
+ return fetchDataAsText(this.url, this.cacheActive).then((text) => parseGml(text, this.namespace, this.version));
35722
35426
  }
35723
35427
  }
35724
35428
 
35725
- class WfsReader extends BaseReader {
35726
- constructor(url, wfsEndpoint, featureTypeName) {
35727
- super(url);
35429
+ class WfsReader extends BaseCacheReader {
35430
+ constructor(url, wfsEndpoint, featureTypeName, cacheActive) {
35431
+ super(url, cacheActive);
35728
35432
  this.endpoint = wfsEndpoint;
35729
35433
  this.featureTypeName = featureTypeName;
35730
35434
  this.version = this.endpoint.getVersion();
35731
35435
  }
35732
35436
  get properties() {
35733
- return this.getData().then((result) => result.properties);
35437
+ return this.endpoint
35438
+ .getFeatureTypeFull(this.featureTypeName)
35439
+ .then((featureType) => Object.keys(featureType.properties).map((prop) => {
35440
+ const originalType = featureType.properties[prop];
35441
+ const type = originalType === 'float' || originalType === 'integer'
35442
+ ? 'number'
35443
+ : originalType; // FIXME: ogc-client typing is incorrect, should be a string union
35444
+ return {
35445
+ name: prop,
35446
+ label: prop,
35447
+ type,
35448
+ };
35449
+ }));
35734
35450
  }
35735
35451
  get info() {
35736
35452
  return this.endpoint.getFeatureTypeFull(this.featureTypeName).then((result) => ({
@@ -35767,13 +35483,18 @@ class WfsReader extends BaseReader {
35767
35483
  throw new Error('wfs.geojsongml.notsupported');
35768
35484
  }
35769
35485
  }
35770
- getData() {
35486
+ async getData(aggregation, groupedBy) {
35487
+ if (aggregation || groupedBy) {
35488
+ return { items: await this.getQueryData() };
35489
+ }
35771
35490
  const asJson = this.endpoint.supportsJson(this.featureTypeName);
35491
+ const attributes = this.selected ?? undefined;
35772
35492
  let url = this.endpoint.getFeatureUrl(this.featureTypeName, {
35773
35493
  ...(this.startIndex !== null && { startIndex: this.startIndex }),
35774
35494
  ...(this.count !== null && { maxFeatures: this.count }),
35775
35495
  asJson,
35776
35496
  outputCrs: 'EPSG:4326',
35497
+ attributes,
35777
35498
  // sortBy: this.sort // TODO: no sort in ogc-client?
35778
35499
  });
35779
35500
  if (Array.isArray(this.sort) && this.sort.length > 0) {
@@ -35784,19 +35505,26 @@ class WfsReader extends BaseReader {
35784
35505
  // Direct update on string url to prevent encoding of +A and +D
35785
35506
  url = `${url}${finalUrl.search ? '&' : ''}SORTBY=${sorts}`;
35786
35507
  }
35787
- return fetchDataAsText(url).then((text) => asJson
35508
+ return fetchDataAsText(url, this.cacheActive).then((text) => asJson
35788
35509
  ? parseGeojson(text)
35789
35510
  : parseGml(text, this.featureTypeName, this.version));
35790
35511
  }
35512
+ async getQueryData() {
35513
+ const items = (await this.getData()).items;
35514
+ const jsonItems = getJsonDataItemsProxy(items);
35515
+ const query = generateSqlQuery(this.selected, this.filter, this.sort, this.startIndex, this.count, this.groupedBy, this.aggregations);
35516
+ const result = await import('alasql').then((module) => module.default(query, [jsonItems]));
35517
+ return result.map(jsonToGeojsonFeature);
35518
+ }
35791
35519
  load() {
35792
35520
  // Nothing to load for Wfs
35793
35521
  }
35794
35522
  async read() {
35795
- return (await this.getData()).items;
35523
+ return (await this.getData(this.aggregations, this.groupedBy)).items;
35796
35524
  }
35797
35525
  }
35798
35526
 
35799
- async function openDataset(url, typeHint, options) {
35527
+ async function openDataset(url, typeHint, options, cacheActive) {
35800
35528
  const fileType = await inferDatasetType(url, typeHint);
35801
35529
  let reader;
35802
35530
  try {
@@ -35820,6 +35548,7 @@ async function openDataset(url, typeHint, options) {
35820
35548
  reader = await WfsReader.createReader(url, options.wfsFeatureType);
35821
35549
  break;
35822
35550
  }
35551
+ reader.setCacheActive(cacheActive);
35823
35552
  reader.load();
35824
35553
  return reader;
35825
35554
  }
@@ -35836,8 +35565,8 @@ async function openDataset(url, typeHint, options) {
35836
35565
  * 2. otherwise, look for a Content-Type header in the response with a supported mime type
35837
35566
  * 3. if no valid mime type was found, look for an explicit file extension in the url (.csv, .geojson etc.)
35838
35567
  */
35839
- async function readDataset(url, typeHint, options) {
35840
- const reader = await openDataset(url, typeHint, options);
35568
+ async function readDataset(url, typeHint, options, cacheActive = true) {
35569
+ const reader = await openDataset(url, typeHint, options, cacheActive);
35841
35570
  try {
35842
35571
  return await reader.read();
35843
35572
  }
@@ -35941,18 +35670,28 @@ class DataService {
35941
35670
  }
35942
35671
  getDownloadLinksFromWfs(wfsLink) {
35943
35672
  // Pour DL toutes les données
35944
- return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
35945
- ...wfsLink,
35946
- type: 'download',
35947
- url: new URL(urls[format]),
35948
- mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
35949
- }))));
35673
+ return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => {
35674
+ if (urls.geojson) {
35675
+ urls.all['application/json'] = urls.geojson;
35676
+ }
35677
+ return urls;
35678
+ }), map$1((urls) => {
35679
+ const resources = Object.keys(urls.all).map((format) => ({
35680
+ ...wfsLink,
35681
+ name: wfsLink.name,
35682
+ type: 'download',
35683
+ url: new URL(urls.all[format]),
35684
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
35685
+ }));
35686
+ return resources;
35687
+ }));
35950
35688
  }
35951
35689
  async getDownloadLinksFromOgcApiFeatures(ogcApiLink) {
35952
35690
  const collectionInfo = await this.getDownloadUrlsFromOgcApi(ogcApiLink.url.href);
35953
35691
  return Object.keys(collectionInfo.bulkDownloadLinks).map((downloadLink) => {
35954
35692
  return {
35955
35693
  ...ogcApiLink,
35694
+ name: collectionInfo.id,
35956
35695
  type: 'download',
35957
35696
  url: new URL(collectionInfo.bulkDownloadLinks[downloadLink]),
35958
35697
  mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(downloadLink)),
@@ -35988,18 +35727,18 @@ class DataService {
35988
35727
  mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
35989
35728
  }));
35990
35729
  }
35991
- readAsGeoJson(link) {
35992
- return this.getDataset(link).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
35730
+ readAsGeoJson(link, cacheActive) {
35731
+ return this.getDataset(link, cacheActive).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
35993
35732
  type: 'FeatureCollection',
35994
35733
  features,
35995
35734
  })));
35996
35735
  }
35997
- getDataset(link) {
35736
+ getDataset(link, cacheActive) {
35998
35737
  if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
35999
35738
  const wfsUrlEndpoint = this.proxy.getProxiedUrl(link.url.toString());
36000
35739
  return from(openDataset(wfsUrlEndpoint, 'wfs', {
36001
35740
  wfsFeatureType: link.name,
36002
- }));
35741
+ }, cacheActive));
36003
35742
  }
36004
35743
  else if (link.type === 'download') {
36005
35744
  const linkProxifiedUrl = this.proxy.getProxiedUrl(link.url.toString());
@@ -36007,18 +35746,18 @@ class DataService {
36007
35746
  const supportedType = SupportedTypes.indexOf(format) > -1
36008
35747
  ? format
36009
35748
  : undefined;
36010
- return from(openDataset(linkProxifiedUrl, supportedType)).pipe();
35749
+ return from(openDataset(linkProxifiedUrl, supportedType, undefined, cacheActive)).pipe();
36011
35750
  }
36012
35751
  else if (link.type === 'service' &&
36013
35752
  link.accessServiceProtocol === 'esriRest') {
36014
35753
  const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
36015
- return from(openDataset(url, 'geojson')).pipe();
35754
+ return from(openDataset(url, 'geojson', undefined, cacheActive)).pipe();
36016
35755
  }
36017
35756
  else if (link.type === 'service' &&
36018
35757
  link.accessServiceProtocol === 'ogcFeatures') {
36019
35758
  return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
36020
35759
  const geojsonUrl = collectionInfo.jsonDownloadLink;
36021
- return openDataset(geojsonUrl, 'geojson');
35760
+ return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
36022
35761
  }), tap$1((url) => {
36023
35762
  if (url === null) {
36024
35763
  throw new Error('wfs.geojsongml.notsupported');
@@ -36265,22 +36004,136 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36265
36004
  args: ['chartCanvas']
36266
36005
  }] } });
36267
36006
 
36268
- const rowIdPrefix = 'table-item-';
36269
- class TableComponent {
36270
- set data(value) {
36271
- this.dataSource = new TableVirtualScrollDataSource(value);
36272
- this.dataSource.sort = this.sort;
36273
- this.properties =
36274
- Array.isArray(value) && value.length ? Object.keys(value[0]) : [];
36275
- this.count = value.length;
36007
+ class DataTableDataSource {
36008
+ constructor() {
36009
+ this.dataItems$ = new BehaviorSubject([]);
36010
+ }
36011
+ connect() {
36012
+ return this.dataItems$.asObservable().pipe(map$1((items) => items.map((item) => ({
36013
+ id: item.id,
36014
+ ...item.properties,
36015
+ }))));
36016
+ }
36017
+ disconnect() {
36018
+ this.dataItems$.complete();
36019
+ }
36020
+ async showData(itemsPromise) {
36021
+ const items = await itemsPromise;
36022
+ this.dataItems$.next(items);
36023
+ }
36024
+ clearData() {
36025
+ this.dataItems$.next([]);
36026
+ }
36027
+ }
36028
+
36029
+ class CustomMatPaginatorIntl extends MatPaginatorIntl {
36030
+ constructor(translate) {
36031
+ super();
36032
+ this.translate = translate;
36033
+ this.changes = new Subject();
36034
+ this.setLabels();
36035
+ this.translate.onLangChange.subscribe(() => {
36036
+ this.setLabels();
36037
+ this.changes.next();
36038
+ });
36039
+ }
36040
+ setLabels() {
36041
+ this.itemsPerPageLabel = this.translate.instant('table.paginator.itemsPerPage');
36042
+ this.nextPageLabel = this.translate.instant('table.paginator.nextPage');
36043
+ this.previousPageLabel = this.translate.instant('table.paginator.previousPage');
36044
+ this.firstPageLabel = this.translate.instant('table.paginator.firstPage');
36045
+ this.lastPageLabel = this.translate.instant('table.paginator.lastPage');
36046
+ this.getRangeLabel = this.getRangeLabelIntl;
36047
+ this.changes.next();
36048
+ }
36049
+ getRangeLabelIntl(page, pageSize, length) {
36050
+ if (length === 0 || pageSize === 0) {
36051
+ return this.translate.instant('table.paginator.rangeLabel', {
36052
+ startIndex: 0,
36053
+ endIndex: 0,
36054
+ length,
36055
+ });
36056
+ }
36057
+ const startIndex = page * pageSize;
36058
+ const endIndex = startIndex < length
36059
+ ? Math.min(startIndex + pageSize, length)
36060
+ : startIndex + pageSize;
36061
+ return this.translate.instant('table.paginator.rangeLabel', {
36062
+ startIndex: startIndex + 1,
36063
+ endIndex,
36064
+ length,
36065
+ });
36276
36066
  }
36277
- constructor(eltRef) {
36067
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomMatPaginatorIntl, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
36068
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomMatPaginatorIntl }); }
36069
+ }
36070
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomMatPaginatorIntl, decorators: [{
36071
+ type: Injectable
36072
+ }], ctorParameters: () => [{ type: i1$1.TranslateService }] });
36073
+
36074
+ const rowIdPrefix = 'table-item-';
36075
+ class DataTableComponent {
36076
+ set dataset(value) {
36077
+ this.properties$.next(null);
36078
+ this.dataset_ = value;
36079
+ this.dataset_.load();
36080
+ this.dataset_.properties.then((properties) => this.properties$.next(properties.map((p) => p.name)));
36081
+ this.dataset_.info.then((info) => (this.count = info.itemsCount));
36082
+ }
36083
+ constructor(eltRef, cdr, translateService) {
36278
36084
  this.eltRef = eltRef;
36085
+ this.cdr = cdr;
36086
+ this.translateService = translateService;
36279
36087
  this.selected = new EventEmitter();
36088
+ this.properties$ = new BehaviorSubject(null);
36089
+ this.loading$ = new BehaviorSubject(false);
36090
+ this.error = null;
36091
+ }
36092
+ ngOnInit() {
36093
+ this.dataSource = new DataTableDataSource();
36280
36094
  }
36281
36095
  ngAfterViewInit() {
36282
36096
  this.headerHeight =
36283
36097
  this.eltRef.nativeElement.querySelector('thead').offsetHeight;
36098
+ this.setPagination();
36099
+ this.cdr.detectChanges();
36100
+ }
36101
+ ngOnChanges() {
36102
+ this.setPagination();
36103
+ }
36104
+ setSort(sort) {
36105
+ if (!this.dataset_)
36106
+ return;
36107
+ if (!sort.active) {
36108
+ this.dataset_.orderBy();
36109
+ }
36110
+ else {
36111
+ this.dataset_.orderBy([sort.direction || 'asc', sort.active]);
36112
+ }
36113
+ this.readData();
36114
+ }
36115
+ setPagination() {
36116
+ if (!this.paginator)
36117
+ return;
36118
+ if (!this.dataset_)
36119
+ return;
36120
+ this.dataset_.limit(this.paginator.pageIndex * this.paginator.pageSize, this.paginator.pageSize);
36121
+ this.readData();
36122
+ }
36123
+ async readData() {
36124
+ this.loading$.next(true);
36125
+ // wait for properties to be read
36126
+ const properties = await firstValueFrom(this.properties$.pipe(filter$1((p) => !!p)));
36127
+ const propsWithoutGeom = properties.filter((p) => !p.toLowerCase().startsWith('geom'));
36128
+ this.dataset_.select(...propsWithoutGeom);
36129
+ try {
36130
+ await this.dataSource.showData(this.dataset_.read());
36131
+ this.error = null;
36132
+ }
36133
+ catch (error) {
36134
+ this.handleError(error);
36135
+ }
36136
+ this.loading$.next(false);
36284
36137
  }
36285
36138
  scrollToItem(itemId) {
36286
36139
  const row = this.eltRef.nativeElement.querySelector(`#${this.getRowEltId(itemId)}`);
@@ -36289,20 +36142,36 @@ class TableComponent {
36289
36142
  getRowEltId(id) {
36290
36143
  return rowIdPrefix + id;
36291
36144
  }
36292
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
36293
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$d.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$d.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$d.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$d.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$d.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$d.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$d.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$d.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$d.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$d.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$4.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$4.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$1.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36145
+ handleError(error) {
36146
+ this.dataSource.clearData();
36147
+ if (error instanceof FetchError) {
36148
+ this.error = this.translateService.instant(`dataset.error.${error.type}`, {
36149
+ info: error.info,
36150
+ });
36151
+ console.warn(error.message);
36152
+ }
36153
+ else {
36154
+ this.error = this.translateService.instant(error.message);
36155
+ console.warn(error.stack || error);
36156
+ }
36157
+ }
36158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
36159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "gn-ui-data-table", inputs: { dataset: "dataset", activeId: "activeId" }, outputs: { selected: "selected" }, providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$4.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { 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: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36294
36160
  }
36295
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, decorators: [{
36161
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
36296
36162
  type: Component,
36297
36163
  args: [{ standalone: true, imports: [
36298
36164
  MatTableModule,
36299
36165
  MatSortModule,
36300
- TableVirtualScrollModule,
36166
+ MatPaginatorModule,
36301
36167
  ScrollingModule,
36302
- NgForOf,
36303
36168
  TranslateModule,
36304
- ], selector: 'gn-ui-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"] }]
36305
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { data: [{
36169
+ CommonModule,
36170
+ LoadingMaskComponent,
36171
+ PopupAlertComponent,
36172
+ LetDirective,
36173
+ ], providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], selector: 'gn-ui-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"] }]
36174
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { dataset: [{
36306
36175
  type: Input
36307
36176
  }], activeId: [{
36308
36177
  type: Input
@@ -36310,48 +36179,93 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36310
36179
  type: Output
36311
36180
  }], sort: [{
36312
36181
  type: ViewChild,
36313
- args: [MatSort, { static: true }]
36182
+ args: [MatSort]
36183
+ }], paginator: [{
36184
+ type: ViewChild,
36185
+ args: [MatPaginator]
36314
36186
  }] } });
36315
36187
 
36316
- const tableItemFixture = () => [
36317
- {
36318
- name: 'name 1',
36319
- id: 'id 1',
36320
- age: 15,
36321
- },
36322
- {
36323
- name: 'name 2',
36324
- id: 'id 2',
36325
- age: 10,
36326
- },
36327
- {
36328
- name: 'name 3',
36329
- id: 'id 3',
36330
- age: 55,
36331
- },
36332
- ];
36333
- const someHabTableItemFixture = () => [
36334
- {
36335
- name: 'France',
36336
- id: '1',
36337
- pop: 50500000,
36338
- },
36339
- {
36340
- name: 'Italy',
36341
- id: '2',
36342
- pop: 155878789655,
36343
- },
36344
- {
36345
- name: 'UK',
36346
- id: '3',
36347
- pop: 31522456,
36348
- },
36349
- {
36350
- name: 'US',
36351
- id: '4',
36352
- pop: 3215448888,
36353
- },
36354
- ];
36188
+ const tableItemsFixture = {
36189
+ items: [
36190
+ {
36191
+ type: 'Feature',
36192
+ geometry: null,
36193
+ properties: {
36194
+ id: '0001',
36195
+ firstName: 'John',
36196
+ lastName: 'Lennon',
36197
+ },
36198
+ },
36199
+ {
36200
+ type: 'Feature',
36201
+ geometry: null,
36202
+ properties: {
36203
+ id: '0002',
36204
+ firstName: 'Ozzy',
36205
+ lastName: 'Osbourne',
36206
+ },
36207
+ },
36208
+ {
36209
+ type: 'Feature',
36210
+ geometry: null,
36211
+ properties: {
36212
+ id: '0003',
36213
+ firstName: 'Claude',
36214
+ lastName: 'François',
36215
+ },
36216
+ },
36217
+ ],
36218
+ properties: [
36219
+ { name: 'id', label: 'id', type: 'string' },
36220
+ { name: 'firstName', label: 'Firstname', type: 'string' },
36221
+ { name: 'lastName', label: 'Lastname', type: 'string' },
36222
+ ],
36223
+ };
36224
+ const someHabTableItemFixture = {
36225
+ items: [
36226
+ {
36227
+ type: 'Feature',
36228
+ geometry: null,
36229
+ properties: {
36230
+ id: '1',
36231
+ name: 'France',
36232
+ pop: 50500000,
36233
+ },
36234
+ },
36235
+ {
36236
+ type: 'Feature',
36237
+ geometry: null,
36238
+ properties: {
36239
+ id: '2',
36240
+ name: 'Italy',
36241
+ pop: 155878789655,
36242
+ },
36243
+ },
36244
+ {
36245
+ type: 'Feature',
36246
+ geometry: null,
36247
+ properties: {
36248
+ id: '3',
36249
+ name: 'UK',
36250
+ pop: 31522456,
36251
+ },
36252
+ },
36253
+ {
36254
+ type: 'Feature',
36255
+ geometry: null,
36256
+ properties: {
36257
+ id: '4',
36258
+ name: 'US',
36259
+ pop: 3215448888,
36260
+ },
36261
+ },
36262
+ ],
36263
+ properties: [
36264
+ { name: 'id', label: 'ID', type: 'string' },
36265
+ { name: 'name', label: 'Name', type: 'string' },
36266
+ { name: 'pop', label: 'Population', type: 'number' },
36267
+ ],
36268
+ };
36355
36269
 
36356
36270
  marker('chart.type.bar');
36357
36271
  marker('chart.type.barHorizontal');
@@ -36408,6 +36322,7 @@ class ChartViewComponent {
36408
36322
  this.dataService = dataService;
36409
36323
  this.changeDetector = changeDetector;
36410
36324
  this.translateService = translateService;
36325
+ this.cacheActive = true;
36411
36326
  this.currentLink$ = new BehaviorSubject(null);
36412
36327
  this.aggregation$ = new BehaviorSubject('sum');
36413
36328
  this.xProperty$ = new BehaviorSubject(undefined);
@@ -36437,7 +36352,7 @@ class ChartViewComponent {
36437
36352
  this.dataset$ = this.currentLink$.pipe(filter((link) => !!link), switchMap$1((link) => {
36438
36353
  this.error = null;
36439
36354
  this.loading = true;
36440
- return this.dataService.getDataset(link).pipe(catchError((error) => {
36355
+ return this.dataService.getDataset(link, this.cacheActive).pipe(catchError((error) => {
36441
36356
  this.handleError(error);
36442
36357
  return EMPTY;
36443
36358
  }));
@@ -36506,7 +36421,7 @@ class ChartViewComponent {
36506
36421
  this.changeDetector.detectChanges();
36507
36422
  }
36508
36423
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, deps: [{ token: DataService }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
36509
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36424
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { cacheActive: "cacheActive", link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36510
36425
  }
36511
36426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, decorators: [{
36512
36427
  type: Component,
@@ -36518,7 +36433,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36518
36433
  LoadingMaskComponent,
36519
36434
  PopupAlertComponent,
36520
36435
  ], standalone: true, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
36521
- }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { link: [{
36436
+ }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
36437
+ type: Input
36438
+ }], link: [{
36522
36439
  type: Input
36523
36440
  }], aggregation: [{
36524
36441
  type: Input
@@ -36593,22 +36510,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36593
36510
  }] } });
36594
36511
 
36595
36512
  class GeoTableViewComponent {
36596
- get features() {
36597
- return this.data.features;
36598
- }
36599
36513
  constructor(changeRef) {
36600
36514
  this.changeRef = changeRef;
36601
- this.data = { type: 'FeatureCollection', features: [] };
36602
36515
  this.subscription = new Subscription();
36603
36516
  }
36604
- ngOnInit() {
36605
- this.tableData = this.geojsonToTableData(this.data);
36606
- this.mapContext = this.initMapContext();
36517
+ async ngOnInit() {
36518
+ this.mapContext = await this.initMapContext();
36607
36519
  }
36608
36520
  onTableSelect(tableEntry) {
36609
36521
  const { id } = tableEntry;
36610
36522
  this.selectionId = id;
36611
- this.selection = this.getFeatureFromId(id);
36523
+ // this.selection = this.getFeatureFromId(id)
36612
36524
  if (this.selection) {
36613
36525
  this.animateToFeature(this.selection);
36614
36526
  }
@@ -36629,7 +36541,8 @@ class GeoTableViewComponent {
36629
36541
  ...f.properties,
36630
36542
  }));
36631
36543
  }
36632
- initMapContext() {
36544
+ async initMapContext() {
36545
+ this.dataset.selectAll();
36633
36546
  return {
36634
36547
  layers: [
36635
36548
  {
@@ -36638,7 +36551,11 @@ class GeoTableViewComponent {
36638
36551
  },
36639
36552
  {
36640
36553
  type: 'geojson',
36641
- data: this.data,
36554
+ data: {
36555
+ type: 'FeatureCollection',
36556
+ // FIXME: we're not getting geojson here
36557
+ features: await this.dataset.read(),
36558
+ },
36642
36559
  },
36643
36560
  ],
36644
36561
  view: {
@@ -36662,18 +36579,19 @@ class GeoTableViewComponent {
36662
36579
  // })
36663
36580
  }
36664
36581
  getFeatureFromId(id) {
36665
- return this.features.find((feature) => feature.id === id);
36582
+ // FIXME: restore this once we need it?
36583
+ // return this.features.find((feature) => feature.id === id)
36666
36584
  }
36667
36585
  ngOnDestroy() {
36668
36586
  this.subscription.unsubscribe();
36669
36587
  }
36670
36588
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoTableViewComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
36671
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeoTableViewComponent, isStandalone: true, selector: "gn-ui-geo-table-view", inputs: { data: "data" }, viewQueries: [{ propertyName: "uiTable", first: true, predicate: ["table"], descendants: true }, { propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row h-full overflow-auto\">\n <gn-ui-table\n #table\n class=\"w-1/2 overflow-auto\"\n [data]=\"tableData\"\n [activeId]=\"selectionId\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-table>\n <gn-ui-map-container\n #mapContainer\n class=\"w-1/2 h-full\"\n [context]=\"mapContext\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\n <gn-ui-feature-detail\n style=\"width: 300px\"\n class=\"p-3 shrink-0 overflow-auto\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: TableComponent, selector: "gn-ui-table", inputs: ["data", "activeId"], outputs: ["selected"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeoTableViewComponent, isStandalone: true, selector: "gn-ui-geo-table-view", inputs: { dataset: "dataset" }, viewQueries: [{ propertyName: "uiTable", first: true, predicate: ["table"], descendants: true }, { propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row h-full overflow-auto\">\n <gn-ui-data-table\n #table\n class=\"w-1/2 overflow-auto\"\n [dataset]=\"dataset\"\n [activeId]=\"selectionId\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-map-container\n #mapContainer\n class=\"w-1/2 h-full\"\n [context]=\"mapContext\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\n <gn-ui-feature-detail\n style=\"width: 300px\"\n class=\"p-3 shrink-0 overflow-auto\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DataTableComponent, selector: "gn-ui-data-table", inputs: ["dataset", "activeId"], outputs: ["selected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36672
36590
  }
36673
36591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoTableViewComponent, decorators: [{
36674
36592
  type: Component,
36675
- args: [{ selector: 'gn-ui-geo-table-view', changeDetection: ChangeDetectionStrategy.OnPush, imports: [TableComponent, MapContainerComponent, FeatureDetailComponent], standalone: true, template: "<div class=\"flex flex-row h-full overflow-auto\">\n <gn-ui-table\n #table\n class=\"w-1/2 overflow-auto\"\n [data]=\"tableData\"\n [activeId]=\"selectionId\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-table>\n <gn-ui-map-container\n #mapContainer\n class=\"w-1/2 h-full\"\n [context]=\"mapContext\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\n <gn-ui-feature-detail\n style=\"width: 300px\"\n class=\"p-3 shrink-0 overflow-auto\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n</div>\n" }]
36676
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { data: [{
36593
+ args: [{ selector: 'gn-ui-geo-table-view', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MapContainerComponent, FeatureDetailComponent, DataTableComponent], standalone: true, template: "<div class=\"flex flex-row h-full overflow-auto\">\n <gn-ui-data-table\n #table\n class=\"w-1/2 overflow-auto\"\n [dataset]=\"dataset\"\n [activeId]=\"selectionId\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-map-container\n #mapContainer\n class=\"w-1/2 h-full\"\n [context]=\"mapContext\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\n <gn-ui-feature-detail\n style=\"width: 300px\"\n class=\"p-3 shrink-0 overflow-auto\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n</div>\n" }]
36594
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { dataset: [{
36677
36595
  type: Input
36678
36596
  }], uiTable: [{
36679
36597
  type: ViewChild,
@@ -36690,29 +36608,25 @@ class TableViewComponent {
36690
36608
  constructor(dataService, translateService) {
36691
36609
  this.dataService = dataService;
36692
36610
  this.translateService = translateService;
36611
+ this.cacheActive = true;
36693
36612
  this.currentLink$ = new BehaviorSubject(null);
36694
36613
  this.loading = false;
36695
36614
  this.error = null;
36696
36615
  this.tableData$ = this.currentLink$.pipe(switchMap$1((link) => {
36697
36616
  this.error = null;
36698
36617
  if (!link)
36699
- return of([]);
36618
+ return of(undefined);
36700
36619
  this.loading = true;
36701
- return this.fetchData(link).pipe(map$1((items) => items.map((item) => ({
36702
- id: item.id,
36703
- ...item.properties,
36704
- }))), catchError((error) => {
36620
+ return this.getDatasetReader(link).pipe(catchError((error) => {
36705
36621
  this.handleError(error);
36706
- return of([]);
36622
+ return of(undefined);
36707
36623
  }), finalize(() => {
36708
36624
  this.loading = false;
36709
36625
  }));
36710
- }), startWith([]), shareReplay(1));
36626
+ }), startWith(undefined), shareReplay(1));
36711
36627
  }
36712
- fetchData(link) {
36713
- return this.dataService
36714
- .getDataset(link)
36715
- .pipe(switchMap$1((dataset) => dataset.read()));
36628
+ getDatasetReader(link) {
36629
+ return this.dataService.getDataset(link, this.cacheActive);
36716
36630
  }
36717
36631
  onTableSelect(event) {
36718
36632
  console.log(event);
@@ -36735,18 +36649,20 @@ class TableViewComponent {
36735
36649
  this.loading = false;
36736
36650
  }
36737
36651
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableViewComponent, deps: [{ token: DataService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
36738
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableViewComponent, isStandalone: true, selector: "gn-ui-table-view", inputs: { link: "link" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-table\n class=\"overflow-auto grow\"\n [data]=\"tableData$ | async\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: TableComponent, selector: "gn-ui-table", inputs: ["data", "activeId"], outputs: ["selected"] }, { 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: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36652
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableViewComponent, isStandalone: true, selector: "gn-ui-table-view", inputs: { cacheActive: "cacheActive", link: "link" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-data-table\n *ngIf=\"tableData$ | async as dataset\"\n class=\"overflow-auto grow\"\n [dataset]=\"dataset\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "gn-ui-data-table", inputs: ["dataset", "activeId"], outputs: ["selected"] }, { 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: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36739
36653
  }
36740
36654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableViewComponent, decorators: [{
36741
36655
  type: Component,
36742
36656
  args: [{ selector: 'gn-ui-table-view', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
36743
36657
  CommonModule,
36744
- TableComponent,
36658
+ DataTableComponent,
36745
36659
  LoadingMaskComponent,
36746
36660
  PopupAlertComponent,
36747
36661
  TranslateModule,
36748
- ], standalone: true, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-table\n class=\"overflow-auto grow\"\n [data]=\"tableData$ | async\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
36749
- }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { link: [{
36662
+ ], standalone: true, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-data-table\n *ngIf=\"tableData$ | async as dataset\"\n class=\"overflow-auto grow\"\n [dataset]=\"dataset\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
36663
+ }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
36664
+ type: Input
36665
+ }], link: [{
36750
36666
  type: Input
36751
36667
  }] } });
36752
36668
 
@@ -36765,7 +36681,15 @@ class MdViewFacade {
36765
36681
  this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
36766
36682
  this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
36767
36683
  this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
36684
+ this.featureCatalog$ = this.store.pipe(select(getFeatureCatalog));
36768
36685
  this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
36686
+ this.isHighUpdateFrequency$ = this.metadata$.pipe(map$1((record) => {
36687
+ if (record.updateFrequency instanceof Object) {
36688
+ return (record.updateFrequency.per === 'day' &&
36689
+ record.updateFrequency.updatedTimes > 1);
36690
+ }
36691
+ return record.updateFrequency === 'continual';
36692
+ }));
36769
36693
  this.error$ = this.store.pipe(select(getMetadataError));
36770
36694
  this.related$ = this.store.pipe(select(getRelated));
36771
36695
  this.chartConfig$ = this.store.pipe(select(getChartConfig));
@@ -36861,6 +36785,11 @@ class MdViewEffects {
36861
36785
  }
36862
36786
  return loadFullMetadataSuccess({ full: record });
36863
36787
  }), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
36788
+ this.loadFeatureCatalog$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), filter(({ full }) => full !== undefined), switchMap$1(({ full }) => this.recordsRepository.getFeatureCatalog(full)), map$1((featureCatalog) => loadFeatureCatalogSuccess({
36789
+ datasetCatalog: featureCatalog,
36790
+ })), catchError((error) => of(loadFeatureCatalogFailure({
36791
+ error: error.message,
36792
+ })))));
36864
36793
  /*
36865
36794
  Related effects
36866
36795
  */
@@ -37323,7 +37252,7 @@ class FeatureRecordModule {
37323
37252
  MatTabsModule,
37324
37253
  UiWidgetsModule,
37325
37254
  TranslateModule,
37326
- TableComponent,
37255
+ DataTableComponent,
37327
37256
  NgIconsModule,
37328
37257
  DropdownSelectorComponent] }); }
37329
37258
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeatureRecordModule, providers: [
@@ -37342,7 +37271,7 @@ class FeatureRecordModule {
37342
37271
  MatTabsModule,
37343
37272
  UiWidgetsModule,
37344
37273
  TranslateModule,
37345
- TableComponent,
37274
+ DataTableComponent,
37346
37275
  NgIconsModule,
37347
37276
  DropdownSelectorComponent] }); }
37348
37277
  }
@@ -37361,7 +37290,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37361
37290
  MatTabsModule,
37362
37291
  UiWidgetsModule,
37363
37292
  TranslateModule,
37364
- TableComponent,
37293
+ DataTableComponent,
37365
37294
  NgIconsModule,
37366
37295
  DropdownSelectorComponent,
37367
37296
  ],
@@ -37446,10 +37375,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37446
37375
  }] } });
37447
37376
 
37448
37377
  class DataViewComponent {
37378
+ set exceedsLimit(value) {
37379
+ this.excludeWfs$.next(value);
37380
+ }
37449
37381
  constructor(mdViewFacade) {
37450
37382
  this.mdViewFacade = mdViewFacade;
37451
37383
  this.displaySource = true;
37452
37384
  this.chartConfig$ = new BehaviorSubject(null);
37385
+ this.cacheActive$ = this.mdViewFacade.isHighUpdateFrequency$.pipe(map$1((highF) => !highF));
37386
+ this.hidePreview = false;
37387
+ this.excludeWfs$ = new BehaviorSubject(false);
37453
37388
  this.compatibleDataLinks$ = combineLatest([
37454
37389
  this.mdViewFacade.dataLinks$,
37455
37390
  this.mdViewFacade.geoDataLinks$,
@@ -37460,7 +37395,7 @@ class DataViewComponent {
37460
37395
  }));
37461
37396
  this.dropdownChoices$ = this.compatibleDataLinks$.pipe(tap$1((links) => {
37462
37397
  if (links.indexOf(this.selectedLink$.value) === -1) {
37463
- this.selectedLink$.next(links[0]);
37398
+ this.selectLink(JSON.stringify(links[0]));
37464
37399
  }
37465
37400
  }), map$1((links) => links.map((link) => ({
37466
37401
  label: getLinkLabel(link),
@@ -37474,10 +37409,20 @@ class DataViewComponent {
37474
37409
  selectLink(linkAsString) {
37475
37410
  const link = JSON.parse(linkAsString);
37476
37411
  link.url = new URL(link.url);
37477
- this.selectedLink$.next(link);
37412
+ this.excludeWfs$
37413
+ .pipe(tap$1((excludeWfs) => {
37414
+ this.hidePreview =
37415
+ link['accessServiceProtocol'] === 'wfs' &&
37416
+ excludeWfs &&
37417
+ this.mode === 'chart'
37418
+ ? true
37419
+ : false;
37420
+ this.selectedLink$.next(link);
37421
+ }))
37422
+ .subscribe();
37478
37423
  }
37479
37424
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, deps: [{ token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
37480
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[420px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["link"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37425
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource", exceedsLimit: "exceedsLimit" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <ng-container *ngIf=\"hidePreview; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["cacheActive", "link"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["cacheActive", "link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37481
37426
  }
37482
37427
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, decorators: [{
37483
37428
  type: Component,
@@ -37487,11 +37432,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37487
37432
  TableViewComponent,
37488
37433
  TranslateModule,
37489
37434
  ChartViewComponent,
37490
- ], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[420px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n" }]
37435
+ PopupAlertComponent,
37436
+ ], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <ng-container *ngIf=\"hidePreview; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n" }]
37491
37437
  }], ctorParameters: () => [{ type: MdViewFacade }], propDecorators: { mode: [{
37492
37438
  type: Input
37493
37439
  }], displaySource: [{
37494
37440
  type: Input
37441
+ }], exceedsLimit: [{
37442
+ type: Input
37495
37443
  }], chartConfig$: [{
37496
37444
  type: Output
37497
37445
  }] } });
@@ -37663,7 +37611,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37663
37611
  marker('map.dropdown.placeholder');
37664
37612
  marker('wfs.feature.limit');
37665
37613
  class MapViewComponent {
37666
- set excludeWfs(value) {
37614
+ set exceedsLimit(value) {
37667
37615
  this.excludeWfs$.next(value);
37668
37616
  }
37669
37617
  toggleLegend() {
@@ -37682,6 +37630,7 @@ class MapViewComponent {
37682
37630
  this.changeRef = changeRef;
37683
37631
  this.displaySource = true;
37684
37632
  this.excludeWfs$ = new BehaviorSubject(false);
37633
+ this.hidePreview = false;
37685
37634
  this.showLegend = true;
37686
37635
  this.legendExists = false;
37687
37636
  this.compatibleMapLinks$ = combineLatest([
@@ -37708,9 +37657,10 @@ class MapViewComponent {
37708
37657
  return of([]);
37709
37658
  }
37710
37659
  if (excludeWfs && link.accessServiceProtocol === 'wfs') {
37711
- this.error = 'wfs.feature.limit';
37660
+ this.hidePreview = true;
37712
37661
  return of([]);
37713
37662
  }
37663
+ this.hidePreview = false;
37714
37664
  this.loading = true;
37715
37665
  this.error = null;
37716
37666
  return this.getLayerFromLink(link).pipe(map$1((layer) => [layer]), catchError((e) => {
@@ -37780,7 +37730,8 @@ class MapViewComponent {
37780
37730
  link.accessServiceProtocol === 'esriRest' ||
37781
37731
  link.accessServiceProtocol === 'ogcFeatures')) ||
37782
37732
  link.type === 'download') {
37783
- return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
37733
+ const cacheActive = true; // TODO implement whether should be true or false
37734
+ return this.dataService.readAsGeoJson(link, cacheActive).pipe(map$1((data) => ({
37784
37735
  type: 'geojson',
37785
37736
  data,
37786
37737
  })));
@@ -37791,7 +37742,7 @@ class MapViewComponent {
37791
37742
  this.selectedLinkIndex$.next(link);
37792
37743
  }
37793
37744
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapUtilsService }, { token: DataService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
37794
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { excludeWfs: "excludeWfs", displaySource: "displaySource" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end\">\n <gn-ui-dropdown-selector\n [ngClass]=\"{ hidden: !displaySource }\"\n class=\"truncate p-1 -mx-1 mb-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 >\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-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\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 <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\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=\"matErrorOutlineOutline\"\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: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37745
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { exceedsLimit: "exceedsLimit", displaySource: "displaySource" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end\">\n <gn-ui-dropdown-selector\n [ngClass]=\"{ hidden: !displaySource }\"\n class=\"truncate p-1 -mx-1 mb-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 >\n </gn-ui-external-viewer-button>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\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 <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\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=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37795
37746
  }
37796
37747
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, decorators: [{
37797
37748
  type: Component,
@@ -37807,8 +37758,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37807
37758
  ExternalViewerButtonComponent,
37808
37759
  ButtonComponent,
37809
37760
  MapLegendComponent,
37810
- ], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end\">\n <gn-ui-dropdown-selector\n [ngClass]=\"{ hidden: !displaySource }\"\n class=\"truncate p-1 -mx-1 mb-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 >\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-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\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 <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\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=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
37811
- }], ctorParameters: () => [{ type: MdViewFacade }, { type: MapUtilsService }, { type: DataService }, { type: i0.ChangeDetectorRef }], propDecorators: { excludeWfs: [{
37761
+ ], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end\">\n <gn-ui-dropdown-selector\n [ngClass]=\"{ hidden: !displaySource }\"\n class=\"truncate p-1 -mx-1 mb-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 >\n </gn-ui-external-viewer-button>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n ></gn-ui-map-container>\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 <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\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=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n" }]
37762
+ }], ctorParameters: () => [{ type: MdViewFacade }, { type: MapUtilsService }, { type: DataService }, { type: i0.ChangeDetectorRef }], propDecorators: { exceedsLimit: [{
37812
37763
  type: Input
37813
37764
  }], displaySource: [{
37814
37765
  type: Input
@@ -38034,7 +37985,7 @@ class RecordMetaComponent {
38034
37985
  this.meta.removeTag('property="og:url"');
38035
37986
  this.meta.removeTag('property="og:title"');
38036
37987
  }
38037
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, deps: [{ token: i1$e.Meta }], target: i0.ɵɵFactoryTarget.Component }); }
37988
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, deps: [{ token: i1$d.Meta }], target: i0.ɵɵFactoryTarget.Component }); }
38038
37989
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordMetaComponent, isStandalone: true, selector: "gn-ui-record-meta", inputs: { metadata: "metadata" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38039
37990
  }
38040
37991
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordMetaComponent, decorators: [{
@@ -38045,7 +37996,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38045
37996
  changeDetection: ChangeDetectionStrategy.OnPush,
38046
37997
  standalone: true,
38047
37998
  }]
38048
- }], ctorParameters: () => [{ type: i1$e.Meta }], propDecorators: { metadata: [{
37999
+ }], ctorParameters: () => [{ type: i1$d.Meta }], propDecorators: { metadata: [{
38049
38000
  type: Input
38050
38001
  }] } });
38051
38002
 
@@ -38295,8 +38246,8 @@ const DEFAULT_CONFIGURATION = {
38295
38246
  labelKey: marker('editor.record.form.page.description'),
38296
38247
  sections: [
38297
38248
  TITLE_SECTION,
38298
- ABOUT_SECTION,
38299
38249
  CLASSIFICATION_SECTION,
38250
+ ABOUT_SECTION,
38300
38251
  GEOGRAPHICAL_COVERAGE_SECTION,
38301
38252
  ],
38302
38253
  },
@@ -38641,9 +38592,8 @@ var WizardFieldType;
38641
38592
  (function (WizardFieldType) {
38642
38593
  WizardFieldType[WizardFieldType["TEXT"] = 0] = "TEXT";
38643
38594
  WizardFieldType[WizardFieldType["TEXT_AREA"] = 1] = "TEXT_AREA";
38644
- WizardFieldType[WizardFieldType["CHIPS"] = 2] = "CHIPS";
38645
- WizardFieldType[WizardFieldType["DATA_PICKER"] = 3] = "DATA_PICKER";
38646
- WizardFieldType[WizardFieldType["DROPDOWN"] = 4] = "DROPDOWN";
38595
+ WizardFieldType[WizardFieldType["DATA_PICKER"] = 2] = "DATA_PICKER";
38596
+ WizardFieldType[WizardFieldType["DROPDOWN"] = 3] = "DROPDOWN";
38647
38597
  })(WizardFieldType || (WizardFieldType = {}));
38648
38598
 
38649
38599
  class WizardService {
@@ -38765,9 +38715,6 @@ class WizardFieldComponent {
38765
38715
  case WizardFieldType.TEXT: {
38766
38716
  return data || '';
38767
38717
  }
38768
- case WizardFieldType.CHIPS: {
38769
- return data ? JSON.parse(data) : [];
38770
- }
38771
38718
  case WizardFieldType.TEXT_AREA: {
38772
38719
  return data || '';
38773
38720
  }
@@ -38797,10 +38744,6 @@ class WizardFieldComponent {
38797
38744
  this.initializeTextInputListener();
38798
38745
  break;
38799
38746
  }
38800
- case WizardFieldType.CHIPS: {
38801
- this.initializeChipsListener();
38802
- break;
38803
- }
38804
38747
  case WizardFieldType.TEXT_AREA: {
38805
38748
  this.initializeTextAreaListener();
38806
38749
  return;
@@ -38820,11 +38763,6 @@ class WizardFieldComponent {
38820
38763
  this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, value);
38821
38764
  }));
38822
38765
  }
38823
- initializeChipsListener() {
38824
- this.subs.add(this.chips.itemsChange.subscribe((items) => {
38825
- this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, JSON.stringify(items));
38826
- }));
38827
- }
38828
38766
  initializeTextAreaListener() {
38829
38767
  this.subs.add(this.textArea.valueChange.subscribe((value) => {
38830
38768
  this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, value);
@@ -38858,7 +38796,7 @@ class WizardFieldComponent {
38858
38796
  deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
38859
38797
  },
38860
38798
  { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
38861
- ], viewQueries: [{ propertyName: "searchText", first: true, predicate: ["searchText"], descendants: true }, { propertyName: "chips", first: true, predicate: ["chips"], descendants: true }, { propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"flex-1 w-11/12\"\n *ngIf=\"wizardFieldType.CHIPS === wizardFieldConfig.type\"\n >\n <gn-ui-chips-input\n #chips\n [selectedItems]=\"wizardFieldData\"\n placeholder=\"\"\n [id]=\"wizardFieldConfig.id\"\n [url]=\"wizardFieldConfig.options.url\"\n [loadOnce]=\"wizardFieldConfig.options.loadOnce\"\n ></gn-ui-chips-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:#fff;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: ChipsInputComponent, selector: "gn-ui-chips-input", inputs: ["url", "placeholder", "selectedItems", "required", "loadOnce", "autocompleteItems"], outputs: ["itemsChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i1$8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1$8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38799
+ ], viewQueries: [{ propertyName: "searchText", first: true, predicate: ["searchText"], descendants: true }, { propertyName: "textArea", first: true, predicate: ["textArea"], descendants: true }, { propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:#fff;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i1$8.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1$8.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38862
38800
  }
38863
38801
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WizardFieldComponent, decorators: [{
38864
38802
  type: Component,
@@ -38870,15 +38808,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38870
38808
  deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
38871
38809
  },
38872
38810
  { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
38873
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"flex-1 w-11/12\"\n *ngIf=\"wizardFieldType.CHIPS === wizardFieldConfig.type\"\n >\n <gn-ui-chips-input\n #chips\n [selectedItems]=\"wizardFieldData\"\n placeholder=\"\"\n [id]=\"wizardFieldConfig.id\"\n [url]=\"wizardFieldConfig.options.url\"\n [loadOnce]=\"wizardFieldConfig.options.loadOnce\"\n ></gn-ui-chips-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:#fff;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"] }]
38811
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-1\">\n <span [class]=\"wizardFieldConfig.icon + ' pr-10'\"></span>\n <div class=\"flex flex-col flex-1\">\n <div translate class=\"text-xl font-bold pb-1\">\n {{ wizardFieldConfig.label }}\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.TEXT === wizardFieldConfig.type\"\n >\n <gn-ui-text-input\n #searchText\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-input>\n </div>\n <div\n class=\"h-32 w-11/12\"\n *ngIf=\"wizardFieldType.TEXT_AREA === wizardFieldConfig.type\"\n >\n <gn-ui-text-area\n #textArea\n [id]=\"wizardFieldConfig.id\"\n [value]=\"wizardFieldData\"\n [required]=\"wizardFieldConfig.required || false\"\n placeholder=\"\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DATA_PICKER === wizardFieldConfig.type\"\n >\n <input\n [id]=\"wizardFieldConfig.id\"\n type=\"text\"\n (click)=\"datepicker.open()\"\n class=\"rounded p-2 text-gray-700 w-full leading-tight focus:outline-none focus:border-primary\"\n [value]=\"wizardFieldData\"\n [matDatepicker]=\"datepicker\"\n (dateChange)=\"onDateChange($event)\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n </div>\n <div\n class=\"w-1/2 h-12\"\n *ngIf=\"wizardFieldType.DROPDOWN === wizardFieldConfig.type\"\n >\n <gn-ui-dropdown-selector\n #dropdown\n [id]=\"wizardFieldConfig.id\"\n [title]=\"''\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n [showTitle]=\"false\"\n [choices]=\"dropdownChoices\"\n [selected]=\"wizardFieldData\"\n ariaName=\"search-sort-by\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;flex:1}gn-ui-text-input::ng-deep input,input[type=text]{height:100%;background:#fff;color:#000;font-style:italic;border-width:2px;border-color:var(--color-primary)}gn-ui-text-area::ng-deep textarea{border-width:2px;border-color:var(--color-primary)}gn-ui-dropdown-selector::ng-deep div{height:100%}gn-ui-dropdown-selector::ng-deep select{height:100%;border-width:2px;border-color:var(--color-primary);background-color:#fff}\n"] }]
38874
38812
  }], ctorParameters: () => [{ type: WizardService }, { type: i0.ChangeDetectorRef }], propDecorators: { wizardFieldConfig: [{
38875
38813
  type: Input
38876
38814
  }], searchText: [{
38877
38815
  type: ViewChild,
38878
38816
  args: ['searchText']
38879
- }], chips: [{
38880
- type: ViewChild,
38881
- args: ['chips']
38882
38817
  }], textArea: [{
38883
38818
  type: ViewChild,
38884
38819
  args: ['textArea']
@@ -39109,7 +39044,7 @@ class ImportRecordComponent {
39109
39044
  },
39110
39045
  });
39111
39046
  }
39112
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, deps: [{ token: i1$f.Router }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NotificationsService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
39047
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, deps: [{ token: i1$e.Router }, { token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }, { token: NotificationsService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
39113
39048
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ImportRecordComponent, isStandalone: true, selector: "gn-ui-import-record", outputs: { closeImportMenu: "closeImportMenu" }, providers: [
39114
39049
  provideIcons({
39115
39050
  iconoirImport,
@@ -39140,7 +39075,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39140
39075
  size: '1.5em',
39141
39076
  }),
39142
39077
  ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\" translate\n >dashboard.importRecord.importExternal.title</span\n >\n <span translate>dashboard.importRecord.importExternal.subtitle</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n" }]
39143
- }], ctorParameters: () => [{ type: i1$f.Router }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NotificationsService }, { type: RecordsRepositoryInterface }], propDecorators: { closeImportMenu: [{
39078
+ }], ctorParameters: () => [{ type: i1$e.Router }, { type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NotificationsService }, { type: RecordsRepositoryInterface }], propDecorators: { closeImportMenu: [{
39144
39079
  type: Output
39145
39080
  }] } });
39146
39081
 
@@ -39185,7 +39120,7 @@ class GenericKeywordsComponent {
39185
39120
  provideIcons({
39186
39121
  matWarningAmberOutline,
39187
39122
  }),
39188
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.record.form.keywords.place.withoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39123
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.record.form.keywords.place.withoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39189
39124
  }
39190
39125
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
39191
39126
  type: Component,
@@ -39455,7 +39390,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39455
39390
 
39456
39391
  class FormFieldRichComponent {
39457
39392
  constructor() {
39458
- this.placeholder = 'Votre texte ici'; //TODO: translate
39393
+ this.placeholder = '';
39459
39394
  this.valueChange = new EventEmitter();
39460
39395
  this.preview = false;
39461
39396
  }
@@ -39704,6 +39639,7 @@ class FormFieldContactsForResourceComponent {
39704
39639
  'owner',
39705
39640
  'point_of_contact',
39706
39641
  'author',
39642
+ 'publisher',
39707
39643
  ];
39708
39644
  this.roleSectionsToDisplay = [];
39709
39645
  this.allOrganizations = new Map();
@@ -39802,7 +39738,7 @@ class FormFieldContactsForResourceComponent {
39802
39738
  provideNgIconsConfig({
39803
39739
  size: '1.5rem',
39804
39740
  }),
39805
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder' | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39741
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder' | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39806
39742
  }
39807
39743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
39808
39744
  type: Component,
@@ -39900,7 +39836,7 @@ class FormFieldContactsComponent {
39900
39836
  this.subscription.unsubscribe();
39901
39837
  }
39902
39838
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsComponent, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
39903
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39839
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39904
39840
  }
39905
39841
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsComponent, decorators: [{
39906
39842
  type: Component,
@@ -40249,7 +40185,7 @@ class OnlineServiceResourceInputComponent {
40249
40185
  provideNgIconsConfig({
40250
40186
  size: '1.5em',
40251
40187
  }),
40252
- ], ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"_service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"_service.url?.toString()\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirRefresh\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"_service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (_service.url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submit()\"\n [disabled]=\"disabled || !_service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (_service.url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40188
+ ], ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"_service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"_service.url?.toString()\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirRefresh\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"_service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (_service.url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submit()\"\n [disabled]=\"disabled || !_service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (_service.url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { 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: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40253
40189
  }
40254
40190
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, decorators: [{
40255
40191
  type: Component,
@@ -40844,7 +40780,7 @@ class ConstraintCardComponent {
40844
40780
  provideNgIconsConfig({
40845
40781
  size: '1.5rem',
40846
40782
  }),
40847
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40783
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [placeholder]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40848
40784
  }
40849
40785
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConstraintCardComponent, decorators: [{
40850
40786
  type: Component,
@@ -40862,7 +40798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40862
40798
  provideNgIconsConfig({
40863
40799
  size: '1.5rem',
40864
40800
  }),
40865
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
40801
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [placeholder]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
40866
40802
  }], propDecorators: { label: [{
40867
40803
  type: Input
40868
40804
  }], constraint: [{
@@ -41140,7 +41076,7 @@ class RouterService {
41140
41076
  getOrganizationPageRoute() {
41141
41077
  return ROUTER_ROUTE_ORGANIZATION;
41142
41078
  }
41143
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$f.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
41079
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$e.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
41144
41080
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, providedIn: 'root' }); }
41145
41081
  }
41146
41082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, decorators: [{
@@ -41151,7 +41087,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41151
41087
  }], ctorParameters: () => [{ type: undefined, decorators: [{
41152
41088
  type: Inject,
41153
41089
  args: [ROUTER_CONFIG]
41154
- }] }, { type: i1$f.Router }] });
41090
+ }] }, { type: i1$e.Router }] });
41155
41091
 
41156
41092
  const goAction = createAction('[Router] Go', props());
41157
41093
  const backAction = createAction('[Router] Back');
@@ -41456,12 +41392,12 @@ class RouterEffects {
41456
41392
  this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
41457
41393
  this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
41458
41394
  }
41459
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$f.Router }, { token: i1$2.Location }, { token: RouterFacade }, { token: ROUTER_CONFIG }, { token: FieldsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
41395
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$e.Router }, { token: i1$2.Location }, { token: RouterFacade }, { token: ROUTER_CONFIG }, { token: FieldsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
41460
41396
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects }); }
41461
41397
  }
41462
41398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, decorators: [{
41463
41399
  type: Injectable
41464
- }], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$f.Router }, { type: i1$2.Location }, { type: RouterFacade }, { type: undefined, decorators: [{
41400
+ }], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$e.Router }, { type: i1$2.Location }, { type: RouterFacade }, { type: undefined, decorators: [{
41465
41401
  type: Inject,
41466
41402
  args: [ROUTER_CONFIG]
41467
41403
  }] }, { type: FieldsService }] });
@@ -41521,5 +41457,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41521
41457
  * Generated bundle index. Do not edit.
41522
41458
  */
41523
41459
 
41524
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, 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, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
41460
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, 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, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
41525
41461
  //# sourceMappingURL=geonetwork-ui.mjs.map