@c8y/ngx-components 1021.13.3 → 1021.22.0

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 (432) hide show
  1. package/alarms/alarm-details.component.d.ts +1 -3
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/alarms/alarm-info.component.d.ts +9 -14
  4. package/alarms/alarm-info.component.d.ts.map +1 -1
  5. package/alarms/alarms-list.component.d.ts +2 -17
  6. package/alarms/alarms-list.component.d.ts.map +1 -1
  7. package/alarms/alarms-view.service.d.ts +1 -0
  8. package/alarms/alarms-view.service.d.ts.map +1 -1
  9. package/alarms/alarms.component.d.ts.map +1 -1
  10. package/alarms/alarms.helper.d.ts +5 -0
  11. package/alarms/alarms.helper.d.ts.map +1 -0
  12. package/alarms/alarms.model.d.ts +30 -0
  13. package/alarms/alarms.model.d.ts.map +1 -1
  14. package/alarms/alarms.module.d.ts.map +1 -1
  15. package/alarms/cockpit/index.d.ts.map +1 -1
  16. package/alarms/devicemanagement/index.d.ts.map +1 -1
  17. package/alarms/index.d.ts +5 -4
  18. package/alarms/index.d.ts.map +1 -1
  19. package/context-dashboard/context-dashboard.model.d.ts +1 -0
  20. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  21. package/context-dashboard/context-dashboard.service.d.ts +7 -5
  22. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  23. package/context-dashboard/dashboard-detail.component.d.ts +4 -7
  24. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  25. package/context-dashboard/dashboard-detail.service.d.ts +4 -4
  26. package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
  27. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
  28. package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
  29. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
  30. package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
  31. package/core/action-bar/action-bar-item.component.d.ts +1 -1
  32. package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
  33. package/core/action-bar/action-bar.module.d.ts +6 -6
  34. package/core/action-bar/action-bar.module.d.ts.map +1 -1
  35. package/core/bootstrap/bootstrap.component.d.ts +3 -1
  36. package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
  37. package/core/common/aggregation/aggregation.model.d.ts +39 -0
  38. package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
  39. package/core/common/aggregation/aggregation.service.d.ts +17 -0
  40. package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
  41. package/core/common/index.d.ts +4 -0
  42. package/core/common/index.d.ts.map +1 -1
  43. package/core/common/inter-app.service.d.ts +48 -0
  44. package/core/common/inter-app.service.d.ts.map +1 -0
  45. package/core/common/interval-based-reload.abstract.d.ts +120 -0
  46. package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
  47. package/core/dashboard/dashboard.module.d.ts +24 -18
  48. package/core/dashboard/dashboard.module.d.ts.map +1 -1
  49. package/core/dashboard/index.d.ts +3 -0
  50. package/core/dashboard/index.d.ts.map +1 -1
  51. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
  52. package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
  53. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
  54. package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
  55. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
  56. package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
  57. package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
  58. package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
  59. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
  60. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
  61. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
  62. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
  63. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
  64. package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
  65. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
  66. package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
  67. package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
  68. package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
  69. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
  70. package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
  71. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
  72. package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
  73. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  74. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +11 -8
  75. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  76. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +6 -12
  77. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  78. package/core/header/header.module.d.ts +18 -18
  79. package/core/header/header.module.d.ts.map +1 -1
  80. package/core/header/title/title.component.d.ts +1 -1
  81. package/core/header/title/title.component.d.ts.map +1 -1
  82. package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
  83. package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
  84. package/core/i18n/i18n.module.d.ts +0 -4
  85. package/core/i18n/i18n.module.d.ts.map +1 -1
  86. package/core/i18n/index.d.ts +2 -1
  87. package/core/i18n/index.d.ts.map +1 -1
  88. package/core/i18n/translation-loader.service.d.ts +50 -0
  89. package/core/i18n/translation-loader.service.d.ts.map +1 -0
  90. package/core/i18n/translation-utils.d.ts +14 -0
  91. package/core/i18n/translation-utils.d.ts.map +1 -0
  92. package/core/plugins/plugins-resolve.service.d.ts +7 -10
  93. package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
  94. package/core/router/context-route.component.d.ts +8 -3
  95. package/core/router/context-route.component.d.ts.map +1 -1
  96. package/core/router/context-route.service.d.ts +29 -3
  97. package/core/router/context-route.service.d.ts.map +1 -1
  98. package/core/router/router-tabs.resolver.d.ts +4 -1
  99. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  100. package/core/router/router.model.d.ts +40 -3
  101. package/core/router/router.model.d.ts.map +1 -1
  102. package/core/router/router.module.d.ts +2 -1
  103. package/core/router/router.module.d.ts.map +1 -1
  104. package/core/router/router.service.d.ts +5 -4
  105. package/core/router/router.service.d.ts.map +1 -1
  106. package/core/router/scoped-context-route.service.d.ts +57 -0
  107. package/core/router/scoped-context-route.service.d.ts.map +1 -0
  108. package/core/router/view-context.service.d.ts +8 -18
  109. package/core/router/view-context.service.d.ts.map +1 -1
  110. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
  111. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
  112. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
  113. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  114. package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
  115. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  116. package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
  117. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
  118. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
  119. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
  120. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
  121. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
  122. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
  123. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
  124. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
  125. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
  126. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
  127. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
  128. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
  129. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
  130. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
  131. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
  132. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
  133. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
  134. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
  135. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
  136. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
  137. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
  138. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
  139. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
  140. package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
  141. package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
  142. package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
  143. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
  144. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
  145. package/datapoints-export-selector/index.d.ts +15 -0
  146. package/datapoints-export-selector/index.d.ts.map +1 -0
  147. package/device-list/device-list.module.d.ts +4 -2
  148. package/device-list/device-list.module.d.ts.map +1 -1
  149. package/esm2022/alarms/alarm-details.component.mjs +7 -9
  150. package/esm2022/alarms/alarm-info.component.mjs +23 -33
  151. package/esm2022/alarms/alarms-list.component.mjs +5 -16
  152. package/esm2022/alarms/alarms-view.service.mjs +3 -2
  153. package/esm2022/alarms/alarms.component.mjs +10 -3
  154. package/esm2022/alarms/alarms.helper.mjs +32 -0
  155. package/esm2022/alarms/alarms.model.mjs +1 -1
  156. package/esm2022/alarms/alarms.module.mjs +5 -5
  157. package/esm2022/alarms/cockpit/index.mjs +13 -17
  158. package/esm2022/alarms/devicemanagement/index.mjs +15 -18
  159. package/esm2022/alarms/index.mjs +6 -5
  160. package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
  161. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  162. package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
  163. package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
  164. package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
  165. package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
  166. package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
  167. package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
  168. package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
  169. package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
  170. package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
  171. package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
  172. package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
  173. package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
  174. package/esm2022/core/common/index.mjs +5 -1
  175. package/esm2022/core/common/inter-app.service.mjs +76 -0
  176. package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
  177. package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
  178. package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
  179. package/esm2022/core/dashboard/dashboard.module.mjs +18 -1
  180. package/esm2022/core/dashboard/index.mjs +4 -1
  181. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
  182. package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
  183. package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
  184. package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
  185. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
  186. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
  187. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
  188. package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
  189. package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
  190. package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
  191. package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
  192. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
  193. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
  194. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -37
  195. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -28
  196. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +3 -3
  197. package/esm2022/core/header/header.module.mjs +7 -5
  198. package/esm2022/core/header/title/title.component.mjs +3 -3
  199. package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
  200. package/esm2022/core/i18n/i18n.module.mjs +7 -14
  201. package/esm2022/core/i18n/index.mjs +3 -2
  202. package/esm2022/core/i18n/translate.parser.mjs +2 -2
  203. package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
  204. package/esm2022/core/i18n/translation-utils.mjs +24 -0
  205. package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
  206. package/esm2022/core/router/context-route.component.mjs +23 -13
  207. package/esm2022/core/router/context-route.service.mjs +37 -5
  208. package/esm2022/core/router/router-tabs.resolver.mjs +46 -15
  209. package/esm2022/core/router/router.model.mjs +6 -1
  210. package/esm2022/core/router/router.module.mjs +20 -13
  211. package/esm2022/core/router/router.service.mjs +24 -10
  212. package/esm2022/core/router/scoped-context-route.service.mjs +152 -0
  213. package/esm2022/core/router/view-context.service.mjs +59 -16
  214. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
  215. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
  216. package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
  217. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  218. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  219. package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
  220. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
  221. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
  222. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
  223. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
  224. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
  225. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
  226. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
  227. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
  228. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
  229. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
  230. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
  231. package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
  232. package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
  233. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
  234. package/esm2022/datapoints-export-selector/index.mjs +15 -0
  235. package/esm2022/device-list/add-smart-group.component.mjs +4 -3
  236. package/esm2022/device-list/device-list.module.mjs +22 -4
  237. package/esm2022/map/cluster-map.component.mjs +41 -13
  238. package/esm2022/map/map-status.component.mjs +6 -5
  239. package/esm2022/map/map.component.mjs +9 -5
  240. package/esm2022/map/map.model.mjs +1 -1
  241. package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
  242. package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
  243. package/esm2022/translation-editor/data/index.mjs +2 -0
  244. package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
  245. package/esm2022/translation-editor/index.mjs +10 -0
  246. package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
  247. package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
  248. package/esm2022/translation-editor/lazy/index.mjs +2 -0
  249. package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
  250. package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
  251. package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
  252. package/esm2022/widgets/cockpit/index.mjs +4 -2
  253. package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
  254. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
  255. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
  256. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
  257. package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
  258. package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
  259. package/esm2022/widgets/definitions/index.mjs +2 -1
  260. package/esm2022/widgets/definitions/map/index.mjs +4 -2
  261. package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
  262. package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
  263. package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
  264. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
  265. package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
  266. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
  267. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
  268. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
  269. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
  270. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
  271. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
  272. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
  273. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
  274. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
  275. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
  276. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
  277. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
  278. package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
  279. package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
  280. package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
  281. package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
  282. package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
  283. package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
  284. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs +12 -16
  285. package/fesm2022/c8y-ngx-components-alarms-cockpit.mjs.map +1 -1
  286. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs +14 -17
  287. package/fesm2022/c8y-ngx-components-alarms-devicemanagement.mjs.map +1 -1
  288. package/fesm2022/c8y-ngx-components-alarms.mjs +203 -185
  289. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  290. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
  291. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  292. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
  293. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  294. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
  295. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
  296. package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
  297. package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
  298. package/fesm2022/c8y-ngx-components-map.mjs +52 -19
  299. package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
  300. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
  301. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
  302. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
  303. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
  304. package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
  305. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
  306. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
  307. package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
  308. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
  309. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  310. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
  311. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  312. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
  313. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  314. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
  315. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  316. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
  317. package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
  318. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
  319. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  320. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  321. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  322. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
  323. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  324. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
  325. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
  326. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
  327. package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
  328. package/fesm2022/c8y-ngx-components.mjs +5476 -4396
  329. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  330. package/locales/de.po +289 -18
  331. package/locales/en.po +12 -0
  332. package/locales/en_US.po +3 -0
  333. package/locales/es.po +253 -18
  334. package/locales/fr.po +253 -18
  335. package/locales/ja_JP.po +282 -18
  336. package/locales/locales.pot +257 -18
  337. package/locales/nl.po +253 -18
  338. package/locales/pl.po +253 -18
  339. package/locales/pt_BR.po +253 -18
  340. package/map/cluster-map.component.d.ts +8 -3
  341. package/map/cluster-map.component.d.ts.map +1 -1
  342. package/map/map-status.component.d.ts +0 -3
  343. package/map/map-status.component.d.ts.map +1 -1
  344. package/map/map.component.d.ts +4 -2
  345. package/map/map.component.d.ts.map +1 -1
  346. package/map/map.model.d.ts +2 -1
  347. package/map/map.model.d.ts.map +1 -1
  348. package/package.json +1 -1
  349. package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
  350. package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
  351. package/translation-editor/data/index.d.ts +2 -0
  352. package/translation-editor/data/index.d.ts.map +1 -0
  353. package/translation-editor/data/translation-store.service.d.ts +61 -0
  354. package/translation-editor/data/translation-store.service.d.ts.map +1 -0
  355. package/translation-editor/index.d.ts +2 -0
  356. package/translation-editor/index.d.ts.map +1 -0
  357. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
  358. package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
  359. package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
  360. package/translation-editor/lazy/index.d.ts +2 -0
  361. package/translation-editor/lazy/index.d.ts.map +1 -0
  362. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
  363. package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
  364. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
  365. package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
  366. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
  367. package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
  368. package/widgets/cockpit/index.d.ts +13 -0
  369. package/widgets/cockpit/index.d.ts.map +1 -1
  370. package/widgets/cockpit-exports/index.d.ts +6 -0
  371. package/widgets/cockpit-exports/index.d.ts.map +1 -1
  372. package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
  373. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  374. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
  375. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  376. package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
  377. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  378. package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
  379. package/widgets/definitions/datapoints-table/index.d.ts +14 -0
  380. package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
  381. package/widgets/definitions/index.d.ts +1 -0
  382. package/widgets/definitions/index.d.ts.map +1 -1
  383. package/widgets/definitions/map/index.d.ts +2 -1
  384. package/widgets/definitions/map/index.d.ts.map +1 -1
  385. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
  386. package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
  387. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
  388. package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
  389. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
  390. package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
  391. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
  392. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  393. package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
  394. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
  395. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
  396. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
  397. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
  398. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
  399. package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
  400. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
  401. package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
  402. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
  403. package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
  404. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
  405. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
  406. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
  407. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
  408. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
  409. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
  410. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
  411. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
  412. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
  413. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
  414. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
  415. package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
  416. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
  417. package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
  418. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
  419. package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
  420. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
  421. package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
  422. package/widgets/implementations/datapoints-table/index.d.ts +10 -0
  423. package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
  424. package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
  425. package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
  426. package/widgets/implementations/map/map-widget.component.d.ts +8 -3
  427. package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
  428. package/widgets/implementations/map/map-widget.model.d.ts +4 -3
  429. package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
  430. package/core/i18n/translate.loader.d.ts +0 -31
  431. package/core/i18n/translate.loader.d.ts.map +0 -1
  432. package/esm2022/core/i18n/translate.loader.mjs +0 -71
@@ -0,0 +1,175 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ApplicationAvailability, ApplicationService, ApplicationType } from '@c8y/client';
3
+ import { AppStateService, ZipService } from '@c8y/ngx-components';
4
+ import { uniq } from 'lodash-es';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@c8y/client";
7
+ import * as i2 from "@c8y/ngx-components";
8
+ export class TranslationStoreService {
9
+ constructor(appService, appState, zip) {
10
+ this.appService = appService;
11
+ this.appState = appState;
12
+ this.zip = zip;
13
+ this.translationAppName = 'User defined translations';
14
+ this.translationAppContextPath = 'user-defined-translations';
15
+ }
16
+ /**
17
+ * Retrieves a list of available translations for the given locales from all the hosted apps available on the tenant.
18
+ */
19
+ async getAvailableTranslations(locales) {
20
+ const { data: hostedApps } = await this.appService.list({
21
+ tenant: this.appState.currentTenant.value.name,
22
+ type: 'HOSTED',
23
+ pageSize: 2000
24
+ });
25
+ const uniqueContextPaths = uniq(hostedApps
26
+ .filter(app => app.contextPath && app.manifest?.webSdkVersion)
27
+ .map(app => app.contextPath));
28
+ const translations = {};
29
+ for (const contextPath of uniqueContextPaths) {
30
+ for (const locale of locales) {
31
+ try {
32
+ const translationsForLanguageAndApp = await this.getFileFromPath(`/apps/${contextPath}/${locale}.json`);
33
+ for (const key of Object.keys(translationsForLanguageAndApp)) {
34
+ if (!translations[key]) {
35
+ translations[key] = {};
36
+ }
37
+ translations[key][locale] = translationsForLanguageAndApp[key];
38
+ }
39
+ }
40
+ catch (e) {
41
+ continue;
42
+ }
43
+ }
44
+ }
45
+ return translations;
46
+ }
47
+ /**
48
+ * Retrieves the translations for the given locale from the translation app.
49
+ */
50
+ async getTranslationsForLocale(locale) {
51
+ try {
52
+ const translations = await this.getFileFromTranslationApp(`${locale}.json`);
53
+ if (translations[locale]) {
54
+ return translations[locale];
55
+ }
56
+ }
57
+ catch (e) {
58
+ // do nothing.
59
+ }
60
+ return {};
61
+ }
62
+ /**
63
+ * Retrieves the translations for the given locales from the translation app.
64
+ */
65
+ async loadTranslationsForLocales(locales) {
66
+ const translations = {};
67
+ const loadAndAddLocale = async (locale) => {
68
+ translations[locale] = await this.getTranslationsForLocale(locale);
69
+ };
70
+ await Promise.all(locales.map(loadAndAddLocale));
71
+ return translations;
72
+ }
73
+ /**
74
+ * Retrieves a combined list of translations for all the provided locales.
75
+ * The locales are combined into a single object per key and an array of these objects is returned.
76
+ */
77
+ async getCombinedListOfTranslationsForPerKey(locales) {
78
+ const translations = await this.loadTranslationsForLocales(locales);
79
+ const translationMap = {};
80
+ for (const locale of Object.keys(translations)) {
81
+ for (const key of Object.keys(translations[locale])) {
82
+ let translationsForKey = translationMap[key];
83
+ if (!translationsForKey) {
84
+ translationsForKey = {};
85
+ translationMap[key] = translationsForKey;
86
+ }
87
+ translationsForKey[locale] = translations[locale][key];
88
+ }
89
+ }
90
+ const keys = Object.keys(translationMap).sort((a, b) => a.localeCompare(b));
91
+ return keys.map(key => Object.assign({ key }, translationMap[key]));
92
+ }
93
+ /**
94
+ * Updates the files of the translation application with the provided translations.
95
+ */
96
+ async updateTranslations(translations) {
97
+ const filesToUpload = new Array();
98
+ const translationsPerLocale = {};
99
+ for (const entry of translations) {
100
+ const key = entry.key;
101
+ for (const locale of Object.keys(entry)) {
102
+ if (locale === 'key') {
103
+ continue;
104
+ }
105
+ if (!translationsPerLocale[locale]) {
106
+ translationsPerLocale[locale] = {};
107
+ }
108
+ if (entry[locale]) {
109
+ translationsPerLocale[locale][key] = entry[locale];
110
+ }
111
+ }
112
+ }
113
+ for (const locale of Object.keys(translationsPerLocale)) {
114
+ const fileName = `${locale}.json`;
115
+ filesToUpload.push({
116
+ path: fileName,
117
+ contents: new File([JSON.stringify({ [locale]: translationsPerLocale[locale] })], fileName)
118
+ });
119
+ }
120
+ const app = await this.getOrCreateTranslationApp();
121
+ await this.appService.binary(app).updateFiles(filesToUpload);
122
+ }
123
+ /**
124
+ * @returns The translation app for the current tenant. If it does not exist, it will be created.
125
+ */
126
+ async getOrCreateTranslationApp() {
127
+ const { data: apps } = await this.appService.listByName(this.translationAppName);
128
+ const ownApp = apps.find(app => app.contextPath === this.translationAppContextPath &&
129
+ app.owner.tenant.id === this.appState.currentTenant.value.name);
130
+ if (ownApp) {
131
+ return ownApp;
132
+ }
133
+ const { data: app } = await this.appService.create({
134
+ name: this.translationAppName,
135
+ contextPath: this.translationAppContextPath,
136
+ key: `${this.translationAppContextPath}-app-key`,
137
+ type: ApplicationType.HOSTED,
138
+ availability: ApplicationAvailability.MARKET,
139
+ config: {
140
+ icon: {
141
+ class: 'language1'
142
+ }
143
+ },
144
+ noAppSwitcher: true,
145
+ description: 'Providing user defined translations'
146
+ });
147
+ const zip = await this.zip.createZip([]);
148
+ const { data: binary } = await this.appService.binary(app).upload(zip, 'translations.zip');
149
+ const { data: updatedApp } = await this.appService.update({
150
+ id: app.id,
151
+ activeVersionId: binary.id
152
+ });
153
+ return updatedApp;
154
+ }
155
+ async getFileFromTranslationApp(file) {
156
+ return this.getFileFromPath(`/apps/public/${this.translationAppContextPath}/${file}`);
157
+ }
158
+ async getFileFromPath(path) {
159
+ const finalPath = `${path}?nocache=${Date.now()}`;
160
+ const response = await fetch(finalPath);
161
+ if (response.status !== 200) {
162
+ throw new Error(`Failed to fetch file from ${path}`);
163
+ }
164
+ return response.json();
165
+ }
166
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, deps: [{ token: i1.ApplicationService }, { token: i2.AppStateService }, { token: i2.ZipService }], target: i0.ɵɵFactoryTarget.Injectable }); }
167
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, providedIn: 'root' }); }
168
+ }
169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationStoreService, decorators: [{
170
+ type: Injectable,
171
+ args: [{
172
+ providedIn: 'root'
173
+ }]
174
+ }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.AppStateService }, { type: i2.ZipService }] });
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tc3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9kYXRhL3RyYW5zbGF0aW9uLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixlQUFlLEVBRWhCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQVVqQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQ1UsVUFBOEIsRUFDOUIsUUFBeUIsRUFDekIsR0FBZTtRQUZmLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFOTix1QkFBa0IsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCw4QkFBeUIsR0FBRywyQkFBMkIsQ0FBQztJQU14RSxDQUFDO0lBRUo7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBaUI7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM5QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQzdCLFVBQVU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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QUcsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDbEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7OEdBck1VLHVCQUF1QjtrSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIElBcHBsaWNhdGlvblxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UsIFppcFNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHVuaXEgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uTG9jYWxlIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbG9jYWxlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uU3RvcmVTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQXBwTmFtZSA9ICdVc2VyIGRlZmluZWQgdHJhbnNsYXRpb25zJztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGggPSAndXNlci1kZWZpbmVkLXRyYW5zbGF0aW9ucyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwOiBaaXBTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhdmFpbGFibGUgdHJhbnNsYXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jYWxlcyBmcm9tIGFsbCB0aGUgaG9zdGVkIGFwcHMgYXZhaWxhYmxlIG9uIHRoZSB0ZW5hbnQuXG4gICAqL1xuICBhc3luYyBnZXRBdmFpbGFibGVUcmFuc2xhdGlvbnMobG9jYWxlczogc3RyaW5nW10pIHtcbiAgICBjb25zdCB7IGRhdGE6IGhvc3RlZEFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5saXN0KHtcbiAgICAgIHRlbmFudDogdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlLm5hbWUsXG4gICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVDb250ZXh0UGF0aHMgPSB1bmlxKFxuICAgICAgaG9zdGVkQXBwc1xuICAgICAgICAuZmlsdGVyKGFwcCA9PiBhcHAuY29udGV4dFBhdGggJiYgYXBwLm1hbmlmZXN0Py53ZWJTZGtWZXJzaW9uKVxuICAgICAgICAubWFwKGFwcCA9PiBhcHAuY29udGV4dFBhdGgpXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiB7IFtsb2NhbGU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbnRleHRQYXRoIG9mIHVuaXF1ZUNvbnRleHRQYXRocykge1xuICAgICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbG9jYWxlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlQW5kQXBwID0gYXdhaXQgdGhpcy5nZXRGaWxlRnJvbVBhdGgoXG4gICAgICAgICAgICBgL2FwcHMvJHtjb250ZXh0UGF0aH0vJHtsb2NhbGV9Lmpzb25gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcCkpIHtcbiAgICAgICAgICAgIGlmICghdHJhbnNsYXRpb25zW2tleV0pIHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2tleV0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uc1trZXldW2xvY2FsZV0gPSB0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2FsZSBmcm9tIHRoZSB0cmFuc2xhdGlvbiBhcHAuXG4gICAqL1xuICBhc3luYyBnZXRUcmFuc2xhdGlvbnNGb3JMb2NhbGU8VCBleHRlbmRzIHN0cmluZz4obG9jYWxlOiBUKTogUHJvbWlzZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMuZ2V0RmlsZUZyb21UcmFuc2xhdGlvbkFwcChgJHtsb2NhbGV9Lmpzb25gKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbnNbbG9jYWxlXSkge1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zW2xvY2FsZV07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZy5cbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jYWxlcyBmcm9tIHRoZSB0cmFuc2xhdGlvbiBhcHAuXG4gICAqL1xuICBhc3luYyBsb2FkVHJhbnNsYXRpb25zRm9yTG9jYWxlcyhsb2NhbGVzOiBzdHJpbmdbXSk6IFByb21pc2U8e1xuICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuICB9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIH0gPSB7fTtcblxuICAgIGNvbnN0IGxvYWRBbmRBZGRMb2NhbGUgPSBhc3luYyAobG9jYWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRyYW5zbGF0aW9uc1tsb2NhbGVdID0gYXdhaXQgdGhpcy5nZXRUcmFuc2xhdGlvbnNGb3JMb2NhbGUobG9jYWxlKTtcbiAgICB9O1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobG9jYWxlcy5tYXAobG9hZEFuZEFkZExvY2FsZSkpO1xuXG4gICAgcmV0dXJuIHRyYW5zbGF0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBjb21iaW5lZCBsaXN0IG9mIHRyYW5zbGF0aW9ucyBmb3IgYWxsIHRoZSBwcm92aWRlZCBsb2NhbGVzLlxuICAgKiBUaGUgbG9jYWxlcyBhcmUgY29tYmluZWQgaW50byBhIHNpbmdsZSBvYmplY3QgcGVyIGtleSBhbmQgYW4gYXJyYXkgb2YgdGhlc2Ugb2JqZWN0cyBpcyByZXR1cm5lZC5cbiAgICovXG4gIGFzeW5jIGdldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5KFxuICAgIGxvY2FsZXM6IHN0cmluZ1tdXG4gICk6IFByb21pc2U8eyBrZXk6IHN0cmluZzsgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nIH1bXT4ge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IGF3YWl0IHRoaXMubG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZXMobG9jYWxlcyk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25NYXA6IHsgW2tleTogc3RyaW5nXTogeyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNbbG9jYWxlXSkpIHtcbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uc0ZvcktleSA9IHRyYW5zbGF0aW9uTWFwW2tleV07XG4gICAgICAgIGlmICghdHJhbnNsYXRpb25zRm9yS2V5KSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zRm9yS2V5ID0ge307XG4gICAgICAgICAgdHJhbnNsYXRpb25NYXBba2V5XSA9IHRyYW5zbGF0aW9uc0ZvcktleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYW5zbGF0aW9uc0ZvcktleVtsb2NhbGVdID0gdHJhbnNsYXRpb25zW2xvY2FsZV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModHJhbnNsYXRpb25NYXApLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG5cbiAgICByZXR1cm4ga2V5cy5tYXAoa2V5ID0+IE9iamVjdC5hc3NpZ24oeyBrZXkgfSwgdHJhbnNsYXRpb25NYXBba2V5XSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZpbGVzIG9mIHRoZSB0cmFuc2xhdGlvbiBhcHBsaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCB0cmFuc2xhdGlvbnMuXG4gICAqL1xuICBhc3luYyB1cGRhdGVUcmFuc2xhdGlvbnMoXG4gICAgdHJhbnNsYXRpb25zOiB7IGtleTogc3RyaW5nOyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGVzVG9VcGxvYWQgPSBuZXcgQXJyYXk8eyBwYXRoOiBzdHJpbmc7IGNvbnRlbnRzOiBGaWxlIH0+KCk7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zUGVyTG9jYWxlOiB7IFtsb2NhbGU6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdHJhbnNsYXRpb25zKSB7XG4gICAgICBjb25zdCBrZXkgPSBlbnRyeS5rZXk7XG4gICAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyhlbnRyeSkpIHtcbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gJ2tleScpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRyYW5zbGF0aW9uc1BlckxvY2FsZVtsb2NhbGVdKSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zUGVyTG9jYWxlW2xvY2FsZV0gPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeVtsb2NhbGVdKSB7XG4gICAgICAgICAgdHJhbnNsYXRpb25zUGVyTG9jYWxlW2xvY2FsZV1ba2V5XSA9IGVudHJ5W2xvY2FsZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxvY2FsZSBvZiBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnNQZXJMb2NhbGUpKSB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2xvY2FsZX0uanNvbmA7XG4gICAgICBmaWxlc1RvVXBsb2FkLnB1c2goe1xuICAgICAgICBwYXRoOiBmaWxlTmFtZSxcbiAgICAgICAgY29udGVudHM6IG5ldyBGaWxlKFtKU09OLnN0cmluZ2lmeSh7IFtsb2NhbGVdOiB0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXSB9KV0sIGZpbGVOYW1lKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVUcmFuc2xhdGlvbkFwcCgpO1xuICAgIGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGRhdGVGaWxlcyhmaWxlc1RvVXBsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb24gYXBwIGZvciB0aGUgY3VycmVudCB0ZW5hbnQuIElmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBhc3luYyBnZXRPckNyZWF0ZVRyYW5zbGF0aW9uQXBwKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UubGlzdEJ5TmFtZSh0aGlzLnRyYW5zbGF0aW9uQXBwTmFtZSk7XG4gICAgY29uc3Qgb3duQXBwID0gYXBwcy5maW5kKFxuICAgICAgYXBwID0+XG4gICAgICAgIGFwcC5jb250ZXh0UGF0aCA9PT0gdGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoICYmXG4gICAgICAgIGFwcC5vd25lci50ZW5hbnQuaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lXG4gICAgKTtcbiAgICBpZiAob3duQXBwKSB7XG4gICAgICByZXR1cm4gb3duQXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UuY3JlYXRlKHtcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRpb25BcHBOYW1lLFxuICAgICAgY29udGV4dFBhdGg6IHRoaXMudHJhbnNsYXRpb25BcHBDb250ZXh0UGF0aCxcbiAgICAgIGtleTogYCR7dGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRofS1hcHAta2V5YCxcbiAgICAgIHR5cGU6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5Lk1BUktFVCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgY2xhc3M6ICdsYW5ndWFnZTEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBub0FwcFN3aXRjaGVyOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdQcm92aWRpbmcgdXNlciBkZWZpbmVkIHRyYW5zbGF0aW9ucydcbiAgICB9KTtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLnppcC5jcmVhdGVaaXAoW10pO1xuXG4gICAgY29uc3QgeyBkYXRhOiBiaW5hcnkgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGxvYWQoemlwLCAndHJhbnNsYXRpb25zLnppcCcpO1xuICAgIGNvbnN0IHsgZGF0YTogdXBkYXRlZEFwcCB9ID0gYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICBpZDogYXBwLmlkLFxuICAgICAgYWN0aXZlVmVyc2lvbklkOiBiaW5hcnkuaWQgYXMgc3RyaW5nXG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWRBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEZpbGVGcm9tVHJhbnNsYXRpb25BcHAoZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsZUZyb21QYXRoKGAvYXBwcy9wdWJsaWMvJHt0aGlzLnRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGh9LyR7ZmlsZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUZyb21QYXRoKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbmFsUGF0aCA9IGAke3BhdGh9P25vY2FjaGU9JHtEYXRlLm5vdygpfWA7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaW5hbFBhdGgpO1xuXG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCBmaWxlIGZyb20gJHtwYXRofWApO1xuICAgIH1cblxuICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,10 @@
1
+ import { hookNavigator, hookRoute } from '@c8y/ngx-components';
2
+ import { TranslationEditorNaviagtorFactoryService } from './translation-editor-naviagtor-factory.service';
3
+ export const tranlationEditorProviders = [
4
+ hookRoute({
5
+ path: 'localization',
6
+ loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)
7
+ }),
8
+ hookNavigator(TranslationEditorNaviagtorFactoryService)
9
+ ];
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxTQUFTLENBQUM7UUFDUixJQUFJLEVBQUUsY0FBYztRQUNwQixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2xCLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztLQUNoRyxDQUFDO0lBQ0YsYUFBYSxDQUFDLHdDQUF3QyxDQUFDO0NBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rTmF2aWdhdG9yLCBob29rUm91dGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRWRpdG9yTmF2aWFndG9yRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLWVkaXRvci1uYXZpYWd0b3ItZmFjdG9yeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHRyYW5sYXRpb25FZGl0b3JQcm92aWRlcnMgPSBbXG4gIGhvb2tSb3V0ZSh7XG4gICAgcGF0aDogJ2xvY2FsaXphdGlvbicsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgIGltcG9ydCgnQGM4eS9uZ3gtY29tcG9uZW50cy90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eScpLnRoZW4obSA9PiBtLlRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50KVxuICB9KSxcbiAgaG9va05hdmlnYXRvcihUcmFuc2xhdGlvbkVkaXRvck5hdmlhZ3RvckZhY3RvcnlTZXJ2aWNlKVxuXTtcbiJdfQ==
@@ -0,0 +1,70 @@
1
+ import { NgForOf } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';
4
+ import { C8yTranslateDirective, C8yTranslatePipe, FormGroupComponent, IconDirective, MessageDirective, MessagesComponent, ModalModule } from '@c8y/ngx-components';
5
+ import { gettext } from '@c8y/ngx-components/gettext';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@c8y/ngx-components";
9
+ export class AddTranslationModalComponent {
10
+ constructor(formBuilder) {
11
+ this.formBuilder = formBuilder;
12
+ this.title = gettext('Add translation');
13
+ this.result = new Promise((resolve, reject) => {
14
+ this._resovle = resolve;
15
+ this._reject = reject;
16
+ });
17
+ this.alreadyTakenMsg = gettext('The provided translation key has already been defined.');
18
+ this.alreadyDefinedKeys = [];
19
+ this.availableLangs = [];
20
+ }
21
+ ngOnInit() {
22
+ this.form = this.initForm();
23
+ }
24
+ initForm() {
25
+ return this.formBuilder.group({
26
+ key: ['', [Validators.required, this.ensureNotExistingKey()]],
27
+ ...this.availableLangs
28
+ .map(language => {
29
+ return {
30
+ [language.lang]: ['']
31
+ };
32
+ })
33
+ .reduceRight((acc, curr) => ({ ...curr, ...acc }), {})
34
+ });
35
+ }
36
+ cancel() {
37
+ this._reject();
38
+ }
39
+ save() {
40
+ this._resovle(this.form.value);
41
+ }
42
+ ensureNotExistingKey() {
43
+ return (control) => {
44
+ if (typeof control.value === 'string') {
45
+ const keyAlreadyTaken = this.alreadyDefinedKeys.some(name => name === control.value);
46
+ if (keyAlreadyTaken) {
47
+ return { keyAlreadyTaken: {} };
48
+ }
49
+ }
50
+ return null;
51
+ };
52
+ }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddTranslationModalComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AddTranslationModalComponent, isStandalone: true, selector: "c8y-add-translation-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Add' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'language1'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"label\"\n translate\n >\n Translation key\n </label>\n <input\n class=\"form-control\"\n name=\"key\"\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'Home' } }}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"keyAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group *ngFor=\"let language of availableLangs\">\n <label\n [for]=\"language.lang\"\n >\n {{ language.nativeLanguage }} ({{ language.lang }})\n </label>\n <input\n class=\"form-control\"\n [name]=\"language.lang\"\n [id]=\"language.lang\"\n type=\"text\"\n [formControlName]=\"language.lang\"\n />\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }] }); }
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AddTranslationModalComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'c8y-add-translation-modal', standalone: true, imports: [
59
+ ModalModule,
60
+ IconDirective,
61
+ MessagesComponent,
62
+ MessageDirective,
63
+ C8yTranslatePipe,
64
+ C8yTranslateDirective,
65
+ ReactiveFormsModule,
66
+ NgForOf,
67
+ FormGroupComponent
68
+ ], template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Add' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'language1'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"label\"\n translate\n >\n Translation key\n </label>\n <input\n class=\"form-control\"\n name=\"key\"\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'Home' } }}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"keyAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group *ngFor=\"let language of availableLangs\">\n <label\n [for]=\"language.lang\"\n >\n {{ language.nativeLanguage }} ({{ language.lang }})\n </label>\n <input\n class=\"form-control\"\n [name]=\"language.lang\"\n [id]=\"language.lang\"\n type=\"text\"\n [formControlName]=\"language.lang\"\n />\n </c8y-form-group>\n </div>\n</c8y-modal>\n" }]
69
+ }], ctorParameters: () => [{ type: i1.FormBuilder }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L2FkZC10cmFuc2xhdGlvbi1tb2RhbC9hZGQtdHJhbnNsYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYWRkLXRyYW5zbGF0aW9uLW1vZGFsL2FkZC10cmFuc2xhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBa0J0RCxNQUFNLE9BQU8sNEJBQTRCO0lBa0J2QyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCbkMsVUFBSyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRzVDLFdBQU0sR0FBRyxJQUFJLE9BQU8sQ0FBNEMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxvQkFBZSxHQUFHLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQ3BGLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUNsQyxtQkFBYyxHQUdSLEVBQUUsQ0FBQztJQUtzQyxDQUFDO0lBRWhELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzdELEdBQUcsSUFBSSxDQUFDLGNBQWM7aUJBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDZCxPQUFPO29CQUNMLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN0QixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JGLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXZEVSw0QkFBNEI7a0dBQTVCLDRCQUE0QixxRkNwQ3pDLHEwQ0FtREEsMkNEMUJJLFdBQVcsK09BQ1gsYUFBYSwyRUFDYixpQkFBaUIsc0dBQ2pCLGdCQUFnQiw2RUFDaEIsZ0JBQWdCLGtEQUNoQixxQkFBcUIsdUVBQ3JCLG1CQUFtQixvMkJBQ25CLE9BQU8sbUhBQ1Asa0JBQWtCOzsyRkFHVCw0QkFBNEI7a0JBaEJ4QyxTQUFTOytCQUNFLDJCQUEyQixjQUV6QixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLGtCQUFrQjtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gIEM4eVRyYW5zbGF0ZVBpcGUsXG4gIEZvcm1Hcm91cENvbXBvbmVudCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgTWVzc2FnZXNDb21wb25lbnQsXG4gIE1vZGFsTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZ2V0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtdHJhbnNsYXRpb24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1vZGFsTW9kdWxlLFxuICAgIEljb25EaXJlY3RpdmUsXG4gICAgTWVzc2FnZXNDb21wb25lbnQsXG4gICAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nRm9yT2YsXG4gICAgRm9ybUdyb3VwQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWRkVHJhbnNsYXRpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gZ2V0dGV4dCgnQWRkIHRyYW5zbGF0aW9uJyk7XG4gIGZvcm06IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+O1xuXG4gIHJlc3VsdCA9IG5ldyBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+Wyd2YWx1ZSddPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fcmVzb3ZsZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbiAgYWxyZWFkeVRha2VuTXNnID0gZ2V0dGV4dCgnVGhlIHByb3ZpZGVkIHRyYW5zbGF0aW9uIGtleSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuJyk7XG4gIGFscmVhZHlEZWZpbmVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgYXZhaWxhYmxlTGFuZ3M6IHtcbiAgICBsYW5nOiBzdHJpbmc7XG4gICAgbmF0aXZlTGFuZ3VhZ2U6IHN0cmluZztcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVzb3ZsZTogKHZhbHVlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGtleTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5lbnN1cmVOb3RFeGlzdGluZ0tleSgpXV0sXG4gICAgICAuLi50aGlzLmF2YWlsYWJsZUxhbmdzXG4gICAgICAgIC5tYXAobGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbbGFuZ3VhZ2UubGFuZ106IFsnJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VycikgPT4gKHsgLi4uY3VyciwgLi4uYWNjIH0pLCB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9yZWplY3QoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5fcmVzb3ZsZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVOb3RFeGlzdGluZ0tleSgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qga2V5QWxyZWFkeVRha2VuID0gdGhpcy5hbHJlYWR5RGVmaW5lZEtleXMuc29tZShuYW1lID0+IG5hbWUgPT09IGNvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoa2V5QWxyZWFkeVRha2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHsga2V5QWxyZWFkeVRha2VuOiB7fSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgW2xhYmVsc109XCJ7IGNhbmNlbDogJ0NhbmNlbCcsIG9rOiAnQWRkJyB9XCJcbj5cbjxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICA8c3BhbiBbYzh5SWNvbl09XCInbGFuZ3VhZ2UxJ1wiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicC0yNFwiPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJsYWJlbFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBUcmFuc2xhdGlvbiBrZXlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgaWQ9XCJrZXlcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImtleVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ0hvbWUnIH0gfX1cIlxuICAgICAgLz5cbiAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgIG5hbWU9XCJrZXlBbHJlYWR5VGFrZW5cIlxuICAgICAgICAgIFt0ZXh0XT1cImFscmVhZHlUYWtlbk1zZyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgYXZhaWxhYmxlTGFuZ3NcIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBbZm9yXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgPlxuICAgICAgICB7eyBsYW5ndWFnZS5uYXRpdmVMYW5ndWFnZSB9fSAoe3sgbGFuZ3VhZ2UubGFuZyB9fSlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmFtZV09XCJsYW5ndWFnZS5sYW5nXCJcbiAgICAgICAgW2lkXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibGFuZ3VhZ2UubGFuZ1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvZGl2PlxuPC9jOHktbW9kYWw+XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LW5neC1jb21wb25lbnRzLXRyYW5zbGF0aW9uLWVkaXRvci1sYXp5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYzh5LW5neC1jb21wb25lbnRzLXRyYW5zbGF0aW9uLWVkaXRvci1sYXp5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './translation-editor/translation-editor.component';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cmFuc2xhdGlvbi1lZGl0b3IvdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudCc7XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, ElementRef, Optional, ViewChild } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { CellRendererContext, Permissions, C8yTranslatePipe, IconDirective } from '@c8y/ngx-components';
5
+ import { TranslationEditorComponent } from '../translation-editor/translation-editor.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@c8y/ngx-components";
8
+ import * as i2 from "../translation-editor/translation-editor.component";
9
+ import * as i3 from "@angular/forms";
10
+ export class ManageTranslationCellRendererComponent {
11
+ constructor(context, permissions, grid) {
12
+ this.context = context;
13
+ this.permissions = permissions;
14
+ this.grid = grid;
15
+ this.FOCUS_RENDER_WAIT_TIME_IN_MS = 100;
16
+ this.isCellEditable = false;
17
+ this.cellValue = '';
18
+ this.isCreateDisabled = false;
19
+ }
20
+ ngOnInit() {
21
+ this.isCreateDisabled = !this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN');
22
+ }
23
+ async save() {
24
+ this.isCellEditable = false;
25
+ const cellValueTrimed = this.cellValue.trim();
26
+ this.context.value = cellValueTrimed;
27
+ this.context.item[this.context.property.path] = cellValueTrimed;
28
+ this.grid?.valueChanged();
29
+ }
30
+ cancel() {
31
+ this.isCellEditable = false;
32
+ }
33
+ editCell() {
34
+ this.cellValue = this.context.value;
35
+ this.isCellEditable = true;
36
+ // Focuses the input box after the input text box is visible
37
+ setTimeout(() => {
38
+ this.cellInput.nativeElement.focus();
39
+ }, this.FOCUS_RENDER_WAIT_TIME_IN_MS);
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, deps: [{ token: i1.CellRendererContext }, { token: i1.Permissions }, { token: i2.TranslationEditorComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ManageTranslationCellRendererComponent, isStandalone: true, selector: "c8y-manage-translation-cell-renderer", viewQueries: [{ propertyName: "cellInput", first: true, predicate: ["cellInput"], descendants: true }], ngImport: i0, template: "<div\n class=\"text-truncate pointer d-flex\"\n title=\"{{ context.value }}\"\n data-cy=\"c8y-manage-translation-cell-renderer--edit\"\n (click)=\"!isCreateDisabled ? editCell() : ''\"\n *ngIf=\"!isCellEditable\"\n>\n <span\n class=\"text-truncate\"\n *ngIf=\"!isCellEditable && context.value !== ''\"\n >\n {{ context.value }}\n </span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Add translation' | translate }}\"\n *ngIf=\"!isCellEditable && context.value === ''\"\n >\n <em class=\"text-muted\">{{ 'Add translation' | translate }}</em>\n </span>\n <i\n class=\"showOnHover text-primary m-l-4\"\n c8yIcon=\"pencil\"\n title=\"{{ 'Edit translation' | translate }}\"\n *ngIf=\"!isCreateDisabled\"\n ></i>\n</div>\n\n<div\n class=\"input-group input-group-sm\"\n *ngIf=\"isCellEditable && !isCreateDisabled\"\n>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Add translation' | translate }}\"\n type=\"text\"\n #cellInput\n data-cy=\"c8y-manage-translation-cell-renderer--input\"\n [(ngModel)]=\"cellValue\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"c8y-manage-translation-cell-renderer--cancel\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"times\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n data-cy=\"c8y-manage-translation-cell-renderer--save\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"check\"\n ></i>\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ManageTranslationCellRendererComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'c8y-manage-translation-cell-renderer', standalone: true, imports: [NgIf, C8yTranslatePipe, IconDirective, FormsModule], template: "<div\n class=\"text-truncate pointer d-flex\"\n title=\"{{ context.value }}\"\n data-cy=\"c8y-manage-translation-cell-renderer--edit\"\n (click)=\"!isCreateDisabled ? editCell() : ''\"\n *ngIf=\"!isCellEditable\"\n>\n <span\n class=\"text-truncate\"\n *ngIf=\"!isCellEditable && context.value !== ''\"\n >\n {{ context.value }}\n </span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Add translation' | translate }}\"\n *ngIf=\"!isCellEditable && context.value === ''\"\n >\n <em class=\"text-muted\">{{ 'Add translation' | translate }}</em>\n </span>\n <i\n class=\"showOnHover text-primary m-l-4\"\n c8yIcon=\"pencil\"\n title=\"{{ 'Edit translation' | translate }}\"\n *ngIf=\"!isCreateDisabled\"\n ></i>\n</div>\n\n<div\n class=\"input-group input-group-sm\"\n *ngIf=\"isCellEditable && !isCreateDisabled\"\n>\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Add translation' | translate }}\"\n type=\"text\"\n #cellInput\n data-cy=\"c8y-manage-translation-cell-renderer--input\"\n [(ngModel)]=\"cellValue\"\n />\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"cancel()\"\n data-cy=\"c8y-manage-translation-cell-renderer--cancel\"\n >\n <i\n class=\"text-danger\"\n c8yIcon=\"times\"\n ></i>\n </button>\n <button\n class=\"btn btn-clean\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n data-cy=\"c8y-manage-translation-cell-renderer--save\"\n >\n <i\n class=\"text-primary\"\n c8yIcon=\"check\"\n ></i>\n </button>\n </div>\n</div>\n" }]
47
+ }], ctorParameters: () => [{ type: i1.CellRendererContext }, { type: i1.Permissions }, { type: i2.TranslationEditorComponent, decorators: [{
48
+ type: Optional
49
+ }] }], propDecorators: { cellInput: [{
50
+ type: ViewChild,
51
+ args: ['cellInput']
52
+ }] } });
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIvbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixhQUFhLEVBQ2QsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQzs7Ozs7QUFRaEcsTUFBTSxPQUFPLHNDQUFzQztJQU9qRCxZQUNTLE9BQTRCLEVBQzNCLFdBQXdCLEVBQ1osSUFBZ0M7UUFGN0MsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDWixTQUFJLEdBQUosSUFBSSxDQUE0QjtRQVRyQyxpQ0FBNEIsR0FBRyxHQUFHLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQU10QixDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUM7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsNERBQTREO1FBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QyxDQUFDLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDeEMsQ0FBQzs4R0FyQ1Usc0NBQXNDO2tHQUF0QyxzQ0FBc0Msd01DakJuRCwydERBbUVBLDRDRHBEWSxJQUFJLHdGQUFFLGdCQUFnQixrREFBRSxhQUFhLDBFQUFFLFdBQVc7OzJGQUVqRCxzQ0FBc0M7a0JBTmxELFNBQVM7K0JBQ0Usc0NBQXNDLGNBRXBDLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDOzswQkFZMUQsUUFBUTt5Q0FOYSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgT3B0aW9uYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDZWxsUmVuZGVyZXJDb250ZXh0LFxuICBQZXJtaXNzaW9ucyxcbiAgQzh5VHJhbnNsYXRlUGlwZSxcbiAgSWNvbkRpcmVjdGl2ZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vdHJhbnNsYXRpb24tZWRpdG9yL3RyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXInLFxuICB0ZW1wbGF0ZVVybDogJ21hbmFnZS10cmFuc2xhdGlvbi1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nSWYsIEM4eVRyYW5zbGF0ZVBpcGUsIEljb25EaXJlY3RpdmUsIEZvcm1zTW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBNYW5hZ2VUcmFuc2xhdGlvbkNlbGxSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgRk9DVVNfUkVOREVSX1dBSVRfVElNRV9JTl9NUyA9IDEwMDtcbiAgaXNDZWxsRWRpdGFibGUgPSBmYWxzZTtcbiAgY2VsbFZhbHVlID0gJyc7XG4gIEBWaWV3Q2hpbGQoJ2NlbGxJbnB1dCcpIGNlbGxJbnB1dDogRWxlbWVudFJlZjtcbiAgaXNDcmVhdGVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb250ZXh0OiBDZWxsUmVuZGVyZXJDb250ZXh0LFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZ3JpZDogVHJhbnNsYXRpb25FZGl0b3JDb21wb25lbnRcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNDcmVhdGVEaXNhYmxlZCA9ICF0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoJ1JPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTicpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gZmFsc2U7XG4gICAgY29uc3QgY2VsbFZhbHVlVHJpbWVkID0gdGhpcy5jZWxsVmFsdWUudHJpbSgpO1xuICAgIHRoaXMuY29udGV4dC52YWx1ZSA9IGNlbGxWYWx1ZVRyaW1lZDtcbiAgICB0aGlzLmNvbnRleHQuaXRlbVt0aGlzLmNvbnRleHQucHJvcGVydHkucGF0aF0gPSBjZWxsVmFsdWVUcmltZWQ7XG4gICAgdGhpcy5ncmlkPy52YWx1ZUNoYW5nZWQoKTtcbiAgfVxuXG4gIGNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gZmFsc2U7XG4gIH1cblxuICBlZGl0Q2VsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNlbGxWYWx1ZSA9IHRoaXMuY29udGV4dC52YWx1ZTtcbiAgICB0aGlzLmlzQ2VsbEVkaXRhYmxlID0gdHJ1ZTtcblxuICAgIC8vIEZvY3VzZXMgdGhlIGlucHV0IGJveCBhZnRlciB0aGUgaW5wdXQgdGV4dCBib3ggaXMgdmlzaWJsZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jZWxsSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0sIHRoaXMuRk9DVVNfUkVOREVSX1dBSVRfVElNRV9JTl9NUyk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlIHBvaW50ZXIgZC1mbGV4XCJcbiAgdGl0bGU9XCJ7eyBjb250ZXh0LnZhbHVlIH19XCJcbiAgZGF0YS1jeT1cImM4eS1tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci0tZWRpdFwiXG4gIChjbGljayk9XCIhaXNDcmVhdGVEaXNhYmxlZCA/IGVkaXRDZWxsKCkgOiAnJ1wiXG4gICpuZ0lmPVwiIWlzQ2VsbEVkaXRhYmxlXCJcbj5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIlxuICAgICpuZ0lmPVwiIWlzQ2VsbEVkaXRhYmxlICYmIGNvbnRleHQudmFsdWUgIT09ICcnXCJcbiAgPlxuICAgIHt7IGNvbnRleHQudmFsdWUgfX1cbiAgPC9zcGFuPlxuICA8c3BhblxuICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHRyYW5zbGF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCIhaXNDZWxsRWRpdGFibGUgJiYgY29udGV4dC52YWx1ZSA9PT0gJydcIlxuICA+XG4gICAgPGVtIGNsYXNzPVwidGV4dC1tdXRlZFwiPnt7ICdBZGQgdHJhbnNsYXRpb24nIHwgdHJhbnNsYXRlIH19PC9lbT5cbiAgPC9zcGFuPlxuICA8aVxuICAgIGNsYXNzPVwic2hvd09uSG92ZXIgdGV4dC1wcmltYXJ5IG0tbC00XCJcbiAgICBjOHlJY29uPVwicGVuY2lsXCJcbiAgICB0aXRsZT1cInt7ICdFZGl0IHRyYW5zbGF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgKm5nSWY9XCIhaXNDcmVhdGVEaXNhYmxlZFwiXG4gID48L2k+XG48L2Rpdj5cblxuPGRpdlxuICBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCJcbiAgKm5nSWY9XCJpc0NlbGxFZGl0YWJsZSAmJiAhaXNDcmVhdGVEaXNhYmxlZFwiXG4+XG4gIDxpbnB1dFxuICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICBwbGFjZWhvbGRlcj1cInt7ICdBZGQgdHJhbnNsYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgI2NlbGxJbnB1dFxuICAgIGRhdGEtY3k9XCJjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXItLWlucHV0XCJcbiAgICBbKG5nTW9kZWwpXT1cImNlbGxWYWx1ZVwiXG4gIC8+XG4gIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2xlYW5cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJjYW5jZWwoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LW1hbmFnZS10cmFuc2xhdGlvbi1jZWxsLXJlbmRlcmVyLS1jYW5jZWxcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxuICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgPjwvaT5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tY2xlYW5cIlxuICAgICAgdGl0bGU9XCJ7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktbWFuYWdlLXRyYW5zbGF0aW9uLWNlbGwtcmVuZGVyZXItLXNhdmVcIlxuICAgID5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwidGV4dC1wcmltYXJ5XCJcbiAgICAgICAgYzh5SWNvbj1cImNoZWNrXCJcbiAgICAgID48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,124 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component } from '@angular/core';
3
+ import { ActionBarItemComponent, AlertService, AppStateService, BuiltInActionType, C8yTranslateDirective, C8yTranslatePipe, DataGridModule, gettext, IconDirective, LoadingComponent, TitleComponent, TranslateService } from '@c8y/ngx-components';
4
+ import { TranslationStoreService } from '@c8y/ngx-components/translation-editor/data';
5
+ import { ManageTranslationCellRendererComponent } from '../manage-translation-cell-renderer/manage-translation-cell-renderer.component';
6
+ import { BsModalService } from 'ngx-bootstrap/modal';
7
+ import { AddTranslationModalComponent } from '../add-translation-modal/add-translation-modal.component';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@c8y/ngx-components/translation-editor/data";
10
+ import * as i2 from "ngx-bootstrap/modal";
11
+ import * as i3 from "@c8y/ngx-components";
12
+ export class TranslationEditorComponent {
13
+ constructor(translationStore, modalService, alert, appState, translate) {
14
+ this.translationStore = translationStore;
15
+ this.modalService = modalService;
16
+ this.alert = alert;
17
+ this.appState = appState;
18
+ this.translate = translate;
19
+ this.pagination = {
20
+ pageSize: 10,
21
+ currentPage: 1
22
+ };
23
+ this.displayOptions = {
24
+ bordered: false,
25
+ striped: true,
26
+ filter: true,
27
+ gridHeader: true,
28
+ hover: true
29
+ };
30
+ this.actionControls = [
31
+ {
32
+ type: BuiltInActionType.Delete,
33
+ callback: item => {
34
+ this.items = this.items.filter(i => i.key !== item.key);
35
+ }
36
+ }
37
+ ];
38
+ this.columns = [];
39
+ this.isLoading = true;
40
+ this.items = new Array();
41
+ this.isHavingChanges = false;
42
+ this.availableLangs = [];
43
+ this.availableLangs = this.appState.state.langs
44
+ .sort((a, b) => a.localeCompare(b))
45
+ .map(l => ({
46
+ lang: l,
47
+ nativeLanguage: this.translate.getNativeLanguage(l)
48
+ }));
49
+ }
50
+ async ngOnInit() {
51
+ this.refresh();
52
+ }
53
+ async refresh() {
54
+ this.isLoading = true;
55
+ this.refreshColumns();
56
+ const translations = await this.translationStore.getCombinedListOfTranslationsForPerKey(this.availableLangs.map(l => l.lang));
57
+ this.items = translations;
58
+ this.isLoading = false;
59
+ }
60
+ async addEntry() {
61
+ const currentKeys = this.items.map(item => item.key);
62
+ const modalRef = this.modalService.show(AddTranslationModalComponent, {
63
+ initialState: { alreadyDefinedKeys: currentKeys, availableLangs: this.availableLangs }
64
+ });
65
+ try {
66
+ const result = await modalRef.content.result;
67
+ this.items = [...this.items, result];
68
+ }
69
+ catch (e) {
70
+ // do nothing, modal was closed.
71
+ }
72
+ }
73
+ refreshColumns() {
74
+ this.columns = this.getColumnsForLocales();
75
+ }
76
+ valueChanged() {
77
+ this.isHavingChanges = true;
78
+ }
79
+ async saveTranslations() {
80
+ try {
81
+ await this.translationStore.updateTranslations(this.items);
82
+ await this.refresh();
83
+ this.alert.success(gettext('Translations saved'));
84
+ }
85
+ catch (e) {
86
+ this.alert.danger(gettext('Failed to save translations'));
87
+ this.alert.addServerFailure(e);
88
+ }
89
+ }
90
+ getColumnsForLocales() {
91
+ const columns = new Array();
92
+ columns.push({
93
+ name: 'key',
94
+ header: gettext('Translation key'),
95
+ path: 'key',
96
+ filterable: true
97
+ });
98
+ columns.push(...this.availableLangs.map((language, index) => ({
99
+ name: language.lang,
100
+ header: `${language.nativeLanguage} (${language.lang})`,
101
+ path: language.lang,
102
+ filterable: false,
103
+ visible: index < 5,
104
+ cellRendererComponent: ManageTranslationCellRendererComponent
105
+ })));
106
+ return columns;
107
+ }
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, deps: [{ token: i1.TranslationStoreService }, { token: i2.BsModalService }, { token: i3.AlertService }, { token: i3.AppStateService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
109
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: TranslationEditorComponent, isStandalone: true, selector: "c8y-translation-editor", ngImport: i0, template: "<c8y-title translate>Localization</c8y-title>\n\n<ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEntry()\"\n data-cy=\"c8y-translation-editor--add-translation\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add translation</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"saveTranslations()\"\n data-cy=\"c8y-translation-editor--save-and-apply\"\n >\n <i c8yIcon=\"save\"></i>\n <span translate>Save & apply</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col\"\n [title]=\"'Translations' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"items\"\n ></c8y-data-grid>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n", dependencies: [{ kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "ngmodule", type: DataGridModule }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }] }); }
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorComponent, decorators: [{
112
+ type: Component,
113
+ args: [{ selector: 'c8y-translation-editor', standalone: true, imports: [
114
+ TitleComponent,
115
+ DataGridModule,
116
+ LoadingComponent,
117
+ NgIf,
118
+ C8yTranslatePipe,
119
+ ActionBarItemComponent,
120
+ IconDirective,
121
+ C8yTranslateDirective
122
+ ], template: "<c8y-title translate>Localization</c8y-title>\n\n<ng-container *ngIf=\"!isLoading; else loading\">\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"addEntry()\"\n data-cy=\"c8y-translation-editor--add-translation\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n <span translate>Add translation</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n (click)=\"saveTranslations()\"\n data-cy=\"c8y-translation-editor--save-and-apply\"\n >\n <i c8yIcon=\"save\"></i>\n <span translate>Save & apply</span>\n </button>\n </c8y-action-bar-item>\n\n <c8y-data-grid\n class=\"content-fullpage d-flex d-col\"\n [title]=\"'Translations' | translate\"\n [columns]=\"columns\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [displayOptions]=\"displayOptions\"\n (onReload)=\"refresh()\"\n [rows]=\"items\"\n ></c8y-data-grid>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>\n" }]
123
+ }], ctorParameters: () => [{ type: i1.TranslationStoreService }, { type: i2.BsModalService }, { type: i3.AlertService }, { type: i3.AppStateService }, { type: i3.TranslateService }] });
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L3RyYW5zbGF0aW9uLWVkaXRvci90cmFuc2xhdGlvbi1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvdHJhbnNsYXRpb24tZWRpdG9yL3RyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsc0JBQXNCLEVBRXRCLFlBQVksRUFDWixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFFaEIsY0FBYyxFQUVkLE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEVBRWhCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDakIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUN4SSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMERBQTBELENBQUM7Ozs7O0FBaUJ4RyxNQUFNLE9BQU8sMEJBQTBCO0lBOEJyQyxZQUNVLGdCQUF5QyxFQUN6QyxZQUE0QixFQUM1QixLQUFtQixFQUNuQixRQUF5QixFQUN6QixTQUEyQjtRQUozQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLGlCQUFZLEdBQVosWUFBWSxDQUFnQjtRQUM1QixVQUFLLEdBQUwsS0FBSyxD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Q0FBQyxJQUFJO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNsQixxQkFBcUIsRUFBRSxzQ0FBc0M7U0FDOUQsQ0FBVyxDQUNmLENBQ0YsQ0FBQztRQUVGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7OEdBdEhVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGtGQ3hDdkMsK21DQXdDQSw0Q0RWSSxjQUFjLGtGQUNkLGNBQWMsdXlCQUNkLGdCQUFnQixtR0FDaEIsSUFBSSx3RkFDSixnQkFBZ0Isa0RBQ2hCLHNCQUFzQiwwSkFDdEIsYUFBYSwyRUFDYixxQkFBcUI7OzJGQUdaLDBCQUEwQjtrQkFmdEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FFdEIsSUFBSSxXQUNQO3dCQUNQLGNBQWM7d0JBQ2QsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLElBQUk7d0JBQ0osZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLGFBQWE7d0JBQ2IscUJBQXFCO3FCQUN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gIEFjdGlvbkNvbnRyb2wsXG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQzh5VHJhbnNsYXRlRGlyZWN0aXZlLFxuICBDOHlUcmFuc2xhdGVQaXBlLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkTW9kdWxlLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgUGFnaW5hdGlvbixcbiAgVGl0bGVDb21wb25lbnQsXG4gIFRyYW5zbGF0ZVNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblN0b3JlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvdHJhbnNsYXRpb24tZWRpdG9yL2RhdGEnO1xuaW1wb3J0IHsgTWFuYWdlVHJhbnNsYXRpb25DZWxsUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuLi9tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci9tYW5hZ2UtdHJhbnNsYXRpb24tY2VsbC1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEFkZFRyYW5zbGF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtdHJhbnNsYXRpb24tbW9kYWwvYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS10cmFuc2xhdGlvbi1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIERhdGFHcmlkTW9kdWxlLFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIEFjdGlvbkJhckl0ZW1Db21wb25lbnQsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBDOHlUcmFuc2xhdGVEaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDEwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBob3ZlcjogdHJ1ZVxuICB9O1xuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW1xuICAgIHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiBpdGVtID0+IHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gaS5rZXkgIT09IGl0ZW0ua2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG4gIGNvbHVtbnM6IENvbHVtbltdID0gW107XG4gIGlzTG9hZGluZyA9IHRydWU7XG4gIGl0ZW1zOiBBd2FpdGVkPFJldHVyblR5cGU8VHJhbnNsYXRpb25TdG9yZVNlcnZpY2VbJ2dldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5J10+PiA9XG4gICAgbmV3IEFycmF5PGFueT4oKTtcbiAgaXNIYXZpbmdDaGFuZ2VzID0gZmFsc2U7XG4gIGF2YWlsYWJsZUxhbmdzOiB7XG4gICAgbGFuZzogc3RyaW5nO1xuICAgIG5hdGl2ZUxhbmd1YWdlOiBzdHJpbmc7XG4gIH1bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRpb25TdG9yZTogVHJhbnNsYXRpb25TdG9yZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ncyA9ICh0aGlzLmFwcFN0YXRlLnN0YXRlLmxhbmdzIGFzIHN0cmluZ1tdKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5tYXAobCA9PiAoe1xuICAgICAgICBsYW5nOiBsLFxuICAgICAgICBuYXRpdmVMYW5ndWFnZTogdGhpcy50cmFuc2xhdGUuZ2V0TmF0aXZlTGFuZ3VhZ2UobClcbiAgICAgIH0pKTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgYXN5bmMgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoQ29sdW1ucygpO1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblN0b3JlLmdldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5KFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ncy5tYXAobCA9PiBsLmxhbmcpXG4gICAgKTtcblxuICAgIHRoaXMuaXRlbXMgPSB0cmFuc2xhdGlvbnM7XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgYWRkRW50cnkoKSB7XG4gICAgY29uc3QgY3VycmVudEtleXMgPSB0aGlzLml0ZW1zLm1hcChpdGVtID0+IGl0ZW0ua2V5KTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coQWRkVHJhbnNsYXRpb25Nb2RhbENvbXBvbmVudCwge1xuICAgICAgaW5pdGlhbFN0YXRlOiB7IGFscmVhZHlEZWZpbmVkS2V5czogY3VycmVudEtleXMsIGF2YWlsYWJsZUxhbmdzOiB0aGlzLmF2YWlsYWJsZUxhbmdzIH1cbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kYWxSZWYuY29udGVudC5yZXN1bHQ7XG4gICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuaXRlbXMsIHJlc3VsdCBhcyBhbnldO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcsIG1vZGFsIHdhcyBjbG9zZWQuXG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5nZXRDb2x1bW5zRm9yTG9jYWxlcygpO1xuICB9XG5cbiAgdmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMuaXNIYXZpbmdDaGFuZ2VzID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVUcmFuc2xhdGlvbnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRpb25TdG9yZS51cGRhdGVUcmFuc2xhdGlvbnModGhpcy5pdGVtcyk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdUcmFuc2xhdGlvbnMgc2F2ZWQnKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIHNhdmUgdHJhbnNsYXRpb25zJykpO1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uc0ZvckxvY2FsZXMoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBBcnJheTxDb2x1bW4+KCk7XG4gICAgY29sdW1ucy5wdXNoKHtcbiAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgaGVhZGVyOiBnZXR0ZXh0KCdUcmFuc2xhdGlvbiBrZXknKSxcbiAgICAgIHBhdGg6ICdrZXknLFxuICAgICAgZmlsdGVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgY29sdW1ucy5wdXNoKFxuICAgICAgLi4udGhpcy5hdmFpbGFibGVMYW5ncy5tYXAoXG4gICAgICAgIChsYW5ndWFnZSwgaW5kZXgpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIG5hbWU6IGxhbmd1YWdlLmxhbmcsXG4gICAgICAgICAgICBoZWFkZXI6IGAke2xhbmd1YWdlLm5hdGl2ZUxhbmd1YWdlfSAoJHtsYW5ndWFnZS5sYW5nfSlgLFxuICAgICAgICAgICAgcGF0aDogbGFuZ3VhZ2UubGFuZyxcbiAgICAgICAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgdmlzaWJsZTogaW5kZXggPCA1LFxuICAgICAgICAgICAgY2VsbFJlbmRlcmVyQ29tcG9uZW50OiBNYW5hZ2VUcmFuc2xhdGlvbkNlbGxSZW5kZXJlckNvbXBvbmVudFxuICAgICAgICAgIH0pIGFzIENvbHVtblxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxufVxuIiwiPGM4eS10aXRsZSB0cmFuc2xhdGU+TG9jYWxpemF0aW9uPC9jOHktdGl0bGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdcIj5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwiYWRkRW50cnkoKVwiXG4gICAgICBkYXRhLWN5PVwiYzh5LXRyYW5zbGF0aW9uLWVkaXRvci0tYWRkLXRyYW5zbGF0aW9uXCJcbiAgICA+XG4gICAgICA8aSBjOHlJY29uPVwicGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+QWRkIHRyYW5zbGF0aW9uPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICAoY2xpY2spPVwic2F2ZVRyYW5zbGF0aW9ucygpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktdHJhbnNsYXRpb24tZWRpdG9yLS1zYXZlLWFuZC1hcHBseVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInNhdmVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+U2F2ZSAmIGFwcGx5PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2UgZC1mbGV4IGQtY29sXCJcbiAgICBbdGl0bGVdPVwiJ1RyYW5zbGF0aW9ucycgfCB0cmFuc2xhdGVcIlxuICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgICAob25SZWxvYWQpPVwicmVmcmVzaCgpXCJcbiAgICBbcm93c109XCJpdGVtc1wiXG4gID48L2M4eS1kYXRhLWdyaWQ+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,31 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NavigatorNode, Permissions } from '@c8y/ngx-components';
3
+ import { gettext } from '@c8y/ngx-components/gettext';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@c8y/ngx-components";
6
+ export class TranslationEditorNaviagtorFactoryService {
7
+ constructor(permissions) {
8
+ this.permissions = permissions;
9
+ this.node = new NavigatorNode({
10
+ icon: 'language1',
11
+ label: gettext('Localization'),
12
+ parent: 'Settings',
13
+ path: 'localization'
14
+ });
15
+ }
16
+ get() {
17
+ if (!this.permissions.hasRole('ROLE_APPLICATION_MANAGEMENT_ADMIN')) {
18
+ return [];
19
+ }
20
+ return this.node;
21
+ }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, deps: [{ token: i1.Permissions }], target: i0.ɵɵFactoryTarget.Injectable }); }
23
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, providedIn: 'root' }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationEditorNaviagtorFactoryService, decorators: [{
26
+ type: Injectable,
27
+ args: [{
28
+ providedIn: 'root'
29
+ }]
30
+ }], ctorParameters: () => [{ type: i1.Permissions }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tZWRpdG9yLW5hdmlhZ3Rvci1mYWN0b3J5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvdHJhbnNsYXRpb24tZWRpdG9yLW5hdmlhZ3Rvci1mYWN0b3J5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQW9CLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUt0RCxNQUFNLE9BQU8sd0NBQXdDO0lBUW5ELFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBUHBDLFNBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUMvQixJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUM5QixNQUFNLEVBQUUsVUFBVTtZQUNsQixJQUFJLEVBQUUsY0FBYztTQUNyQixDQUFDLENBQUM7SUFFNEMsQ0FBQztJQUVoRCxHQUFHO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsQ0FBQztZQUNuRSxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQzs4R0FmVSx3Q0FBd0M7a0hBQXhDLHdDQUF3QyxjQUZ2QyxNQUFNOzsyRkFFUCx3Q0FBd0M7a0JBSHBELFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uRmFjdG9yeSwgTmF2aWdhdG9yTm9kZSwgUGVybWlzc2lvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2dldHRleHQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkVkaXRvck5hdmlhZ3RvckZhY3RvcnlTZXJ2aWNlIGltcGxlbWVudHMgRXh0ZW5zaW9uRmFjdG9yeTxOYXZpZ2F0b3JOb2RlPiB7XG4gIHByaXZhdGUgbm9kZSA9IG5ldyBOYXZpZ2F0b3JOb2RlKHtcbiAgICBpY29uOiAnbGFuZ3VhZ2UxJyxcbiAgICBsYWJlbDogZ2V0dGV4dCgnTG9jYWxpemF0aW9uJyksXG4gICAgcGFyZW50OiAnU2V0dGluZ3MnLFxuICAgIHBhdGg6ICdsb2NhbGl6YXRpb24nXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zKSB7fVxuXG4gIGdldCgpOiBOYXZpZ2F0b3JOb2RlIHwgTmF2aWdhdG9yTm9kZVtdIHtcbiAgICBpZiAoIXRoaXMucGVybWlzc2lvbnMuaGFzUm9sZSgnUk9MRV9BUFBMSUNBVElPTl9NQU5BR0VNRU5UX0FETUlOJykpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm9kZTtcbiAgfVxufVxuIl19