@c8y/ngx-components 1021.60.0 → 1021.62.1

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 (119) hide show
  1. package/alarms/alarm-details.component.d.ts +0 -4
  2. package/alarms/alarm-details.component.d.ts.map +1 -1
  3. package/core/authentication/new-password.component.d.ts +6 -3
  4. package/core/authentication/new-password.component.d.ts.map +1 -1
  5. package/core/common/interval-based-reload.abstract.d.ts +12 -1
  6. package/core/common/interval-based-reload.abstract.d.ts.map +1 -1
  7. package/core/common/permissions.service.d.ts +2 -0
  8. package/core/common/permissions.service.d.ts.map +1 -1
  9. package/core/common/tenant-ui.service.d.ts +9 -2
  10. package/core/common/tenant-ui.service.d.ts.map +1 -1
  11. package/core/forms/phone-validation.directive.d.ts +3 -6
  12. package/core/forms/phone-validation.directive.d.ts.map +1 -1
  13. package/core/router/router.module.d.ts.map +1 -1
  14. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -1
  15. package/esm2022/alarms/alarm-details.component.mjs +10 -10
  16. package/esm2022/core/authentication/new-password.component.mjs +26 -5
  17. package/esm2022/core/common/interval-based-reload.abstract.mjs +50 -2
  18. package/esm2022/core/common/permissions.service.mjs +3 -1
  19. package/esm2022/core/common/tenant-ui.service.mjs +28 -6
  20. package/esm2022/core/forms/phone-validation.directive.mjs +18 -19
  21. package/esm2022/core/router/router.module.mjs +1 -5
  22. package/esm2022/core/user/user-edit.component.mjs +1 -1
  23. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +8 -3
  24. package/esm2022/tenants/custom-properties/custom-properties.component.mjs +25 -5
  25. package/esm2022/tenants/existing-tenant.guard.mjs +18 -0
  26. package/esm2022/tenants/index.mjs +3 -1
  27. package/esm2022/tenants/support-user-access/support-user-access.component.mjs +31 -0
  28. package/esm2022/tenants/tenant-form/tenant-form-inputs-definitions.mjs +116 -0
  29. package/esm2022/tenants/tenant-form/tenant-form.component.mjs +294 -0
  30. package/esm2022/tenants/tenant-limits/tenant-limits-definitions.mjs +10 -17
  31. package/esm2022/tenants/tenant-limits/tenant-limits.component.mjs +42 -29
  32. package/esm2022/tenants/tenant-list/tenant-list.component.mjs +17 -8
  33. package/esm2022/tenants/tenants.model.mjs +30 -1
  34. package/esm2022/tenants/tenants.module.mjs +57 -22
  35. package/esm2022/translation-editor/data/translation-store.service.mjs +11 -8
  36. package/esm2022/translation-editor/index.mjs +22 -5
  37. package/esm2022/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.mjs +136 -0
  38. package/esm2022/translation-editor/lazy/index.mjs +2 -1
  39. package/esm2022/translation-editor/translation-editor-tab-factory.service.mjs +40 -0
  40. package/esm2022/translation-editor/translation-editor.constants.mjs +4 -0
  41. package/esm2022/upgrade/upgraded-services/index.mjs +2 -1
  42. package/esm2022/upgrade/upgraded-services/tenant-policies.service.mjs +11 -0
  43. package/esm2022/upgrade/upgraded-services/upgraded-services.module.mjs +12 -3
  44. package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +9 -7
  45. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +9 -7
  46. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -5
  47. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  48. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +7 -2
  49. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -1
  50. package/fesm2022/c8y-ngx-components-tenants.mjs +603 -82
  51. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  52. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +9 -6
  53. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
  54. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +127 -2
  55. package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -1
  56. package/fesm2022/c8y-ngx-components-translation-editor.mjs +58 -4
  57. package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -1
  58. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs +22 -3
  59. package/fesm2022/c8y-ngx-components-upgrade-upgraded-services.mjs.map +1 -1
  60. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +8 -6
  61. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  62. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +8 -6
  63. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  64. package/fesm2022/c8y-ngx-components.mjs +499 -413
  65. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  66. package/locales/de.po +17 -25
  67. package/locales/es.po +17 -25
  68. package/locales/fr.po +17 -25
  69. package/locales/ja_JP.po +17 -25
  70. package/locales/ko.po +17 -25
  71. package/locales/locales.pot +34 -24
  72. package/locales/nl.po +17 -25
  73. package/locales/pl.po +17 -25
  74. package/locales/pt_BR.po +17 -25
  75. package/locales/zh_CN.po +17 -25
  76. package/locales/zh_TW.po +17 -25
  77. package/package.json +1 -1
  78. package/tenants/custom-properties/custom-properties.component.d.ts +4 -2
  79. package/tenants/custom-properties/custom-properties.component.d.ts.map +1 -1
  80. package/tenants/existing-tenant.guard.d.ts +13 -0
  81. package/tenants/existing-tenant.guard.d.ts.map +1 -0
  82. package/tenants/index.d.ts +2 -0
  83. package/tenants/index.d.ts.map +1 -1
  84. package/tenants/support-user-access/support-user-access.component.d.ts +18 -0
  85. package/tenants/support-user-access/support-user-access.component.d.ts.map +1 -0
  86. package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts +113 -0
  87. package/tenants/tenant-form/tenant-form-inputs-definitions.d.ts.map +1 -0
  88. package/tenants/tenant-form/tenant-form.component.d.ts +79 -0
  89. package/tenants/tenant-form/tenant-form.component.d.ts.map +1 -0
  90. package/tenants/tenant-limits/tenant-limits-definitions.d.ts +11 -15
  91. package/tenants/tenant-limits/tenant-limits-definitions.d.ts.map +1 -1
  92. package/tenants/tenant-limits/tenant-limits.component.d.ts +9 -7
  93. package/tenants/tenant-limits/tenant-limits.component.d.ts.map +1 -1
  94. package/tenants/tenant-list/tenant-list.component.d.ts +6 -3
  95. package/tenants/tenant-list/tenant-list.component.d.ts.map +1 -1
  96. package/tenants/tenants.model.d.ts +31 -0
  97. package/tenants/tenants.model.d.ts.map +1 -1
  98. package/tenants/tenants.module.d.ts +4 -2
  99. package/tenants/tenants.module.d.ts.map +1 -1
  100. package/translation-editor/data/translation-store.service.d.ts +3 -2
  101. package/translation-editor/data/translation-store.service.d.ts.map +1 -1
  102. package/translation-editor/index.d.ts.map +1 -1
  103. package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts +28 -0
  104. package/translation-editor/lazy/advanced-translation-editor/advanced-translation-editor.component.d.ts.map +1 -0
  105. package/translation-editor/lazy/index.d.ts +1 -0
  106. package/translation-editor/lazy/index.d.ts.map +1 -1
  107. package/translation-editor/translation-editor-tab-factory.service.d.ts +22 -0
  108. package/translation-editor/translation-editor-tab-factory.service.d.ts.map +1 -0
  109. package/translation-editor/translation-editor.constants.d.ts +4 -0
  110. package/translation-editor/translation-editor.constants.d.ts.map +1 -0
  111. package/upgrade/upgraded-services/index.d.ts +1 -0
  112. package/upgrade/upgraded-services/index.d.ts.map +1 -1
  113. package/upgrade/upgraded-services/tenant-policies.service.d.ts +11 -0
  114. package/upgrade/upgraded-services/tenant-policies.service.d.ts.map +1 -0
  115. package/upgrade/upgraded-services/upgraded-services.module.d.ts.map +1 -1
  116. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +7 -2
  117. package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
  118. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +7 -2
  119. package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -1
@@ -1,3 +1,32 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const TENANTS_MODULE_CONFIG = new InjectionToken('TenantsModuleConfig');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RlbmFudHMvdGVuYW50cy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdmlnYXRvck5vZGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxuZXhwb3J0IGNvbnN0IFRFTkFOVFNfTU9EVUxFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUZW5hbnRzTW9kdWxlQ29uZmlnPignVGVuYW50c01vZHVsZUNvbmZpZycpO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciBgVGVuYW50c01vZHVsZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50c01vZHVsZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBBbGxvd3MgZm9yIGhpZGluZyBvciBjdXN0b21pemluZyBcIlN1YnRlbmFudHNcIiBuYXZpZ2F0b3Igbm9kZTpcbiAgICogLSBgc3VidGVuYW50c05hdmlnYXRvck5vZGU6IHRydWVgIC0gc2hvd3MgdGhlIGRlZmF1bHQgbmF2aWdhdG9yIG5vZGUgKGRlZmF1bHQpLFxuICAgKiAtIGBzdWJ0ZW5hbnRzTmF2aWdhdG9yTm9kZTogZmFsc2VgIC0gaGlkZXMgdGhlIG5hdmlnYXRvciBub2RlLFxuICAgKiAtIGBzdWJ0ZW5hbnRzTmF2aWdhdG9yTm9kZTogeyBsYWJlbDogJ015IHN1YnRlbmFudHMnIH1gIC0gb3ZlcnJpZGVzIGRlZmF1bHQgbmF2aWdhdG9yIG5vZGUsXG4gICAqIC0gYHN1YnRlbmFudHNOYXZpZ2F0b3JOb2RlOiBuZXcgTmF2aWdhdG9yTm9kZSh7IGxhYmVsOiAnTXkgc3VidGVuYW50cycgfSlgIC0gb3ZlcnJpZGVzIGRlZmF1bHQgbmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBzdWJ0ZW5hbnRzTmF2aWdhdG9yTm9kZT86IGJvb2xlYW4gfCBQYXJ0aWFsPE5hdmlnYXRvck5vZGU+O1xufVxuIl19
3
+ export const PRODUCT_EXPERIENCE_TENANT_MANAGEMENT = {
4
+ EVENTS: {
5
+ TENANT_MANAGEMENT: 'tenantManagement'
6
+ },
7
+ COMPONENTS: {
8
+ TENANT_LIST: 'tenant-list',
9
+ TENANT_FORM: 'tenant-form',
10
+ TENANT_CUSTOM_PROPERTIES: 'tenant-custom-properties',
11
+ TENANT_LIMITS: 'tenant-limits'
12
+ },
13
+ ACTIONS: {
14
+ TENANT_CREATION_INITIALIZED: 'tenantCreationInitialized',
15
+ TENANT_CREATION_STARTED_FILLING: 'tenantCreationStartedFilling',
16
+ TENANT_CREATION_SAVED: 'tenantCreationSaved',
17
+ TENANT_PROPERTIES_OPENED: 'tenantPropertiesOpened',
18
+ TENANT_PROPERTIES_STARTED_CHANGING: 'tenantPropertiesStartedChanging',
19
+ TENANT_PROPERTIES_SAVED: 'tenantPropertiesSaved',
20
+ TENANT_CUSTOM_PROPERTIES_OPENED: 'tenantCustomPropertiesOpened',
21
+ TENANT_CUSTOM_PROPERTIES_STARTED_CHANGING: 'tenantCustomPropertiesStartedChanging',
22
+ TENANT_CUSTOM_PROPERTIES_SAVED: 'tenantCustomPropertiesSaved',
23
+ TENANT_LIMITS_OPENED: 'tenantLimitsOpened',
24
+ TENANT_LIMITS_STARTED_CHANGING: 'tenantLimitsStartedChanging',
25
+ TENANT_LIMITS_SAVED: 'tenantLimitsSaved'
26
+ },
27
+ RESULTS: {
28
+ SUCCESS: 'success',
29
+ FAILURE: 'failure'
30
+ }
31
+ };
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RlbmFudHMvdGVuYW50cy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFzQixxQkFBcUIsQ0FBQyxDQUFDO0FBZ0JwRyxNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRztJQUNsRCxNQUFNLEVBQUU7UUFDTixpQkFBaUIsRUFBRSxrQkFBa0I7S0FDdEM7SUFDRCxVQUFVLEVBQUU7UUFDVixXQUFXLEVBQUUsYUFBYTtRQUMxQixXQUFXLEVBQUUsYUFBYTtRQUMxQix3QkFBd0IsRUFBRSwwQkFBMEI7UUFDcEQsYUFBYSxFQUFFLGVBQWU7S0FDL0I7SUFDRCxPQUFPLEVBQUU7UUFDUCwyQkFBMkIsRUFBRSwyQkFBMkI7UUFDeEQsK0JBQStCLEVBQUUsOEJBQThCO1FBQy9ELHFCQUFxQixFQUFFLHFCQUFxQjtRQUM1Qyx3QkFBd0IsRUFBRSx3QkFBd0I7UUFDbEQsa0NBQWtDLEVBQUUsaUNBQWlDO1FBQ3JFLHVCQUF1QixFQUFFLHVCQUF1QjtRQUNoRCwrQkFBK0IsRUFBRSw4QkFBOEI7UUFDL0QseUNBQXlDLEVBQUUsdUNBQXVDO1FBQ2xGLDhCQUE4QixFQUFFLDZCQUE2QjtRQUM3RCxvQkFBb0IsRUFBRSxvQkFBb0I7UUFDMUMsOEJBQThCLEVBQUUsNkJBQTZCO1FBQzdELG1CQUFtQixFQUFFLG1CQUFtQjtLQUN6QztJQUNELE9BQU8sRUFBRTtRQUNQLE9BQU8sRUFBRSxTQUFTO1FBQ2xCLE9BQU8sRUFBRSxTQUFTO0tBQ25CO0NBQ08sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JOb2RlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbmV4cG9ydCBjb25zdCBURU5BTlRTX01PRFVMRV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VGVuYW50c01vZHVsZUNvbmZpZz4oJ1RlbmFudHNNb2R1bGVDb25maWcnKTtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9iamVjdCBmb3IgYFRlbmFudHNNb2R1bGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudHNNb2R1bGVDb25maWcge1xuICAvKipcbiAgICogQWxsb3dzIGZvciBoaWRpbmcgb3IgY3VzdG9taXppbmcgXCJTdWJ0ZW5hbnRzXCIgbmF2aWdhdG9yIG5vZGU6XG4gICAqIC0gYHN1YnRlbmFudHNOYXZpZ2F0b3JOb2RlOiB0cnVlYCAtIHNob3dzIHRoZSBkZWZhdWx0IG5hdmlnYXRvciBub2RlIChkZWZhdWx0KSxcbiAgICogLSBgc3VidGVuYW50c05hdmlnYXRvck5vZGU6IGZhbHNlYCAtIGhpZGVzIHRoZSBuYXZpZ2F0b3Igbm9kZSxcbiAgICogLSBgc3VidGVuYW50c05hdmlnYXRvck5vZGU6IHsgbGFiZWw6ICdNeSBzdWJ0ZW5hbnRzJyB9YCAtIG92ZXJyaWRlcyBkZWZhdWx0IG5hdmlnYXRvciBub2RlLFxuICAgKiAtIGBzdWJ0ZW5hbnRzTmF2aWdhdG9yTm9kZTogbmV3IE5hdmlnYXRvck5vZGUoeyBsYWJlbDogJ015IHN1YnRlbmFudHMnIH0pYCAtIG92ZXJyaWRlcyBkZWZhdWx0IG5hdmlnYXRvciBub2RlLlxuICAgKi9cbiAgc3VidGVuYW50c05hdmlnYXRvck5vZGU/OiBib29sZWFuIHwgUGFydGlhbDxOYXZpZ2F0b3JOb2RlPjtcbn1cblxuZXhwb3J0IGNvbnN0IFBST0RVQ1RfRVhQRVJJRU5DRV9URU5BTlRfTUFOQUdFTUVOVCA9IHtcbiAgRVZFTlRTOiB7XG4gICAgVEVOQU5UX01BTkFHRU1FTlQ6ICd0ZW5hbnRNYW5hZ2VtZW50J1xuICB9LFxuICBDT01QT05FTlRTOiB7XG4gICAgVEVOQU5UX0xJU1Q6ICd0ZW5hbnQtbGlzdCcsXG4gICAgVEVOQU5UX0ZPUk06ICd0ZW5hbnQtZm9ybScsXG4gICAgVEVOQU5UX0NVU1RPTV9QUk9QRVJUSUVTOiAndGVuYW50LWN1c3RvbS1wcm9wZXJ0aWVzJyxcbiAgICBURU5BTlRfTElNSVRTOiAndGVuYW50LWxpbWl0cydcbiAgfSxcbiAgQUNUSU9OUzoge1xuICAgIFRFTkFOVF9DUkVBVElPTl9JTklUSUFMSVpFRDogJ3RlbmFudENyZWF0aW9uSW5pdGlhbGl6ZWQnLFxuICAgIFRFTkFOVF9DUkVBVElPTl9TVEFSVEVEX0ZJTExJTkc6ICd0ZW5hbnRDcmVhdGlvblN0YXJ0ZWRGaWxsaW5nJyxcbiAgICBURU5BTlRfQ1JFQVRJT05fU0FWRUQ6ICd0ZW5hbnRDcmVhdGlvblNhdmVkJyxcbiAgICBURU5BTlRfUFJPUEVSVElFU19PUEVORUQ6ICd0ZW5hbnRQcm9wZXJ0aWVzT3BlbmVkJyxcbiAgICBURU5BTlRfUFJPUEVSVElFU19TVEFSVEVEX0NIQU5HSU5HOiAndGVuYW50UHJvcGVydGllc1N0YXJ0ZWRDaGFuZ2luZycsXG4gICAgVEVOQU5UX1BST1BFUlRJRVNfU0FWRUQ6ICd0ZW5hbnRQcm9wZXJ0aWVzU2F2ZWQnLFxuICAgIFRFTkFOVF9DVVNUT01fUFJPUEVSVElFU19PUEVORUQ6ICd0ZW5hbnRDdXN0b21Qcm9wZXJ0aWVzT3BlbmVkJyxcbiAgICBURU5BTlRfQ1VTVE9NX1BST1BFUlRJRVNfU1RBUlRFRF9DSEFOR0lORzogJ3RlbmFudEN1c3RvbVByb3BlcnRpZXNTdGFydGVkQ2hhbmdpbmcnLFxuICAgIFRFTkFOVF9DVVNUT01fUFJPUEVSVElFU19TQVZFRDogJ3RlbmFudEN1c3RvbVByb3BlcnRpZXNTYXZlZCcsXG4gICAgVEVOQU5UX0xJTUlUU19PUEVORUQ6ICd0ZW5hbnRMaW1pdHNPcGVuZWQnLFxuICAgIFRFTkFOVF9MSU1JVFNfU1RBUlRFRF9DSEFOR0lORzogJ3RlbmFudExpbWl0c1N0YXJ0ZWRDaGFuZ2luZycsXG4gICAgVEVOQU5UX0xJTUlUU19TQVZFRDogJ3RlbmFudExpbWl0c1NhdmVkJ1xuICB9LFxuICBSRVNVTFRTOiB7XG4gICAgU1VDQ0VTUzogJ3N1Y2Nlc3MnLFxuICAgIEZBSUxVUkU6ICdmYWlsdXJlJ1xuICB9XG59IGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgVGVuYW50TWFuYWdlbWVudEFjdGlvblR5cGUgPVxuICAodHlwZW9mIFBST0RVQ1RfRVhQRVJJRU5DRV9URU5BTlRfTUFOQUdFTUVOVC5BQ1RJT05TKVtrZXlvZiB0eXBlb2YgUFJPRFVDVF9FWFBFUklFTkNFX1RFTkFOVF9NQU5BR0VNRU5ULkFDVElPTlNdO1xuZXhwb3J0IHR5cGUgVGVuYW50TWFuYWdlbWVudFJlc3VsdFR5cGUgPVxuICAodHlwZW9mIFBST0RVQ1RfRVhQRVJJRU5DRV9URU5BTlRfTUFOQUdFTUVOVC5SRVNVTFRTKVtrZXlvZiB0eXBlb2YgUFJPRFVDVF9FWFBFUklFTkNFX1RFTkFOVF9NQU5BR0VNRU5ULlJFU1VMVFNdO1xuIl19
@@ -1,15 +1,18 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { RouterModule } from '@angular/router';
3
3
  import { BsDatepickerModule } from 'ngx-bootstrap/datepicker';
4
- import { CoreModule, gettext, hookNavigator, hookRoute, ViewContext } from '@c8y/ngx-components';
4
+ import { CoreModule, hookNavigator, hookRoute, gettext, ViewContext } from '@c8y/ngx-components';
5
5
  import { TenantsNavigationFactory } from './tenants-navigation.factory';
6
6
  import { TenantListComponent } from './tenant-list/tenant-list.component';
7
7
  import { CreationTimeFilteringFormRendererComponent } from './tenant-list/creation-time.filtering-form-renderer.component';
8
8
  import { StatusFilteringFormRendererComponent } from './tenant-list/status.filtering-form-renderer.component';
9
9
  import { TENANTS_MODULE_CONFIG } from './tenants.model';
10
10
  import { TenantListGuard } from './tenant-list/tenant-list.guard';
11
+ import { TenantFormComponent } from './tenant-form/tenant-form.component';
11
12
  import { CustomPropertiesComponent } from './custom-properties/custom-properties.component';
12
13
  import { TenantLimitsComponent } from './tenant-limits/tenant-limits.component';
14
+ import { SupportUserAccessComponent } from './support-user-access/support-user-access.component';
15
+ import { ExistingTenantGuard } from './existing-tenant.guard';
13
16
  import * as i0 from "@angular/core";
14
17
  export class TenantsModule {
15
18
  static config(config = {}) {
@@ -26,24 +29,39 @@ export class TenantsModule {
26
29
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
27
30
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TenantsModule, declarations: [TenantListComponent,
28
31
  CreationTimeFilteringFormRendererComponent,
29
- StatusFilteringFormRendererComponent], imports: [RouterModule, BsDatepickerModule, CoreModule] }); }
32
+ StatusFilteringFormRendererComponent,
33
+ TenantFormComponent], imports: [BsDatepickerModule, CoreModule, RouterModule, SupportUserAccessComponent] }); }
30
34
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantsModule, providers: [
31
35
  TenantListGuard,
36
+ ExistingTenantGuard,
32
37
  hookNavigator(TenantsNavigationFactory),
33
- hookRoute({
34
- path: 'tenants',
35
- icon: 'c8y-layers',
36
- component: TenantListComponent,
37
- canActivate: [TenantListGuard]
38
- }),
39
38
  hookRoute([
39
+ {
40
+ path: 'tenants',
41
+ icon: 'c8y-layers',
42
+ component: TenantListComponent,
43
+ canActivate: [TenantListGuard]
44
+ },
45
+ {
46
+ path: 'tenants/new',
47
+ component: TenantFormComponent
48
+ },
49
+ {
50
+ path: 'properties',
51
+ component: TenantFormComponent,
52
+ icon: 'new-property',
53
+ label: gettext('Properties'),
54
+ context: ViewContext.Tenant,
55
+ priority: 10000
56
+ },
40
57
  {
41
58
  path: 'custom_properties',
42
59
  component: CustomPropertiesComponent,
43
60
  icon: 'property-script',
44
61
  label: gettext('Custom properties'),
45
62
  context: ViewContext.Tenant,
46
- priority: 4
63
+ priority: 4,
64
+ canActivate: [ExistingTenantGuard]
47
65
  },
48
66
  {
49
67
  path: 'limits',
@@ -51,38 +69,54 @@ export class TenantsModule {
51
69
  icon: 'sliders',
52
70
  label: gettext('Limits'),
53
71
  context: ViewContext.Tenant,
54
- priority: 3
72
+ priority: 3,
73
+ canActivate: [ExistingTenantGuard]
55
74
  }
56
75
  ])
57
- ], imports: [RouterModule, BsDatepickerModule, CoreModule] }); }
76
+ ], imports: [BsDatepickerModule, CoreModule, RouterModule, SupportUserAccessComponent] }); }
58
77
  }
59
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TenantsModule, decorators: [{
60
79
  type: NgModule,
61
80
  args: [{
62
- imports: [RouterModule, BsDatepickerModule, CoreModule],
81
+ imports: [BsDatepickerModule, CoreModule, RouterModule, SupportUserAccessComponent],
63
82
  exports: [],
64
83
  declarations: [
65
84
  TenantListComponent,
66
85
  CreationTimeFilteringFormRendererComponent,
67
- StatusFilteringFormRendererComponent
86
+ StatusFilteringFormRendererComponent,
87
+ TenantFormComponent
68
88
  ],
69
89
  providers: [
70
90
  TenantListGuard,
91
+ ExistingTenantGuard,
71
92
  hookNavigator(TenantsNavigationFactory),
72
- hookRoute({
73
- path: 'tenants',
74
- icon: 'c8y-layers',
75
- component: TenantListComponent,
76
- canActivate: [TenantListGuard]
77
- }),
78
93
  hookRoute([
94
+ {
95
+ path: 'tenants',
96
+ icon: 'c8y-layers',
97
+ component: TenantListComponent,
98
+ canActivate: [TenantListGuard]
99
+ },
100
+ {
101
+ path: 'tenants/new',
102
+ component: TenantFormComponent
103
+ },
104
+ {
105
+ path: 'properties',
106
+ component: TenantFormComponent,
107
+ icon: 'new-property',
108
+ label: gettext('Properties'),
109
+ context: ViewContext.Tenant,
110
+ priority: 10000
111
+ },
79
112
  {
80
113
  path: 'custom_properties',
81
114
  component: CustomPropertiesComponent,
82
115
  icon: 'property-script',
83
116
  label: gettext('Custom properties'),
84
117
  context: ViewContext.Tenant,
85
- priority: 4
118
+ priority: 4,
119
+ canActivate: [ExistingTenantGuard]
86
120
  },
87
121
  {
88
122
  path: 'limits',
@@ -90,10 +124,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
90
124
  icon: 'sliders',
91
125
  label: gettext('Limits'),
92
126
  context: ViewContext.Tenant,
93
- priority: 3
127
+ priority: 3,
128
+ canActivate: [ExistingTenantGuard]
94
129
  }
95
130
  ])
96
131
  ]
97
132
  }]
98
133
  }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL3RlbmFudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzNILE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlHLE9BQU8sRUFBdUIscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBdUNoRixNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQThCLEVBQUU7UUFDNUMsT0FBTztZQUNMLFFBQVEsRUFBRSxhQUFhO1lBQ3ZCLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUscUJBQXFCO29CQUM5QixRQUFRLEVBQUUsTUFBTTtpQkFDakI7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDOytHQVhVLGFBQWE7Z0hBQWIsYUFBYSxpQkFqQ3RCLG1CQUFtQjtZQUNuQiwwQ0FBMEM7WUFDMUMsb0NBQW9DLGFBTDVCLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVO2dIQW9DM0MsYUFBYSxhQTdCYjtZQUNULGVBQWU7WUFDZixhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDdkMsU0FBUyxDQUFDO2dCQUNSLElBQUksRUFBRSxTQUFTO2dCQUNmLElBQUksRUFBRSxZQUFZO2dCQUNsQixTQUFTLEVBQUUsbUJBQW1CO2dCQUM5QixXQUFXLEVBQUUsQ0FBQyxlQUFlLENBQUM7YUFDL0IsQ0FBQztZQUNGLFNBQVMsQ0FBQztnQkFDUjtvQkFDRSxJQUFJLEVBQUUsbUJBQW1CO29CQUN6QixTQUFTLEVBQUUseUJBQXlCO29CQUNwQyxJQUFJLEVBQUUsaUJBQWlCO29CQUN2QixLQUFLLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQzNCLFFBQVEsRUFBRSxDQUFDO2lCQUNaO2dCQUNEO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLFNBQVMsRUFBRSxxQkFBcUI7b0JBQ2hDLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUN4QixPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQzNCLFFBQVEsRUFBRSxDQUFDO2lCQUNaO2FBQ0YsQ0FBQztTQUNILFlBbENTLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVOzs0RkFvQzNDLGFBQWE7a0JBckN6QixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxVQUFVLENBQUM7b0JBQ3ZELE9BQU8sRUFBRSxFQUFFO29CQUNYLFlBQVksRUFBRTt3QkFDWixtQkFBbUI7d0JBQ25CLDBDQUEwQzt3QkFDMUMsb0NBQW9DO3FCQUNyQztvQkFDRCxTQUFTLEVBQUU7d0JBQ1QsZUFBZTt3QkFDZixhQUFhLENBQUMsd0JBQXdCLENBQUM7d0JBQ3ZDLFNBQVMsQ0FBQzs0QkFDUixJQUFJLEVBQUUsU0FBUzs0QkFDZixJQUFJLEVBQUUsWUFBWTs0QkFDbEIsU0FBUyxFQUFFLG1CQUFtQjs0QkFDOUIsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDO3lCQUMvQixDQUFDO3dCQUNGLFNBQVMsQ0FBQzs0QkFDUjtnQ0FDRSxJQUFJLEVBQUUsbUJBQW1CO2dDQUN6QixTQUFTLEVBQUUseUJBQXlCO2dDQUNwQyxJQUFJLEVBQUUsaUJBQWlCO2dDQUN2QixLQUFLLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDO2dDQUNuQyxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0NBQzNCLFFBQVEsRUFBRSxDQUFDOzZCQUNaOzRCQUNEO2dDQUNFLElBQUksRUFBRSxRQUFRO2dDQUNkLFNBQVMsRUFBRSxxQkFBcUI7Z0NBQ2hDLElBQUksRUFBRSxTQUFTO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2dDQUN4QixPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0NBQzNCLFFBQVEsRUFBRSxDQUFDOzZCQUNaO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvZGF0ZXBpY2tlcic7XG5cbmltcG9ydCB7IENvcmVNb2R1bGUsIGdldHRleHQsIGhvb2tOYXZpZ2F0b3IsIGhvb2tSb3V0ZSwgVmlld0NvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSB9IGZyb20gJy4vdGVuYW50cy1uYXZpZ2F0aW9uLmZhY3RvcnknO1xuaW1wb3J0IHsgVGVuYW50TGlzdENvbXBvbmVudCB9IGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7IENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vdGVuYW50LWxpc3QvY3JlYXRpb24tdGltZS5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC9zdGF0dXMuZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRlbmFudHNNb2R1bGVDb25maWcsIFRFTkFOVFNfTU9EVUxFX0NPTkZJRyB9IGZyb20gJy4vdGVuYW50cy5tb2RlbCc7XG5pbXBvcnQgeyBUZW5hbnRMaXN0R3VhcmQgfSBmcm9tICcuL3RlbmFudC1saXN0L3RlbmFudC1saXN0Lmd1YXJkJztcbmltcG9ydCB7IEN1c3RvbVByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZW5hbnRMaW1pdHNDb21wb25lbnQgfSBmcm9tICcuL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbUm91dGVyTW9kdWxlLCBCc0RhdGVwaWNrZXJNb2R1bGUsIENvcmVNb2R1bGVdLFxuICBleHBvcnRzOiBbXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICBDcmVhdGlvblRpbWVGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgU3RhdHVzRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50XG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIFRlbmFudExpc3RHdWFyZCxcbiAgICBob29rTmF2aWdhdG9yKFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSksXG4gICAgaG9va1JvdXRlKHtcbiAgICAgIHBhdGg6ICd0ZW5hbnRzJyxcbiAgICAgIGljb246ICdjOHktbGF5ZXJzJyxcbiAgICAgIGNvbXBvbmVudDogVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICAgIGNhbkFjdGl2YXRlOiBbVGVuYW50TGlzdEd1YXJkXVxuICAgIH0pLFxuICAgIGhvb2tSb3V0ZShbXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdjdXN0b21fcHJvcGVydGllcycsXG4gICAgICAgIGNvbXBvbmVudDogQ3VzdG9tUHJvcGVydGllc0NvbXBvbmVudCxcbiAgICAgICAgaWNvbjogJ3Byb3BlcnR5LXNjcmlwdCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiA0XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAnbGltaXRzJyxcbiAgICAgICAgY29tcG9uZW50OiBUZW5hbnRMaW1pdHNDb21wb25lbnQsXG4gICAgICAgIGljb246ICdzbGlkZXJzJyxcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0xpbWl0cycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiAzXG4gICAgICB9XG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW5hbnRzTW9kdWxlIHtcbiAgc3RhdGljIGNvbmZpZyhjb25maWc6IFRlbmFudHNNb2R1bGVDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VGVuYW50c01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVGVuYW50c01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogVEVOQU5UU19NT0RVTEVfQ09ORklHLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50cy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZW5hbnRzL3RlbmFudHMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQ0FBMEMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzNILE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzlHLE9BQU8sRUFBdUIscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDNUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBdUQ5RCxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQThCLEVBQUU7UUFDNUMs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LFNBQVMsRUFBRSx5QkFBeUI7Z0NBQ3BDLElBQUksRUFBRSxpQkFBaUI7Z0NBQ3ZCLEtBQUssRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUM7Z0NBQ25DLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTTtnQ0FDM0IsUUFBUSxFQUFFLENBQUM7Z0NBQ1gsV0FBVyxFQUFFLENBQUMsbUJBQW1CLENBQUM7NkJBQ25DOzRCQUNEO2dDQUNFLElBQUksRUFBRSxRQUFRO2dDQUNkLFNBQVMsRUFBRSxxQkFBcUI7Z0NBQ2hDLElBQUksRUFBRSxTQUFTO2dDQUNmLEtBQUssRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDO2dDQUN4QixPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07Z0NBQzNCLFFBQVEsRUFBRSxDQUFDO2dDQUNYLFdBQVcsRUFBRSxDQUFDLG1CQUFtQixDQUFDOzZCQUNuQzt5QkFDRixDQUFDO3FCQUNIO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCc0RhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgQ29yZU1vZHVsZSwgaG9va05hdmlnYXRvciwgaG9va1JvdXRlLCBnZXR0ZXh0LCBWaWV3Q29udGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVGVuYW50c05hdmlnYXRpb25GYWN0b3J5IH0gZnJvbSAnLi90ZW5hbnRzLW5hdmlnYXRpb24uZmFjdG9yeSc7XG5pbXBvcnQgeyBUZW5hbnRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC90ZW5hbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3JlYXRpb25UaW1lRmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi90ZW5hbnQtbGlzdC9jcmVhdGlvbi10aW1lLmZpbHRlcmluZy1mb3JtLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQgfSBmcm9tICcuL3RlbmFudC1saXN0L3N0YXR1cy5maWx0ZXJpbmctZm9ybS1yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGVuYW50c01vZHVsZUNvbmZpZywgVEVOQU5UU19NT0RVTEVfQ09ORklHIH0gZnJvbSAnLi90ZW5hbnRzLm1vZGVsJztcbmltcG9ydCB7IFRlbmFudExpc3RHdWFyZCB9IGZyb20gJy4vdGVuYW50LWxpc3QvdGVuYW50LWxpc3QuZ3VhcmQnO1xuaW1wb3J0IHsgVGVuYW50Rm9ybUNvbXBvbmVudCB9IGZyb20gJy4vdGVuYW50LWZvcm0vdGVuYW50LWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IEN1c3RvbVByb3BlcnRpZXNDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1wcm9wZXJ0aWVzL2N1c3RvbS1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZW5hbnRMaW1pdHNDb21wb25lbnQgfSBmcm9tICcuL3RlbmFudC1saW1pdHMvdGVuYW50LWxpbWl0cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3VwcG9ydFVzZXJBY2Nlc3NDb21wb25lbnQgfSBmcm9tICcuL3N1cHBvcnQtdXNlci1hY2Nlc3Mvc3VwcG9ydC11c2VyLWFjY2Vzcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXhpc3RpbmdUZW5hbnRHdWFyZCB9IGZyb20gJy4vZXhpc3RpbmctdGVuYW50Lmd1YXJkJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0JzRGF0ZXBpY2tlck1vZHVsZSwgQ29yZU1vZHVsZSwgUm91dGVyTW9kdWxlLCBTdXBwb3J0VXNlckFjY2Vzc0NvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBUZW5hbnRMaXN0Q29tcG9uZW50LFxuICAgIENyZWF0aW9uVGltZUZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICBTdGF0dXNGaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQsXG4gICAgVGVuYW50Rm9ybUNvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBUZW5hbnRMaXN0R3VhcmQsXG4gICAgRXhpc3RpbmdUZW5hbnRHdWFyZCxcbiAgICBob29rTmF2aWdhdG9yKFRlbmFudHNOYXZpZ2F0aW9uRmFjdG9yeSksXG4gICAgaG9va1JvdXRlKFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJ3RlbmFudHMnLFxuICAgICAgICBpY29uOiAnYzh5LWxheWVycycsXG4gICAgICAgIGNvbXBvbmVudDogVGVuYW50TGlzdENvbXBvbmVudCxcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtUZW5hbnRMaXN0R3VhcmRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAndGVuYW50cy9uZXcnLFxuICAgICAgICBjb21wb25lbnQ6IFRlbmFudEZvcm1Db21wb25lbnRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdwcm9wZXJ0aWVzJyxcbiAgICAgICAgY29tcG9uZW50OiBUZW5hbnRGb3JtQ29tcG9uZW50LFxuICAgICAgICBpY29uOiAnbmV3LXByb3BlcnR5JyxcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ1Byb3BlcnRpZXMnKSxcbiAgICAgICAgY29udGV4dDogVmlld0NvbnRleHQuVGVuYW50LFxuICAgICAgICBwcmlvcml0eTogMTAwMDBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6ICdjdXN0b21fcHJvcGVydGllcycsXG4gICAgICAgIGNvbXBvbmVudDogQ3VzdG9tUHJvcGVydGllc0NvbXBvbmVudCxcbiAgICAgICAgaWNvbjogJ3Byb3BlcnR5LXNjcmlwdCcsXG4gICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDdXN0b20gcHJvcGVydGllcycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiA0LFxuICAgICAgICBjYW5BY3RpdmF0ZTogW0V4aXN0aW5nVGVuYW50R3VhcmRdXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBwYXRoOiAnbGltaXRzJyxcbiAgICAgICAgY29tcG9uZW50OiBUZW5hbnRMaW1pdHNDb21wb25lbnQsXG4gICAgICAgIGljb246ICdzbGlkZXJzJyxcbiAgICAgICAgbGFiZWw6IGdldHRleHQoJ0xpbWl0cycpLFxuICAgICAgICBjb250ZXh0OiBWaWV3Q29udGV4dC5UZW5hbnQsXG4gICAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgICBjYW5BY3RpdmF0ZTogW0V4aXN0aW5nVGVuYW50R3VhcmRdXG4gICAgICB9XG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW5hbnRzTW9kdWxlIHtcbiAgc3RhdGljIGNvbmZpZyhjb25maWc6IFRlbmFudHNNb2R1bGVDb25maWcgPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8VGVuYW50c01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogVGVuYW50c01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogVEVOQU5UU19NT0RVTEVfQ09ORklHLFxuICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdfQ==
@@ -1,15 +1,16 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { ApplicationAvailability, ApplicationService, ApplicationType } from '@c8y/client';
2
+ import { ApplicationAvailability, ApplicationService, ApplicationType, FetchClient } from '@c8y/client';
3
3
  import { AppStateService, ZipService } from '@c8y/ngx-components';
4
4
  import { uniq } from 'lodash-es';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@c8y/client";
7
7
  import * as i2 from "@c8y/ngx-components";
8
8
  export class TranslationStoreService {
9
- constructor(appService, appState, zip) {
9
+ constructor(appService, appState, zip, fetchClient) {
10
10
  this.appService = appService;
11
11
  this.appState = appState;
12
12
  this.zip = zip;
13
+ this.fetchClient = fetchClient;
13
14
  this.translationAppName = 'User defined translations';
14
15
  this.translationAppContextPath = 'user-defined-translations';
15
16
  }
@@ -30,11 +31,12 @@ export class TranslationStoreService {
30
31
  for (const locale of locales) {
31
32
  try {
32
33
  const translationsForLanguageAndApp = await this.getFileFromPath(`/apps/${contextPath}/${locale}.json`);
33
- for (const key of Object.keys(translationsForLanguageAndApp)) {
34
+ const translationsForLang = translationsForLanguageAndApp[locale];
35
+ for (const key of Object.keys(translationsForLang)) {
34
36
  if (!translations[key]) {
35
37
  translations[key] = {};
36
38
  }
37
- translations[key][locale] = translationsForLanguageAndApp[key];
39
+ translations[key][locale] = translationsForLang[key];
38
40
  }
39
41
  }
40
42
  catch (e) {
@@ -158,13 +160,14 @@ export class TranslationStoreService {
158
160
  }
159
161
  async getFileFromPath(path) {
160
162
  const finalPath = `${path}?nocache=${Date.now()}`;
161
- const response = await fetch(finalPath);
163
+ // using fetch client instead of fetch directly here to ensure loading indicator is shown during these requests
164
+ const response = await this.fetchClient.fetch(finalPath);
162
165
  if (response.status !== 200) {
163
166
  throw new Error(`Failed to fetch file from ${path}`);
164
167
  }
165
168
  return response.json();
166
169
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationStoreService, deps: [{ token: i1.ApplicationService }, { token: i2.AppStateService }, { token: i2.ZipService }], target: i0.ɵɵFactoryTarget.Injectable }); }
170
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationStoreService, deps: [{ token: i1.ApplicationService }, { token: i2.AppStateService }, { token: i2.ZipService }, { token: i1.FetchClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
168
171
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationStoreService, providedIn: 'root' }); }
169
172
  }
170
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationStoreService, decorators: [{
@@ -172,5 +175,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
172
175
  args: [{
173
176
  providedIn: 'root'
174
177
  }]
175
- }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.AppStateService }, { type: i2.ZipService }] });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tc3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9kYXRhL3RyYW5zbGF0aW9uLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixlQUFlLEVBRWhCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQVVqQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQ1UsVUFBOEIsRUFDOUIsUUFBeUIsRUFDekIsR0FBZTtRQUZmLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFOTix1QkFBa0IsR0FBRywyQkFBMkIsQ0FBQztRQUNqRCw4QkFBeUIsR0FBRywyQkFBMkIsQ0FBQztJQU14RSxDQUFDO0lBRUo7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBaUI7UUFDOUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM5QyxJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQzdCLFVBQVU7YUFDUCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFH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RU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFZO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxZQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ2xELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDOytHQTFNVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb25cbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlLCBaaXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbkxvY2FsZSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxvY2FsZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvblN0b3JlU2VydmljZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkFwcE5hbWUgPSAnVXNlciBkZWZpbmVkIHRyYW5zbGF0aW9ucyc7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoID0gJ3VzZXItZGVmaW5lZC10cmFuc2xhdGlvbnMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHppcDogWmlwU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2FsZXMgZnJvbSBhbGwgdGhlIGhvc3RlZCBhcHBzIGF2YWlsYWJsZSBvbiB0aGUgdGVuYW50LlxuICAgKi9cbiAgYXN5bmMgZ2V0QXZhaWxhYmxlVHJhbnNsYXRpb25zKGxvY2FsZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgeyBkYXRhOiBob3N0ZWRBcHBzIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UubGlzdCh7XG4gICAgICB0ZW5hbnQ6IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lLFxuICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5pcXVlQ29udGV4dFBhdGhzID0gdW5pcShcbiAgICAgIGhvc3RlZEFwcHNcbiAgICAgICAgLmZpbHRlcihhcHAgPT4gYXBwLmNvbnRleHRQYXRoICYmIGFwcC5tYW5pZmVzdD8ud2ViU2RrVmVyc2lvbilcbiAgICAgICAgLm1hcChhcHAgPT4gYXBwLmNvbnRleHRQYXRoKVxuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogeyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XG4gICAgZm9yIChjb25zdCBjb250ZXh0UGF0aCBvZiB1bmlxdWVDb250ZXh0UGF0aHMpIHtcbiAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcCA9IGF3YWl0IHRoaXMuZ2V0RmlsZUZyb21QYXRoKFxuICAgICAgICAgICAgYC9hcHBzLyR7Y29udGV4dFBhdGh9LyR7bG9jYWxlfS5qc29uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2VBbmRBcHApKSB7XG4gICAgICAgICAgICBpZiAoIXRyYW5zbGF0aW9uc1trZXldKSB7XG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9uc1trZXldID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmFuc2xhdGlvbnNba2V5XVtsb2NhbGVdID0gdHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2VBbmRBcHBba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBnaXZlbiBsb2NhbGUgZnJvbSB0aGUgdHJhbnNsYXRpb24gYXBwLlxuICAgKi9cbiAgYXN5bmMgZ2V0VHJhbnNsYXRpb25zRm9yTG9jYWxlPFQgZXh0ZW5kcyBzdHJpbmc+KGxvY2FsZTogVCk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLmdldEZpbGVGcm9tVHJhbnNsYXRpb25BcHAoYCR7bG9jYWxlfS5qc29uYCk7XG4gICAgICBpZiAodHJhbnNsYXRpb25zW2xvY2FsZV0pIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uc1tsb2NhbGVdO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcuXG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2FsZXMgZnJvbSB0aGUgdHJhbnNsYXRpb24gYXBwLlxuICAgKi9cbiAgYXN5bmMgbG9hZFRyYW5zbGF0aW9uc0ZvckxvY2FsZXMobG9jYWxlczogc3RyaW5nW10pOiBQcm9taXNlPHtcbiAgICBba2V5OiBzdHJpbmddOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgfTtcbiAgfT4ge1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uczoge1xuICAgICAgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICB9ID0ge307XG5cbiAgICBjb25zdCBsb2FkQW5kQWRkTG9jYWxlID0gYXN5bmMgKGxvY2FsZTogc3RyaW5nKSA9PiB7XG4gICAgICB0cmFuc2xhdGlvbnNbbG9jYWxlXSA9IGF3YWl0IHRoaXMuZ2V0VHJhbnNsYXRpb25zRm9yTG9jYWxlKGxvY2FsZSk7XG4gICAgfTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGxvY2FsZXMubWFwKGxvYWRBbmRBZGRMb2NhbGUpKTtcblxuICAgIHJldHVybiB0cmFuc2xhdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgY29tYmluZWQgbGlzdCBvZiB0cmFuc2xhdGlvbnMgZm9yIGFsbCB0aGUgcHJvdmlkZWQgbG9jYWxlcy5cbiAgICogVGhlIGxvY2FsZXMgYXJlIGNvbWJpbmVkIGludG8gYSBzaW5nbGUgb2JqZWN0IHBlciBrZXkgYW5kIGFuIGFycmF5IG9mIHRoZXNlIG9iamVjdHMgaXMgcmV0dXJuZWQuXG4gICAqL1xuICBhc3luYyBnZXRDb21iaW5lZExpc3RPZlRyYW5zbGF0aW9uc0ZvclBlcktleShcbiAgICBsb2NhbGVzOiBzdHJpbmdbXVxuICApOiBQcm9taXNlPHsga2V5OiBzdHJpbmc7IFtsb2NhbGU6IHN0cmluZ106IHN0cmluZyB9W10+IHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLmxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGVzKGxvY2FsZXMpO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uTWFwOiB7IFtrZXk6IHN0cmluZ106IHsgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModHJhbnNsYXRpb25zW2xvY2FsZV0pKSB7XG4gICAgICAgIGxldCB0cmFuc2xhdGlvbnNGb3JLZXkgPSB0cmFuc2xhdGlvbk1hcFtrZXldO1xuICAgICAgICBpZiAoIXRyYW5zbGF0aW9uc0ZvcktleSkge1xuICAgICAgICAgIHRyYW5zbGF0aW9uc0ZvcktleSA9IHt9O1xuICAgICAgICAgIHRyYW5zbGF0aW9uTWFwW2tleV0gPSB0cmFuc2xhdGlvbnNGb3JLZXk7XG4gICAgICAgIH1cblxuICAgICAgICB0cmFuc2xhdGlvbnNGb3JLZXlbbG9jYWxlXSA9IHRyYW5zbGF0aW9uc1tsb2NhbGVdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zbGF0aW9uTWFwKS5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXG4gICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiBPYmplY3QuYXNzaWduKHsga2V5IH0sIHRyYW5zbGF0aW9uTWFwW2tleV0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBmaWxlcyBvZiB0aGUgdHJhbnNsYXRpb24gYXBwbGljYXRpb24gd2l0aCB0aGUgcHJvdmlkZWQgdHJhbnNsYXRpb25zLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVHJhbnNsYXRpb25zKFxuICAgIHRyYW5zbGF0aW9uczogeyBrZXk6IHN0cmluZzsgW2xvY2FsZTogc3RyaW5nXTogc3RyaW5nIH1bXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gbmV3IEFycmF5PHsgcGF0aDogc3RyaW5nOyBjb250ZW50czogRmlsZSB9PigpO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uc1BlckxvY2FsZTogeyBbbG9jYWxlOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRyYW5zbGF0aW9ucykge1xuICAgICAgY29uc3Qga2V5ID0gZW50cnkua2V5O1xuICAgICAgZm9yIChjb25zdCBsb2NhbGUgb2YgT2JqZWN0LmtleXMoZW50cnkpKSB7XG4gICAgICAgIGlmIChsb2NhbGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXSkge1xuICAgICAgICAgIHRyYW5zbGF0aW9uc1BlckxvY2FsZVtsb2NhbGVdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnlbbG9jYWxlXSkge1xuICAgICAgICAgIHRyYW5zbGF0aW9uc1BlckxvY2FsZVtsb2NhbGVdW2tleV0gPSBlbnRyeVtsb2NhbGVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGFuZ3MgPSB0aGlzLmFwcFN0YXRlLnN0YXRlLmxhbmdzIGFzIHN0cmluZ1tdO1xuXG4gICAgZm9yIChjb25zdCBsb2NhbGUgb2YgbGFuZ3MpIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7bG9jYWxlfS5qc29uYDtcbiAgICAgIGZpbGVzVG9VcGxvYWQucHVzaCh7XG4gICAgICAgIHBhdGg6IGZpbGVOYW1lLFxuICAgICAgICBjb250ZW50czogbmV3IEZpbGUoXG4gICAgICAgICAgW0pTT04uc3RyaW5naWZ5KHsgW2xvY2FsZV06IHRyYW5zbGF0aW9uc1BlckxvY2FsZVtsb2NhbGVdIHx8IHt9IH0pXSxcbiAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5nZXRPckNyZWF0ZVRyYW5zbGF0aW9uQXBwKCk7XG4gICAgYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLmJpbmFyeShhcHApLnVwZGF0ZUZpbGVzKGZpbGVzVG9VcGxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2xhdGlvbiBhcHAgZm9yIHRoZSBjdXJyZW50IHRlbmFudC4gSWYgaXQgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIGFzeW5jIGdldE9yQ3JlYXRlVHJhbnNsYXRpb25BcHAoKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5saXN0QnlOYW1lKHRoaXMudHJhbnNsYXRpb25BcHBOYW1lKTtcbiAgICBjb25zdCBvd25BcHAgPSBhcHBzLmZpbmQoXG4gICAgICBhcHAgPT5cbiAgICAgICAgYXBwLmNvbnRleHRQYXRoID09PSB0aGlzLnRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGggJiZcbiAgICAgICAgYXBwLm93bmVyLnRlbmFudC5pZCA9PT0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VGVuYW50LnZhbHVlLm5hbWVcbiAgICApO1xuICAgIGlmIChvd25BcHApIHtcbiAgICAgIHJldHVybiBvd25BcHA7XG4gICAgfVxuXG4gICAgY29uc3QgeyBkYXRhOiBhcHAgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5jcmVhdGUoe1xuICAgICAgbmFtZTogdGhpcy50cmFuc2xhdGlvbkFwcE5hbWUsXG4gICAgICBjb250ZXh0UGF0aDogdGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoLFxuICAgICAga2V5OiBgJHt0aGlzLnRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGh9LWFwcC1rZXlgLFxuICAgICAgdHlwZTogQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICAgIGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuTUFSS0VULFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIGljb246IHtcbiAgICAgICAgICBjbGFzczogJ2xhbmd1YWdlMSdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG5vQXBwU3dpdGNoZXI6IHRydWUsXG4gICAgICBkZXNjcmlwdGlvbjogJ1Byb3ZpZGluZyB1c2VyIGRlZmluZWQgdHJhbnNsYXRpb25zJ1xuICAgIH0pO1xuICAgIGNvbnN0IHppcCA9IGF3YWl0IHRoaXMuemlwLmNyZWF0ZVppcChbXSk7XG5cbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeSB9ID0gYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLmJpbmFyeShhcHApLnVwbG9hZCh6aXAsICd0cmFuc2xhdGlvbnMuemlwJyk7XG4gICAgY29uc3QgeyBkYXRhOiB1cGRhdGVkQXBwIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UudXBkYXRlKHtcbiAgICAgIGlkOiBhcHAuaWQsXG4gICAgICBhY3RpdmVWZXJzaW9uSWQ6IGJpbmFyeS5pZCBhcyBzdHJpbmdcbiAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlZEFwcDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUZyb21UcmFuc2xhdGlvbkFwcChmaWxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGaWxlRnJvbVBhdGgoYC9hcHBzL3B1YmxpYy8ke3RoaXMudHJhbnNsYXRpb25BcHBDb250ZXh0UGF0aH0vJHtmaWxlfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRGaWxlRnJvbVBhdGgocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmluYWxQYXRoID0gYCR7cGF0aH0/bm9jYWNoZT0ke0RhdGUubm93KCl9YDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbmFsUGF0aCk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGZpbGUgZnJvbSAke3BhdGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgfVxufVxuIl19
178
+ }], ctorParameters: () => [{ type: i1.ApplicationService }, { type: i2.AppStateService }, { type: i2.ZipService }, { type: i1.FetchClient }] });
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tc3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9kYXRhL3RyYW5zbGF0aW9uLXN0b3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsV0FBVyxFQUVaLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7OztBQVVqQyxNQUFNLE9BQU8sdUJBQXVCO0lBSWxDLFlBQ1UsVUFBOEIsRUFDOUIsUUFBeUIsRUFDekIsR0FBZSxFQUNmLFdBQXdCO1FBSHhCLGVBQVUsR0FBVixVQUFVLENBQW9CO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQVk7UUFDZixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVBmLHVCQUFrQixHQUFHLDJCQUEyQixDQUFDO1FBQ2pELDhCQUF5QixHQUFHLDJCQUEyQixDQUFDO0lBT3hFLENBQUM7SUFFSjs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxPQUFpQjtRQUM5QyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDdEQsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQzlDLElBQUksRUFBRSxRQUFRO1lBQ2QsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FDN0IsVUFBVTthQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUM7YUFDN0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUMvQixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQW9ELEVBQUUsQ0FBQztRQUN6RSxLQUFLLE1BQU0sV0FBVyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDN0MsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDO29CQUNILE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUM5RCxTQUFTLFdBQVcsSUFBSSxNQUFNLE9BQU8sQ0FDdEMsQ0FBQztvQkFDRixNQUFNLG1CQUFtQixHQUFHLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsRSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO3dCQUNuRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQ3ZCLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ3pCLENBQUM7d0JBQ0QsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN2RCxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxTQUFTO2dCQUNYLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FBbUIsTUFBUztRQUN4RCxJQUFJLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUM7WUFDNUUsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsY0FBYztRQUNoQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsMEJBQTBCLENBQUMsT0FBaUI7UUFLaEQsTUFBTSxZQUFZLEdBRWQsRUFBRSxDQUFDO1FBRVAsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7WUFDaEQsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQztRQUVGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUVqRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNDQUFzQyxDQUMxQyxPQUFpQjtRQUVqQixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRSxNQUFNLGNBQWMsR0FBb0QsRUFBRSxDQUFDO1FBRTNFLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQy9DLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3hCLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztvQkFDeEIsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO2dCQUMzQyxDQUFDO2dCQUVELGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FDdEIsWUFBeUQ7UUFFekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQW9DLENBQUM7UUFDcEUsTUFBTSxxQkFBcUIsR0FBb0QsRUFBRSxDQUFDO1FBQ2xGLEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUN0QixLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQ3JCLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDbkMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNyQyxDQUFDO2dCQUVELElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ2xCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDckQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBaUIsQ0FBQztRQUVwRCxLQUFLLE1BQU0sTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sUUFBUSxHQUFHLEdBQUcsTUFBTSxPQUFPLENBQUM7WUFDbEMsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDakIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsUUFBUSxFQUFFLElBQUksSUFBSSxDQUNoQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFDbkUsUUFBUSxDQUNUO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkQsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHlCQUF5QjtRQUM3QixNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLEVBQUUsQ0FDSixHQUFHLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyx5QkFBeUI7WUFDbEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ2pFLENBQUM7UUFDRixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVELE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUNqRCxJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUMzQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMseUJBQXlCLFVBQVU7WUFDaEQsSUFBSSxFQUFFLGVBQWUsQ0FBQyxNQUFNO1lBQzVCLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1lBQzVDLE1BQU0sRUFBRTtnQkFDTixJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLFdBQVc7aUJBQ25CO2FBQ0Y7WUFDRCxhQUFhLEVBQUUsSUFBSTtZQUNuQixXQUFXLEVBQUUscUNBQXFDO1NBQ25ELENBQUMsQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUMzRixNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDeEQsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1YsZUFBZSxFQUFFLE1BQU0sQ0FBQyxFQUFZO1NBQ3JDLENBQUMsQ0FBQztRQUNILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxLQUFLLENBQUMseUJBQXlCLENBQUMsSUFBWTtRQUNsRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLElBQUksQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDeEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFFbEQsK0dBQStHO1FBQy9HLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7K0dBOU1VLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIEZldGNoQ2xpZW50LFxuICBJQXBwbGljYXRpb25cbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlLCBaaXBTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyB1bmlxIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xhdGlvbkxvY2FsZSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxvY2FsZTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvblN0b3JlU2VydmljZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkFwcE5hbWUgPSAnVXNlciBkZWZpbmVkIHRyYW5zbGF0aW9ucyc7XG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoID0gJ3VzZXItZGVmaW5lZC10cmFuc2xhdGlvbnMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHppcDogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIGZldGNoQ2xpZW50OiBGZXRjaENsaWVudFxuICApIHt9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGdpdmVuIGxvY2FsZXMgZnJvbSBhbGwgdGhlIGhvc3RlZCBhcHBzIGF2YWlsYWJsZSBvbiB0aGUgdGVuYW50LlxuICAgKi9cbiAgYXN5bmMgZ2V0QXZhaWxhYmxlVHJhbnNsYXRpb25zKGxvY2FsZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgeyBkYXRhOiBob3N0ZWRBcHBzIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UubGlzdCh7XG4gICAgICB0ZW5hbnQ6IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lLFxuICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH0pO1xuXG4gICAgY29uc3QgdW5pcXVlQ29udGV4dFBhdGhzID0gdW5pcShcbiAgICAgIGhvc3RlZEFwcHNcbiAgICAgICAgLmZpbHRlcihhcHAgPT4gYXBwLmNvbnRleHRQYXRoICYmIGFwcC5tYW5pZmVzdD8ud2ViU2RrVmVyc2lvbilcbiAgICAgICAgLm1hcChhcHAgPT4gYXBwLmNvbnRleHRQYXRoKVxuICAgICk7XG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHsgW2tleTogc3RyaW5nXTogeyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XG4gICAgZm9yIChjb25zdCBjb250ZXh0UGF0aCBvZiB1bmlxdWVDb250ZXh0UGF0aHMpIHtcbiAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxvY2FsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnNGb3JMYW5ndWFnZUFuZEFwcCA9IGF3YWl0IHRoaXMuZ2V0RmlsZUZyb21QYXRoKFxuICAgICAgICAgICAgYC9hcHBzLyR7Y29udGV4dFBhdGh9LyR7bG9jYWxlfS5qc29uYFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zRm9yTGFuZyA9IHRyYW5zbGF0aW9uc0Zvckxhbmd1YWdlQW5kQXBwW2xvY2FsZV07XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModHJhbnNsYXRpb25zRm9yTGFuZykpIHtcbiAgICAgICAgICAgIGlmICghdHJhbnNsYXRpb25zW2tleV0pIHtcbiAgICAgICAgICAgICAgdHJhbnNsYXRpb25zW2tleV0gPSB7fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uc1trZXldW2xvY2FsZV0gPSB0cmFuc2xhdGlvbnNGb3JMYW5nW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNsYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdHJhbnNsYXRpb25zIGZvciB0aGUgZ2l2ZW4gbG9jYWxlIGZyb20gdGhlIHRyYW5zbGF0aW9uIGFwcC5cbiAgICovXG4gIGFzeW5jIGdldFRyYW5zbGF0aW9uc0ZvckxvY2FsZTxUIGV4dGVuZHMgc3RyaW5nPihsb2NhbGU6IFQpOiBQcm9taXNlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy5nZXRGaWxlRnJvbVRyYW5zbGF0aW9uQXBwKGAke2xvY2FsZX0uanNvbmApO1xuICAgICAgaWYgKHRyYW5zbGF0aW9uc1tsb2NhbGVdKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGlvbnNbbG9jYWxlXTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nLlxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBnaXZlbiBsb2NhbGVzIGZyb20gdGhlIHRyYW5zbGF0aW9uIGFwcC5cbiAgICovXG4gIGFzeW5jIGxvYWRUcmFuc2xhdGlvbnNGb3JMb2NhbGVzKGxvY2FsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx7XG4gICAgW2tleTogc3RyaW5nXToge1xuICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gIH0+IHtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgfSA9IHt9O1xuXG4gICAgY29uc3QgbG9hZEFuZEFkZExvY2FsZSA9IGFzeW5jIChsb2NhbGU6IHN0cmluZykgPT4ge1xuICAgICAgdHJhbnNsYXRpb25zW2xvY2FsZV0gPSBhd2FpdCB0aGlzLmdldFRyYW5zbGF0aW9uc0ZvckxvY2FsZShsb2NhbGUpO1xuICAgIH07XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChsb2NhbGVzLm1hcChsb2FkQW5kQWRkTG9jYWxlKSk7XG5cbiAgICByZXR1cm4gdHJhbnNsYXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGNvbWJpbmVkIGxpc3Qgb2YgdHJhbnNsYXRpb25zIGZvciBhbGwgdGhlIHByb3ZpZGVkIGxvY2FsZXMuXG4gICAqIFRoZSBsb2NhbGVzIGFyZSBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIG9iamVjdCBwZXIga2V5IGFuZCBhbiBhcnJheSBvZiB0aGVzZSBvYmplY3RzIGlzIHJldHVybmVkLlxuICAgKi9cbiAgYXN5bmMgZ2V0Q29tYmluZWRMaXN0T2ZUcmFuc2xhdGlvbnNGb3JQZXJLZXkoXG4gICAgbG9jYWxlczogc3RyaW5nW11cbiAgKTogUHJvbWlzZTx7IGtleTogc3RyaW5nOyBbbG9jYWxlOiBzdHJpbmddOiBzdHJpbmcgfVtdPiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy5sb2FkVHJhbnNsYXRpb25zRm9yTG9jYWxlcyhsb2NhbGVzKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbk1hcDogeyBba2V5OiBzdHJpbmddOiB7IFtsb2NhbGU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcblxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9uc1tsb2NhbGVdKSkge1xuICAgICAgICBsZXQgdHJhbnNsYXRpb25zRm9yS2V5ID0gdHJhbnNsYXRpb25NYXBba2V5XTtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGlvbnNGb3JLZXkpIHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnNGb3JLZXkgPSB7fTtcbiAgICAgICAgICB0cmFuc2xhdGlvbk1hcFtrZXldID0gdHJhbnNsYXRpb25zRm9yS2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNsYXRpb25zRm9yS2V5W2xvY2FsZV0gPSB0cmFuc2xhdGlvbnNbbG9jYWxlXVtrZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbk1hcCkuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuICAgIHJldHVybiBrZXlzLm1hcChrZXkgPT4gT2JqZWN0LmFzc2lnbih7IGtleSB9LCB0cmFuc2xhdGlvbk1hcFtrZXldKSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZmlsZXMgb2YgdGhlIHRyYW5zbGF0aW9uIGFwcGxpY2F0aW9uIHdpdGggdGhlIHByb3ZpZGVkIHRyYW5zbGF0aW9ucy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVRyYW5zbGF0aW9ucyhcbiAgICB0cmFuc2xhdGlvbnM6IHsga2V5OiBzdHJpbmc7IFtsb2NhbGU6IHN0cmluZ106IHN0cmluZyB9W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IG5ldyBBcnJheTx7IHBhdGg6IHN0cmluZzsgY29udGVudHM6IEZpbGUgfT4oKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbnNQZXJMb2NhbGU6IHsgW2xvY2FsZTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge307XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0cmFuc2xhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGtleSA9IGVudHJ5LmtleTtcbiAgICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIE9iamVjdC5rZXlzKGVudHJ5KSkge1xuICAgICAgICBpZiAobG9jYWxlID09PSAna2V5Jykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHJhbnNsYXRpb25zUGVyTG9jYWxlW2xvY2FsZV0pIHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5W2xvY2FsZV0pIHtcbiAgICAgICAgICB0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXVtrZXldID0gZW50cnlbbG9jYWxlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxhbmdzID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZS5sYW5ncyBhcyBzdHJpbmdbXTtcblxuICAgIGZvciAoY29uc3QgbG9jYWxlIG9mIGxhbmdzKSB7XG4gICAgICBjb25zdCBmaWxlTmFtZSA9IGAke2xvY2FsZX0uanNvbmA7XG4gICAgICBmaWxlc1RvVXBsb2FkLnB1c2goe1xuICAgICAgICBwYXRoOiBmaWxlTmFtZSxcbiAgICAgICAgY29udGVudHM6IG5ldyBGaWxlKFxuICAgICAgICAgIFtKU09OLnN0cmluZ2lmeSh7IFtsb2NhbGVdOiB0cmFuc2xhdGlvbnNQZXJMb2NhbGVbbG9jYWxlXSB8fCB7fSB9KV0sXG4gICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZ2V0T3JDcmVhdGVUcmFuc2xhdGlvbkFwcCgpO1xuICAgIGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGRhdGVGaWxlcyhmaWxlc1RvVXBsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNsYXRpb24gYXBwIGZvciB0aGUgY3VycmVudCB0ZW5hbnQuIElmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBhc3luYyBnZXRPckNyZWF0ZVRyYW5zbGF0aW9uQXBwKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UubGlzdEJ5TmFtZSh0aGlzLnRyYW5zbGF0aW9uQXBwTmFtZSk7XG4gICAgY29uc3Qgb3duQXBwID0gYXBwcy5maW5kKFxuICAgICAgYXBwID0+XG4gICAgICAgIGFwcC5jb250ZXh0UGF0aCA9PT0gdGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRoICYmXG4gICAgICAgIGFwcC5vd25lci50ZW5hbnQuaWQgPT09IHRoaXMuYXBwU3RhdGUuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lXG4gICAgKTtcbiAgICBpZiAob3duQXBwKSB7XG4gICAgICByZXR1cm4gb3duQXBwO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGF0YTogYXBwIH0gPSBhd2FpdCB0aGlzLmFwcFNlcnZpY2UuY3JlYXRlKHtcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRpb25BcHBOYW1lLFxuICAgICAgY29udGV4dFBhdGg6IHRoaXMudHJhbnNsYXRpb25BcHBDb250ZXh0UGF0aCxcbiAgICAgIGtleTogYCR7dGhpcy50cmFuc2xhdGlvbkFwcENvbnRleHRQYXRofS1hcHAta2V5YCxcbiAgICAgIHR5cGU6IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5Lk1BUktFVCxcbiAgICAgIGNvbmZpZzoge1xuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgY2xhc3M6ICdsYW5ndWFnZTEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBub0FwcFN3aXRjaGVyOiB0cnVlLFxuICAgICAgZGVzY3JpcHRpb246ICdQcm92aWRpbmcgdXNlciBkZWZpbmVkIHRyYW5zbGF0aW9ucydcbiAgICB9KTtcbiAgICBjb25zdCB6aXAgPSBhd2FpdCB0aGlzLnppcC5jcmVhdGVaaXAoW10pO1xuXG4gICAgY29uc3QgeyBkYXRhOiBiaW5hcnkgfSA9IGF3YWl0IHRoaXMuYXBwU2VydmljZS5iaW5hcnkoYXBwKS51cGxvYWQoemlwLCAndHJhbnNsYXRpb25zLnppcCcpO1xuICAgIGNvbnN0IHsgZGF0YTogdXBkYXRlZEFwcCB9ID0gYXdhaXQgdGhpcy5hcHBTZXJ2aWNlLnVwZGF0ZSh7XG4gICAgICBpZDogYXBwLmlkLFxuICAgICAgYWN0aXZlVmVyc2lvbklkOiBiaW5hcnkuaWQgYXMgc3RyaW5nXG4gICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWRBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEZpbGVGcm9tVHJhbnNsYXRpb25BcHAoZmlsZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RmlsZUZyb21QYXRoKGAvYXBwcy9wdWJsaWMvJHt0aGlzLnRyYW5zbGF0aW9uQXBwQ29udGV4dFBhdGh9LyR7ZmlsZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RmlsZUZyb21QYXRoKHBhdGg6IHN0cmluZykge1xuICAgIGNvbnN0IGZpbmFsUGF0aCA9IGAke3BhdGh9P25vY2FjaGU9JHtEYXRlLm5vdygpfWA7XG5cbiAgICAvLyB1c2luZyBmZXRjaCBjbGllbnQgaW5zdGVhZCBvZiBmZXRjaCBkaXJlY3RseSBoZXJlIHRvIGVuc3VyZSBsb2FkaW5nIGluZGljYXRvciBpcyBzaG93biBkdXJpbmcgdGhlc2UgcmVxdWVzdHNcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hDbGllbnQuZmV0Y2goZmluYWxQYXRoKTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZmlsZSBmcm9tICR7cGF0aH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICB9XG59XG4iXX0=
@@ -1,10 +1,27 @@
1
- import { hookNavigator, hookRoute } from '@c8y/ngx-components';
1
+ import { hookNavigator, hookRoute, hookTab } from '@c8y/ngx-components';
2
2
  import { TranslationEditorNaviagtorFactoryService } from './translation-editor-naviagtor-factory.service';
3
+ import { translationEditorAdvancedPath, translationEditorBasePath, translationEditorBasicPath } from './translation-editor.constants';
4
+ import { TranslationEditorTabFactoryService } from './translation-editor-tab-factory.service';
3
5
  export const tranlationEditorProviders = [
4
6
  hookRoute({
5
- path: 'localization',
6
- loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)
7
+ path: translationEditorBasePath,
8
+ children: [
9
+ {
10
+ path: '',
11
+ pathMatch: 'full',
12
+ redirectTo: translationEditorBasicPath
13
+ },
14
+ {
15
+ path: translationEditorBasicPath,
16
+ loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.TranslationEditorComponent)
17
+ },
18
+ {
19
+ path: translationEditorAdvancedPath,
20
+ loadComponent: () => import('@c8y/ngx-components/translation-editor/lazy').then(m => m.AdvancedTranslationEditorComponent)
21
+ }
22
+ ]
7
23
  }),
8
- hookNavigator(TranslationEditorNaviagtorFactoryService)
24
+ hookNavigator(TranslationEditorNaviagtorFactoryService),
25
+ hookTab(TranslationEditorTabFactoryService)
9
26
  ];
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUxRyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxTQUFTLENBQUM7UUFDUixJQUFJLEVBQUUsY0FBYztRQUNwQixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQ2xCLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztLQUNoRyxDQUFDO0lBQ0YsYUFBYSxDQUFDLHdDQUF3QyxDQUFDO0NBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob29rTmF2aWdhdG9yLCBob29rUm91dGUgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uRWRpdG9yTmF2aWFndG9yRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLWVkaXRvci1uYXZpYWd0b3ItZmFjdG9yeS5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IHRyYW5sYXRpb25FZGl0b3JQcm92aWRlcnMgPSBbXG4gIGhvb2tSb3V0ZSh7XG4gICAgcGF0aDogJ2xvY2FsaXphdGlvbicsXG4gICAgbG9hZENvbXBvbmVudDogKCkgPT5cbiAgICAgIGltcG9ydCgnQGM4eS9uZ3gtY29tcG9uZW50cy90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eScpLnRoZW4obSA9PiBtLlRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50KVxuICB9KSxcbiAgaG9va05hdmlnYXRvcihUcmFuc2xhdGlvbkVkaXRvck5hdmlhZ3RvckZhY3RvcnlTZXJ2aWNlKVxuXTtcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUcsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzNCLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUc7SUFDdkMsU0FBUyxDQUFDO1FBQ1IsSUFBSSxFQUFFLHlCQUF5QjtRQUMvQixRQUFRLEVBQUU7WUFDUjtnQkFDRSxJQUFJLEVBQUUsRUFBRTtnQkFDUixTQUFTLEVBQUUsTUFBTTtnQkFDakIsVUFBVSxFQUFFLDBCQUEwQjthQUN2QztZQUNEO2dCQUNFLElBQUksRUFBRSwwQkFBMEI7Z0JBQ2hDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FDbEIsTUFBTSxDQUFDLDZDQUE2QyxDQUFDLENBQUMsSUFBSSxDQUN4RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FDbEM7YUFDSjtZQUNEO2dCQUNFLElBQUksRUFBRSw2QkFBNkI7Z0JBQ25DLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FDbEIsTUFBTSxDQUFDLDZDQUE2QyxDQUFDLENBQUMsSUFBSSxDQUN4RCxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FDMUM7YUFDSjtTQUNGO0tBQ0YsQ0FBQztJQUNGLGFBQWEsQ0FBQyx3Q0FBd0MsQ0FBQztJQUN2RCxPQUFPLENBQUMsa0NBQWtDLENBQUM7Q0FDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhvb2tOYXZpZ2F0b3IsIGhvb2tSb3V0ZSwgaG9va1RhYiB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25FZGl0b3JOYXZpYWd0b3JGYWN0b3J5U2VydmljZSB9IGZyb20gJy4vdHJhbnNsYXRpb24tZWRpdG9yLW5hdmlhZ3Rvci1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgdHJhbnNsYXRpb25FZGl0b3JBZHZhbmNlZFBhdGgsXG4gIHRyYW5zbGF0aW9uRWRpdG9yQmFzZVBhdGgsXG4gIHRyYW5zbGF0aW9uRWRpdG9yQmFzaWNQYXRoXG59IGZyb20gJy4vdHJhbnNsYXRpb24tZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkVkaXRvclRhYkZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi1lZGl0b3ItdGFiLWZhY3Rvcnkuc2VydmljZSc7XG5cbmV4cG9ydCBjb25zdCB0cmFubGF0aW9uRWRpdG9yUHJvdmlkZXJzID0gW1xuICBob29rUm91dGUoe1xuICAgIHBhdGg6IHRyYW5zbGF0aW9uRWRpdG9yQmFzZVBhdGgsXG4gICAgY2hpbGRyZW46IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJycsXG4gICAgICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxuICAgICAgICByZWRpcmVjdFRvOiB0cmFuc2xhdGlvbkVkaXRvckJhc2ljUGF0aFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdHJhbnNsYXRpb25FZGl0b3JCYXNpY1BhdGgsXG4gICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICAgICAgaW1wb3J0KCdAYzh5L25neC1jb21wb25lbnRzL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5JykudGhlbihcbiAgICAgICAgICAgIG0gPT4gbS5UcmFuc2xhdGlvbkVkaXRvckNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHRyYW5zbGF0aW9uRWRpdG9yQWR2YW5jZWRQYXRoLFxuICAgICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PlxuICAgICAgICAgIGltcG9ydCgnQGM4eS9uZ3gtY29tcG9uZW50cy90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eScpLnRoZW4oXG4gICAgICAgICAgICBtID0+IG0uQWR2YW5jZWRUcmFuc2xhdGlvbkVkaXRvckNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIH1cbiAgICBdXG4gIH0pLFxuICBob29rTmF2aWdhdG9yKFRyYW5zbGF0aW9uRWRpdG9yTmF2aWFndG9yRmFjdG9yeVNlcnZpY2UpLFxuICBob29rVGFiKFRyYW5zbGF0aW9uRWRpdG9yVGFiRmFjdG9yeVNlcnZpY2UpXG5dO1xuIl19
@@ -0,0 +1,136 @@
1
+ import { NgIf } from '@angular/common';
2
+ import { Component, signal, ViewChild, computed } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { ActionBarItemComponent, AlertService, AppStateService, IconDirective, LoadingComponent, TitleComponent } from '@c8y/ngx-components';
5
+ import { EditorComponent, MonacoEditorMarkerValidatorDirective } from '@c8y/ngx-components/editor';
6
+ import { TranslationStoreService } from '@c8y/ngx-components/translation-editor/data';
7
+ import { gettext } from '@c8y/ngx-components/gettext';
8
+ import { TranslateService } from '@ngx-translate/core';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@c8y/ngx-components";
11
+ import * as i2 from "@c8y/ngx-components/translation-editor/data";
12
+ import * as i3 from "@ngx-translate/core";
13
+ import * as i4 from "@angular/forms";
14
+ export class AdvancedTranslationEditorComponent {
15
+ constructor(appState, translationStore, alert, translation) {
16
+ this.appState = appState;
17
+ this.translationStore = translationStore;
18
+ this.alert = alert;
19
+ this.translation = translation;
20
+ this.valueString = signal('');
21
+ this.editorOptions = {
22
+ language: 'json'
23
+ };
24
+ this.isLoading = signal(false);
25
+ this.isValidJSON = computed(() => {
26
+ const data = this.valueString();
27
+ try {
28
+ JSON.parse(data);
29
+ return true;
30
+ }
31
+ catch (e) {
32
+ return false;
33
+ }
34
+ });
35
+ this.availableLangs = [];
36
+ this.availableLangs = this.appState.state.langs.sort((a, b) => a.localeCompare(b));
37
+ this.refresh();
38
+ }
39
+ onValueChange(data) {
40
+ this.valueString.set(data);
41
+ }
42
+ onEditorInit(_data) {
43
+ this.editorComponent.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({
44
+ validate: true,
45
+ schemas: [{ schema: this.JSONSchema, fileMatch: ['*'], uri: 'translation' }],
46
+ enableSchemaRequest: false,
47
+ allowComments: false
48
+ });
49
+ }
50
+ async refresh() {
51
+ this.isLoading.set(true);
52
+ const translationProperties = this.availableLangs.reduceRight((acc, lang) => {
53
+ acc[lang] = {
54
+ type: 'string',
55
+ description: this.translation.instant(gettext('Translation for "{{ languageCode }}" language.'), { languageCode: lang })
56
+ };
57
+ return acc;
58
+ }, {
59
+ key: {
60
+ type: 'string',
61
+ description: this.translation.instant(gettext('The key to be translated.'))
62
+ }
63
+ });
64
+ this.JSONSchema = {
65
+ $schema: 'http://json-schema.org/draft-04/schema#',
66
+ type: 'array',
67
+ items: {
68
+ type: 'object',
69
+ properties: translationProperties,
70
+ required: ['key'],
71
+ minProperties: 2
72
+ }
73
+ };
74
+ const translations = await this.translationStore.getCombinedListOfTranslationsForPerKey(this.availableLangs);
75
+ this.valueString.set(JSON.stringify(translations, undefined, 2));
76
+ this.isLoading.set(false);
77
+ }
78
+ async importTranslationKeys() {
79
+ try {
80
+ this.alert.info(gettext('Importing translation from available Web SDK based applications. This may take a while...'));
81
+ // since we are only interested in the keys, we only need to retrieve the translations for one (well supported) language
82
+ // we assume that the keys are the same for all other languages, otherwise we would need to perform a lot more requests.
83
+ const data = await this.translationStore.getAvailableTranslations(['de']);
84
+ const valueString = this.valueString();
85
+ const values = JSON.parse(valueString);
86
+ const previousNumberOfEntries = values.length;
87
+ const retrievedKeys = Object.keys(data);
88
+ for (const key of retrievedKeys) {
89
+ const foundKey = values.find(value => value.key === key);
90
+ if (!foundKey) {
91
+ values.push({ key });
92
+ }
93
+ }
94
+ const newpreviousNumberOfEntries = values.length;
95
+ this.valueString.set(JSON.stringify(values, undefined, 2));
96
+ this.alert.success(this.translation.instant(gettext('Retrieved {{ numberOfRetrievedKeys }} keys from available applications. {{ numberOfNewKeys }} new translation keys were added.'), {
97
+ numberOfRetrievedKeys: retrievedKeys.length,
98
+ numberOfNewKeys: newpreviousNumberOfEntries - previousNumberOfEntries
99
+ }));
100
+ }
101
+ catch (e) {
102
+ this.alert.danger(gettext('Failed to import translation keys'));
103
+ this.alert.addServerFailure(e);
104
+ }
105
+ }
106
+ async saveTranslations() {
107
+ try {
108
+ await this.translationStore.updateTranslations(JSON.parse(this.valueString()));
109
+ await this.refresh();
110
+ this.alert.success(gettext('Translations saved'));
111
+ }
112
+ catch (e) {
113
+ this.alert.danger(gettext('Failed to save translations'));
114
+ this.alert.addServerFailure(e);
115
+ }
116
+ }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdvancedTranslationEditorComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslationStoreService }, { token: i1.AlertService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AdvancedTranslationEditorComponent, isStandalone: true, selector: "c8y-advanced-translation-editor", viewQueries: [{ propertyName: "editorComponent", first: true, predicate: EditorComponent, descendants: true }], 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 [disabled]=\"!isValidJSON()\"\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-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"!isValidJSON()\"\n (click)=\"importTranslationKeys()\"\n data-cy=\"c8y-translation-editor--import-translation-keys\"\n >\n <i [c8yIcon]=\"'import'\"></i>\n <span translate>Import translation keys from Apps</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"card card--fullpage content-fullpage\">\n <c8y-editor\n class=\"flex-grow\"\n [editorOptions]=\"editorOptions\"\n [ngModel]=\"valueString()\"\n (ngModelChange)=\"onValueChange($event)\"\n (editorInit)=\"onEditorInit($event)\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>", dependencies: [{ kind: "component", type: EditorComponent, selector: "c8y-editor", inputs: ["editorOptions"], outputs: ["editorInit"] }, { kind: "directive", type: MonacoEditorMarkerValidatorDirective, selector: "c8y-editor [monacoEditorMarkerValidator]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }] }); }
119
+ }
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AdvancedTranslationEditorComponent, decorators: [{
121
+ type: Component,
122
+ args: [{ selector: 'c8y-advanced-translation-editor', standalone: true, imports: [
123
+ EditorComponent,
124
+ MonacoEditorMarkerValidatorDirective,
125
+ FormsModule,
126
+ TitleComponent,
127
+ LoadingComponent,
128
+ NgIf,
129
+ ActionBarItemComponent,
130
+ IconDirective
131
+ ], 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 [disabled]=\"!isValidJSON()\"\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-action-bar-item placement=\"right\">\n <button\n class=\"btn btn-link\"\n [disabled]=\"!isValidJSON()\"\n (click)=\"importTranslationKeys()\"\n data-cy=\"c8y-translation-editor--import-translation-keys\"\n >\n <i [c8yIcon]=\"'import'\"></i>\n <span translate>Import translation keys from Apps</span>\n </button>\n </c8y-action-bar-item>\n\n <div class=\"card card--fullpage content-fullpage\">\n <c8y-editor\n class=\"flex-grow\"\n [editorOptions]=\"editorOptions\"\n [ngModel]=\"valueString()\"\n (ngModelChange)=\"onValueChange($event)\"\n (editorInit)=\"onEditorInit($event)\"\n monacoEditorMarkerValidator\n ></c8y-editor>\n </div>\n</ng-container>\n\n<ng-template #loading>\n <c8y-loading></c8y-loading>\n</ng-template>" }]
132
+ }], ctorParameters: () => [{ type: i1.AppStateService }, { type: i2.TranslationStoreService }, { type: i1.AlertService }, { type: i3.TranslateService }], propDecorators: { editorComponent: [{
133
+ type: ViewChild,
134
+ args: [EditorComponent]
135
+ }] } });
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L2FkdmFuY2VkLXRyYW5zbGF0aW9uLWVkaXRvci9hZHZhbmNlZC10cmFuc2xhdGlvbi1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYWR2YW5jZWQtdHJhbnNsYXRpb24tZWRpdG9yL2FkdmFuY2VkLXRyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUNmLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNmLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBaUJ2RCxNQUFNLE9BQU8sa0NBQWtDO0lBbUI3QyxZQUNVLFFBQXlCLEVBQ3pCLGdCQUF5QyxFQUN6QyxLQUFtQixFQUNuQixXQUE2QjtRQUg3QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixxQkFB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bEMsZUFBZSxnRENoRDVCLDR1Q0F5Q2MsNENEbkJWLGVBQWUsMkdBQ2Ysb0NBQW9DLG9GQUNwQyxXQUFXLCtWQUNYLGNBQWMsbUZBQ2QsZ0JBQWdCLG1HQUNoQixJQUFJLDZGQUNKLHNCQUFzQiwwSkFDdEIsYUFBYTs7NEZBR0osa0NBQWtDO2tCQWY5QyxTQUFTOytCQUNFLGlDQUFpQyxjQUUvQixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixvQ0FBb0M7d0JBQ3BDLFdBQVc7d0JBQ1gsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLElBQUk7d0JBQ0osc0JBQXNCO3dCQUN0QixhQUFhO3FCQUNkO29MQWtCMkIsZUFBZTtzQkFBMUMsU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIHNpZ25hbCwgVmlld0NoaWxkLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICBBbGVydFNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTG9hZGluZ0NvbXBvbmVudCxcbiAgVGl0bGVDb21wb25lbnRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBFZGl0b3JDb21wb25lbnQsIE1vbmFjb0VkaXRvck1hcmtlclZhbGlkYXRvckRpcmVjdGl2ZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWRpdG9yJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU3RvcmVTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy90cmFuc2xhdGlvbi1lZGl0b3IvZGF0YSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9nZXR0ZXh0JztcbmltcG9ydCB0eXBlICogYXMgTW9uYWNvIGZyb20gJ21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWR2YW5jZWQtdHJhbnNsYXRpb24tZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBFZGl0b3JDb21wb25lbnQsXG4gICAgTW9uYWNvRWRpdG9yTWFya2VyVmFsaWRhdG9yRGlyZWN0aXZlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgTmdJZixcbiAgICBBY3Rpb25CYXJJdGVtQ29tcG9uZW50LFxuICAgIEljb25EaXJlY3RpdmVcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRyYW5zbGF0aW9uRWRpdG9yQ29tcG9uZW50IHtcbiAgdmFsdWVTdHJpbmcgPSBzaWduYWwoJycpO1xuICBlZGl0b3JPcHRpb25zOiBFZGl0b3JDb21wb25lbnRbJ2VkaXRvck9wdGlvbnMnXSA9IHtcbiAgICBsYW5ndWFnZTogJ2pzb24nXG4gIH07XG4gIGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIGlzVmFsaWRKU09OID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnZhbHVlU3RyaW5nKCk7XG4gICAgdHJ5IHtcbiAgICAgIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbiAgSlNPTlNjaGVtYTogYW55O1xuICBAVmlld0NoaWxkKEVkaXRvckNvbXBvbmVudCkgZWRpdG9yQ29tcG9uZW50ITogRWRpdG9yQ29tcG9uZW50O1xuICBhdmFpbGFibGVMYW5nczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblN0b3JlOiBUcmFuc2xhdGlvblN0b3JlU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvbjogVHJhbnNsYXRlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmF2YWlsYWJsZUxhbmdzID0gKHRoaXMuYXBwU3RhdGUuc3RhdGUubGFuZ3MgYXMgc3RyaW5nW10pLnNvcnQoKGEsIGIpID0+XG4gICAgICBhLmxvY2FsZUNvbXBhcmUoYilcbiAgICApO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgb25WYWx1ZUNoYW5nZShkYXRhOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlU3RyaW5nLnNldChkYXRhKTtcbiAgfVxuXG4gIG9uRWRpdG9ySW5pdChfZGF0YTogTW9uYWNvLmVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3IpIHtcbiAgICB0aGlzLmVkaXRvckNvbXBvbmVudC5tb25hY28ubGFuZ3VhZ2VzLmpzb24uanNvbkRlZmF1bHRzLnNldERpYWdub3N0aWNzT3B0aW9ucyh7XG4gICAgICB2YWxpZGF0ZTogdHJ1ZSxcbiAgICAgIHNjaGVtYXM6IFt7IHNjaGVtYTogdGhpcy5KU09OU2NoZW1hLCBmaWxlTWF0Y2g6IFsnKiddLCB1cmk6ICd0cmFuc2xhdGlvbicgfV0sXG4gICAgICBlbmFibGVTY2hlbWFSZXF1ZXN0OiBmYWxzZSxcbiAgICAgIGFsbG93Q29tbWVudHM6IGZhbHNlXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcblxuICAgIGNvbnN0IHRyYW5zbGF0aW9uUHJvcGVydGllczogeyBrZXk6IHsgdHlwZTogJ3N0cmluZycgfTsgW2tleTogc3RyaW5nXTogeyB0eXBlOiAnc3RyaW5nJyB9IH0gPVxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ncy5yZWR1Y2VSaWdodChcbiAgICAgICAgKGFjYywgbGFuZykgPT4ge1xuICAgICAgICAgIGFjY1tsYW5nXSA9IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChcbiAgICAgICAgICAgICAgZ2V0dGV4dCgnVHJhbnNsYXRpb24gZm9yIFwie3sgbGFuZ3VhZ2VDb2RlIH19XCIgbGFuZ3VhZ2UuJyksXG4gICAgICAgICAgICAgIHsgbGFuZ3VhZ2VDb2RlOiBsYW5nIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMudHJhbnNsYXRpb24uaW5zdGFudChnZXR0ZXh0KCdUaGUga2V5IHRvIGJlIHRyYW5zbGF0ZWQuJykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICAgIHRoaXMuSlNPTlNjaGVtYSA9IHtcbiAgICAgICRzY2hlbWE6ICdodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMnLFxuXG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHRyYW5zbGF0aW9uUHJvcGVydGllcyxcbiAgICAgICAgcmVxdWlyZWQ6IFsna2V5J10sXG4gICAgICAgIG1pblByb3BlcnRpZXM6IDJcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblN0b3JlLmdldENvbWJpbmVkTGlzdE9mVHJhbnNsYXRpb25zRm9yUGVyS2V5KFxuICAgICAgdGhpcy5hdmFpbGFibGVMYW5nc1xuICAgICk7XG5cbiAgICB0aGlzLnZhbHVlU3RyaW5nLnNldChKU09OLnN0cmluZ2lmeSh0cmFuc2xhdGlvbnMsIHVuZGVmaW5lZCwgMikpO1xuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydFRyYW5zbGF0aW9uS2V5cygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGVydC5pbmZvKFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdJbXBvcnRpbmcgdHJhbnNsYXRpb24gZnJvbSBhdmFpbGFibGUgV2ViIFNESyBiYXNlZCBhcHBsaWNhdGlvbnMuIFRoaXMgbWF5IHRha2UgYSB3aGlsZS4uLidcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgLy8gc2luY2Ugd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUga2V5cywgd2Ugb25seSBuZWVkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbnMgZm9yIG9uZSAod2VsbCBzdXBwb3J0ZWQpIGxhbmd1YWdlXG4gICAgICAvLyB3ZSBhc3N1bWUgdGhhdCB0aGUga2V5cyBhcmUgdGhlIHNhbWUgZm9yIGFsbCBvdGhlciBsYW5ndWFnZXMsIG90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkIHRvIHBlcmZvcm0gYSBsb3QgbW9yZSByZXF1ZXN0cy5cbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU3RvcmUuZ2V0QXZhaWxhYmxlVHJhbnNsYXRpb25zKFsnZGUnXSk7XG4gICAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHRoaXMudmFsdWVTdHJpbmcoKTtcbiAgICAgIGNvbnN0IHZhbHVlczogQXJyYXk8eyBrZXk6IHN0cmluZyB9PiA9IEpTT04ucGFyc2UodmFsdWVTdHJpbmcpO1xuICAgICAgY29uc3QgcHJldmlvdXNOdW1iZXJPZkVudHJpZXMgPSB2YWx1ZXMubGVuZ3RoO1xuICAgICAgY29uc3QgcmV0cmlldmVkS2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcmV0cmlldmVkS2V5cykge1xuICAgICAgICBjb25zdCBmb3VuZEtleSA9IHZhbHVlcy5maW5kKHZhbHVlID0+IHZhbHVlLmtleSA9PT0ga2V5KTtcbiAgICAgICAgaWYgKCFmb3VuZEtleSkge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKHsga2V5IH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdwcmV2aW91c051bWJlck9mRW50cmllcyA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICB0aGlzLnZhbHVlU3RyaW5nLnNldChKU09OLnN0cmluZ2lmeSh2YWx1ZXMsIHVuZGVmaW5lZCwgMikpO1xuICAgICAgdGhpcy5hbGVydC5zdWNjZXNzKFxuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgICdSZXRyaWV2ZWQge3sgbnVtYmVyT2ZSZXRyaWV2ZWRLZXlzIH19IGtleXMgZnJvbSBhdmFpbGFibGUgYXBwbGljYXRpb25zLiB7eyBudW1iZXJPZk5ld0tleXMgfX0gbmV3IHRyYW5zbGF0aW9uIGtleXMgd2VyZSBhZGRlZC4nXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBudW1iZXJPZlJldHJpZXZlZEtleXM6IHJldHJpZXZlZEtleXMubGVuZ3RoLFxuICAgICAgICAgICAgbnVtYmVyT2ZOZXdLZXlzOiBuZXdwcmV2aW91c051bWJlck9mRW50cmllcyAtIHByZXZpb3VzTnVtYmVyT2ZFbnRyaWVzXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKGdldHRleHQoJ0ZhaWxlZCB0byBpbXBvcnQgdHJhbnNsYXRpb24ga2V5cycpKTtcbiAgICAgIHRoaXMuYWxlcnQuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlVHJhbnNsYXRpb25zKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU3RvcmUudXBkYXRlVHJhbnNsYXRpb25zKEpTT04ucGFyc2UodGhpcy52YWx1ZVN0cmluZygpKSk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgIHRoaXMuYWxlcnQuc3VjY2VzcyhnZXR0ZXh0KCdUcmFuc2xhdGlvbnMgc2F2ZWQnKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydC5kYW5nZXIoZ2V0dGV4dCgnRmFpbGVkIHRvIHNhdmUgdHJhbnNsYXRpb25zJykpO1xuICAgICAgdGhpcy5hbGVydC5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS10aXRsZSB0cmFuc2xhdGU+TG9jYWxpemF0aW9uPC9jOHktdGl0bGU+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nKCk7IGVsc2UgbG9hZGluZ1wiPlxuICA8Yzh5LWFjdGlvbi1iYXItaXRlbSBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICAgIFtkaXNhYmxlZF09XCIhaXNWYWxpZEpTT04oKVwiXG4gICAgICAoY2xpY2spPVwic2F2ZVRyYW5zbGF0aW9ucygpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktdHJhbnNsYXRpb24tZWRpdG9yLS1zYXZlLWFuZC1hcHBseVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInNhdmVcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+U2F2ZSAmIGFwcGx5PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGM4eS1hY3Rpb24tYmFyLWl0ZW0gcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tbGlua1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzVmFsaWRKU09OKClcIlxuICAgICAgKGNsaWNrKT1cImltcG9ydFRyYW5zbGF0aW9uS2V5cygpXCJcbiAgICAgIGRhdGEtY3k9XCJjOHktdHJhbnNsYXRpb24tZWRpdG9yLS1pbXBvcnQtdHJhbnNsYXRpb24ta2V5c1wiXG4gICAgPlxuICAgICAgPGkgW2M4eUljb25dPVwiJ2ltcG9ydCdcIj48L2k+XG4gICAgICA8c3BhbiB0cmFuc2xhdGU+SW1wb3J0IHRyYW5zbGF0aW9uIGtleXMgZnJvbSBBcHBzPC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbiAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC0tZnVsbHBhZ2UgY29udGVudC1mdWxscGFnZVwiPlxuICAgIDxjOHktZWRpdG9yXG4gICAgICBjbGFzcz1cImZsZXgtZ3Jvd1wiXG4gICAgICBbZWRpdG9yT3B0aW9uc109XCJlZGl0b3JPcHRpb25zXCJcbiAgICAgIFtuZ01vZGVsXT1cInZhbHVlU3RyaW5nKClcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChlZGl0b3JJbml0KT1cIm9uRWRpdG9ySW5pdCgkZXZlbnQpXCJcbiAgICAgIG1vbmFjb0VkaXRvck1hcmtlclZhbGlkYXRvclxuICAgID48L2M4eS1lZGl0b3I+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPGM4eS1sb2FkaW5nPjwvYzh5LWxvYWRpbmc+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,2 +1,3 @@
1
1
  export * from './translation-editor/translation-editor.component';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90cmFuc2xhdGlvbi1lZGl0b3IvdHJhbnNsYXRpb24tZWRpdG9yLmNvbXBvbmVudCc7XG4iXX0=
2
+ export * from './advanced-translation-editor/advanced-translation-editor.component';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cmFuc2xhdGlvbi1lZGl0b3IvbGF6eS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMscUVBQXFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RyYW5zbGF0aW9uLWVkaXRvci90cmFuc2xhdGlvbi1lZGl0b3IuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYWR2YW5jZWQtdHJhbnNsYXRpb24tZWRpdG9yL2FkdmFuY2VkLXRyYW5zbGF0aW9uLWVkaXRvci5jb21wb25lbnQnO1xuIl19