geonetwork-ui 2.6.0-dev.01f702fed → 2.6.0-dev.02631a41f

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 (719) hide show
  1. package/README.md +2 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +3 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +11 -2
  4. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +52 -13
  6. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  7. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +6 -6
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +14 -6
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +5 -5
  12. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -5
  13. package/esm2022/libs/api/metadata-converter/src/lib/translate-utils.mjs +17 -0
  14. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +4 -4
  15. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +5 -2
  16. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +20 -18
  17. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +79 -16
  18. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +8 -8
  19. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +14 -11
  20. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +23 -13
  21. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  22. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  23. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  24. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +7 -31
  25. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +9 -8
  26. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +47 -11
  27. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +4 -5
  28. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
  29. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +35 -3
  30. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +27 -8
  31. package/esm2022/libs/feature/editor/src/index.mjs +2 -4
  32. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  33. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +13 -7
  34. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +4 -1
  35. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +5 -1
  36. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +5 -7
  37. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +8 -13
  38. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +5 -6
  39. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +275 -0
  40. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +4 -13
  41. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +5 -5
  42. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.mjs +5 -8
  43. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.mjs +4 -5
  44. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +6 -10
  45. 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 -14
  46. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +4 -15
  47. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +4 -4
  48. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +4 -4
  49. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +4 -4
  50. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +4 -4
  51. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +4 -4
  52. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +4 -4
  53. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +6 -17
  54. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +4 -5
  55. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +12 -30
  56. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +1 -3
  57. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +5 -6
  58. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +11 -8
  59. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +11 -8
  60. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +11 -6
  61. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +10 -5
  62. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +3 -36
  63. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +5 -11
  64. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -6
  65. package/esm2022/libs/feature/record/src/index.mjs +2 -3
  66. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +20 -19
  67. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +6 -7
  68. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +4 -5
  69. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +6 -7
  70. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +4 -4
  71. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +8 -22
  72. package/esm2022/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.mjs +5 -5
  73. package/esm2022/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.mjs +15 -7
  74. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +96 -21
  75. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
  76. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
  77. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -13
  78. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
  79. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
  80. package/esm2022/libs/feature/search/src/lib/constants.mjs +4 -2
  81. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +9 -6
  82. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +24 -27
  83. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +3 -3
  84. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +8 -6
  85. package/esm2022/libs/feature/search/src/lib/results-hits/results-hits.container.component.mjs +8 -5
  86. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +12 -8
  87. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  88. package/esm2022/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.mjs +5 -7
  89. package/esm2022/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.mjs +4 -4
  90. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +5 -4
  91. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -5
  92. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +4 -5
  93. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +4 -5
  94. package/esm2022/libs/ui/dataviz/src/index.mjs +1 -2
  95. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +5 -3
  96. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +13 -8
  97. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -5
  98. package/esm2022/libs/ui/elements/src/index.mjs +4 -4
  99. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +6 -6
  100. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +5 -5
  101. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +4 -3
  102. package/esm2022/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.mjs +5 -3
  103. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +4 -5
  104. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +4 -4
  105. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +4 -5
  106. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +59 -0
  107. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +54 -0
  108. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +4 -5
  109. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +30 -104
  110. package/esm2022/libs/ui/elements/src/lib/kind-badge/kind-badge.component.mjs +37 -18
  111. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +3 -6
  112. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +4 -5
  113. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +5 -6
  114. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +7 -8
  115. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +40 -17
  116. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +8 -5
  117. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +7 -5
  118. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +71 -0
  119. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +15 -6
  120. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +4 -5
  121. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +5 -4
  122. package/esm2022/libs/ui/inputs/src/index.mjs +2 -2
  123. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +10 -13
  124. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +4 -3
  125. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +7 -6
  126. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +29 -7
  127. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +4 -5
  128. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -7
  129. package/esm2022/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.mjs +4 -3
  130. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +73 -0
  131. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +7 -3
  132. package/esm2022/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.mjs +4 -5
  133. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +3 -3
  134. package/esm2022/libs/ui/layout/src/index.mjs +3 -2
  135. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +3 -2
  136. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +18 -8
  137. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  138. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
  139. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +4 -5
  140. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +21 -12
  141. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +4 -5
  142. package/esm2022/libs/ui/layout/src/lib/pagination/pagination.component.mjs +4 -5
  143. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +4 -3
  144. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +71 -0
  145. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +29 -4
  146. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +4 -5
  147. package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +2 -1
  148. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  149. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +6 -6
  150. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +17 -10
  151. package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +5 -5
  152. package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
  153. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  154. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +24 -17
  155. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +45 -21
  156. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +32 -27
  157. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  158. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +3 -3
  159. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -3
  160. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -1
  161. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  162. package/esm2022/libs/util/i18n/src/index.mjs +2 -3
  163. package/esm2022/libs/util/i18n/src/lib/embedded.translate.loader.mjs +3 -2
  164. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +36 -28
  165. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +10 -9
  166. package/esm2022/libs/util/i18n/src/lib/i18n.providers.mjs +41 -0
  167. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +63 -3
  168. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  169. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +3 -2
  170. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -1
  171. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -1
  172. package/esm2022/libs/util/shared/src/lib/record.util.mjs +56 -0
  173. package/esm2022/translations/de.json +55 -27
  174. package/esm2022/translations/en.json +55 -27
  175. package/esm2022/translations/es.json +54 -26
  176. package/esm2022/translations/fr.json +55 -27
  177. package/esm2022/translations/it.json +81 -53
  178. package/esm2022/translations/nl.json +54 -26
  179. package/esm2022/translations/pt.json +54 -26
  180. package/esm2022/translations/sk.json +603 -0
  181. package/fesm2022/geonetwork-ui.mjs +12011 -10843
  182. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  183. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  184. package/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.d.ts.map +1 -1
  185. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +4 -4
  186. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  187. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
  188. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  189. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
  190. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
  191. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  192. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  193. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  194. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts +2 -0
  195. package/libs/api/metadata-converter/src/lib/translate-utils.d.ts.map +1 -0
  196. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  197. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  198. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +9 -7
  199. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  200. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +14 -3
  201. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  202. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts +1 -0
  203. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  204. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts +4 -4
  205. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  206. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +6 -3
  207. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  208. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  209. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  210. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +21 -15
  211. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  212. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +7 -1
  213. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  214. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts +4 -8
  215. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  216. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts +3 -3
  217. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  218. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +12 -8
  219. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  220. package/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.d.ts.map +1 -1
  221. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
  222. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  223. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -2
  224. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  225. package/libs/feature/editor/src/index.d.ts +1 -3
  226. package/libs/feature/editor/src/index.d.ts.map +1 -1
  227. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +8 -1
  228. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  229. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +10 -12
  230. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  231. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +2 -1
  232. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  233. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  234. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  235. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  236. package/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.d.ts.map +1 -1
  237. package/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.d.ts.map +1 -1
  238. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  239. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +52 -0
  240. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -0
  241. package/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.d.ts.map +1 -1
  242. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  243. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.d.ts.map +1 -1
  244. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.d.ts.map +1 -1
  245. 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
  246. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -1
  247. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  248. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  249. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  250. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  251. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -1
  252. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  253. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  254. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +10 -17
  255. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  256. package/libs/feature/editor/src/lib/models/index.d.ts +0 -2
  257. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  258. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.d.ts.map +1 -1
  259. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -1
  260. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -1
  261. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -1
  262. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -1
  263. package/libs/feature/map/src/lib/feature-map.module.d.ts +2 -11
  264. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  265. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
  266. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  267. package/libs/feature/record/src/index.d.ts +1 -2
  268. package/libs/feature/record/src/index.d.ts.map +1 -1
  269. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +7 -4
  270. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  271. package/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.d.ts.map +1 -1
  272. package/libs/feature/record/src/lib/feature-record.module.d.ts +8 -12
  273. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  274. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts.map +1 -1
  275. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts.map +1 -1
  276. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +13 -6
  277. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  278. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +10 -0
  279. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  280. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
  281. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  282. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -21
  283. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  284. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
  285. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  286. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  287. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  288. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  289. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +2 -1
  290. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  291. package/libs/feature/search/src/lib/feature-search.module.d.ts +24 -24
  292. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  293. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  294. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  295. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts +2 -1
  296. package/libs/feature/search/src/lib/results-hits/results-hits.container.component.d.ts.map +1 -1
  297. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts +1 -1
  298. package/libs/feature/search/src/lib/results-list/results-list.container.component.d.ts.map +1 -1
  299. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  300. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  301. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts +1 -2
  302. package/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.d.ts.map +1 -1
  303. package/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.d.ts.map +1 -1
  304. package/libs/feature/search/src/lib/utils/service/fields.d.ts +1 -2
  305. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  306. package/libs/ui/dataviz/src/index.d.ts +0 -1
  307. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  308. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +2 -1
  309. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts.map +1 -1
  310. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +6 -1
  311. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  312. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -1
  313. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  314. package/libs/ui/elements/src/index.d.ts +3 -3
  315. package/libs/ui/elements/src/index.d.ts.map +1 -1
  316. package/libs/ui/elements/src/lib/api-card/api-card.component.d.ts.map +1 -1
  317. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts +1 -1
  318. package/libs/ui/elements/src/lib/avatar/avatar.component.d.ts.map +1 -1
  319. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts +2 -0
  320. package/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -1
  321. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  322. package/libs/ui/elements/src/lib/{link-card/link-card.component.d.ts → external-link-card/external-link-card.component.d.ts} +4 -4
  323. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -0
  324. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
  325. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
  326. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +6 -19
  327. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  328. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts +4 -1
  329. package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
  330. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -1
  331. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  332. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
  333. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  334. package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
  335. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  336. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +27 -0
  337. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
  338. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +1 -0
  339. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  340. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts +1 -1
  341. package/libs/ui/elements/src/lib/user-preview/user-preview.component.d.ts.map +1 -1
  342. package/libs/ui/inputs/src/index.d.ts +1 -1
  343. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  344. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +1 -2
  345. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  346. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts +1 -1
  347. package/libs/ui/inputs/src/lib/checkbox/checkbox.component.d.ts.map +1 -1
  348. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts +1 -1
  349. package/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.d.ts.map +1 -1
  350. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts +1 -1
  351. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  352. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  353. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts +1 -1
  354. package/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.d.ts.map +1 -1
  355. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
  356. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
  357. package/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.d.ts +2 -1
  358. package/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.d.ts.map +1 -1
  359. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts +1 -1
  360. package/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.d.ts.map +1 -1
  361. package/libs/ui/layout/src/index.d.ts +2 -1
  362. package/libs/ui/layout/src/index.d.ts.map +1 -1
  363. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts +1 -1
  364. package/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.d.ts.map +1 -1
  365. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts +2 -1
  366. package/libs/ui/layout/src/lib/block-list/block-list.component.d.ts.map +1 -1
  367. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  368. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  369. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
  370. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
  371. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  372. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  373. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts +1 -1
  374. package/libs/ui/layout/src/lib/sticky-header/sticky-header.component.d.ts.map +1 -1
  375. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +22 -0
  376. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -0
  377. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +6 -2
  378. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  379. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts.map +1 -1
  380. package/libs/ui/search/src/index.d.ts +1 -0
  381. package/libs/ui/search/src/index.d.ts.map +1 -1
  382. package/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.d.ts +2 -0
  383. package/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.d.ts.map +1 -1
  384. package/libs/ui/search/src/lib/results-list/results-list.component.d.ts.map +1 -1
  385. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
  386. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  387. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
  388. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  389. package/libs/ui/search/src/lib/ui-search.module.d.ts +12 -11
  390. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  391. package/libs/ui/widgets/src/index.d.ts +0 -1
  392. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  393. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts +1 -1
  394. package/libs/ui/widgets/src/lib/color-scale/color-scale.component.d.ts.map +1 -1
  395. package/libs/util/app-config/src/lib/app-config.d.ts +0 -1
  396. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  397. package/libs/util/app-config/src/lib/fixtures.d.ts.map +1 -1
  398. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  399. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  400. package/libs/util/i18n/src/index.d.ts +1 -2
  401. package/libs/util/i18n/src/index.d.ts.map +1 -1
  402. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts +1 -1
  403. package/libs/util/i18n/src/lib/embedded.translate.loader.d.ts.map +1 -1
  404. package/libs/util/i18n/src/lib/i18n.constants.d.ts +6 -15
  405. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  406. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts +5 -5
  407. package/libs/util/i18n/src/lib/i18n.interceptor.d.ts.map +1 -1
  408. package/libs/util/i18n/src/lib/i18n.providers.d.ts +4 -0
  409. package/libs/util/i18n/src/lib/i18n.providers.d.ts.map +1 -0
  410. package/libs/util/i18n/src/lib/language-codes.d.ts +15 -19
  411. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  412. package/libs/util/shared/src/index.d.ts +1 -1
  413. package/libs/util/shared/src/index.d.ts.map +1 -1
  414. package/libs/util/shared/src/lib/image-fallback.directive.d.ts +1 -1
  415. package/libs/util/shared/src/lib/image-fallback.directive.d.ts.map +1 -1
  416. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  417. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  418. package/libs/util/shared/src/lib/record.util.d.ts +3 -0
  419. package/libs/util/shared/src/lib/record.util.d.ts.map +1 -0
  420. package/package.json +4 -4
  421. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
  422. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +10 -1
  423. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +2 -2
  424. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  425. package/src/libs/api/metadata-converter/src/lib/fixtures/metadata-for-i18n.records.ts +4240 -0
  426. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +73 -9
  427. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +4 -4
  428. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
  429. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +11 -5
  430. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  431. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +14 -8
  432. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +10 -6
  433. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +5 -4
  434. package/src/libs/api/metadata-converter/src/lib/translate-utils.ts +17 -0
  435. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +3 -6
  436. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +4 -1
  437. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +16 -8
  438. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +119 -16
  439. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +8 -7
  440. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +13 -6
  441. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +24 -20
  442. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  443. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +22 -9
  444. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +11 -1
  445. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +10 -0
  446. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +14 -0
  447. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +114 -1
  448. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +4 -17
  449. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +7 -3
  450. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +12 -9
  451. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +56 -12
  452. package/src/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.ts +2 -2
  453. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +40 -1
  454. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -0
  455. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +29 -3
  456. package/src/libs/feature/editor/src/index.ts +1 -3
  457. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +9 -1
  458. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +23 -12
  459. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -1
  460. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +9 -1
  461. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.ts +3 -4
  462. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.ts +5 -16
  463. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +7 -5
  464. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +120 -0
  465. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +331 -0
  466. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +2 -10
  467. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +3 -2
  468. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints/form-field-constraints.component.ts +3 -4
  469. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-constraints-shortcuts/form-field-constraints-shortcuts.component.ts +2 -2
  470. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.ts +4 -11
  471. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +6 -9
  472. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +2 -17
  473. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +2 -2
  474. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -2
  475. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.ts +2 -2
  476. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +2 -2
  477. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -2
  478. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +2 -2
  479. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +2 -2
  480. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -15
  481. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +2 -2
  482. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +4 -17
  483. package/src/libs/feature/editor/src/lib/models/index.ts +0 -2
  484. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.ts +2 -1
  485. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +8 -3
  486. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +10 -3
  487. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +8 -2
  488. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +8 -2
  489. package/src/libs/feature/map/src/lib/feature-map.module.ts +0 -17
  490. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +3 -8
  491. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +3 -2
  492. package/src/libs/feature/record/src/index.ts +1 -2
  493. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +3 -1
  494. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +22 -19
  495. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +2 -2
  496. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +2 -2
  497. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +2 -2
  498. package/src/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.ts +2 -2
  499. package/src/libs/feature/record/src/lib/feature-record.module.ts +4 -13
  500. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.ts +4 -3
  501. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.ts +10 -4
  502. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +31 -10
  503. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +135 -21
  504. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
  505. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
  506. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +22 -15
  507. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
  508. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
  509. package/src/libs/feature/search/src/lib/constants.ts +3 -1
  510. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +1 -0
  511. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +4 -3
  512. package/src/libs/feature/search/src/lib/feature-search.module.ts +13 -18
  513. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
  514. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +5 -0
  515. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.html +1 -0
  516. package/src/libs/feature/search/src/lib/results-hits/results-hits.container.component.ts +2 -1
  517. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +2 -0
  518. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  519. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  520. package/src/libs/feature/search/src/lib/search-filters-summary/search-filters-summary.component.ts +10 -4
  521. package/src/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.ts +2 -2
  522. package/src/libs/feature/search/src/lib/utils/service/fields.ts +4 -3
  523. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  524. package/src/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.ts +2 -2
  525. package/src/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.ts +2 -2
  526. package/src/libs/ui/dataviz/src/index.ts +0 -1
  527. package/src/libs/ui/dataviz/src/lib/chart/chart.component.ts +2 -1
  528. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +6 -3
  529. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +7 -6
  530. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +0 -1
  531. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +4 -0
  532. package/src/libs/ui/elements/src/index.ts +3 -3
  533. package/src/libs/ui/elements/src/lib/api-card/api-card.component.ts +3 -2
  534. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +6 -6
  535. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +2 -2
  536. package/src/libs/ui/elements/src/lib/avatar/avatar.component.ts +3 -0
  537. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.html +6 -2
  538. package/src/libs/ui/elements/src/lib/confirmation-dialog/confirmation-dialog.component.ts +5 -1
  539. package/src/libs/ui/elements/src/lib/download-item/download-item.component.ts +2 -2
  540. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +2 -5
  541. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -2
  542. package/src/libs/ui/elements/src/lib/{link-card/link-card.component.ts → external-link-card/external-link-card.component.ts} +6 -6
  543. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
  544. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
  545. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
  546. package/src/libs/ui/elements/src/lib/image-input/image-input.component.ts +2 -2
  547. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +69 -138
  548. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.scss +115 -0
  549. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +33 -125
  550. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.html +11 -5
  551. package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +32 -11
  552. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -4
  553. package/src/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.ts +2 -2
  554. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +6 -3
  555. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +2 -2
  556. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +4 -0
  557. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +4 -7
  558. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +20 -22
  559. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +51 -13
  560. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -2
  561. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +4 -2
  562. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +107 -0
  563. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +83 -0
  564. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +15 -1
  565. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +16 -3
  566. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  567. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.ts +4 -0
  568. package/src/libs/ui/inputs/src/index.ts +1 -1
  569. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +3 -3
  570. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +6 -9
  571. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.ts +3 -0
  572. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.html +1 -1
  573. package/src/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.ts +4 -0
  574. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +27 -0
  575. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +2 -2
  576. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +3 -4
  577. package/src/libs/ui/inputs/src/lib/inline-filter/inline-filter.component.ts +3 -0
  578. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
  579. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +83 -0
  580. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +0 -1
  581. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +5 -2
  582. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.ts +3 -1
  583. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +2 -2
  584. package/src/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.ts +1 -0
  585. package/src/libs/ui/layout/src/index.ts +2 -1
  586. package/src/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.ts +1 -0
  587. package/src/libs/ui/layout/src/lib/block-list/block-list.component.html +1 -2
  588. package/src/libs/ui/layout/src/lib/block-list/block-list.component.ts +15 -5
  589. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  590. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  591. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
  592. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
  593. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +2 -2
  594. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -2
  595. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +15 -8
  596. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.ts +2 -2
  597. package/src/libs/ui/layout/src/lib/pagination/pagination.component.ts +2 -2
  598. package/src/libs/ui/layout/src/lib/sticky-header/sticky-header.component.ts +3 -0
  599. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +27 -0
  600. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +84 -0
  601. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +3 -3
  602. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +27 -3
  603. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +2 -2
  604. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +1 -0
  605. package/src/libs/ui/search/src/index.ts +1 -0
  606. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.html +4 -1
  607. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
  608. package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.ts +14 -1
  609. package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +1 -0
  610. package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
  611. package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
  612. package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
  613. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
  614. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +18 -15
  615. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
  616. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +29 -27
  617. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +49 -18
  618. package/src/libs/ui/search/src/lib/ui-search.module.ts +15 -11
  619. package/src/libs/ui/widgets/src/index.ts +0 -1
  620. package/src/libs/ui/widgets/src/lib/color-scale/color-scale.component.ts +1 -0
  621. package/src/libs/util/app-config/src/lib/app-config.ts +3 -2
  622. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -0
  623. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  624. package/src/libs/util/i18n/src/index.ts +1 -2
  625. package/src/libs/util/i18n/src/lib/embedded.translate.loader.ts +4 -3
  626. package/src/libs/util/i18n/src/lib/i18n.constants.ts +39 -29
  627. package/src/libs/util/i18n/src/lib/i18n.interceptor.ts +11 -9
  628. package/src/libs/util/i18n/src/lib/i18n.providers.ts +68 -0
  629. package/src/libs/util/i18n/src/lib/language-codes.ts +67 -2
  630. package/src/libs/util/shared/src/index.ts +1 -1
  631. package/src/libs/util/shared/src/lib/image-fallback.directive.ts +1 -0
  632. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +3 -0
  633. package/src/libs/util/shared/src/lib/links/link-utils.ts +3 -0
  634. package/src/libs/util/shared/src/lib/record.util.ts +114 -0
  635. package/tailwind.base.css +2 -2
  636. package/translations/de.json +55 -27
  637. package/translations/en.json +55 -27
  638. package/translations/es.json +54 -26
  639. package/translations/fr.json +55 -27
  640. package/translations/it.json +81 -53
  641. package/translations/nl.json +54 -26
  642. package/translations/pt.json +54 -26
  643. package/translations/sk.json +54 -26
  644. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.mjs +0 -44
  645. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +0 -75
  646. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +0 -160
  647. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +0 -53
  648. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.model.mjs +0 -2
  649. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +0 -8
  650. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +0 -87
  651. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +0 -47
  652. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +0 -60
  653. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +0 -46
  654. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +0 -124
  655. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +0 -160
  656. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +0 -23
  657. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +0 -46
  658. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +0 -31
  659. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +0 -37
  660. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +0 -18
  661. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts +0 -14
  662. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-open-data/form-field-open-data.component.d.ts.map +0 -1
  663. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts +0 -31
  664. package/libs/feature/editor/src/lib/components/wizard/wizard.component.d.ts.map +0 -1
  665. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +0 -43
  666. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +0 -1
  667. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts +0 -17
  668. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts.map +0 -1
  669. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts +0 -10
  670. package/libs/feature/editor/src/lib/models/wizard-field.model.d.ts.map +0 -1
  671. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +0 -7
  672. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +0 -1
  673. package/libs/feature/editor/src/lib/services/wizard.service.d.ts +0 -33
  674. package/libs/feature/editor/src/lib/services/wizard.service.d.ts.map +0 -1
  675. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts +0 -11
  676. package/libs/ui/dataviz/src/lib/ui-dataviz.module.d.ts.map +0 -1
  677. package/libs/ui/elements/src/lib/link-card/link-card.component.d.ts.map +0 -1
  678. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +0 -12
  679. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +0 -1
  680. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +0 -30
  681. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +0 -1
  682. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +0 -35
  683. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +0 -1
  684. package/libs/ui/layout/src/lib/ui-layout.module.d.ts +0 -12
  685. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +0 -1
  686. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +0 -15
  687. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +0 -1
  688. package/libs/util/i18n/src/lib/lang.service.d.ts +0 -13
  689. package/libs/util/i18n/src/lib/lang.service.d.ts.map +0 -1
  690. package/libs/util/i18n/src/lib/util-i18n.module.d.ts +0 -12
  691. package/libs/util/i18n/src/lib/util-i18n.module.d.ts.map +0 -1
  692. package/libs/util/shared/src/lib/util-shared.module.d.ts +0 -9
  693. package/libs/util/shared/src/lib/util-shared.module.d.ts.map +0 -1
  694. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.css +0 -5
  695. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.html +0 -22
  696. package/src/libs/feature/editor/src/lib/components/wizard/wizard.component.ts +0 -93
  697. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.css +0 -31
  698. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -62
  699. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -206
  700. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.css +0 -3
  701. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.html +0 -21
  702. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.ts +0 -58
  703. package/src/libs/feature/editor/src/lib/models/wizard-field.model.ts +0 -10
  704. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -6
  705. package/src/libs/feature/editor/src/lib/services/wizard.service.ts +0 -105
  706. package/src/libs/ui/dataviz/src/lib/ui-dataviz.module.ts +0 -27
  707. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +0 -30
  708. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +0 -48
  709. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -70
  710. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -96
  711. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -14
  712. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -25
  713. package/src/libs/util/i18n/src/lib/lang.service.ts +0 -23
  714. package/src/libs/util/i18n/src/lib/util-i18n.module.ts +0 -26
  715. package/src/libs/util/shared/src/lib/util-shared.module.ts +0 -10
  716. /package/src/libs/{ui/elements/src/lib/internal-link-card/internal-link-card.component.css → feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.css} +0 -0
  717. /package/src/libs/ui/elements/src/lib/{link-card/link-card.component.css → external-link-card/external-link-card.component.css} +0 -0
  718. /package/src/libs/ui/elements/src/lib/{link-card/link-card.component.html → external-link-card/external-link-card.component.html} +0 -0
  719. /package/src/libs/ui/{elements/src/lib/related-record-card/related-record-card.component.css → inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css} +0 -0
@@ -7,14 +7,13 @@ import { ButtonComponent, FilesDropDirective, TextInputComponent, UrlInputCompon
7
7
  import { downgradeImage, megabytesToBytes } from '../../../../../../libs/util/shared/src';
8
8
  import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
9
9
  import { iconoirBin, iconoirFramePlusIn, iconoirLink, iconoirMediaImage, iconoirMediaImageXmark, iconoirPlus, } from '@ng-icons/iconoir';
10
- import { TranslateModule } from '@ngx-translate/core';
10
+ import { TranslatePipe } from '@ngx-translate/core';
11
11
  import { firstValueFrom } from 'rxjs';
12
12
  import { ImageOverlayPreviewComponent } from '../image-overlay-preview/image-overlay-preview.component';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@angular/common/http";
15
15
  import * as i2 from "@angular/common";
16
16
  import * as i3 from "@angular/material/progress-spinner";
17
- import * as i4 from "@ngx-translate/core";
18
17
  export class ImageInputComponent {
19
18
  get altText() {
20
19
  return this._altText;
@@ -175,7 +174,7 @@ export class ImageInputComponent {
175
174
  provideNgIconsConfig({
176
175
  size: '1.5rem',
177
176
  }),
178
- ], 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 ></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: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.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: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.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 }); }
177
+ ], 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 ></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: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.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: i3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: 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 }); }
179
178
  }
180
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageInputComponent, decorators: [{
181
180
  type: Component,
@@ -184,7 +183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
184
183
  ButtonComponent,
185
184
  FilesDropDirective,
186
185
  MatProgressSpinnerModule,
187
- TranslateModule,
186
+ TranslatePipe,
188
187
  UrlInputComponent,
189
188
  TextInputComponent,
190
189
  NgIconComponent,
@@ -225,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
225
224
  }], altTextChange: [{
226
225
  type: Output
227
226
  }] } });
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMvbGliL2ltYWdlLWlucHV0L2ltYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbWFnZS1pbnB1dC9pbWFnZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLHNDQUFzQyxDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN6RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixXQUFXLEdBQ1osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDckQs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VUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcidcbmltcG9ydCB7IG1hcmtlciB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcidcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgRmlsZXNEcm9wRGlyZWN0aXZlLFxuICBUZXh0SW5wdXRDb21wb25lbnQsXG4gIFVybElucHV0Q29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5pbXBvcnQgeyBkb3duZ3JhZGVJbWFnZSwgbWVnYWJ5dGVzVG9CeXRlcyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdXRpbC9zaGFyZWQvc3JjJ1xuaW1wb3J0IHtcbiAgTmdJY29uQ29tcG9uZW50LFxuICBwcm92aWRlSWNvbnMsXG4gIHByb3ZpZGVOZ0ljb25zQ29uZmlnLFxufSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7XG4gIGljb25vaXJCaW4sXG4gIGljb25vaXJGcmFtZVBsdXNJbixcbiAgaWNvbm9pckxpbmssXG4gIGljb25vaXJNZWRpYUltYWdlLFxuICBpY29ub2lyTWVkaWFJbWFnZVhtYXJrLFxuICBpY29ub2lyUGx1cyxcbn0gZnJvbSAnQG5nLWljb25zL2ljb25vaXInXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSW1hZ2VPdmVybGF5UHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2ltYWdlLW92ZXJsYXktcHJldmlldy9pbWFnZS1vdmVybGF5LXByZXZpZXcuY29tcG9uZW50J1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1pbWFnZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWlucHV0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEZpbGVzRHJvcERpcmVjdGl2ZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFVybElucHV0Q29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBOZ0ljb25Db21wb25lbnQsXG4gICAgSW1hZ2VPdmVybGF5UHJldmlld0NvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIGljb25vaXJNZWRpYUltYWdlLFxuICAgICAgaWNvbm9pckZyYW1lUGx1c0luLFxuICAgICAgaWNvbm9pck1lZGlhSW1hZ2VYbWFyayxcbiAgICAgIGljb25vaXJCaW4sXG4gICAgICBpY29ub2lyUGx1cyxcbiAgICAgIGljb25vaXJMaW5rLFxuICAgIH0pLFxuICAgIHByb3ZpZGVOZ0ljb25zQ29uZmlnKHtcbiAgICAgIHNpemU6ICcxLjVyZW0nLFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUlucHV0Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfYWx0VGV4dD86IHN0cmluZ1xuXG4gIEBJbnB1dCgpIHByZXZpZXdVcmw/OiBzdHJpbmdcbiAgQElucHV0KClcbiAgZ2V0IGFsdFRleHQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fYWx0VGV4dFxuICB9XG4gIHNldCBhbHRUZXh0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgIT09ICdLTycgJiYgdGhpcy5fYWx0VGV4dCA9PT0gJ0tPJykge1xuICAgICAgLy9UaGlzIGlzIGEgZGF0YXNldCByb2xsYmFjayBhZnRlciB1cGxvYWQgZXJyb3JcbiAgICAgIHRoaXMucmVzZXRFcnJvcnMoKVxuICAgIH1cbiAgICB0aGlzLl9hbHRUZXh0ID0gdmFsdWVcbiAgfVxuXG4gIEBJbnB1dCgpIG1heFNpemVNQjogbnVtYmVyXG4gIEBJbnB1dCgpIHVwbG9hZFByb2dyZXNzPzogbnVtYmVyXG4gIEBJbnB1dCgpIHVwbG9hZEVycm9yPzogYm9vbGVhblxuICBASW5wdXQoKSBkaXNhYmxlZD86IGJvb2xlYW4gPSBmYWxzZVxuICBAT3V0cHV0KCkgZmlsZUNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSB1cmxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSB1cGxvYWRDYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgZGVsZXRlOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGFsdFRleHRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgZHJhZ0ZpbGVzT3ZlciA9IGZhbHNlXG4gIHNob3dVcmxJbnB1dCA9IGZhbHNlXG4gIGltYWdlRmlsZUVycm9yID0gdGhpcy51cGxvYWRFcnJvclxuICBzaG93QWx0VGV4dElucHV0ID0gZmFsc2VcbiAgcGVuZGluZ0FsdFRleHQ6IHN0cmluZ1xuXG4gIGdldCBpc1VwbG9hZEluUHJvZ3Jlc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBsb2FkUHJvZ3Jlc3MgIT09IHVuZGVmaW5lZFxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBnZXRJc0FjdGlvbkJsb2NrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNVcGxvYWRJblByb2dyZXNzIHx8IHRoaXMuZGlzYWJsZWRcbiAgfVxuXG4gIGdldFByaW1hcnlUZXh0KCkge1xuICAgIGlmICh0aGlzLmltYWdlRmlsZUVycm9yKSB7XG4gICAgICByZXR1cm4gbWFya2VyKCdpbnB1dC5pbWFnZS51cGxvYWRFcnJvckxhYmVsJylcbiAgICB9XG4gICAgaWYgKHRoaXMudXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybiBtYXJrZXIoJ2lucHV0LmltYWdlLnVwbG9hZFByb2dyZXNzTGFiZWwnKVxuICAgIH1cbiAgICByZXR1cm4gbWFya2VyKCdpbnB1dC5pbWFnZS5zZWxlY3RGaWxlTGFiZWwnKVxuICB9XG5cbiAgZ2V0U2Vjb25kYXJ5VGV4dCgpIHtcbiAgICBpZiAodGhpcy5pbWFnZUZpbGVFcnJvcikge1xuICAgICAgcmV0dXJuICdcXHUwMEEwJyAvLyAob25seSB0byBrZWVwIHNhbWUgc3BhY2luZywgbmV4dCBzdGVwIGlzIHRvIGhhbmRsZSBcIlJldHJ5XCIpXG4gICAgfVxuICAgIGlmICh0aGlzLnVwbG9hZFByb2dyZXNzKSB7XG4gICAgICByZXR1cm4gbWFya2VyKCdpbnB1dC5pbWFnZS51cGxvYWRQcm9ncmVzc0NhbmNlbCcpXG4gICAgfVxuICAgIHJldHVybiBtYXJrZXIoJ2lucHV0LmltYWdlLmRyb3BGaWxlTGFiZWwnKVxuICB9XG5cbiAgaGFuZGxlRHJhZ0ZpbGVzT3ZlcihkcmFnRmlsZXNPdmVyOiBib29sZWFuKSB7XG4gICAgaWYgKCF0aGlzLnNob3dVcmxJbnB1dCkge1xuICAgICAgdGhpcy5kcmFnRmlsZXNPdmVyID0gZHJhZ0ZpbGVzT3ZlclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURyb3BGaWxlcyhmaWxlczogRmlsZVtdKSB7XG4gICAgdGhpcy5yZXNldEVycm9ycygpXG4gICAgY29uc3QgdmFsaWRGaWxlcyA9IHRoaXMuZmlsdGVyVHlwZUltYWdlKGZpbGVzKVxuICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2hvd1VybElucHV0ID0gZmFsc2VcbiAgICAgIHRoaXMucmVzaXplQW5kRW1pdCh2YWxpZEZpbGVzWzBdKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltYWdlRmlsZUVycm9yID0gdHJ1ZVxuICAgICAgdGhpcy5oYW5kbGVBbHRUZXh0Q2hhbmdlKCdLTycpXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRmlsZUlucHV0KGV2ZW50OiBFdmVudCkge1xuICAgIHRoaXMucmVzZXRFcnJvcnMoKVxuICAgIGNvbnN0IGlucHV0RmlsZXMgPSBBcnJheS5mcm9tKChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXMpXG4gICAgY29uc3QgdmFsaWRGaWxlcyA9IHRoaXMuZmlsdGVyVHlwZUltYWdlKGlucHV0RmlsZXMpXG4gICAgaWYgKHZhbGlkRmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNpemVBbmRFbWl0KHZhbGlkRmlsZXNbMF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW1hZ2VGaWxlRXJyb3IgPSB0cnVlXG4gICAgICB0aGlzLmhhbmRsZUFsdFRleHRDaGFuZ2UoJ0tPJylcbiAgICB9XG4gIH1cblxuICBkaXNwbGF5VXJsSW5wdXQoKSB7XG4gICAgdGhpcy51cGxvYWRDYW5jZWwuZW1pdCgpXG4gICAgdGhpcy5zaG93VXJsSW5wdXQgPSB0cnVlXG4gIH1cblxuICBhc3luYyBkb3dubG9hZFVybCh1cmw6IHN0cmluZykge1xuICAgIHRoaXMucmVzZXRFcnJvcnMoKVxuICAgIGNvbnN0IG5hbWUgPSB1cmwuc3BsaXQoJy8nKS5wb3AoKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmh0dHAuaGVhZCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxuICAgICAgKVxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpICYmXG4gICAgICAgIHBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKSA8XG4gICAgICAgICAgbWVnYWJ5dGVzVG9CeXRlcyh0aGlzLm1heFNpemVNQilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9KS5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChibG9iKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBuYW1lKVxuICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoZmlsZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmltYWdlRmlsZUVycm9yID0gdHJ1ZVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVBbHRUZXh0Q2hhbmdlKCdLTycpXG4gICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpXG4gICAgICAgICAgICB0aGlzLnVybENoYW5nZS5lbWl0KHVybClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5pbWFnZUZpbGVFcnJvciA9IHRydWVcbiAgICAgIHRoaXMuaGFuZGxlQWx0VGV4dENoYW5nZSgnS08nKVxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU2Vjb25kYXJ5VGV4dENsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLnVwbG9hZFByb2dyZXNzKSB7XG4gICAgICB0aGlzLmhhbmRsZUNhbmNlbFVwbG9hZCgpXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2FuY2VsVXBsb2FkKCkge1xuICAgIHRoaXMudXBsb2FkQ2FuY2VsLmVtaXQoKVxuICB9XG5cbiAgaGFuZGxlRGVsZXRlKCkge1xuICAgIHRoaXMuZGVsZXRlLmVtaXQoKVxuICB9XG5cbiAgcmVzZXRFcnJvcnMoKSB7XG4gICAgdGhpcy5pbWFnZUZpbGVFcnJvciA9IGZhbHNlXG4gICAgdGhpcy51cGxvYWRFcnJvciA9IGZhbHNlXG4gIH1cblxuICB0b2dnbGVBbHRUZXh0SW5wdXQoKSB7XG4gICAgdGhpcy5zaG93QWx0VGV4dElucHV0ID0gIXRoaXMuc2hvd0FsdFRleHRJbnB1dFxuICB9XG5cbiAgaGFuZGxlQWx0VGV4dENoYW5nZShhbHRUZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLmFsdFRleHRDaGFuZ2UuZW1pdChhbHRUZXh0KVxuICB9XG4gIHByaXZhdGUgZmlsdGVyVHlwZUltYWdlKGZpbGVzOiBGaWxlW10pIHtcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQW5kRW1pdChpbWFnZVRvUmVzaXplOiBGaWxlKSB7XG4gICAgY29uc3QgbWF4U2l6ZUJ5dGVzID0gbWVnYWJ5dGVzVG9CeXRlcyh0aGlzLm1heFNpemVNQilcbiAgICBkb3duZ3JhZGVJbWFnZShpbWFnZVRvUmVzaXplLCBtYXhTaXplQnl0ZXMpLnRoZW4oKHJlc2l6ZWRJbWFnZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVRvRW1pdCA9IG5ldyBGaWxlKFtyZXNpemVkSW1hZ2VdLCBpbWFnZVRvUmVzaXplLm5hbWUpXG4gICAgICB0aGlzLmZpbGVDaGFuZ2UuZW1pdChmaWxlVG9FbWl0KVxuICAgIH0pXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJwcmV2aWV3VXJsOyB0aGVuIHdpdGhJbWFnZTsgZWxzZSB3aXRob3V0SW1hZ2VcIj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI3dpdGhJbWFnZT5cbiAgPGRpdiBjbGFzcz1cInctODAgaC1mdWxsIGZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICA8Z24tdWktaW1hZ2Utb3ZlcmxheS1wcmV2aWV3IGNsYXNzPVwiaC00OFwiIFtpbWFnZVVybF09XCJwcmV2aWV3VXJsXCI+XG4gICAgPC9nbi11aS1pbWFnZS1vdmVybGF5LXByZXZpZXc+XG4gICAgPGduLXVpLXRleHQtaW5wdXRcbiAgICAgICpuZ0lmPVwic2hvd0FsdFRleHRJbnB1dFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ2lucHV0LmltYWdlLmFsdFRleHRQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3ZhbHVlXT1cImFsdFRleHQgPz8gJydcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUFsdFRleHRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICBleHRyYUNsYXNzPVwiZ24tdWktZWRpdG9yLXRleHRhcmVhXCJcbiAgICA+PC9nbi11aS10ZXh0LWlucHV0PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC0yIG10LTJcIj5cbiAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgdHlwZT1cImdyYXlcIlxuICAgICAgICAoYnV0dG9uQ2xpY2spPVwiaGFuZGxlRGVsZXRlKClcIlxuICAgICAgICBkYXRhLWN5PVwiZGVsZXRlLWltYWdlXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWljb24gY2xhc3M9XCJtZS0xIHRleHQtcHJpbWFyeVwiIG5hbWU9XCJpY29ub2lyQmluXCI+PC9uZy1pY29uPlxuICAgICAgICB7eyAnaW5wdXQuaW1hZ2UuZGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIXNob3dBbHRUZXh0SW5wdXRcIlxuICAgICAgICB0eXBlPVwiZ3JheVwiXG4gICAgICAgIChidXR0b25DbGljayk9XCJ0b2dnbGVBbHRUZXh0SW5wdXQoKVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1pY29uIG5hbWU9XCJpY29ub2lyUGx1c1wiIGNsYXNzPVwibWUtMSB0ZXh0LXByaW1hcnlcIj48L25nLWljb24+XG4gICAgICAgIHt7ICdpbnB1dC5pbWFnZS5kaXNwbGF5QWx0VGV4dElucHV0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN3aXRob3V0SW1hZ2U+XG4gIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggZmxleC1jb2wgZ2FwLTJcIj5cbiAgICA8bGFiZWxcbiAgICAgIGduVWlGaWxlc0Ryb3BcbiAgICAgIGNsYXNzPVwiZmxleC0xIGJvcmRlci0yIGJvcmRlci1kYXNoZWQgcm91bmRlZC1sZyBwLTYgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTQgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMTAwXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2JvcmRlci1wcmltYXJ5LWxpZ2h0ZXIgYmctcHJpbWFyeS13aGl0ZSc6IGRyYWdGaWxlc092ZXIsXG4gICAgICAgICdib3JkZXItZ3JheS0zMDAnOiAhZHJhZ0ZpbGVzT3ZlcixcbiAgICAgICAgJ2N1cnNvci1wb2ludGVyIGhvdmVyOmJvcmRlci1ncmF5LTUwMCc6ICFnZXRJc0FjdGlvbkJsb2NrZWQoKSxcbiAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCc6IGRpc2FibGVkLFxuICAgICAgfVwiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCJnZXRJc0FjdGlvbkJsb2NrZWQoKSA/IG51bGwgOiAwXCJcbiAgICAgIChrZXlkb3duLmVudGVyKT1cImZpbGVJbnB1dC5jbGljaygpXCJcbiAgICAgIChkcmFnRmlsZXNPdmVyKT1cImhhbmRsZURyYWdGaWxlc092ZXIoJGV2ZW50KVwiXG4gICAgICAoZHJvcEZpbGVzKT1cImhhbmRsZURyb3BGaWxlcygkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidy0xNCBoLTE0IHJvdW5kZWQtbWQgYmctZ3JheS01MCBncmlkXCJcbiAgICAgICAgKm5nSWY9XCIhaXNVcGxvYWRJblByb2dyZXNzICYmICFpbWFnZUZpbGVFcnJvclwiXG4gICAgICA+XG4gICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgKm5nSWY9XCIhZHJhZ0ZpbGVzT3ZlclwiXG4gICAgICAgICAgY2xhc3M9XCJwbGFjZS1zZWxmLWNlbnRlciB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyTWVkaWFJbWFnZVwiXG4gICAgICAgID48L25nLWljb24+XG4gICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgKm5nSWY9XCJkcmFnRmlsZXNPdmVyXCJcbiAgICAgICAgICBjbGFzcz1cInBsYWNlLXNlbGYtY2VudGVyIHRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgbmFtZT1cImljb25vaXJGcmFtZVBsdXNJblwiXG4gICAgICAgID48L25nLWljb24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cImlzVXBsb2FkSW5Qcm9ncmVzcyAmJiAhaW1hZ2VGaWxlRXJyb3JcIlxuICAgICAgICBjbGFzcz1cInctMTQgaC0xNCBncmlkIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByZWxhdGl2ZVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktMTAwIGFic29sdXRlXCI+XG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjbGFzcz1cInBsYWNlLXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1NlwiXG4gICAgICAgICAgICBtb2RlPVwiZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIjEwMFwiXG4gICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1wcmltYXJ5IGFic29sdXRlXCI+XG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gICAgICAgICAgICBjbGFzcz1cInBsYWNlLXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgIFtkaWFtZXRlcl09XCI1NlwiXG4gICAgICAgICAgICBtb2RlPVwiZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LW1haW4gZm9udC1ib2xkXCI+e3sgdXBsb2FkUHJvZ3Jlc3MgfX0lPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTE0IGgtMTQgcm91bmRlZC1tZCBiZy1ncmF5LTUwIGdyaWRcIiAqbmdJZj1cImltYWdlRmlsZUVycm9yXCI+XG4gICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgbmFtZT1cImljb25vaXJNZWRpYUltYWdlWG1hcmtcIlxuICAgICAgICAgIGNsYXNzPVwicGxhY2Utc2VsZi1jZW50ZXIgdGV4dC1yb3NlLTUwMFwiXG4gICAgICAgICAgZGF0YS1jeT1cImltZ0Vycm9ySWNvblwiXG4gICAgICAgID48L25nLWljb24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgIDxwIGNsYXNzPVwiZm9udC1tZWRpdW1cIiBkYXRhLWN5PVwiaW1nSW5wdXRNc2dQcmltYXJ5XCI+XG4gICAgICAgICAge3sgZ2V0UHJpbWFyeVRleHQoKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtXCJcbiAgICAgICAgICBkYXRhLWN5PVwiaW1nSW5wdXRNc2dTZWNvbmRhcnlcIlxuICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgIGlzVXBsb2FkSW5Qcm9ncmVzc1xuICAgICAgICAgICAgICA/ICdmb250LWJvbGQgdGV4dC1ibHVlLTUwMCBjdXJzb3ItcG9pbnRlcidcbiAgICAgICAgICAgICAgOiAnZm9udC1tZWRpdW0gdGV4dC1ncmF5LTUwMCdcbiAgICAgICAgICBcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVTZWNvbmRhcnlUZXh0Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRTZWNvbmRhcnlUZXh0KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz1cImhpZGRlblwiXG4gICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRmlsZUlucHV0KCRldmVudClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNVcGxvYWRJblByb2dyZXNzIHx8IGRpc2FibGVkXCJcbiAgICAgIC8+XG4gICAgPC9sYWJlbD5cblxuICAgIDxkaXYgKm5nSWY9XCIhc2hvd1VybElucHV0XCIgY2xhc3M9XCJmbGV4LW5vbmUgbXQtMlwiPlxuICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICBkYXRhLWN5PVwiaW1nVXJsQnRuXCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cImRpc3BsYXlVcmxJbnB1dCgpXCJcbiAgICAgICAgdHlwZT1cImdyYXlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZXh0cmFDbGFzc109XCJkaXNhYmxlZCAmJiAnY3Vyc29yLW5vdC1hbGxvd2VkJ1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1pY29uIGNsYXNzPVwibWUtMSB0ZXh0LXByaW1hcnlcIiBuYW1lPVwiaWNvbm9pckxpbmtcIj48L25nLWljb24+XG4gICAgICAgIHt7ICdpbnB1dC5pbWFnZS5kaXNwbGF5VXJsSW5wdXQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2duLXVpLWJ1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxnbi11aS11cmwtaW5wdXRcbiAgICAgICpuZ0lmPVwic2hvd1VybElucHV0XCJcbiAgICAgIGNsYXNzPVwibXQtMy41XCJcbiAgICAgIGRhdGEtY3k9XCJpbWdVcmxJbnB1dFwiXG4gICAgICAodXBsb2FkQ2xpY2spPVwiZG93bmxvYWRVcmwoJGV2ZW50KVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNVcGxvYWRJblByb2dyZXNzIHx8IGRpc2FibGVkXCJcbiAgICA+XG4gICAgPC9nbi11aS11cmwtaW5wdXQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9lbGVtZW50cy9zcmMvbGliL2ltYWdlLWlucHV0L2ltYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbWFnZS1pbnB1dC9pbWFnZS1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2pELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDaEUsT0FBTyxFQUNMLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLHNDQUFzQyxDQUFBO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUN6RixPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixXQUFXLEdBQ1osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQs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QUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJ1xuaW1wb3J0IHsgbWFya2VyIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJ1xuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBGaWxlc0Ryb3BEaXJlY3RpdmUsXG4gIFRleHRJbnB1dENvbXBvbmVudCxcbiAgVXJsSW5wdXRDb21wb25lbnQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvaW5wdXRzL3NyYydcbmltcG9ydCB7IGRvd25ncmFkZUltYWdlLCBtZWdhYnl0ZXNUb0J5dGVzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQge1xuICBOZ0ljb25Db21wb25lbnQsXG4gIHByb3ZpZGVJY29ucyxcbiAgcHJvdmlkZU5nSWNvbnNDb25maWcsXG59IGZyb20gJ0BuZy1pY29ucy9jb3JlJ1xuaW1wb3J0IHtcbiAgaWNvbm9pckJpbixcbiAgaWNvbm9pckZyYW1lUGx1c0luLFxuICBpY29ub2lyTGluayxcbiAgaWNvbm9pck1lZGlhSW1hZ2UsXG4gIGljb25vaXJNZWRpYUltYWdlWG1hcmssXG4gIGljb25vaXJQbHVzLFxufSBmcm9tICdAbmctaWNvbnMvaWNvbm9pcidcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSW1hZ2VPdmVybGF5UHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2ltYWdlLW92ZXJsYXktcHJldmlldy9pbWFnZS1vdmVybGF5LXByZXZpZXcuY29tcG9uZW50J1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1pbWFnZS1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWlucHV0LmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIEZpbGVzRHJvcERpcmVjdGl2ZSxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBVcmxJbnB1dENvbXBvbmVudCxcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgTmdJY29uQ29tcG9uZW50LFxuICAgIEltYWdlT3ZlcmxheVByZXZpZXdDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBpY29ub2lyTWVkaWFJbWFnZSxcbiAgICAgIGljb25vaXJGcmFtZVBsdXNJbixcbiAgICAgIGljb25vaXJNZWRpYUltYWdlWG1hcmssXG4gICAgICBpY29ub2lyQmluLFxuICAgICAgaWNvbm9pclBsdXMsXG4gICAgICBpY29ub2lyTGluayxcbiAgICB9KSxcbiAgICBwcm92aWRlTmdJY29uc0NvbmZpZyh7XG4gICAgICBzaXplOiAnMS41cmVtJyxcbiAgICB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW1hZ2VJbnB1dENvbXBvbmVudCB7XG4gIHByaXZhdGUgX2FsdFRleHQ/OiBzdHJpbmdcblxuICBASW5wdXQoKSBwcmV2aWV3VXJsPzogc3RyaW5nXG4gIEBJbnB1dCgpXG4gIGdldCBhbHRUZXh0KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2FsdFRleHRcbiAgfVxuICBzZXQgYWx0VGV4dCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHZhbHVlICE9PSAnS08nICYmIHRoaXMuX2FsdFRleHQgPT09ICdLTycpIHtcbiAgICAgIC8vVGhpcyBpcyBhIGRhdGFzZXQgcm9sbGJhY2sgYWZ0ZXIgdXBsb2FkIGVycm9yXG4gICAgICB0aGlzLnJlc2V0RXJyb3JzKClcbiAgICB9XG4gICAgdGhpcy5fYWx0VGV4dCA9IHZhbHVlXG4gIH1cblxuICBASW5wdXQoKSBtYXhTaXplTUI6IG51bWJlclxuICBASW5wdXQoKSB1cGxvYWRQcm9ncmVzcz86IG51bWJlclxuICBASW5wdXQoKSB1cGxvYWRFcnJvcj86IGJvb2xlYW5cbiAgQElucHV0KCkgZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2VcbiAgQE91dHB1dCgpIGZpbGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWxlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgdXJsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBAT3V0cHV0KCkgdXBsb2FkQ2FuY2VsOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGRlbGV0ZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSBhbHRUZXh0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIGRyYWdGaWxlc092ZXIgPSBmYWxzZVxuICBzaG93VXJsSW5wdXQgPSBmYWxzZVxuICBpbWFnZUZpbGVFcnJvciA9IHRoaXMudXBsb2FkRXJyb3JcbiAgc2hvd0FsdFRleHRJbnB1dCA9IGZhbHNlXG4gIHBlbmRpbmdBbHRUZXh0OiBzdHJpbmdcblxuICBnZXQgaXNVcGxvYWRJblByb2dyZXNzKCkge1xuICAgIHJldHVybiB0aGlzLnVwbG9hZFByb2dyZXNzICE9PSB1bmRlZmluZWRcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgZ2V0SXNBY3Rpb25CbG9ja2VkKCkge1xuICAgIHJldHVybiB0aGlzLmlzVXBsb2FkSW5Qcm9ncmVzcyB8fCB0aGlzLmRpc2FibGVkXG4gIH1cblxuICBnZXRQcmltYXJ5VGV4dCgpIHtcbiAgICBpZiAodGhpcy5pbWFnZUZpbGVFcnJvcikge1xuICAgICAgcmV0dXJuIG1hcmtlcignaW5wdXQuaW1hZ2UudXBsb2FkRXJyb3JMYWJlbCcpXG4gICAgfVxuICAgIGlmICh0aGlzLnVwbG9hZFByb2dyZXNzKSB7XG4gICAgICByZXR1cm4gbWFya2VyKCdpbnB1dC5pbWFnZS51cGxvYWRQcm9ncmVzc0xhYmVsJylcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlcignaW5wdXQuaW1hZ2Uuc2VsZWN0RmlsZUxhYmVsJylcbiAgfVxuXG4gIGdldFNlY29uZGFyeVRleHQoKSB7XG4gICAgaWYgKHRoaXMuaW1hZ2VGaWxlRXJyb3IpIHtcbiAgICAgIHJldHVybiAnXFx1MDBBMCcgLy8gKG9ubHkgdG8ga2VlcCBzYW1lIHNwYWNpbmcsIG5leHQgc3RlcCBpcyB0byBoYW5kbGUgXCJSZXRyeVwiKVxuICAgIH1cbiAgICBpZiAodGhpcy51cGxvYWRQcm9ncmVzcykge1xuICAgICAgcmV0dXJuIG1hcmtlcignaW5wdXQuaW1hZ2UudXBsb2FkUHJvZ3Jlc3NDYW5jZWwnKVxuICAgIH1cbiAgICByZXR1cm4gbWFya2VyKCdpbnB1dC5pbWFnZS5kcm9wRmlsZUxhYmVsJylcbiAgfVxuXG4gIGhhbmRsZURyYWdGaWxlc092ZXIoZHJhZ0ZpbGVzT3ZlcjogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5zaG93VXJsSW5wdXQpIHtcbiAgICAgIHRoaXMuZHJhZ0ZpbGVzT3ZlciA9IGRyYWdGaWxlc092ZXJcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEcm9wRmlsZXMoZmlsZXM6IEZpbGVbXSkge1xuICAgIHRoaXMucmVzZXRFcnJvcnMoKVxuICAgIGNvbnN0IHZhbGlkRmlsZXMgPSB0aGlzLmZpbHRlclR5cGVJbWFnZShmaWxlcylcbiAgICBpZiAodmFsaWRGaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dVcmxJbnB1dCA9IGZhbHNlXG4gICAgICB0aGlzLnJlc2l6ZUFuZEVtaXQodmFsaWRGaWxlc1swXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbWFnZUZpbGVFcnJvciA9IHRydWVcbiAgICAgIHRoaXMuaGFuZGxlQWx0VGV4dENoYW5nZSgnS08nKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVJbnB1dChldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnJlc2V0RXJyb3JzKClcbiAgICBjb25zdCBpbnB1dEZpbGVzID0gQXJyYXkuZnJvbSgoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzKVxuICAgIGNvbnN0IHZhbGlkRmlsZXMgPSB0aGlzLmZpbHRlclR5cGVJbWFnZShpbnB1dEZpbGVzKVxuICAgIGlmICh2YWxpZEZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVzaXplQW5kRW1pdCh2YWxpZEZpbGVzWzBdKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmltYWdlRmlsZUVycm9yID0gdHJ1ZVxuICAgICAgdGhpcy5oYW5kbGVBbHRUZXh0Q2hhbmdlKCdLTycpXG4gICAgfVxuICB9XG5cbiAgZGlzcGxheVVybElucHV0KCkge1xuICAgIHRoaXMudXBsb2FkQ2FuY2VsLmVtaXQoKVxuICAgIHRoaXMuc2hvd1VybElucHV0ID0gdHJ1ZVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRVcmwodXJsOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc2V0RXJyb3JzKClcbiAgICBjb25zdCBuYW1lID0gdXJsLnNwbGl0KCcvJykucG9wKClcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwLmhlYWQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAgIClcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpPy5zdGFydHNXaXRoKCdpbWFnZS8nKSAmJlxuICAgICAgICBwYXJzZUludChyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSkgPFxuICAgICAgICAgIG1lZ2FieXRlc1RvQnl0ZXModGhpcy5tYXhTaXplTUIpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5odHRwLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoYmxvYikgPT4ge1xuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKVxuICAgICAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgbmFtZSlcbiAgICAgICAgICAgIHRoaXMuZmlsZUNoYW5nZS5lbWl0KGZpbGUpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbWFnZUZpbGVFcnJvciA9IHRydWVcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWx0VGV4dENoYW5nZSgnS08nKVxuICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKVxuICAgICAgICAgICAgdGhpcy51cmxDaGFuZ2UuZW1pdCh1cmwpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuaW1hZ2VGaWxlRXJyb3IgPSB0cnVlXG4gICAgICB0aGlzLmhhbmRsZUFsdFRleHRDaGFuZ2UoJ0tPJylcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVNlY29uZGFyeVRleHRDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy51cGxvYWRQcm9ncmVzcykge1xuICAgICAgdGhpcy5oYW5kbGVDYW5jZWxVcGxvYWQoKVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNhbmNlbFVwbG9hZCgpIHtcbiAgICB0aGlzLnVwbG9hZENhbmNlbC5lbWl0KClcbiAgfVxuXG4gIGhhbmRsZURlbGV0ZSgpIHtcbiAgICB0aGlzLmRlbGV0ZS5lbWl0KClcbiAgfVxuXG4gIHJlc2V0RXJyb3JzKCkge1xuICAgIHRoaXMuaW1hZ2VGaWxlRXJyb3IgPSBmYWxzZVxuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBmYWxzZVxuICB9XG5cbiAgdG9nZ2xlQWx0VGV4dElucHV0KCkge1xuICAgIHRoaXMuc2hvd0FsdFRleHRJbnB1dCA9ICF0aGlzLnNob3dBbHRUZXh0SW5wdXRcbiAgfVxuXG4gIGhhbmRsZUFsdFRleHRDaGFuZ2UoYWx0VGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5hbHRUZXh0Q2hhbmdlLmVtaXQoYWx0VGV4dClcbiAgfVxuICBwcml2YXRlIGZpbHRlclR5cGVJbWFnZShmaWxlczogRmlsZVtdKSB7XG4gICAgcmV0dXJuIGZpbGVzLmZpbHRlcigoZmlsZSkgPT4ge1xuICAgICAgcmV0dXJuIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIHJlc2l6ZUFuZEVtaXQoaW1hZ2VUb1Jlc2l6ZTogRmlsZSkge1xuICAgIGNvbnN0IG1heFNpemVCeXRlcyA9IG1lZ2FieXRlc1RvQnl0ZXModGhpcy5tYXhTaXplTUIpXG4gICAgZG93bmdyYWRlSW1hZ2UoaW1hZ2VUb1Jlc2l6ZSwgbWF4U2l6ZUJ5dGVzKS50aGVuKChyZXNpemVkSW1hZ2UpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVUb0VtaXQgPSBuZXcgRmlsZShbcmVzaXplZEltYWdlXSwgaW1hZ2VUb1Jlc2l6ZS5uYW1lKVxuICAgICAgdGhpcy5maWxlQ2hhbmdlLmVtaXQoZmlsZVRvRW1pdClcbiAgICB9KVxuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld1VybDsgdGhlbiB3aXRoSW1hZ2U7IGVsc2Ugd2l0aG91dEltYWdlXCI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICN3aXRoSW1hZ2U+XG4gIDxkaXYgY2xhc3M9XCJ3LTgwIGgtZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgPGduLXVpLWltYWdlLW92ZXJsYXktcHJldmlldyBjbGFzcz1cImgtNDhcIiBbaW1hZ2VVcmxdPVwicHJldmlld1VybFwiPlxuICAgIDwvZ24tdWktaW1hZ2Utb3ZlcmxheS1wcmV2aWV3PlxuICAgIDxnbi11aS10ZXh0LWlucHV0XG4gICAgICAqbmdJZj1cInNob3dBbHRUZXh0SW5wdXRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidpbnB1dC5pbWFnZS5hbHRUZXh0UGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFt2YWx1ZV09XCJhbHRUZXh0ID8/ICcnXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVBbHRUZXh0Q2hhbmdlKCRldmVudClcIlxuICAgICAgZXh0cmFDbGFzcz1cImduLXVpLWVkaXRvci10ZXh0YXJlYVwiXG4gICAgPjwvZ24tdWktdGV4dC1pbnB1dD5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMiBtdC0yXCI+XG4gICAgICA8Z24tdWktYnV0dG9uXG4gICAgICAgIHR5cGU9XCJncmF5XCJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cImhhbmRsZURlbGV0ZSgpXCJcbiAgICAgICAgZGF0YS1jeT1cImRlbGV0ZS1pbWFnZVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1pY29uIGNsYXNzPVwibWUtMSB0ZXh0LXByaW1hcnlcIiBuYW1lPVwiaWNvbm9pckJpblwiPjwvbmctaWNvbj5cbiAgICAgICAge3sgJ2lucHV0LmltYWdlLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgICAgPGduLXVpLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFzaG93QWx0VGV4dElucHV0XCJcbiAgICAgICAgdHlwZT1cImdyYXlcIlxuICAgICAgICAoYnV0dG9uQ2xpY2spPVwidG9nZ2xlQWx0VGV4dElucHV0KClcIlxuICAgICAgPlxuICAgICAgICA8bmctaWNvbiBuYW1lPVwiaWNvbm9pclBsdXNcIiBjbGFzcz1cIm1lLTEgdGV4dC1wcmltYXJ5XCI+PC9uZy1pY29uPlxuICAgICAgICB7eyAnaW5wdXQuaW1hZ2UuZGlzcGxheUFsdFRleHRJbnB1dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZ24tdWktYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjd2l0aG91dEltYWdlPlxuICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGZsZXgtY29sIGdhcC0yXCI+XG4gICAgPGxhYmVsXG4gICAgICBnblVpRmlsZXNEcm9wXG4gICAgICBjbGFzcz1cImZsZXgtMSBib3JkZXItMiBib3JkZXItZGFzaGVkIHJvdW5kZWQtbGcgcC02IGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC00IHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTEwMFwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdib3JkZXItcHJpbWFyeS1saWdodGVyIGJnLXByaW1hcnktd2hpdGUnOiBkcmFnRmlsZXNPdmVyLFxuICAgICAgICAnYm9yZGVyLWdyYXktMzAwJzogIWRyYWdGaWxlc092ZXIsXG4gICAgICAgICdjdXJzb3ItcG9pbnRlciBob3Zlcjpib3JkZXItZ3JheS01MDAnOiAhZ2V0SXNBY3Rpb25CbG9ja2VkKCksXG4gICAgICAgICdjdXJzb3Itbm90LWFsbG93ZWQnOiBkaXNhYmxlZCxcbiAgICAgIH1cIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0SXNBY3Rpb25CbG9ja2VkKCkgPyBudWxsIDogMFwiXG4gICAgICAoa2V5ZG93bi5lbnRlcik9XCJmaWxlSW5wdXQuY2xpY2soKVwiXG4gICAgICAoZHJhZ0ZpbGVzT3Zlcik9XCJoYW5kbGVEcmFnRmlsZXNPdmVyKCRldmVudClcIlxuICAgICAgKGRyb3BGaWxlcyk9XCJoYW5kbGVEcm9wRmlsZXMoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInctMTQgaC0xNCByb3VuZGVkLW1kIGJnLWdyYXktNTAgZ3JpZFwiXG4gICAgICAgICpuZ0lmPVwiIWlzVXBsb2FkSW5Qcm9ncmVzcyAmJiAhaW1hZ2VGaWxlRXJyb3JcIlxuICAgICAgPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgICpuZ0lmPVwiIWRyYWdGaWxlc092ZXJcIlxuICAgICAgICAgIGNsYXNzPVwicGxhY2Utc2VsZi1jZW50ZXIgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICBuYW1lPVwiaWNvbm9pck1lZGlhSW1hZ2VcIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgICpuZ0lmPVwiZHJhZ0ZpbGVzT3ZlclwiXG4gICAgICAgICAgY2xhc3M9XCJwbGFjZS1zZWxmLWNlbnRlciB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyRnJhbWVQbHVzSW5cIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nSWY9XCJpc1VwbG9hZEluUHJvZ3Jlc3MgJiYgIWltYWdlRmlsZUVycm9yXCJcbiAgICAgICAgY2xhc3M9XCJ3LTE0IGgtMTQgZ3JpZCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcmVsYXRpdmVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTEwMCBhYnNvbHV0ZVwiPlxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgY2xhc3M9XCJwbGFjZS1zZWxmLWNlbnRlclwiXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiNTZcIlxuICAgICAgICAgICAgbW9kZT1cImRldGVybWluYXRlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCIxMDBcIlxuICAgICAgICAgID48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeSBhYnNvbHV0ZVwiPlxuICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgY2xhc3M9XCJwbGFjZS1zZWxmLWNlbnRlclwiXG4gICAgICAgICAgICBbZGlhbWV0ZXJdPVwiNTZcIlxuICAgICAgICAgICAgbW9kZT1cImRldGVybWluYXRlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1tYWluIGZvbnQtYm9sZFwiPnt7IHVwbG9hZFByb2dyZXNzIH19JTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidy0xNCBoLTE0IHJvdW5kZWQtbWQgYmctZ3JheS01MCBncmlkXCIgKm5nSWY9XCJpbWFnZUZpbGVFcnJvclwiPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyTWVkaWFJbWFnZVhtYXJrXCJcbiAgICAgICAgICBjbGFzcz1cInBsYWNlLXNlbGYtY2VudGVyIHRleHQtcm9zZS01MDBcIlxuICAgICAgICAgIGRhdGEtY3k9XCJpbWdFcnJvckljb25cIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICA8cCBjbGFzcz1cImZvbnQtbWVkaXVtXCIgZGF0YS1jeT1cImltZ0lucHV0TXNnUHJpbWFyeVwiPlxuICAgICAgICAgIHt7IGdldFByaW1hcnlUZXh0KCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8cFxuICAgICAgICAgIGNsYXNzPVwidGV4dC1zbVwiXG4gICAgICAgICAgZGF0YS1jeT1cImltZ0lucHV0TXNnU2Vjb25kYXJ5XCJcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBpc1VwbG9hZEluUHJvZ3Jlc3NcbiAgICAgICAgICAgICAgPyAnZm9udC1ib2xkIHRleHQtYmx1ZS01MDAgY3Vyc29yLXBvaW50ZXInXG4gICAgICAgICAgICAgIDogJ2ZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAnXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU2Vjb25kYXJ5VGV4dENsaWNrKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0U2Vjb25kYXJ5VGV4dCgpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0XG4gICAgICAgICNmaWxlSW5wdXRcbiAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgY2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAoY2hhbmdlKT1cImhhbmRsZUZpbGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzVXBsb2FkSW5Qcm9ncmVzcyB8fCBkaXNhYmxlZFwiXG4gICAgICAvPlxuICAgIDwvbGFiZWw+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiIXNob3dVcmxJbnB1dFwiIGNsYXNzPVwiZmxleC1ub25lIG10LTJcIj5cbiAgICAgIDxnbi11aS1idXR0b25cbiAgICAgICAgZGF0YS1jeT1cImltZ1VybEJ0blwiXG4gICAgICAgIChidXR0b25DbGljayk9XCJkaXNwbGF5VXJsSW5wdXQoKVwiXG4gICAgICAgIHR5cGU9XCJncmF5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2V4dHJhQ2xhc3NdPVwiZGlzYWJsZWQgJiYgJ2N1cnNvci1ub3QtYWxsb3dlZCdcIlxuICAgICAgPlxuICAgICAgICA8bmctaWNvbiBjbGFzcz1cIm1lLTEgdGV4dC1wcmltYXJ5XCIgbmFtZT1cImljb25vaXJMaW5rXCI+PC9uZy1pY29uPlxuICAgICAgICB7eyAnaW5wdXQuaW1hZ2UuZGlzcGxheVVybElucHV0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9nbi11aS1idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8Z24tdWktdXJsLWlucHV0XG4gICAgICAqbmdJZj1cInNob3dVcmxJbnB1dFwiXG4gICAgICBjbGFzcz1cIm10LTMuNVwiXG4gICAgICBkYXRhLWN5PVwiaW1nVXJsSW5wdXRcIlxuICAgICAgKHVwbG9hZENsaWNrKT1cImRvd25sb2FkVXJsKCRldmVudClcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzVXBsb2FkSW5Qcm9ncmVzcyB8fCBkaXNhYmxlZFwiXG4gICAgPlxuICAgIDwvZ24tdWktdXJsLWlucHV0PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,163 +1,89 @@
1
- import { Component, Input, TemplateRef, Output, EventEmitter, ElementRef, } from '@angular/core';
1
+ import { Component, ElementRef, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
2
2
  import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common';
3
+ import { fromEvent, Subscription } from 'rxjs';
4
+ import { iconoirBank } from '@ng-icons/iconoir';
5
+ import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
6
+ import { matLocationSearchingOutline } from '@ng-icons/material-icons/outline';
7
+ import { KindBadgeComponent } from '../kind-badge/kind-badge.component';
3
8
  import { MarkdownParserComponent } from '../markdown-parser/markdown-parser.component';
4
9
  import { MetadataQualityComponent } from '../metadata-quality/metadata-quality.component';
5
10
  import { ThumbnailComponent } from '../thumbnail/thumbnail.component';
6
- import { propagateToDocumentOnly, removeWhitespace, stripHtml, } from '../../../../../../libs/util/shared/src';
7
- import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
8
- import { matLocationSearchingOutline, matEmailOutline, matPhoneOutline, matLocationOnOutline, } from '@ng-icons/material-icons/outline';
9
- import { matCode } from '@ng-icons/material-icons/baseline';
10
- import { iconoirDatabase, iconoirMap, iconoirInternet } from '@ng-icons/iconoir';
11
- import { TranslateModule } from '@ngx-translate/core';
12
- import { marker } from '@biesbjerg/ngx-translate-extract-marker';
13
- import { fromEvent, Subscription } from 'rxjs';
11
+ import { removeWhitespace, stripHtml } from '../../../../../../libs/util/shared/src';
14
12
  import * as i0 from "@angular/core";
15
- import * as i1 from "@ngx-translate/core";
16
- marker('record.kind.data');
17
- marker('record.kind.reuse');
18
- marker('record.kind.service');
19
13
  export class InternalLinkCardComponent {
20
14
  set size(value) {
21
15
  this._size = value;
22
- this.cardClass = this.sizeClassMap[value] || '';
23
- this.thumbnailContainerClass = this.thumbnailSizeClassMap[value] || 'hidden';
16
+ this.cardClass = `size-${value}`;
24
17
  }
25
18
  get size() {
26
19
  return this._size;
27
20
  }
28
21
  constructor(elementRef) {
29
22
  this.elementRef = elementRef;
23
+ this.linkTarget = '_blank';
30
24
  this.linkHref = null;
31
25
  this.mdSelect = new EventEmitter();
32
26
  this.subscription = new Subscription();
33
- this.cardClass = '';
34
- this.thumbnailContainerClass = '';
35
- this._size = 'M';
36
- this.sizeClassMap = {
37
- L: 'min-h-[190px] md:w-[992px] py-3 px-3 flex items-start gap-5',
38
- M: 'min-h-[140px] md:w-[570px] py-3 px-3 flex items-start gap-4',
39
- S: 'min-h-[220px] md:w-[370px] py-3 px-3 flex gap-4',
40
- XS: 'min-h-[108px] md:w-[570px] py-3 px-3 flex gap-4',
41
- };
42
- this.thumbnailSizeClassMap = {
43
- L: 'w-[190px] h-[180px] rounded-lg overflow-hidden shrink-0',
44
- M: 'w-[110px] h-[140px] rounded-lg overflow-hidden shrink-0',
45
- S: 'hidden',
46
- XS: 'hidden',
47
- };
48
- this.titleClassMap = {
49
- L: 'text-xl line-clamp-2',
50
- M: 'text-base line-clamp-2',
51
- S: 'text-base line-clamp-3',
52
- XS: 'text-base mt-3 line-clamp-2',
53
- };
27
+ this._size = 'L';
54
28
  }
55
29
  ngOnInit() {
56
30
  this.abstract = removeWhitespace(stripHtml(this.record?.abstract));
57
- this.subscription.add(fromEvent(this.elementRef.nativeElement, 'click').subscribe((event) => {
58
- event.preventDefault();
59
- propagateToDocumentOnly(event);
60
- this.mdSelect.emit(this.record);
61
- }));
62
- }
63
- get organization() {
64
- return this.record.ownerOrganization;
65
- }
66
- get contacts() {
67
- return ((this.record.kind === 'dataset'
68
- ? this.record.contactsForResource
69
- : this.record.contacts) || []);
70
- }
71
- getTitleClass() {
72
- return (this.titleClassMap[this._size] +
73
- ' ' +
74
- (this.record.ownerOrganization?.name ? '' : 'mt-3') || '');
75
- }
76
- openExternalUrl(event, url) {
77
- event.stopPropagation();
78
- window.open(url, '_blank');
79
- }
80
- openMailto(event, email) {
81
- event.stopPropagation();
82
- window.open(`mailto:${email}`, '_blank');
83
- }
84
- copyToClipboard(event, text) {
85
- event.stopPropagation();
86
- navigator.clipboard.writeText(text);
31
+ this.subscription.add(fromEvent(this.elementRef.nativeElement, 'click').subscribe(() => this.mdSelect.emit(this.record)));
87
32
  }
88
33
  get shouldShowThumbnail() {
89
34
  return this.size === 'L' || this.size === 'M';
90
35
  }
91
- getKindInfo() {
92
- if (!this.record?.kind)
93
- return { text: '', icon: '' };
94
- switch (this.record.kind.toLowerCase()) {
95
- case 'dataset':
96
- return { text: 'record.kind.data', icon: 'iconoirDatabase' };
97
- case 'reuse':
98
- return { text: 'record.kind.reuse', icon: 'iconoirMap' };
99
- case 'service':
100
- return { text: 'record.kind.service', icon: 'matCode' };
101
- default:
102
- return { text: '', icon: '' };
103
- }
36
+ get displayContactIconOnly() {
37
+ const cardWidth = this.elementRef.nativeElement.getBoundingClientRect().width;
38
+ return (this.record.ownerOrganization?.name &&
39
+ this.metadataQualityDisplay &&
40
+ this.size === 'M' &&
41
+ cardWidth <= 490);
104
42
  }
105
43
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalLinkCardComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
106
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InternalLinkCardComponent, isStandalone: true, selector: "gn-ui-internal-link-card", inputs: { record: "record", metadataQualityDisplay: "metadataQualityDisplay", favoriteTemplate: "favoriteTemplate", linkHref: "linkHref", isGeodata: "isGeodata", size: "size" }, outputs: { mdSelect: "mdSelect" }, providers: [
44
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InternalLinkCardComponent, isStandalone: true, selector: "gn-ui-internal-link-card", inputs: { record: "record", linkTarget: "linkTarget", linkHref: "linkHref", metadataQualityDisplay: "metadataQualityDisplay", favoriteTemplate: "favoriteTemplate", size: "size" }, outputs: { mdSelect: "mdSelect" }, providers: [
107
45
  provideIcons({
46
+ iconoirBank,
108
47
  matLocationSearchingOutline,
109
- matCode,
110
- iconoirDatabase,
111
- iconoirMap,
112
- iconoirInternet,
113
- matEmailOutline,
114
- matPhoneOutline,
115
- matLocationOnOutline,
116
48
  }),
117
49
  provideNgIconsConfig({
118
50
  size: '1.2em',
119
51
  }),
120
- ], ngImport: i0, template: "<div\n class=\"rounded-lg group card-shadow cursor-pointer overflow-hidden hover:bg-gray-50\"\n [ngClass]=\"cardClass\"\n>\n <div class=\"flex flex-row justify-between w-full\">\n <div\n *ngIf=\"shouldShowThumbnail\"\n [ngClass]=\"thumbnailContainerClass\"\n class=\"mr-4 flex flex-col\"\n >\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div\n class=\"flex flex-col flex-1 relative\"\n [ngClass]=\"{\n 'justify-between': record.ownerOrganization?.name && size !== 'XS',\n }\"\n >\n <div class=\"flex items-center space-x-2\">\n <span\n *ngIf=\"getKindInfo().text\"\n class=\"badge-btn text-white text-xs px-2 py-0.5 font-bold shrink-0 bg-primary leading-tight flex items-center justify-evenly h-6 min-h-6\"\n >\n <ng-icon\n class=\"text-[0.9em] text-white mr-1\"\n [name]=\"getKindInfo().icon\"\n ></ng-icon>\n <span class=\"font-medium text-white text-xs\" translate>\n {{ getKindInfo().text }}\n </span>\n </span>\n <span\n *ngIf=\"isGeodata\"\n class=\"badge-btn text-black text-xs px-2 py-0.5 font-bold shrink-0 bg-primary-white leading-tight flex items-center justify-evenly h-6 min-h-6\"\n [ngClass]=\"size === 'L' ? 'w-[164px]' : 'w-8'\"\n >\n <ng-icon\n class=\"text-[0.9em] text-primary-darkest\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <ng-container *ngIf=\"size === 'L'\">\n <span\n class=\"font-medium text-primary-darkest text-xs ml-1\"\n translate\n >\n record.metadata.type\n </span>\n </ng-container>\n </span>\n <div class=\"flex items-center\">\n <gn-ui-metadata-quality\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div class=\"absolute top-0 right-0 items-center\">\n <ng-container\n *ngIf=\"size !== 'XS'\"\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n <div\n class=\"font-medium text-title group-hover:text-primary overflow-hidden break-words\"\n [ngClass]=\"getTitleClass()\"\n >\n {{ record.title }}\n </div>\n <div\n *ngIf=\"size === 'L'\"\n class=\"mt-1 mb-2 font-normal text-xs text-gray-900 line-clamp-2 overflow-hidden\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n *ngIf=\"size !== 'XS' && record.ownerOrganization?.name\"\n class=\"flex items-center justify-evenly bg-gray-50 rounded-lg h-[53px] px-2\"\n >\n <div class=\"flex items-center flex-1 min-w-0\">\n <div\n class=\"w-[45px] h-[45px] rounded-lg overflow-hidden shrink-0 mr-3\"\n >\n <gn-ui-thumbnail\n [thumbnailUrl]=\"\n record.ownerOrganization?.logoUrl?.toString() || ''\n \"\n [fit]=\"'contain'\"\n class=\"w-full h-full rounded-lg\"\n ></gn-ui-thumbnail>\n </div>\n <div *ngIf=\"organization?.name\" class=\"flex-1 w-0 overflow-hidden\">\n <div\n class=\"text-xs text-black font-normal leading-tight truncate\"\n translate\n >\n record.card.metadata.contact\n </div>\n <div class=\"text-xl text-primary-black font-medium truncate\">\n {{ organization.name }}\n </div>\n </div>\n </div>\n <div *ngIf=\"size === 'L'\" class=\"ml-2 flex space-x-2\">\n <div *ngIf=\"organization?.website\" class=\"flex\">\n <button\n [title]=\"organization.website\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest\"\n (click)=\"openExternalUrl($event, organization.website)\"\n >\n <ng-icon name=\"iconoirInternet\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.email\" class=\"flex\">\n <button\n [title]=\"contacts[0].email\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest\"\n data-cy=\"contact-email\"\n (click)=\"openMailto($event, contacts[0].email)\"\n >\n <ng-icon name=\"matEmailOutline\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.phone\" class=\"flex\">\n <button\n [title]=\"'Copy to clipboard'\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest relative group\"\n data-cy=\"contact-phone\"\n (click)=\"copyToClipboard($event, contacts[0].phone)\"\n >\n <ng-icon name=\"matPhoneOutline\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.address\" class=\"flex\">\n <button\n [title]=\"'Copy to clipboard'\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest relative group\"\n data-cy=\"contact-phone\"\n (click)=\"copyToClipboard($event, contacts[0].address)\"\n >\n <ng-icon name=\"matLocationOnOutline\"></ng-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }] }); }
52
+ ], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KindBadgeComponent, selector: "gn-ui-kind-badge", inputs: ["styling", "contentTemplate", "kind", "extraClass"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
121
53
  }
122
54
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalLinkCardComponent, decorators: [{
123
55
  type: Component,
124
56
  args: [{ selector: 'gn-ui-internal-link-card', standalone: true, imports: [
125
57
  NgClass,
126
58
  NgIf,
127
- ThumbnailComponent,
59
+ NgIconComponent,
128
60
  MetadataQualityComponent,
129
61
  NgTemplateOutlet,
130
- NgIconComponent,
131
- TranslateModule,
62
+ KindBadgeComponent,
132
63
  MarkdownParserComponent,
64
+ ThumbnailComponent,
133
65
  ], providers: [
134
66
  provideIcons({
67
+ iconoirBank,
135
68
  matLocationSearchingOutline,
136
- matCode,
137
- iconoirDatabase,
138
- iconoirMap,
139
- iconoirInternet,
140
- matEmailOutline,
141
- matPhoneOutline,
142
- matLocationOnOutline,
143
69
  }),
144
70
  provideNgIconsConfig({
145
71
  size: '1.2em',
146
72
  }),
147
- ], template: "<div\n class=\"rounded-lg group card-shadow cursor-pointer overflow-hidden hover:bg-gray-50\"\n [ngClass]=\"cardClass\"\n>\n <div class=\"flex flex-row justify-between w-full\">\n <div\n *ngIf=\"shouldShowThumbnail\"\n [ngClass]=\"thumbnailContainerClass\"\n class=\"mr-4 flex flex-col\"\n >\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div\n class=\"flex flex-col flex-1 relative\"\n [ngClass]=\"{\n 'justify-between': record.ownerOrganization?.name && size !== 'XS',\n }\"\n >\n <div class=\"flex items-center space-x-2\">\n <span\n *ngIf=\"getKindInfo().text\"\n class=\"badge-btn text-white text-xs px-2 py-0.5 font-bold shrink-0 bg-primary leading-tight flex items-center justify-evenly h-6 min-h-6\"\n >\n <ng-icon\n class=\"text-[0.9em] text-white mr-1\"\n [name]=\"getKindInfo().icon\"\n ></ng-icon>\n <span class=\"font-medium text-white text-xs\" translate>\n {{ getKindInfo().text }}\n </span>\n </span>\n <span\n *ngIf=\"isGeodata\"\n class=\"badge-btn text-black text-xs px-2 py-0.5 font-bold shrink-0 bg-primary-white leading-tight flex items-center justify-evenly h-6 min-h-6\"\n [ngClass]=\"size === 'L' ? 'w-[164px]' : 'w-8'\"\n >\n <ng-icon\n class=\"text-[0.9em] text-primary-darkest\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <ng-container *ngIf=\"size === 'L'\">\n <span\n class=\"font-medium text-primary-darkest text-xs ml-1\"\n translate\n >\n record.metadata.type\n </span>\n </ng-container>\n </span>\n <div class=\"flex items-center\">\n <gn-ui-metadata-quality\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div class=\"absolute top-0 right-0 items-center\">\n <ng-container\n *ngIf=\"size !== 'XS'\"\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n <div\n class=\"font-medium text-title group-hover:text-primary overflow-hidden break-words\"\n [ngClass]=\"getTitleClass()\"\n >\n {{ record.title }}\n </div>\n <div\n *ngIf=\"size === 'L'\"\n class=\"mt-1 mb-2 font-normal text-xs text-gray-900 line-clamp-2 overflow-hidden\"\n >\n <gn-ui-markdown-parser\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n ></gn-ui-markdown-parser>\n </div>\n <div\n *ngIf=\"size !== 'XS' && record.ownerOrganization?.name\"\n class=\"flex items-center justify-evenly bg-gray-50 rounded-lg h-[53px] px-2\"\n >\n <div class=\"flex items-center flex-1 min-w-0\">\n <div\n class=\"w-[45px] h-[45px] rounded-lg overflow-hidden shrink-0 mr-3\"\n >\n <gn-ui-thumbnail\n [thumbnailUrl]=\"\n record.ownerOrganization?.logoUrl?.toString() || ''\n \"\n [fit]=\"'contain'\"\n class=\"w-full h-full rounded-lg\"\n ></gn-ui-thumbnail>\n </div>\n <div *ngIf=\"organization?.name\" class=\"flex-1 w-0 overflow-hidden\">\n <div\n class=\"text-xs text-black font-normal leading-tight truncate\"\n translate\n >\n record.card.metadata.contact\n </div>\n <div class=\"text-xl text-primary-black font-medium truncate\">\n {{ organization.name }}\n </div>\n </div>\n </div>\n <div *ngIf=\"size === 'L'\" class=\"ml-2 flex space-x-2\">\n <div *ngIf=\"organization?.website\" class=\"flex\">\n <button\n [title]=\"organization.website\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest\"\n (click)=\"openExternalUrl($event, organization.website)\"\n >\n <ng-icon name=\"iconoirInternet\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.email\" class=\"flex\">\n <button\n [title]=\"contacts[0].email\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest\"\n data-cy=\"contact-email\"\n (click)=\"openMailto($event, contacts[0].email)\"\n >\n <ng-icon name=\"matEmailOutline\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.phone\" class=\"flex\">\n <button\n [title]=\"'Copy to clipboard'\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest relative group\"\n data-cy=\"contact-phone\"\n (click)=\"copyToClipboard($event, contacts[0].phone)\"\n >\n <ng-icon name=\"matPhoneOutline\"></ng-icon>\n </button>\n </div>\n <div *ngIf=\"contacts[0]?.address\" class=\"flex\">\n <button\n [title]=\"'Copy to clipboard'\"\n class=\"w-[40px] h-[32px] flex items-center justify-center rounded-lg border border-[#D4D3D7] px-[8px] py-[4px] hover:bg-primary-lightest relative group\"\n data-cy=\"contact-phone\"\n (click)=\"copyToClipboard($event, contacts[0].address)\"\n >\n <ng-icon name=\"matLocationOnOutline\"></ng-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
73
+ ], template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"] }]
148
74
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { record: [{
149
75
  type: Input
150
- }], metadataQualityDisplay: [{
151
- type: Input
152
- }], favoriteTemplate: [{
76
+ }], linkTarget: [{
153
77
  type: Input
154
78
  }], linkHref: [{
155
79
  type: Input
156
- }], isGeodata: [{
80
+ }], metadataQualityDisplay: [{
81
+ type: Input
82
+ }], favoriteTemplate: [{
157
83
  type: Input
158
84
  }], size: [{
159
85
  type: Input
160
86
  }], mdSelect: [{
161
87
  type: Output
162
88
  }] } });
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbnRlcm5hbC1saW5rLWNhcmQvaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbnRlcm5hbC1saW5rLWNhcmQvaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFdBQVcsRUFFWCxNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsR0FDWCxNQUFNLGVBQWUsQ0FBQTtBQUt0QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3RGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFBO0FBQ3pGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3JFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLFNBQVMsR0FDVixNQUFNLHdDQUF3QyxDQUFBO0FBQy9DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsWUFBWSxFQUNaLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLGVBQWUsRUFDZixvQkFBb0IsR0FDckIsTUFBTSxrQ0FBa0MsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsZUFBZSxF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QixJQUFJLEVBQUUsT0FBTzt5QkFDZCxDQUFDO3FCQUNIOytFQUtRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDTyxJQUFJO3NCQUFoQixLQUFLO2dCQVFJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIE9yZ2FuaXphdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgTmdDbGFzcywgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IE1hcmtkb3duUGFyc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFya2Rvd24tcGFyc2VyL21hcmtkb3duLXBhcnNlci5jb21wb25lbnQnXG5pbXBvcnQgeyBNZXRhZGF0YVF1YWxpdHlDb21wb25lbnQgfSBmcm9tICcuLi9tZXRhZGF0YS1xdWFsaXR5L21ldGFkYXRhLXF1YWxpdHkuY29tcG9uZW50J1xuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGh1bWJuYWlsL3RodW1ibmFpbC5jb21wb25lbnQnXG5pbXBvcnQge1xuICBwcm9wYWdhdGVUb0RvY3VtZW50T25seSxcbiAgcmVtb3ZlV2hpdGVzcGFjZSxcbiAgc3RyaXBIdG1sLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQge1xuICBtYXRMb2NhdGlvblNlYXJjaGluZ091dGxpbmUsXG4gIG1hdEVtYWlsT3V0bGluZSxcbiAgbWF0UGhvbmVPdXRsaW5lLFxuICBtYXRMb2NhdGlvbk9uT3V0bGluZSxcbn0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBtYXRDb2RlIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL2Jhc2VsaW5lJ1xuaW1wb3J0IHsgaWNvbm9pckRhdGFiYXNlLCBpY29ub2lyTWFwLCBpY29ub2lySW50ZXJuZXQgfSBmcm9tICdAbmctaWNvbnMvaWNvbm9pcidcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnXG5pbXBvcnQgeyBtYXJrZXIgfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5cbm1hcmtlcigncmVjb3JkLmtpbmQuZGF0YScpXG5tYXJrZXIoJ3JlY29yZC5raW5kLnJldXNlJylcbm1hcmtlcigncmVjb3JkLmtpbmQuc2VydmljZScpXG5cbnR5cGUgQ2FyZFNpemUgPSAnTCcgfCAnTScgfCAnUycgfCAnWFMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLWludGVybmFsLWxpbmstY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICAgIE1ldGFkYXRhUXVhbGl0eUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIE5nSWNvbkNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTWFya2Rvd25QYXJzZXJDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBtYXRMb2NhdGlvblNlYXJjaGluZ091dGxpbmUsXG4gICAgICBtYXRDb2RlLFxuICAgICAgaWNvbm9pckRhdGFiYXNlLFxuICAgICAgaWNvbm9pck1hcCxcbiAgICAgIGljb25vaXJJbnRlcm5ldCxcbiAgICAgIG1hdEVtYWlsT3V0bGluZSxcbiAgICAgIG1hdFBob25lT3V0bGluZSxcbiAgICAgIG1hdExvY2F0aW9uT25PdXRsaW5lLFxuICAgIH0pLFxuICAgIHByb3ZpZGVOZ0ljb25zQ29uZmlnKHtcbiAgICAgIHNpemU6ICcxLjJlbScsXG4gICAgfSksXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbExpbmtDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcmVjb3JkOiBDYXRhbG9nUmVjb3JkXG4gIEBJbnB1dCgpIG1ldGFkYXRhUXVhbGl0eURpc3BsYXk6IGJvb2xlYW5cbiAgQElucHV0KCkgZmF2b3JpdGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IENhdGFsb2dSZWNvcmQgfT5cbiAgQElucHV0KCkgbGlua0hyZWY6IHN0cmluZyA9IG51bGxcbiAgQElucHV0KCkgaXNHZW9kYXRhOiBib29sZWFuXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiBDYXJkU2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSB2YWx1ZVxuICAgIHRoaXMuY2FyZENsYXNzID0gdGhpcy5zaXplQ2xhc3NNYXBbdmFsdWVdIHx8ICcnXG4gICAgdGhpcy50aHVtYm5haWxDb250YWluZXJDbGFzcyA9IHRoaXMudGh1bWJuYWlsU2l6ZUNsYXNzTWFwW3ZhbHVlXSB8fCAnaGlkZGVuJ1xuICB9XG4gIGdldCBzaXplKCk6IENhcmRTaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZVxuICB9XG4gIEBPdXRwdXQoKSBtZFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2F0YWxvZ1JlY29yZD4oKVxuICBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKClcblxuICBhYnN0cmFjdDogc3RyaW5nXG5cbiAgY2FyZENsYXNzID0gJydcbiAgdGh1bWJuYWlsQ29udGFpbmVyQ2xhc3MgPSAnJ1xuXG4gIHByaXZhdGUgX3NpemU6IENhcmRTaXplID0gJ00nXG5cbiAgcHJpdmF0ZSByZWFkb25seSBzaXplQ2xhc3NNYXA6IFJlY29yZDxDYXJkU2l6ZSwgc3RyaW5nPiA9IHtcbiAgICBMOiAnbWluLWgtWzE5MHB4XSBtZDp3LVs5OTJweF0gcHktMyBweC0zIGZsZXggaXRlbXMtc3RhcnQgZ2FwLTUnLFxuICAgIE06ICdtaW4taC1bMTQwcHhdIG1kOnctWzU3MHB4XSBweS0zIHB4LTMgZmxleCBpdGVtcy1zdGFydCBnYXAtNCcsXG4gICAgUzogJ21pbi1oLVsyMjBweF0gbWQ6dy1bMzcwcHhdIHB5LTMgcHgtMyBmbGV4IGdhcC00JyxcbiAgICBYUzogJ21pbi1oLVsxMDhweF0gbWQ6dy1bNTcwcHhdIHB5LTMgcHgtMyBmbGV4IGdhcC00JyxcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGh1bWJuYWlsU2l6ZUNsYXNzTWFwOiBSZWNvcmQ8Q2FyZFNpemUsIHN0cmluZz4gPSB7XG4gICAgTDogJ3ctWzE5MHB4XSBoLVsxODBweF0gcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gc2hyaW5rLTAnLFxuICAgIE06ICd3LVsxMTBweF0gaC1bMTQwcHhdIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuIHNocmluay0wJyxcbiAgICBTOiAnaGlkZGVuJyxcbiAgICBYUzogJ2hpZGRlbicsXG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlQ2xhc3NNYXA6IFJlY29yZDxDYXJkU2l6ZSwgc3RyaW5nPiA9IHtcbiAgICBMOiAndGV4dC14bCBsaW5lLWNsYW1wLTInLFxuICAgIE06ICd0ZXh0LWJhc2UgbGluZS1jbGFtcC0yJyxcbiAgICBTOiAndGV4dC1iYXNlIGxpbmUtY2xhbXAtMycsXG4gICAgWFM6ICd0ZXh0LWJhc2UgbXQtMyBsaW5lLWNsYW1wLTInLFxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hYnN0cmFjdCA9IHJlbW92ZVdoaXRlc3BhY2Uoc3RyaXBIdG1sKHRoaXMucmVjb3JkPy5hYnN0cmFjdCkpXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKS5zdWJzY3JpYmUoXG4gICAgICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgcHJvcGFnYXRlVG9Eb2N1bWVudE9ubHkoZXZlbnQpXG4gICAgICAgICAgdGhpcy5tZFNlbGVjdC5lbWl0KHRoaXMucmVjb3JkKVxuICAgICAgICB9XG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgZ2V0IG9yZ2FuaXphdGlvbigpOiBPcmdhbml6YXRpb24ge1xuICAgIHJldHVybiB0aGlzLnJlY29yZC5vd25lck9yZ2FuaXphdGlvblxuICB9XG5cbiAgZ2V0IGNvbnRhY3RzKCkge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5yZWNvcmQua2luZCA9PT0gJ2RhdGFzZXQnXG4gICAgICAgID8gdGhpcy5yZWNvcmQuY29udGFjdHNGb3JSZXNvdXJjZVxuICAgICAgICA6IHRoaXMucmVjb3JkLmNvbnRhY3RzKSB8fCBbXVxuICAgIClcbiAgfVxuXG4gIGdldFRpdGxlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudGl0bGVDbGFzc01hcFt0aGlzLl9zaXplXSArXG4gICAgICAgICcgJyArXG4gICAgICAgICh0aGlzLnJlY29yZC5vd25lck9yZ2FuaXphdGlvbj8ubmFtZSA/ICcnIDogJ210LTMnKSB8fCAnJ1xuICAgIClcbiAgfVxuXG4gIG9wZW5FeHRlcm5hbFVybChldmVudDogRXZlbnQsIHVybDogVVJMKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKVxuICB9XG5cbiAgb3Blbk1haWx0byhldmVudDogRXZlbnQsIGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHdpbmRvdy5vcGVuKGBtYWlsdG86JHtlbWFpbH1gLCAnX2JsYW5rJylcbiAgfVxuXG4gIGNvcHlUb0NsaXBib2FyZChldmVudDogRXZlbnQsIHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dClcbiAgfVxuXG4gIGdldCBzaG91bGRTaG93VGh1bWJuYWlsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNpemUgPT09ICdMJyB8fCB0aGlzLnNpemUgPT09ICdNJ1xuICB9XG5cbiAgZ2V0S2luZEluZm8oKTogeyB0ZXh0OiBzdHJpbmc7IGljb246IHN0cmluZyB9IHtcbiAgICBpZiAoIXRoaXMucmVjb3JkPy5raW5kKSByZXR1cm4geyB0ZXh0OiAnJywgaWNvbjogJycgfVxuXG4gICAgc3dpdGNoICh0aGlzLnJlY29yZC5raW5kLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIGNhc2UgJ2RhdGFzZXQnOlxuICAgICAgICByZXR1cm4geyB0ZXh0OiAncmVjb3JkLmtpbmQuZGF0YScsIGljb246ICdpY29ub2lyRGF0YWJhc2UnIH1cbiAgICAgIGNhc2UgJ3JldXNlJzpcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogJ3JlY29yZC5raW5kLnJldXNlJywgaWNvbjogJ2ljb25vaXJNYXAnIH1cbiAgICAgIGNhc2UgJ3NlcnZpY2UnOlxuICAgICAgICByZXR1cm4geyB0ZXh0OiAncmVjb3JkLmtpbmQuc2VydmljZScsIGljb246ICdtYXRDb2RlJyB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyB0ZXh0OiAnJywgaWNvbjogJycgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInJvdW5kZWQtbGcgZ3JvdXAgY2FyZC1zaGFkb3cgY3Vyc29yLXBvaW50ZXIgb3ZlcmZsb3ctaGlkZGVuIGhvdmVyOmJnLWdyYXktNTBcIlxuICBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsXCI+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJzaG91bGRTaG93VGh1bWJuYWlsXCJcbiAgICAgIFtuZ0NsYXNzXT1cInRodW1ibmFpbENvbnRhaW5lckNsYXNzXCJcbiAgICAgIGNsYXNzPVwibXItNCBmbGV4IGZsZXgtY29sXCJcbiAgICA+XG4gICAgICA8Z24tdWktdGh1bWJuYWlsXG4gICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXJcIlxuICAgICAgICBbdGh1bWJuYWlsVXJsXT1cInJlY29yZC5vdmVydmlld3M/LlswXT8udXJsPy50b1N0cmluZygpIHx8ICcnXCJcbiAgICAgICAgW2ZpdF09XCInY292ZXInXCJcbiAgICAgID48L2duLXVpLXRodW1ibmFpbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZmxleC0xIHJlbGF0aXZlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2p1c3RpZnktYmV0d2Vlbic6IHJlY29yZC5vd25lck9yZ2FuaXphdGlvbj8ubmFtZSAmJiBzaXplICE9PSAnWFMnLFxuICAgICAgfVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiZ2V0S2luZEluZm8oKS50ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImJhZGdlLWJ0biB0ZXh0LXdoaXRlIHRleHQteHMgcHgtMiBweS0wLjUgZm9udC1ib2xkIHNocmluay0wIGJnLXByaW1hcnkgbGVhZGluZy10aWdodCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWV2ZW5seSBoLTYgbWluLWgtNlwiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVswLjllbV0gdGV4dC13aGl0ZSBtci0xXCJcbiAgICAgICAgICAgIFtuYW1lXT1cImdldEtpbmRJbmZvKCkuaWNvblwiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdGV4dC14c1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIHt7IGdldEtpbmRJbmZvKCkudGV4dCB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiaXNHZW9kYXRhXCJcbiAgICAgICAgICBjbGFzcz1cImJhZGdlLWJ0biB0ZXh0LWJsYWNrIHRleHQteHMgcHgtMiBweS0wLjUgZm9udC1ib2xkIHNocmluay0wIGJnLXByaW1hcnktd2hpdGUgbGVhZGluZy10aWdodCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWV2ZW5seSBoLTYgbWluLWgtNlwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwic2l6ZSA9PT0gJ0wnID8gJ3ctWzE2NHB4XScgOiAndy04J1wiXG4gICAgICAgID5cbiAgICAgICAgICA8bmctaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVswLjllbV0gdGV4dC1wcmltYXJ5LWRhcmtlc3RcIlxuICAgICAgICAgICAgbmFtZT1cIm1hdExvY2F0aW9uU2VhcmNoaW5nT3V0bGluZVwiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2l6ZSA9PT0gJ0wnXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtcHJpbWFyeS1kYXJrZXN0IHRleHQteHMgbWwtMVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICByZWNvcmQubWV0YWRhdGEudHlwZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxnbi11aS1tZXRhZGF0YS1xdWFsaXR5XG4gICAgICAgICAgICBbc21hbGxlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFttZXRhZGF0YV09XCJyZWNvcmRcIlxuICAgICAgICAgICAgW21ldGFkYXRhUXVhbGl0eURpc3BsYXldPVwibWV0YWRhdGFRdWFsaXR5RGlzcGxheVwiXG4gICAgICAgICAgPjwvZ24tdWktbWV0YWRhdGEtcXVhbGl0eT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCByaWdodC0wIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwic2l6ZSAhPT0gJ1hTJ1wiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmYXZvcml0ZVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogcmVjb3JkIH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LXRpdGxlIGdyb3VwLWhvdmVyOnRleHQtcHJpbWFyeSBvdmVyZmxvdy1oaWRkZW4gYnJlYWstd29yZHNcIlxuICAgICAgICBbbmdDbGFzc109XCJnZXRUaXRsZUNsYXNzKClcIlxuICAgICAgPlxuICAgICAgICB7eyByZWNvcmQudGl0bGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNpemUgPT09ICdMJ1wiXG4gICAgICAgIGNsYXNzPVwibXQtMSBtYi0yIGZvbnQtbm9ybWFsIHRleHQteHMgdGV4dC1ncmF5LTkwMCBsaW5lLWNsYW1wLTIgb3ZlcmZsb3ctaGlkZGVuXCJcbiAgICAgID5cbiAgICAgICAgPGduLXVpLW1hcmtkb3duLXBhcnNlclxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJhYnN0cmFjdFwiXG4gICAgICAgICAgW3doaXRvdXRTdHlsZXNdPVwidHJ1ZVwiXG4gICAgICAgID48L2duLXVpLW1hcmtkb3duLXBhcnNlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cInNpemUgIT09ICdYUycgJiYgcmVjb3JkLm93bmVyT3JnYW5pemF0aW9uPy5uYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWV2ZW5seSBiZy1ncmF5LTUwIHJvdW5kZWQtbGcgaC1bNTNweF0gcHgtMlwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBmbGV4LTEgbWluLXctMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwidy1bNDVweF0gaC1bNDVweF0gcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gc2hyaW5rLTAgbXItM1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGduLXVpLXRodW1ibmFpbFxuICAgICAgICAgICAgICBbdGh1bWJuYWlsVXJsXT1cIlxuICAgICAgICAgICAgICAgIHJlY29yZC5vd25lck9yZ2FuaXphdGlvbj8ubG9nb1VybD8udG9TdHJpbmcoKSB8fCAnJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZml0XT1cIidjb250YWluJ1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCByb3VuZGVkLWxnXCJcbiAgICAgICAgICAgID48L2duLXVpLXRodW1ibmFpbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3JnYW5pemF0aW9uPy5uYW1lXCIgY2xhc3M9XCJmbGV4LTEgdy0wIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQteHMgdGV4dC1ibGFjayBmb250LW5vcm1hbCBsZWFkaW5nLXRpZ2h0IHRydW5jYXRlXCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHJlY29yZC5jYXJkLm1ldGFkYXRhLmNvbnRhY3RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQteGwgdGV4dC1wcmltYXJ5LWJsYWNrIGZvbnQtbWVkaXVtIHRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIHt7IG9yZ2FuaXphdGlvbi5uYW1lIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaXplID09PSAnTCdcIiBjbGFzcz1cIm1sLTIgZmxleCBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3JnYW5pemF0aW9uPy53ZWJzaXRlXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJvcmdhbml6YXRpb24ud2Vic2l0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1bNDBweF0gaC1bMzJweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLVsjRDREM0Q3XSBweC1bOHB4XSBweS1bNHB4XSBob3ZlcjpiZy1wcmltYXJ5LWxpZ2h0ZXN0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5FeHRlcm5hbFVybCgkZXZlbnQsIG9yZ2FuaXphdGlvbi53ZWJzaXRlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1pY29uIG5hbWU9XCJpY29ub2lySW50ZXJuZXRcIj48L25nLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGFjdHNbMF0/LmVtYWlsXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJjb250YWN0c1swXS5lbWFpbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidy1bNDBweF0gaC1bMzJweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLVsjRDREM0Q3XSBweC1bOHB4XSBweS1bNHB4XSBob3ZlcjpiZy1wcmltYXJ5LWxpZ2h0ZXN0XCJcbiAgICAgICAgICAgICAgZGF0YS1jeT1cImNvbnRhY3QtZW1haWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1haWx0bygkZXZlbnQsIGNvbnRhY3RzWzBdLmVtYWlsKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRFbWFpbE91dGxpbmVcIj48L25nLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGFjdHNbMF0/LnBob25lXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ29weSB0byBjbGlwYm9hcmQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LVs0MHB4XSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItWyNENEQzRDddIHB4LVs4cHhdIHB5LVs0cHhdIGhvdmVyOmJnLXByaW1hcnktbGlnaHRlc3QgcmVsYXRpdmUgZ3JvdXBcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiY29udGFjdC1waG9uZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJGV2ZW50LCBjb250YWN0c1swXS5waG9uZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctaWNvbiBuYW1lPVwibWF0UGhvbmVPdXRsaW5lXCI+PC9uZy1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRhY3RzWzBdPy5hZGRyZXNzXCIgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInQ29weSB0byBjbGlwYm9hcmQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3LVs0MHB4XSBoLVszMnB4XSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItWyNENEQzRDddIHB4LVs4cHhdIHB5LVs0cHhdIGhvdmVyOmJnLXByaW1hcnktbGlnaHRlc3QgcmVsYXRpdmUgZ3JvdXBcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiY29udGFjdC1waG9uZVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoJGV2ZW50LCBjb250YWN0c1swXS5hZGRyZXNzKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRMb2NhdGlvbk9uT3V0bGluZVwiPjwvbmctaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbnRlcm5hbC1saW5rLWNhcmQvaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9pbnRlcm5hbC1saW5rLWNhcmQvaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUU5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQTtBQUN0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQTtBQUN6RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdD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bnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE5nQ2xhc3MsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBpY29ub2lyQmFuayB9IGZyb20gJ0BuZy1pY29ucy9pY29ub2lyJ1xuaW1wb3J0IHtcbiAgTmdJY29uQ29tcG9uZW50LFxuICBwcm92aWRlSWNvbnMsXG4gIHByb3ZpZGVOZ0ljb25zQ29uZmlnLFxufSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IG1hdExvY2F0aW9uU2VhcmNoaW5nT3V0bGluZSB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9vdXRsaW5lJ1xuaW1wb3J0IHsgQ2F0YWxvZ1JlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IEtpbmRCYWRnZUNvbXBvbmVudCB9IGZyb20gJy4uL2tpbmQtYmFkZ2Uva2luZC1iYWRnZS5jb21wb25lbnQnXG5pbXBvcnQgeyBNYXJrZG93blBhcnNlckNvbXBvbmVudCB9IGZyb20gJy4uL21hcmtkb3duLXBhcnNlci9tYXJrZG93bi1wYXJzZXIuY29tcG9uZW50J1xuaW1wb3J0IHsgTWV0YWRhdGFRdWFsaXR5Q29tcG9uZW50IH0gZnJvbSAnLi4vbWV0YWRhdGEtcXVhbGl0eS9tZXRhZGF0YS1xdWFsaXR5LmNvbXBvbmVudCdcbmltcG9ydCB7IFRodW1ibmFpbENvbXBvbmVudCB9IGZyb20gJy4uL3RodW1ibmFpbC90aHVtYm5haWwuY29tcG9uZW50J1xuaW1wb3J0IHsgcmVtb3ZlV2hpdGVzcGFjZSwgc3RyaXBIdG1sIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5cbnR5cGUgQ2FyZFNpemUgPSAnTCcgfCAnTScgfCAnUycgfCAnWFMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLWludGVybmFsLWxpbmstY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nSWYsXG4gICAgTmdJY29uQ29tcG9uZW50LFxuICAgIE1ldGFkYXRhUXVhbGl0eUNvbXBvbmVudCxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEtpbmRCYWRnZUNvbXBvbmVudCxcbiAgICBNYXJrZG93blBhcnNlckNvbXBvbmVudCxcbiAgICBUaHVtYm5haWxDb21wb25lbnQsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBpY29ub2lyQmFuayxcbiAgICAgIG1hdExvY2F0aW9uU2VhcmNoaW5nT3V0bGluZSxcbiAgICB9KSxcbiAgICBwcm92aWRlTmdJY29uc0NvbmZpZyh7XG4gICAgICBzaXplOiAnMS4yZW0nLFxuICAgIH0pLFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW50ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEludGVybmFsTGlua0NhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSByZWNvcmQ6IENhdGFsb2dSZWNvcmRcbiAgQElucHV0KCkgbGlua1RhcmdldCA9ICdfYmxhbmsnXG4gIEBJbnB1dCgpIGxpbmtIcmVmOiBzdHJpbmcgPSBudWxsXG4gIEBJbnB1dCgpIG1ldGFkYXRhUXVhbGl0eURpc3BsYXk6IGJvb2xlYW5cbiAgQElucHV0KCkgZmF2b3JpdGVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IENhdGFsb2dSZWNvcmQgfT5cbiAgQElucHV0KCkgc2V0IHNpemUodmFsdWU6IENhcmRTaXplKSB7XG4gICAgdGhpcy5fc2l6ZSA9IHZhbHVlXG4gICAgdGhpcy5jYXJkQ2xhc3MgPSBgc2l6ZS0ke3ZhbHVlfWBcbiAgfVxuICBnZXQgc2l6ZSgpOiBDYXJkU2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemVcbiAgfVxuICBAT3V0cHV0KCkgbWRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPENhdGFsb2dSZWNvcmQ+KClcbiAgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpXG5cbiAgYWJzdHJhY3Q6IHN0cmluZ1xuICBjYXJkQ2xhc3M6IHN0cmluZ1xuXG4gIHByaXZhdGUgX3NpemU6IENhcmRTaXplID0gJ0wnXG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hYnN0cmFjdCA9IHJlbW92ZVdoaXRlc3BhY2Uoc3RyaXBIdG1sKHRoaXMucmVjb3JkPy5hYnN0cmFjdCkpXG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnY2xpY2snKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgICAgdGhpcy5tZFNlbGVjdC5lbWl0KHRoaXMucmVjb3JkKVxuICAgICAgKVxuICAgIClcbiAgfVxuICBnZXQgc2hvdWxkU2hvd1RodW1ibmFpbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaXplID09PSAnTCcgfHwgdGhpcy5zaXplID09PSAnTSdcbiAgfVxuXG4gIGdldCBkaXNwbGF5Q29udGFjdEljb25Pbmx5KCkge1xuICAgIGNvbnN0IGNhcmRXaWR0aCA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnJlY29yZC5vd25lck9yZ2FuaXphdGlvbj8ubmFtZSAmJlxuICAgICAgdGhpcy5tZXRhZGF0YVF1YWxpdHlEaXNwbGF5ICYmXG4gICAgICB0aGlzLnNpemUgPT09ICdNJyAmJlxuICAgICAgY2FyZFdpZHRoIDw9IDQ5MFxuICAgIClcbiAgfVxufVxuIiwiPGFcbiAgW2F0dHIuaHJlZl09XCJsaW5rSHJlZlwiXG4gIFt0YXJnZXRdPVwibGlua1RhcmdldFwiXG4gIGNsYXNzPVwicmVjb3JkLWNhcmRcIlxuICBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIlxuPlxuICA8ZGl2ICpuZ0lmPVwic2hvdWxkU2hvd1RodW1ibmFpbFwiIGNsYXNzPVwicmVjb3JkLWNhcmRfX3RodW1ibmFpbFwiPlxuICAgIDxnbi11aS10aHVtYm5haWxcbiAgICAgIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBvYmplY3QtY292ZXJcIlxuICAgICAgW3RodW1ibmFpbFVybF09XCJyZWNvcmQub3ZlcnZpZXdzPy5bMF0/LnVybD8udG9TdHJpbmcoKSB8fCAnJ1wiXG4gICAgICBbZml0XT1cIidjb3ZlcidcIlxuICAgID48L2duLXVpLXRodW1ibmFpbD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJncm93IHB0LTFcIiBbbmdDbGFzc109XCJzaG91bGRTaG93VGh1bWJuYWlsID8gJ3NtOnctMCcgOiAnJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0yIGgtZnVsbFwiPlxuICAgICAgPGg0XG4gICAgICAgIGNsYXNzPVwicmVjb3JkLWNhcmRfX3RpdGxlXCJcbiAgICAgICAgZGF0YS1jeT1cInJlY29yZFRpdGxlXCJcbiAgICAgICAgW3RpdGxlXT1cInJlY29yZC50aXRsZVwiXG4gICAgICA+XG4gICAgICAgIHt7IHJlY29yZC50aXRsZSB9fVxuICAgICAgPC9oND5cbiAgICAgIDxkaXYgY2xhc3M9XCJncm93XCI+XG4gICAgICAgIDxnbi11aS1tYXJrZG93bi1wYXJzZXJcbiAgICAgICAgICBkYXRhLWN5PVwicmVjb3JkQWJzdHJhY3RcIlxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJhYnN0cmFjdFwiXG4gICAgICAgICAgW3doaXRvdXRTdHlsZXNdPVwidHJ1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJyZWNvcmQtY2FyZF9fYWJzdHJhY3RcIlxuICAgICAgICAgIFt0aXRsZV09XCJhYnN0cmFjdFwiXG4gICAgICAgID48L2duLXVpLW1hcmtkb3duLXBhcnNlcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1jYXJkX19mb290ZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtY3k9XCJyZWNvcmRPcmdcIlxuICAgICAgICAgICpuZ0lmPVwicmVjb3JkLm93bmVyT3JnYW5pemF0aW9uPy5uYW1lXCJcbiAgICAgICAgICBjbGFzcz1cImdyb3cgZmxleCBmbGV4LXJvdyBnYXAtMSBpdGVtcy1jZW50ZXIgdGV4dC1wcmltYXJ5LWxpZ2h0ZXJcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc3BsYXlDb250YWN0SWNvbk9ubHkgPyAnanVzdGlmeS1jZW50ZXInIDogJydcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIG5hbWU9XCJpY29ub2lyQmFua1wiXG4gICAgICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSAtdHJhbnNsYXRlLXktWzAuNXB4XSBzaHJpbmstMFwiXG4gICAgICAgICAgICBbdGl0bGVdPVwicmVjb3JkLm93bmVyT3JnYW5pemF0aW9uLm5hbWVcIlxuICAgICAgICAgID48L25nLWljb24+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIWRpc3BsYXlDb250YWN0SWNvbk9ubHlcIlxuICAgICAgICAgICAgZGF0YS1jeT1cInJlY29yZE9yZ05hbWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJsaW5lLWNsYW1wLTFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInJlY29yZC5vd25lck9yZ2FuaXphdGlvbi5uYW1lXCJcbiAgICAgICAgICAgID57eyByZWNvcmQub3duZXJPcmdhbml6YXRpb24ubmFtZSB9fTwvc3BhblxuICAgICAgICAgID5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtY2FyZF9fZm9vdGVyX19vdGhlclwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwieHM6Ym9yZGVyLXIgbGFzdDpib3JkZXItci0wIGZsZXggZ3JvdyBnYXAtNCBweC00IGxhc3Q6cHItMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGduLXVpLWtpbmQtYmFkZ2VcbiAgICAgICAgICAgICAgW2V4dHJhQ2xhc3NdPVwiJ3RleHQtWzEuMmVtXSdcIlxuICAgICAgICAgICAgICBbc3R5bGluZ109XCInZ3JheSdcIlxuICAgICAgICAgICAgICBba2luZF09XCJyZWNvcmQ/LmtpbmRcIlxuICAgICAgICAgICAgICBbY29udGVudFRlbXBsYXRlXT1cImN1c3RvbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwdC0xXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21UZW1wbGF0ZT48L25nLXRlbXBsYXRlXG4gICAgICAgICAgICA+PC9nbi11aS1raW5kLWJhZGdlPlxuICAgICAgICAgICAgPGduLXVpLW1ldGFkYXRhLXF1YWxpdHlcbiAgICAgICAgICAgICAgKm5nSWY9XCJtZXRhZGF0YVF1YWxpdHlEaXNwbGF5XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtaW4tdy1bMTEzcHhdXCJcbiAgICAgICAgICAgICAgW3NtYWxsZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFttZXRhZGF0YV09XCJyZWNvcmRcIlxuICAgICAgICAgICAgICBbbWV0YWRhdGFRdWFsaXR5RGlzcGxheV09XCJtZXRhZGF0YVF1YWxpdHlEaXNwbGF5XCJcbiAgICAgICAgICAgID48L2duLXVpLW1ldGFkYXRhLXF1YWxpdHk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJyZWNvcmRGYXZcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGlzcGxheUNvbnRhY3RJY29uT25seSA/ICdweC0xJyA6ICdweC00J1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmYXZvcml0ZVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByZWNvcmQgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hPlxuIl19