geonetwork-ui 2.8.0-dev.0c9b29721 → 2.8.0-dev.27e1de86f

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 (264) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +5 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +26 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +7 -7
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -2
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -3
  8. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +1 -2
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  11. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  12. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  13. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  15. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  16. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  17. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  18. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
  19. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +26 -8
  20. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +3 -3
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  23. package/esm2022/libs/feature/map/src/lib/map-state-container/map-state-container.component.mjs +2 -2
  24. package/esm2022/libs/feature/record/src/index.mjs +2 -1
  25. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +1 -1
  26. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  27. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  28. package/esm2022/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.mjs +4 -4
  29. package/esm2022/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.mjs +1 -1
  30. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -2
  31. package/esm2022/libs/feature/record/src/lib/stac-view/stac-view.component.mjs +230 -0
  32. package/esm2022/libs/feature/record/src/lib/stac-view/utils.mjs +26 -0
  33. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +2 -2
  34. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  35. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  36. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  37. package/esm2022/libs/feature/search/src/lib/constants.mjs +1 -2
  38. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  39. package/esm2022/libs/ui/elements/src/index.mjs +3 -1
  40. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +1 -1
  41. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  42. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  43. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  44. package/esm2022/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.mjs +18 -0
  45. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  46. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  47. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +3 -3
  48. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +21 -7
  49. package/esm2022/libs/ui/inputs/src/lib/date-range-dropdown/date-range-dropdown.component.mjs +3 -3
  50. package/esm2022/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.mjs +35 -0
  51. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  52. package/esm2022/libs/ui/layout/src/lib/paginable.interface.mjs +1 -1
  53. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +13 -5
  54. package/esm2022/libs/ui/map/src/lib/components/map-container/map-container.component.mjs +86 -32
  55. package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +1 -1
  56. package/esm2022/libs/ui/widgets/src/lib/loading-mask/loading-mask.component.mjs +3 -3
  57. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  58. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  59. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  60. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  61. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  62. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  63. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  64. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  65. package/esm2022/translations/de.json +19 -3
  66. package/esm2022/translations/en.json +19 -4
  67. package/esm2022/translations/es.json +18 -2
  68. package/esm2022/translations/fr.json +19 -3
  69. package/esm2022/translations/it.json +20 -4
  70. package/esm2022/translations/nl.json +18 -2
  71. package/esm2022/translations/pt.json +18 -2
  72. package/esm2022/translations/sk.json +19 -3
  73. package/fesm2022/geonetwork-ui-date-locales-DhlIiWpT.mjs +35 -0
  74. package/fesm2022/geonetwork-ui-date-locales-DhlIiWpT.mjs.map +1 -0
  75. package/fesm2022/geonetwork-ui.mjs +884 -261
  76. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  77. package/index.d.ts +1 -0
  78. package/index.d.ts.map +1 -1
  79. package/index.ts +1 -0
  80. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  81. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  82. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  83. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  84. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  85. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  86. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  87. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  88. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  89. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  90. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  91. package/libs/common/domain/src/index.d.ts +3 -0
  92. package/libs/common/domain/src/index.d.ts.map +1 -0
  93. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  94. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  95. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  96. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  97. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  98. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  99. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  100. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  101. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -1
  102. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  103. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  104. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  105. package/libs/feature/record/src/index.d.ts +1 -0
  106. package/libs/feature/record/src/index.d.ts.map +1 -1
  107. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +5 -1
  108. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  109. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  110. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  111. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  112. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  113. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts +12 -5
  114. package/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.d.ts.map +1 -1
  115. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts +3 -1
  116. package/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.d.ts.map +1 -1
  117. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +5 -1
  118. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  119. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts +53 -0
  120. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  121. package/libs/feature/record/src/lib/stac-view/utils.d.ts +7 -0
  122. package/libs/feature/record/src/lib/stac-view/utils.d.ts.map +1 -0
  123. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  124. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  125. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  126. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  127. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  128. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  129. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  130. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  131. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  132. package/libs/ui/elements/src/index.d.ts +2 -0
  133. package/libs/ui/elements/src/index.d.ts.map +1 -1
  134. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  135. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  136. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  137. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  138. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  139. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  140. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  141. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts +8 -0
  142. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts.map +1 -0
  143. package/libs/ui/inputs/src/index.d.ts +1 -0
  144. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  145. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +5 -0
  146. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  147. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts +12 -0
  148. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts.map +1 -0
  149. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  150. package/libs/ui/layout/src/lib/paginable.interface.d.ts +3 -3
  151. package/libs/ui/layout/src/lib/paginable.interface.d.ts.map +1 -1
  152. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +2 -1
  153. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -1
  154. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts +24 -14
  155. package/libs/ui/map/src/lib/components/map-container/map-container.component.d.ts.map +1 -1
  156. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  157. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  158. package/libs/util/shared/src/index.d.ts +1 -0
  159. package/libs/util/shared/src/index.d.ts.map +1 -1
  160. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  161. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  162. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  163. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  164. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  165. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  166. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  167. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  168. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  169. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  170. package/package.json +5 -5
  171. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  172. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  173. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  174. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  175. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  176. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  177. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  178. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  179. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  180. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  181. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  182. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  183. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  184. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  185. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  186. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +0 -1
  187. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  188. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  189. package/src/libs/common/domain/src/index.ts +2 -0
  190. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  191. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  192. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  193. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  194. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  195. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  196. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  197. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +30 -5
  198. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +1 -0
  199. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  200. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  201. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  202. package/src/libs/feature/record/src/index.ts +1 -0
  203. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +5 -1
  204. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  205. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  206. package/src/libs/feature/record/src/lib/gpf-api-dl/gpf-api-dl.component.ts +10 -8
  207. package/src/libs/feature/record/src/lib/gpf-api-dl-list-item/gpf-api-dl-list-item.component.ts +1 -1
  208. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +6 -2
  209. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.css +8 -0
  210. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.html +87 -0
  211. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.ts +339 -0
  212. package/src/libs/feature/record/src/lib/stac-view/utils.ts +57 -0
  213. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +1 -1
  214. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  215. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  216. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  217. package/src/libs/feature/search/src/lib/constants.ts +0 -1
  218. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  219. package/src/libs/ui/elements/src/index.ts +2 -0
  220. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  221. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  222. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  223. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  224. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  225. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +67 -21
  226. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  227. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.css +0 -0
  228. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.html +13 -0
  229. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.ts +15 -0
  230. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  231. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  232. package/src/libs/ui/inputs/src/index.ts +1 -0
  233. package/src/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.html +3 -3
  234. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +17 -1
  235. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.css +0 -0
  236. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.html +15 -0
  237. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.ts +41 -0
  238. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  239. package/src/libs/ui/layout/src/lib/paginable.interface.ts +3 -3
  240. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.html +12 -6
  241. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.ts +4 -1
  242. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.html +16 -14
  243. package/src/libs/ui/map/src/lib/components/map-container/map-container.component.ts +144 -65
  244. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  245. package/src/libs/util/shared/src/index.ts +1 -0
  246. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  247. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  248. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  249. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  250. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  251. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  252. package/translations/de.json +19 -3
  253. package/translations/en.json +19 -4
  254. package/translations/es.json +18 -2
  255. package/translations/fr.json +19 -3
  256. package/translations/it.json +20 -4
  257. package/translations/nl.json +18 -2
  258. package/translations/pt.json +18 -2
  259. package/translations/sk.json +19 -3
  260. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  261. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  262. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  263. package/src/libs/common/domain/src/lib/index.ts +0 -2
  264. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +0 -54
@@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NgIconComponent, provideIcons, provideNgIconsConfig, } from '@ng-icons/core';
4
4
  import { matOpenInNew } from '@ng-icons/material-icons/baseline';
5
+ import { iconoirDatabase } from '@ng-icons/iconoir';
5
6
  import { getBadgeColor, getFileFormat } from '../../../../../../libs/util/shared/src';
6
7
  import { TranslatePipe } from '@ngx-translate/core';
7
8
  import * as i0 from "@angular/core";
@@ -18,7 +19,7 @@ export class ExternalLinkCardComponent {
18
19
  }
19
20
  set size(value) {
20
21
  this._size = value;
21
- this.cardClass = this.sizeClassMap[value];
22
+ this.cardClass = `group flex flex-row justify-between card-shadow rounded overflow-hidden ${this.sizeClassMap[value]}`;
22
23
  }
23
24
  get size() {
24
25
  return this._size;
@@ -29,6 +30,10 @@ export class ExternalLinkCardComponent {
29
30
  }
30
31
  return this.link.name || this.link.description || '';
31
32
  }
33
+ get isDatabase() {
34
+ return (this.link.type === 'service' &&
35
+ this.link.accessServiceProtocol === 'postgis');
36
+ }
32
37
  getLinkFormat(link) {
33
38
  return getFileFormat(link);
34
39
  }
@@ -39,21 +44,23 @@ export class ExternalLinkCardComponent {
39
44
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ExternalLinkCardComponent, isStandalone: true, selector: "gn-ui-external-link-card", inputs: { link: "link", size: "size" }, providers: [
40
45
  provideIcons({
41
46
  matOpenInNew,
47
+ iconoirDatabase,
42
48
  }),
43
49
  provideNgIconsConfig({ size: '1.5em' }),
44
- ], ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
50
+ ], ngImport: i0, template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
51
  }
46
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExternalLinkCardComponent, decorators: [{
47
53
  type: Component,
48
54
  args: [{ selector: 'gn-ui-external-link-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslatePipe], providers: [
49
55
  provideIcons({
50
56
  matOpenInNew,
57
+ iconoirDatabase,
51
58
  }),
52
59
  provideNgIconsConfig({ size: '1.5em' }),
53
- ], template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n" }]
60
+ ], template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n" }]
54
61
  }], propDecorators: { link: [{
55
62
  type: Input
56
63
  }], size: [{
57
64
  type: Input
58
65
  }] } });
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNyRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7OztBQWlCbkQsTUFBTSxPQUFPLHlCQUF5QjtJQWR0QztRQWlCbUIsaUJBQVksR0FBNkI7WUFDeEQsQ0FBQyxFQUFFLHdCQUF3QjtZQUMzQixDQUFDLEVBQUUsd0JBQXdCO1lBQzNCLENBQUMsRUFBRSxrQkFBa0I7WUFDckIsRUFBRSxFQUFFLHlCQUF5QjtTQUM5QixDQUFBO1FBU0QsY0FBUyxHQUFHLEVBQUUsQ0FBQTtLQWdCZjtJQXZCQyxJQUFhLElBQUksQ0FBQyxLQUFlO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFBO0lBQ25CLENBQUM7SUFHRCxJQUFJLEtBQUs7UUFDUCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDdkQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFBO0lBQ3RELENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUztRQUNyQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsWUFBWSxDQUFDLElBQVM7UUFDcEIsT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQzsrR0FoQ1UseUJBQXlCO21HQUF6Qix5QkFBeUIsK0dBUHpCO1lBQ1QsWUFBWSxDQUFDO2dCQUNYLFlBQVk7YUFDYixDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDeEMsMEJDekJILGt3Q0F3Q0EseUREckJZLFlBQVksaU9BQUUsZUFBZSx3R0FBRSxhQUFhOzs0RkFRM0MseUJBQXlCO2tCQWRyQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxhQUM1Qzt3QkFDVCxZQUFZLENBQUM7NEJBQ1gsWUFBWTt5QkFDYixDQUFDO3dCQUNGLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4Qzs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBUU8sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGFzZXRPbmxpbmVSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRPcGVuSW5OZXcgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBnZXRCYWRnZUNvbG9yLCBnZXRGaWxlRm9ybWF0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxudHlwZSBDYXJkU2l6ZSA9ICdMJyB8ICdNJyB8ICdTJyB8ICdYUydcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLWV4dGVybmFsLWxpbmstY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9leHRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9leHRlcm5hbC1saW5rLWNhcmQuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTmdJY29uQ29tcG9uZW50LCBUcmFuc2xhdGVQaXBlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIG1hdE9wZW5Jbk5ldyxcbiAgICB9KSxcbiAgICBwcm92aWRlTmdJY29uc0NvbmZpZyh7IHNpemU6ICcxLjVlbScgfSksXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV4dGVybmFsTGlua0NhcmRDb21wb25lbnQge1xuICBwcml2YXRlIF9zaXplOiBDYXJkU2l6ZVxuICBASW5wdXQoKSBsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2VcbiAgcHJpdmF0ZSByZWFkb25seSBzaXplQ2xhc3NNYXA6IFJlY29yZDxDYXJkU2l6ZSwgc3RyaW5nPiA9IHtcbiAgICBMOiAnZ24tdWktY2FyZC1sIHB5LTIgcHgtNScsXG4gICAgTTogJ2duLXVpLWNhcmQtbSBweS0yIHB4LTUnLFxuICAgIFM6ICdnbi11aS1jYXJkLXMgcC00JyxcbiAgICBYUzogJ2duLXVpLWNhcmQteHMgcHktMiBweC01JyxcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBzaXplKHZhbHVlOiBDYXJkU2l6ZSkge1xuICAgIHRoaXMuX3NpemUgPSB2YWx1ZVxuICAgIHRoaXMuY2FyZENsYXNzID0gdGhpcy5zaXplQ2xhc3NNYXBbdmFsdWVdXG4gIH1cbiAgZ2V0IHNpemUoKTogQ2FyZFNpemUge1xuICAgIHJldHVybiB0aGlzLl9zaXplXG4gIH1cbiAgY2FyZENsYXNzID0gJydcblxuICBnZXQgdGl0bGUoKSB7XG4gICAgaWYgKHRoaXMubGluay5uYW1lICYmIHRoaXMubGluay5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMubGluay5uYW1lfSB8ICR7dGhpcy5saW5rLmRlc2NyaXB0aW9ufWBcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubGluay5uYW1lIHx8IHRoaXMubGluay5kZXNjcmlwdGlvbiB8fCAnJ1xuICB9XG5cbiAgZ2V0TGlua0Zvcm1hdChsaW5rOiBhbnkpIHtcbiAgICByZXR1cm4gZ2V0RmlsZUZvcm1hdChsaW5rKVxuICB9XG5cbiAgZ2V0TGlua0NvbG9yKGxpbms6IGFueSkge1xuICAgIHJldHVybiBnZXRCYWRnZUNvbG9yKGdldEZpbGVGb3JtYXQobGluaykpXG4gIH1cbn1cbiIsIjxhXG4gIFtocmVmXT1cImxpbmsudXJsXCJcbiAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgY2xhc3M9XCJncm91cCBmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBjYXJkLXNoYWRvdyBjdXJzb3ItcG9pbnRlciByb3VuZGVkIG92ZXJmbG93LWhpZGRlblwiXG4gIFtuZ0NsYXNzXT1cImNhcmRDbGFzc1wiXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBmbGV4LTEgbWluLXctMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLmRlc2NyaXB0aW9uIHx8IGxpbmsubmFtZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWRldGFpbFwiPlxuICAgICAge3sgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPHAgKm5nSWY9XCIhbGluay5uYW1lICYmICFsaW5rLmRlc2NyaXB0aW9uXCIgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLnVybCB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwicHQtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiBweS0xIHRleHQtMTMgZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtd2hpdGUgcm91bmRlZCB0cmFuc2l0aW9uLW9wYWNpdHkgb3BhY2l0eS03MCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldExpbmtDb2xvcihsaW5rKVwiXG4gICAgICAgIGRhdGEtY3k9XCJkb3dubG9hZC1mb3JtYXRcIlxuICAgICAgICA+e3tcbiAgICAgICAgICBnZXRMaW5rRm9ybWF0KGxpbmspIHx8ICgnZG93bmxvYWRzLmZvcm1hdC51bmtub3duJyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgfX08L3NwYW5cbiAgICAgID5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICBbbmdDbGFzc109XCJzaXplID09PSAnUycgPyAnaXRlbXMtZW5kJyA6ICdpdGVtcy1jZW50ZXInXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIj5cbiAgICAgIDxuZy1pY29uXG4gICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGNhcmQtaWNvbiBhbGlnbi1taWRkbGVcIlxuICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgID48L25nLWljb24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9hPlxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9leHRlcm5hbC1saW5rLWNhcmQvZXh0ZXJuYWwtbGluay1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQ0wsZUFBZSxFQUNmLFlBQVksRUFDWixvQkFBb0IsR0FDckIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUE7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7QUFrQm5ELE1BQU0sT0FBTyx5QkFBeUI7SUFmdEM7UUFrQm1CLGlCQUFZLEdBQTZCO1lBQ3hELENBQUMsRUFBRSx3QkFBd0I7WUFDM0IsQ0FBQyxFQUFFLHdCQUF3QjtZQUMzQixDQUFDLEVBQUUsa0JBQWtCO1lBQ3JCLEVBQUUsRUFBRSx5QkFBeUI7U0FDOUIsQ0FBQTtRQVNELGNBQVMsR0FBRyxFQUFFLENBQUE7S0F1QmY7SUE5QkMsSUFBYSxJQUFJLENBQUMsS0FBZTtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLDJFQUEyRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUE7SUFDeEgsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUNuQixDQUFDO0lBR0QsSUFBSSxLQUFLO1FBQ1AsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLENBQzlDLENBQUE7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQTJCO1FBQ3ZDLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBMkI7UUFDdEMsT0FBTyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0MsQ0FBQzsrR0F2Q1UseUJBQXlCO21HQUF6Qix5QkFBeUIsK0dBUnpCO1lBQ1QsWUFBWSxDQUFDO2dCQUNYLFlBQVk7Z0JBQ1osZUFBZTthQUNoQixDQUFDO1lBQ0Ysb0JBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7U0FDeEMsMEJDM0JILGdpRUE2REEseUREekNZLFlBQVksd1lBQUUsZUFBZSx3R0FBRSxhQUFhOzs0RkFTM0MseUJBQXlCO2tCQWZyQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsQ0FBQyxhQUM1Qzt3QkFDVCxZQUFZLENBQUM7NEJBQ1gsWUFBWTs0QkFDWixlQUFlO3lCQUNoQixDQUFDO3dCQUNGLG9CQUFvQixDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO3FCQUN4Qzs4QkFJUSxJQUFJO3NCQUFaLEtBQUs7Z0JBUU8sSUFBSTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IERhdGFzZXRPbmxpbmVSZXNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7XG4gIE5nSWNvbkNvbXBvbmVudCxcbiAgcHJvdmlkZUljb25zLFxuICBwcm92aWRlTmdJY29uc0NvbmZpZyxcbn0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRPcGVuSW5OZXcgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBpY29ub2lyRGF0YWJhc2UgfSBmcm9tICdAbmctaWNvbnMvaWNvbm9pcidcbmltcG9ydCB7IGdldEJhZGdlQ29sb3IsIGdldEZpbGVGb3JtYXQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuXG50eXBlIENhcmRTaXplID0gJ0wnIHwgJ00nIHwgJ1MnIHwgJ1hTJ1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktZXh0ZXJuYWwtbGluay1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2V4dGVybmFsLWxpbmstY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2V4dGVybmFsLWxpbmstY2FyZC5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBOZ0ljb25Db21wb25lbnQsIFRyYW5zbGF0ZVBpcGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSWNvbnMoe1xuICAgICAgbWF0T3BlbkluTmV3LFxuICAgICAgaWNvbm9pckRhdGFiYXNlLFxuICAgIH0pLFxuICAgIHByb3ZpZGVOZ0ljb25zQ29uZmlnKHsgc2l6ZTogJzEuNWVtJyB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRXh0ZXJuYWxMaW5rQ2FyZENvbXBvbmVudCB7XG4gIHByaXZhdGUgX3NpemU6IENhcmRTaXplXG4gIEBJbnB1dCgpIGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZVxuICBwcml2YXRlIHJlYWRvbmx5IHNpemVDbGFzc01hcDogUmVjb3JkPENhcmRTaXplLCBzdHJpbmc+ID0ge1xuICAgIEw6ICdnbi11aS1jYXJkLWwgcHktMiBweC01JyxcbiAgICBNOiAnZ24tdWktY2FyZC1tIHB5LTIgcHgtNScsXG4gICAgUzogJ2duLXVpLWNhcmQtcyBwLTQnLFxuICAgIFhTOiAnZ24tdWktY2FyZC14cyBweS0yIHB4LTUnLFxuICB9XG5cbiAgQElucHV0KCkgc2V0IHNpemUodmFsdWU6IENhcmRTaXplKSB7XG4gICAgdGhpcy5fc2l6ZSA9IHZhbHVlXG4gICAgdGhpcy5jYXJkQ2xhc3MgPSBgZ3JvdXAgZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gY2FyZC1zaGFkb3cgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW4gJHt0aGlzLnNpemVDbGFzc01hcFt2YWx1ZV19YFxuICB9XG4gIGdldCBzaXplKCk6IENhcmRTaXplIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZVxuICB9XG4gIGNhcmRDbGFzcyA9ICcnXG5cbiAgZ2V0IHRpdGxlKCkge1xuICAgIGlmICh0aGlzLmxpbmsubmFtZSAmJiB0aGlzLmxpbmsuZGVzY3JpcHRpb24pIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmxpbmsubmFtZX0gfCAke3RoaXMubGluay5kZXNjcmlwdGlvbn1gXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmxpbmsubmFtZSB8fCB0aGlzLmxpbmsuZGVzY3JpcHRpb24gfHwgJydcbiAgfVxuXG4gIGdldCBpc0RhdGFiYXNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxpbmsudHlwZSA9PT0gJ3NlcnZpY2UnICYmXG4gICAgICB0aGlzLmxpbmsuYWNjZXNzU2VydmljZVByb3RvY29sID09PSAncG9zdGdpcydcbiAgICApXG4gIH1cblxuICBnZXRMaW5rRm9ybWF0KGxpbms6IERhdGFzZXRPbmxpbmVSZXNvdXJjZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZpbGVGb3JtYXQobGluaylcbiAgfVxuXG4gIGdldExpbmtDb2xvcihsaW5rOiBEYXRhc2V0T25saW5lUmVzb3VyY2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRCYWRnZUNvbG9yKGdldEZpbGVGb3JtYXQobGluaykpXG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RhdGFiYXNlOyBlbHNlIGNsaWNrYWJsZUxpbmtcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIiBbdGl0bGVdPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICAgIFtuZ0NsYXNzXT1cInNpemUgPT09ICdTJyA/ICdpdGVtcy1lbmQnIDogJ2l0ZW1zLWNlbnRlcidcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIlxuICAgICAgICBbdGl0bGVdPVwiJ3JlY29yZC5tZXRhZGF0YS5saW5rLnBvc3RnaXMudG9vbHRpcCcgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICA8bmctaWNvblxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGNhcmQtaWNvbiBhbGlnbi1taWRkbGVcIlxuICAgICAgICAgIG5hbWU9XCJpY29ub2lyRGF0YWJhc2VcIlxuICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2xpY2thYmxlTGluaz5cbiAgPGEgW2hyZWZdPVwibGluay51cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbbmdDbGFzc109XCJjYXJkQ2xhc3NcIiBbdGl0bGVdPVwidGl0bGVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZENvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZsZXggbWluLXctWzMycHhdXCJcbiAgICAgIFtuZ0NsYXNzXT1cInNpemUgPT09ICdTJyA/ICdpdGVtcy1lbmQnIDogJ2l0ZW1zLWNlbnRlcidcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJnbi11aS1jYXJkLWljb25cIj5cbiAgICAgICAgPG5nLWljb25cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBjYXJkLWljb24gYWxpZ24tbWlkZGxlXCJcbiAgICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2E+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNjYXJkQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGZsZXgtMSBtaW4tdy0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImduLXVpLWNhcmQtdGl0bGVcIj5cbiAgICAgIHt7IGxpbmsuZGVzY3JpcHRpb24gfHwgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImduLXVpLWNhcmQtZGV0YWlsXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNEYXRhYmFzZVwiPlxuICAgICAgICB7eyAncmVjb3JkLm1ldGFkYXRhLmxpbmsucG9zdGdpcy50YWJsZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAge3sgbGluay5uYW1lIH19XG4gICAgPC9kaXY+XG4gICAgPHAgKm5nSWY9XCIhbGluay5uYW1lICYmICFsaW5rLmRlc2NyaXB0aW9uXCIgY2xhc3M9XCJnbi11aS1jYXJkLXRpdGxlXCI+XG4gICAgICB7eyBsaW5rLnVybCB9fVxuICAgIDwvcD5cbiAgICA8ZGl2IGNsYXNzPVwicHQtMVwiPlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHgtMiBweS0xIHRleHQtMTMgZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHRleHQtd2hpdGUgcm91bmRlZCB0cmFuc2l0aW9uLW9wYWNpdHkgb3BhY2l0eS03MCBncm91cC1ob3ZlcjpvcGFjaXR5LTEwMFwiXG4gICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImdldExpbmtDb2xvcihsaW5rKVwiXG4gICAgICAgIGRhdGEtY3k9XCJkb3dubG9hZC1mb3JtYXRcIlxuICAgICAgPlxuICAgICAgICB7eyBnZXRMaW5rRm9ybWF0KGxpbmspIHx8ICgnZG93bmxvYWRzLmZvcm1hdC51bmtub3duJyB8IHRyYW5zbGF0ZSkgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -0,0 +1,37 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgIcon, provideIcons } from '@ng-icons/core';
4
+ import { MatTooltipModule } from '@angular/material/tooltip';
5
+ import { matOpenInNew } from '@ng-icons/material-icons/baseline';
6
+ import { TranslatePipe } from '@ngx-translate/core';
7
+ import { CopyTextButtonComponent } from '../../../../../../libs/ui/inputs/src';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/material/tooltip";
11
+ export class MetadataDoiComponent {
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataDoiComponent, isStandalone: true, selector: "gn-ui-metadata-doi", inputs: { code: "code", link: "link" }, ngImport: i0, template: "<div\n class=\"border border-gray-300 rounded-lg py-4 px-5 text-black flex justify-between items-center gap-4\"\n>\n <div class=\"overflow-hidden flex-1\">\n <p class=\"text-base font-medium mb-3\">DOI</p>\n <p\n class=\"text-base font-medium overflow-hidden text-ellipsis whitespace-nowrap\"\n [title]=\"code\"\n >\n {{ code }}\n </p>\n </div>\n <div class=\"flex gap-2 items-start\">\n <gn-ui-copy-text-button\n [text]=\"code\"\n [displayText]=\"false\"\n [tooltipText]=\"'record.metadata.doi.copy' | translate\"\n class=\"[&>div]:flex [&>div]:items-center [&>div]:justify-center [&_button]:w-[40px] [&_button]:h-[32px] [&_button]:flex [&_button]:items-center [&_button]:justify-center [&_button]:hover:bg-gray-100 [&_button]:rounded-lg [&_button]:transition-colors [&_button]:border [&_button]:border-gray-300 [&_button]:px-2 [&_button]:py-1 [&_ng-icon]:w-5 [&_ng-icon]:h-5\"\n ></gn-ui-copy-text-button>\n <a\n *ngIf=\"link\"\n [href]=\"link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"w-[40px] h-[32px] flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors border border-gray-300 px-2 py-1\"\n [matTooltip]=\"'record.metadata.doi.open' | translate\"\n >\n <ng-icon name=\"matOpenInNew\" size=\"20\"></ng-icon>\n </a>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }], viewProviders: [
14
+ provideIcons({
15
+ matOpenInNew,
16
+ }),
17
+ ] }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'gn-ui-metadata-doi', standalone: true, imports: [
22
+ CommonModule,
23
+ MatTooltipModule,
24
+ NgIcon,
25
+ TranslatePipe,
26
+ CopyTextButtonComponent,
27
+ ], viewProviders: [
28
+ provideIcons({
29
+ matOpenInNew,
30
+ }),
31
+ ], template: "<div\n class=\"border border-gray-300 rounded-lg py-4 px-5 text-black flex justify-between items-center gap-4\"\n>\n <div class=\"overflow-hidden flex-1\">\n <p class=\"text-base font-medium mb-3\">DOI</p>\n <p\n class=\"text-base font-medium overflow-hidden text-ellipsis whitespace-nowrap\"\n [title]=\"code\"\n >\n {{ code }}\n </p>\n </div>\n <div class=\"flex gap-2 items-start\">\n <gn-ui-copy-text-button\n [text]=\"code\"\n [displayText]=\"false\"\n [tooltipText]=\"'record.metadata.doi.copy' | translate\"\n class=\"[&>div]:flex [&>div]:items-center [&>div]:justify-center [&_button]:w-[40px] [&_button]:h-[32px] [&_button]:flex [&_button]:items-center [&_button]:justify-center [&_button]:hover:bg-gray-100 [&_button]:rounded-lg [&_button]:transition-colors [&_button]:border [&_button]:border-gray-300 [&_button]:px-2 [&_button]:py-1 [&_ng-icon]:w-5 [&_ng-icon]:h-5\"\n ></gn-ui-copy-text-button>\n <a\n *ngIf=\"link\"\n [href]=\"link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"w-[40px] h-[32px] flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors border border-gray-300 px-2 py-1\"\n [matTooltip]=\"'record.metadata.doi.open' | translate\"\n >\n <ng-icon name=\"matOpenInNew\" size=\"20\"></ng-icon>\n </a>\n </div>\n</div>\n" }]
32
+ }], propDecorators: { code: [{
33
+ type: Input
34
+ }], link: [{
35
+ type: Input
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtZG9pLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1kb2kvbWV0YWRhdGEtZG9pLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1kb2kvbWV0YWRhdGEtZG9pLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUE7Ozs7QUFvQjlFLE1BQU0sT0FBTyxvQkFBb0I7K0dBQXBCLG9CQUFvQjttR0FBcEIsb0JBQW9CLHNIQzFCakMsNDJDQStCQSx5RERuQkksWUFBWSxrSUFDWixnQkFBZ0IsNlRBQ2hCLE1BQU0sd0dBQ04sYUFBYSxrREFDYix1QkFBdUIsZ0hBSVY7WUFDYixZQUFZLENBQUM7Z0JBQ1gsWUFBWTthQUNiLENBQUM7U0FDSDs7NEZBRVUsb0JBQW9CO2tCQWxCaEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixNQUFNO3dCQUNOLGFBQWE7d0JBQ2IsdUJBQXVCO3FCQUN4QixpQkFHYzt3QkFDYixZQUFZLENBQUM7NEJBQ1gsWUFBWTt5QkFDYixDQUFDO3FCQUNIOzhCQUdRLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IE5nSWNvbiwgcHJvdmlkZUljb25zIH0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCdcbmltcG9ydCB7IG1hdE9wZW5Jbk5ldyB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHsgQ29weVRleHRCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2duLXVpLW1ldGFkYXRhLWRvaScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcbiAgICBOZ0ljb24sXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBDb3B5VGV4dEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21ldGFkYXRhLWRvaS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tZXRhZGF0YS1kb2kuY29tcG9uZW50LmNzcycsXG4gIHZpZXdQcm92aWRlcnM6IFtcbiAgICBwcm92aWRlSWNvbnMoe1xuICAgICAgbWF0T3BlbkluTmV3LFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YURvaUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGNvZGUhOiBzdHJpbmdcbiAgQElucHV0KCkgbGluaz86IHN0cmluZ1xufVxuIiwiPGRpdlxuICBjbGFzcz1cImJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBweS00IHB4LTUgdGV4dC1ibGFjayBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgZ2FwLTRcIlxuPlxuICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuIGZsZXgtMVwiPlxuICAgIDxwIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtbWVkaXVtIG1iLTNcIj5ET0k8L3A+XG4gICAgPHBcbiAgICAgIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtbWVkaXVtIG92ZXJmbG93LWhpZGRlbiB0ZXh0LWVsbGlwc2lzIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgIFt0aXRsZV09XCJjb2RlXCJcbiAgICA+XG4gICAgICB7eyBjb2RlIH19XG4gICAgPC9wPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgaXRlbXMtc3RhcnRcIj5cbiAgICA8Z24tdWktY29weS10ZXh0LWJ1dHRvblxuICAgICAgW3RleHRdPVwiY29kZVwiXG4gICAgICBbZGlzcGxheVRleHRdPVwiZmFsc2VcIlxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidyZWNvcmQubWV0YWRhdGEuZG9pLmNvcHknIHwgdHJhbnNsYXRlXCJcbiAgICAgIGNsYXNzPVwiWyY+ZGl2XTpmbGV4IFsmPmRpdl06aXRlbXMtY2VudGVyIFsmPmRpdl06anVzdGlmeS1jZW50ZXIgWyZfYnV0dG9uXTp3LVs0MHB4XSBbJl9idXR0b25dOmgtWzMycHhdIFsmX2J1dHRvbl06ZmxleCBbJl9idXR0b25dOml0ZW1zLWNlbnRlciBbJl9idXR0b25dOmp1c3RpZnktY2VudGVyIFsmX2J1dHRvbl06aG92ZXI6YmctZ3JheS0xMDAgWyZfYnV0dG9uXTpyb3VuZGVkLWxnIFsmX2J1dHRvbl06dHJhbnNpdGlvbi1jb2xvcnMgWyZfYnV0dG9uXTpib3JkZXIgWyZfYnV0dG9uXTpib3JkZXItZ3JheS0zMDAgWyZfYnV0dG9uXTpweC0yIFsmX2J1dHRvbl06cHktMSBbJl9uZy1pY29uXTp3LTUgWyZfbmctaWNvbl06aC01XCJcbiAgICA+PC9nbi11aS1jb3B5LXRleHQtYnV0dG9uPlxuICAgIDxhXG4gICAgICAqbmdJZj1cImxpbmtcIlxuICAgICAgW2hyZWZdPVwibGlua1wiXG4gICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICBjbGFzcz1cInctWzQwcHhdIGgtWzMycHhdIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWdyYXktMTAwIHJvdW5kZWQtbGcgdHJhbnNpdGlvbi1jb2xvcnMgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCBweC0yIHB5LTFcIlxuICAgICAgW21hdFRvb2x0aXBdPVwiJ3JlY29yZC5tZXRhZGF0YS5kb2kub3BlbicgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxuZy1pY29uIG5hbWU9XCJtYXRPcGVuSW5OZXdcIiBzaXplPVwiMjBcIj48L25nLWljb24+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -10,6 +10,7 @@ import { matOpenInNew } from '@ng-icons/material-icons/baseline';
10
10
  import { matMailOutline } from '@ng-icons/material-icons/outline';
11
11
  import { ThumbnailComponent } from '../thumbnail/thumbnail.component';
12
12
  import { GnUiLinkifyDirective } from './linkify.directive';
13
+ import { GnUiHumanizeDateDirective } from '../../../../../../libs/util/shared/src';
13
14
  import { CommonModule } from '@angular/common';
14
15
  import { SpatialExtentComponent } from '../../../../../../libs/ui/map/src';
15
16
  import * as i0 from "@angular/core";
@@ -82,14 +83,8 @@ export class MetadataInfoComponent {
82
83
  onKeywordClick(keyword) {
83
84
  this.keyword.emit(keyword);
84
85
  }
85
- formatDate(date) {
86
- return this.dateService.formatDate(date);
87
- }
88
- formatDateTime(date) {
89
- return this.dateService.formatDateTime(date);
90
- }
91
86
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataInfoComponent, deps: [{ token: i1.DateService }], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines\n [maxLines]=\"6\"\n *ngIf=\"metadata.abstract\"\n data-test=\"metadata-info-abstract\"\n >\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.lineage\"\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n *ngIf=\"resourceContact\"\n data-test=\"details-panel-resource-contact\"\n >\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div\n *ngIf=\"metadata.resourceCreated\"\n data-test=\"details-panel-resource-created\"\n >\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourcePublished\"\n data-test=\"details-panel-resource-published\"\n >\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourceUpdated\"\n data-test=\"details-panel-resource-updated\"\n >\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.updateFrequency\"\n data-test=\"details-panel-update-frequency\"\n >\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div\n *ngIf=\"metadata.otherLanguages?.length\"\n data-test=\"details-panel-other-languages\"\n >\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium other-languages\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && temporalExtent\"\n data-test=\"details-panel-temporal-extent\"\n >\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
93
88
  provideIcons({
94
89
  matOpenInNew,
95
90
  matMailOutline,
@@ -111,13 +106,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
111
106
  CopyTextButtonComponent,
112
107
  NgIcon,
113
108
  GnUiLinkifyDirective,
109
+ GnUiHumanizeDateDirective,
114
110
  SpatialExtentComponent,
115
111
  ], viewProviders: [
116
112
  provideIcons({
117
113
  matOpenInNew,
118
114
  matMailOutline,
119
115
  }),
120
- ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.otherLanguages?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
116
+ ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines\n [maxLines]=\"6\"\n *ngIf=\"metadata.abstract\"\n data-test=\"metadata-info-abstract\"\n >\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n (metadata.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.lineage\"\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n *ngIf=\"resourceContact\"\n data-test=\"details-panel-resource-contact\"\n >\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div\n *ngIf=\"metadata.resourceCreated\"\n data-test=\"details-panel-resource-created\"\n >\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourcePublished\"\n data-test=\"details-panel-resource-published\"\n >\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourceUpdated\"\n data-test=\"details-panel-resource-updated\"\n >\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.updateFrequency\"\n data-test=\"details-panel-update-frequency\"\n >\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div\n *ngIf=\"metadata.otherLanguages?.length\"\n data-test=\"details-panel-other-languages\"\n >\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium other-languages\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && temporalExtent\"\n data-test=\"details-panel-temporal-extent\"\n >\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
121
117
  }], ctorParameters: () => [{ type: i1.DateService }], propDecorators: { metadata: [{
122
118
  type: Input
123
119
  }], incomplete: [{
@@ -125,4 +121,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
125
121
  }], keyword: [{
126
122
  type: Output
127
123
  }] } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYy9saWIvbWV0YWRhdGEtaW5mby9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1pbmZvL21ldGFkYXRhLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFLdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3RGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEdBQ3hCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFN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QVU7c0JBQWxCLEtBQUs7Z0JBQ0ksT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIEtleXdvcmQsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IERhdGVTZXJ2aWNlLCBnZXRUZW1wb3JhbFJhbmdlVW5pb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvc2hhcmVkL3NyYydcbmltcG9ydCB7IE1hcmtkb3duUGFyc2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFya2Rvd24tcGFyc2VyL21hcmtkb3duLXBhcnNlci5jb21wb25lbnQnXG5pbXBvcnQge1xuICBFeHBhbmRhYmxlUGFuZWxDb21wb25lbnQsXG4gIE1heExpbmVzQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2xheW91dC9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVEaXJlY3RpdmUsIFRyYW5zbGF0ZVBpcGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuaW1wb3J0IHtcbiAgQmFkZ2VDb21wb25lbnQsXG4gIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2lucHV0cy9zcmMnXG5pbXBvcnQgeyBDb250ZW50R2hvc3RDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZW50LWdob3N0L2NvbnRlbnQtZ2hvc3QuY29tcG9uZW50J1xuaW1wb3J0IHsgTmdJY29uLCBwcm92aWRlSWNvbnMgfSBmcm9tICdAbmctaWNvbnMvY29yZSdcbmltcG9ydCB7IG1hdE9wZW5Jbk5ldyB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9iYXNlbGluZSdcbmltcG9ydCB7IG1hdE1haWxPdXRsaW5lIH0gZnJvbSAnQG5nLWljb25zL21hdGVyaWFsLWljb25zL291dGxpbmUnXG5pbXBvcnQgeyBUaHVtYm5haWxDb21wb25lbnQgfSBmcm9tICcuLi90aHVtYm5haWwvdGh1bWJuYWlsLmNvbXBvbmVudCdcbmltcG9ydCB7IEduVWlMaW5raWZ5RGlyZWN0aXZlIH0gZnJvbSAnLi9saW5raWZ5LmRpcmVjdGl2ZSdcblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgU3BhdGlhbEV4dGVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvbWFwL3NyYydcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktbWV0YWRhdGEtaW5mbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWV0YWRhdGEtaW5mby5jb21wb25lbnQuY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBUcmFuc2xhdGVQaXBlLFxuICAgIE1hcmtkb3duUGFyc2VyQ29tcG9uZW50LFxuICAgIEV4cGFuZGFibGVQYW5lbENvbXBvbmVudCxcbiAgICBCYWRnZUNvbXBvbmVudCxcbiAgICBDb250ZW50R2hvc3RDb21wb25lbnQsXG4gICAgVGh1bWJuYWlsQ29tcG9uZW50LFxuICAgIE1heExpbmVzQ29tcG9uZW50LFxuICAgIENvcHlUZXh0QnV0dG9uQ29tcG9uZW50LFxuICAgIE5nSWNvbixcbiAgICBHblVpTGlua2lmeURpcmVjdGl2ZSxcbiAgICBTcGF0aWFsRXh0ZW50Q29tcG9uZW50LFxuICBdLFxuICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgcHJvdmlkZUljb25zKHtcbiAgICAgIG1hdE9wZW5Jbk5ldyxcbiAgICAgIG1hdE1haWxPdXRsaW5lLFxuICAgIH0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YUluZm9Db21wb25lbnQge1xuICBASW5wdXQoKSBtZXRhZGF0YTogUGFydGlhbDxDYXRhbG9nUmVjb3JkPlxuICBASW5wdXQoKSBpbmNvbXBsZXRlOiBib29sZWFuXG4gIEBPdXRwdXQoKSBrZXl3b3JkID0gbmV3IEV2ZW50RW1pdHRlcjxLZXl3b3JkPigpXG4gIHVwZGF0ZWRUaW1lczogbnVtYmVyXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlU2VydmljZTogRGF0ZVNlcnZpY2UpIHt9XG5cbiAgZ2V0IGhhc1VzYWdlKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1ldGFkYXRhLmV4dHJhcz8uaXNPcGVuRGF0YSA9PT0gdHJ1ZSB8fFxuICAgICAgKHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICB0aGlzLmxlZ2FsQ29uc3RyYWludHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5vdGhlckNvbnN0cmFpbnRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5tZXRhZGF0YS5saWNlbnNlcz8ubGVuZ3RoID4gMCAmJiB0aGlzLmxpY2Vuc2VzLmxlbmd0aCA+IDApXG4gICAgKVxuICB9XG5cbiAgZ2V0IGxlZ2FsQ29uc3RyYWludHMoKSB7XG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBpZiAodGhpcy5tZXRhZGF0YS5sZWdhbENvbnN0cmFpbnRzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGxpY2Vuc2VzVGV4dHMgPSB0aGlzLm1ldGFkYXRhLmxpY2Vuc2VzLm1hcChcbiAgICAgICAgKGxpY2Vuc2UpID0+IGxpY2Vuc2UudGV4dFxuICAgICAgKVxuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50c1xuICAgICAgICAgIC5maWx0ZXIoKGMpID0+IGMudGV4dCAmJiAhbGljZW5zZXNUZXh0cy5pbmNsdWRlcyhjLnRleHQpKVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMudGV4dClcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICBnZXQgb3RoZXJDb25zdHJhaW50cygpIHtcbiAgICBsZXQgYXJyYXkgPSBbXVxuICAgIGlmICh0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEub3RoZXJDb25zdHJhaW50cy5maWx0ZXIoKGMpID0+IGMudGV4dCkubWFwKChjKSA9PiBjLnRleHQpXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgZ2V0IGxpY2Vuc2VzKCk6IHsgdGV4dDogc3RyaW5nOyB1cmw6IHN0cmluZyB9W10ge1xuICAgIGxldCBhcnJheSA9IFtdXG4gICAgaWYgKHRoaXMubWV0YWRhdGEubGljZW5zZXM/Lmxlbmd0aCkge1xuICAgICAgYXJyYXkgPSBhcnJheS5jb25jYXQoXG4gICAgICAgIHRoaXMubWV0YWRhdGEubGljZW5zZXNcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiBjLnRleHQpXG4gICAgICAgICAgLm1hcCgoYykgPT4gKHsgdGV4dDogYy50ZXh0LCB1cmw6IGMudXJsIH0pKVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxuXG4gIGdldCB1cGRhdGVGcmVxdWVuY3koKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgIHRoaXMudXBkYXRlZFRpbWVzID0gdGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzXG4gICAgICByZXR1cm4gYGRvbWFpbi5yZWNvcmQudXBkYXRlRnJlcXVlbmN5LiR7dGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kucGVyfWBcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBgZG9tYWluLnJlY29yZC51cGRhdGVGcmVxdWVuY3kuJHt0aGlzLm1ldGFkYXRhLnVwZGF0ZUZyZXF1ZW5jeX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG4gIH1cblxuICBnZXQgdGVtcG9yYWxFeHRlbnQoKTogeyBzdGFydDogc3RyaW5nOyBlbmQ6IHN0cmluZyB9IHtcbiAgICBjb25zdCB0ZW1wb3JhbEV4dGVudHMgPVxuICAgICAgdGhpcy5tZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgPyB0aGlzLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50cyA6IFtdXG4gICAgcmV0dXJuIGdldFRlbXBvcmFsUmFuZ2VVbmlvbih0ZW1wb3JhbEV4dGVudHMsIHRoaXMuZGF0ZVNlcnZpY2UpXG4gIH1cblxuICBnZXQgc2hvd25Pcmdhbml6YXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEub3duZXJPcmdhbml6YXRpb25cbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbnRhY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGEuY29udGFjdHNGb3JSZXNvdXJjZT8uWzBdXG4gIH1cblxuICBmaWVsZFJlYWR5KHByb3BOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gIXRoaXMuaW5jb21wbGV0ZSB8fCBwcm9wTmFtZSBpbiB0aGlzLm1ldGFkYXRhXG4gIH1cblxuICBvbktleXdvcmRDbGljayhrZXl3b3JkOiBLZXl3b3JkKSB7XG4gICAgdGhpcy5rZXl3b3JkLmVtaXQoa2V5d29yZClcbiAgfVxuXG4gIGZvcm1hdERhdGUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZShkYXRlKVxuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVNlcnZpY2UuZm9ybWF0RGF0ZVRpbWUoZGF0ZSlcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1iLTYgbWQtZGVzY3JpcHRpb24gc206bWItNCBzbTpwci0xNlwiPlxuICA8Z24tdWktY29udGVudC1naG9zdFxuICAgIGdob3N0Q2xhc3M9XCJoLVsxNzhweF1cIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdhYnN0cmFjdCcpXCJcbiAgPlxuICAgIDxnbi11aS1tYXgtbGluZXMgW21heExpbmVzXT1cIjZcIiAqbmdJZj1cIm1ldGFkYXRhLmFic3RyYWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyXG4gICAgICAgICAgW3RleHRDb250ZW50XT1cIm1ldGFkYXRhLmFic3RyYWN0XCJcbiAgICAgICAgPjwvZ24tdWktbWFya2Rvd24tcGFyc2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9nbi11aS1tYXgtbGluZXM+XG4gIDwvZ24tdWktY29udGVudC1naG9zdD5cblxuICA8cFxuICAgIGNsYXNzPVwibXQtNiBtYi0zIGZvbnQtbWVkaXVtIHRleHQtYmxhY2sgdGV4dC1zbVwiXG4gICAgdHJhbnNsYXRlXG4gICAgKm5nSWY9XCIhZmllbGRSZWFkeSgna2V5d29yZHMnKSB8fCBtZXRhZGF0YS5rZXl3b3Jkcz8ubGVuZ3RoXCJcbiAgPlxuICAgIHJlY29yZC5tZXRhZGF0YS5rZXl3b3Jkc1xuICA8L3A+XG5cbiAgPGduLXVpLWNvbnRlbnQtZ2hvc3RcbiAgICBnaG9zdENsYXNzPVwiaC1bMzFweF0gdy0zLzRcIlxuICAgIFtzaG93Q29udGVudF09XCJmaWVsZFJlYWR5KCdrZXl3b3JkcycpXCJcbiAgPlxuICAgIDxnbi11aS1tYXgtbGluZXMgW21heExpbmVzXT1cIjdcIiAqbmdJZj1cIm1ldGFkYXRhLmtleXdvcmRzPy5sZW5ndGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXRhZGF0YS1pbmZvLWtleXdvcmRzIHNtOnBiLTQgZmxleCBmbGV4LXdyYXAgZ2FwLTJcIj5cbiAgICAgICAgPGduLXVpLWJhZGdlXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgbG93ZXJjYXNlXCJcbiAgICAgICAgICAoY2xpY2spPVwib25LZXl3b3JkQ2xpY2soa2V5d29yZClcIlxuICAgICAgICAgIFtjbGlja2FibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGtleXdvcmQgb2YgbWV0YWRhdGEua2V5d29yZHNcIlxuICAgICAgICAgID57eyBrZXl3b3JkLmxhYmVsIH19PC9nbi11aS1iYWRnZVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2duLXVpLW1heC1saW5lcz5cbiAgPC9nbi11aS1jb250ZW50LWdob3N0PlxuPC9kaXY+XG5cbjxnbi11aS1leHBhbmRhYmxlLXBhbmVsXG4gICpuZ0lmPVwiXG4gICAgbWV0YWRhdGEubGljZW5zZXMgfHxcbiAgICBtZXRhZGF0YS5sZWdhbENvbnN0cmFpbnRzIHx8XG4gICAgbWV0YWRhdGEuc2VjdXJpdHlDb25zdHJhaW50cyB8fFxuICAgIG1ldGFkYXRhLm90aGVyQ29uc3RyYWludHNcbiAgXCJcbiAgW3RpdGxlXT1cIidyZWNvcmQubWV0YWRhdGEudXNhZ2UnIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwidXNhZ2UtcGFuZWxcIlxuPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtWzEwcHhdIG1yLTQgcHktWzEycHhdIHJvdW5kZWQgdGV4dC1ncmF5LTkwMFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpY2Vuc2Ugb2YgbGljZW5zZXNcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJsaWNlbnNlLnVybDsgZWxzZSBub1VybFwiIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW2hyZWZdPVwibGljZW5zZS51cmxcIlxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmUgdHJhbnNpdGlvbi1hbGxcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgbGljZW5zZS50ZXh0IH19XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiIXctWzEycHhdICFoLVsxMnB4XSAhdGV4dC1bMTJweF0gb3BhY2l0eS03NSBzaHJpbmstMFwiXG4gICAgICAgICAgICBuYW1lPVwibWF0T3BlbkluTmV3XCJcbiAgICAgICAgICA+PC9uZy1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9Vcmw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIiBnblVpTGlua2lmeT5cbiAgICAgICAgICB7eyBsaWNlbnNlLnRleHQgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJsZWdhbENvbnN0cmFpbnRzLmxlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgPGduLXVpLW1hcmtkb3duLXBhcnNlclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb25zdHJhaW50IG9mIGxlZ2FsQ29uc3RyYWludHNcIlxuICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJjb25zdHJhaW50XCJcbiAgICAgICAgPlxuICAgICAgICA8L2duLXVpLW1hcmtkb3duLXBhcnNlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvdGhlckNvbnN0cmFpbnRzLmxlbmd0aFwiPlxuICAgICAgPGRpdiBnblVpTGlua2lmeSAqbmdGb3I9XCJsZXQgY29uc3RyYWludCBvZiBvdGhlckNvbnN0cmFpbnRzXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWJsYWNrIHRleHQtc20gbWItWzJweF0gbXQtWzE2cHhdXCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS5vdGhlckNvbnN0cmFpbnRzXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cbiAgICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyIFt0ZXh0Q29udGVudF09XCJjb25zdHJhaW50XCI+XG4gICAgICAgICAgPC9nbi11aS1tYXJrZG93bi1wYXJzZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8c3BhbiBjbGFzcz1cIm5vVXNhZ2VcIiAqbmdJZj1cIiFoYXNVc2FnZVwiPlxuICAgICAge3sgJ3JlY29yZC5tZXRhZGF0YS5ub1VzYWdlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2duLXVpLWV4cGFuZGFibGUtcGFuZWw+XG48Z24tdWktZXhwYW5kYWJsZS1wYW5lbFxuICAqbmdJZj1cIlxuICAgIChtZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgJiYgbWV0YWRhdGEubGluZWFnZSkgfHxcbiAgICBtZXRhZGF0YS5yZXNvdXJjZVVwZGF0ZWQgfHxcbiAgICBtZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgfHxcbiAgICAobWV0YWRhdGEua2luZCA9PT0gJ2RhdGFzZXQnICYmIG1ldGFkYXRhLnN0YXR1cylcbiAgXCJcbiAgW3RpdGxlXT1cIidyZWNvcmQubWV0YWRhdGEuZGV0YWlscycgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJkZXRhaWxzLXBhbmVsXCJcbj5cbiAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLmxpbmVhZ2VcIiBjbGFzcz1cInRleHQtZ3JheS05MDAgZmxleCBmbGV4LWNvbCBtdC00IGdhcC0yXCI+XG4gICAgPHAgY2xhc3M9XCJ3aGl0ZXNwYWNlLXByZS1saW5lIGJyZWFrLXdvcmRzIHRleHQtZ3JheS05MDBcIiBnblVpTGlua2lmeT5cbiAgICAgIHt7IG1ldGFkYXRhLmxpbmVhZ2UgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtNiBtdC01IG1iLThcIiAqbmdJZj1cInJlc291cmNlQ29udGFjdFwiPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbj8ubG9nb1VybD8uaHJlZlwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1zb2xpZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgYmctd2hpdGUgaC0zMiBvdmVyZmxvdy1oaWRkZW5cIlxuICAgID5cbiAgICAgIDxnbi11aS10aHVtYm5haWxcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsXCJcbiAgICAgICAgW3RodW1ibmFpbFVybF09XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uLmxvZ29VcmwuaHJlZlwiXG4gICAgICAgIGZpdD1cImNvbnRhaW5cIlxuICAgICAgPjwvZ24tdWktdGh1bWJuYWlsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnByb2R1Y2VyPC9wPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LXRpdGxlIHRleHQtMjEgbXItMiBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICBkYXRhLWN5PVwib3JnYW5pemF0aW9uLW5hbWVcIlxuICAgICAgPlxuICAgICAgICB7eyByZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy5uYW1lIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy53ZWJzaXRlXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW2hyZWZdPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIGNsYXNzPVwiY29udGFjdC13ZWJzaXRlIHRleHQtcHJpbWFyeSB0ZXh0LXNtIGN1cnNvci1wb2ludGVyIGhvdmVyOnVuZGVybGluZSB0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSB9fVxuICAgICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIiF3LVsxMnB4XSAhaC1bMTJweF0gIXRleHQtWzEycHhdIG9wYWNpdHktNzUgc2hyaW5rLTBcIlxuICAgICAgICAgICAgbmFtZT1cIm1hdE9wZW5Jbk5ld1wiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwicmVzb3VyY2VDb250YWN0LmVtYWlsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiIXctNSAhaC01ICF0ZXh0LVsyMHB4XSBvcGFjaXR5LTc1IHNocmluay0wXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXRNYWlsT3V0bGluZVwiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3QuZW1haWxcIlxuICAgICAgICAgICAgW2hyZWZdPVwiJ21haWx0bzonICsgcmVzb3VyY2VDb250YWN0LmVtYWlsXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBob3Zlcjp1bmRlcmxpbmUgbWwtMlwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImNvbnRhY3QtZW1haWxcIlxuICAgICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdD8uZW1haWwgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJweS02IHB4LTYgcm91bmRlZCBiZy1ncmF5LTEwMCBncmlkIGdyaWQtY29scy0yIGdhcC15LTYgZ2FwLXgtWzIwcHhdIHRleHQtZ3JheS03MDBcIlxuICA+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnJlc291cmNlQ3JlYXRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5jcmVhdGlvbjwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtIG10LTFcIj5cbiAgICAgICAge3sgZm9ybWF0RGF0ZShtZXRhZGF0YS5yZXNvdXJjZUNyZWF0ZWQpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnJlc291cmNlUHVibGlzaGVkXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnB1YmxpY2F0aW9uPC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMVwiPlxuICAgICAgICB7eyBmb3JtYXREYXRlKG1ldGFkYXRhLnJlc291cmNlUHVibGlzaGVkKSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJ1cGRhdGVGcmVxdWVuY3lcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5PC9wPlxuICAgICAgPHBcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMSB1cGRhdGVGcmVxdWVuY3lcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgW3RyYW5zbGF0ZVBhcmFtc109XCJ7IGNvdW50OiB1cGRhdGVkVGltZXMgfVwiXG4gICAgICA+XG4gICAgICAgIHt7IHVwZGF0ZUZyZXF1ZW5jeSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gbWItMVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEubGFuZ3VhZ2VzPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgZmxleC13cmFwXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5ndWFnZSBvZiBtZXRhZGF0YS5vdGhlckxhbmd1YWdlc1wiXG4gICAgICAgID5cbiAgICAgICAgICBsYW5ndWFnZS57eyBsYW5ndWFnZSB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwidGVtcG9yYWxFeHRlbnRcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQ8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBtYi0xIHRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwidGVtcG9yYWxFeHRlbnQuc3RhcnQgJiYgdGVtcG9yYWxFeHRlbnQuZW5kXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntcbiAgICAgICAgICAgIHN0YXJ0OiB0ZW1wb3JhbEV4dGVudC5zdGFydCxcbiAgICAgICAgICAgIGVuZDogdGVtcG9yYWxFeHRlbnQuZW5kLFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgcmVjb3JkLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50LmZyb21EYXRlVG9EYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cInRlbXBvcmFsRXh0ZW50LnN0YXJ0ICYmICF0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBzdGFydDogdGVtcG9yYWxFeHRlbnQuc3RhcnQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQuc2luY2VEYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cIiF0ZW1wb3JhbEV4dGVudC5zdGFydCAmJiB0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBlbmQ6IHRlbXBvcmFsRXh0ZW50LmVuZCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS50ZW1wb3JhbEV4dGVudC51bnRpbERhdGVcbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJcbiAgICBtZXRhZGF0YS5raW5kICE9PSAnZGF0YXNldCcgJiZcbiAgICBtZXRhZGF0YS5zcGF0aWFsRXh0ZW50cyAmJlxuICAgIG1ldGFkYXRhLnNwYXRpYWxFeHRlbnRzLmxlbmd0aFxuICBcIlxuICBbdGl0bGVdPVwiJ3NlcnZpY2UubWV0YWRhdGEuc3BhdGlhbEV4dGVudCcgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJzcGF0aWFsLWV4dGVudC1wYW5lbFwiXG4+XG4gIDxnbi11aS1zcGF0aWFsLWV4dGVudFxuICAgIGNsYXNzPVwiZmxleCBoLVsyNzFweF0gdy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBtdC0zIG1iLTZcIlxuICAgIFtzcGF0aWFsRXh0ZW50c109XCJtZXRhZGF0YS5zcGF0aWFsRXh0ZW50c1wiXG4gID48L2duLXVpLXNwYXRpYWwtZXh0ZW50PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJtZXRhZGF0YS5sYW5kaW5nUGFnZVwiXG4gIFt0aXRsZV09XCInc2VydmljZS5tZXRhZGF0YS5vdGhlcicgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJvdGhlci1wYW5lbFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1yLTQgcHktNSByb3VuZGVkIHRleHQtZ3JheS03MDBcIj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEucmVjb3JkVXBkYXRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3A+XG4gICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICB7eyBtZXRhZGF0YS5yZWNvcmRVcGRhdGVkICYmIGZvcm1hdERhdGVUaW1lKG1ldGFkYXRhLnJlY29yZFVwZGF0ZWQpIH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLmxhbmRpbmdQYWdlXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnNoZWV0PC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIiB0cmFuc2xhdGU+XG4gICAgICAgIDxhIFtocmVmXT1cIm1ldGFkYXRhLmxhbmRpbmdQYWdlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay1hbGxcIiBnblVpTGlua2lmeT57eyBtZXRhZGF0YS5sYW5kaW5nUGFnZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS5vd25lck9yZ2FuaXphdGlvblwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5vd25lcjwvcD5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgIHt7IG1ldGFkYXRhLm93bmVyT3JnYW5pemF0aW9uLm5hbWUgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEudW5pcXVlSWRlbnRpZmllclwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51bmlxdWVJZDwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGNvbnRlbnQtYWxpZ24gaXRlbXMtZW5kIGdhcC0xXCI+XG4gICAgICAgIDxnbi11aS1jb3B5LXRleHQtYnV0dG9uXG4gICAgICAgICAgW3RleHRdPVwibWV0YWRhdGEudW5pcXVlSWRlbnRpZmllclwiXG4gICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIid0b29sdGlwLmlkLmNvcHknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbZGlzcGxheVRleHRdPVwiZmFsc2VcIlxuICAgICAgICA+PC9nbi11aS1jb3B5LXRleHQtYnV0dG9uPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiPlxuICAgICAgICAgIHt7IG1ldGFkYXRhLnVuaXF1ZUlkZW50aWZpZXIgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLnRvcGljcz8ubGVuZ3RoXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gbWItMVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudG9waWNzPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cInNtOnBiLTQgc206cHItMTZcIj5cbiAgICAgICAgPGduLXVpLWJhZGdlXG4gICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgbXItMiBtYi0yIGxvd2VyY2FzZVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHRvcGljIG9mIG1ldGFkYXRhLnRvcGljc1wiXG4gICAgICAgICAgPnt7IHRvcGljIH19PC9nbi11aS1iYWRnZVxuICAgICAgICA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2duLXVpLWV4cGFuZGFibGUtcGFuZWw+XG4iXX0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYy9saWIvbWV0YWRhdGEtaW5mby9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9tZXRhZGF0YS1pbmZvL21ldGFkYXRhLWluZm8uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUE7QUFLdEIsT0FBTyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFBO0FBQ3RGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsaUJBQWlCLEdBQ2xCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsdUJBQXVCLEdBQ3hCLE1BQU0sc0NBQXNDLENBQUE7QUFDN0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUE7QUFDaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFN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cG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBLZXl3b3JkLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgZ2V0VGVtcG9yYWxSYW5nZVVuaW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgeyBNYXJrZG93blBhcnNlckNvbXBvbmVudCB9IGZyb20gJy4uL21hcmtkb3duLXBhcnNlci9tYXJrZG93bi1wYXJzZXIuY29tcG9uZW50J1xuaW1wb3J0IHtcbiAgRXhwYW5kYWJsZVBhbmVsQ29tcG9uZW50LFxuICBNYXhMaW5lc0NvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9sYXlvdXQvc3JjJ1xuaW1wb3J0IHsgVHJhbnNsYXRlRGlyZWN0aXZlLCBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7XG4gIEJhZGdlQ29tcG9uZW50LFxuICBDb3B5VGV4dEJ1dHRvbkNvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9pbnB1dHMvc3JjJ1xuaW1wb3J0IHsgQ29udGVudEdob3N0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29udGVudC1naG9zdC9jb250ZW50LWdob3N0LmNvbXBvbmVudCdcbmltcG9ydCB7IE5nSWNvbiwgcHJvdmlkZUljb25zIH0gZnJvbSAnQG5nLWljb25zL2NvcmUnXG5pbXBvcnQgeyBtYXRPcGVuSW5OZXcgfSBmcm9tICdAbmctaWNvbnMvbWF0ZXJpYWwtaWNvbnMvYmFzZWxpbmUnXG5pbXBvcnQgeyBtYXRNYWlsT3V0bGluZSB9IGZyb20gJ0BuZy1pY29ucy9tYXRlcmlhbC1pY29ucy9vdXRsaW5lJ1xuaW1wb3J0IHsgVGh1bWJuYWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGh1bWJuYWlsL3RodW1ibmFpbC5jb21wb25lbnQnXG5pbXBvcnQgeyBHblVpTGlua2lmeURpcmVjdGl2ZSB9IGZyb20gJy4vbGlua2lmeS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBHblVpSHVtYW5pemVEYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL3NoYXJlZC9zcmMnXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBTcGF0aWFsRXh0ZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91aS9tYXAvc3JjJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnbi11aS1tZXRhZGF0YS1pbmZvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21ldGFkYXRhLWluZm8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXRhZGF0YS1pbmZvLmNvbXBvbmVudC5jc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJhbnNsYXRlRGlyZWN0aXZlLFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgTWFya2Rvd25QYXJzZXJDb21wb25lbnQsXG4gICAgRXhwYW5kYWJsZVBhbmVsQ29tcG9uZW50LFxuICAgIEJhZGdlQ29tcG9uZW50LFxuICAgIENvbnRlbnRHaG9zdENvbXBvbmVudCxcbiAgICBUaHVtYm5haWxDb21wb25lbnQsXG4gICAgTWF4TGluZXNDb21wb25lbnQsXG4gICAgQ29weVRleHRCdXR0b25Db21wb25lbnQsXG4gICAgTmdJY29uLFxuICAgIEduVWlMaW5raWZ5RGlyZWN0aXZlLFxuICAgIEduVWlIdW1hbml6ZURhdGVEaXJlY3RpdmUsXG4gICAgU3BhdGlhbEV4dGVudENvbXBvbmVudCxcbiAgXSxcbiAgdmlld1Byb3ZpZGVyczogW1xuICAgIHByb3ZpZGVJY29ucyh7XG4gICAgICBtYXRPcGVuSW5OZXcsXG4gICAgICBtYXRNYWlsT3V0bGluZSxcbiAgICB9KSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFJbmZvQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbWV0YWRhdGE6IFBhcnRpYWw8Q2F0YWxvZ1JlY29yZD5cbiAgQElucHV0KCkgaW5jb21wbGV0ZTogYm9vbGVhblxuICBAT3V0cHV0KCkga2V5d29yZCA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5d29yZD4oKVxuICB1cGRhdGVkVGltZXM6IG51bWJlclxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVNlcnZpY2U6IERhdGVTZXJ2aWNlKSB7fVxuXG4gIGdldCBoYXNVc2FnZSgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5tZXRhZGF0YS5leHRyYXM/LmlzT3BlbkRhdGEgPT09IHRydWUgfHxcbiAgICAgICh0aGlzLm1ldGFkYXRhLmxlZ2FsQ29uc3RyYWludHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5sZWdhbENvbnN0cmFpbnRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAodGhpcy5tZXRhZGF0YS5vdGhlckNvbnN0cmFpbnRzPy5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMub3RoZXJDb25zdHJhaW50cy5sZW5ndGggPiAwKSB8fFxuICAgICAgKHRoaXMubWV0YWRhdGEubGljZW5zZXM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5saWNlbnNlcy5sZW5ndGggPiAwKVxuICAgIClcbiAgfVxuXG4gIGdldCBsZWdhbENvbnN0cmFpbnRzKCkge1xuICAgIGxldCBhcnJheSA9IFtdXG4gICAgaWYgKHRoaXMubWV0YWRhdGEubGVnYWxDb25zdHJhaW50cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsaWNlbnNlc1RleHRzID0gdGhpcy5tZXRhZGF0YS5saWNlbnNlcy5tYXAoXG4gICAgICAgIChsaWNlbnNlKSA9PiBsaWNlbnNlLnRleHRcbiAgICAgIClcbiAgICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KFxuICAgICAgICB0aGlzLm1ldGFkYXRhLmxlZ2FsQ29uc3RyYWludHNcbiAgICAgICAgICAuZmlsdGVyKChjKSA9PiBjLnRleHQgJiYgIWxpY2Vuc2VzVGV4dHMuaW5jbHVkZXMoYy50ZXh0KSlcbiAgICAgICAgICAubWFwKChjKSA9PiBjLnRleHQpXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgZ2V0IG90aGVyQ29uc3RyYWludHMoKSB7XG4gICAgbGV0IGFycmF5ID0gW11cbiAgICBpZiAodGhpcy5tZXRhZGF0YS5vdGhlckNvbnN0cmFpbnRzPy5sZW5ndGgpIHtcbiAgICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KFxuICAgICAgICB0aGlzLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHMuZmlsdGVyKChjKSA9PiBjLnRleHQpLm1hcCgoYykgPT4gYy50ZXh0KVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlcbiAgfVxuXG4gIGdldCBsaWNlbnNlcygpOiB7IHRleHQ6IHN0cmluZzsgdXJsOiBzdHJpbmcgfVtdIHtcbiAgICBsZXQgYXJyYXkgPSBbXVxuICAgIGlmICh0aGlzLm1ldGFkYXRhLmxpY2Vuc2VzPy5sZW5ndGgpIHtcbiAgICAgIGFycmF5ID0gYXJyYXkuY29uY2F0KFxuICAgICAgICB0aGlzLm1ldGFkYXRhLmxpY2Vuc2VzXG4gICAgICAgICAgLmZpbHRlcigoYykgPT4gYy50ZXh0KVxuICAgICAgICAgIC5tYXAoKGMpID0+ICh7IHRleHQ6IGMudGV4dCwgdXJsOiBjLnVybCB9KSlcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5XG4gIH1cblxuICBnZXQgdXBkYXRlRnJlcXVlbmN5KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMubWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5IGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICB0aGlzLnVwZGF0ZWRUaW1lcyA9IHRoaXMubWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lc1xuICAgICAgcmV0dXJuIGBkb21haW4ucmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeS4ke3RoaXMubWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5LnBlcn1gXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYGRvbWFpbi5yZWNvcmQudXBkYXRlRnJlcXVlbmN5LiR7dGhpcy5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3l9YFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgZ2V0IHRlbXBvcmFsRXh0ZW50KCk6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgdGVtcG9yYWxFeHRlbnRzID1cbiAgICAgIHRoaXMubWV0YWRhdGEua2luZCA9PT0gJ2RhdGFzZXQnID8gdGhpcy5tZXRhZGF0YS50ZW1wb3JhbEV4dGVudHMgOiBbXVxuICAgIHJldHVybiBnZXRUZW1wb3JhbFJhbmdlVW5pb24odGVtcG9yYWxFeHRlbnRzLCB0aGlzLmRhdGVTZXJ2aWNlKVxuICB9XG5cbiAgZ2V0IHNob3duT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLm93bmVyT3JnYW5pemF0aW9uXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb250YWN0KCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmNvbnRhY3RzRm9yUmVzb3VyY2U/LlswXVxuICB9XG5cbiAgZmllbGRSZWFkeShwcm9wTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuICF0aGlzLmluY29tcGxldGUgfHwgcHJvcE5hbWUgaW4gdGhpcy5tZXRhZGF0YVxuICB9XG5cbiAgb25LZXl3b3JkQ2xpY2soa2V5d29yZDogS2V5d29yZCkge1xuICAgIHRoaXMua2V5d29yZC5lbWl0KGtleXdvcmQpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtYi02IG1kLWRlc2NyaXB0aW9uIHNtOm1iLTQgc206cHItMTZcIj5cbiAgPGduLXVpLWNvbnRlbnQtZ2hvc3RcbiAgICBnaG9zdENsYXNzPVwiaC1bMTc4cHhdXCJcbiAgICBbc2hvd0NvbnRlbnRdPVwiZmllbGRSZWFkeSgnYWJzdHJhY3QnKVwiXG4gID5cbiAgICA8Z24tdWktbWF4LWxpbmVzXG4gICAgICBbbWF4TGluZXNdPVwiNlwiXG4gICAgICAqbmdJZj1cIm1ldGFkYXRhLmFic3RyYWN0XCJcbiAgICAgIGRhdGEtdGVzdD1cIm1ldGFkYXRhLWluZm8tYWJzdHJhY3RcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi02XCI+XG4gICAgICAgIDxnbi11aS1tYXJrZG93bi1wYXJzZXJcbiAgICAgICAgICBbdGV4dENvbnRlbnRdPVwibWV0YWRhdGEuYWJzdHJhY3RcIlxuICAgICAgICA+PC9nbi11aS1tYXJrZG93bi1wYXJzZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2duLXVpLW1heC1saW5lcz5cbiAgPC9nbi11aS1jb250ZW50LWdob3N0PlxuXG4gIDxwXG4gICAgY2xhc3M9XCJtdC02IG1iLTMgZm9udC1tZWRpdW0gdGV4dC1ibGFjayB0ZXh0LXNtXCJcbiAgICB0cmFuc2xhdGVcbiAgICAqbmdJZj1cIiFmaWVsZFJlYWR5KCdrZXl3b3JkcycpIHx8IG1ldGFkYXRhLmtleXdvcmRzPy5sZW5ndGhcIlxuICA+XG4gICAgcmVjb3JkLm1ldGFkYXRhLmtleXdvcmRzXG4gIDwvcD5cblxuICA8Z24tdWktY29udGVudC1naG9zdFxuICAgIGdob3N0Q2xhc3M9XCJoLVszMXB4XSB3LTMvNFwiXG4gICAgW3Nob3dDb250ZW50XT1cImZpZWxkUmVhZHkoJ2tleXdvcmRzJylcIlxuICA+XG4gICAgPGduLXVpLW1heC1saW5lcyBbbWF4TGluZXNdPVwiN1wiICpuZ0lmPVwibWV0YWRhdGEua2V5d29yZHM/Lmxlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGFkYXRhLWluZm8ta2V5d29yZHMgc206cGItNCBmbGV4IGZsZXgtd3JhcCBnYXAtMlwiPlxuICAgICAgICA8Z24tdWktYmFkZ2VcbiAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBsb3dlcmNhc2VcIlxuICAgICAgICAgIChjbGljayk9XCJvbktleXdvcmRDbGljayhrZXl3b3JkKVwiXG4gICAgICAgICAgW2NsaWNrYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQga2V5d29yZCBvZiBtZXRhZGF0YS5rZXl3b3Jkc1wiXG4gICAgICAgICAgPnt7IGtleXdvcmQubGFiZWwgfX08L2duLXVpLWJhZGdlXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZ24tdWktbWF4LWxpbmVzPlxuICA8L2duLXVpLWNvbnRlbnQtZ2hvc3Q+XG48L2Rpdj5cblxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJcbiAgICBtZXRhZGF0YS5saWNlbnNlcyB8fFxuICAgIG1ldGFkYXRhLmxlZ2FsQ29uc3RyYWludHMgfHxcbiAgICBtZXRhZGF0YS5zZWN1cml0eUNvbnN0cmFpbnRzIHx8XG4gICAgbWV0YWRhdGEub3RoZXJDb25zdHJhaW50c1xuICBcIlxuICBbdGl0bGVdPVwiJ3JlY29yZC5tZXRhZGF0YS51c2FnZScgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJ1c2FnZS1wYW5lbFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC1bMTBweF0gbXItNCBweS1bMTJweF0gcm91bmRlZCB0ZXh0LWdyYXktOTAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGljZW5zZSBvZiBsaWNlbnNlc1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImxpY2Vuc2UudXJsOyBlbHNlIG5vVXJsXCIgY2xhc3M9XCJ0ZXh0LXByaW1hcnlcIj5cbiAgICAgICAgPGFcbiAgICAgICAgICBbaHJlZl09XCJsaWNlbnNlLnVybFwiXG4gICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyIGhvdmVyOnVuZGVybGluZSB0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBsaWNlbnNlLnRleHQgfX1cbiAgICAgICAgICA8bmctaWNvblxuICAgICAgICAgICAgY2xhc3M9XCIhdy1bMTJweF0gIWgtWzEycHhdICF0ZXh0LVsxMnB4XSBvcGFjaXR5LTc1IHNocmluay0wXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXRPcGVuSW5OZXdcIlxuICAgICAgICAgID48L25nLWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNub1VybD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcHJpbWFyeVwiIGduVWlMaW5raWZ5PlxuICAgICAgICAgIHt7IGxpY2Vuc2UudGV4dCB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxlZ2FsQ29uc3RyYWludHMubGVuZ3RoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICA8Z24tdWktbWFya2Rvd24tcGFyc2VyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNvbnN0cmFpbnQgb2YgbGVnYWxDb25zdHJhaW50c1wiXG4gICAgICAgICAgW3RleHRDb250ZW50XT1cImNvbnN0cmFpbnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvZ24tdWktbWFya2Rvd24tcGFyc2VyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm90aGVyQ29uc3RyYWludHMubGVuZ3RoXCI+XG4gICAgICA8ZGl2IGduVWlMaW5raWZ5ICpuZ0Zvcj1cImxldCBjb25zdHJhaW50IG9mIG90aGVyQ29uc3RyYWludHNcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtYmxhY2sgdGV4dC1zbSBtYi1bMnB4XSBtdC1bMTZweF1cIlxuICAgICAgICA+XG4gICAgICAgICAgcmVjb3JkLm1ldGFkYXRhLm90aGVyQ29uc3RyYWludHNcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuICAgICAgICAgIDxnbi11aS1tYXJrZG93bi1wYXJzZXIgW3RleHRDb250ZW50XT1cImNvbnN0cmFpbnRcIj5cbiAgICAgICAgICA8L2duLXVpLW1hcmtkb3duLXBhcnNlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxzcGFuIGNsYXNzPVwibm9Vc2FnZVwiICpuZ0lmPVwiIWhhc1VzYWdlXCI+XG4gICAgICB7eyAncmVjb3JkLm1ldGFkYXRhLm5vVXNhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvZ24tdWktZXhwYW5kYWJsZS1wYW5lbD5cbjxnbi11aS1leHBhbmRhYmxlLXBhbmVsXG4gICpuZ0lmPVwiXG4gICAgKG1ldGFkYXRhLmtpbmQgPT09ICdkYXRhc2V0JyAmJiBtZXRhZGF0YS5saW5lYWdlKSB8fFxuICAgIHJlc291cmNlQ29udGFjdCB8fFxuICAgIG1ldGFkYXRhLnJlc291cmNlQ3JlYXRlZCB8fFxuICAgIG1ldGFkYXRhLnJlc291cmNlUHVibGlzaGVkIHx8XG4gICAgbWV0YWRhdGEucmVzb3VyY2VVcGRhdGVkIHx8XG4gICAgKG1ldGFkYXRhLmtpbmQgPT09ICdkYXRhc2V0JyAmJiBtZXRhZGF0YS51cGRhdGVGcmVxdWVuY3kpIHx8XG4gICAgbWV0YWRhdGEub3RoZXJMYW5ndWFnZXM/Lmxlbmd0aCB8fFxuICAgIChtZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgJiYgdGVtcG9yYWxFeHRlbnQpXG4gIFwiXG4gIFt0aXRsZV09XCIncmVjb3JkLm1ldGFkYXRhLmRldGFpbHMnIHwgdHJhbnNsYXRlXCJcbiAgZGF0YS10ZXN0PVwiZGV0YWlscy1wYW5lbFwiXG4+XG4gIDxkaXZcbiAgICAqbmdJZj1cIm1ldGFkYXRhLmtpbmQgPT09ICdkYXRhc2V0JyAmJiBtZXRhZGF0YS5saW5lYWdlXCJcbiAgICBjbGFzcz1cInRleHQtZ3JheS05MDAgZmxleCBmbGV4LWNvbCBtdC00IGdhcC0yXCJcbiAgICBkYXRhLXRlc3Q9XCJkZXRhaWxzLXBhbmVsLWxpbmVhZ2VcIlxuICA+XG4gICAgPHAgY2xhc3M9XCJ3aGl0ZXNwYWNlLXByZS1saW5lIGJyZWFrLXdvcmRzIHRleHQtZ3JheS05MDBcIiBnblVpTGlua2lmeT5cbiAgICAgIHt7IG1ldGFkYXRhLmxpbmVhZ2UgfX1cbiAgICA8L3A+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC02IG10LTUgbWItOCByZXNvdXJjZS1jb250YWN0XCJcbiAgICAqbmdJZj1cInJlc291cmNlQ29udGFjdFwiXG4gICAgZGF0YS10ZXN0PVwiZGV0YWlscy1wYW5lbC1yZXNvdXJjZS1jb250YWN0XCJcbiAgPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbj8ubG9nb1VybD8uaHJlZlwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJvcmRlci1zb2xpZCBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbWQgYmctd2hpdGUgaC0zMiBvdmVyZmxvdy1oaWRkZW5cIlxuICAgID5cbiAgICAgIDxnbi11aS10aHVtYm5haWxcbiAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBoLWZ1bGwgdy1mdWxsXCJcbiAgICAgICAgW3RodW1ibmFpbFVybF09XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uLmxvZ29VcmwuaHJlZlwiXG4gICAgICAgIGZpdD1cImNvbnRhaW5cIlxuICAgICAgPjwvZ24tdWktdGh1bWJuYWlsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW1cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnByb2R1Y2VyPC9wPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LXRpdGxlIHRleHQtMjEgbXItMiBjdXJzb3ItcG9pbnRlciBob3Zlcjp1bmRlcmxpbmVcIlxuICAgICAgICBkYXRhLWN5PVwib3JnYW5pemF0aW9uLW5hbWVcIlxuICAgICAgPlxuICAgICAgICB7eyByZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy5uYW1lIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3Qub3JnYW5pemF0aW9uPy53ZWJzaXRlXCI+XG4gICAgICAgIDxhXG4gICAgICAgICAgW2hyZWZdPVwicmVzb3VyY2VDb250YWN0Lm9yZ2FuaXphdGlvbi53ZWJzaXRlXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIGNsYXNzPVwiY29udGFjdC13ZWJzaXRlIHRleHQtcHJpbWFyeSB0ZXh0LXNtIGN1cnNvci1wb2ludGVyIGhvdmVyOnVuZGVybGluZSB0cmFuc2l0aW9uLWFsbFwiXG4gICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSB9fVxuICAgICAgICAgIDxuZy1pY29uXG4gICAgICAgICAgICBjbGFzcz1cIiF3LVsxMnB4XSAhaC1bMTJweF0gIXRleHQtWzEycHhdIG9wYWNpdHktNzUgc2hyaW5rLTBcIlxuICAgICAgICAgICAgbmFtZT1cIm1hdE9wZW5Jbk5ld1wiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiICpuZ0lmPVwicmVzb3VyY2VDb250YWN0LmVtYWlsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPG5nLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwiIXctNSAhaC01ICF0ZXh0LVsyMHB4XSBvcGFjaXR5LTc1IHNocmluay0wXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXRNYWlsT3V0bGluZVwiXG4gICAgICAgICAgPjwvbmctaWNvbj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKm5nSWY9XCJyZXNvdXJjZUNvbnRhY3QuZW1haWxcIlxuICAgICAgICAgICAgW2hyZWZdPVwiJ21haWx0bzonICsgcmVzb3VyY2VDb250YWN0LmVtYWlsXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSBob3Zlcjp1bmRlcmxpbmUgbWwtMlwiXG4gICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImNvbnRhY3QtZW1haWxcIlxuICAgICAgICAgICAgPnt7IHJlc291cmNlQ29udGFjdD8uZW1haWwgfX08L2FcbiAgICAgICAgICA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgY2xhc3M9XCJweS02IHB4LTYgcm91bmRlZCBiZy1ncmF5LTEwMCBncmlkIGdyaWQtY29scy0yIGdhcC15LTYgZ2FwLXgtWzIwcHhdIHRleHQtZ3JheS03MDBcIlxuICA+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXRhZGF0YS5yZXNvdXJjZUNyZWF0ZWRcIlxuICAgICAgZGF0YS10ZXN0PVwiZGV0YWlscy1wYW5lbC1yZXNvdXJjZS1jcmVhdGVkXCJcbiAgICA+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLmNyZWF0aW9uPC9wPlxuICAgICAgPHBcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMSByZXNvdXJjZS1jcmVhdGVkXCJcbiAgICAgICAgW2duVWlIdW1hbml6ZURhdGVdPVwibWV0YWRhdGEucmVzb3VyY2VDcmVhdGVkXCJcbiAgICAgID48L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXRhZGF0YS5yZXNvdXJjZVB1Ymxpc2hlZFwiXG4gICAgICBkYXRhLXRlc3Q9XCJkZXRhaWxzLXBhbmVsLXJlc291cmNlLXB1Ymxpc2hlZFwiXG4gICAgPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS5wdWJsaWNhdGlvbjwvcD5cbiAgICAgIDxwXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtIG10LTEgcmVzb3VyY2UtcHVibGlzaGVkXCJcbiAgICAgICAgW2duVWlIdW1hbml6ZURhdGVdPVwibWV0YWRhdGEucmVzb3VyY2VQdWJsaXNoZWRcIlxuICAgICAgPjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cIm1ldGFkYXRhLnJlc291cmNlVXBkYXRlZFwiXG4gICAgICBkYXRhLXRlc3Q9XCJkZXRhaWxzLXBhbmVsLXJlc291cmNlLXVwZGF0ZWRcIlxuICAgID5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudXBkYXRlPC9wPlxuICAgICAgPHBcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gbXQtMSByZXNvdXJjZS11cGRhdGVkXCJcbiAgICAgICAgW2duVWlIdW1hbml6ZURhdGVdPVwibWV0YWRhdGEucmVzb3VyY2VVcGRhdGVkXCJcbiAgICAgID48L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgJiYgbWV0YWRhdGEudXBkYXRlRnJlcXVlbmN5XCJcbiAgICAgIGRhdGEtdGVzdD1cImRldGFpbHMtcGFuZWwtdXBkYXRlLWZyZXF1ZW5jeVwiXG4gICAgPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVGcmVxdWVuY3k8L3A+XG4gICAgICA8cFxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bSBtdC0xIHVwZGF0ZUZyZXF1ZW5jeVwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cInsgY291bnQ6IHVwZGF0ZWRUaW1lcyB9XCJcbiAgICAgID5cbiAgICAgICAge3sgdXBkYXRlRnJlcXVlbmN5IH19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXRhZGF0YS5vdGhlckxhbmd1YWdlcz8ubGVuZ3RoXCJcbiAgICAgIGRhdGEtdGVzdD1cImRldGFpbHMtcGFuZWwtb3RoZXItbGFuZ3VhZ2VzXCJcbiAgICA+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc20gbWItMVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEubGFuZ3VhZ2VzPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTEgZmxleC13cmFwXCI+XG4gICAgICAgIDxwXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW0gb3RoZXItbGFuZ3VhZ2VzXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgbWV0YWRhdGEub3RoZXJMYW5ndWFnZXNcIlxuICAgICAgICA+XG4gICAgICAgICAgbGFuZ3VhZ2Uue3sgbGFuZ3VhZ2UgfX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJtZXRhZGF0YS5raW5kID09PSAnZGF0YXNldCcgJiYgdGVtcG9yYWxFeHRlbnRcIlxuICAgICAgZGF0YS10ZXN0PVwiZGV0YWlscy1wYW5lbC10ZW1wb3JhbC1leHRlbnRcIlxuICAgID5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQ8L3A+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMSBtYi0xIHRleHQtcHJpbWFyeSBmb250LW1lZGl1bSB0ZW1wb3JhbC1leHRlbnRcIlxuICAgICAgPlxuICAgICAgICA8cFxuICAgICAgICAgICpuZ0lmPVwidGVtcG9yYWxFeHRlbnQuc3RhcnQgJiYgdGVtcG9yYWxFeHRlbnQuZW5kXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntcbiAgICAgICAgICAgIHN0YXJ0OiB0ZW1wb3JhbEV4dGVudC5zdGFydCxcbiAgICAgICAgICAgIGVuZDogdGVtcG9yYWxFeHRlbnQuZW5kLFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgcmVjb3JkLm1ldGFkYXRhLnRlbXBvcmFsRXh0ZW50LmZyb21EYXRlVG9EYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cInRlbXBvcmFsRXh0ZW50LnN0YXJ0ICYmICF0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBzdGFydDogdGVtcG9yYWxFeHRlbnQuc3RhcnQgfVwiXG4gICAgICAgID5cbiAgICAgICAgICByZWNvcmQubWV0YWRhdGEudGVtcG9yYWxFeHRlbnQuc2luY2VEYXRlXG4gICAgICAgIDwvcD5cbiAgICAgICAgPHBcbiAgICAgICAgICAqbmdJZj1cIiF0ZW1wb3JhbEV4dGVudC5zdGFydCAmJiB0ZW1wb3JhbEV4dGVudC5lbmRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIFt0cmFuc2xhdGVQYXJhbXNdPVwieyBlbmQ6IHRlbXBvcmFsRXh0ZW50LmVuZCB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIHJlY29yZC5tZXRhZGF0YS50ZW1wb3JhbEV4dGVudC51bnRpbERhdGVcbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJcbiAgICBtZXRhZGF0YS5raW5kICE9PSAnZGF0YXNldCcgJiZcbiAgICBtZXRhZGF0YS5zcGF0aWFsRXh0ZW50cyAmJlxuICAgIG1ldGFkYXRhLnNwYXRpYWxFeHRlbnRzLmxlbmd0aFxuICBcIlxuICBbdGl0bGVdPVwiJ3NlcnZpY2UubWV0YWRhdGEuc3BhdGlhbEV4dGVudCcgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJzcGF0aWFsLWV4dGVudC1wYW5lbFwiXG4+XG4gIDxnbi11aS1zcGF0aWFsLWV4dGVudFxuICAgIGNsYXNzPVwiZmxleCBoLVsyNzFweF0gdy1mdWxsIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1ncmF5LTEwMCBtdC0zIG1iLTZcIlxuICAgIFtzcGF0aWFsRXh0ZW50c109XCJtZXRhZGF0YS5zcGF0aWFsRXh0ZW50c1wiXG4gID48L2duLXVpLXNwYXRpYWwtZXh0ZW50PlxuPC9nbi11aS1leHBhbmRhYmxlLXBhbmVsPlxuPGduLXVpLWV4cGFuZGFibGUtcGFuZWxcbiAgKm5nSWY9XCJtZXRhZGF0YS5sYW5kaW5nUGFnZVwiXG4gIFt0aXRsZV09XCInc2VydmljZS5tZXRhZGF0YS5vdGhlcicgfCB0cmFuc2xhdGVcIlxuICBkYXRhLXRlc3Q9XCJvdGhlci1wYW5lbFwiXG4+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00IG1yLTQgcHktNSByb3VuZGVkIHRleHQtZ3JheS03MDBcIj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEucmVjb3JkVXBkYXRlZFwiPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS51cGRhdGVkT248L3A+XG4gICAgICA8cFxuICAgICAgICBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiXG4gICAgICAgIFtnblVpSHVtYW5pemVEYXRlXT1cIm1ldGFkYXRhLnJlY29yZFVwZGF0ZWRcIlxuICAgICAgPjwvcD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEubGFuZGluZ1BhZ2VcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbVwiIHRyYW5zbGF0ZT5yZWNvcmQubWV0YWRhdGEuc2hlZXQ8L3A+XG4gICAgICA8cCBjbGFzcz1cInRleHQtcHJpbWFyeSBmb250LW1lZGl1bVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgPGEgW2hyZWZdPVwibWV0YWRhdGEubGFuZGluZ1BhZ2VcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFrLWFsbFwiIGduVWlMaW5raWZ5Pnt7IG1ldGFkYXRhLmxhbmRpbmdQYWdlIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIm1ldGFkYXRhLm93bmVyT3JnYW5pemF0aW9uXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLm93bmVyPC9wPlxuICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXByaW1hcnkgZm9udC1tZWRpdW1cIj5cbiAgICAgICAge3sgbWV0YWRhdGEub3duZXJPcmdhbml6YXRpb24ubmFtZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXRhZGF0YS51bmlxdWVJZGVudGlmaWVyXCI+XG4gICAgICA8cCBjbGFzcz1cInRleHQtc21cIiB0cmFuc2xhdGU+cmVjb3JkLm1ldGFkYXRhLnVuaXF1ZUlkPC9wPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgY29udGVudC1hbGlnbiBpdGVtcy1lbmQgZ2FwLTFcIj5cbiAgICAgICAgPGduLXVpLWNvcHktdGV4dC1idXR0b25cbiAgICAgICAgICBbdGV4dF09XCJtZXRhZGF0YS51bmlxdWVJZGVudGlmaWVyXCJcbiAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ3Rvb2x0aXAuaWQuY29weScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtkaXNwbGF5VGV4dF09XCJmYWxzZVwiXG4gICAgICAgID48L2duLXVpLWNvcHktdGV4dC1idXR0b24+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1wcmltYXJ5IGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAge3sgbWV0YWRhdGEudW5pcXVlSWRlbnRpZmllciB9fVxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWV0YWRhdGEudG9waWNzPy5sZW5ndGhcIj5cbiAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBtYi0xXCIgdHJhbnNsYXRlPnJlY29yZC5tZXRhZGF0YS50b3BpY3M8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwic206cGItNCBzbTpwci0xNlwiPlxuICAgICAgICA8Z24tdWktYmFkZ2VcbiAgICAgICAgICBbY2xpY2thYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBtci0yIG1iLTIgbG93ZXJjYXNlXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgdG9waWMgb2YgbWV0YWRhdGEudG9waWNzXCJcbiAgICAgICAgICA+e3sgdG9waWMgfX08L2duLXVpLWJhZGdlXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZ24tdWktZXhwYW5kYWJsZS1wYW5lbD5cbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class StacItemsResultGridComponent {
6
+ constructor() {
7
+ this.items = [];
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacItemsResultGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StacItemsResultGridComponent, isStandalone: true, selector: "gn-ui-stac-items-result-grid", inputs: { items: "items" }, ngImport: i0, template: "<div class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-[10px]\">\n <div *ngFor=\"let item of items\">\n <div\n data-cy=\"stac-item-card\"\n class=\"h-[173px] flex flex-col justify-between gap-4 bg-white rounded-lg border border-gray-300 px-5 py-3 mx-auto\"\n >\n <h2 class=\"text-xl text-black line-clamp-4 break-words\">\n {{ item.id }}\n </h2>\n <p class=\"truncate\">{{ item.properties.datetime }}</p>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacItemsResultGridComponent, decorators: [{
13
+ type: Component,
14
+ args: [{ selector: 'gn-ui-stac-items-result-grid', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-[10px]\">\n <div *ngFor=\"let item of items\">\n <div\n data-cy=\"stac-item-card\"\n class=\"h-[173px] flex flex-col justify-between gap-4 bg-white rounded-lg border border-gray-300 px-5 py-3 mx-auto\"\n >\n <h2 class=\"text-xl text-black line-clamp-4 break-words\">\n {{ item.id }}\n </h2>\n <p class=\"truncate\">{{ item.properties.datetime }}</p>\n </div>\n </div>\n</div>\n" }]
15
+ }], propDecorators: { items: [{
16
+ type: Input
17
+ }] } });
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYy1pdGVtcy1yZXN1bHQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3VpL2VsZW1lbnRzL3NyYy9saWIvc3RhYy1pdGVtcy1yZXN1bHQtZ3JpZC9zdGFjLWl0ZW1zLXJlc3VsdC1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvZWxlbWVudHMvc3JjL2xpYi9zdGFjLWl0ZW1zLXJlc3VsdC1ncmlkL3N0YWMtaXRlbXMtcmVzdWx0LWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7QUFXekUsTUFBTSxPQUFPLDRCQUE0QjtJQVJ6QztRQVNXLFVBQUssR0FBZSxFQUFFLENBQUE7S0FDaEM7K0dBRlksNEJBQTRCO21HQUE1Qiw0QkFBNEIsb0hDWnpDLHNlQWFBLHlERE5ZLFlBQVk7OzRGQUtYLDRCQUE0QjtrQkFSeEMsU0FBUzsrQkFDRSw4QkFBOEIsY0FDNUIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUdOLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFN0YWNJdGVtIH0gZnJvbSAnQGNhbXB0b2NhbXAvb2djLWNsaWVudCdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ24tdWktc3RhYy1pdGVtcy1yZXN1bHQtZ3JpZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RhYy1pdGVtcy1yZXN1bHQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zdGFjLWl0ZW1zLXJlc3VsdC1ncmlkLmNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU3RhY0l0ZW1zUmVzdWx0R3JpZENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGl0ZW1zOiBTdGFjSXRlbVtdID0gW11cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0xIHNtOmdyaWQtY29scy0yIGxnOmdyaWQtY29scy0zIGdhcC1bMTBweF1cIj5cbiAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgIDxkaXZcbiAgICAgIGRhdGEtY3k9XCJzdGFjLWl0ZW0tY2FyZFwiXG4gICAgICBjbGFzcz1cImgtWzE3M3B4XSBmbGV4IGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtNCBiZy13aGl0ZSByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcHgtNSBweS0zIG14LWF1dG9cIlxuICAgID5cbiAgICAgIDxoMiBjbGFzcz1cInRleHQteGwgdGV4dC1ibGFjayBsaW5lLWNsYW1wLTQgYnJlYWstd29yZHNcIj5cbiAgICAgICAge3sgaXRlbS5pZCB9fVxuICAgICAgPC9oMj5cbiAgICAgIDxwIGNsYXNzPVwidHJ1bmNhdGVcIj57eyBpdGVtLnByb3BlcnRpZXMuZGF0ZXRpbWUgfX08L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=