ngx-vflow 1.4.1 → 1.4.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 (29) hide show
  1. package/esm2022/lib/vflow/public-components/handle/handle.component.mjs +18 -21
  2. package/esm2022/lib/vflow/public-components/node-toolbar/node-toolbar.component.mjs +1 -1
  3. package/esm2022/lib/vflow/testing-utils/component-mocks/handle-mock.component.mjs +3 -1
  4. package/esm2022/lib/vflow/testing-utils/component-mocks/minimap-mock.component.mjs +3 -1
  5. package/esm2022/lib/vflow/testing-utils/component-mocks/node-toolbar-mock.component.mjs +5 -1
  6. package/esm2022/lib/vflow/testing-utils/component-mocks/resizable-mock.component.mjs +5 -1
  7. package/esm2022/lib/vflow/testing-utils/component-mocks/vflow-mock.component.mjs +48 -22
  8. package/esm2022/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.mjs +9 -1
  9. package/esm2022/lib/vflow/testing-utils/directive-mocks/drag-handle-mock.directive.mjs +1 -1
  10. package/esm2022/lib/vflow/testing-utils/directive-mocks/selectable-mock.directive.mjs +1 -1
  11. package/esm2022/lib/vflow/testing-utils/directive-mocks/template-mock.directive.mjs +1 -1
  12. package/esm2022/lib/vflow/testing-utils/types.mjs +2 -0
  13. package/fesm2022/ngx-vflow.mjs +81 -54
  14. package/fesm2022/ngx-vflow.mjs.map +1 -1
  15. package/lib/vflow/public-components/handle/handle.component.d.ts +3 -6
  16. package/lib/vflow/public-components/node-toolbar/node-toolbar.component.d.ts +1 -1
  17. package/lib/vflow/testing-utils/component-mocks/handle-mock.component.d.ts +5 -2
  18. package/lib/vflow/testing-utils/component-mocks/minimap-mock.component.d.ts +5 -2
  19. package/lib/vflow/testing-utils/component-mocks/node-toolbar-mock.component.d.ts +6 -1
  20. package/lib/vflow/testing-utils/component-mocks/resizable-mock.component.d.ts +6 -1
  21. package/lib/vflow/testing-utils/component-mocks/vflow-mock.component.d.ts +26 -13
  22. package/lib/vflow/testing-utils/directive-mocks/connection-controller-mock.directive.d.ts +8 -1
  23. package/lib/vflow/testing-utils/directive-mocks/drag-handle-mock.directive.d.ts +3 -1
  24. package/lib/vflow/testing-utils/directive-mocks/selectable-mock.directive.d.ts +3 -1
  25. package/lib/vflow/testing-utils/directive-mocks/template-mock.directive.d.ts +8 -6
  26. package/lib/vflow/testing-utils/types.d.ts +1 -0
  27. package/package.json +1 -1
  28. package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +0 -18
  29. package/lib/vflow/decorators/run-in-injection-context.decorator.d.ts +0 -5
@@ -2470,23 +2470,6 @@ class HandleModel {
2470
2470
  }
2471
2471
  }
2472
2472
 
2473
- function InjectionContext(target, key, descriptor) {
2474
- const originalMethod = descriptor.value;
2475
- descriptor.value = function (...args) {
2476
- if (implementsWithInjector(this)) {
2477
- return runInInjectionContext(this.injector, () => originalMethod.apply(this, args));
2478
- }
2479
- else {
2480
- throw new Error('Class that contains decorated method must extends WithInjectorDirective class');
2481
- }
2482
- };
2483
- // Return the modified descriptor
2484
- return descriptor;
2485
- }
2486
- const implementsWithInjector = (instance) => {
2487
- return 'injector' in instance && 'get' in instance.injector;
2488
- };
2489
-
2490
2473
  class HandleComponent {
2491
2474
  constructor() {
2492
2475
  this.injector = inject(Injector);
@@ -2508,30 +2491,29 @@ class HandleComponent {
2508
2491
  this.template = input();
2509
2492
  }
2510
2493
  ngOnInit() {
2511
- const node = this.handleService.node();
2512
- if (node) {
2513
- this.model = new HandleModel({
2514
- position: this.position(),
2515
- type: this.type(),
2516
- id: this.id(),
2517
- hostReference: this.element.parentElement,
2518
- template: this.template(),
2519
- }, node);
2520
- this.handleService.createHandle(this.model);
2521
- requestAnimationFrame(() => this.model.updateHost());
2522
- this.destroyRef.onDestroy(() => this.handleService.destroyHandle(this.model));
2523
- }
2494
+ runInInjectionContext(this.injector, () => {
2495
+ const node = this.handleService.node();
2496
+ if (node) {
2497
+ const model = new HandleModel({
2498
+ position: this.position(),
2499
+ type: this.type(),
2500
+ id: this.id(),
2501
+ hostReference: this.element.parentElement,
2502
+ template: this.template(),
2503
+ }, node);
2504
+ this.handleService.createHandle(model);
2505
+ requestAnimationFrame(() => model.updateHost());
2506
+ this.destroyRef.onDestroy(() => this.handleService.destroyHandle(model));
2507
+ }
2508
+ });
2524
2509
  }
2525
2510
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2526
2511
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: HandleComponent, isStandalone: true, selector: "handle", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2527
2512
  }
2528
- __decorate([
2529
- InjectionContext
2530
- ], HandleComponent.prototype, "ngOnInit", null);
2531
2513
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleComponent, decorators: [{
2532
2514
  type: Component,
2533
2515
  args: [{ standalone: true, selector: 'handle', changeDetection: ChangeDetectionStrategy.OnPush, template: "" }]
2534
- }], propDecorators: { ngOnInit: [] } });
2516
+ }] });
2535
2517
 
2536
2518
  class NodeHandlesControllerDirective {
2537
2519
  constructor() {
@@ -3756,20 +3738,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3756
3738
 
3757
3739
  class VflowMockComponent {
3758
3740
  constructor() {
3759
- this.nodes = input.required();
3760
- this.edges = input.required();
3761
- this.view = input([400, 400]);
3762
- this.minZoom = input(0.5);
3763
- this.maxZoom = input(3);
3764
- this.background = input('#fff');
3741
+ this.view = [400, 400];
3742
+ this.minZoom = 0.5;
3743
+ this.maxZoom = 3;
3744
+ this.background = '#fff';
3765
3745
  this.optimization = input({
3766
3746
  detachedGroupsLayer: false,
3767
3747
  });
3768
- this.entitiesSelectable = input(true);
3769
- this.keyboardShortcuts = input({
3748
+ this.entitiesSelectable = true;
3749
+ this.keyboardShortcuts = {
3770
3750
  multiSelection: null,
3771
- });
3772
- this.connection = input();
3751
+ };
3752
+ this.connection = new ConnectionModel({});
3773
3753
  // eslint-disable-next-line @angular-eslint/no-output-on-prefix
3774
3754
  this.onComponentNodeEvent = output();
3775
3755
  this.nodeTemplateDirective = contentChild(NodeHtmlTemplateMockDirective);
@@ -3788,6 +3768,8 @@ class VflowMockComponent {
3788
3768
  this.nodesChange$ = toObservable(this.nodesChange);
3789
3769
  this.edgesChange$ = toObservable(this.edgesChange);
3790
3770
  }
3771
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
3772
+ ngOnInit() { }
3791
3773
  viewportTo(viewport) {
3792
3774
  this.viewport.set(viewport);
3793
3775
  }
@@ -3802,9 +3784,8 @@ class VflowMockComponent {
3802
3784
  documentPointToFlowPoint(point) {
3803
3785
  return point;
3804
3786
  }
3805
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3806
3787
  getNode(id) {
3807
- return this.nodes().find((node) => node.id === id);
3788
+ return this.nodes.find((node) => node.id === id);
3808
3789
  }
3809
3790
  getDetachedEdges() {
3810
3791
  return [];
@@ -3813,10 +3794,10 @@ class VflowMockComponent {
3813
3794
  return signal(value);
3814
3795
  }
3815
3796
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: VflowMockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3816
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowMockComponent, isStandalone: true, selector: "vflow", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: true, transformFunction: null }, edges: { classPropertyName: "edges", publicName: "edges", isSignal: true, isRequired: true, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: true, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: true, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: true, isRequired: false, transformFunction: null }, optimization: { classPropertyName: "optimization", publicName: "optimization", isSignal: true, isRequired: false, transformFunction: null }, entitiesSelectable: { classPropertyName: "entitiesSelectable", publicName: "entitiesSelectable", isSignal: true, isRequired: false, transformFunction: null }, keyboardShortcuts: { classPropertyName: "keyboardShortcuts", publicName: "keyboardShortcuts", isSignal: true, isRequired: false, transformFunction: null }, connection: { classPropertyName: "connection", publicName: "connection", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateMockDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
3797
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: VflowMockComponent, isStandalone: true, selector: "vflow", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: false, isRequired: true, transformFunction: null }, edges: { classPropertyName: "edges", publicName: "edges", isSignal: false, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, minZoom: { classPropertyName: "minZoom", publicName: "minZoom", isSignal: false, isRequired: false, transformFunction: null }, maxZoom: { classPropertyName: "maxZoom", publicName: "maxZoom", isSignal: false, isRequired: false, transformFunction: null }, background: { classPropertyName: "background", publicName: "background", isSignal: false, isRequired: false, transformFunction: null }, optimization: { classPropertyName: "optimization", publicName: "optimization", isSignal: true, isRequired: false, transformFunction: null }, entitiesSelectable: { classPropertyName: "entitiesSelectable", publicName: "entitiesSelectable", isSignal: false, isRequired: false, transformFunction: null }, keyboardShortcuts: { classPropertyName: "keyboardShortcuts", publicName: "keyboardShortcuts", isSignal: false, isRequired: false, transformFunction: null }, connection: { classPropertyName: "connection", publicName: "connection", isSignal: false, isRequired: false, transformFunction: (settings) => new ConnectionModel(settings) }, snapGrid: { classPropertyName: "snapGrid", publicName: "snapGrid", isSignal: false, isRequired: false, transformFunction: null }, elevateNodesOnSelect: { classPropertyName: "elevateNodesOnSelect", publicName: "elevateNodesOnSelect", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { onComponentNodeEvent: "onComponentNodeEvent" }, queries: [{ propertyName: "nodeTemplateDirective", first: true, predicate: NodeHtmlTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "groupNodeTemplateDirective", first: true, predicate: GroupNodeTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "edgeTemplateDirective", first: true, predicate: EdgeTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "edgeLabelHtmlDirective", first: true, predicate: EdgeLabelHtmlTemplateMockDirective, descendants: true, isSignal: true }, { propertyName: "connectionTemplateDirective", first: true, predicate: ConnectionTemplateMockDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
3817
3798
  <ng-content />
3818
3799
 
3819
- @for (node of nodes(); track $index) {
3800
+ @for (node of nodes; track $index) {
3820
3801
  @if (node.type === 'html-template') {
3821
3802
  <ng-component
3822
3803
  [ngTemplateOutlet]="nodeTemplateDirective()?.templateRef ?? null"
@@ -3842,7 +3823,7 @@ class VflowMockComponent {
3842
3823
  }
3843
3824
  }
3844
3825
 
3845
- @for (edge of edges(); track $index) {
3826
+ @for (edge of edges; track $index) {
3846
3827
  @if (edge.type === 'template') {
3847
3828
  <ng-component
3848
3829
  [ngTemplateOutlet]="edgeTemplateDirective()?.templateRef ?? null"
@@ -3890,7 +3871,7 @@ class VflowMockComponent {
3890
3871
  }
3891
3872
  }
3892
3873
 
3893
- @if (connection()?.type === 'template') {
3874
+ @if (connection.type === 'template') {
3894
3875
  <ng-component
3895
3876
  [ngTemplateOutlet]="connectionTemplateDirective()?.templateRef ?? null"
3896
3877
  [ngTemplateOutletContext]="{
@@ -3909,7 +3890,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3909
3890
  template: `
3910
3891
  <ng-content />
3911
3892
 
3912
- @for (node of nodes(); track $index) {
3893
+ @for (node of nodes; track $index) {
3913
3894
  @if (node.type === 'html-template') {
3914
3895
  <ng-component
3915
3896
  [ngTemplateOutlet]="nodeTemplateDirective()?.templateRef ?? null"
@@ -3935,7 +3916,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3935
3916
  }
3936
3917
  }
3937
3918
 
3938
- @for (edge of edges(); track $index) {
3919
+ @for (edge of edges; track $index) {
3939
3920
  @if (edge.type === 'template') {
3940
3921
  <ng-component
3941
3922
  [ngTemplateOutlet]="edgeTemplateDirective()?.templateRef ?? null"
@@ -3983,7 +3964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3983
3964
  }
3984
3965
  }
3985
3966
 
3986
- @if (connection()?.type === 'template') {
3967
+ @if (connection.type === 'template') {
3987
3968
  <ng-component
3988
3969
  [ngTemplateOutlet]="connectionTemplateDirective()?.templateRef ?? null"
3989
3970
  [ngTemplateOutletContext]="{
@@ -3998,7 +3979,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3998
3979
  standalone: true,
3999
3980
  imports: [NgTemplateOutlet],
4000
3981
  }]
4001
- }] });
3982
+ }], propDecorators: { nodes: [{
3983
+ type: Input,
3984
+ args: [{ required: true }]
3985
+ }], edges: [{
3986
+ type: Input
3987
+ }], view: [{
3988
+ type: Input
3989
+ }], minZoom: [{
3990
+ type: Input
3991
+ }], maxZoom: [{
3992
+ type: Input
3993
+ }], background: [{
3994
+ type: Input
3995
+ }], entitiesSelectable: [{
3996
+ type: Input
3997
+ }], keyboardShortcuts: [{
3998
+ type: Input
3999
+ }], connection: [{
4000
+ type: Input,
4001
+ args: [{
4002
+ transform: (settings) => new ConnectionModel(settings),
4003
+ }]
4004
+ }], snapGrid: [{
4005
+ type: Input
4006
+ }], elevateNodesOnSelect: [{
4007
+ type: Input
4008
+ }] } });
4002
4009
 
4003
4010
  class HandleMockComponent {
4004
4011
  constructor() {
@@ -4007,6 +4014,8 @@ class HandleMockComponent {
4007
4014
  this.id = input();
4008
4015
  this.template = input();
4009
4016
  }
4017
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4018
+ ngOnInit() { }
4010
4019
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HandleMockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4011
4020
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: HandleMockComponent, isStandalone: true, selector: "handle", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: true, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, template: { classPropertyName: "template", publicName: "template", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4012
4021
  }
@@ -4026,6 +4035,10 @@ class ResizableMockComponent {
4026
4035
  this.resizerColor = input('#2e414c');
4027
4036
  this.gap = input(1.5);
4028
4037
  }
4038
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4039
+ ngOnInit() { }
4040
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4041
+ ngAfterViewInit() { }
4029
4042
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ResizableMockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4030
4043
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: ResizableMockComponent, isStandalone: true, selector: "[resizable]", inputs: { resizable: { classPropertyName: "resizable", publicName: "resizable", isSignal: true, isRequired: false, transformFunction: null }, resizerColor: { classPropertyName: "resizerColor", publicName: "resizerColor", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4031
4044
  }
@@ -4046,6 +4059,8 @@ class MiniMapMockComponent {
4046
4059
  this.position = input('bottom-right');
4047
4060
  this.scaleOnHover = input(false);
4048
4061
  }
4062
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4063
+ ngOnInit() { }
4049
4064
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MiniMapMockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4050
4065
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: MiniMapMockComponent, isStandalone: true, selector: "mini-map", inputs: { maskColor: { classPropertyName: "maskColor", publicName: "maskColor", isSignal: true, isRequired: false, transformFunction: null }, strokeColor: { classPropertyName: "strokeColor", publicName: "strokeColor", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, scaleOnHover: { classPropertyName: "scaleOnHover", publicName: "scaleOnHover", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4051
4066
  }
@@ -4063,6 +4078,10 @@ class NodeToolbarMockComponent {
4063
4078
  constructor() {
4064
4079
  this.position = input('top');
4065
4080
  }
4081
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4082
+ ngOnInit() { }
4083
+ // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method
4084
+ ngOnDestroy() { }
4066
4085
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeToolbarMockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4067
4086
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: NodeToolbarMockComponent, isStandalone: true, selector: "node-toolbar", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4068
4087
  }
@@ -4081,6 +4100,14 @@ class ConnectionControllerMockDirective {
4081
4100
  // eslint-disable-next-line @angular-eslint/no-output-on-prefix
4082
4101
  this.onConnect = output();
4083
4102
  }
4103
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4104
+ startConnection(handle) { }
4105
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4106
+ validateConnection(handle) { }
4107
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4108
+ resetValidateConnection(targetHandle) { }
4109
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
4110
+ endConnection() { }
4084
4111
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConnectionControllerMockDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
4085
4112
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: ConnectionControllerMockDirective, isStandalone: true, selector: "[onConnect]", outputs: { onConnect: "onConnect" }, ngImport: i0 }); }
4086
4113
  }