@c8y/ngx-components 1021.31.4 → 1021.34.2

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 (75) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +1 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -1
  3. package/core/common/service-registry.model.d.ts +2 -1
  4. package/core/common/service-registry.model.d.ts.map +1 -1
  5. package/core/dynamic-component/dynamic-component.component.d.ts +5 -0
  6. package/core/dynamic-component/dynamic-component.component.d.ts.map +1 -1
  7. package/core/plugins/plugins.service.d.ts +3 -0
  8. package/core/plugins/plugins.service.d.ts.map +1 -1
  9. package/core/router/router-tabs.resolver.d.ts +2 -2
  10. package/core/router/router-tabs.resolver.d.ts.map +1 -1
  11. package/esm2022/alarms/alarms-date-filter.component.mjs +5 -3
  12. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  13. package/esm2022/core/common/service-registry.model.mjs +1 -1
  14. package/esm2022/core/dynamic-component/dynamic-component.component.mjs +23 -3
  15. package/esm2022/core/plugins/plugins.service.mjs +7 -1
  16. package/esm2022/core/router/router-tabs.resolver.mjs +22 -8
  17. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +2 -2
  18. package/esm2022/protocol-lwm2m/ng1/plugin-checker.service.mjs +5 -1
  19. package/esm2022/services/services-device-tab/service-command.service.mjs +113 -0
  20. package/esm2022/services/services-device-tab/service-device-tab.model.mjs +1 -1
  21. package/esm2022/services/services-device-tab/services-device-tab.component.mjs +13 -7
  22. package/esm2022/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.mjs +5 -0
  23. package/esm2022/widgets/definitions/asset-notes/index.mjs +29 -0
  24. package/esm2022/widgets/definitions/index.mjs +2 -1
  25. package/esm2022/widgets/implementations/asset-notes/asset-notes-widget.component.mjs +67 -0
  26. package/esm2022/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.mjs +5 -0
  27. package/esm2022/widgets/implementations/asset-notes/index.mjs +2 -0
  28. package/fesm2022/c8y-ngx-components-alarms.mjs +5 -4
  29. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +1 -1
  31. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
  33. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs +4 -0
  35. package/fesm2022/c8y-ngx-components-protocol-lwm2m.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components-services.mjs +116 -5
  37. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  38. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs +36 -0
  39. package/fesm2022/c8y-ngx-components-widgets-definitions-asset-notes.mjs.map +1 -0
  40. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
  41. package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
  42. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs +74 -0
  43. package/fesm2022/c8y-ngx-components-widgets-implementations-asset-notes.mjs.map +1 -0
  44. package/fesm2022/c8y-ngx-components.mjs +48 -8
  45. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  46. package/locales/de.po +25 -14
  47. package/locales/es.po +22 -11
  48. package/locales/fr.po +22 -11
  49. package/locales/ja_JP.po +21 -9
  50. package/locales/ko.po +21 -9
  51. package/locales/locales.pot +19 -7
  52. package/locales/nl.po +22 -11
  53. package/locales/pl.po +26 -16
  54. package/locales/pt_BR.po +26 -15
  55. package/locales/zh_CN.po +21 -9
  56. package/locales/zh_TW.po +21 -9
  57. package/package.json +1 -1
  58. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts +4 -0
  59. package/protocol-lwm2m/ng1/plugin-checker.service.d.ts.map +1 -1
  60. package/services/services-device-tab/service-command.service.d.ts +59 -0
  61. package/services/services-device-tab/service-command.service.d.ts.map +1 -0
  62. package/services/services-device-tab/service-device-tab.model.d.ts +9 -0
  63. package/services/services-device-tab/service-device-tab.model.d.ts.map +1 -1
  64. package/services/services-device-tab/services-device-tab.component.d.ts +5 -2
  65. package/services/services-device-tab/services-device-tab.component.d.ts.map +1 -1
  66. package/widgets/definitions/asset-notes/c8y-ngx-components-widgets-definitions-asset-notes.d.ts.map +1 -0
  67. package/widgets/definitions/asset-notes/index.d.ts +16 -0
  68. package/widgets/definitions/asset-notes/index.d.ts.map +1 -0
  69. package/widgets/definitions/index.d.ts +1 -0
  70. package/widgets/definitions/index.d.ts.map +1 -1
  71. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts +33 -0
  72. package/widgets/implementations/asset-notes/asset-notes-widget.component.d.ts.map +1 -0
  73. package/widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.d.ts.map +1 -0
  74. package/widgets/implementations/asset-notes/index.d.ts +2 -0
  75. package/widgets/implementations/asset-notes/index.d.ts.map +1 -0
@@ -0,0 +1,74 @@
1
+ import * as i2 from '@angular/common';
2
+ import { CommonModule as CommonModule$1 } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, input, signal, computed, Component } from '@angular/core';
5
+ import * as i3 from '@angular/forms';
6
+ import { FormsModule } from '@angular/forms';
7
+ import { InventoryService } from '@c8y/client';
8
+ import * as i1 from '@c8y/ngx-components';
9
+ import { AppStateService, AlertService, DatePipe, gettext, CommonModule, CoreModule, FormsModule as FormsModule$1 } from '@c8y/ngx-components';
10
+
11
+ class AssetNotesWidgetComponent {
12
+ constructor() {
13
+ this.inventory = inject(InventoryService);
14
+ this.appState = inject(AppStateService);
15
+ this.alertService = inject(AlertService);
16
+ this.datePipe = inject(DatePipe);
17
+ this.config = input();
18
+ this.notes = signal(null);
19
+ this.editable = signal(false);
20
+ this.isLoading = computed(() => this.notes()?.htmlContent === undefined);
21
+ this.FRAGMENT = 'c8y_ComponentConfig!assetNotes';
22
+ this.ngNonBindableTranslate = computed(() => ({
23
+ lastUpdated: this.datePipe.transform(this.notes()?.lastUpdated),
24
+ user: this.notes()?.user
25
+ }));
26
+ }
27
+ async ngOnInit() {
28
+ await this.loadNotes();
29
+ }
30
+ toggleEdit() {
31
+ this.editable.set(!this.editable());
32
+ }
33
+ async save() {
34
+ try {
35
+ const updatedNotes = {
36
+ ...this.notes(),
37
+ user: this.appState.currentUser.value.id,
38
+ lastUpdated: new Date().toISOString()
39
+ };
40
+ await this.inventory.update({
41
+ id: this.config().device.id,
42
+ [this.FRAGMENT]: updatedNotes
43
+ });
44
+ this.notes.set(updatedNotes);
45
+ this.editable.set(false);
46
+ this.alertService.success(gettext('Notes saved.'));
47
+ }
48
+ catch (error) {
49
+ this.alertService.addServerFailure(error);
50
+ }
51
+ }
52
+ async loadNotes() {
53
+ try {
54
+ const device = await this.inventory.detail(this.config().device.id);
55
+ this.notes.set(device.data[this.FRAGMENT] || { htmlContent: '' });
56
+ }
57
+ catch (error) {
58
+ this.alertService.addServerFailure(error);
59
+ }
60
+ }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetNotesWidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
62
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.9", type: AssetNotesWidgetComponent, isStandalone: true, selector: "c8y-asset-notes", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "component", type: i1.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "pipe", type: i1.MarkdownToHtmlPipe, name: "markdownToHtml" }, { kind: "ngmodule", type: CommonModule$1 }, { kind: "ngmodule", type: CoreModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FormsModule$1 }] }); }
63
+ }
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AssetNotesWidgetComponent, decorators: [{
65
+ type: Component,
66
+ args: [{ selector: 'c8y-asset-notes', standalone: true, imports: [CommonModule, CommonModule$1, CoreModule, FormsModule, FormsModule$1, DatePipe], template: "<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n" }]
67
+ }] });
68
+
69
+ /**
70
+ * Generated bundle index. Do not edit.
71
+ */
72
+
73
+ export { AssetNotesWidgetComponent };
74
+ //# sourceMappingURL=c8y-ngx-components-widgets-implementations-asset-notes.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c8y-ngx-components-widgets-implementations-asset-notes.mjs","sources":["../../widgets/implementations/asset-notes/asset-notes-widget.component.ts","../../widgets/implementations/asset-notes/asset-notes-widget.component.html","../../widgets/implementations/asset-notes/c8y-ngx-components-widgets-implementations-asset-notes.ts"],"sourcesContent":["import { CommonModule as NgCommonModule } from '@angular/common';\nimport { Component, computed, inject, input, InputSignal, OnInit, signal } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n CommonModule,\n CoreModule,\n DatePipe,\n FormsModule,\n gettext\n} from '@c8y/ngx-components';\n\ninterface AssetNotes {\n user: string;\n lastUpdated: string;\n htmlContent: string;\n}\n\n@Component({\n selector: 'c8y-asset-notes',\n templateUrl: './asset-notes-widget.component.html',\n standalone: true,\n imports: [CommonModule, NgCommonModule, CoreModule, NgFormsModule, FormsModule, DatePipe]\n})\nexport class AssetNotesWidgetComponent implements OnInit {\n private inventory = inject(InventoryService);\n private appState = inject(AppStateService);\n private alertService = inject(AlertService);\n private datePipe = inject(DatePipe);\n\n config: InputSignal<{ device: Partial<IManagedObject> }> = input();\n\n notes = signal<AssetNotes | null>(null);\n editable = signal(false);\n isLoading = computed(() => this.notes()?.htmlContent === undefined);\n\n private readonly FRAGMENT = 'c8y_ComponentConfig!assetNotes';\n ngNonBindableTranslate = computed(() => ({\n lastUpdated: this.datePipe.transform(this.notes()?.lastUpdated),\n user: this.notes()?.user\n }));\n\n async ngOnInit() {\n await this.loadNotes();\n }\n\n toggleEdit() {\n this.editable.set(!this.editable());\n }\n\n async save() {\n try {\n const updatedNotes = {\n ...this.notes(),\n user: this.appState.currentUser.value.id,\n lastUpdated: new Date().toISOString()\n };\n\n await this.inventory.update({\n id: this.config().device.id,\n [this.FRAGMENT]: updatedNotes\n });\n\n this.notes.set(updatedNotes);\n this.editable.set(false);\n this.alertService.success(gettext('Notes saved.'));\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n private async loadNotes() {\n try {\n const device = await this.inventory.detail(this.config().device.id);\n this.notes.set(device.data[this.FRAGMENT] || { htmlContent: '' });\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n}\n","<div class=\"fit-h d-flex flex-wrap a-i-stretch\">\n <i\n class=\"c8y-icon c8y-icon-duocolor asset-notes-icon\"\n [c8yIcon]=\"'c8y-notification'\"\n ></i>\n\n @if (!editable()) {\n <div class=\"asset-notes-content\">\n <c8y-loading *ngIf=\"isLoading()\"></c8y-loading>\n <div class=\"text-break-word asset-notes-body\">\n @if (notes()?.htmlContent && !isLoading()) {\n <span\n class=\"markdown-content d-inline-block\"\n [innerHTML]=\"notes()?.htmlContent | markdownToHtml | async\"\n ></span>\n } @else if (!notes()?.htmlContent) {\n <span>\n {{ 'No notes yet.' | translate }}\n </span>\n }\n\n <button\n class=\"btn btn-link btn-sm\"\n title=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n </div>\n </div>\n <div class=\"asset-notes-footer m-t-8\">\n <small class=\"text-muted\">\n <em\n *ngIf=\"notes()?.lastUpdated\"\n ngNonBindable\n translate\n [translateParams]=\"ngNonBindableTranslate()\"\n >\n {{ lastUpdated }} by {{ user }}\n </em>\n </small>\n </div>\n } @else {\n <div class=\"fit-h flex-grow\">\n <div class=\"d-flex a-i-stretch fit-h\">\n <textarea\n class=\"form-control fit-h text-monospace\"\n [attr.aria-label]=\"'Notes' | translate\"\n rows=\"5\"\n [(ngModel)]=\"notes().htmlContent\"\n c8y-code-editor\n ></textarea>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n (click)=\"save()\"\n >\n <i c8yIcon=\"check\"></i>\n </button>\n </div>\n <div class=\"input-group-btn a-s-center\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NgCommonModule","NgFormsModule","FormsModule"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Input, Injector, InjectionToken, Injectable, Optional, Inject, isDevMode, inject, Pipe, EventEmitter, NgModule, LOCALE_ID, EnvironmentInjector, HostListener, NgModuleRef, createNgModule, Component, Output, HostBinding, forwardRef, SecurityContext, TemplateRef, APP_INITIALIZER, runInInjectionContext, effect, Self, SkipSelf, ViewChild, Attribute, ContentChild, ViewContainerRef, ContentChildren, ElementRef, ViewChildren, createComponent, importProvidersFrom, ChangeDetectionStrategy, SimpleChange, signal, Type, DestroyRef } from '@angular/core';
2
+ import { Directive, Input, Injector, InjectionToken, Injectable, Optional, Inject, isDevMode, inject, Pipe, EventEmitter, NgModule, LOCALE_ID, EnvironmentInjector, HostListener, NgModuleRef, createNgModule, Component, Output, HostBinding, forwardRef, SecurityContext, TemplateRef, APP_INITIALIZER, runInInjectionContext, effect, Self, SkipSelf, ViewChild, Attribute, ContentChild, ViewContainerRef, ContentChildren, ElementRef, ViewChildren, createComponent, importProvidersFrom, ChangeDetectionStrategy, SimpleChange, reflectComponentType, signal, Type, DestroyRef } from '@angular/core';
3
3
  import * as i2$2 from 'ngx-bootstrap/dropdown';
4
4
  import { BsDropdownModule, BsDropdownDirective } from 'ngx-bootstrap/dropdown';
5
5
  import * as i3$1 from '@angular/cdk/a11y';
@@ -4901,6 +4901,12 @@ class PluginsService {
4901
4901
  return undefined;
4902
4902
  }
4903
4903
  }
4904
+ async resetRemotes(application) {
4905
+ return await this.applicationService.updateApplicationConfig(application, {
4906
+ remotes: undefined,
4907
+ excludedRemotes: undefined
4908
+ });
4909
+ }
4904
4910
  sortVersions(source, order) {
4905
4911
  const sourceCopy = cloneDeep(source);
4906
4912
  if (source.list && source.path) {
@@ -24181,12 +24187,13 @@ class RouterTabsResolver {
24181
24187
  resolve(currentRoute) {
24182
24188
  const routeConfig = currentRoute.routeConfig;
24183
24189
  const latestChildren = this.getLatestChildRoutes(routeConfig.rootContext);
24184
- return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map((guard) => guard.canActivate(currentRoute, this.routerStateSnapshot)), mergeMap((result) => {
24190
+ return from(latestChildren || []).pipe(mergeMap((child) => from(this.getGuards(child)).pipe(map(canActivate => canActivate(currentRoute, this.routerStateSnapshot)), mergeMap((result) => {
24185
24191
  if (isObservable(result)) {
24186
24192
  return result;
24187
24193
  }
24188
- if (result && typeof result.then === 'function') {
24189
- return from(result);
24194
+ const resultAsPromise = result;
24195
+ if (resultAsPromise && typeof resultAsPromise.then === 'function') {
24196
+ return from(resultAsPromise);
24190
24197
  }
24191
24198
  return of(result);
24192
24199
  }), tap(result => {
@@ -24237,11 +24244,24 @@ class RouterTabsResolver {
24237
24244
  return null;
24238
24245
  }
24239
24246
  getGuards(child) {
24240
- const guards = (child.canActivate || []).map(guard => {
24241
- return this.injector.get(guard);
24247
+ const injector = child._injector || this.injector;
24248
+ const canActivates = child.canActivate || [];
24249
+ const guards = canActivates.map(guard => {
24250
+ return ((route, state) => {
24251
+ // for legacy CanActivate guards
24252
+ const instance = this.injector.get(guard, null);
24253
+ if (instance) {
24254
+ return instance.canActivate(route, state);
24255
+ }
24256
+ // for current CanActivateFn guards
24257
+ const canActivate = guard;
24258
+ return runInInjectionContext(injector, () => {
24259
+ return canActivate(route, state);
24260
+ });
24261
+ });
24242
24262
  });
24243
24263
  if (child.data && child.data.showIf) {
24244
- guards.push({ canActivate: child.data.showIf });
24264
+ guards.push((route, state) => child.data.showIf(route, state));
24245
24265
  }
24246
24266
  return guards;
24247
24267
  }
@@ -27250,7 +27270,14 @@ class DynamicComponentComponent {
27250
27270
  environmentInjector: (dynamicComponent.injector || this.injector)
27251
27271
  });
27252
27272
  this.componentInstance = this.componentRef.instance;
27253
- this.componentInstance.config = this.config;
27273
+ const componentMetadata = this.safeReflectComponentType(componentType);
27274
+ const hasConfigInput = componentMetadata?.inputs.some(input => input.propName === 'config');
27275
+ if (hasConfigInput) {
27276
+ this.componentRef.setInput('config', this.config);
27277
+ }
27278
+ else {
27279
+ this.componentInstance.config = this.config;
27280
+ }
27254
27281
  this.componentInstance.alerts = new DynamicComponentAlertAggregator(errors);
27255
27282
  this.subscribeForOverlayChange();
27256
27283
  }
@@ -27259,6 +27286,19 @@ class DynamicComponentComponent {
27259
27286
  console.warn(ex);
27260
27287
  }
27261
27288
  }
27289
+ /**
27290
+ * Safely reflects the component metadata.
27291
+ * If reflection fails, it returns a default object with an empty inputs array.
27292
+ */
27293
+ safeReflectComponentType(componentType) {
27294
+ try {
27295
+ return reflectComponentType(componentType);
27296
+ }
27297
+ catch (error) {
27298
+ console.warn('Failed to reflect component metadata:', error);
27299
+ return { inputs: [] };
27300
+ }
27301
+ }
27262
27302
  async getComponentType(dynamicComponent) {
27263
27303
  if (isLazyDynamicComponents(dynamicComponent)) {
27264
27304
  const componentPromiseFunction = this.mode === 'component'