geonetwork-ui 2.5.0-dev.a538998f8 → 2.5.0-dev.aed8e2abc

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 (274) 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 +20 -17
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +25 -9
  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/service/data.service.mjs +8 -8
  9. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +7 -4
  10. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  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/import-record/import-record.component.mjs +5 -5
  14. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +5 -3
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +2 -2
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +9 -11
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +2 -2
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +2 -2
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +2 -2
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  21. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -23
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  23. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +3 -4
  24. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  25. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +25 -5
  26. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +10 -7
  27. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +4 -1
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -2
  29. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +9 -1
  30. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +19 -1
  31. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +6 -1
  32. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +15 -3
  33. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +1 -1
  34. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +3 -3
  35. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  36. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +78 -0
  37. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +32 -31
  38. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  39. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +23 -3
  40. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  41. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  42. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +94 -8
  43. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +2 -2
  44. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +1 -6
  45. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +6 -4
  46. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +3 -3
  47. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +14 -4
  48. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -3
  49. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  50. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +10 -3
  51. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -6
  52. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -4
  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 +19 -11
  62. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +13 -9
  63. package/esm2022/translations/de.json +5 -77
  64. package/esm2022/translations/en.json +5 -77
  65. package/esm2022/translations/es.json +3 -75
  66. package/esm2022/translations/fr.json +17 -89
  67. package/esm2022/translations/it.json +22 -93
  68. package/esm2022/translations/nl.json +3 -75
  69. package/esm2022/translations/pt.json +3 -75
  70. package/fesm2022/geonetwork-ui.mjs +631 -933
  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 +1 -0
  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/service/data.service.d.ts +2 -2
  86. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  87. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +2 -1
  88. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  89. package/libs/feature/editor/src/index.d.ts +1 -0
  90. package/libs/feature/editor/src/index.d.ts.map +1 -1
  91. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +1 -0
  92. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  93. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts +1 -0
  94. 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
  95. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  96. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  97. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  98. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +1 -3
  99. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +1 -1
  100. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +2 -3
  101. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +1 -1
  102. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +5 -1
  103. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  104. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -2
  105. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  106. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +16 -1
  107. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  108. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +5 -0
  109. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  110. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  111. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  112. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -1
  113. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  114. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  115. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  116. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +5 -1
  117. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  118. package/libs/ui/elements/src/index.d.ts +1 -0
  119. package/libs/ui/elements/src/index.d.ts.map +1 -1
  120. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts +16 -0
  121. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts.map +1 -0
  122. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts +5 -6
  123. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -1
  124. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  125. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  126. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  127. package/libs/ui/inputs/src/index.d.ts +0 -1
  128. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  129. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +23 -1
  130. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  131. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -28
  132. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  133. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -1
  134. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  135. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -2
  136. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  137. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -1
  138. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  139. package/libs/ui/widgets/src/index.d.ts +0 -1
  140. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  141. package/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.d.ts +1 -1
  142. package/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.d.ts.map +1 -1
  143. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +8 -9
  144. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  145. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +2 -2
  146. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  147. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts +8 -0
  148. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts.map +1 -0
  149. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts +2 -2
  150. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts.map +1 -1
  151. package/libs/util/data-fetcher/src/lib/readers/base.d.ts +2 -2
  152. package/libs/util/data-fetcher/src/lib/readers/base.d.ts.map +1 -1
  153. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts +5 -3
  154. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  155. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +7 -4
  156. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -1
  157. package/libs/util/data-fetcher/src/lib/utils.d.ts +2 -2
  158. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  159. package/package.json +1 -1
  160. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +25 -0
  161. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -0
  162. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +22 -16
  163. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +44 -13
  164. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -1
  165. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  166. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +165 -0
  167. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -1
  168. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +22 -9
  169. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +2 -1
  170. package/src/libs/feature/editor/src/index.ts +1 -0
  171. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  172. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +3 -3
  173. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +1 -0
  174. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +2 -0
  175. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +1 -0
  176. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +10 -10
  177. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +1 -1
  178. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  179. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -13
  180. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -20
  181. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  182. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -1
  183. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +24 -11
  184. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +26 -4
  185. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +71 -60
  186. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +6 -3
  187. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +16 -0
  188. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +21 -2
  189. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -0
  190. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +30 -1
  191. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +12 -0
  192. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +3 -0
  193. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +7 -0
  194. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +3 -1
  195. package/src/libs/ui/elements/src/index.ts +1 -0
  196. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.css +0 -0
  197. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +25 -0
  198. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +70 -0
  199. package/src/libs/ui/elements/src/lib/image-input/image-input.component.html +20 -14
  200. package/src/libs/ui/elements/src/lib/image-input/image-input.component.ts +29 -32
  201. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
  202. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +21 -9
  203. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +13 -0
  204. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  205. package/src/libs/ui/inputs/src/index.ts +0 -1
  206. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +36 -19
  207. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +91 -2
  208. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -3
  209. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +3 -2
  210. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +1 -1
  211. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +37 -1
  212. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +8 -2
  213. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -0
  214. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -0
  215. package/src/libs/ui/widgets/src/index.ts +0 -1
  216. package/src/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.html +36 -11
  217. package/src/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.ts +9 -1
  218. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +2 -3
  219. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +13 -4
  220. package/src/libs/util/data-fetcher/src/lib/readers/base-cache.ts +14 -0
  221. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +2 -1
  222. package/src/libs/util/data-fetcher/src/lib/readers/base.ts +2 -2
  223. package/src/libs/util/data-fetcher/src/lib/readers/csv.ts +1 -1
  224. package/src/libs/util/data-fetcher/src/lib/readers/excel.ts +1 -1
  225. package/src/libs/util/data-fetcher/src/lib/readers/geojson.ts +1 -1
  226. package/src/libs/util/data-fetcher/src/lib/readers/gml.ts +7 -7
  227. package/src/libs/util/data-fetcher/src/lib/readers/json.ts +1 -1
  228. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +34 -11
  229. package/src/libs/util/data-fetcher/src/lib/utils.ts +38 -32
  230. package/translations/de.json +5 -77
  231. package/translations/en.json +5 -77
  232. package/translations/es.json +3 -75
  233. package/translations/fr.json +17 -89
  234. package/translations/it.json +22 -93
  235. package/translations/nl.json +3 -75
  236. package/translations/pt.json +3 -75
  237. package/translations/sk.json +3 -75
  238. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +0 -78
  239. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +0 -55
  240. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts +0 -33
  241. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +0 -1
  242. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts +0 -21
  243. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts.map +0 -1
  244. package/src/libs/data-access/datafeeder/src/index.ts +0 -1
  245. package/src/libs/data-access/datafeeder/src/openapi/api/api.ts +0 -11
  246. package/src/libs/data-access/datafeeder/src/openapi/api/config.api.service.ts +0 -168
  247. package/src/libs/data-access/datafeeder/src/openapi/api/dataPublishing.api.service.ts +0 -270
  248. package/src/libs/data-access/datafeeder/src/openapi/api/fileUpload.api.service.ts +0 -734
  249. package/src/libs/data-access/datafeeder/src/openapi/api.module.ts +0 -46
  250. package/src/libs/data-access/datafeeder/src/openapi/configuration.ts +0 -125
  251. package/src/libs/data-access/datafeeder/src/openapi/encoder.ts +0 -20
  252. package/src/libs/data-access/datafeeder/src/openapi/index.ts +0 -5
  253. package/src/libs/data-access/datafeeder/src/openapi/model/analysisStatusEnum.api.model.ts +0 -24
  254. package/src/libs/data-access/datafeeder/src/openapi/model/boundingBox.api.model.ts +0 -20
  255. package/src/libs/data-access/datafeeder/src/openapi/model/cRS.api.model.ts +0 -25
  256. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +0 -45
  257. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishRequest.api.model.ts +0 -39
  258. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishingStatus.api.model.ts +0 -50
  259. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +0 -39
  260. package/src/libs/data-access/datafeeder/src/openapi/model/models.ts +0 -13
  261. package/src/libs/data-access/datafeeder/src/openapi/model/property.api.model.ts +0 -17
  262. package/src/libs/data-access/datafeeder/src/openapi/model/publishJobStatus.api.model.ts +0 -33
  263. package/src/libs/data-access/datafeeder/src/openapi/model/publishRequest.api.model.ts +0 -16
  264. package/src/libs/data-access/datafeeder/src/openapi/model/publishStatusEnum.api.model.ts +0 -20
  265. package/src/libs/data-access/datafeeder/src/openapi/model/publishStepEnum.api.model.ts +0 -42
  266. package/src/libs/data-access/datafeeder/src/openapi/model/uploadJobStatus.api.model.ts +0 -33
  267. package/src/libs/data-access/datafeeder/src/openapi/variables.ts +0 -9
  268. package/src/libs/data-access/datafeeder/src/spec.yaml +0 -537
  269. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.css +0 -36
  270. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.html +0 -23
  271. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +0 -81
  272. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.css +0 -3
  273. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.html +0 -13
  274. 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 } from '@angular/common';
19
+ import { CommonModule, NgSwitch, NgSwitchCase, NgSwitchDefault, 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';
@@ -26,8 +26,8 @@ import { createAction, props, createReducer, on, createFeatureSelector, createSe
26
26
  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
- 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';
29
+ import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirLongArrowDownLeft, 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, 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,12 +37,11 @@ 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';
44
43
  import tippy from 'tippy.js';
45
- import { matErrorOutlineOutline, matCloudDownloadOutline, matComputerOutline, matCallOutline, matLocationOnOutline, matMailOutline as matMailOutline$1, matWarningAmberOutline, matInfoOutline, matCloseOutline, matSendOutline, matMapOutline, matHomeWorkOutline, matSwipeOutline, matLayersOutline, matAddCircleOutlineOutline } from '@ng-icons/material-icons/outline';
44
+ import { matErrorOutlineOutline, matInfoOutline, matCloudDownloadOutline, matComputerOutline, matCallOutline, matLocationOnOutline, matMailOutline as matMailOutline$1, matWarningAmberOutline, matCloseOutline, matSendOutline, matMapOutline, matHomeWorkOutline, matSwipeOutline, matLayersOutline, matAddCircleOutlineOutline } from '@ng-icons/material-icons/outline';
46
45
  import * as i2 from '@angular/material/core';
47
46
  import { MatNativeDateModule, MAT_DATE_LOCALE, DateAdapter, MAT_DATE_FORMATS } from '@angular/material/core';
48
47
  import * as i1$7 from '@angular/material/checkbox';
@@ -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",
@@ -19146,8 +19072,10 @@ var de = {
19146
19072
  "search.error.receivedError": "Ein Fehler ist aufgetreten",
19147
19073
  "search.error.recordHasnolink": "",
19148
19074
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
19149
- "search.field.any.placeholder": "Suche Datensätze ...",
19075
+ "search.field.any.placeholder": "Suche im katalog ...",
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",
@@ -19203,7 +19131,6 @@ var de = {
19203
19131
  "tooltip.url.open": "URL öffnen",
19204
19132
  "ui.readLess": "Weniger lesen",
19205
19133
  "ui.readMore": "Weiterlesen",
19206
- "wfs.aggregations.notsupported": "",
19207
19134
  "wfs.feature.limit": "Zu viele Features, um den WFS-Layer anzuzeigen!",
19208
19135
  "wfs.featuretype.notfound": "Kein passender Feature-Typ wurde im Dienst gefunden",
19209
19136
  "wfs.geojsongml.notsupported": "Dieser Dienst unterstützt das GeoJSON- oder GML-Format nicht",
@@ -19238,8 +19165,6 @@ var en = {
19238
19165
  "chart.type.lineSmooth": "smooth line chart",
19239
19166
  "chart.type.pie": "pie chart",
19240
19167
  "dashboard.catalog.allRecords": "Datasets",
19241
- "dashboard.catalog.contacts": "Contacts",
19242
- "dashboard.catalog.thesaurus": "Thesaurus",
19243
19168
  "dashboard.createRecord": "New dataset",
19244
19169
  "dashboard.importRecord": "Import",
19245
19170
  "dashboard.importRecord.importExternal": "Import an external file",
@@ -19252,29 +19177,10 @@ var en = {
19252
19177
  "dashboard.records.myDraft": "My drafts",
19253
19178
  "dashboard.records.myRecords": "My datasets",
19254
19179
  "dashboard.records.search": "Search for \"{searchText}\"",
19255
- "dashboard.records.templates": "Templates",
19256
19180
  "dashboard.records.userDetail": "Name",
19257
19181
  "dashboard.records.userEmail": "Email",
19258
19182
  "dashboard.records.username": "Username",
19259
19183
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
19260
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
19261
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
19262
- "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
19263
- "datafeeder.analysisProgressBar.subtitle": "The analysis may take several minutes, please wait.",
19264
- "datafeeder.analysisProgressBar.title": "Analysis in progress",
19265
- "datafeeder.datasetValidation.datasetInformation": "The provided dataset contains {number} entities",
19266
- "datafeeder.datasetValidation.submitButton": "OK, my data is correct",
19267
- "datafeeder.datasetValidation.title": "Make sure your data is correct",
19268
- "datafeeder.datasetValidation.unknown": " - ",
19269
- "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",
19270
- "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
19271
- "datafeeder.form.abstract": "How would you describe your dataset?",
19272
- "datafeeder.form.datepicker": "Do you know when the dataset was created?",
19273
- "datafeeder.form.description": "Finally, please describe the process used to create the dataset",
19274
- "datafeeder.form.dropdown": "For which scale was it created?",
19275
- "datafeeder.form.tags": "Select one or more tags that fit your dataset",
19276
- "datafeeder.form.title": "Give your dataset the best title",
19277
- "datafeeder.formsPage.title": "Tell us more about your dataset",
19278
19184
  "datafeeder.month.april": "April",
19279
19185
  "datafeeder.month.august": "August",
19280
19186
  "datafeeder.month.december": "December",
@@ -19287,59 +19193,6 @@ var en = {
19287
19193
  "datafeeder.month.november": "November",
19288
19194
  "datafeeder.month.october": "October",
19289
19195
  "datafeeder.month.september": "September",
19290
- "datafeeder.publish.hint": "You can safely exit this page, you will be notified when the process is over",
19291
- "datafeeder.publish.illustration.title": "Another dataset \n to publish?",
19292
- "datafeeder.publish.subtitle": "Publishing may take several minutes.",
19293
- "datafeeder.publish.title": "Thank you! \n Your dataset is being published",
19294
- "datafeeder.publish.upload": "Upload it now",
19295
- "datafeeder.publishSuccess.geonetworkRecord": "Metadata record",
19296
- "datafeeder.publishSuccess.illustration.title": "Done, all is good!",
19297
- "datafeeder.publishSuccess.mapViewer": "Map viewer",
19298
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
19299
- "datafeeder.publishSuccess.subtitle": "View your data in:",
19300
- "datafeeder.publishSuccess.title": "Congratulations! \n Your dataset has been published",
19301
- "datafeeder.publishSuccess.uploadAnotherData": "Upload another dataset",
19302
- "datafeeder.summarizePage.illustration": "No mistake? Let's go!",
19303
- "datafeeder.summarizePage.previous": "Previous",
19304
- "datafeeder.summarizePage.submit": "Submit",
19305
- "datafeeder.summarizePage.title": "You're almost there...",
19306
- "datafeeder.upload.acceptedFormats": "Accepted file formats:",
19307
- "datafeeder.upload.checkboxLabel": "I hold the rights to publish this dataset",
19308
- "datafeeder.upload.error.subtitle.analysis": "Check that the file contains a valid geospatial dataset",
19309
- "datafeeder.upload.error.subtitle.cantOpenFile": "Please check that the file is valid",
19310
- "datafeeder.upload.error.subtitle.fileFormat": "Remember: only SHP",
19311
- "datafeeder.upload.error.subtitle.fileSize": "Remember: {size} MB maximum",
19312
- "datafeeder.upload.error.title.analysis": "Error during the dataset analysis",
19313
- "datafeeder.upload.error.title.cantOpenFile": "Error while opening the file",
19314
- "datafeeder.upload.error.title.fileFormat": "The selected file format is not supported",
19315
- "datafeeder.upload.error.title.fileHasntSelected": "No file selected",
19316
- "datafeeder.upload.error.title.fileSize": "The file size is too large",
19317
- "datafeeder.upload.error.title.noRightsToSendData": "You are not allowed to publish this dataset",
19318
- "datafeeder.upload.illustration.enrichment": "Enrichment",
19319
- "datafeeder.upload.illustration.import": "Import",
19320
- "datafeeder.upload.illustration.title": "Adding data \n has never been easier",
19321
- "datafeeder.upload.illustration.validation": "Validation",
19322
- "datafeeder.upload.illustration.verification": "Verification",
19323
- "datafeeder.upload.inputLabel": "Import your file",
19324
- "datafeeder.upload.maxFileSize": "Maximum file size is {size} MB",
19325
- "datafeeder.upload.title": "Upload your dataset",
19326
- "datafeeder.upload.uploadButton": "Upload",
19327
- "datafeeder.validation.csv.delimiter": "Delimiter",
19328
- "datafeeder.validation.csv.delimiter.comma": "Comma",
19329
- "datafeeder.validation.csv.delimiter.semicolon": "Semicolon",
19330
- "datafeeder.validation.csv.lat.field": "Latitude column",
19331
- "datafeeder.validation.csv.lng.field": "Longitude column",
19332
- "datafeeder.validation.csv.quote.double": "Double quote",
19333
- "datafeeder.validation.csv.quote.none": "None",
19334
- "datafeeder.validation.csv.quote.simple": "Single quote",
19335
- "datafeeder.validation.csv.quoteChar": "Quote separator",
19336
- "datafeeder.validation.encoding": "Encoding",
19337
- "datafeeder.validation.extent.title": "Here is the dataset extent",
19338
- "datafeeder.validation.extent.title.unknown": "The projection system is unknown",
19339
- "datafeeder.validation.projection": "Spatial reference system:",
19340
- "datafeeder.validation.projection.unknown": "Choose a spatial reference system",
19341
- "datafeeder.validation.sample.title": "And a sample entity from the dataset",
19342
- "datafeeder.wizard.emptyRequiredValuesMessage": "Please fill in mandatory fields",
19343
19196
  "datafeeder.wizardSummarize.createdAt": "Created at",
19344
19197
  "datafeeder.wizardSummarize.scale": "Scale",
19345
19198
  "datahub.header.datasets": "Datasets",
@@ -19643,9 +19496,10 @@ var en = {
19643
19496
  "record.action.download": "Download",
19644
19497
  "record.action.duplicate": "Duplicate",
19645
19498
  "record.action.duplicating": "Duplicating...",
19499
+ "record.action.rollback": "Rollback",
19646
19500
  "record.action.view": "View",
19647
19501
  "record.externalViewer.open": "Open in the external map viewer",
19648
- "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",
19649
19503
  "record.metadata.about": "Description",
19650
19504
  "record.metadata.api": "API",
19651
19505
  "record.metadata.api.form.closeButton": "Close",
@@ -19763,8 +19617,10 @@ var en = {
19763
19617
  "search.error.receivedError": "An error was received",
19764
19618
  "search.error.recordHasnolink": "This dataset currently has no link yet, please come back later.",
19765
19619
  "search.error.recordNotFound": "The dataset with identifier \"{ id }\" could not be found.",
19766
- "search.field.any.placeholder": "Search datasets ...",
19620
+ "search.field.any.placeholder": "Search in the catalog ...",
19767
19621
  "search.field.sortBy": "Sort by:",
19622
+ "search.filters.availableServices.download": "",
19623
+ "search.filters.availableServices.view": "",
19768
19624
  "search.filters.changeDate": "Updated",
19769
19625
  "search.filters.clear": "Reset",
19770
19626
  "search.filters.contact": "Contacts",
@@ -19820,7 +19676,6 @@ var en = {
19820
19676
  "tooltip.url.open": "Open URL",
19821
19677
  "ui.readLess": "Read less",
19822
19678
  "ui.readMore": "Read more",
19823
- "wfs.aggregations.notsupported": "Aggregations are currently not supported for WFS services",
19824
19679
  "wfs.feature.limit": "Too many features to display the WFS layer!",
19825
19680
  "wfs.featuretype.notfound": "No matching feature type was found in the service",
19826
19681
  "wfs.geojsongml.notsupported": "This service does not support the GeoJSON or GML format",
@@ -19855,8 +19710,6 @@ var es = {
19855
19710
  "chart.type.lineSmooth": "gráfico de líneas suave",
19856
19711
  "chart.type.pie": "gráfico circular",
19857
19712
  "dashboard.catalog.allRecords": "",
19858
- "dashboard.catalog.contacts": "",
19859
- "dashboard.catalog.thesaurus": "",
19860
19713
  "dashboard.createRecord": "",
19861
19714
  "dashboard.importRecord": "",
19862
19715
  "dashboard.importRecord.importExternal": "",
@@ -19869,29 +19722,10 @@ var es = {
19869
19722
  "dashboard.records.myDraft": "Mis borradores",
19870
19723
  "dashboard.records.myRecords": "Mis Registros",
19871
19724
  "dashboard.records.search": "Buscar \"{searchText}\"",
19872
- "dashboard.records.templates": "",
19873
19725
  "dashboard.records.userDetail": "",
19874
19726
  "dashboard.records.userEmail": "",
19875
19727
  "dashboard.records.username": "",
19876
19728
  "dashboard.records.users": "",
19877
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
19878
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
19879
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
19880
- "datafeeder.analysisProgressBar.subtitle": "",
19881
- "datafeeder.analysisProgressBar.title": "",
19882
- "datafeeder.datasetValidation.datasetInformation": "",
19883
- "datafeeder.datasetValidation.submitButton": "",
19884
- "datafeeder.datasetValidation.title": "",
19885
- "datafeeder.datasetValidation.unknown": "",
19886
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
19887
- "datafeeder.datasetValidationCsv.lineNumbers": "",
19888
- "datafeeder.form.abstract": "",
19889
- "datafeeder.form.datepicker": "",
19890
- "datafeeder.form.description": "",
19891
- "datafeeder.form.dropdown": "",
19892
- "datafeeder.form.tags": "",
19893
- "datafeeder.form.title": "",
19894
- "datafeeder.formsPage.title": "",
19895
19729
  "datafeeder.month.april": "",
19896
19730
  "datafeeder.month.august": "",
19897
19731
  "datafeeder.month.december": "",
@@ -19904,59 +19738,6 @@ var es = {
19904
19738
  "datafeeder.month.november": "",
19905
19739
  "datafeeder.month.october": "",
19906
19740
  "datafeeder.month.september": "",
19907
- "datafeeder.publish.hint": "",
19908
- "datafeeder.publish.illustration.title": "",
19909
- "datafeeder.publish.subtitle": "",
19910
- "datafeeder.publish.title": "",
19911
- "datafeeder.publish.upload": "",
19912
- "datafeeder.publishSuccess.geonetworkRecord": "",
19913
- "datafeeder.publishSuccess.illustration.title": "",
19914
- "datafeeder.publishSuccess.mapViewer": "",
19915
- "datafeeder.publishSuccess.ogcFeature": "",
19916
- "datafeeder.publishSuccess.subtitle": "",
19917
- "datafeeder.publishSuccess.title": "",
19918
- "datafeeder.publishSuccess.uploadAnotherData": "",
19919
- "datafeeder.summarizePage.illustration": "",
19920
- "datafeeder.summarizePage.previous": "",
19921
- "datafeeder.summarizePage.submit": "",
19922
- "datafeeder.summarizePage.title": "",
19923
- "datafeeder.upload.acceptedFormats": "",
19924
- "datafeeder.upload.checkboxLabel": "",
19925
- "datafeeder.upload.error.subtitle.analysis": "",
19926
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
19927
- "datafeeder.upload.error.subtitle.fileFormat": "",
19928
- "datafeeder.upload.error.subtitle.fileSize": "",
19929
- "datafeeder.upload.error.title.analysis": "",
19930
- "datafeeder.upload.error.title.cantOpenFile": "",
19931
- "datafeeder.upload.error.title.fileFormat": "",
19932
- "datafeeder.upload.error.title.fileHasntSelected": "",
19933
- "datafeeder.upload.error.title.fileSize": "",
19934
- "datafeeder.upload.error.title.noRightsToSendData": "",
19935
- "datafeeder.upload.illustration.enrichment": "",
19936
- "datafeeder.upload.illustration.import": "",
19937
- "datafeeder.upload.illustration.title": "",
19938
- "datafeeder.upload.illustration.validation": "",
19939
- "datafeeder.upload.illustration.verification": "",
19940
- "datafeeder.upload.inputLabel": "",
19941
- "datafeeder.upload.maxFileSize": "",
19942
- "datafeeder.upload.title": "",
19943
- "datafeeder.upload.uploadButton": "",
19944
- "datafeeder.validation.csv.delimiter": "",
19945
- "datafeeder.validation.csv.delimiter.comma": "Coma",
19946
- "datafeeder.validation.csv.delimiter.semicolon": "Punto y coma",
19947
- "datafeeder.validation.csv.lat.field": "",
19948
- "datafeeder.validation.csv.lng.field": "",
19949
- "datafeeder.validation.csv.quote.double": "Comillas dobles",
19950
- "datafeeder.validation.csv.quote.none": "Ninguno",
19951
- "datafeeder.validation.csv.quote.simple": "Comillas simples",
19952
- "datafeeder.validation.csv.quoteChar": "",
19953
- "datafeeder.validation.encoding": "",
19954
- "datafeeder.validation.extent.title": "",
19955
- "datafeeder.validation.extent.title.unknown": "",
19956
- "datafeeder.validation.projection": "",
19957
- "datafeeder.validation.projection.unknown": "",
19958
- "datafeeder.validation.sample.title": "",
19959
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
19960
19741
  "datafeeder.wizardSummarize.createdAt": "",
19961
19742
  "datafeeder.wizardSummarize.scale": "",
19962
19743
  "datahub.header.datasets": "",
@@ -20260,6 +20041,7 @@ var es = {
20260
20041
  "record.action.download": "",
20261
20042
  "record.action.duplicate": "",
20262
20043
  "record.action.duplicating": "",
20044
+ "record.action.rollback": "",
20263
20045
  "record.action.view": "",
20264
20046
  "record.externalViewer.open": "",
20265
20047
  "record.feature.limit": "",
@@ -20382,6 +20164,8 @@ var es = {
20382
20164
  "search.error.recordNotFound": "",
20383
20165
  "search.field.any.placeholder": "",
20384
20166
  "search.field.sortBy": "",
20167
+ "search.filters.availableServices.download": "",
20168
+ "search.filters.availableServices.view": "",
20385
20169
  "search.filters.changeDate": "Última actualización",
20386
20170
  "search.filters.clear": "",
20387
20171
  "search.filters.contact": "",
@@ -20437,7 +20221,6 @@ var es = {
20437
20221
  "tooltip.url.open": "",
20438
20222
  "ui.readLess": "",
20439
20223
  "ui.readMore": "",
20440
- "wfs.aggregations.notsupported": "",
20441
20224
  "wfs.feature.limit": "",
20442
20225
  "wfs.featuretype.notfound": "",
20443
20226
  "wfs.geojsongml.notsupported": "",
@@ -20472,8 +20255,6 @@ var fr = {
20472
20255
  "chart.type.lineSmooth": "ligne lisse",
20473
20256
  "chart.type.pie": "camembert",
20474
20257
  "dashboard.catalog.allRecords": "Jeux de données",
20475
- "dashboard.catalog.contacts": "Annuaire",
20476
- "dashboard.catalog.thesaurus": "Thésaurus",
20477
20258
  "dashboard.createRecord": "Nouveau jeu de données",
20478
20259
  "dashboard.importRecord": "Importer",
20479
20260
  "dashboard.importRecord.importExternal": "Importer un jeu de données externe",
@@ -20486,29 +20267,10 @@ var fr = {
20486
20267
  "dashboard.records.myDraft": "Mes brouillons",
20487
20268
  "dashboard.records.myRecords": "Mes jeux de données",
20488
20269
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
20489
- "dashboard.records.templates": "Modèles pré-remplis",
20490
20270
  "dashboard.records.userDetail": "Nom",
20491
20271
  "dashboard.records.userEmail": "Email",
20492
20272
  "dashboard.records.username": "Nom d'utilisateur",
20493
20273
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
20494
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
20495
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
20496
- "datafeeder.analysisProgressBar.illustration.samplingData": "Échantillonnage \n des données",
20497
- "datafeeder.analysisProgressBar.subtitle": "L'analyse peut prendre plusieurs minutes, merci de patienter.",
20498
- "datafeeder.analysisProgressBar.title": "Analyse en cours",
20499
- "datafeeder.datasetValidation.datasetInformation": "Le jeu de données fourni contient {number} entités",
20500
- "datafeeder.datasetValidation.submitButton": "OK, mes données sont correctes",
20501
- "datafeeder.datasetValidation.title": "Vérifiez que vos données sont correctes",
20502
- "datafeeder.datasetValidation.unknown": " - ",
20503
- "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é",
20504
- "datafeeder.datasetValidationCsv.lineNumbers": "Résumé des 5 premières lignes* du CSV :",
20505
- "datafeeder.form.abstract": "Comment décrire votre jeu de données ?",
20506
- "datafeeder.form.datepicker": "Savez-vous quand la donnée a été créée ?",
20507
- "datafeeder.form.description": "Enfin, décrivez le processus utilisé pour créer la donnée",
20508
- "datafeeder.form.dropdown": "Et pour quelle échelle ?",
20509
- "datafeeder.form.tags": "Choisissez un ou plusieurs mots-clés correspondant à vos données",
20510
- "datafeeder.form.title": "Donnez un titre à votre jeu de données",
20511
- "datafeeder.formsPage.title": "Dites-nous en plus sur ces données",
20512
20274
  "datafeeder.month.april": "Avril",
20513
20275
  "datafeeder.month.august": "Août",
20514
20276
  "datafeeder.month.december": "Décembre",
@@ -20521,59 +20283,6 @@ var fr = {
20521
20283
  "datafeeder.month.november": "Novembre",
20522
20284
  "datafeeder.month.october": "Octobre",
20523
20285
  "datafeeder.month.september": "Septembre",
20524
- "datafeeder.publish.hint": "Vous pouvez quitter cette page en toute sécurité, vous serez prévenus quand le processus sera terminé",
20525
- "datafeeder.publish.illustration.title": "Une autre donnée \n à publier ?",
20526
- "datafeeder.publish.subtitle": "La publication peut prendre plusieurs minutes.",
20527
- "datafeeder.publish.title": "Merci! \n Vos données sont en cours de publication",
20528
- "datafeeder.publish.upload": "Télécharger maintenant",
20529
- "datafeeder.publishSuccess.geonetworkRecord": "Fiche de métadonnées",
20530
- "datafeeder.publishSuccess.illustration.title": "Terminé, tout s'est bien passé !",
20531
- "datafeeder.publishSuccess.mapViewer": "Visualiseur",
20532
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
20533
- "datafeeder.publishSuccess.subtitle": "Visualisez vos données :",
20534
- "datafeeder.publishSuccess.title": "Félicitations! \n Vos données ont été publiées",
20535
- "datafeeder.publishSuccess.uploadAnotherData": "Importer une autre donnée",
20536
- "datafeeder.summarizePage.illustration": "Pas d'erreur ? C'est parti !",
20537
- "datafeeder.summarizePage.previous": "Précédent",
20538
- "datafeeder.summarizePage.submit": "Publier",
20539
- "datafeeder.summarizePage.title": "On y est presque...",
20540
- "datafeeder.upload.acceptedFormats": "Formats de fichier acceptés :",
20541
- "datafeeder.upload.checkboxLabel": "J'ai le droit de publier cette donnée",
20542
- "datafeeder.upload.error.subtitle.analysis": "Le fichier transféré contient-il des données géographiques valides ?",
20543
- "datafeeder.upload.error.subtitle.cantOpenFile": "Vérifiez la validité du fichier sélectionné",
20544
- "datafeeder.upload.error.subtitle.fileFormat": "Rappel : uniquement des SHP",
20545
- "datafeeder.upload.error.subtitle.fileSize": "Rappel : {size} Mo maximum",
20546
- "datafeeder.upload.error.title.analysis": "Erreur lors de l'analyse des données",
20547
- "datafeeder.upload.error.title.cantOpenFile": "Erreur lors de l'ouverture du fichier",
20548
- "datafeeder.upload.error.title.fileFormat": "Le format du fichier n'est pas supporté",
20549
- "datafeeder.upload.error.title.fileHasntSelected": "Aucun fichier n'a été sélectionné",
20550
- "datafeeder.upload.error.title.fileSize": "La taille du fichier est trop importante",
20551
- "datafeeder.upload.error.title.noRightsToSendData": "Vous n'avez pas validé les droits de publication",
20552
- "datafeeder.upload.illustration.enrichment": "Enrichissement",
20553
- "datafeeder.upload.illustration.import": "Import",
20554
- "datafeeder.upload.illustration.title": "Ajouter des données n'a jamais été aussi simple",
20555
- "datafeeder.upload.illustration.validation": "Validation",
20556
- "datafeeder.upload.illustration.verification": "Vérification",
20557
- "datafeeder.upload.inputLabel": "Ajouter votre fichier",
20558
- "datafeeder.upload.maxFileSize": "La taille maximale est {size} Mo",
20559
- "datafeeder.upload.title": "Importez vos données",
20560
- "datafeeder.upload.uploadButton": "Transférer",
20561
- "datafeeder.validation.csv.delimiter": "Séparateur de colonne",
20562
- "datafeeder.validation.csv.delimiter.comma": "Virgule",
20563
- "datafeeder.validation.csv.delimiter.semicolon": "Point-virgule",
20564
- "datafeeder.validation.csv.lat.field": "Colonne latitude",
20565
- "datafeeder.validation.csv.lng.field": "Colonne longitude",
20566
- "datafeeder.validation.csv.quote.double": "Double guillemets",
20567
- "datafeeder.validation.csv.quote.none": "Aucun",
20568
- "datafeeder.validation.csv.quote.simple": "Simple guillemet",
20569
- "datafeeder.validation.csv.quoteChar": "Séparateur de texte",
20570
- "datafeeder.validation.encoding": "Encodage",
20571
- "datafeeder.validation.extent.title": "Voici l'emprise du jeu de données",
20572
- "datafeeder.validation.extent.title.unknown": "Le système de projection est inconnu",
20573
- "datafeeder.validation.projection": "Projection :",
20574
- "datafeeder.validation.projection.unknown": "Choisissez une projection",
20575
- "datafeeder.validation.sample.title": "Et un exemple d'objet",
20576
- "datafeeder.wizard.emptyRequiredValuesMessage": "Veuillez remplir les champs obligatoires",
20577
20286
  "datafeeder.wizardSummarize.createdAt": "Créée le",
20578
20287
  "datafeeder.wizardSummarize.scale": "Échelle",
20579
20288
  "datahub.header.datasets": "Données",
@@ -20613,7 +20322,7 @@ var fr = {
20613
20322
  "domain.contact.role.point_of_contact": "Point de contact",
20614
20323
  "domain.contact.role.principal_investigator": "Chercheur principal",
20615
20324
  "domain.contact.role.processor": "Processeur",
20616
- "domain.contact.role.publisher": "Éditeur",
20325
+ "domain.contact.role.publisher": "Producteur",
20617
20326
  "domain.contact.role.resource_provider": "Fournisseur",
20618
20327
  "domain.contact.role.rights_holder": "Détenteur des droits",
20619
20328
  "domain.contact.role.sponsor": "Sponsor",
@@ -20677,7 +20386,7 @@ var fr = {
20677
20386
  "editor.record.form.constraint.otherConstraints": "Autres contraintes",
20678
20387
  "editor.record.form.constraint.securityConstraints": "Contraintes de sécurité",
20679
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.",
20680
- "editor.record.form.field.abstract": "Résumé",
20389
+ "editor.record.form.field.abstract": "Description",
20681
20390
  "editor.record.form.field.constraintsShortcuts": "",
20682
20391
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20683
20392
  "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
@@ -20719,14 +20428,14 @@ var fr = {
20719
20428
  "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
20720
20429
  "editor.record.form.keywords.place.withoutExtent": "Ce mot-clé n'a pas de localisation géographique associée",
20721
20430
  "editor.record.form.keywords.placeholder": "Sélectionnez un mot-clé",
20722
- "editor.record.form.license.cc-by": "",
20723
- "editor.record.form.license.cc-by-sa": "",
20724
- "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",
20725
20434
  "editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
20726
20435
  "editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
20727
- "editor.record.form.license.odbl": "",
20728
- "editor.record.form.license.odc-by": "",
20729
- "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",
20730
20439
  "editor.record.form.license.unknown": "Inconnue ou absente",
20731
20440
  "editor.record.form.page.accessAndContact": "Informations pour l'utilisation",
20732
20441
  "editor.record.form.page.description": "Description du jeu de données",
@@ -20779,7 +20488,7 @@ var fr = {
20779
20488
  "editor.record.resourceError.closeMessage": "Compris",
20780
20489
  "editor.record.resourceError.title": "Erreur avec les pièces jointes",
20781
20490
  "editor.record.saveStatus.draftWithChangesPending": "Sauvegardé - Modifications non publiées",
20782
- "editor.record.saveStatus.recordNotPublished": "",
20491
+ "editor.record.saveStatus.recordNotPublished": "Sauvegardé - non publié",
20783
20492
  "editor.record.saveStatus.recordUpToDate": "Sauvegardé - Jeu de données à jour",
20784
20493
  "editor.record.undo.confirmation.cancelText": "Garder les modifications",
20785
20494
  "editor.record.undo.confirmation.confirmText": "Retirer les modifications",
@@ -20789,7 +20498,7 @@ var fr = {
20789
20498
  "editor.record.undo.tooltip.enabled": "Cliquer sur ce bouton pour annuler les modifications apportées à ce jeu de données",
20790
20499
  "editor.record.upToDate": "Ce jeu de données est à jour",
20791
20500
  "editor.sidebar.logout": "Se déconnecter",
20792
- "editor.sidebar.menu.editor": "",
20501
+ "editor.sidebar.menu.editor": "Editeur",
20793
20502
  "editor.temporary.disabled": "Pas encore implémenté",
20794
20503
  "externalviewer.dataset.unnamed": "Couche du datahub",
20795
20504
  "facets.block.title.OrgForResource": "Organisation",
@@ -20837,7 +20546,7 @@ var fr = {
20837
20546
  "map.add.layer": "Ajouter une couche",
20838
20547
  "map.add.layer.catalog": "Du catalogue",
20839
20548
  "map.add.layer.file": "À partir d'un fichier",
20840
- "map.add.layer.ogc.api": "",
20549
+ "map.add.layer.ogc.api": "Depuis un service OGC API",
20841
20550
  "map.add.layer.wfs": "Depuis un service WFS",
20842
20551
  "map.add.layer.wms": "Depuis un service WMS",
20843
20552
  "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
@@ -20850,7 +20559,7 @@ var fr = {
20850
20559
  "map.loading.data": "Chargement des données...",
20851
20560
  "map.loading.service": "Chargement du service...",
20852
20561
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
20853
- "map.ogc.urlInput.hint": "",
20562
+ "map.ogc.urlInput.hint": "Entrez l'URL du service OGC API",
20854
20563
  "map.select.layer": "Source de données",
20855
20564
  "map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
20856
20565
  "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
@@ -20877,9 +20586,10 @@ var fr = {
20877
20586
  "record.action.download": "Télécharger",
20878
20587
  "record.action.duplicate": "Dupliquer",
20879
20588
  "record.action.duplicating": "Duplication...",
20589
+ "record.action.rollback": "Restaurer",
20880
20590
  "record.action.view": "Voir",
20881
20591
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
20882
- "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",
20883
20593
  "record.metadata.about": "Description",
20884
20594
  "record.metadata.api": "API",
20885
20595
  "record.metadata.api.form.closeButton": "Fermer",
@@ -20997,8 +20707,10 @@ var fr = {
20997
20707
  "search.error.receivedError": "Erreur retournée",
20998
20708
  "search.error.recordHasnolink": "Ce jeu de données n'a pas encore de lien, réessayez plus tard s'il vous plaît.",
20999
20709
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
21000
- "search.field.any.placeholder": "Rechercher un jeu de données...",
20710
+ "search.field.any.placeholder": "Rechercher dans le catalogue...",
21001
20711
  "search.field.sortBy": "Trier par :",
20712
+ "search.filters.availableServices.download": "",
20713
+ "search.filters.availableServices.view": "",
21002
20714
  "search.filters.changeDate": "Mise à jour",
21003
20715
  "search.filters.clear": "Réinitialiser",
21004
20716
  "search.filters.contact": "Contacts",
@@ -21054,7 +20766,6 @@ var fr = {
21054
20766
  "tooltip.url.open": "Ouvrir l'URL",
21055
20767
  "ui.readLess": "Réduire",
21056
20768
  "ui.readMore": "Lire la suite",
21057
- "wfs.aggregations.notsupported": "Agrégations non supportées pour les services WFS",
21058
20769
  "wfs.feature.limit": "Trop d'objets pour afficher la couche WFS !",
21059
20770
  "wfs.featuretype.notfound": "La classe d'objets n'a pas été trouvée dans le service",
21060
20771
  "wfs.geojsongml.notsupported": "Le service ne supporte pas le format GeoJSON ou GML",
@@ -21089,8 +20800,6 @@ var it = {
21089
20800
  "chart.type.lineSmooth": "grafico a linea liscia",
21090
20801
  "chart.type.pie": "grafico a torta",
21091
20802
  "dashboard.catalog.allRecords": "Datasets",
21092
- "dashboard.catalog.contacts": "Contatti",
21093
- "dashboard.catalog.thesaurus": "Thesauri",
21094
20803
  "dashboard.createRecord": "Crea un record",
21095
20804
  "dashboard.importRecord": "Importare",
21096
20805
  "dashboard.importRecord.importExternal": "Importare un dataset esterno",
@@ -21103,29 +20812,10 @@ var it = {
21103
20812
  "dashboard.records.myDraft": "Le mie bozze",
21104
20813
  "dashboard.records.myRecords": "I miei dati",
21105
20814
  "dashboard.records.search": "Risultati per \"{searchText}\"",
21106
- "dashboard.records.templates": "Modelli precompilati",
21107
20815
  "dashboard.records.userDetail": "Nome",
21108
20816
  "dashboard.records.userEmail": "Email",
21109
20817
  "dashboard.records.username": "Nome utente",
21110
20818
  "dashboard.records.users": "utenti",
21111
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
21112
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
21113
- "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
21114
- "datafeeder.analysisProgressBar.subtitle": "L'analisi potrebbe richiedere alcuni minuti, si prega di attendere.",
21115
- "datafeeder.analysisProgressBar.title": "Analisi in corso",
21116
- "datafeeder.datasetValidation.datasetInformation": "Il dataset fornito contiene {number} entità",
21117
- "datafeeder.datasetValidation.submitButton": "OK, i miei dati sono corretti",
21118
- "datafeeder.datasetValidation.title": "Controllare che i dati siano corretti",
21119
- "datafeeder.datasetValidation.unknown": " - ",
21120
- "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",
21121
- "datafeeder.datasetValidationCsv.lineNumbers": "Riepilogo delle prime 5 righe del CSV:",
21122
- "datafeeder.form.abstract": "Come descrivere il suo dataset?",
21123
- "datafeeder.form.datepicker": "Sa quando è stato creato il suo dataset ?",
21124
- "datafeeder.form.description": "Infine, descrivere il processo utilizzato per creare il dataset",
21125
- "datafeeder.form.dropdown": "Per quale scala è stato creato?",
21126
- "datafeeder.form.tags": "Seleziona uno o più parole chiave che corrispondano al suo dataset",
21127
- "datafeeder.form.title": "Dà al suo dataset il miglior titolo",
21128
- "datafeeder.formsPage.title": "Diteci di più sul suo dataset",
21129
20819
  "datafeeder.month.april": "Aprile",
21130
20820
  "datafeeder.month.august": "Agosto",
21131
20821
  "datafeeder.month.december": "Dicembre",
@@ -21138,59 +20828,6 @@ var it = {
21138
20828
  "datafeeder.month.november": "Novembre",
21139
20829
  "datafeeder.month.october": "Ottobre",
21140
20830
  "datafeeder.month.september": "Settembre",
21141
- "datafeeder.publish.hint": "Puo lasciare questa pagina in sicurezza, sarà avvisato quando il processo sarà completo",
21142
- "datafeeder.publish.illustration.title": "Un altro dato da pubblicare?",
21143
- "datafeeder.publish.subtitle": "La pubblicazione potrebbe richiedere alcuni minuti.",
21144
- "datafeeder.publish.title": "Grazie! \n I suei dati sono in fase di pubblicazione",
21145
- "datafeeder.publish.upload": "Carica ora",
21146
- "datafeeder.publishSuccess.geonetworkRecord": "Scheda di metadati",
21147
- "datafeeder.publishSuccess.illustration.title": "Completato, tutto è andato bene!",
21148
- "datafeeder.publishSuccess.mapViewer": "Visualizzatore",
21149
- "datafeeder.publishSuccess.ogcFeature": "OGC API",
21150
- "datafeeder.publishSuccess.subtitle": "Visualizzare i dati:",
21151
- "datafeeder.publishSuccess.title": "Congratulazioni! \n I suoi dati sono stati pubblicati",
21152
- "datafeeder.publishSuccess.uploadAnotherData": "Caricare un altro dato",
21153
- "datafeeder.summarizePage.illustration": "Nessun errore? Avanti!",
21154
- "datafeeder.summarizePage.previous": "Precedente",
21155
- "datafeeder.summarizePage.submit": "Pubblica",
21156
- "datafeeder.summarizePage.title": "Ci siamo quasi...",
21157
- "datafeeder.upload.acceptedFormats": "Formati di file accettati:",
21158
- "datafeeder.upload.checkboxLabel": "Ho il diritto di pubblicare questi dati",
21159
- "datafeeder.upload.error.subtitle.analysis": "Il file trasferito contiene dati geografici validi?",
21160
- "datafeeder.upload.error.subtitle.cantOpenFile": "Verifica la validità del file selezionato",
21161
- "datafeeder.upload.error.subtitle.fileFormat": "Ricorda: solo SHP",
21162
- "datafeeder.upload.error.subtitle.fileSize": "Ricorda: dimensione massima {size} MB",
21163
- "datafeeder.upload.error.title.analysis": "Errore durante l'analisi dei dati",
21164
- "datafeeder.upload.error.title.cantOpenFile": "Errore durante l'apertura del file",
21165
- "datafeeder.upload.error.title.fileFormat": "Formato del file non supportato",
21166
- "datafeeder.upload.error.title.fileHasntSelected": "Nessun file selezionato",
21167
- "datafeeder.upload.error.title.fileSize": "Dimensione del file troppo grande",
21168
- "datafeeder.upload.error.title.noRightsToSendData": "Non avete validato i diritti di pubblicazione",
21169
- "datafeeder.upload.illustration.enrichment": "Arricchimento",
21170
- "datafeeder.upload.illustration.import": "Importazione",
21171
- "datafeeder.upload.illustration.title": "Aggiungere dati non è mai stato così facile",
21172
- "datafeeder.upload.illustration.validation": "Validazione",
21173
- "datafeeder.upload.illustration.verification": "Verifica",
21174
- "datafeeder.upload.inputLabel": "Aggiunge il suo file",
21175
- "datafeeder.upload.maxFileSize": "Dimensione massima: {size} MB",
21176
- "datafeeder.upload.title": "Importa i suoi dati",
21177
- "datafeeder.upload.uploadButton": "Carica",
21178
- "datafeeder.validation.csv.delimiter": "Separatore di colonne",
21179
- "datafeeder.validation.csv.delimiter.comma": "Virgola",
21180
- "datafeeder.validation.csv.delimiter.semicolon": "Punto e virgola",
21181
- "datafeeder.validation.csv.lat.field": "Colonna di latitudine",
21182
- "datafeeder.validation.csv.lng.field": "Colonna di longitudine",
21183
- "datafeeder.validation.csv.quote.double": "Virgolette doppie",
21184
- "datafeeder.validation.csv.quote.none": "Nessun",
21185
- "datafeeder.validation.csv.quote.simple": "Citazione semplice",
21186
- "datafeeder.validation.csv.quoteChar": "Separatore di testo",
21187
- "datafeeder.validation.encoding": "Codifica",
21188
- "datafeeder.validation.extent.title": "Ecco l'estensione del dataset",
21189
- "datafeeder.validation.extent.title.unknown": "Sistema di proiezione sconosciuto",
21190
- "datafeeder.validation.projection": "Proiezione:",
21191
- "datafeeder.validation.projection.unknown": "Seleziona una proiezione",
21192
- "datafeeder.validation.sample.title": "E un esempio di oggetto",
21193
- "datafeeder.wizard.emptyRequiredValuesMessage": "Si prega di compilare i campi obbligatori",
21194
20831
  "datafeeder.wizardSummarize.createdAt": "Creato il",
21195
20832
  "datafeeder.wizardSummarize.scale": "Scala",
21196
20833
  "datahub.header.datasets": "Dati",
@@ -21274,9 +20911,9 @@ var it = {
21274
20911
  "editor.record.deleteError.title": "Errore durante l'eliminazione",
21275
20912
  "editor.record.deleteSuccess.body": "Il dataset è stato eliminato correttamente",
21276
20913
  "editor.record.deleteSuccess.title": "Eliminazione riuscita",
21277
- "editor.record.error.back": "",
21278
- "editor.record.error.explanation": "",
21279
- "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",
21280
20917
  "editor.record.form.bottomButtons.comeBackLater": "Ritorna più tardi",
21281
20918
  "editor.record.form.bottomButtons.next": "Avanti",
21282
20919
  "editor.record.form.bottomButtons.previous": "Precedente",
@@ -21336,18 +20973,18 @@ var it = {
21336
20973
  "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
21337
20974
  "editor.record.form.keywords.place.withoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21338
20975
  "editor.record.form.keywords.placeholder": "Seleziona una parola chiave",
21339
- "editor.record.form.license.cc-by": "",
21340
- "editor.record.form.license.cc-by-sa": "",
21341
- "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",
21342
20979
  "editor.record.form.license.etalab": "Licenza aperta (Etalab)",
21343
20980
  "editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
21344
- "editor.record.form.license.odbl": "",
21345
- "editor.record.form.license.odc-by": "",
21346
- "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",
21347
20984
  "editor.record.form.license.unknown": "Sconosciuto o assente",
21348
20985
  "editor.record.form.page.accessAndContact": "Informazioni per l'uso",
21349
20986
  "editor.record.form.page.description": "Descrizione del dataset",
21350
- "editor.record.form.page.resources": "",
20987
+ "editor.record.form.page.resources": "Risorse",
21351
20988
  "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset",
21352
20989
  "editor.record.form.section.about.label": "Informazioni sul dataset",
21353
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.).",
@@ -21374,7 +21011,7 @@ var it = {
21374
21011
  "editor.record.loadError.body": "Impossibile caricare il dataset:",
21375
21012
  "editor.record.loadError.closeMessage": "Capito",
21376
21013
  "editor.record.loadError.title": "Errore durante il caricamento",
21377
- "editor.record.lock.reason": "",
21014
+ "editor.record.lock.reason": "Non è un editore di uno dei gruppi autorizzati",
21378
21015
  "editor.record.onlineResource.protocol.other": "Altro",
21379
21016
  "editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
21380
21017
  "editor.record.onlineResourceError.closeMessage": "Capito",
@@ -21396,7 +21033,7 @@ var it = {
21396
21033
  "editor.record.resourceError.closeMessage": "Capito",
21397
21034
  "editor.record.resourceError.title": "Errore con gli allegati",
21398
21035
  "editor.record.saveStatus.draftWithChangesPending": "Salvato - Modifiche non pubblicate",
21399
- "editor.record.saveStatus.recordNotPublished": "",
21036
+ "editor.record.saveStatus.recordNotPublished": "Salvato - non pubblicato",
21400
21037
  "editor.record.saveStatus.recordUpToDate": "Salvato - Dataset aggiornato",
21401
21038
  "editor.record.undo.confirmation.cancelText": "Mantieni le modifiche",
21402
21039
  "editor.record.undo.confirmation.confirmText": "Annulla le modifiche",
@@ -21406,7 +21043,7 @@ var it = {
21406
21043
  "editor.record.undo.tooltip.enabled": "Fare clic su questo pulsante per annullare le modifiche apportate a questo dataset",
21407
21044
  "editor.record.upToDate": "Questo dataset è aggiornato",
21408
21045
  "editor.sidebar.logout": "Esci",
21409
- "editor.sidebar.menu.editor": "",
21046
+ "editor.sidebar.menu.editor": "Editore",
21410
21047
  "editor.temporary.disabled": "Non ancora implementato",
21411
21048
  "externalviewer.dataset.unnamed": "Layer del datahub",
21412
21049
  "facets.block.title.OrgForResource": "Organizzazione",
@@ -21454,7 +21091,7 @@ var it = {
21454
21091
  "map.add.layer": "Aggiungere un layer",
21455
21092
  "map.add.layer.catalog": "Dal catalogo",
21456
21093
  "map.add.layer.file": "Da un file",
21457
- "map.add.layer.ogc.api": "",
21094
+ "map.add.layer.ogc.api": "Da OGC API",
21458
21095
  "map.add.layer.wfs": "Da un WFS",
21459
21096
  "map.add.layer.wms": "Da un WMS",
21460
21097
  "map.addFromFile.placeholder": "Clicca o trascina un file qui",
@@ -21467,7 +21104,7 @@ var it = {
21467
21104
  "map.loading.data": "Caricamento dati...",
21468
21105
  "map.loading.service": "Caricamento del servizio...",
21469
21106
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
21470
- "map.ogc.urlInput.hint": "",
21107
+ "map.ogc.urlInput.hint": "Inserisci URL del servizio OGC API",
21471
21108
  "map.select.layer": "Sorgente dati",
21472
21109
  "map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
21473
21110
  "map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
@@ -21493,10 +21130,11 @@ var it = {
21493
21130
  "record.action.delete": "Elimina",
21494
21131
  "record.action.download": "Scarica",
21495
21132
  "record.action.duplicate": "Duplicato",
21496
- "record.action.duplicating": "",
21133
+ "record.action.duplicating": "Duplicazione",
21134
+ "record.action.rollback": "Annulla",
21497
21135
  "record.action.view": "Visualizza",
21498
21136
  "record.externalViewer.open": "Aprire nel visualizzatore esterno",
21499
- "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 ",
21500
21138
  "record.metadata.about": "Descrizione",
21501
21139
  "record.metadata.api": "API",
21502
21140
  "record.metadata.api.form.closeButton": "Chiude",
@@ -21614,8 +21252,10 @@ var it = {
21614
21252
  "search.error.receivedError": "Errore restituito",
21615
21253
  "search.error.recordHasnolink": "Questo dataset non ha ancora alcun collegamento, riprova più tardi.",
21616
21254
  "search.error.recordNotFound": "Impossibile trovare questi dati.",
21617
- "search.field.any.placeholder": "Cerca un dataset...",
21255
+ "search.field.any.placeholder": "Cerca del catalogo...",
21618
21256
  "search.field.sortBy": "Ordina per:",
21257
+ "search.filters.availableServices.download": "",
21258
+ "search.filters.availableServices.view": "",
21619
21259
  "search.filters.changeDate": "Aggiornato",
21620
21260
  "search.filters.clear": "Ripristina",
21621
21261
  "search.filters.contact": "Contatti",
@@ -21671,7 +21311,7 @@ var it = {
21671
21311
  "tooltip.url.open": "Aprire l'URL",
21672
21312
  "ui.readLess": "Ridurre",
21673
21313
  "ui.readMore": "Leggere di più",
21674
- "wfs.aggregations.notsupported": "",
21314
+ "wfs.aggregations.notsupported": "Aggregazioni non supportate per i servizi WFS",
21675
21315
  "wfs.feature.limit": "Troppi oggetti per visualizzare il WFS layer!",
21676
21316
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
21677
21317
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
@@ -21706,8 +21346,6 @@ var nl = {
21706
21346
  "chart.type.lineSmooth": "glad lijndiagram",
21707
21347
  "chart.type.pie": "cirkeldiagram",
21708
21348
  "dashboard.catalog.allRecords": "",
21709
- "dashboard.catalog.contacts": "",
21710
- "dashboard.catalog.thesaurus": "",
21711
21349
  "dashboard.createRecord": "",
21712
21350
  "dashboard.importRecord": "",
21713
21351
  "dashboard.importRecord.importExternal": "",
@@ -21720,29 +21358,10 @@ var nl = {
21720
21358
  "dashboard.records.myDraft": "Mijn concepten",
21721
21359
  "dashboard.records.myRecords": "Mijn Records",
21722
21360
  "dashboard.records.search": "Zoeken naar \"{searchText}\"",
21723
- "dashboard.records.templates": "",
21724
21361
  "dashboard.records.userDetail": "",
21725
21362
  "dashboard.records.userEmail": "",
21726
21363
  "dashboard.records.username": "",
21727
21364
  "dashboard.records.users": "",
21728
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
21729
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
21730
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
21731
- "datafeeder.analysisProgressBar.subtitle": "",
21732
- "datafeeder.analysisProgressBar.title": "",
21733
- "datafeeder.datasetValidation.datasetInformation": "",
21734
- "datafeeder.datasetValidation.submitButton": "",
21735
- "datafeeder.datasetValidation.title": "",
21736
- "datafeeder.datasetValidation.unknown": "",
21737
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
21738
- "datafeeder.datasetValidationCsv.lineNumbers": "",
21739
- "datafeeder.form.abstract": "",
21740
- "datafeeder.form.datepicker": "",
21741
- "datafeeder.form.description": "",
21742
- "datafeeder.form.dropdown": "",
21743
- "datafeeder.form.tags": "",
21744
- "datafeeder.form.title": "",
21745
- "datafeeder.formsPage.title": "",
21746
21365
  "datafeeder.month.april": "",
21747
21366
  "datafeeder.month.august": "",
21748
21367
  "datafeeder.month.december": "",
@@ -21755,59 +21374,6 @@ var nl = {
21755
21374
  "datafeeder.month.november": "",
21756
21375
  "datafeeder.month.october": "",
21757
21376
  "datafeeder.month.september": "",
21758
- "datafeeder.publish.hint": "",
21759
- "datafeeder.publish.illustration.title": "",
21760
- "datafeeder.publish.subtitle": "",
21761
- "datafeeder.publish.title": "",
21762
- "datafeeder.publish.upload": "",
21763
- "datafeeder.publishSuccess.geonetworkRecord": "",
21764
- "datafeeder.publishSuccess.illustration.title": "",
21765
- "datafeeder.publishSuccess.mapViewer": "",
21766
- "datafeeder.publishSuccess.ogcFeature": "",
21767
- "datafeeder.publishSuccess.subtitle": "",
21768
- "datafeeder.publishSuccess.title": "",
21769
- "datafeeder.publishSuccess.uploadAnotherData": "",
21770
- "datafeeder.summarizePage.illustration": "",
21771
- "datafeeder.summarizePage.previous": "",
21772
- "datafeeder.summarizePage.submit": "",
21773
- "datafeeder.summarizePage.title": "",
21774
- "datafeeder.upload.acceptedFormats": "",
21775
- "datafeeder.upload.checkboxLabel": "",
21776
- "datafeeder.upload.error.subtitle.analysis": "",
21777
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
21778
- "datafeeder.upload.error.subtitle.fileFormat": "",
21779
- "datafeeder.upload.error.subtitle.fileSize": "",
21780
- "datafeeder.upload.error.title.analysis": "",
21781
- "datafeeder.upload.error.title.cantOpenFile": "",
21782
- "datafeeder.upload.error.title.fileFormat": "",
21783
- "datafeeder.upload.error.title.fileHasntSelected": "",
21784
- "datafeeder.upload.error.title.fileSize": "",
21785
- "datafeeder.upload.error.title.noRightsToSendData": "",
21786
- "datafeeder.upload.illustration.enrichment": "",
21787
- "datafeeder.upload.illustration.import": "",
21788
- "datafeeder.upload.illustration.title": "",
21789
- "datafeeder.upload.illustration.validation": "",
21790
- "datafeeder.upload.illustration.verification": "",
21791
- "datafeeder.upload.inputLabel": "",
21792
- "datafeeder.upload.maxFileSize": "",
21793
- "datafeeder.upload.title": "",
21794
- "datafeeder.upload.uploadButton": "",
21795
- "datafeeder.validation.csv.delimiter": "",
21796
- "datafeeder.validation.csv.delimiter.comma": "",
21797
- "datafeeder.validation.csv.delimiter.semicolon": "",
21798
- "datafeeder.validation.csv.lat.field": "",
21799
- "datafeeder.validation.csv.lng.field": "",
21800
- "datafeeder.validation.csv.quote.double": "",
21801
- "datafeeder.validation.csv.quote.none": "",
21802
- "datafeeder.validation.csv.quote.simple": "",
21803
- "datafeeder.validation.csv.quoteChar": "",
21804
- "datafeeder.validation.encoding": "",
21805
- "datafeeder.validation.extent.title": "",
21806
- "datafeeder.validation.extent.title.unknown": "",
21807
- "datafeeder.validation.projection": "",
21808
- "datafeeder.validation.projection.unknown": "",
21809
- "datafeeder.validation.sample.title": "",
21810
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
21811
21377
  "datafeeder.wizardSummarize.createdAt": "",
21812
21378
  "datafeeder.wizardSummarize.scale": "",
21813
21379
  "datahub.header.datasets": "",
@@ -22111,6 +21677,7 @@ var nl = {
22111
21677
  "record.action.download": "",
22112
21678
  "record.action.duplicate": "",
22113
21679
  "record.action.duplicating": "",
21680
+ "record.action.rollback": "",
22114
21681
  "record.action.view": "",
22115
21682
  "record.externalViewer.open": "",
22116
21683
  "record.feature.limit": "",
@@ -22233,6 +21800,8 @@ var nl = {
22233
21800
  "search.error.recordNotFound": "",
22234
21801
  "search.field.any.placeholder": "",
22235
21802
  "search.field.sortBy": "",
21803
+ "search.filters.availableServices.download": "",
21804
+ "search.filters.availableServices.view": "",
22236
21805
  "search.filters.changeDate": "",
22237
21806
  "search.filters.clear": "",
22238
21807
  "search.filters.contact": "",
@@ -22288,7 +21857,6 @@ var nl = {
22288
21857
  "tooltip.url.open": "",
22289
21858
  "ui.readLess": "",
22290
21859
  "ui.readMore": "",
22291
- "wfs.aggregations.notsupported": "",
22292
21860
  "wfs.feature.limit": "",
22293
21861
  "wfs.featuretype.notfound": "",
22294
21862
  "wfs.geojsongml.notsupported": "",
@@ -22323,8 +21891,6 @@ var pt = {
22323
21891
  "chart.type.lineSmooth": "gráfico de linha suave",
22324
21892
  "chart.type.pie": "gráfico de pizza",
22325
21893
  "dashboard.catalog.allRecords": "",
22326
- "dashboard.catalog.contacts": "",
22327
- "dashboard.catalog.thesaurus": "",
22328
21894
  "dashboard.createRecord": "",
22329
21895
  "dashboard.importRecord": "",
22330
21896
  "dashboard.importRecord.importExternal": "",
@@ -22337,29 +21903,10 @@ var pt = {
22337
21903
  "dashboard.records.myDraft": "Meus rascunhos",
22338
21904
  "dashboard.records.myRecords": "Meus Registros",
22339
21905
  "dashboard.records.search": "Buscar por \"{searchText}\"",
22340
- "dashboard.records.templates": "",
22341
21906
  "dashboard.records.userDetail": "",
22342
21907
  "dashboard.records.userEmail": "",
22343
21908
  "dashboard.records.username": "",
22344
21909
  "dashboard.records.users": "",
22345
- "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
22346
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
22347
- "datafeeder.analysisProgressBar.illustration.samplingData": "",
22348
- "datafeeder.analysisProgressBar.subtitle": "",
22349
- "datafeeder.analysisProgressBar.title": "",
22350
- "datafeeder.datasetValidation.datasetInformation": "",
22351
- "datafeeder.datasetValidation.submitButton": "",
22352
- "datafeeder.datasetValidation.title": "",
22353
- "datafeeder.datasetValidation.unknown": "",
22354
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "",
22355
- "datafeeder.datasetValidationCsv.lineNumbers": "",
22356
- "datafeeder.form.abstract": "",
22357
- "datafeeder.form.datepicker": "",
22358
- "datafeeder.form.description": "",
22359
- "datafeeder.form.dropdown": "",
22360
- "datafeeder.form.tags": "",
22361
- "datafeeder.form.title": "",
22362
- "datafeeder.formsPage.title": "",
22363
21910
  "datafeeder.month.april": "",
22364
21911
  "datafeeder.month.august": "",
22365
21912
  "datafeeder.month.december": "",
@@ -22372,59 +21919,6 @@ var pt = {
22372
21919
  "datafeeder.month.november": "",
22373
21920
  "datafeeder.month.october": "",
22374
21921
  "datafeeder.month.september": "",
22375
- "datafeeder.publish.hint": "",
22376
- "datafeeder.publish.illustration.title": "",
22377
- "datafeeder.publish.subtitle": "",
22378
- "datafeeder.publish.title": "",
22379
- "datafeeder.publish.upload": "",
22380
- "datafeeder.publishSuccess.geonetworkRecord": "",
22381
- "datafeeder.publishSuccess.illustration.title": "",
22382
- "datafeeder.publishSuccess.mapViewer": "",
22383
- "datafeeder.publishSuccess.ogcFeature": "",
22384
- "datafeeder.publishSuccess.subtitle": "",
22385
- "datafeeder.publishSuccess.title": "",
22386
- "datafeeder.publishSuccess.uploadAnotherData": "",
22387
- "datafeeder.summarizePage.illustration": "",
22388
- "datafeeder.summarizePage.previous": "",
22389
- "datafeeder.summarizePage.submit": "",
22390
- "datafeeder.summarizePage.title": "",
22391
- "datafeeder.upload.acceptedFormats": "",
22392
- "datafeeder.upload.checkboxLabel": "",
22393
- "datafeeder.upload.error.subtitle.analysis": "",
22394
- "datafeeder.upload.error.subtitle.cantOpenFile": "",
22395
- "datafeeder.upload.error.subtitle.fileFormat": "",
22396
- "datafeeder.upload.error.subtitle.fileSize": "",
22397
- "datafeeder.upload.error.title.analysis": "",
22398
- "datafeeder.upload.error.title.cantOpenFile": "",
22399
- "datafeeder.upload.error.title.fileFormat": "",
22400
- "datafeeder.upload.error.title.fileHasntSelected": "",
22401
- "datafeeder.upload.error.title.fileSize": "",
22402
- "datafeeder.upload.error.title.noRightsToSendData": "",
22403
- "datafeeder.upload.illustration.enrichment": "",
22404
- "datafeeder.upload.illustration.import": "",
22405
- "datafeeder.upload.illustration.title": "",
22406
- "datafeeder.upload.illustration.validation": "",
22407
- "datafeeder.upload.illustration.verification": "",
22408
- "datafeeder.upload.inputLabel": "",
22409
- "datafeeder.upload.maxFileSize": "",
22410
- "datafeeder.upload.title": "",
22411
- "datafeeder.upload.uploadButton": "",
22412
- "datafeeder.validation.csv.delimiter": "",
22413
- "datafeeder.validation.csv.delimiter.comma": "",
22414
- "datafeeder.validation.csv.delimiter.semicolon": "",
22415
- "datafeeder.validation.csv.lat.field": "",
22416
- "datafeeder.validation.csv.lng.field": "",
22417
- "datafeeder.validation.csv.quote.double": "",
22418
- "datafeeder.validation.csv.quote.none": "",
22419
- "datafeeder.validation.csv.quote.simple": "",
22420
- "datafeeder.validation.csv.quoteChar": "",
22421
- "datafeeder.validation.encoding": "",
22422
- "datafeeder.validation.extent.title": "",
22423
- "datafeeder.validation.extent.title.unknown": "",
22424
- "datafeeder.validation.projection": "",
22425
- "datafeeder.validation.projection.unknown": "",
22426
- "datafeeder.validation.sample.title": "",
22427
- "datafeeder.wizard.emptyRequiredValuesMessage": "",
22428
21922
  "datafeeder.wizardSummarize.createdAt": "",
22429
21923
  "datafeeder.wizardSummarize.scale": "",
22430
21924
  "datahub.header.datasets": "",
@@ -22728,6 +22222,7 @@ var pt = {
22728
22222
  "record.action.download": "",
22729
22223
  "record.action.duplicate": "",
22730
22224
  "record.action.duplicating": "",
22225
+ "record.action.rollback": "",
22731
22226
  "record.action.view": "",
22732
22227
  "record.externalViewer.open": "",
22733
22228
  "record.feature.limit": "",
@@ -22850,6 +22345,8 @@ var pt = {
22850
22345
  "search.error.recordNotFound": "",
22851
22346
  "search.field.any.placeholder": "",
22852
22347
  "search.field.sortBy": "",
22348
+ "search.filters.availableServices.download": "",
22349
+ "search.filters.availableServices.view": "",
22853
22350
  "search.filters.changeDate": "",
22854
22351
  "search.filters.clear": "",
22855
22352
  "search.filters.contact": "",
@@ -22905,7 +22402,6 @@ var pt = {
22905
22402
  "tooltip.url.open": "",
22906
22403
  "ui.readLess": "",
22907
22404
  "ui.readMore": "",
22908
- "wfs.aggregations.notsupported": "",
22909
22405
  "wfs.feature.limit": "",
22910
22406
  "wfs.featuretype.notfound": "",
22911
22407
  "wfs.geojsongml.notsupported": "",
@@ -23092,6 +22588,16 @@ class Gn4FieldMapper {
23092
22588
  isOpenData: (output, source) => this.addExtra({
23093
22589
  isOpenData: selectField(source, 'isOpenData') !== 'false',
23094
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
+ },
23095
22601
  isPublishedToAll: (output, source) => this.addExtra({
23096
22602
  isPublishedToAll: selectField(source, 'isPublishedToAll'),
23097
22603
  }, output),
@@ -23617,16 +23123,26 @@ class ElasticsearchService {
23617
23123
  ].filter(Boolean);
23618
23124
  return queryParts.length > 0 ? queryParts : undefined;
23619
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
+ }
23620
23143
  buildPayloadQuery({ any, ...fieldSearchFilters }, configFilters, uuids, geometry) {
23621
23144
  const must = [];
23622
- const must_not = {
23623
- ...this.queryFilterOnValues('resourceType', [
23624
- 'service',
23625
- 'map',
23626
- 'map/static',
23627
- 'mapDigital',
23628
- ]),
23629
- };
23145
+ const must_not = this.mustNotFilters();
23630
23146
  const should = [];
23631
23147
  const filter = [this.queryFilterOnValues('isTemplate', 'n')];
23632
23148
  if (any) {
@@ -23712,14 +23228,7 @@ class ElasticsearchService {
23712
23228
  },
23713
23229
  },
23714
23230
  ],
23715
- must_not: {
23716
- ...this.queryFilterOnValues('resourceType', [
23717
- 'service',
23718
- 'map',
23719
- 'map/static',
23720
- 'mapDigital',
23721
- ]),
23722
- },
23231
+ must_not: this.mustNotFilters(),
23723
23232
  },
23724
23233
  },
23725
23234
  _source: ['resourceTitleObject', 'uuid'],
@@ -23936,9 +23445,29 @@ class Gn4Repository {
23936
23445
  }
23937
23446
  getRecord(uniqueIdentifier) {
23938
23447
  return this.gn4SearchApi
23939
- .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23448
+ .search('bucket', ['fcats'], JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23940
23449
  .pipe(map$1((results) => results.hits.hits[0]), switchMap((record) => record ? this.gn4Mapper.readRecord(record) : of(null)));
23941
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
+ }
23942
23471
  getSimilarRecords(similarTo) {
23943
23472
  return this.gn4SearchApi
23944
23473
  .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getRelatedRecordPayload(similarTo, 3)))
@@ -24015,14 +23544,10 @@ class Gn4Repository {
24015
23544
  return this.getExternalRecordAsXml(recordDownloadUrl).pipe(exhaustMap(async (fetchedRecordAsXml) => {
24016
23545
  const converter = findConverterForDocument(fetchedRecordAsXml);
24017
23546
  const record = await converter.readRecord(fetchedRecordAsXml);
24018
- const tempId = this.generateTemporaryId();
24019
23547
  record.title = `${record.title} (Copy)`;
24020
- record.uniqueIdentifier = tempId;
24021
- const recordAsXml = await converter.writeRecord(record, fetchedRecordAsXml);
24022
- this.saveRecordToLocalStorage(recordAsXml, record.uniqueIdentifier);
24023
- this._draftsChanged.next();
24024
- return tempId;
24025
- }), catchError((error) => {
23548
+ await converter.writeRecord(record, fetchedRecordAsXml);
23549
+ return this.saveRecord(record, '', false);
23550
+ }), exhaustMap((uuidObservable) => uuidObservable), catchError((error) => {
24026
23551
  return throwError(() => error);
24027
23552
  }));
24028
23553
  }
@@ -26324,66 +25849,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26324
25849
  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" }]
26325
25850
  }] });
26326
25851
 
26327
- class StepBarComponent {
26328
- constructor(cdr) {
26329
- this.cdr = cdr;
26330
- this.currentStep = 1;
26331
- this.type = 'default';
26332
- }
26333
- get stepCounter() {
26334
- return new Array(this.steps);
26335
- }
26336
- get color() {
26337
- switch (this.type) {
26338
- case 'default':
26339
- return {
26340
- outerBar: 'bg-gray-200',
26341
- innerBar: 'bg-gray-100',
26342
- };
26343
- case 'primary':
26344
- return {
26345
- outerBar: 'bg-primary',
26346
- innerBar: 'bg-primary-lighter',
26347
- };
26348
- case 'secondary':
26349
- return {
26350
- outerBar: 'bg-secondary',
26351
- innerBar: 'bg-secondary-lighter',
26352
- };
26353
- }
26354
- }
26355
- getCircleColor(index) {
26356
- return index === this.currentStep
26357
- ? 'bg-black'
26358
- : index < this.currentStep
26359
- ? 'bg-white'
26360
- : this.color.innerBar;
26361
- }
26362
- getChecked(index) {
26363
- return index + 1 < this.currentStep;
26364
- }
26365
- 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 }); }
26366
- 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"] }] }); }
26367
- }
26368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StepBarComponent, decorators: [{
26369
- type: Component,
26370
- 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"] }]
26371
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { steps: [{
26372
- type: Input
26373
- }], currentStep: [{
26374
- type: Input
26375
- }], type: [{
26376
- type: Input
26377
- }] } });
26378
-
26379
25852
  class UiWidgetsModule {
26380
25853
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
26381
- 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,
25854
+ 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,
26382
25855
  FormsModule,
26383
25856
  ReactiveFormsModule,
26384
25857
  TagInputModule,
26385
25858
  UtilSharedModule,
26386
- MatProgressSpinnerModule], exports: [StepBarComponent] }); }
25859
+ MatProgressSpinnerModule] }); }
26387
25860
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, imports: [CommonModule,
26388
25861
  TranslateModule.forChild(),
26389
25862
  NgxDropzoneModule,
@@ -26396,7 +25869,7 @@ class UiWidgetsModule {
26396
25869
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiWidgetsModule, decorators: [{
26397
25870
  type: NgModule,
26398
25871
  args: [{
26399
- declarations: [ColorScaleComponent, StepBarComponent],
25872
+ declarations: [ColorScaleComponent],
26400
25873
  imports: [
26401
25874
  CommonModule,
26402
25875
  TranslateModule.forChild(),
@@ -26407,7 +25880,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26407
25880
  UtilSharedModule,
26408
25881
  MatProgressSpinnerModule,
26409
25882
  ],
26410
- exports: [StepBarComponent],
25883
+ exports: [],
26411
25884
  }]
26412
25885
  }] });
26413
25886
 
@@ -26439,14 +25912,20 @@ class ProgressBarComponent {
26439
25912
  innerBar: 'bg-secondary-lighter',
26440
25913
  text: 'text-white',
26441
25914
  };
25915
+ case 'light':
25916
+ return {
25917
+ outerBar: 'bg-primary-white',
25918
+ innerBar: 'bg-primary',
25919
+ text: 'text-main',
25920
+ };
26442
25921
  }
26443
25922
  }
26444
25923
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26445
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProgressBarComponent, isStandalone: true, selector: "gn-ui-progress-bar", inputs: { value: "value", type: "type" }, ngImport: i0, template: "<div class=\"flex h-full {{ color.outerBar }} rounded-t-lg rounded-b-lg\">\n <div\n [style.width.%]=\"progress\"\n class=\"flex {{\n color.innerBar\n }} my-1 mx-1 transition-width duration-500 ease-in-out rounded-t-md rounded-b-md shadow-xl\"\n >\n <div class=\"flex items-center pl-2 py-1 {{ color.text }} font-bold text-4\">\n {{ progress }}%\n </div>\n </div>\n</div>\n", styles: [".font-bold{font-weight:var(--progress-bar-font-weight, \"bold\")}\n"] }); }
25924
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ProgressBarComponent, isStandalone: true, selector: "gn-ui-progress-bar", inputs: { value: "value", type: "type" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"type\">\n <!-- Light Theme -->\n <ng-container *ngSwitchCase=\"'light'\">\n <div class=\"flex items-center relative\">\n <div\n class=\"flex-shrink-0 {{ color.text }} text-xs font-medium mr-2\n text-opacity-100 !text-slate-800\"\n >\n {{ progress }}%\n </div>\n <div class=\"flex-grow h-[6px] w-full {{ color.outerBar }} rounded-full\">\n <div\n [style.width.%]=\"progress\"\n class=\"{{ color.innerBar }} transition-width duration-500\n ease-in-out rounded-full shadow-sm h-full\"\n ></div>\n </div>\n </div>\n </ng-container>\n\n <!-- Default / Primary / Secondary Themes -->\n <ng-container *ngSwitchDefault>\n <div class=\"flex h-full {{ color.outerBar }} rounded-t-lg rounded-b-lg\">\n <div\n [style.width.%]=\"progress\"\n class=\"flex {{ color.innerBar }} my-1 mx-1 transition-width\n duration-500 ease-in-out rounded-t-md rounded-b-md shadow-xl\"\n >\n <div\n class=\"flex items-center pl-2 py-1 {{ color.text }} font-bold text-4\"\n >\n {{ progress }}%\n </div>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".font-bold{font-weight:var(--progress-bar-font-weight, \"bold\")}\n"], dependencies: [{ kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }] }); }
26446
25925
  }
26447
25926
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProgressBarComponent, decorators: [{
26448
25927
  type: Component,
26449
- args: [{ selector: 'gn-ui-progress-bar', standalone: true, template: "<div class=\"flex h-full {{ color.outerBar }} rounded-t-lg rounded-b-lg\">\n <div\n [style.width.%]=\"progress\"\n class=\"flex {{\n color.innerBar\n }} my-1 mx-1 transition-width duration-500 ease-in-out rounded-t-md rounded-b-md shadow-xl\"\n >\n <div class=\"flex items-center pl-2 py-1 {{ color.text }} font-bold text-4\">\n {{ progress }}%\n </div>\n </div>\n</div>\n", styles: [".font-bold{font-weight:var(--progress-bar-font-weight, \"bold\")}\n"] }]
25928
+ args: [{ selector: 'gn-ui-progress-bar', standalone: true, imports: [NgSwitch, NgSwitchCase, NgSwitchDefault], template: "<ng-container [ngSwitch]=\"type\">\n <!-- Light Theme -->\n <ng-container *ngSwitchCase=\"'light'\">\n <div class=\"flex items-center relative\">\n <div\n class=\"flex-shrink-0 {{ color.text }} text-xs font-medium mr-2\n text-opacity-100 !text-slate-800\"\n >\n {{ progress }}%\n </div>\n <div class=\"flex-grow h-[6px] w-full {{ color.outerBar }} rounded-full\">\n <div\n [style.width.%]=\"progress\"\n class=\"{{ color.innerBar }} transition-width duration-500\n ease-in-out rounded-full shadow-sm h-full\"\n ></div>\n </div>\n </div>\n </ng-container>\n\n <!-- Default / Primary / Secondary Themes -->\n <ng-container *ngSwitchDefault>\n <div class=\"flex h-full {{ color.outerBar }} rounded-t-lg rounded-b-lg\">\n <div\n [style.width.%]=\"progress\"\n class=\"flex {{ color.innerBar }} my-1 mx-1 transition-width\n duration-500 ease-in-out rounded-t-md rounded-b-md shadow-xl\"\n >\n <div\n class=\"flex items-center pl-2 py-1 {{ color.text }} font-bold text-4\"\n >\n {{ progress }}%\n </div>\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [".font-bold{font-weight:var(--progress-bar-font-weight, \"bold\")}\n"] }]
26450
25929
  }], propDecorators: { value: [{
26451
25930
  type: Input
26452
25931
  }], type: [{
@@ -26643,29 +26122,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26643
26122
  }] } });
26644
26123
 
26645
26124
  class AutocompleteComponent {
26125
+ get displayEnterBtn() {
26126
+ return this.enterButton && this.allowSubmit && !this.searchActive;
26127
+ }
26128
+ getExtraClass() {
26129
+ if (this.allowSubmit) {
26130
+ if (this.enterButton) {
26131
+ return 'border rounded-lg absolute w-8 h-8 right-[calc(var(--icon-width)+var(--icon-padding))] inset-y-[--icon-padding]';
26132
+ }
26133
+ else {
26134
+ return 'border rounded-lg absolute w-8 h-8 right-[calc(var(--icon-width)+0.25*var(--icon-width))] inset-y-[calc(0.25*var(--icon-width))]';
26135
+ }
26136
+ }
26137
+ else {
26138
+ if (!this.enterButton) {
26139
+ return 'border rounded-lg absolute w-8 h-8 right-2 inset-y-2';
26140
+ }
26141
+ }
26142
+ return 'border rounded-lg absolute w-8 h-8';
26143
+ }
26646
26144
  constructor(cdRef) {
26647
26145
  this.cdRef = cdRef;
26146
+ this.enterButton = false;
26648
26147
  this.clearOnSelection = false;
26649
26148
  this.preventCompleteOnSelection = false;
26650
26149
  this.autoFocus = false;
26651
26150
  this.minCharacterCount = 3;
26652
26151
  // this will show a submit button next to the input; if false, a search icon will appear on the left
26653
26152
  this.allowSubmit = false;
26153
+ this.forceTrackPosition = false;
26654
26154
  this.itemSelected = new EventEmitter();
26655
26155
  this.inputSubmitted = new EventEmitter();
26656
26156
  this.inputCleared = new EventEmitter();
26157
+ this.isSearchActive = new EventEmitter();
26657
26158
  this.control = new UntypedFormControl();
26658
26159
  this.cancelEnter = true;
26659
26160
  this.selectionSubject = new ReplaySubject(1);
26660
26161
  this.lastInputValue$ = new ReplaySubject(1);
26661
26162
  this.error = null;
26662
26163
  this.subscription = new Subscription();
26164
+ this.lastPosition = null;
26165
+ this.enterBtnPosition = 0;
26166
+ this.searchActive = false;
26663
26167
  this.displayWithFn = (item) => item.toString();
26664
26168
  this.displayWithFnInternal = (item) => {
26665
26169
  if (item === null || item === undefined)
26666
26170
  return null;
26667
26171
  return this.displayWithFn(item);
26668
26172
  };
26173
+ /**
26174
+ * !!! This function is used only for web component mode,
26175
+ * the autocomplete dropdown may not update its position
26176
+ * if the page or container is disabling wind scroll.
26177
+ */
26178
+ this.trackPosition = () => {
26179
+ const dropdownOpened = this.triggerRef && this.triggerRef.panelOpen;
26180
+ const rect = this.inputRef.nativeElement.getBoundingClientRect();
26181
+ if (dropdownOpened &&
26182
+ (!this.lastPosition ||
26183
+ rect.top !== this.lastPosition.top ||
26184
+ rect.left !== this.lastPosition.left)) {
26185
+ this.triggerRef.updatePosition();
26186
+ }
26187
+ this.lastPosition = rect;
26188
+ requestAnimationFrame(this.trackPosition);
26189
+ };
26669
26190
  }
26670
26191
  ngOnChanges(changes) {
26671
26192
  const { value } = changes;
@@ -26673,6 +26194,14 @@ class AutocompleteComponent {
26673
26194
  const previousTextValue = this.displayWithFnInternal(value.previousValue);
26674
26195
  const currentTextValue = this.displayWithFnInternal(value.currentValue);
26675
26196
  if (previousTextValue !== currentTextValue) {
26197
+ if (currentTextValue) {
26198
+ this.searchActive = true;
26199
+ this.isSearchActive.emit(true);
26200
+ }
26201
+ else {
26202
+ this.searchActive = false;
26203
+ this.isSearchActive.emit(false);
26204
+ }
26676
26205
  this.updateInputValue(value.currentValue);
26677
26206
  }
26678
26207
  }
@@ -26684,7 +26213,12 @@ class AutocompleteComponent {
26684
26213
  const suggestionsFromAction = merge(newValue$.pipe(filter((value) => value.length >= this.minCharacterCount)), externalValueChange$).pipe(tap$1(() => {
26685
26214
  this.searching = true;
26686
26215
  this.error = null;
26687
- }), switchMap$1((value) => this.action(value)), catchError((error) => {
26216
+ }), switchMap$1((value) => this.action(value)), tap$1((suggestions) => {
26217
+ // forcing the panel to open if there are suggestions
26218
+ if (suggestions.length > 0) {
26219
+ this.triggerRef?.openPanel();
26220
+ }
26221
+ }), catchError((error) => {
26688
26222
  this.error = error.message;
26689
26223
  return of([]);
26690
26224
  }), finalize(() => (this.searching = false)));
@@ -26712,9 +26246,23 @@ class AutocompleteComponent {
26712
26246
  this.inputRef.nativeElement.focus();
26713
26247
  this.cdRef.detectChanges();
26714
26248
  }
26249
+ this.startTrackingPosition();
26250
+ }
26251
+ /**
26252
+ * !!! This function is used only for web component mode,
26253
+ * the autocomplete dropdown may not update its position
26254
+ * if the page or container is disabling wind scroll.
26255
+ */
26256
+ startTrackingPosition() {
26257
+ if (this.forceTrackPosition) {
26258
+ requestAnimationFrame(this.trackPosition);
26259
+ }
26715
26260
  }
26716
26261
  ngOnDestroy() {
26717
26262
  this.subscription?.unsubscribe();
26263
+ if (this.intervalIdPosition) {
26264
+ clearInterval(this.intervalIdPosition);
26265
+ }
26718
26266
  }
26719
26267
  updateInputValue(value) {
26720
26268
  if (value) {
@@ -26726,6 +26274,8 @@ class AutocompleteComponent {
26726
26274
  }
26727
26275
  clear() {
26728
26276
  this.inputRef.nativeElement.value = '';
26277
+ this.searchActive = false;
26278
+ this.isSearchActive.emit(false);
26729
26279
  this.inputCleared.emit();
26730
26280
  this.selectionSubject
26731
26281
  .pipe(take(1))
@@ -26734,6 +26284,8 @@ class AutocompleteComponent {
26734
26284
  }
26735
26285
  handleEnter(any) {
26736
26286
  if (!this.cancelEnter && this.allowSubmit) {
26287
+ this.isSearchActive.emit(true);
26288
+ this.searchActive = true;
26737
26289
  this.inputSubmitted.emit(any);
26738
26290
  }
26739
26291
  }
@@ -26761,16 +26313,22 @@ class AutocompleteComponent {
26761
26313
  this.control.setValue('');
26762
26314
  }
26763
26315
  }
26316
+ handleInput(event) {
26317
+ this.searchActive = false;
26318
+ this.isSearchActive.emit(false);
26319
+ this.enterBtnPosition = event.target['value'].length * 8 + 80;
26320
+ }
26764
26321
  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 }); }
26765
- 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: [
26322
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AutocompleteComponent, isStandalone: true, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", enterButton: "enterButton", 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", isSearchActive: "isSearchActive" }, providers: [
26766
26323
  provideIcons({
26767
26324
  iconoirSearch,
26768
26325
  matClose,
26326
+ iconoirLongArrowDownLeft,
26769
26327
  }),
26770
26328
  provideNgIconsConfig({
26771
- size: '1.5rem',
26329
+ size: '1.75rem',
26772
26330
  }),
26773
- ], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <div\n class=\"absolute inset-y-[--icon-padding] left-[--icon-padding] w-[--icon-width] pointer-events-none\"\n *ngIf=\"!allowSubmit\"\n >\n <ng-icon name=\"iconoirSearch\" class=\"text-primary search\"></ng-icon>\n </div>\n <input\n #searchInput\n type=\"text\"\n class=\"gn-ui-text-input\"\n [ngClass]=\"{\n 'px-[--icon-width]': !allowSubmit,\n }\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 text-primary-lightest hover:text-primary focus:text-primary absolute inset-y-[--icon-padding] {{\n allowSubmit\n ? 'right-[calc(var(--icon-width)+var(--icon-padding))]'\n : 'right-[--icon-padding]'\n }}\"\n data-test=\"clear-btn\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (buttonClick)=\"clear()\"\n >\n <ng-icon name=\"matClose\"></ng-icon>\n </gn-ui-button>\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 border-l-[1px] border-gray-300 hover:border-gray-500 text-primary hover:text-primary-darkest focus:text-primary-darkest absolute inset-y-[--icon-padding] right-[--icon-padding]\"\n aria-label=\"Trigger search\"\n *ngIf=\"allowSubmit\"\n data-test=\"autocomplete-submit-btn\"\n (buttonClick)=\"handleClickSearch()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"matErrorOutlineOutline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</span>\n\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFnInternal\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFnInternal(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: ["span{--icon-padding: var(--gn-ui-text-input-border-size, 2px);--icon-width: calc(var(--gn-ui-text-input-padding, .6em) * 2 + 1.25em)}span>*:not(gn-ui-popup-alert){font-size:var(--gn-ui-text-input-font-size, 1em)}input:placeholder-shown{text-overflow:ellipsis}gn-ui-button{--gn-ui-button-rounded: 0;--gn-ui-button-width: var(--icon-width);--gn-ui-button-padding: 0;font-size:1em}ng-icon.search{margin-top:.6rem;margin-left:.6rem}gn-ui-button:last-of-type{--gn-ui-button-rounded: 0 var(--gn-ui-text-input-rounded, .25em) var(--gn-ui-text-input-rounded, .25em) 0}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i1$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26331
+ ], viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<span class=\"w-full inline-block relative\">\n <div\n class=\"absolute inset-y-[--icon-padding] left-[--icon-padding] w-[--icon-width] pointer-events-none\"\n *ngIf=\"!allowSubmit\"\n >\n <ng-icon name=\"iconoirSearch\" class=\"text-primary search\"></ng-icon>\n </div>\n <div class=\"flex flex-row\">\n <input\n #searchInput\n type=\"text\"\n class=\"gn-ui-text-input\"\n (input)=\"handleInput($event)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n [ngClass]=\"{\n 'text-primary': searchActive && enterButton,\n 'text-gray-900': !searchActive,\n 'px-[--icon-width]': !allowSubmit,\n }\"\n />\n <gn-ui-button\n type=\"gray\"\n *ngIf=\"searchInput.value && displayEnterBtn\"\n extraClass=\"w-32 h-8 !opacity-100\"\n [ngStyle]=\"{ left: enterBtnPosition + 'px' }\"\n class=\"absolute\"\n disabled=\"true\"\n >\n <ng-icon\n name=\"iconoirLongArrowDownLeft\"\n class=\"!w-4 text-gray-900 font-bold\"\n ></ng-icon>\n <span translate class=\"text-bold text-gray-900 font-bold\">\n Enter to search\n </span>\n </gn-ui-button>\n </div>\n <gn-ui-button\n type=\"primary\"\n [extraClass]=\"getExtraClass()\"\n data-test=\"clear-btn\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (buttonClick)=\"clear()\"\n >\n <ng-icon class=\"text-white\" name=\"matClose\"></ng-icon>\n </gn-ui-button>\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 border-l-[1px] border-gray-300 hover:border-gray-500 text-primary hover:text-primary-darkest focus:text-primary-darkest absolute inset-y-[--icon-padding] right-[--icon-padding]\"\n aria-label=\"Trigger search\"\n *ngIf=\"allowSubmit\"\n data-test=\"autocomplete-submit-btn\"\n (buttonClick)=\"handleClickSearch()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"matErrorOutlineOutline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</span>\n\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFnInternal\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFnInternal(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: ["span{--icon-padding: var(--gn-ui-text-input-border-size, 2px);--icon-width: calc(var(--gn-ui-text-input-padding, .6em) * 2 + 1.25em)}span>*:not(gn-ui-popup-alert){font-size:var(--gn-ui-text-input-font-size, 1em)}input:placeholder-shown{text-overflow:ellipsis}gn-ui-button{--gn-ui-button-rounded: 0;--gn-ui-button-width: var(--icon-width);--gn-ui-button-padding: 0;font-size:1em}ng-icon.search{margin-top:.6rem;margin-left:.6rem}gn-ui-button:last-of-type{--gn-ui-button-rounded: 0 var(--gn-ui-text-input-rounded, .25em) var(--gn-ui-text-input-rounded, .25em) 0}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i1$6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i1$6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26774
26332
  }
26775
26333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AutocompleteComponent, decorators: [{
26776
26334
  type: Component,
@@ -26786,13 +26344,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26786
26344
  provideIcons({
26787
26345
  iconoirSearch,
26788
26346
  matClose,
26347
+ iconoirLongArrowDownLeft,
26789
26348
  }),
26790
26349
  provideNgIconsConfig({
26791
- size: '1.5rem',
26350
+ size: '1.75rem',
26792
26351
  }),
26793
- ], template: "<span class=\"w-full inline-block relative\">\n <div\n class=\"absolute inset-y-[--icon-padding] left-[--icon-padding] w-[--icon-width] pointer-events-none\"\n *ngIf=\"!allowSubmit\"\n >\n <ng-icon name=\"iconoirSearch\" class=\"text-primary search\"></ng-icon>\n </div>\n <input\n #searchInput\n type=\"text\"\n class=\"gn-ui-text-input\"\n [ngClass]=\"{\n 'px-[--icon-width]': !allowSubmit,\n }\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 text-primary-lightest hover:text-primary focus:text-primary absolute inset-y-[--icon-padding] {{\n allowSubmit\n ? 'right-[calc(var(--icon-width)+var(--icon-padding))]'\n : 'right-[--icon-padding]'\n }}\"\n data-test=\"clear-btn\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (buttonClick)=\"clear()\"\n >\n <ng-icon name=\"matClose\"></ng-icon>\n </gn-ui-button>\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 border-l-[1px] border-gray-300 hover:border-gray-500 text-primary hover:text-primary-darkest focus:text-primary-darkest absolute inset-y-[--icon-padding] right-[--icon-padding]\"\n aria-label=\"Trigger search\"\n *ngIf=\"allowSubmit\"\n data-test=\"autocomplete-submit-btn\"\n (buttonClick)=\"handleClickSearch()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"matErrorOutlineOutline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</span>\n\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFnInternal\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFnInternal(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: ["span{--icon-padding: var(--gn-ui-text-input-border-size, 2px);--icon-width: calc(var(--gn-ui-text-input-padding, .6em) * 2 + 1.25em)}span>*:not(gn-ui-popup-alert){font-size:var(--gn-ui-text-input-font-size, 1em)}input:placeholder-shown{text-overflow:ellipsis}gn-ui-button{--gn-ui-button-rounded: 0;--gn-ui-button-width: var(--icon-width);--gn-ui-button-padding: 0;font-size:1em}ng-icon.search{margin-top:.6rem;margin-left:.6rem}gn-ui-button:last-of-type{--gn-ui-button-rounded: 0 var(--gn-ui-text-input-rounded, .25em) var(--gn-ui-text-input-rounded, .25em) 0}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
26352
+ ], template: "<span class=\"w-full inline-block relative\">\n <div\n class=\"absolute inset-y-[--icon-padding] left-[--icon-padding] w-[--icon-width] pointer-events-none\"\n *ngIf=\"!allowSubmit\"\n >\n <ng-icon name=\"iconoirSearch\" class=\"text-primary search\"></ng-icon>\n </div>\n <div class=\"flex flex-row\">\n <input\n #searchInput\n type=\"text\"\n class=\"gn-ui-text-input\"\n (input)=\"handleInput($event)\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n [ngClass]=\"{\n 'text-primary': searchActive && enterButton,\n 'text-gray-900': !searchActive,\n 'px-[--icon-width]': !allowSubmit,\n }\"\n />\n <gn-ui-button\n type=\"gray\"\n *ngIf=\"searchInput.value && displayEnterBtn\"\n extraClass=\"w-32 h-8 !opacity-100\"\n [ngStyle]=\"{ left: enterBtnPosition + 'px' }\"\n class=\"absolute\"\n disabled=\"true\"\n >\n <ng-icon\n name=\"iconoirLongArrowDownLeft\"\n class=\"!w-4 text-gray-900 font-bold\"\n ></ng-icon>\n <span translate class=\"text-bold text-gray-900 font-bold\">\n Enter to search\n </span>\n </gn-ui-button>\n </div>\n <gn-ui-button\n type=\"primary\"\n [extraClass]=\"getExtraClass()\"\n data-test=\"clear-btn\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (buttonClick)=\"clear()\"\n >\n <ng-icon class=\"text-white\" name=\"matClose\"></ng-icon>\n </gn-ui-button>\n <gn-ui-button\n type=\"light\"\n extraClass=\"border-0 border-l-[1px] border-gray-300 hover:border-gray-500 text-primary hover:text-primary-darkest focus:text-primary-darkest absolute inset-y-[--icon-padding] right-[--icon-padding]\"\n aria-label=\"Trigger search\"\n *ngIf=\"allowSubmit\"\n data-test=\"autocomplete-submit-btn\"\n (buttonClick)=\"handleClickSearch()\"\n >\n <ng-icon name=\"iconoirSearch\"></ng-icon>\n </gn-ui-button>\n\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"matErrorOutlineOutline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</span>\n\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFnInternal\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFnInternal(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: ["span{--icon-padding: var(--gn-ui-text-input-border-size, 2px);--icon-width: calc(var(--gn-ui-text-input-padding, .6em) * 2 + 1.25em)}span>*:not(gn-ui-popup-alert){font-size:var(--gn-ui-text-input-font-size, 1em)}input:placeholder-shown{text-overflow:ellipsis}gn-ui-button{--gn-ui-button-rounded: 0;--gn-ui-button-width: var(--icon-width);--gn-ui-button-padding: 0;font-size:1em}ng-icon.search{margin-top:.6rem;margin-left:.6rem}gn-ui-button:last-of-type{--gn-ui-button-rounded: 0 var(--gn-ui-text-input-rounded, .25em) var(--gn-ui-text-input-rounded, .25em) 0}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
26794
26353
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { placeholder: [{
26795
26354
  type: Input
26355
+ }], enterButton: [{
26356
+ type: Input
26796
26357
  }], action: [{
26797
26358
  type: Input
26798
26359
  }], value: [{
@@ -26807,12 +26368,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26807
26368
  type: Input
26808
26369
  }], allowSubmit: [{
26809
26370
  type: Input
26371
+ }], forceTrackPosition: [{
26372
+ type: Input
26810
26373
  }], itemSelected: [{
26811
26374
  type: Output
26812
26375
  }], inputSubmitted: [{
26813
26376
  type: Output
26814
26377
  }], inputCleared: [{
26815
26378
  type: Output
26379
+ }], isSearchActive: [{
26380
+ type: Output
26816
26381
  }], triggerRef: [{
26817
26382
  type: ViewChild,
26818
26383
  args: [MatAutocompleteTrigger]
@@ -26920,72 +26485,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26920
26485
  type: Output
26921
26486
  }] } });
26922
26487
 
26923
- class ChipsInputComponent {
26924
- onChange(event) {
26925
- this.rawChange.next(event);
26926
- }
26927
- constructor(http, translate) {
26928
- this.http = http;
26929
- this.translate = translate;
26930
- this.required = false;
26931
- this.loadOnce = false;
26932
- this.autocompleteItems = [];
26933
- this.invalid = false;
26934
- this.items = [];
26935
- this.requestAutocompleteItems = (text) => {
26936
- if (this.url) {
26937
- if (this.loadOnce && this.loadedItems) {
26938
- return this.loadedItems;
26939
- }
26940
- const url = this.url(text);
26941
- const lang = LANG_2_TO_3_MAPPER[this.translate.currentLang.slice(0, 2)];
26942
- return this.http
26943
- .get(url.replace('${lang}', lang))
26944
- .pipe(map$1((item) => item.map((i) => i.values[lang])));
26945
- }
26946
- else {
26947
- return of(this.autocompleteItems || []);
26948
- }
26949
- };
26950
- this.rawChange = new Subject();
26951
- this.itemsChange = this.rawChange.pipe(distinctUntilChanged());
26952
- this.subscription = new Subscription();
26953
- }
26954
- ngOnInit() {
26955
- if (this.loadOnce) {
26956
- this.loadedItems = this.requestAutocompleteItems('*').pipe(shareReplay(1));
26957
- }
26958
- this.items = this.selectedItems;
26959
- this.subscription = this.rawChange
26960
- .pipe(tap$1((v) => (this.invalid = v.length === 0)))
26961
- .subscribe();
26962
- this.rawChange.next(this.items);
26963
- }
26964
- ngOnDestroy() {
26965
- this.subscription.unsubscribe();
26966
- }
26967
- 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 }); }
26968
- 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"] }] }); }
26969
- }
26970
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChipsInputComponent, decorators: [{
26971
- type: Component,
26972
- 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"] }]
26973
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.TranslateService }], propDecorators: { url: [{
26974
- type: Input
26975
- }], placeholder: [{
26976
- type: Input
26977
- }], selectedItems: [{
26978
- type: Input
26979
- }], required: [{
26980
- type: Input
26981
- }], loadOnce: [{
26982
- type: Input
26983
- }], autocompleteItems: [{
26984
- type: Input
26985
- }], itemsChange: [{
26986
- type: Output
26987
- }] } });
26988
-
26989
26488
  class CopyTextButtonComponent {
26990
26489
  constructor() {
26991
26490
  this.displayText = true;
@@ -27663,8 +27162,8 @@ class UrlInputComponent {
27663
27162
  this.inputValue = '';
27664
27163
  }
27665
27164
  ngOnChanges(changes) {
27666
- if (changes['value']) {
27667
- this.inputValue = changes['value'].currentValue;
27165
+ if (changes['resetUrlOnChange']) {
27166
+ this.inputValue = '';
27668
27167
  }
27669
27168
  }
27670
27169
  handleInput(event) {
@@ -27693,7 +27192,7 @@ class UrlInputComponent {
27693
27192
  }
27694
27193
  }
27695
27194
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UrlInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
27696
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UrlInputComponent, isStandalone: true, selector: "gn-ui-url-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", disabled: "disabled", showValidateButton: "showValidateButton" }, outputs: { valueChange: "valueChange", uploadClick: "uploadClick" }, providers: [
27195
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UrlInputComponent, isStandalone: true, selector: "gn-ui-url-input", inputs: { value: "value", extraClass: "extraClass", placeholder: "placeholder", disabled: "disabled", showValidateButton: "showValidateButton", resetUrlOnChange: "resetUrlOnChange" }, outputs: { valueChange: "valueChange", uploadClick: "uploadClick" }, providers: [
27697
27196
  provideIcons({ iconoirLink, iconoirArrowUp }),
27698
27197
  provideNgIconsConfig({
27699
27198
  size: '1.5em',
@@ -27718,6 +27217,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
27718
27217
  type: Input
27719
27218
  }], showValidateButton: [{
27720
27219
  type: Input
27220
+ }], resetUrlOnChange: [{
27221
+ type: Input
27721
27222
  }], valueChange: [{
27722
27223
  type: Output
27723
27224
  }], uploadClick: [{
@@ -27783,7 +27284,7 @@ class FileInputComponent {
27783
27284
  provideNgIconsConfig({
27784
27285
  size: '1.5em',
27785
27286
  }),
27786
- ], ngImport: i0, template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { 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"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27287
+ ], ngImport: i0, template: "<div class=\"w-full flex flex-col gap-[16px]\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !isUploadInProgress && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"isUploadInProgress || disabled ? null : 0\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n (keydown.enter)=\"fileInput.click()\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirCloudUpload\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"isUploadInProgress\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">\n {{ getPrimaryText() | translate: { sizeMB: maxSizeMB.toFixed(0) } }}\n </p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-primary cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <p class=\"w-full flex flex-row items-center justify-stretch gap-[16px]\">\n <span class=\"border-b border-gray-300 grow\"></span>\n <span class=\"text-sm font-medium text-gray-500 or-input-url\" translate>\n input.file.orInputUrl</span\n >\n <span class=\"border-b border-gray-300 grow\"></span>\n </p>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"isUploadInProgress || disabled\"\n (uploadClick)=\"handleUrlChange($event)\"\n ></gn-ui-url-input>\n </label>\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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { 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", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27787
27288
  }
27788
27289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileInputComponent, decorators: [{
27789
27290
  type: Component,
@@ -28065,7 +27566,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28065
27566
  class UiInputsModule {
28066
27567
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
28067
27568
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiInputsModule, declarations: [DragAndDropFileInputComponent,
28068
- ChipsInputComponent,
28069
27569
  DropdownMultiselectComponent,
28070
27570
  ViewportIntersectorComponent,
28071
27571
  CheckboxComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
@@ -28093,7 +27593,6 @@ class UiInputsModule {
28093
27593
  ButtonComponent,
28094
27594
  DragAndDropFileInputComponent,
28095
27595
  TextAreaComponent,
28096
- ChipsInputComponent,
28097
27596
  DropdownMultiselectComponent,
28098
27597
  ViewportIntersectorComponent,
28099
27598
  CheckToggleComponent,
@@ -28138,7 +27637,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28138
27637
  args: [{
28139
27638
  declarations: [
28140
27639
  DragAndDropFileInputComponent,
28141
- ChipsInputComponent,
28142
27640
  DropdownMultiselectComponent,
28143
27641
  ViewportIntersectorComponent,
28144
27642
  CheckboxComponent,
@@ -28184,7 +27682,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28184
27682
  ButtonComponent,
28185
27683
  DragAndDropFileInputComponent,
28186
27684
  TextAreaComponent,
28187
- ChipsInputComponent,
28188
27685
  DropdownMultiselectComponent,
28189
27686
  ViewportIntersectorComponent,
28190
27687
  CheckToggleComponent,
@@ -28850,7 +28347,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28850
28347
 
28851
28348
  class MarkdownParserComponent {
28852
28349
  get parsedMarkdown() {
28853
- return marked.parse(this.textContent);
28350
+ return marked.parse(this.textContent ?? '');
28854
28351
  }
28855
28352
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28856
28353
  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 }); }
@@ -28936,7 +28433,15 @@ class MetadataQualityComponent {
28936
28433
  }
28937
28434
  }
28938
28435
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28939
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataQualityComponent, isStandalone: true, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "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: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataQualityComponent, isStandalone: true, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, providers: [
28437
+ provideIcons({
28438
+ matInfoOutline,
28439
+ }),
28440
+ provideNgIconsConfig({
28441
+ size: '1.2em',
28442
+ strokeWidth: '1.5px',
28443
+ }),
28444
+ ], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <div\n class=\"flex items-center\"\n [class]=\"smaller ? 'leading-[8px] min-w-[120px]' : 'min-w-[200px]'\"\n >\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n </div>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "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: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28940
28445
  }
28941
28446
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, decorators: [{
28942
28447
  type: Component,
@@ -28946,7 +28451,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28946
28451
  ProgressBarComponent,
28947
28452
  MetadataQualityItemComponent,
28948
28453
  TranslateModule,
28949
- ], template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <gn-ui-popover [content]=\"popoverItems\" theme=\"light-border\">\n <div class=\"min-w-[200px]\" [class]=\"smaller ? 'leading-[8px]' : ''\">\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n type=\"primary\"\n ></gn-ui-progress-bar>\n </div>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
28454
+ NgIcon,
28455
+ ], providers: [
28456
+ provideIcons({
28457
+ matInfoOutline,
28458
+ }),
28459
+ provideNgIconsConfig({
28460
+ size: '1.2em',
28461
+ strokeWidth: '1.5px',
28462
+ }),
28463
+ ], template: "<div *ngIf=\"metadataQualityDisplay\" class=\"mb-6 metadata-quality\">\n <div\n class=\"flex items-center\"\n [class]=\"smaller ? 'leading-[8px] min-w-[120px]' : 'min-w-[200px]'\"\n >\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n </div>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
28950
28464
  }], propDecorators: { metadata: [{
28951
28465
  type: Input
28952
28466
  }], smaller: [{
@@ -28961,11 +28475,11 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
28961
28475
  this.elementRef = elementRef;
28962
28476
  }
28963
28477
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
28964
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[\n record.overviews?.[0]?.url?.toString(),\n organization?.logoUrl?.toString(),\n ]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n whitoutStyles=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <ng-icon\n *ngIf=\"isDownloadable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matCloudDownloadOutline\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"isViewable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matMapOutline\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: i2$2.NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28478
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[\n record.overviews?.[0]?.url?.toString(),\n organization?.logoUrl?.toString(),\n ]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n whitoutStyles=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <ng-icon\n *ngIf=\"isDownloadable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matCloudDownloadOutline\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"isViewable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matMapOutline\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: i2$2.NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28965
28479
  }
28966
28480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
28967
28481
  type: Component,
28968
- args: [{ selector: 'gn-ui-record-preview-row', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[\n record.overviews?.[0]?.url?.toString(),\n organization?.logoUrl?.toString(),\n ]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n whitoutStyles=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <ng-icon\n *ngIf=\"isDownloadable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matCloudDownloadOutline\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"isViewable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matMapOutline\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"] }]
28482
+ args: [{ selector: 'gn-ui-record-preview-row', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[\n record.overviews?.[0]?.url?.toString(),\n organization?.logoUrl?.toString(),\n ]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n whitoutStyles=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <ng-icon\n *ngIf=\"isDownloadable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matCloudDownloadOutline\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"isViewable\"\n class=\"text-primary opacity-45 mx-1\"\n name=\"matMapOutline\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"] }]
28969
28483
  }], ctorParameters: () => [{ type: i0.ElementRef }] });
28970
28484
 
28971
28485
  class RecordPreviewTextComponent extends RecordPreviewComponent {
@@ -29438,11 +28952,14 @@ class ImageInputComponent {
29438
28952
  this.altTextChange = new EventEmitter();
29439
28953
  this.dragFilesOver = false;
29440
28954
  this.showUrlInput = false;
29441
- this.downloadError = false;
28955
+ this.imageFileError = this.uploadError;
29442
28956
  this.showAltTextInput = false;
29443
28957
  }
28958
+ getIsActionBlocked() {
28959
+ return this.isUploadInProgress || this.disabled;
28960
+ }
29444
28961
  getPrimaryText() {
29445
- if (this.uploadError) {
28962
+ if (this.imageFileError) {
29446
28963
  return marker('input.image.uploadErrorLabel');
29447
28964
  }
29448
28965
  if (this.uploadProgress) {
@@ -29451,8 +28968,8 @@ class ImageInputComponent {
29451
28968
  return marker('input.image.selectFileLabel');
29452
28969
  }
29453
28970
  getSecondaryText() {
29454
- if (this.uploadError) {
29455
- return marker('input.image.uploadErrorRetry');
28971
+ if (this.imageFileError) {
28972
+ return '\u00A0'; // (only to keep same spacing, next step is to handle "Retry")
29456
28973
  }
29457
28974
  if (this.uploadProgress) {
29458
28975
  return marker('input.image.uploadProgressCancel');
@@ -29466,26 +28983,33 @@ class ImageInputComponent {
29466
28983
  }
29467
28984
  }
29468
28985
  handleDropFiles(files) {
29469
- if (!this.showUrlInput) {
29470
- const validFiles = this.filterTypeImage(files);
29471
- if (validFiles.length > 0) {
29472
- this.resizeAndEmit(validFiles[0]);
29473
- }
28986
+ this.resetErrors();
28987
+ const validFiles = this.filterTypeImage(files);
28988
+ if (validFiles.length > 0) {
28989
+ this.showUrlInput = false;
28990
+ this.resizeAndEmit(validFiles[0]);
28991
+ }
28992
+ else {
28993
+ this.imageFileError = true;
29474
28994
  }
29475
28995
  }
29476
28996
  handleFileInput(event) {
28997
+ this.resetErrors();
29477
28998
  const inputFiles = Array.from(event.target.files);
29478
28999
  const validFiles = this.filterTypeImage(inputFiles);
29479
29000
  if (validFiles.length > 0) {
29480
29001
  this.resizeAndEmit(validFiles[0]);
29481
29002
  }
29003
+ else {
29004
+ this.imageFileError = true;
29005
+ }
29482
29006
  }
29483
29007
  displayUrlInput() {
29484
29008
  this.uploadCancel.emit();
29485
29009
  this.showUrlInput = true;
29486
29010
  }
29487
29011
  async downloadUrl(url) {
29488
- this.downloadError = false;
29012
+ this.resetErrors();
29489
29013
  const name = url.split('/').pop();
29490
29014
  try {
29491
29015
  const response = await firstValueFrom(this.http.head(url, { observe: 'response' }));
@@ -29499,7 +29023,7 @@ class ImageInputComponent {
29499
29023
  this.fileChange.emit(file);
29500
29024
  },
29501
29025
  error: () => {
29502
- this.downloadError = true;
29026
+ this.imageFileError = true;
29503
29027
  this.cd.markForCheck();
29504
29028
  this.urlChange.emit(url);
29505
29029
  },
@@ -29507,36 +29031,27 @@ class ImageInputComponent {
29507
29031
  }
29508
29032
  }
29509
29033
  catch {
29510
- this.downloadError = true;
29034
+ this.imageFileError = true;
29511
29035
  this.cd.markForCheck();
29512
29036
  return;
29513
29037
  }
29514
29038
  }
29515
29039
  handleSecondaryTextClick(event) {
29516
- if (this.uploadError) {
29517
- this.handleRetry();
29518
- }
29519
- else if (this.uploadProgress) {
29520
- this.handleCancel();
29040
+ if (this.uploadProgress) {
29041
+ this.handleCancelUpload();
29521
29042
  event.preventDefault();
29522
29043
  }
29523
29044
  }
29524
- handleCancel() {
29045
+ handleCancelUpload() {
29525
29046
  this.uploadCancel.emit();
29526
29047
  }
29527
- handleRetry() {
29528
- switch (this.lastUploadType) {
29529
- case 'file':
29530
- this.fileChange.emit(this.lastUploadContent);
29531
- break;
29532
- case 'url':
29533
- this.urlChange.emit(this.lastUploadContent);
29534
- break;
29535
- }
29536
- }
29537
29048
  handleDelete() {
29538
29049
  this.delete.emit();
29539
29050
  }
29051
+ resetErrors() {
29052
+ this.imageFileError = false;
29053
+ this.uploadError = false;
29054
+ }
29540
29055
  toggleAltTextInput() {
29541
29056
  this.showAltTextInput = !this.showAltTextInput;
29542
29057
  }
@@ -29568,7 +29083,7 @@ class ImageInputComponent {
29568
29083
  provideNgIconsConfig({
29569
29084
  size: '1.5rem',
29570
29085
  }),
29571
- ], ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: ["imageUrl"], outputs: ["isPlaceholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29086
+ ], ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button\n type=\"gray\"\n (buttonClick)=\"handleDelete()\"\n data-cy=\"delete-image\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !getIsActionBlocked(),\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"getIsActionBlocked() ? null : 0\"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !imageFileError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !imageFileError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"imageFileError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n data-cy=\"imgErrorIcon\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\" data-cy=\"imgInputMsgPrimary\">\n {{ getPrimaryText() | translate }}\n </p>\n <p\n class=\"text-sm\"\n data-cy=\"imgInputMsgSecondary\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n accept=\"image/*\"\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n data-cy=\"imgUrlBtn\"\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n data-cy=\"imgUrlInput\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\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.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: ["imageUrl"], outputs: ["isPlaceholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
29572
29087
  }
29573
29088
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
29574
29089
  type: Component,
@@ -29594,7 +29109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
29594
29109
  provideNgIconsConfig({
29595
29110
  size: '1.5rem',
29596
29111
  }),
29597
- ], template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"handleDelete()\">\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500':\n !isUploadInProgress && !uploadError && !showUrlInput && !disabled,\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"\n isUploadInProgress || uploadError || showUrlInput || disabled ? null : 0\n \"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !uploadError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !uploadError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"uploadError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n isUploadInProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"\n showUrlInput || isUploadInProgress || uploadError || disabled\n \"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
29112
+ ], template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-80 h-full flex flex-col gap-2\">\n <gn-ui-image-overlay-preview class=\"h-48\" [imageUrl]=\"previewUrl\">\n </gn-ui-image-overlay-preview>\n <gn-ui-text-input\n *ngIf=\"showAltTextInput\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText ?? ''\"\n (valueChange)=\"handleAltTextChange($event)\"\n extraClass=\"gn-ui-editor-textarea\"\n [disabled]=\"true\"\n ></gn-ui-text-input>\n <div class=\"flex flex-row gap-2 mt-2\">\n <gn-ui-button\n type=\"gray\"\n (buttonClick)=\"handleDelete()\"\n data-cy=\"delete-image\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirBin\"></ng-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n type=\"gray\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"me-1 text-primary\"></ng-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"flex-1 border-2 border-dashed rounded-lg p-6 flex flex-col items-center justify-center gap-4 transition-colors duration-100\"\n [ngClass]=\"{\n 'border-primary-lighter bg-primary-white': dragFilesOver,\n 'border-gray-300': !dragFilesOver,\n 'cursor-pointer hover:border-gray-500': !getIsActionBlocked(),\n 'cursor-not-allowed': disabled,\n }\"\n [attr.tabindex]=\"getIsActionBlocked() ? null : 0\"\n (keydown.enter)=\"fileInput.click()\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div\n class=\"w-14 h-14 rounded-md bg-gray-50 grid\"\n *ngIf=\"!isUploadInProgress && !imageFileError\"\n >\n <ng-icon\n *ngIf=\"!dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirMediaImage\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"dragFilesOver\"\n class=\"place-self-center text-primary\"\n name=\"iconoirFramePlusIn\"\n ></ng-icon>\n </div>\n\n <div\n *ngIf=\"isUploadInProgress && !imageFileError\"\n class=\"w-14 h-14 grid items-center justify-center relative\"\n >\n <div class=\"text-gray-100 absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"100\"\n ></mat-progress-spinner>\n </div>\n <div class=\"text-primary absolute\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n mode=\"determinate\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n </div>\n <span class=\"text-sm text-main font-bold\">{{ uploadProgress }}%</span>\n </div>\n\n <div class=\"w-14 h-14 rounded-md bg-gray-50 grid\" *ngIf=\"imageFileError\">\n <ng-icon\n name=\"iconoirMediaImageXmark\"\n class=\"place-self-center text-rose-500\"\n data-cy=\"imgErrorIcon\"\n ></ng-icon>\n </div>\n\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\" data-cy=\"imgInputMsgPrimary\">\n {{ getPrimaryText() | translate }}\n </p>\n <p\n class=\"text-sm\"\n data-cy=\"imgInputMsgSecondary\"\n [class]=\"\n isUploadInProgress\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick($event)\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n #fileInput\n accept=\"image/*\"\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n />\n </label>\n\n <div *ngIf=\"!showUrlInput\" class=\"flex-none mt-2\">\n <gn-ui-button\n data-cy=\"imgUrlBtn\"\n (buttonClick)=\"displayUrlInput()\"\n type=\"gray\"\n [disabled]=\"disabled\"\n [extraClass]=\"disabled && 'cursor-not-allowed'\"\n >\n <ng-icon class=\"me-1 text-primary\" name=\"iconoirLink\"></ng-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n\n <gn-ui-url-input\n *ngIf=\"showUrlInput\"\n class=\"mt-3.5\"\n data-cy=\"imgUrlInput\"\n (uploadClick)=\"downloadUrl($event)\"\n [disabled]=\"isUploadInProgress || disabled\"\n >\n </gn-ui-url-input>\n </div>\n</ng-template>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
29598
29113
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }], propDecorators: { maxSizeMB: [{
29599
29114
  type: Input
29600
29115
  }], previewUrl: [{
@@ -30226,6 +29741,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30226
29741
  type: Input
30227
29742
  }] } });
30228
29743
 
29744
+ class ApplicationBannerComponent {
29745
+ constructor() {
29746
+ this.closeEnabled = false;
29747
+ this.extraClass = '';
29748
+ this.icon = '';
29749
+ this.msgClass = '';
29750
+ this.bannerOpen = true;
29751
+ }
29752
+ set type(value) {
29753
+ switch (value) {
29754
+ case 'primary':
29755
+ this.msgClass = 'bg-primary-darkest border-primary text-white';
29756
+ this.icon = 'matWarning';
29757
+ break;
29758
+ case 'light':
29759
+ this.msgClass =
29760
+ 'bg-primary-opacity-10 border-primary-lightest text-black';
29761
+ this.icon = 'matInfoOutline';
29762
+ break;
29763
+ case 'secondary':
29764
+ default:
29765
+ this.msgClass = 'bg-primary-opacity-50 border-primary-darker text-black';
29766
+ this.icon = 'matWarningAmberOutline';
29767
+ break;
29768
+ }
29769
+ }
29770
+ get classList() {
29771
+ if (this.message.length > 200) {
29772
+ return `${this.msgClass} ${this.extraClass} overflow-y-scroll items-start`;
29773
+ }
29774
+ return `${this.msgClass} ${this.extraClass} items-center`;
29775
+ }
29776
+ closeMessage() {
29777
+ this.bannerOpen = false;
29778
+ }
29779
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29780
+ 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: [
29781
+ provideIcons({
29782
+ matWarningAmberOutline,
29783
+ matInfoOutline,
29784
+ matCloseOutline,
29785
+ matWarning,
29786
+ }),
29787
+ provideNgIconsConfig({ size: '1.5em' }),
29788
+ ], 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 }); }
29789
+ }
29790
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, decorators: [{
29791
+ type: Component,
29792
+ args: [{ selector: 'gn-ui-application-banner', standalone: true, imports: [CommonModule, NgIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
29793
+ provideIcons({
29794
+ matWarningAmberOutline,
29795
+ matInfoOutline,
29796
+ matCloseOutline,
29797
+ matWarning,
29798
+ }),
29799
+ provideNgIconsConfig({ size: '1.5em' }),
29800
+ ], 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" }]
29801
+ }], propDecorators: { message: [{
29802
+ type: Input
29803
+ }], title: [{
29804
+ type: Input
29805
+ }], closeEnabled: [{
29806
+ type: Input
29807
+ }], extraClass: [{
29808
+ type: Input
29809
+ }], icon: [{
29810
+ type: Input
29811
+ }], type: [{
29812
+ type: Input
29813
+ }] } });
29814
+
30229
29815
  class UiElementsModule {
30230
29816
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30231
29817
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
@@ -30243,11 +29829,13 @@ class UiElementsModule {
30243
29829
  BadgeComponent,
30244
29830
  MaxLinesComponent,
30245
29831
  TextInputComponent,
30246
- ImageInputComponent], exports: [ThumbnailComponent,
29832
+ ImageInputComponent,
29833
+ ApplicationBannerComponent], exports: [ThumbnailComponent,
30247
29834
  AvatarComponent,
30248
29835
  UserPreviewComponent,
30249
29836
  MarkdownParserComponent,
30250
- ImageInputComponent] }); }
29837
+ ImageInputComponent,
29838
+ ApplicationBannerComponent] }); }
30251
29839
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
30252
29840
  provideNgIconsConfig({
30253
29841
  size: '1.5em',
@@ -30266,7 +29854,8 @@ class UiElementsModule {
30266
29854
  BadgeComponent,
30267
29855
  MaxLinesComponent,
30268
29856
  TextInputComponent,
30269
- ImageInputComponent] }); }
29857
+ ImageInputComponent,
29858
+ ApplicationBannerComponent] }); }
30270
29859
  }
30271
29860
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
30272
29861
  type: NgModule,
@@ -30290,6 +29879,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30290
29879
  MaxLinesComponent,
30291
29880
  TextInputComponent,
30292
29881
  ImageInputComponent,
29882
+ ApplicationBannerComponent,
30293
29883
  ],
30294
29884
  providers: [
30295
29885
  provideNgIconsConfig({
@@ -30303,6 +29893,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30303
29893
  UserPreviewComponent,
30304
29894
  MarkdownParserComponent,
30305
29895
  ImageInputComponent,
29896
+ ApplicationBannerComponent,
30306
29897
  ],
30307
29898
  }]
30308
29899
  }] });
@@ -30504,6 +30095,7 @@ class ActionMenuComponent {
30504
30095
  this.duplicate = new EventEmitter();
30505
30096
  this.delete = new EventEmitter();
30506
30097
  this.closeActionMenu = new EventEmitter();
30098
+ this.rollback = new EventEmitter();
30507
30099
  this.sectionDisplayed = 'mainMenu';
30508
30100
  }
30509
30101
  openMenu() {
@@ -30514,11 +30106,16 @@ class ActionMenuComponent {
30514
30106
  this.cdr.markForCheck();
30515
30107
  }
30516
30108
  displayDeleteMenu() {
30517
- this.sectionDisplayed = 'deleteMenu';
30109
+ if (this.isDraftPage) {
30110
+ this.sectionDisplayed = 'rollbackMenu';
30111
+ }
30112
+ else {
30113
+ this.sectionDisplayed = 'deleteMenu';
30114
+ }
30518
30115
  this.cdr.markForCheck();
30519
30116
  }
30520
30117
  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 }); }
30521
- 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"] }] }); }
30118
+ 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"] }] }); }
30522
30119
  }
30523
30120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionMenuComponent, decorators: [{
30524
30121
  type: Component,
@@ -30529,17 +30126,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30529
30126
  MatDialogModule,
30530
30127
  ConfirmationDialogComponent,
30531
30128
  TranslateModule,
30532
- ], 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" }]
30129
+ ], 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" }]
30533
30130
  }], ctorParameters: () => [{ type: i1$b.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { canDuplicate: [{
30534
30131
  type: Input
30535
30132
  }], canDelete: [{
30536
30133
  type: Input
30134
+ }], isDraftPage: [{
30135
+ type: Input
30537
30136
  }], duplicate: [{
30538
30137
  type: Output
30539
30138
  }], delete: [{
30540
30139
  type: Output
30541
30140
  }], closeActionMenu: [{
30542
30141
  type: Output
30142
+ }], rollback: [{
30143
+ type: Output
30543
30144
  }], trigger: [{
30544
30145
  type: ViewChild,
30545
30146
  args: [MatMenuTrigger]
@@ -30564,6 +30165,7 @@ class ResultsTableComponent {
30564
30165
  this.recordClick = new EventEmitter();
30565
30166
  this.duplicateRecord = new EventEmitter();
30566
30167
  this.deleteRecord = new EventEmitter();
30168
+ this.rollbackDraft = new EventEmitter();
30567
30169
  this.recordsSelectedChange = new EventEmitter();
30568
30170
  this.isActionMenuOpen = false;
30569
30171
  }
@@ -30642,6 +30244,10 @@ class ResultsTableComponent {
30642
30244
  this.deleteRecord.emit(item);
30643
30245
  this.closeActionMenu();
30644
30246
  }
30247
+ handleRollback(item) {
30248
+ this.rollbackDraft.emit(item);
30249
+ this.closeActionMenu();
30250
+ }
30645
30251
  setSortBy(col, order) {
30646
30252
  this.sortByChange.emit([col, order]);
30647
30253
  }
@@ -30666,7 +30272,7 @@ class ResultsTableComponent {
30666
30272
  this.recordsSelectedChange.emit([[record], selected]);
30667
30273
  }
30668
30274
  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 }); }
30669
- 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"] }] }); }
30275
+ 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"] }] }); }
30670
30276
  }
30671
30277
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
30672
30278
  type: Component,
@@ -30680,7 +30286,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30680
30286
  ActionMenuComponent,
30681
30287
  NgIconComponent,
30682
30288
  CdkOverlayOrigin,
30683
- ], 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" }]
30289
+ ], 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" }]
30684
30290
  }], ctorParameters: () => [{ type: i1$9.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: DateService }], propDecorators: { records: [{
30685
30291
  type: Input
30686
30292
  }], selectedRecordsIdentifiers: [{
@@ -30705,6 +30311,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30705
30311
  type: Output
30706
30312
  }], deleteRecord: [{
30707
30313
  type: Output
30314
+ }], rollbackDraft: [{
30315
+ type: Output
30708
30316
  }], recordsSelectedChange: [{
30709
30317
  type: Output
30710
30318
  }], actionMenuButtons: [{
@@ -31718,8 +31326,11 @@ class FuzzySearchComponent {
31718
31326
  this.searchService = searchService;
31719
31327
  this.recordsRepository = recordsRepository;
31720
31328
  this.autoFocus = false;
31329
+ this.forceTrackPosition = false;
31330
+ this.enterButton = false;
31721
31331
  this.itemSelected = new EventEmitter();
31722
31332
  this.inputSubmitted = new EventEmitter();
31333
+ this.isSearchActive = new EventEmitter();
31723
31334
  this.displayWithFn = (record) => record.title;
31724
31335
  this.autoCompleteAction = (query) => this.recordsRepository
31725
31336
  .fuzzySearch(query)
@@ -31759,21 +31370,30 @@ class FuzzySearchComponent {
31759
31370
  this.searchService.updateFilters({ any: '' });
31760
31371
  }
31761
31372
  }
31373
+ handleSearchActive(event) {
31374
+ this.isSearchActive.emit(event);
31375
+ }
31762
31376
  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 }); }
31763
- 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 }); }
31377
+ 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", enterButton: "enterButton" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", isSearchActive: "isSearchActive" }, 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 (isSearchActive)=\"handleSearchActive($event)\"\n [value]=\"searchInputValue$ | async\"\n [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n [forceTrackPosition]=\"forceTrackPosition\"\n [enterButton]=\"enterButton\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31764
31378
  }
31765
31379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FuzzySearchComponent, decorators: [{
31766
31380
  type: Component,
31767
- 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" }]
31381
+ 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 (isSearchActive)=\"handleSearchActive($event)\"\n [value]=\"searchInputValue$ | async\"\n [preventCompleteOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n [allowSubmit]=\"true\"\n [forceTrackPosition]=\"forceTrackPosition\"\n [enterButton]=\"enterButton\"\n></gn-ui-autocomplete>\n" }]
31768
31382
  }], ctorParameters: () => [{ type: SearchFacade }, { type: SearchService }, { type: RecordsRepositoryInterface }], propDecorators: { autocomplete: [{
31769
31383
  type: ViewChild,
31770
31384
  args: [AutocompleteComponent]
31771
31385
  }], autoFocus: [{
31772
31386
  type: Input
31387
+ }], forceTrackPosition: [{
31388
+ type: Input
31389
+ }], enterButton: [{
31390
+ type: Input
31773
31391
  }], itemSelected: [{
31774
31392
  type: Output
31775
31393
  }], inputSubmitted: [{
31776
31394
  type: Output
31395
+ }], isSearchActive: [{
31396
+ type: Output
31777
31397
  }] } });
31778
31398
 
31779
31399
  class RecordsMetricsComponent {
@@ -32961,7 +32581,7 @@ class ResultsTableContainerComponent {
32961
32581
  this.subscription.unsubscribe();
32962
32582
  }
32963
32583
  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 }); }
32964
- 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"] }] }); }
32584
+ 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"] }] }); }
32965
32585
  }
32966
32586
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
32967
32587
  type: Component,
@@ -34832,7 +34452,7 @@ class AddLayerFromCatalogComponent {
34832
34452
  ADDLAYER: new ResultsLayoutConfigItem(AddLayerRecordPreviewComponent, 'py-2', '', 'flex flex-col divide-y divide-y-grey-50'),
34833
34453
  },
34834
34454
  },
34835
- ], 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 }); }
34455
+ ], 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", "enterButton"], outputs: ["itemSelected", "inputSubmitted", "isSearchActive"] }, { kind: "component", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: ["metadataQualityDisplay", "layout", "showMore"], outputs: ["mdSelect"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34836
34456
  }
34837
34457
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddLayerFromCatalogComponent, decorators: [{
34838
34458
  type: Component,
@@ -35110,6 +34730,9 @@ const loadFullMetadata = createAction('[Metadata view] Load full metadata', prop
35110
34730
  const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
35111
34731
  const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
35112
34732
  const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
34733
+ const loadFeatureCatalog = createAction("[Metadata view] Load metadata's feature catalog", props());
34734
+ const loadFeatureCatalogSuccess = createAction('[Metadata view] Load metadata feature catalog success', props());
34735
+ const loadFeatureCatalogFailure = createAction('[Metadata view] Load metadata feature catalog failure', props());
35113
34736
  const closeMetadata = createAction('[Metadata view] close');
35114
34737
  /*
35115
34738
  Related actions
@@ -35135,6 +34758,9 @@ var mdview_actions = /*#__PURE__*/Object.freeze({
35135
34758
  addUserFeedbackFailure: addUserFeedbackFailure,
35136
34759
  addUserFeedbackSuccess: addUserFeedbackSuccess,
35137
34760
  closeMetadata: closeMetadata,
34761
+ loadFeatureCatalog: loadFeatureCatalog,
34762
+ loadFeatureCatalogFailure: loadFeatureCatalogFailure,
34763
+ loadFeatureCatalogSuccess: loadFeatureCatalogSuccess,
35138
34764
  loadFullMetadata: loadFullMetadata,
35139
34765
  loadFullMetadataFailure: loadFullMetadataFailure,
35140
34766
  loadFullMetadataSuccess: loadFullMetadataSuccess,
@@ -35152,6 +34778,8 @@ const initialMetadataViewState = {
35152
34778
  loadingFull: false,
35153
34779
  allUserFeedbacksLoading: false,
35154
34780
  addUserFeedbackLoading: false,
34781
+ featureCatalogLoading: false,
34782
+ featureCatalogError: null,
35155
34783
  };
35156
34784
  const metadataViewReducer = createReducer(initialMetadataViewState,
35157
34785
  /*
@@ -35211,6 +34839,22 @@ on(loadUserFeedbacks, (state) => ({
35211
34839
  error: { otherError, notFound },
35212
34840
  addUserFeedbackLoading: false,
35213
34841
  allUserFeedbacksLoading: false,
34842
+ })),
34843
+ /**
34844
+ * FeatureCatalog reducers
34845
+ */
34846
+ on(loadFeatureCatalog, (state) => ({
34847
+ ...state,
34848
+ featureCatalogError: null,
34849
+ featureCatalogLoading: true,
34850
+ })), on(loadFeatureCatalogSuccess, (state, { datasetCatalog }) => ({
34851
+ ...state,
34852
+ featureCatalog: datasetCatalog,
34853
+ featureCatalogLoading: false,
34854
+ })), on(loadFeatureCatalogFailure, (state, { error }) => ({
34855
+ ...state,
34856
+ featureCatalogError: error,
34857
+ featureCatalogLoading: false,
35214
34858
  })));
35215
34859
  function reducer$1(metadataViewState, action) {
35216
34860
  return metadataViewReducer(metadataViewState, action);
@@ -35239,6 +34883,11 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
35239
34883
  const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
35240
34884
  const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
35241
34885
  const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
34886
+ /*
34887
+ Feature Catalog Selectors
34888
+ */
34889
+ const getFeatureCatalog = createSelector(getMdViewState, (state) => state.featureCatalog);
34890
+ const getFeatureCatalogIsLoading = createSelector(getMdViewState, (state) => state.featureCatalogLoading);
35242
34891
 
35243
34892
  class FetchError {
35244
34893
  constructor(type, info, httpStatus = 0) {
@@ -35354,20 +35003,23 @@ function fetchHeaders(url) {
35354
35003
  return parseHeaders(response.headers);
35355
35004
  });
35356
35005
  }
35357
- function fetchDataAsText(url) {
35358
- return useCache(() => sharedFetch(url)
35006
+ function fetchDataAsText(url, cacheActive) {
35007
+ const fetchFactory = () => sharedFetch(url)
35359
35008
  .catch((error) => {
35360
35009
  throw FetchError.corsOrNetwork(error.message);
35361
35010
  })
35362
35011
  .then(async (response) => {
35363
35012
  if (!response.ok) {
35364
- throw FetchError.http(response.status, await response.text());
35013
+ const clonedResponse = response.clone();
35014
+ throw FetchError.http(response.status, await clonedResponse.text());
35365
35015
  }
35366
- return response.text();
35367
- }), url, 'asText');
35016
+ const clonedResponse = response.clone();
35017
+ return clonedResponse.text();
35018
+ });
35019
+ return cacheActive ? useCache(fetchFactory, url, 'asText') : fetchFactory();
35368
35020
  }
35369
- function fetchDataAsArrayBuffer(url) {
35370
- return useCache(() => sharedFetch(url)
35021
+ function fetchDataAsArrayBuffer(url, cacheActive) {
35022
+ const fetchFactory = () => sharedFetch(url)
35371
35023
  .catch((error) => {
35372
35024
  throw FetchError.corsOrNetwork(error.message);
35373
35025
  })
@@ -35377,7 +35029,8 @@ function fetchDataAsArrayBuffer(url) {
35377
35029
  }
35378
35030
  // convert to a numeric array so that we can store the response in cache
35379
35031
  return Array.from(new Uint8Array(await response.arrayBuffer()));
35380
- }), url, 'asArrayBuffer').then((array) => {
35032
+ });
35033
+ return (cacheActive ? useCache(fetchFactory, url, 'asArrayBuffer') : fetchFactory()).then((array) => {
35381
35034
  return new Uint8Array(array).buffer;
35382
35035
  });
35383
35036
  }
@@ -35523,68 +35176,6 @@ function getJsonDataItemsProxy(items) {
35523
35176
  });
35524
35177
  }
35525
35178
 
35526
- class BaseReader {
35527
- constructor(url) {
35528
- this.url = url;
35529
- this.selected = null;
35530
- this.groupedBy = null;
35531
- this.aggregations = null;
35532
- this.filter = null;
35533
- this.sort = null;
35534
- this.startIndex = null;
35535
- this.count = null;
35536
- }
35537
- load() {
35538
- throw new Error('not implemented');
35539
- }
35540
- get properties() {
35541
- throw new Error('not implemented');
35542
- }
35543
- get info() {
35544
- throw new Error('not implemented');
35545
- }
35546
- read() {
35547
- throw new Error('not implemented');
35548
- }
35549
- selectAll() {
35550
- this.groupedBy = null;
35551
- this.aggregations = null;
35552
- this.selected = null;
35553
- this.filter = null;
35554
- this.startIndex = null;
35555
- this.count = null;
35556
- return this;
35557
- }
35558
- select(...selectedFields) {
35559
- this.selected = selectedFields;
35560
- this.aggregations = null; // clear aggregations & groups when selecting fields
35561
- this.groupedBy = null;
35562
- return this;
35563
- }
35564
- groupBy(...groupBy) {
35565
- this.groupedBy = groupBy;
35566
- this.selected = null; // clear normal field selection when aggregating
35567
- return this;
35568
- }
35569
- aggregate(...aggregations) {
35570
- this.aggregations = aggregations;
35571
- return this;
35572
- }
35573
- where(filter) {
35574
- this.filter = filter;
35575
- return this;
35576
- }
35577
- orderBy(...fieldSorts) {
35578
- this.sort = fieldSorts;
35579
- return this;
35580
- }
35581
- limit(startIndex, count) {
35582
- this.startIndex = startIndex;
35583
- this.count = count;
35584
- return this;
35585
- }
35586
- }
35587
-
35588
35179
  function filterToSql(filter) {
35589
35180
  const operator = filter[0];
35590
35181
  const args = filter.slice(1);
@@ -35678,7 +35269,80 @@ function generateSqlQuery(selected = null, filter = null, sort = null, startInde
35678
35269
  return sqlSelect + sqlFrom + sqlGroupBy + sqlOrderBy + sqlWhere + sqlLimit;
35679
35270
  }
35680
35271
 
35681
- class BaseFileReader extends BaseReader {
35272
+ class BaseReader {
35273
+ constructor(url) {
35274
+ this.url = url;
35275
+ this.selected = null;
35276
+ this.groupedBy = null;
35277
+ this.aggregations = null;
35278
+ this.filter = null;
35279
+ this.sort = null;
35280
+ this.startIndex = null;
35281
+ this.count = null;
35282
+ }
35283
+ load() {
35284
+ throw new Error('not implemented');
35285
+ }
35286
+ get properties() {
35287
+ throw new Error('not implemented');
35288
+ }
35289
+ get info() {
35290
+ throw new Error('not implemented');
35291
+ }
35292
+ read() {
35293
+ throw new Error('not implemented');
35294
+ }
35295
+ selectAll() {
35296
+ this.groupedBy = null;
35297
+ this.aggregations = null;
35298
+ this.selected = null;
35299
+ this.filter = null;
35300
+ this.startIndex = null;
35301
+ this.count = null;
35302
+ return this;
35303
+ }
35304
+ select(...selectedFields) {
35305
+ this.selected = selectedFields;
35306
+ this.aggregations = null; // clear aggregations & groups when selecting fields
35307
+ this.groupedBy = null;
35308
+ return this;
35309
+ }
35310
+ groupBy(...groupBy) {
35311
+ this.groupedBy = groupBy;
35312
+ this.selected = null; // clear normal field selection when aggregating
35313
+ return this;
35314
+ }
35315
+ aggregate(...aggregations) {
35316
+ this.aggregations = aggregations;
35317
+ return this;
35318
+ }
35319
+ where(filter) {
35320
+ this.filter = filter;
35321
+ return this;
35322
+ }
35323
+ orderBy(...fieldSorts) {
35324
+ this.sort = fieldSorts;
35325
+ return this;
35326
+ }
35327
+ limit(startIndex, count) {
35328
+ this.startIndex = startIndex;
35329
+ this.count = count;
35330
+ return this;
35331
+ }
35332
+ }
35333
+
35334
+ class BaseCacheReader extends BaseReader {
35335
+ constructor(url, cacheActive = true) {
35336
+ super(url);
35337
+ this.url = url;
35338
+ this.cacheActive = cacheActive;
35339
+ }
35340
+ setCacheActive(value) {
35341
+ this.cacheActive = value;
35342
+ }
35343
+ }
35344
+
35345
+ class BaseFileReader extends BaseCacheReader {
35682
35346
  getData() {
35683
35347
  throw new Error('not implemented');
35684
35348
  }
@@ -35742,7 +35406,7 @@ function parseCsv(text) {
35742
35406
  }
35743
35407
  class CsvReader extends BaseFileReader {
35744
35408
  getData() {
35745
- return fetchDataAsText(this.url).then(parseCsv);
35409
+ return fetchDataAsText(this.url, this.cacheActive).then(parseCsv);
35746
35410
  }
35747
35411
  }
35748
35412
 
@@ -35759,7 +35423,7 @@ function parseJson(text) {
35759
35423
  }
35760
35424
  class JsonReader extends BaseFileReader {
35761
35425
  getData() {
35762
- return fetchDataAsText(this.url).then(parseJson);
35426
+ return fetchDataAsText(this.url, this.cacheActive).then(parseJson);
35763
35427
  }
35764
35428
  }
35765
35429
 
@@ -35778,7 +35442,7 @@ function parseGeojson(text) {
35778
35442
  }
35779
35443
  class GeojsonReader extends BaseFileReader {
35780
35444
  getData() {
35781
- return fetchDataAsText(this.url).then(parseGeojson);
35445
+ return fetchDataAsText(this.url, this.cacheActive).then(parseGeojson);
35782
35446
  }
35783
35447
  }
35784
35448
 
@@ -35800,7 +35464,7 @@ function parseExcel(buffer) {
35800
35464
  }
35801
35465
  class ExcelReader extends BaseFileReader {
35802
35466
  getData() {
35803
- return fetchDataAsArrayBuffer(this.url).then(parseExcel);
35467
+ return fetchDataAsArrayBuffer(this.url, this.cacheActive).then(parseExcel);
35804
35468
  }
35805
35469
  }
35806
35470
 
@@ -35827,19 +35491,21 @@ function parseGml(text, namespace, version) {
35827
35491
  throw Error("Couldn't retrieve namespace url");
35828
35492
  }
35829
35493
  class GmlReader extends BaseFileReader {
35830
- constructor(url, namespace, version) {
35494
+ constructor(url, namespace, version, cacheActive = true) {
35831
35495
  super(url);
35496
+ this.url = url;
35832
35497
  this.namespace = namespace;
35833
35498
  this.version = version;
35499
+ this.cacheActive = cacheActive;
35834
35500
  }
35835
35501
  getData() {
35836
- return fetchDataAsText(this.url).then((text) => parseGml(text, this.namespace, this.version));
35502
+ return fetchDataAsText(this.url, this.cacheActive).then((text) => parseGml(text, this.namespace, this.version));
35837
35503
  }
35838
35504
  }
35839
35505
 
35840
- class WfsReader extends BaseReader {
35841
- constructor(url, wfsEndpoint, featureTypeName) {
35842
- super(url);
35506
+ class WfsReader extends BaseCacheReader {
35507
+ constructor(url, wfsEndpoint, featureTypeName, cacheActive) {
35508
+ super(url, cacheActive);
35843
35509
  this.endpoint = wfsEndpoint;
35844
35510
  this.featureTypeName = featureTypeName;
35845
35511
  this.version = this.endpoint.getVersion();
@@ -35894,9 +35560,9 @@ class WfsReader extends BaseReader {
35894
35560
  throw new Error('wfs.geojsongml.notsupported');
35895
35561
  }
35896
35562
  }
35897
- getData() {
35898
- if (this.aggregations || this.groupedBy) {
35899
- throw new Error(marker('wfs.aggregations.notsupported'));
35563
+ async getData(aggregation, groupedBy) {
35564
+ if (aggregation || groupedBy) {
35565
+ return { items: await this.getQueryData() };
35900
35566
  }
35901
35567
  const asJson = this.endpoint.supportsJson(this.featureTypeName);
35902
35568
  const attributes = this.selected ?? undefined;
@@ -35916,19 +35582,26 @@ class WfsReader extends BaseReader {
35916
35582
  // Direct update on string url to prevent encoding of +A and +D
35917
35583
  url = `${url}${finalUrl.search ? '&' : ''}SORTBY=${sorts}`;
35918
35584
  }
35919
- return fetchDataAsText(url).then((text) => asJson
35585
+ return fetchDataAsText(url, this.cacheActive).then((text) => asJson
35920
35586
  ? parseGeojson(text)
35921
35587
  : parseGml(text, this.featureTypeName, this.version));
35922
35588
  }
35589
+ async getQueryData() {
35590
+ const items = (await this.getData()).items;
35591
+ const jsonItems = getJsonDataItemsProxy(items);
35592
+ const query = generateSqlQuery(this.selected, this.filter, this.sort, this.startIndex, this.count, this.groupedBy, this.aggregations);
35593
+ const result = await import('alasql').then((module) => module.default(query, [jsonItems]));
35594
+ return result.map(jsonToGeojsonFeature);
35595
+ }
35923
35596
  load() {
35924
35597
  // Nothing to load for Wfs
35925
35598
  }
35926
35599
  async read() {
35927
- return (await this.getData()).items;
35600
+ return (await this.getData(this.aggregations, this.groupedBy)).items;
35928
35601
  }
35929
35602
  }
35930
35603
 
35931
- async function openDataset(url, typeHint, options) {
35604
+ async function openDataset(url, typeHint, options, cacheActive) {
35932
35605
  const fileType = await inferDatasetType(url, typeHint);
35933
35606
  let reader;
35934
35607
  try {
@@ -35952,6 +35625,7 @@ async function openDataset(url, typeHint, options) {
35952
35625
  reader = await WfsReader.createReader(url, options.wfsFeatureType);
35953
35626
  break;
35954
35627
  }
35628
+ reader.setCacheActive(cacheActive);
35955
35629
  reader.load();
35956
35630
  return reader;
35957
35631
  }
@@ -35968,8 +35642,8 @@ async function openDataset(url, typeHint, options) {
35968
35642
  * 2. otherwise, look for a Content-Type header in the response with a supported mime type
35969
35643
  * 3. if no valid mime type was found, look for an explicit file extension in the url (.csv, .geojson etc.)
35970
35644
  */
35971
- async function readDataset(url, typeHint, options) {
35972
- const reader = await openDataset(url, typeHint, options);
35645
+ async function readDataset(url, typeHint, options, cacheActive = true) {
35646
+ const reader = await openDataset(url, typeHint, options, cacheActive);
35973
35647
  try {
35974
35648
  return await reader.read();
35975
35649
  }
@@ -36130,18 +35804,18 @@ class DataService {
36130
35804
  mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
36131
35805
  }));
36132
35806
  }
36133
- readAsGeoJson(link) {
36134
- return this.getDataset(link).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
35807
+ readAsGeoJson(link, cacheActive) {
35808
+ return this.getDataset(link, cacheActive).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
36135
35809
  type: 'FeatureCollection',
36136
35810
  features,
36137
35811
  })));
36138
35812
  }
36139
- getDataset(link) {
35813
+ getDataset(link, cacheActive) {
36140
35814
  if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
36141
35815
  const wfsUrlEndpoint = this.proxy.getProxiedUrl(link.url.toString());
36142
35816
  return from(openDataset(wfsUrlEndpoint, 'wfs', {
36143
35817
  wfsFeatureType: link.name,
36144
- }));
35818
+ }, cacheActive));
36145
35819
  }
36146
35820
  else if (link.type === 'download') {
36147
35821
  const linkProxifiedUrl = this.proxy.getProxiedUrl(link.url.toString());
@@ -36149,18 +35823,18 @@ class DataService {
36149
35823
  const supportedType = SupportedTypes.indexOf(format) > -1
36150
35824
  ? format
36151
35825
  : undefined;
36152
- return from(openDataset(linkProxifiedUrl, supportedType)).pipe();
35826
+ return from(openDataset(linkProxifiedUrl, supportedType, undefined, cacheActive)).pipe();
36153
35827
  }
36154
35828
  else if (link.type === 'service' &&
36155
35829
  link.accessServiceProtocol === 'esriRest') {
36156
35830
  const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
36157
- return from(openDataset(url, 'geojson')).pipe();
35831
+ return from(openDataset(url, 'geojson', undefined, cacheActive)).pipe();
36158
35832
  }
36159
35833
  else if (link.type === 'service' &&
36160
35834
  link.accessServiceProtocol === 'ogcFeatures') {
36161
35835
  return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
36162
35836
  const geojsonUrl = collectionInfo.jsonDownloadLink;
36163
- return openDataset(geojsonUrl, 'geojson');
35837
+ return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
36164
35838
  }), tap$1((url) => {
36165
35839
  if (url === null) {
36166
35840
  throw new Error('wfs.geojsongml.notsupported');
@@ -36559,7 +36233,7 @@ class DataTableComponent {
36559
36233
  }
36560
36234
  }
36561
36235
  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 }); }
36562
- 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 }); }
36236
+ 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]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\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 }); }
36563
36237
  }
36564
36238
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
36565
36239
  type: Component,
@@ -36573,7 +36247,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36573
36247
  LoadingMaskComponent,
36574
36248
  PopupAlertComponent,
36575
36249
  LetDirective,
36576
- ], 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"] }]
36250
+ ], 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]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\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"] }]
36577
36251
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { dataset: [{
36578
36252
  type: Input
36579
36253
  }], activeId: [{
@@ -36725,6 +36399,7 @@ class ChartViewComponent {
36725
36399
  this.dataService = dataService;
36726
36400
  this.changeDetector = changeDetector;
36727
36401
  this.translateService = translateService;
36402
+ this.cacheActive = true;
36728
36403
  this.currentLink$ = new BehaviorSubject(null);
36729
36404
  this.aggregation$ = new BehaviorSubject('sum');
36730
36405
  this.xProperty$ = new BehaviorSubject(undefined);
@@ -36754,7 +36429,7 @@ class ChartViewComponent {
36754
36429
  this.dataset$ = this.currentLink$.pipe(filter((link) => !!link), switchMap$1((link) => {
36755
36430
  this.error = null;
36756
36431
  this.loading = true;
36757
- return this.dataService.getDataset(link).pipe(catchError((error) => {
36432
+ return this.dataService.getDataset(link, this.cacheActive).pipe(catchError((error) => {
36758
36433
  this.handleError(error);
36759
36434
  return EMPTY;
36760
36435
  }));
@@ -36823,7 +36498,7 @@ class ChartViewComponent {
36823
36498
  this.changeDetector.detectChanges();
36824
36499
  }
36825
36500
  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 }); }
36826
- 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 }); }
36501
+ 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 }); }
36827
36502
  }
36828
36503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, decorators: [{
36829
36504
  type: Component,
@@ -36835,7 +36510,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36835
36510
  LoadingMaskComponent,
36836
36511
  PopupAlertComponent,
36837
36512
  ], 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" }]
36838
- }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { link: [{
36513
+ }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
36514
+ type: Input
36515
+ }], link: [{
36839
36516
  type: Input
36840
36517
  }], aggregation: [{
36841
36518
  type: Input
@@ -37008,6 +36685,7 @@ class TableViewComponent {
37008
36685
  constructor(dataService, translateService) {
37009
36686
  this.dataService = dataService;
37010
36687
  this.translateService = translateService;
36688
+ this.cacheActive = true;
37011
36689
  this.currentLink$ = new BehaviorSubject(null);
37012
36690
  this.loading = false;
37013
36691
  this.error = null;
@@ -37025,7 +36703,7 @@ class TableViewComponent {
37025
36703
  }), startWith(undefined), shareReplay(1));
37026
36704
  }
37027
36705
  getDatasetReader(link) {
37028
- return this.dataService.getDataset(link);
36706
+ return this.dataService.getDataset(link, this.cacheActive);
37029
36707
  }
37030
36708
  onTableSelect(event) {
37031
36709
  console.log(event);
@@ -37048,7 +36726,7 @@ class TableViewComponent {
37048
36726
  this.loading = false;
37049
36727
  }
37050
36728
  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 }); }
37051
- 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-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 }); }
36729
+ 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 }); }
37052
36730
  }
37053
36731
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableViewComponent, decorators: [{
37054
36732
  type: Component,
@@ -37059,7 +36737,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37059
36737
  PopupAlertComponent,
37060
36738
  TranslateModule,
37061
36739
  ], 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" }]
37062
- }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { link: [{
36740
+ }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
36741
+ type: Input
36742
+ }], link: [{
37063
36743
  type: Input
37064
36744
  }] } });
37065
36745
 
@@ -37078,7 +36758,15 @@ class MdViewFacade {
37078
36758
  this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
37079
36759
  this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
37080
36760
  this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
36761
+ this.featureCatalog$ = this.store.pipe(select(getFeatureCatalog));
37081
36762
  this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
36763
+ this.isHighUpdateFrequency$ = this.metadata$.pipe(map$1((record) => {
36764
+ if (record.updateFrequency instanceof Object) {
36765
+ return (record.updateFrequency.per === 'day' &&
36766
+ record.updateFrequency.updatedTimes > 1);
36767
+ }
36768
+ return record.updateFrequency === 'continual';
36769
+ }));
37082
36770
  this.error$ = this.store.pipe(select(getMetadataError));
37083
36771
  this.related$ = this.store.pipe(select(getRelated));
37084
36772
  this.chartConfig$ = this.store.pipe(select(getChartConfig));
@@ -37174,6 +36862,11 @@ class MdViewEffects {
37174
36862
  }
37175
36863
  return loadFullMetadataSuccess({ full: record });
37176
36864
  }), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
36865
+ this.loadFeatureCatalog$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), filter(({ full }) => full !== undefined), switchMap$1(({ full }) => this.recordsRepository.getFeatureCatalog(full)), map$1((featureCatalog) => loadFeatureCatalogSuccess({
36866
+ datasetCatalog: featureCatalog,
36867
+ })), catchError((error) => of(loadFeatureCatalogFailure({
36868
+ error: error.message,
36869
+ })))));
37177
36870
  /*
37178
36871
  Related effects
37179
36872
  */
@@ -37759,10 +37452,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37759
37452
  }] } });
37760
37453
 
37761
37454
  class DataViewComponent {
37455
+ set exceedsLimit(value) {
37456
+ this.excludeWfs$.next(value);
37457
+ }
37762
37458
  constructor(mdViewFacade) {
37763
37459
  this.mdViewFacade = mdViewFacade;
37764
37460
  this.displaySource = true;
37765
37461
  this.chartConfig$ = new BehaviorSubject(null);
37462
+ this.cacheActive$ = this.mdViewFacade.isHighUpdateFrequency$.pipe(map$1((highF) => !highF));
37463
+ this.hidePreview = false;
37464
+ this.excludeWfs$ = new BehaviorSubject(false);
37766
37465
  this.compatibleDataLinks$ = combineLatest([
37767
37466
  this.mdViewFacade.dataLinks$,
37768
37467
  this.mdViewFacade.geoDataLinks$,
@@ -37773,7 +37472,7 @@ class DataViewComponent {
37773
37472
  }));
37774
37473
  this.dropdownChoices$ = this.compatibleDataLinks$.pipe(tap$1((links) => {
37775
37474
  if (links.indexOf(this.selectedLink$.value) === -1) {
37776
- this.selectedLink$.next(links[0]);
37475
+ this.selectLink(JSON.stringify(links[0]));
37777
37476
  }
37778
37477
  }), map$1((links) => links.map((link) => ({
37779
37478
  label: getLinkLabel(link),
@@ -37787,10 +37486,20 @@ class DataViewComponent {
37787
37486
  selectLink(linkAsString) {
37788
37487
  const link = JSON.parse(linkAsString);
37789
37488
  link.url = new URL(link.url);
37790
- this.selectedLink$.next(link);
37489
+ this.excludeWfs$
37490
+ .pipe(tap$1((excludeWfs) => {
37491
+ this.hidePreview =
37492
+ link['accessServiceProtocol'] === 'wfs' &&
37493
+ excludeWfs &&
37494
+ this.mode === 'chart'
37495
+ ? true
37496
+ : false;
37497
+ this.selectedLink$.next(link);
37498
+ }))
37499
+ .subscribe();
37791
37500
  }
37792
37501
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, deps: [{ token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
37793
- 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-[460px]\">\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 }); }
37502
+ 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 }); }
37794
37503
  }
37795
37504
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, decorators: [{
37796
37505
  type: Component,
@@ -37800,11 +37509,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37800
37509
  TableViewComponent,
37801
37510
  TranslateModule,
37802
37511
  ChartViewComponent,
37803
- ], 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-[460px]\">\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" }]
37512
+ PopupAlertComponent,
37513
+ ], 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" }]
37804
37514
  }], ctorParameters: () => [{ type: MdViewFacade }], propDecorators: { mode: [{
37805
37515
  type: Input
37806
37516
  }], displaySource: [{
37807
37517
  type: Input
37518
+ }], exceedsLimit: [{
37519
+ type: Input
37808
37520
  }], chartConfig$: [{
37809
37521
  type: Output
37810
37522
  }] } });
@@ -37976,7 +37688,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37976
37688
  marker('map.dropdown.placeholder');
37977
37689
  marker('wfs.feature.limit');
37978
37690
  class MapViewComponent {
37979
- set excludeWfs(value) {
37691
+ set exceedsLimit(value) {
37980
37692
  this.excludeWfs$.next(value);
37981
37693
  }
37982
37694
  toggleLegend() {
@@ -37995,6 +37707,7 @@ class MapViewComponent {
37995
37707
  this.changeRef = changeRef;
37996
37708
  this.displaySource = true;
37997
37709
  this.excludeWfs$ = new BehaviorSubject(false);
37710
+ this.hidePreview = false;
37998
37711
  this.showLegend = true;
37999
37712
  this.legendExists = false;
38000
37713
  this.compatibleMapLinks$ = combineLatest([
@@ -38021,9 +37734,10 @@ class MapViewComponent {
38021
37734
  return of([]);
38022
37735
  }
38023
37736
  if (excludeWfs && link.accessServiceProtocol === 'wfs') {
38024
- this.error = 'wfs.feature.limit';
37737
+ this.hidePreview = true;
38025
37738
  return of([]);
38026
37739
  }
37740
+ this.hidePreview = false;
38027
37741
  this.loading = true;
38028
37742
  this.error = null;
38029
37743
  return this.getLayerFromLink(link).pipe(map$1((layer) => [layer]), catchError((e) => {
@@ -38093,7 +37807,8 @@ class MapViewComponent {
38093
37807
  link.accessServiceProtocol === 'esriRest' ||
38094
37808
  link.accessServiceProtocol === 'ogcFeatures')) ||
38095
37809
  link.type === 'download') {
38096
- return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
37810
+ const cacheActive = true; // TODO implement whether should be true or false
37811
+ return this.dataService.readAsGeoJson(link, cacheActive).pipe(map$1((data) => ({
38097
37812
  type: 'geojson',
38098
37813
  data,
38099
37814
  })));
@@ -38104,7 +37819,7 @@ class MapViewComponent {
38104
37819
  this.selectedLinkIndex$.next(link);
38105
37820
  }
38106
37821
  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 }); }
38107
- 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 }); }
37822
+ 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 }); }
38108
37823
  }
38109
37824
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, decorators: [{
38110
37825
  type: Component,
@@ -38120,8 +37835,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38120
37835
  ExternalViewerButtonComponent,
38121
37836
  ButtonComponent,
38122
37837
  MapLegendComponent,
38123
- ], 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" }]
38124
- }], ctorParameters: () => [{ type: MdViewFacade }, { type: MapUtilsService }, { type: DataService }, { type: i0.ChangeDetectorRef }], propDecorators: { excludeWfs: [{
37838
+ ], 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" }]
37839
+ }], ctorParameters: () => [{ type: MdViewFacade }, { type: MapUtilsService }, { type: DataService }, { type: i0.ChangeDetectorRef }], propDecorators: { exceedsLimit: [{
38125
37840
  type: Input
38126
37841
  }], displaySource: [{
38127
37842
  type: Input
@@ -38608,8 +38323,8 @@ const DEFAULT_CONFIGURATION = {
38608
38323
  labelKey: marker('editor.record.form.page.description'),
38609
38324
  sections: [
38610
38325
  TITLE_SECTION,
38611
- ABOUT_SECTION,
38612
38326
  CLASSIFICATION_SECTION,
38327
+ ABOUT_SECTION,
38613
38328
  GEOGRAPHICAL_COVERAGE_SECTION,
38614
38329
  ],
38615
38330
  },
@@ -38954,9 +38669,8 @@ var WizardFieldType;
38954
38669
  (function (WizardFieldType) {
38955
38670
  WizardFieldType[WizardFieldType["TEXT"] = 0] = "TEXT";
38956
38671
  WizardFieldType[WizardFieldType["TEXT_AREA"] = 1] = "TEXT_AREA";
38957
- WizardFieldType[WizardFieldType["CHIPS"] = 2] = "CHIPS";
38958
- WizardFieldType[WizardFieldType["DATA_PICKER"] = 3] = "DATA_PICKER";
38959
- WizardFieldType[WizardFieldType["DROPDOWN"] = 4] = "DROPDOWN";
38672
+ WizardFieldType[WizardFieldType["DATA_PICKER"] = 2] = "DATA_PICKER";
38673
+ WizardFieldType[WizardFieldType["DROPDOWN"] = 3] = "DROPDOWN";
38960
38674
  })(WizardFieldType || (WizardFieldType = {}));
38961
38675
 
38962
38676
  class WizardService {
@@ -39078,9 +38792,6 @@ class WizardFieldComponent {
39078
38792
  case WizardFieldType.TEXT: {
39079
38793
  return data || '';
39080
38794
  }
39081
- case WizardFieldType.CHIPS: {
39082
- return data ? JSON.parse(data) : [];
39083
- }
39084
38795
  case WizardFieldType.TEXT_AREA: {
39085
38796
  return data || '';
39086
38797
  }
@@ -39110,10 +38821,6 @@ class WizardFieldComponent {
39110
38821
  this.initializeTextInputListener();
39111
38822
  break;
39112
38823
  }
39113
- case WizardFieldType.CHIPS: {
39114
- this.initializeChipsListener();
39115
- break;
39116
- }
39117
38824
  case WizardFieldType.TEXT_AREA: {
39118
38825
  this.initializeTextAreaListener();
39119
38826
  return;
@@ -39133,11 +38840,6 @@ class WizardFieldComponent {
39133
38840
  this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, value);
39134
38841
  }));
39135
38842
  }
39136
- initializeChipsListener() {
39137
- this.subs.add(this.chips.itemsChange.subscribe((items) => {
39138
- this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, JSON.stringify(items));
39139
- }));
39140
- }
39141
38843
  initializeTextAreaListener() {
39142
38844
  this.subs.add(this.textArea.valueChange.subscribe((value) => {
39143
38845
  this.wizardService.onWizardWizardFieldDataChanged(this.wizardFieldConfig.id, value);
@@ -39171,7 +38873,7 @@ class WizardFieldComponent {
39171
38873
  deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
39172
38874
  },
39173
38875
  { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
39174
- ], 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 }); }
38876
+ ], 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 }); }
39175
38877
  }
39176
38878
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: WizardFieldComponent, decorators: [{
39177
38879
  type: Component,
@@ -39183,15 +38885,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39183
38885
  deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],
39184
38886
  },
39185
38887
  { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS },
39186
- ], 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"] }]
38888
+ ], 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"] }]
39187
38889
  }], ctorParameters: () => [{ type: WizardService }, { type: i0.ChangeDetectorRef }], propDecorators: { wizardFieldConfig: [{
39188
38890
  type: Input
39189
38891
  }], searchText: [{
39190
38892
  type: ViewChild,
39191
38893
  args: ['searchText']
39192
- }], chips: [{
39193
- type: ViewChild,
39194
- args: ['chips']
39195
38894
  }], textArea: [{
39196
38895
  type: ViewChild,
39197
38896
  args: ['textArea']
@@ -39398,15 +39097,15 @@ class ImportRecordComponent {
39398
39097
  importRecord(url) {
39399
39098
  this.isRecordImportInProgress = true;
39400
39099
  this.recordsRepository.duplicateExternalRecord(url).subscribe({
39401
- next: (recordTempId) => {
39402
- if (recordTempId) {
39100
+ next: (uuid) => {
39101
+ if (uuid) {
39403
39102
  this.notificationsService.showNotification({
39404
39103
  type: 'success',
39405
39104
  title: this.translateService.instant('editor.record.importFromExternalFile.success.title'),
39406
39105
  text: `${this.translateService.instant('editor.record.importFromExternalFile.success.body')}`,
39407
39106
  }, 2500);
39408
39107
  this.router
39409
- .navigate(['/edit', recordTempId])
39108
+ .navigate(['/edit', uuid])
39410
39109
  .catch((err) => console.error(err));
39411
39110
  }
39412
39111
  this.closeImportMenu.next();
@@ -39432,7 +39131,7 @@ class ImportRecordComponent {
39432
39131
  provideNgIconsConfig({
39433
39132
  size: '1.5em',
39434
39133
  }),
39435
- ], ngImport: i0, 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", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { 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 }); }
39134
+ ], ngImport: i0, 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", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { 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: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }, { 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 }); }
39436
39135
  }
39437
39136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, decorators: [{
39438
39137
  type: Component,
@@ -39498,7 +39197,7 @@ class GenericKeywordsComponent {
39498
39197
  provideIcons({
39499
39198
  matWarningAmberOutline,
39500
39199
  }),
39501
- ], 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 }); }
39200
+ ], 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", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { 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 }); }
39502
39201
  }
39503
39202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
39504
39203
  type: Component,
@@ -39768,7 +39467,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39768
39467
 
39769
39468
  class FormFieldRichComponent {
39770
39469
  constructor() {
39771
- this.placeholder = 'Votre texte ici'; //TODO: translate
39470
+ this.placeholder = '';
39772
39471
  this.valueChange = new EventEmitter();
39773
39472
  this.preview = false;
39774
39473
  }
@@ -40011,19 +39710,16 @@ class FormFieldContactsForResourceComponent {
40011
39710
  this.organizationsServiceInterface = organizationsServiceInterface;
40012
39711
  this.valueChange = new EventEmitter();
40013
39712
  this.contactsForRessourceByRole = new Map();
40014
- this.rolesToPick = [
40015
- 'resource_provider',
40016
- 'custodian',
40017
- 'owner',
40018
- 'point_of_contact',
40019
- 'author',
40020
- ];
39713
+ this.roleValues = RoleValues;
39714
+ this.rolesToPick = this.roleValues.filter((role) => role !== 'other' && role !== 'unspecified');
40021
39715
  this.roleSectionsToDisplay = [];
40022
39716
  this.allOrganizations = new Map();
40023
39717
  /**
40024
39718
  * gn-ui-autocomplete
40025
39719
  */
40026
- this.displayWithFn = (user) => `${user.name} ${user.surname} ${user.organisation ? `(${user.organisation})` : ''}`;
39720
+ this.displayWithFn = (user) => user.name
39721
+ ? `${user.name} ${user.surname} ${user.organisation ? `(${user.organisation})` : ''}`
39722
+ : ``;
40027
39723
  /**
40028
39724
  * gn-ui-autocomplete
40029
39725
  */
@@ -40115,7 +39811,7 @@ class FormFieldContactsForResourceComponent {
40115
39811
  provideNgIconsConfig({
40116
39812
  size: '1.5rem',
40117
39813
  }),
40118
- ], 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 }); }
39814
+ ], 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 *ngIf=\"role !== 'unspecified' && role !== 'other'\"\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", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { 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 }); }
40119
39815
  }
40120
39816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
40121
39817
  type: Component,
@@ -40134,7 +39830,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40134
39830
  provideNgIconsConfig({
40135
39831
  size: '1.5rem',
40136
39832
  }),
40137
- ], 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"] }]
39833
+ ], 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 *ngIf=\"role !== 'unspecified' && role !== 'other'\"\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"] }]
40138
39834
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: OrganizationsServiceInterface }], propDecorators: { value: [{
40139
39835
  type: Input
40140
39836
  }], valueChange: [{
@@ -40213,7 +39909,7 @@ class FormFieldContactsComponent {
40213
39909
  this.subscription.unsubscribe();
40214
39910
  }
40215
39911
  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 }); }
40216
- 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 }); }
39912
+ 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", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { 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 }); }
40217
39913
  }
40218
39914
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsComponent, decorators: [{
40219
39915
  type: Component,
@@ -40418,7 +40114,7 @@ class FormFieldOnlineLinkResourcesComponent {
40418
40114
  });
40419
40115
  }
40420
40116
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
40421
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40117
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40422
40118
  }
40423
40119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, decorators: [{
40424
40120
  type: Component,
@@ -40455,6 +40151,7 @@ class OnlineServiceResourceInputComponent {
40455
40151
  this.modifyMode = false;
40456
40152
  this.serviceChange = new EventEmitter();
40457
40153
  this.errorMessage = false;
40154
+ this.resetUrlOnChange = Math.random();
40458
40155
  this.layersSubject = new BehaviorSubject([]);
40459
40156
  this.layers$ = this.layersSubject.asObservable();
40460
40157
  this.protocolOptions = [
@@ -40519,6 +40216,7 @@ class OnlineServiceResourceInputComponent {
40519
40216
  this.cdr.detectChanges();
40520
40217
  }
40521
40218
  resetAllFormFields() {
40219
+ this.resetUrlOnChange = Math.random();
40522
40220
  this._service.url = null;
40523
40221
  this.resetLayersSuggestion();
40524
40222
  }
@@ -40562,7 +40260,7 @@ class OnlineServiceResourceInputComponent {
40562
40260
  provideNgIconsConfig({
40563
40261
  size: '1.5em',
40564
40262
  }),
40565
- ], 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 }); }
40263
+ ], 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 [resetUrlOnChange]=\"resetUrlOnChange\"\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", "enterButton", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "forceTrackPosition", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared", "isSearchActive"] }, { 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", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40566
40264
  }
40567
40265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, decorators: [{
40568
40266
  type: Component,
@@ -40582,7 +40280,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40582
40280
  provideNgIconsConfig({
40583
40281
  size: '1.5em',
40584
40282
  }),
40585
- ], 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" }]
40283
+ ], 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 [resetUrlOnChange]=\"resetUrlOnChange\"\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" }]
40586
40284
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { service: [{
40587
40285
  type: Input
40588
40286
  }], protocolHint: [{
@@ -40731,7 +40429,7 @@ class FormFieldOnlineResourcesComponent {
40731
40429
  });
40732
40430
  }
40733
40431
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, deps: [{ token: NotificationsService }, { token: i1$1.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$b.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
40734
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n (serviceChange)=\"handleServiceChange($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n [disabled]=\"true\"\n ></gn-ui-online-service-resource-input>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n </ng-container>\n <ng-template #urlInput>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled", "modifyMode"], outputs: ["serviceChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40432
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n (serviceChange)=\"handleServiceChange($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n [disabled]=\"true\"\n ></gn-ui-online-service-resource-input>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n </ng-container>\n <ng-template #urlInput>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled", "modifyMode"], outputs: ["serviceChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton", "resetUrlOnChange"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40735
40433
  }
40736
40434
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, decorators: [{
40737
40435
  type: Component,
@@ -41157,7 +40855,7 @@ class ConstraintCardComponent {
41157
40855
  provideNgIconsConfig({
41158
40856
  size: '1.5rem',
41159
40857
  }),
41160
- ], 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 }); }
40858
+ ], 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", "resetUrlOnChange"], 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 }); }
41161
40859
  }
41162
40860
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConstraintCardComponent, decorators: [{
41163
40861
  type: Component,
@@ -41175,7 +40873,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41175
40873
  provideNgIconsConfig({
41176
40874
  size: '1.5rem',
41177
40875
  }),
41178
- ], 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"] }]
40876
+ ], 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"] }]
41179
40877
  }], propDecorators: { label: [{
41180
40878
  type: Input
41181
40879
  }], constraint: [{
@@ -41834,5 +41532,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41834
41532
  * Generated bundle index. Do not edit.
41835
41533
  */
41836
41534
 
41837
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, 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, 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, StepBarComponent, 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 };
41535
+ 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, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, 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, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, 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, matchesNoApplicableConstraint, matchesNoKnownConstraint, 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 };
41838
41536
  //# sourceMappingURL=geonetwork-ui.mjs.map