@foblex/flow 1.1.8 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,10 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { ElementRef, OnDestroy } from '@angular/core';
2
2
  import { FNodeInputBase } from './f-node-input-base';
3
+ import { IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';
3
4
  import * as i0 from "@angular/core";
4
- export declare class FNodeInputDirective extends FNodeInputBase {
5
+ export declare class FNodeInputDirective extends FNodeInputBase implements OnDestroy {
5
6
  private elementReference;
7
+ private _parentFlow?;
6
8
  id: any;
7
9
  fNodeInputColor: string | undefined;
8
10
  get color(): string;
@@ -11,7 +13,8 @@ export declare class FNodeInputDirective extends FNodeInputBase {
11
13
  set disabled(isDisabled: boolean | undefined | string);
12
14
  private isDisabled;
13
15
  get hostElement(): HTMLElement | SVGElement;
14
- constructor(elementReference: ElementRef<HTMLElement>);
15
- static ɵfac: i0.ɵɵFactoryDeclaration<FNodeInputDirective, never>;
16
+ constructor(elementReference: ElementRef<HTMLElement>, _parentFlow?: IFlowConnectorParent | undefined);
17
+ ngOnDestroy(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<FNodeInputDirective, [null, { optional: true; skipSelf: true; }]>;
16
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<FNodeInputDirective, "[fNodeInput]", never, { "id": { "alias": "id"; "required": false; }; "fNodeInputColor": { "alias": "fNodeInputColor"; "required": false; }; "multiple": { "alias": "fNodeInputMultiple"; "required": false; }; "disabled": { "alias": "fNodeInputDisabled"; "required": false; }; }, {}, never, never, false, never>;
17
20
  }
@@ -1,8 +1,10 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { ElementRef, OnDestroy } from '@angular/core';
2
2
  import { FNodeOutletBase } from './f-node-outlet-base';
3
+ import { IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';
3
4
  import * as i0 from "@angular/core";
4
- export declare class FNodeOutletDirective extends FNodeOutletBase {
5
+ export declare class FNodeOutletDirective extends FNodeOutletBase implements OnDestroy {
5
6
  private elementReference;
7
+ private _parentFlow?;
6
8
  id: string;
7
9
  color: string;
8
10
  name: string;
@@ -11,7 +13,8 @@ export declare class FNodeOutletDirective extends FNodeOutletBase {
11
13
  private isDisabled;
12
14
  isConnectionFromOutlet: boolean;
13
15
  get hostElement(): HTMLElement | SVGElement;
14
- constructor(elementReference: ElementRef<HTMLElement>);
15
- static ɵfac: i0.ɵɵFactoryDeclaration<FNodeOutletDirective, never>;
16
+ constructor(elementReference: ElementRef<HTMLElement>, _parentFlow?: IFlowConnectorParent | undefined);
17
+ ngOnDestroy(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<FNodeOutletDirective, [null, { optional: true; skipSelf: true; }]>;
16
19
  static ɵdir: i0.ɵɵDirectiveDeclaration<FNodeOutletDirective, "[fNodeOutlet]", never, { "id": { "alias": "id"; "required": false; }; "color": { "alias": "fNodeOutletColor"; "required": false; }; "name": { "alias": "name"; "required": false; }; "disabled": { "alias": "fNodeOutletDisabled"; "required": false; }; "isConnectionFromOutlet": { "alias": "isConnectionFromOutlet"; "required": false; }; }, {}, never, never, false, never>;
17
20
  }
@@ -1,8 +1,10 @@
1
- import { ElementRef } from '@angular/core';
1
+ import { ElementRef, OnDestroy } from '@angular/core';
2
2
  import { FNodeOutputBase } from './f-node-output-base';
3
+ import { IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';
3
4
  import * as i0 from "@angular/core";
4
- export declare class FNodeOutputDirective extends FNodeOutputBase {
5
+ export declare class FNodeOutputDirective extends FNodeOutputBase implements OnDestroy {
5
6
  private elementReference;
7
+ private _parentFlow?;
6
8
  id: any;
7
9
  color: string;
8
10
  name: string;
@@ -10,7 +12,8 @@ export declare class FNodeOutputDirective extends FNodeOutputBase {
10
12
  set disabled(isDisabled: boolean | undefined | string);
11
13
  private isDisabled;
12
14
  get hostElement(): HTMLElement | SVGElement;
13
- constructor(elementReference: ElementRef<HTMLElement>);
14
- static ɵfac: i0.ɵɵFactoryDeclaration<FNodeOutputDirective, never>;
15
+ constructor(elementReference: ElementRef<HTMLElement>, _parentFlow?: IFlowConnectorParent | undefined);
16
+ ngOnDestroy(): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<FNodeOutputDirective, [null, { optional: true; skipSelf: true; }]>;
15
18
  static ɵdir: i0.ɵɵDirectiveDeclaration<FNodeOutputDirective, "[fNodeOutput]", never, { "id": { "alias": "id"; "required": false; }; "color": { "alias": "fNodeOutputColor"; "required": false; }; "name": { "alias": "name"; "required": false; }; "disabled": { "alias": "fNodeOutputDisabled"; "required": false; }; }, {}, never, never, false, never>;
16
19
  }
@@ -1,7 +1,8 @@
1
- import { AfterContentInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy, QueryList } from '@angular/core';
1
+ import { AfterContentInit, ChangeDetectorRef, ElementRef, InjectionToken, NgZone, OnDestroy } from '@angular/core';
2
2
  import { IHasHostElement, ITransformModel } from '@foblex/core';
3
3
  import { FItemsContainerBase } from '../../directives';
4
4
  import { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';
5
+ import { Subject } from 'rxjs';
5
6
  import { FBackgroundBase } from '../../internal';
6
7
  import { FConnectionsContainerBase } from '../../directives';
7
8
  import { FNodesContainerBase } from '../../directives';
@@ -19,9 +20,10 @@ export declare abstract class FFlowBase implements IHasHostElement, AfterContent
19
20
  abstract fItemsContainer: FItemsContainerBase;
20
21
  abstract fBackground: FBackgroundBase;
21
22
  abstract transform: ITransformModel;
22
- abstract outlets: QueryList<FNodeOutletBase>;
23
- abstract outputs: QueryList<FNodeOutputBase>;
24
- abstract inputs: QueryList<FNodeInputBase>;
23
+ abstract outlets: FNodeOutletBase[];
24
+ abstract outputs: FNodeOutputBase[];
25
+ abstract inputs: FNodeInputBase[];
26
+ connectorChanges: Subject<void>;
25
27
  protected constructor(elementReference: ElementRef<SVGSVGElement>, changeDetectorRef: ChangeDetectorRef, ngZone: NgZone);
26
28
  ngAfterContentInit(): void;
27
29
  protected subscribeOnComponentsChanges(): void;
@@ -1,18 +1,19 @@
1
- import { ChangeDetectorRef, ElementRef, NgZone, QueryList } from '@angular/core';
1
+ import { ChangeDetectorRef, ElementRef, NgZone } from '@angular/core';
2
2
  import { FItemsContainerBase } from '../../directives';
3
3
  import { FFlowBase } from './f-flow-base';
4
4
  import { ITransformModel } from '@foblex/core';
5
- import { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';
6
5
  import { FNodesContainerBase } from '../../directives';
7
6
  import { FConnectionsContainerBase } from '../../directives';
8
7
  import { FBackgroundBase } from '../../internal';
8
+ import { IFlowConnectorParent } from './i-flow-connector-parent';
9
+ import { FConnectorBase, FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "../../internal/f-canvas/f-canvas.directive";
11
12
  export declare const CONNECTION_MARKER_START = "connection-marker-start";
12
13
  export declare const CONNECTION_MARKER_END = "connection-marker-end";
13
14
  export declare const CONNECTION_MARKER_START_SELECTED = "connection-marker-start-selected";
14
15
  export declare const CONNECTION_MARKER_END_SELECTED = "connection-marker-end-selected";
15
- export declare class FFlowComponent extends FFlowBase {
16
+ export declare class FFlowComponent extends FFlowBase implements IFlowConnectorParent {
16
17
  readonly CONNECTION_MARKER_START = "connection-marker-start";
17
18
  readonly CONNECTION_MARKER_END = "connection-marker-end";
18
19
  readonly CONNECTION_MARKER_START_SELECTED = "connection-marker-start-selected";
@@ -22,11 +23,13 @@ export declare class FFlowComponent extends FFlowBase {
22
23
  fConnectionsContainer: FConnectionsContainerBase;
23
24
  fItemsContainer: FItemsContainerBase;
24
25
  fBackground: FBackgroundBase;
25
- outlets: QueryList<FNodeOutletBase>;
26
- outputs: QueryList<FNodeOutputBase>;
27
- inputs: QueryList<FNodeInputBase>;
26
+ outlets: FNodeOutletBase[];
27
+ outputs: FNodeOutputBase[];
28
+ inputs: FNodeInputBase[];
28
29
  get transform(): ITransformModel;
29
30
  constructor(elementReference: ElementRef<SVGSVGElement>, changeDetectorRef: ChangeDetectorRef, ngZone: NgZone);
31
+ addConnector(connector: FConnectorBase): void;
32
+ removeConnector(connector: FConnectorBase): void;
30
33
  static ɵfac: i0.ɵɵFactoryDeclaration<FFlowComponent, never>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<FFlowComponent, "svg[fFlow]", never, { "id": { "alias": "id"; "required": false; }; }, {}, ["fNodesContainer", "fConnectionsContainer", "fItemsContainer", "outlets", "outputs", "inputs"], ["*"], false, [{ directive: typeof i1.FCanvasDirective; inputs: {}; outputs: {}; }]>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<FFlowComponent, "svg[fFlow]", never, { "id": { "alias": "id"; "required": false; }; }, {}, ["fNodesContainer", "fConnectionsContainer", "fItemsContainer"], ["*"], false, [{ directive: typeof i1.FCanvasDirective; inputs: {}; outputs: {}; }]>;
32
35
  }
@@ -0,0 +1,7 @@
1
+ import { FConnectorBase } from '../f-connectors';
2
+ import { InjectionToken } from '@angular/core';
3
+ export declare const F_FLOW_CONNECTOR_PARENT: InjectionToken<unknown>;
4
+ export interface IFlowConnectorParent {
5
+ addConnector(connector: FConnectorBase): void;
6
+ removeConnector(connector: FConnectorBase): void;
7
+ }
@@ -1,6 +1,7 @@
1
- import { Directive, Input } from '@angular/core';
1
+ import { Directive, Inject, Input, Optional, SkipSelf } from '@angular/core';
2
2
  import { BooleanExtensions } from '@foblex/core';
3
3
  import { F_NODE_INPUT_DIRECTIVE, FNodeInputBase } from './f-node-input-base';
4
+ import { F_FLOW_CONNECTOR_PARENT } from '../../f-flow/i-flow-connector-parent';
4
5
  import * as i0 from "@angular/core";
5
6
  let uniqueId = 0;
6
7
  export class FNodeInputDirective extends FNodeInputBase {
@@ -20,14 +21,19 @@ export class FNodeInputDirective extends FNodeInputBase {
20
21
  get hostElement() {
21
22
  return this.elementReference.nativeElement;
22
23
  }
23
- constructor(elementReference) {
24
+ constructor(elementReference, _parentFlow) {
24
25
  super();
25
26
  this.elementReference = elementReference;
27
+ this._parentFlow = _parentFlow;
26
28
  this.id = `f-node-input-${uniqueId++}`;
27
29
  this.multiple = true;
28
30
  this.isDisabled = false;
31
+ this._parentFlow?.addConnector(this);
29
32
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeInputDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
33
+ ngOnDestroy() {
34
+ this._parentFlow?.removeConnector(this);
35
+ }
36
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeInputDirective, deps: [{ token: i0.ElementRef }, { token: F_FLOW_CONNECTOR_PARENT, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
31
37
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: FNodeInputDirective, selector: "[fNodeInput]", inputs: { id: "id", fNodeInputColor: "fNodeInputColor", multiple: ["fNodeInputMultiple", "multiple"], disabled: ["fNodeInputDisabled", "disabled"] }, host: { properties: { "attr.id": "id", "class.f-node-input-multiple": "multiple", "class.f-node-input-disabled": "disabled", "class.f-node-input-not-connectable": "!canBeConnected" }, classAttribute: "f-component f-node-input" }, providers: [{ provide: F_NODE_INPUT_DIRECTIVE, useExisting: FNodeInputDirective }], usesInheritance: true, ngImport: i0 }); }
32
38
  }
33
39
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeInputDirective, decorators: [{
@@ -43,7 +49,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
43
49
  },
44
50
  providers: [{ provide: F_NODE_INPUT_DIRECTIVE, useExisting: FNodeInputDirective }],
45
51
  }]
46
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { id: [{
52
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
53
+ type: Inject,
54
+ args: [F_FLOW_CONNECTOR_PARENT]
55
+ }, {
56
+ type: Optional
57
+ }, {
58
+ type: SkipSelf
59
+ }] }]; }, propDecorators: { id: [{
47
60
  type: Input
48
61
  }], fNodeInputColor: [{
49
62
  type: Input,
@@ -55,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
55
68
  type: Input,
56
69
  args: ['fNodeInputDisabled']
57
70
  }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWNvbm5lY3RvcnMvZi1ub2RlLWlucHV0L2Ytbm9kZS1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFN0UsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO0FBYXpCLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxjQUFjO0lBUXJELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsSUFBSSxPQUFPLENBQUM7SUFDekMsQ0FBQztJQUtELElBQ29CLFFBQVE7UUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFvQixRQUFRLENBQUMsVUFBd0M7UUFDbkUsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNZLGdCQUF5QztRQUVuRCxLQUFLLEVBQUUsQ0FBQztRQUZFLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUFoQ3JDLE9BQUUsR0FBUSxnQkFBaUIsUUFBUSxFQUFHLEVBQUUsQ0FBQztRQVV6QyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBZWpDLGVBQVUsR0FBWSxLQUFLLENBQUM7SUFVcEMsQ0FBQzs4R0F0Q1UsbUJBQW1CO2tHQUFuQixtQkFBbUIsbWFBRm5CLENBQUUsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUU7OzJGQUV6RSxtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLDBCQUEwQjt3QkFDakMsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0Msc0NBQXNDLEVBQUUsaUJBQWlCO3FCQUMxRDtvQkFDRCxTQUFTLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLHFCQUFxQixFQUFFLENBQUU7aUJBQ3JGO2lHQUlpQixFQUFFO3NCQURqQixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7dUJBQUMsaUJBQWlCO2dCQVFSLFFBQVE7c0JBRHZCLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUlQLFFBQVE7c0JBRDNCLEtBQUs7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbkV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4L2NvcmUnO1xuaW1wb3J0IHsgRl9OT0RFX0lOUFVUX0RJUkVDVElWRSwgRk5vZGVJbnB1dEJhc2UgfSBmcm9tICcuL2Ytbm9kZS1pbnB1dC1iYXNlJztcblxubGV0IHVuaXF1ZUlkOiBudW1iZXIgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2ZOb2RlSW5wdXRdXCIsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICBjbGFzczogXCJmLWNvbXBvbmVudCBmLW5vZGUtaW5wdXRcIixcbiAgICAnW2NsYXNzLmYtbm9kZS1pbnB1dC1tdWx0aXBsZV0nOiAnbXVsdGlwbGUnLFxuICAgICdbY2xhc3MuZi1ub2RlLWlucHV0LWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5mLW5vZGUtaW5wdXQtbm90LWNvbm5lY3RhYmxlXSc6ICchY2FuQmVDb25uZWN0ZWQnLFxuICB9LFxuICBwcm92aWRlcnM6IFsgeyBwcm92aWRlOiBGX05PREVfSU5QVVRfRElSRUNUSVZFLCB1c2VFeGlzdGluZzogRk5vZGVJbnB1dERpcmVjdGl2ZSB9IF0sXG59KVxuZXhwb3J0IGNsYXNzIEZOb2RlSW5wdXREaXJlY3RpdmUgZXh0ZW5kcyBGTm9kZUlucHV0QmFzZSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGlkOiBhbnkgPSBgZi1ub2RlLWlucHV0LSR7IHVuaXF1ZUlkKysgfWA7XG5cbiAgQElucHV0KCdmTm9kZUlucHV0Q29sb3InKVxuICBwdWJsaWMgZk5vZGVJbnB1dENvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGdldCBjb2xvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZOb2RlSW5wdXRDb2xvciB8fCAnYmxhY2snO1xuICB9XG5cbiAgQElucHV0KCdmTm9kZUlucHV0TXVsdGlwbGUnKVxuICBwdWJsaWMgb3ZlcnJpZGUgbXVsdGlwbGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgnZk5vZGVJbnB1dERpc2FibGVkJylcbiAgcHVibGljIG92ZXJyaWRlIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSBCb29sZWFuRXh0ZW5zaW9ucy5jYXN0VG9Cb29sZWFuKGlzRGlzYWJsZWQpO1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGhvc3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGVsZW1lbnRSZWZlcmVuY2U6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWNvbm5lY3RvcnMvZi1ub2RlLWlucHV0L2Ytbm9kZS1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sc0NBQXNDLENBQUM7O0FBRXJHLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztBQWF6QixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsY0FBYztJQVFyRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDO0lBQ3pDLENBQUM7SUFLRCxJQUNvQixRQUFRO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBb0IsUUFBUSxDQUFDLFVBQXdDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBSUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFDWSxnQkFBeUMsRUFDZ0IsV0FBa0M7UUFFckcsS0FBSyxFQUFFLENBQUM7UUFIRSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ2dCLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQWpDdkYsT0FBRSxHQUFRLGdCQUFpQixRQUFRLEVBQUcsRUFBRSxDQUFDO1FBVXpDLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFlakMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQVdsQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhHQTVDVSxtQkFBbUIsNENBb0NsQix1QkFBdUI7a0dBcEN4QixtQkFBbUIsbWFBRm5CLENBQUUsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLENBQUU7OzJGQUV6RSxtQkFBbUI7a0JBWC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLDBCQUEwQjt3QkFDakMsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0MsK0JBQStCLEVBQUUsVUFBVTt3QkFDM0Msc0NBQXNDLEVBQUUsaUJBQWlCO3FCQUMxRDtvQkFDRCxTQUFTLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLHFCQUFxQixFQUFFLENBQUU7aUJBQ3JGOzswQkFxQ00sTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUFHLFFBQVE7OzBCQUFJLFFBQVE7NENBakMxQyxFQUFFO3NCQURqQixLQUFLO2dCQUlDLGVBQWU7c0JBRHJCLEtBQUs7dUJBQUMsaUJBQWlCO2dCQVFSLFFBQVE7c0JBRHZCLEtBQUs7dUJBQUMsb0JBQW9CO2dCQUlQLFFBQVE7c0JBRDNCLEtBQUs7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQm9vbGVhbkV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4L2NvcmUnO1xuaW1wb3J0IHsgRl9OT0RFX0lOUFVUX0RJUkVDVElWRSwgRk5vZGVJbnB1dEJhc2UgfSBmcm9tICcuL2Ytbm9kZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IEZfRkxPV19DT05ORUNUT1JfUEFSRU5ULCBJRmxvd0Nvbm5lY3RvclBhcmVudCB9IGZyb20gJy4uLy4uL2YtZmxvdy9pLWZsb3ctY29ubmVjdG9yLXBhcmVudCc7XG5cbmxldCB1bmlxdWVJZDogbnVtYmVyID0gMDtcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIltmTm9kZUlucHV0XVwiLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgY2xhc3M6IFwiZi1jb21wb25lbnQgZi1ub2RlLWlucHV0XCIsXG4gICAgJ1tjbGFzcy5mLW5vZGUtaW5wdXQtbXVsdGlwbGVdJzogJ211bHRpcGxlJyxcbiAgICAnW2NsYXNzLmYtbm9kZS1pbnB1dC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuZi1ub2RlLWlucHV0LW5vdC1jb25uZWN0YWJsZV0nOiAnIWNhbkJlQ29ubmVjdGVkJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogRl9OT0RFX0lOUFVUX0RJUkVDVElWRSwgdXNlRXhpc3Rpbmc6IEZOb2RlSW5wdXREaXJlY3RpdmUgfSBdLFxufSlcbmV4cG9ydCBjbGFzcyBGTm9kZUlucHV0RGlyZWN0aXZlIGV4dGVuZHMgRk5vZGVJbnB1dEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBpZDogYW55ID0gYGYtbm9kZS1pbnB1dC0keyB1bmlxdWVJZCsrIH1gO1xuXG4gIEBJbnB1dCgnZk5vZGVJbnB1dENvbG9yJylcbiAgcHVibGljIGZOb2RlSW5wdXRDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBnZXQgY29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5mTm9kZUlucHV0Q29sb3IgfHwgJ2JsYWNrJztcbiAgfVxuXG4gIEBJbnB1dCgnZk5vZGVJbnB1dE11bHRpcGxlJylcbiAgcHVibGljIG92ZXJyaWRlIG11bHRpcGxlOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoJ2ZOb2RlSW5wdXREaXNhYmxlZCcpXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgZGlzYWJsZWQoaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gQm9vbGVhbkV4dGVuc2lvbnMuY2FzdFRvQm9vbGVhbihpc0Rpc2FibGVkKTtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCBob3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgIEBJbmplY3QoRl9GTE9XX0NPTk5FQ1RPUl9QQVJFTlQpIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgX3BhcmVudEZsb3c/OiBJRmxvd0Nvbm5lY3RvclBhcmVudCxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9wYXJlbnRGbG93Py5hZGRDb25uZWN0b3IodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcGFyZW50Rmxvdz8ucmVtb3ZlQ29ubmVjdG9yKHRoaXMpO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,7 @@
1
- import { Directive, Input } from '@angular/core';
1
+ import { Directive, Inject, Input, Optional, SkipSelf } from '@angular/core';
2
2
  import { BooleanExtensions } from '@foblex/core';
3
3
  import { F_NODE_OUTLET_DIRECTIVE, FNodeOutletBase } from './f-node-outlet-base';
4
+ import { F_FLOW_CONNECTOR_PARENT } from '../../f-flow/i-flow-connector-parent';
4
5
  import * as i0 from "@angular/core";
5
6
  let uniqueId = 0;
6
7
  export class FNodeOutletDirective extends FNodeOutletBase {
@@ -17,16 +18,21 @@ export class FNodeOutletDirective extends FNodeOutletBase {
17
18
  get hostElement() {
18
19
  return this.elementReference.nativeElement;
19
20
  }
20
- constructor(elementReference) {
21
+ constructor(elementReference, _parentFlow) {
21
22
  super();
22
23
  this.elementReference = elementReference;
24
+ this._parentFlow = _parentFlow;
23
25
  this.id = `f-node-outlet-${uniqueId++}`;
24
26
  this.color = 'black';
25
27
  this.name = '';
26
28
  this.isDisabled = false;
27
29
  this.isConnectionFromOutlet = false;
30
+ this._parentFlow?.addConnector(this);
28
31
  }
29
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutletDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
32
+ ngOnDestroy() {
33
+ this._parentFlow?.removeConnector(this);
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutletDirective, deps: [{ token: i0.ElementRef }, { token: F_FLOW_CONNECTOR_PARENT, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
30
36
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: FNodeOutletDirective, selector: "[fNodeOutlet]", inputs: { id: "id", color: ["fNodeOutletColor", "color"], name: "name", disabled: ["fNodeOutletDisabled", "disabled"], isConnectionFromOutlet: "isConnectionFromOutlet" }, host: { properties: { "attr.id": "id", "class.f-node-outlet-disabled": "disabled" }, classAttribute: "f-component f-node-outlet" }, providers: [{ provide: F_NODE_OUTLET_DIRECTIVE, useExisting: FNodeOutletDirective }], usesInheritance: true, ngImport: i0 }); }
31
37
  }
32
38
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutletDirective, decorators: [{
@@ -40,7 +46,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
40
46
  },
41
47
  providers: [{ provide: F_NODE_OUTLET_DIRECTIVE, useExisting: FNodeOutletDirective }],
42
48
  }]
43
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { id: [{
49
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
50
+ type: Inject,
51
+ args: [F_FLOW_CONNECTOR_PARENT]
52
+ }, {
53
+ type: Optional
54
+ }, {
55
+ type: SkipSelf
56
+ }] }]; }, propDecorators: { id: [{
44
57
  type: Input
45
58
  }], color: [{
46
59
  type: Input,
@@ -53,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
53
66
  }], isConnectionFromOutlet: [{
54
67
  type: Input
55
68
  }] } });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW91dGxldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1jb25uZWN0b3JzL2Ytbm9kZS1vdXRsZXQvZi1ub2RlLW91dGxldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFaEYsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO0FBV3pCLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBV3ZELElBQ29CLFFBQVE7UUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFvQixRQUFRLENBQUMsVUFBd0M7UUFDbkUsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFPRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNVLGdCQUF5QztRQUVqRCxLQUFLLEVBQUUsQ0FBQztRQUZBLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUEvQm5DLE9BQUUsR0FBVyxpQkFBa0IsUUFBUSxFQUFHLEVBQUUsQ0FBQztRQUc3QyxVQUFLLEdBQVcsT0FBTyxDQUFDO1FBR3hCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFlMUIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUdwQiwyQkFBc0IsR0FBWSxLQUFLLENBQUE7SUFVdkQsQ0FBQzs4R0FyQ1Usb0JBQW9CO2tHQUFwQixvQkFBb0IsdVZBRnBCLENBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUU7OzJGQUUzRSxvQkFBb0I7a0JBVGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLDJCQUEyQjt3QkFDbEMsZ0NBQWdDLEVBQUUsVUFBVTtxQkFDN0M7b0JBQ0QsU0FBUyxFQUFFLENBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFFO2lCQUN2RjtpR0FJaUIsRUFBRTtzQkFEakIsS0FBSztnQkFJVSxLQUFLO3NCQURwQixLQUFLO3VCQUFDLGtCQUFrQjtnQkFJVCxJQUFJO3NCQURuQixLQUFLO2dCQUljLFFBQVE7c0JBRDNCLEtBQUs7dUJBQUMscUJBQXFCO2dCQWdCWixzQkFBc0I7c0JBRHJDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuRXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGX05PREVfT1VUTEVUX0RJUkVDVElWRSwgRk5vZGVPdXRsZXRCYXNlIH0gZnJvbSAnLi9mLW5vZGUtb3V0bGV0LWJhc2UnO1xuXG5sZXQgdW5pcXVlSWQ6IG51bWJlciA9IDA7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZk5vZGVPdXRsZXRdXCIsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICBjbGFzczogXCJmLWNvbXBvbmVudCBmLW5vZGUtb3V0bGV0XCIsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0bGV0LWRpc2FibGVkXSc6ICdkaXNhYmxlZCdcbiAgfSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogRl9OT0RFX09VVExFVF9ESVJFQ1RJVkUsIHVzZUV4aXN0aW5nOiBGTm9kZU91dGxldERpcmVjdGl2ZSB9IF0sXG59KVxuZXhwb3J0IGNsYXNzIEZOb2RlT3V0bGV0RGlyZWN0aXZlIGV4dGVuZHMgRk5vZGVPdXRsZXRCYXNlIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyA9IGBmLW5vZGUtb3V0bGV0LSR7IHVuaXF1ZUlkKysgfWA7XG5cbiAgQElucHV0KCdmTm9kZU91dGxldENvbG9yJylcbiAgcHVibGljIG92ZXJyaWRlIGNvbG9yOiBzdHJpbmcgPSAnYmxhY2snO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBuYW1lOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoJ2ZOb2RlT3V0bGV0RGlzYWJsZWQnKVxuICBwdWJsaWMgb3ZlcnJpZGUgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgc2V0IGRpc2FibGVkKGlzRGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgfCBzdHJpbmcpIHtcbiAgICBjb25zdCB2YWx1ZSA9IEJvb2xlYW5FeHRlbnNpb25zLmNhc3RUb0Jvb2xlYW4oaXNEaXNhYmxlZCk7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBpc0Nvbm5lY3Rpb25Gcm9tT3V0bGV0OiBib29sZWFuID0gZmFsc2VcblxuICBwdWJsaWMgZ2V0IGhvc3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW91dGxldC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1jb25uZWN0b3JzL2Ytbm9kZS1vdXRsZXQvZi1ub2RlLW91dGxldC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sc0NBQXNDLENBQUM7O0FBRXJHLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztBQVd6QixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQVd2RCxJQUNvQixRQUFRO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBb0IsUUFBUSxDQUFDLFVBQXdDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBT0QsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFDVSxnQkFBeUMsRUFDZ0IsV0FBa0M7UUFFbkcsS0FBSyxFQUFFLENBQUM7UUFIQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ2dCLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQWhDckYsT0FBRSxHQUFXLGlCQUFrQixRQUFRLEVBQUcsRUFBRSxDQUFDO1FBRzdDLFVBQUssR0FBVyxPQUFPLENBQUM7UUFHeEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQWUxQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBR3BCLDJCQUFzQixHQUFZLEtBQUssQ0FBQTtRQVdyRCxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDOzhHQTNDVSxvQkFBb0IsNENBbUNyQix1QkFBdUI7a0dBbkN0QixvQkFBb0IsdVZBRnBCLENBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUU7OzJGQUUzRSxvQkFBb0I7a0JBVGhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLElBQUksRUFBRTt3QkFDSixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLDJCQUEyQjt3QkFDbEMsZ0NBQWdDLEVBQUUsVUFBVTtxQkFDN0M7b0JBQ0QsU0FBUyxFQUFFLENBQUUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFFO2lCQUN2Rjs7MEJBb0NJLE1BQU07MkJBQUMsdUJBQXVCOzswQkFBRyxRQUFROzswQkFBSSxRQUFROzRDQWhDeEMsRUFBRTtzQkFEakIsS0FBSztnQkFJVSxLQUFLO3NCQURwQixLQUFLO3VCQUFDLGtCQUFrQjtnQkFJVCxJQUFJO3NCQURuQixLQUFLO2dCQUljLFFBQVE7c0JBRDNCLEtBQUs7dUJBQUMscUJBQXFCO2dCQWdCWixzQkFBc0I7c0JBRHJDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuRXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGX05PREVfT1VUTEVUX0RJUkVDVElWRSwgRk5vZGVPdXRsZXRCYXNlIH0gZnJvbSAnLi9mLW5vZGUtb3V0bGV0LWJhc2UnO1xuaW1wb3J0IHsgRl9GTE9XX0NPTk5FQ1RPUl9QQVJFTlQsIElGbG93Q29ubmVjdG9yUGFyZW50IH0gZnJvbSAnLi4vLi4vZi1mbG93L2ktZmxvdy1jb25uZWN0b3ItcGFyZW50JztcblxubGV0IHVuaXF1ZUlkOiBudW1iZXIgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2ZOb2RlT3V0bGV0XVwiLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgY2xhc3M6IFwiZi1jb21wb25lbnQgZi1ub2RlLW91dGxldFwiLFxuICAgICdbY2xhc3MuZi1ub2RlLW91dGxldC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnXG4gIH0sXG4gIHByb3ZpZGVyczogWyB7IHByb3ZpZGU6IEZfTk9ERV9PVVRMRVRfRElSRUNUSVZFLCB1c2VFeGlzdGluZzogRk5vZGVPdXRsZXREaXJlY3RpdmUgfSBdLFxufSlcbmV4cG9ydCBjbGFzcyBGTm9kZU91dGxldERpcmVjdGl2ZSBleHRlbmRzIEZOb2RlT3V0bGV0QmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGlkOiBzdHJpbmcgPSBgZi1ub2RlLW91dGxldC0keyB1bmlxdWVJZCsrIH1gO1xuXG4gIEBJbnB1dCgnZk5vZGVPdXRsZXRDb2xvcicpXG4gIHB1YmxpYyBvdmVycmlkZSBjb2xvcjogc3RyaW5nID0gJ2JsYWNrJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCdmTm9kZU91dGxldERpc2FibGVkJylcbiAgcHVibGljIG92ZXJyaWRlIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSBCb29sZWFuRXh0ZW5zaW9ucy5jYXN0VG9Cb29sZWFuKGlzRGlzYWJsZWQpO1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgaXNDb25uZWN0aW9uRnJvbU91dGxldDogYm9vbGVhbiA9IGZhbHNlXG5cbiAgcHVibGljIGdldCBob3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQEluamVjdChGX0ZMT1dfQ09OTkVDVE9SX1BBUkVOVCkgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcHJpdmF0ZSBfcGFyZW50Rmxvdz86IElGbG93Q29ubmVjdG9yUGFyZW50LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3BhcmVudEZsb3c/LmFkZENvbm5lY3Rvcih0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wYXJlbnRGbG93Py5yZW1vdmVDb25uZWN0b3IodGhpcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,7 @@
1
- import { Directive, Input } from '@angular/core';
1
+ import { Directive, Inject, Input, Optional, SkipSelf } from '@angular/core';
2
2
  import { BooleanExtensions } from '@foblex/core';
3
3
  import { FNodeOutputBase, F_NODE_OUTPUT_DIRECTIVE } from './f-node-output-base';
4
+ import { F_FLOW_CONNECTOR_PARENT } from '../../f-flow/i-flow-connector-parent';
4
5
  import * as i0 from "@angular/core";
5
6
  let uniqueId = 0;
6
7
  export class FNodeOutputDirective extends FNodeOutputBase {
@@ -17,15 +18,20 @@ export class FNodeOutputDirective extends FNodeOutputBase {
17
18
  get hostElement() {
18
19
  return this.elementReference.nativeElement;
19
20
  }
20
- constructor(elementReference) {
21
+ constructor(elementReference, _parentFlow) {
21
22
  super();
22
23
  this.elementReference = elementReference;
24
+ this._parentFlow = _parentFlow;
23
25
  this.id = `f-node-output-${uniqueId++}`;
24
26
  this.color = 'black';
25
27
  this.name = '';
26
28
  this.isDisabled = false;
29
+ this._parentFlow?.addConnector(this);
27
30
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutputDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
31
+ ngOnDestroy() {
32
+ this._parentFlow?.removeConnector(this);
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutputDirective, deps: [{ token: i0.ElementRef }, { token: F_FLOW_CONNECTOR_PARENT, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive }); }
29
35
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.5", type: FNodeOutputDirective, selector: "[fNodeOutput]", inputs: { id: "id", color: ["fNodeOutputColor", "color"], name: "name", disabled: ["fNodeOutputDisabled", "disabled"] }, host: { properties: { "attr.id": "id", "class.f-node-output-disabled": "disabled", "class.f-node-output-connected": "isConnected" }, classAttribute: "f-component f-node-output" }, providers: [{ provide: F_NODE_OUTPUT_DIRECTIVE, useExisting: FNodeOutputDirective }], usesInheritance: true, ngImport: i0 }); }
30
36
  }
31
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FNodeOutputDirective, decorators: [{
@@ -40,7 +46,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
40
46
  },
41
47
  providers: [{ provide: F_NODE_OUTPUT_DIRECTIVE, useExisting: FNodeOutputDirective }],
42
48
  }]
43
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { id: [{
49
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: undefined, decorators: [{
50
+ type: Inject,
51
+ args: [F_FLOW_CONNECTOR_PARENT]
52
+ }, {
53
+ type: Optional
54
+ }, {
55
+ type: SkipSelf
56
+ }] }]; }, propDecorators: { id: [{
44
57
  type: Input
45
58
  }], color: [{
46
59
  type: Input,
@@ -51,4 +64,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
51
64
  type: Input,
52
65
  args: ['fNodeOutputDisabled']
53
66
  }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW91dHB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1jb25uZWN0b3JzL2Ytbm9kZS1vdXRwdXQvZi1ub2RlLW91dHB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFFaEYsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO0FBWXpCLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBV3ZELElBQ29CLFFBQVE7UUFDMUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFvQixRQUFRLENBQUMsVUFBd0M7UUFDbkUsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNVLGdCQUF5QztRQUVqRCxLQUFLLEVBQUUsQ0FBQztRQUZBLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7UUE1Qm5DLE9BQUUsR0FBUSxpQkFBa0IsUUFBUSxFQUFHLEVBQUUsQ0FBQztRQUcxQyxVQUFLLEdBQVcsT0FBTyxDQUFDO1FBR3hCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFlMUIsZUFBVSxHQUFZLEtBQUssQ0FBQztJQVVwQyxDQUFDOzhHQWxDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQixxVkFGcEIsQ0FBRSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBRTs7MkZBRTNFLG9CQUFvQjtrQkFWaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNKLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixLQUFLLEVBQUUsMkJBQTJCO3dCQUNsQyxnQ0FBZ0MsRUFBRSxVQUFVO3dCQUM1QyxpQ0FBaUMsRUFBRSxhQUFhO3FCQUNqRDtvQkFDRCxTQUFTLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUU7aUJBQ3ZGO2lHQUlpQixFQUFFO3NCQURqQixLQUFLO2dCQUlVLEtBQUs7c0JBRHBCLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUlULElBQUk7c0JBRG5CLEtBQUs7Z0JBSWMsUUFBUTtzQkFEM0IsS0FBSzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuRXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGTm9kZU91dHB1dEJhc2UsIEZfTk9ERV9PVVRQVVRfRElSRUNUSVZFIH0gZnJvbSAnLi9mLW5vZGUtb3V0cHV0LWJhc2UnO1xuXG5sZXQgdW5pcXVlSWQ6IG51bWJlciA9IDA7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbZk5vZGVPdXRwdXRdXCIsXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICBjbGFzczogXCJmLWNvbXBvbmVudCBmLW5vZGUtb3V0cHV0XCIsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0cHV0LWRpc2FibGVkXSc6ICdkaXNhYmxlZCcsXG4gICAgJ1tjbGFzcy5mLW5vZGUtb3V0cHV0LWNvbm5lY3RlZF0nOiAnaXNDb25uZWN0ZWQnXG4gIH0sXG4gIHByb3ZpZGVyczogWyB7IHByb3ZpZGU6IEZfTk9ERV9PVVRQVVRfRElSRUNUSVZFLCB1c2VFeGlzdGluZzogRk5vZGVPdXRwdXREaXJlY3RpdmUgfSBdLFxufSlcbmV4cG9ydCBjbGFzcyBGTm9kZU91dHB1dERpcmVjdGl2ZSBleHRlbmRzIEZOb2RlT3V0cHV0QmFzZSB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIGlkOiBhbnkgPSBgZi1ub2RlLW91dHB1dC0keyB1bmlxdWVJZCsrIH1gO1xuXG4gIEBJbnB1dCgnZk5vZGVPdXRwdXRDb2xvcicpXG4gIHB1YmxpYyBvdmVycmlkZSBjb2xvcjogc3RyaW5nID0gJ2JsYWNrJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgbmFtZTogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCdmTm9kZU91dHB1dERpc2FibGVkJylcbiAgcHVibGljIG92ZXJyaWRlIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHNldCBkaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgc3RyaW5nKSB7XG4gICAgY29uc3QgdmFsdWUgPSBCb29sZWFuRXh0ZW5zaW9ucy5jYXN0VG9Cb29sZWFuKGlzRGlzYWJsZWQpO1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmlzRGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGhvc3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG4iXX0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1ub2RlLW91dHB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1jb25uZWN0b3JzL2Ytbm9kZS1vdXRwdXQvZi1ub2RlLW91dHB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sc0NBQXNDLENBQUM7O0FBRXJHLElBQUksUUFBUSxHQUFXLENBQUMsQ0FBQztBQVl6QixNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQVd2RCxJQUNvQixRQUFRO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBb0IsUUFBUSxDQUFDLFVBQXdDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBSUQsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFDWSxnQkFBeUMsRUFDZ0IsV0FBa0M7UUFFckcsS0FBSyxFQUFFLENBQUM7UUFIRSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ2dCLGdCQUFXLEdBQVgsV0FBVyxDQUF1QjtRQTdCdkYsT0FBRSxHQUFRLGlCQUFrQixRQUFRLEVBQUcsRUFBRSxDQUFDO1FBRzFDLFVBQUssR0FBVyxPQUFPLENBQUM7UUFHeEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQWUxQixlQUFVLEdBQVksS0FBSyxDQUFDO1FBV2xDLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7OEdBeENVLG9CQUFvQiw0Q0FnQ25CLHVCQUF1QjtrR0FoQ3hCLG9CQUFvQixxVkFGcEIsQ0FBRSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBRTs7MkZBRTNFLG9CQUFvQjtrQkFWaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsSUFBSSxFQUFFO3dCQUNKLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixLQUFLLEVBQUUsMkJBQTJCO3dCQUNsQyxnQ0FBZ0MsRUFBRSxVQUFVO3dCQUM1QyxpQ0FBaUMsRUFBRSxhQUFhO3FCQUNqRDtvQkFDRCxTQUFTLEVBQUUsQ0FBRSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUU7aUJBQ3ZGOzswQkFpQ00sTUFBTTsyQkFBQyx1QkFBdUI7OzBCQUFHLFFBQVE7OzBCQUFJLFFBQVE7NENBN0IxQyxFQUFFO3NCQURqQixLQUFLO2dCQUlVLEtBQUs7c0JBRHBCLEtBQUs7dUJBQUMsa0JBQWtCO2dCQUlULElBQUk7c0JBRG5CLEtBQUs7Z0JBSWMsUUFBUTtzQkFEM0IsS0FBSzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFNraXBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCb29sZWFuRXh0ZW5zaW9ucyB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGTm9kZU91dHB1dEJhc2UsIEZfTk9ERV9PVVRQVVRfRElSRUNUSVZFIH0gZnJvbSAnLi9mLW5vZGUtb3V0cHV0LWJhc2UnO1xuaW1wb3J0IHsgRl9GTE9XX0NPTk5FQ1RPUl9QQVJFTlQsIElGbG93Q29ubmVjdG9yUGFyZW50IH0gZnJvbSAnLi4vLi4vZi1mbG93L2ktZmxvdy1jb25uZWN0b3ItcGFyZW50JztcblxubGV0IHVuaXF1ZUlkOiBudW1iZXIgPSAwO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2ZOb2RlT3V0cHV0XVwiLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgY2xhc3M6IFwiZi1jb21wb25lbnQgZi1ub2RlLW91dHB1dFwiLFxuICAgICdbY2xhc3MuZi1ub2RlLW91dHB1dC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MuZi1ub2RlLW91dHB1dC1jb25uZWN0ZWRdJzogJ2lzQ29ubmVjdGVkJ1xuICB9LFxuICBwcm92aWRlcnM6IFsgeyBwcm92aWRlOiBGX05PREVfT1VUUFVUX0RJUkVDVElWRSwgdXNlRXhpc3Rpbmc6IEZOb2RlT3V0cHV0RGlyZWN0aXZlIH0gXSxcbn0pXG5leHBvcnQgY2xhc3MgRk5vZGVPdXRwdXREaXJlY3RpdmUgZXh0ZW5kcyBGTm9kZU91dHB1dEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvdmVycmlkZSBpZDogYW55ID0gYGYtbm9kZS1vdXRwdXQtJHsgdW5pcXVlSWQrKyB9YDtcblxuICBASW5wdXQoJ2ZOb2RlT3V0cHV0Q29sb3InKVxuICBwdWJsaWMgb3ZlcnJpZGUgY29sb3I6IHN0cmluZyA9ICdibGFjayc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG92ZXJyaWRlIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgnZk5vZGVPdXRwdXREaXNhYmxlZCcpXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBzZXQgZGlzYWJsZWQoaXNEaXNhYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gQm9vbGVhbkV4dGVuc2lvbnMuY2FzdFRvQm9vbGVhbihpc0Rpc2FibGVkKTtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy5pc0Rpc2FibGVkID0gdmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCBob3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB8IFNWR0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgIEBJbmplY3QoRl9GTE9XX0NPTk5FQ1RPUl9QQVJFTlQpIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgX3BhcmVudEZsb3c/OiBJRmxvd0Nvbm5lY3RvclBhcmVudCxcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9wYXJlbnRGbG93Py5hZGRDb25uZWN0b3IodGhpcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fcGFyZW50Rmxvdz8ucmVtb3ZlQ29ubmVjdG9yKHRoaXMpO1xuICB9XG59XG4iXX0=
@@ -11,6 +11,7 @@ export class FFlowBase {
11
11
  this.changeDetectorRef = changeDetectorRef;
12
12
  this.ngZone = ngZone;
13
13
  this.onDestroy = new Subject();
14
+ this.connectorChanges = new Subject();
14
15
  }
15
16
  ngAfterContentInit() {
16
17
  this.subscribeOnComponentsChanges();
@@ -19,19 +20,21 @@ export class FFlowBase {
19
20
  const changes = [
20
21
  this.fNodesContainer.fNodes.changes,
21
22
  this.fConnectionsContainer.fConnections.changes,
22
- this.outlets.changes,
23
- this.outputs.changes,
24
- this.inputs.changes
23
+ this.connectorChanges
25
24
  ];
26
25
  merge(...changes).pipe(startWith(null), takeUntil(this.onDestroy)).subscribe(() => {
27
26
  const changedOrDestroyed = merge(...changes, this.onDestroy);
28
27
  merge(this.fNodesContainer.stateChanges).pipe(startWith(null), takeUntil(changedOrDestroyed)).subscribe(() => {
29
28
  this.fConnectionsContainer.fConnections.forEach((connection) => {
30
- connection.fromTo = {
31
- output: this.outputs.find((x) => x.id === connection.outputId),
32
- input: this.inputs.find((x) => x.id === connection.inputId)
33
- };
34
- connection.initialize();
29
+ const output = this.outputs.find((x) => x.id === connection.outputId);
30
+ const input = this.inputs.find((x) => x.id === connection.inputId);
31
+ if (input && output) {
32
+ connection.fromTo = {
33
+ output,
34
+ input
35
+ };
36
+ connection.initialize();
37
+ }
35
38
  });
36
39
  });
37
40
  });
@@ -46,4 +49,4 @@ export class FFlowBase {
46
49
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FFlowBase, decorators: [{
47
50
  type: Directive
48
51
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1mbG93L2YtZmxvdy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUMsU0FBUyxFQUFjLGNBQWMsRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFJekksT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLNUQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQVksa0JBQWtCLENBQUMsQ0FBQztBQUdsRixNQUFNLE9BQWdCLFNBQVM7SUFJN0IsSUFBVyxXQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBc0JELFlBQ1UsZ0JBQTJDLEVBQzNDLGlCQUFvQyxFQUNwQyxNQUFjO1FBRmQscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUF2QlAsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO0lBeUJoRSxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFUyw0QkFBNEI7UUFDcEMsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPO1lBQ25DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsT0FBTztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztTQUNwQixDQUFDO1FBRUYsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFN0QsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBRTNHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQzdELFVBQVUsQ0FBQyxNQUFNLEdBQUc7d0JBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFFO3dCQUMvRCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBRTtxQkFDN0QsQ0FBQztvQkFDRixVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOzhHQXBFbUIsU0FBUztrR0FBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQUQ5QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5qZWN0aW9uVG9rZW4sIE5nWm9uZSwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElIYXNIb3N0RWxlbWVudCwgSVRyYW5zZm9ybU1vZGVsIH0gZnJvbSAnQGZvYmxleC9jb3JlJztcbmltcG9ydCB7IEZJdGVtc0NvbnRhaW5lckJhc2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZOb2RlSW5wdXRCYXNlLCBGTm9kZU91dGxldEJhc2UsIEZOb2RlT3V0cHV0QmFzZSB9IGZyb20gJy4uL2YtY29ubmVjdG9ycyc7XG5pbXBvcnQgeyBtZXJnZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZCYWNrZ3JvdW5kQmFzZSB9IGZyb20gJy4uLy4uL2ludGVybmFsJztcbmltcG9ydCB7IEZDb25uZWN0aW9uc0NvbnRhaW5lckJhc2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZOb2Rlc0NvbnRhaW5lckJhc2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcblxuZXhwb3J0IGNvbnN0IEZfRkxPV19DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48RkZsb3dCYXNlPignRl9GTE9XX0NPTVBPTkVOVCcpO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGRmxvd0Jhc2UgaW1wbGVtZW50cyBJSGFzSG9zdEVsZW1lbnQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIGFic3RyYWN0IGlkOiBhbnk7XG5cbiAgcHVibGljIGdldCBob3N0RWxlbWVudCgpOiBTVkdTVkdFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmZXJlbmNlLm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IG9uRGVzdHJveTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cblxuICBwdWJsaWMgYWJzdHJhY3QgZk5vZGVzQ29udGFpbmVyOiBGTm9kZXNDb250YWluZXJCYXNlO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBmQ29ubmVjdGlvbnNDb250YWluZXI6IEZDb25uZWN0aW9uc0NvbnRhaW5lckJhc2U7XG5cblxuICBwdWJsaWMgYWJzdHJhY3QgZkl0ZW1zQ29udGFpbmVyOiBGSXRlbXNDb250YWluZXJCYXNlO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBmQmFja2dyb3VuZDogRkJhY2tncm91bmRCYXNlO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCB0cmFuc2Zvcm06IElUcmFuc2Zvcm1Nb2RlbDtcblxuICBwdWJsaWMgYWJzdHJhY3Qgb3V0bGV0czogUXVlcnlMaXN0PEZOb2RlT3V0bGV0QmFzZT47XG5cbiAgcHVibGljIGFic3RyYWN0IG91dHB1dHM6IFF1ZXJ5TGlzdDxGTm9kZU91dHB1dEJhc2U+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBpbnB1dHM6IFF1ZXJ5TGlzdDxGTm9kZUlucHV0QmFzZT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZjxTVkdTVkdFbGVtZW50PixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZU9uQ29tcG9uZW50c0NoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVPbkNvbXBvbmVudHNDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBbXG4gICAgICB0aGlzLmZOb2Rlc0NvbnRhaW5lci5mTm9kZXMuY2hhbmdlcyxcbiAgICAgIHRoaXMuZkNvbm5lY3Rpb25zQ29udGFpbmVyLmZDb25uZWN0aW9ucy5jaGFuZ2VzLFxuICAgICAgdGhpcy5vdXRsZXRzLmNoYW5nZXMsXG4gICAgICB0aGlzLm91dHB1dHMuY2hhbmdlcyxcbiAgICAgIHRoaXMuaW5wdXRzLmNoYW5nZXNcbiAgICBdO1xuXG4gICAgbWVyZ2UoLi4uY2hhbmdlcykucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkT3JEZXN0cm95ZWQgPSBtZXJnZSguLi5jaGFuZ2VzLCB0aGlzLm9uRGVzdHJveSk7XG5cbiAgICAgIG1lcmdlKHRoaXMuZk5vZGVzQ29udGFpbmVyLnN0YXRlQ2hhbmdlcykucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbChjaGFuZ2VkT3JEZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMuZkNvbm5lY3Rpb25zQ29udGFpbmVyLmZDb25uZWN0aW9ucy5mb3JFYWNoKChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29ubmVjdGlvbi5mcm9tVG8gPSB7XG4gICAgICAgICAgICBvdXRwdXQ6IHRoaXMub3V0cHV0cy5maW5kKCh4KSA9PiB4LmlkID09PSBjb25uZWN0aW9uLm91dHB1dElkKSEsXG4gICAgICAgICAgICBpbnB1dDogdGhpcy5pbnB1dHMuZmluZCgoeCkgPT4geC5pZCA9PT0gY29ubmVjdGlvbi5pbnB1dElkKSFcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbm5lY3Rpb24uaW5pdGlhbGl6ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1mbG93L2YtZmxvdy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsY0FBYyxFQUlmLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFZLGtCQUFrQixDQUFDLENBQUM7QUFHbEYsTUFBTSxPQUFnQixTQUFTO0lBSTdCLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDN0MsQ0FBQztJQXdCRCxZQUNZLGdCQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsTUFBYztRQUZkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMkI7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekJULGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQW9CekQscUJBQWdCLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7SUFPN0QsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRVMsNEJBQTRCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDL0MsSUFBSSxDQUFDLGdCQUFnQjtTQUN0QixDQUFDO1FBRUYsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFN0QsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBRTNHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNuRSxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUU7d0JBQ25CLFVBQVUsQ0FBQyxNQUFNLEdBQUc7NEJBQ2xCLE1BQU07NEJBQ04sS0FBSzt5QkFDTixDQUFDO3dCQUNGLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztxQkFDekI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBeEVtQixTQUFTO2tHQUFULFNBQVM7OzJGQUFULFNBQVM7a0JBRDlCLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElIYXNIb3N0RWxlbWVudCwgSVRyYW5zZm9ybU1vZGVsIH0gZnJvbSAnQGZvYmxleC9jb3JlJztcbmltcG9ydCB7IEZJdGVtc0NvbnRhaW5lckJhc2UgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZDb25uZWN0b3JCYXNlLCBGTm9kZUlucHV0QmFzZSwgRk5vZGVPdXRsZXRCYXNlLCBGTm9kZU91dHB1dEJhc2UgfSBmcm9tICcuLi9mLWNvbm5lY3RvcnMnO1xuaW1wb3J0IHsgbWVyZ2UsIHN0YXJ0V2l0aCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGQmFja2dyb3VuZEJhc2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBGQ29ubmVjdGlvbnNDb250YWluZXJCYXNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBGTm9kZXNDb250YWluZXJCYXNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5cbmV4cG9ydCBjb25zdCBGX0ZMT1dfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPEZGbG93QmFzZT4oJ0ZfRkxPV19DT01QT05FTlQnKTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRkZsb3dCYXNlIGltcGxlbWVudHMgSUhhc0hvc3RFbGVtZW50LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBpZDogYW55O1xuXG4gIHB1YmxpYyBnZXQgaG9zdEVsZW1lbnQoKTogU1ZHU1ZHRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZmVyZW5jZS5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvbkRlc3Ryb3k6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG5cbiAgcHVibGljIGFic3RyYWN0IGZOb2Rlc0NvbnRhaW5lcjogRk5vZGVzQ29udGFpbmVyQmFzZTtcblxuICBwdWJsaWMgYWJzdHJhY3QgZkNvbm5lY3Rpb25zQ29udGFpbmVyOiBGQ29ubmVjdGlvbnNDb250YWluZXJCYXNlO1xuXG5cbiAgcHVibGljIGFic3RyYWN0IGZJdGVtc0NvbnRhaW5lcjogRkl0ZW1zQ29udGFpbmVyQmFzZTtcblxuICBwdWJsaWMgYWJzdHJhY3QgZkJhY2tncm91bmQ6IEZCYWNrZ3JvdW5kQmFzZTtcblxuICBwdWJsaWMgYWJzdHJhY3QgdHJhbnNmb3JtOiBJVHJhbnNmb3JtTW9kZWw7XG5cbiAgcHVibGljIGFic3RyYWN0IG91dGxldHM6IEZOb2RlT3V0bGV0QmFzZVtdO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBvdXRwdXRzOiBGTm9kZU91dHB1dEJhc2VbXTtcblxuICBwdWJsaWMgYWJzdHJhY3QgaW5wdXRzOiBGTm9kZUlucHV0QmFzZVtdO1xuXG4gIHB1YmxpYyBjb25uZWN0b3JDaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIGVsZW1lbnRSZWZlcmVuY2U6IEVsZW1lbnRSZWY8U1ZHU1ZHRWxlbWVudD4sXG4gICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaWJlT25Db21wb25lbnRzQ2hhbmdlcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1YnNjcmliZU9uQ29tcG9uZW50c0NoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlcyA9IFtcbiAgICAgIHRoaXMuZk5vZGVzQ29udGFpbmVyLmZOb2Rlcy5jaGFuZ2VzLFxuICAgICAgdGhpcy5mQ29ubmVjdGlvbnNDb250YWluZXIuZkNvbm5lY3Rpb25zLmNoYW5nZXMsXG4gICAgICB0aGlzLmNvbm5lY3RvckNoYW5nZXNcbiAgICBdO1xuXG4gICAgbWVyZ2UoLi4uY2hhbmdlcykucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkT3JEZXN0cm95ZWQgPSBtZXJnZSguLi5jaGFuZ2VzLCB0aGlzLm9uRGVzdHJveSk7XG5cbiAgICAgIG1lcmdlKHRoaXMuZk5vZGVzQ29udGFpbmVyLnN0YXRlQ2hhbmdlcykucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbChjaGFuZ2VkT3JEZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMuZkNvbm5lY3Rpb25zQ29udGFpbmVyLmZDb25uZWN0aW9ucy5mb3JFYWNoKChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5vdXRwdXRzLmZpbmQoKHgpID0+IHguaWQgPT09IGNvbm5lY3Rpb24ub3V0cHV0SWQpO1xuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dHMuZmluZCgoeCkgPT4geC5pZCA9PT0gY29ubmVjdGlvbi5pbnB1dElkKTtcbiAgICAgICAgICBpZiAoaW5wdXQgJiYgb3V0cHV0KSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uLmZyb21UbyA9IHtcbiAgICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgICBpbnB1dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uaW5pdGlhbGl6ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
@@ -1,11 +1,12 @@
1
- import { Component, ContentChild, ContentChildren, Input, ViewChild } from '@angular/core';
1
+ import { Component, ContentChild, Input, ViewChild } from '@angular/core';
2
2
  import { FCanvasDirective } from '../../internal';
3
3
  import { F_ITEMS_CONTAINER } from '../../directives';
4
4
  import { F_FLOW_COMPONENT, FFlowBase } from './f-flow-base';
5
- import { F_NODE_INPUT_DIRECTIVE, F_NODE_OUTLET_DIRECTIVE, F_NODE_OUTPUT_DIRECTIVE } from '../f-connectors';
6
5
  import { F_NODES_CONTAINER } from '../../directives';
7
6
  import { F_CONNECTIONS_CONTAINER } from '../../directives';
8
7
  import { F_BACKGROUND } from '../../internal';
8
+ import { F_FLOW_CONNECTOR_PARENT } from './i-flow-connector-parent';
9
+ import { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "../../internal/f-canvas/f-canvas.directive";
11
12
  import * as i2 from "@angular/common";
@@ -26,9 +27,39 @@ export class FFlowComponent extends FFlowBase {
26
27
  this.CONNECTION_MARKER_START_SELECTED = CONNECTION_MARKER_START_SELECTED;
27
28
  this.CONNECTION_MARKER_END_SELECTED = CONNECTION_MARKER_END_SELECTED;
28
29
  this.id = `f-flow-${uniqueId++}`;
30
+ this.outlets = [];
31
+ this.outputs = [];
32
+ this.inputs = [];
33
+ }
34
+ addConnector(connector) {
35
+ if (connector instanceof FNodeOutletBase) {
36
+ this.outlets.push(connector);
37
+ }
38
+ else if (connector instanceof FNodeInputBase) {
39
+ this.inputs.push(connector);
40
+ }
41
+ else if (connector instanceof FNodeOutputBase) {
42
+ this.outputs.push(connector);
43
+ }
44
+ this.connectorChanges.next();
45
+ }
46
+ removeConnector(connector) {
47
+ if (connector instanceof FNodeOutletBase) {
48
+ this.outlets = this.outlets.filter(x => x !== connector);
49
+ }
50
+ else if (connector instanceof FNodeInputBase) {
51
+ this.inputs = this.inputs.filter(x => x !== connector);
52
+ }
53
+ else if (connector instanceof FNodeOutputBase) {
54
+ this.outputs = this.outputs.filter(x => x !== connector);
55
+ }
56
+ this.connectorChanges.next();
29
57
  }
30
58
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FFlowComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
31
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: FFlowComponent, selector: "svg[fFlow]", inputs: { id: "id" }, host: { properties: { "attr.id": "id" }, classAttribute: "f-component f-flow" }, providers: [{ provide: F_FLOW_COMPONENT, useExisting: FFlowComponent }], queries: [{ propertyName: "fNodesContainer", first: true, predicate: F_NODES_CONTAINER, descendants: true, static: true }, { propertyName: "fConnectionsContainer", first: true, predicate: F_CONNECTIONS_CONTAINER, descendants: true }, { propertyName: "fItemsContainer", first: true, predicate: F_ITEMS_CONTAINER, descendants: true, static: true }, { propertyName: "outlets", predicate: F_NODE_OUTLET_DIRECTIVE, descendants: true }, { propertyName: "outputs", predicate: F_NODE_OUTPUT_DIRECTIVE, descendants: true }, { propertyName: "inputs", predicate: F_NODE_INPUT_DIRECTIVE, descendants: true }], viewQueries: [{ propertyName: "fBackground", first: true, predicate: F_BACKGROUND, descendants: true, static: true }], usesInheritance: true, hostDirectives: [{ directive: i1.FCanvasDirective }], ngImport: i0, template: "<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:g fBackground>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#background)\"></rect>\n </svg:g>\n <ng-content></ng-content>\n <svg:defs>\n <svg:marker [id]=\"CONNECTION_MARKER_START\" class=\"connection-marker-start\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END\" class=\"connection-marker-end\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_START_SELECTED\" class=\"connection-marker-start f-selected\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END_SELECTED\" class=\"connection-marker-end f-selected\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <ng-container *ngIf=\"fConnectionsContainer\">\n <ng-container *ngFor=\"let connection of fConnectionsContainer.fConnections.toArray()\">\n <svg:marker [id]=\"'connection-marker-start-' + connection.fromTo?.output?.color\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.output?.color\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"'connection-marker-end-' + connection.fromTo?.input?.color\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.input?.color\"></svg:path>\n </svg:marker>\n </ng-container>\n\n </ng-container>\n <svg:pattern id=\"background\" height=\"10\" width=\"10\" class=\"fb-background-pattern\"\n patternUnits=\"userSpaceOnUse\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"0.5\"/>\n </svg:pattern>\n </svg:defs>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.FBackgroundDirective, selector: "g[fBackground]" }] }); }
59
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.5", type: FFlowComponent, selector: "svg[fFlow]", inputs: { id: "id" }, host: { properties: { "attr.id": "id" }, classAttribute: "f-component f-flow" }, providers: [
60
+ { provide: F_FLOW_COMPONENT, useExisting: FFlowComponent },
61
+ { provide: F_FLOW_CONNECTOR_PARENT, useExisting: FFlowComponent }
62
+ ], queries: [{ propertyName: "fNodesContainer", first: true, predicate: F_NODES_CONTAINER, descendants: true, static: true }, { propertyName: "fConnectionsContainer", first: true, predicate: F_CONNECTIONS_CONTAINER, descendants: true }, { propertyName: "fItemsContainer", first: true, predicate: F_ITEMS_CONTAINER, descendants: true, static: true }], viewQueries: [{ propertyName: "fBackground", first: true, predicate: F_BACKGROUND, descendants: true, static: true }], usesInheritance: true, hostDirectives: [{ directive: i1.FCanvasDirective }], ngImport: i0, template: "<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:g fBackground>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#background)\"></rect>\n </svg:g>\n <ng-content></ng-content>\n <svg:defs>\n <svg:marker [id]=\"CONNECTION_MARKER_START\" class=\"connection-marker-start\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END\" class=\"connection-marker-end\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_START_SELECTED\" class=\"connection-marker-start f-selected\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END_SELECTED\" class=\"connection-marker-end f-selected\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <ng-container *ngIf=\"fConnectionsContainer\">\n <ng-container *ngFor=\"let connection of fConnectionsContainer.fConnections.toArray()\">\n <svg:marker [id]=\"'connection-marker-start-' + connection.fromTo?.output?.color\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.output?.color\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"'connection-marker-end-' + connection.fromTo?.input?.color\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.input?.color\"></svg:path>\n </svg:marker>\n </ng-container>\n\n </ng-container>\n <svg:pattern id=\"background\" height=\"10\" width=\"10\" class=\"fb-background-pattern\"\n patternUnits=\"userSpaceOnUse\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"0.5\"/>\n </svg:pattern>\n </svg:defs>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.FBackgroundDirective, selector: "g[fBackground]" }] }); }
32
63
  }
33
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FFlowComponent, decorators: [{
34
65
  type: Component,
@@ -39,7 +70,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
39
70
  ], host: {
40
71
  '[attr.id]': 'id',
41
72
  class: "f-component f-flow"
42
- }, providers: [{ provide: F_FLOW_COMPONENT, useExisting: FFlowComponent }], template: "<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:g fBackground>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#background)\"></rect>\n </svg:g>\n <ng-content></ng-content>\n <svg:defs>\n <svg:marker [id]=\"CONNECTION_MARKER_START\" class=\"connection-marker-start\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END\" class=\"connection-marker-end\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_START_SELECTED\" class=\"connection-marker-start f-selected\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END_SELECTED\" class=\"connection-marker-end f-selected\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <ng-container *ngIf=\"fConnectionsContainer\">\n <ng-container *ngFor=\"let connection of fConnectionsContainer.fConnections.toArray()\">\n <svg:marker [id]=\"'connection-marker-start-' + connection.fromTo?.output?.color\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.output?.color\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"'connection-marker-end-' + connection.fromTo?.input?.color\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.input?.color\"></svg:path>\n </svg:marker>\n </ng-container>\n\n </ng-container>\n <svg:pattern id=\"background\" height=\"10\" width=\"10\" class=\"fb-background-pattern\"\n patternUnits=\"userSpaceOnUse\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"0.5\"/>\n </svg:pattern>\n </svg:defs>\n</ng-container>\n" }]
73
+ }, providers: [
74
+ { provide: F_FLOW_COMPONENT, useExisting: FFlowComponent },
75
+ { provide: F_FLOW_CONNECTOR_PARENT, useExisting: FFlowComponent }
76
+ ], template: "<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:g fBackground>\n <rect width=\"100%\" height=\"100%\" fill=\"url(#background)\"></rect>\n </svg:g>\n <ng-content></ng-content>\n <svg:defs>\n <svg:marker [id]=\"CONNECTION_MARKER_START\" class=\"connection-marker-start\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END\" class=\"connection-marker-end\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_START_SELECTED\" class=\"connection-marker-start f-selected\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"CONNECTION_MARKER_END_SELECTED\" class=\"connection-marker-end f-selected\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\"></svg:path>\n </svg:marker>\n <ng-container *ngIf=\"fConnectionsContainer\">\n <ng-container *ngFor=\"let connection of fConnectionsContainer.fConnections.toArray()\">\n <svg:marker [id]=\"'connection-marker-start-' + connection.fromTo?.output?.color\" markerHeight=\"10\" markerWidth=\"10\" refY=\"5\" refX=\"5\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"2\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.output?.color\"></svg:circle>\n </svg:marker>\n <svg:marker [id]=\"'connection-marker-end-' + connection.fromTo?.input?.color\" markerHeight=\"10\" markerWidth=\"10\" orient=\"auto\" refX=\"5\" refY=\"3\">\n <svg:path d=\"M0,0 L6,3 0,6Z\" [attr.stroke]=\"'none'\" [attr.fill]=\"connection.fromTo?.input?.color\"></svg:path>\n </svg:marker>\n </ng-container>\n\n </ng-container>\n <svg:pattern id=\"background\" height=\"10\" width=\"10\" class=\"fb-background-pattern\"\n patternUnits=\"userSpaceOnUse\">\n <svg:circle cx=\"5\" cy=\"5\" r=\"0.5\"/>\n </svg:pattern>\n </svg:defs>\n</ng-container>\n" }]
43
77
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { id: [{
44
78
  type: Input
45
79
  }], fNodesContainer: [{
@@ -54,14 +88,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImpor
54
88
  }], fBackground: [{
55
89
  type: ViewChild,
56
90
  args: [F_BACKGROUND, { static: true }]
57
- }], outlets: [{
58
- type: ContentChildren,
59
- args: [F_NODE_OUTLET_DIRECTIVE, { descendants: true }]
60
- }], outputs: [{
61
- type: ContentChildren,
62
- args: [F_NODE_OUTPUT_DIRECTIVE, { descendants: true }]
63
- }], inputs: [{
64
- type: ContentChildren,
65
- args: [F_NODE_INPUT_DIRECTIVE, { descendants: true }]
66
91
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWZsb3cvZi1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWZsb3cvZi1mbG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQUUsWUFBWSxFQUN2QixlQUFlLEVBRWYsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQy9DLHVCQUF1QixFQUl4QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxpQkFBaUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXhCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFFL0QsSUFBSSxRQUFRLEdBQVcsQ0FBQyxDQUFDO0FBRXpCLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLHlCQUF5QixDQUFDO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLHVCQUF1QixDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLGdDQUFnQyxDQUFDO0FBZS9FLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQStCM0MsSUFBb0IsU0FBUztRQUMzQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUNFLGdCQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsTUFBYztRQUVkLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQXRDckMsNEJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDbEQsMEJBQXFCLEdBQUcscUJBQXFCLENBQUM7UUFDOUMscUNBQWdDLEdBQUcsZ0NBQWdDLENBQUM7UUFDcEUsbUNBQThCLEdBQUcsOEJBQThCLENBQUM7UUFHaEUsT0FBRSxHQUFXLFVBQVcsUUFBUSxFQUFHLEVBQUUsQ0FBQztJQWlDdEQsQ0FBQzs4R0F6Q1UsY0FBYztrR0FBZCxjQUFjLDRJQUZkLENBQUUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUFFLHVFQVkzRCxpQkFBaUIsc0dBR2pCLHVCQUF1QixrRkFHdkIsaUJBQWlCLDJFQU1kLHVCQUF1Qiw2REFHdkIsdUJBQXVCLDREQUd2QixzQkFBc0IsNkZBVDVCLFlBQVksMklDbkV6QixtckVBbUNBOzsyRkRhYSxjQUFjO2tCQWQxQixTQUFTOytCQUNFLFlBQVksa0JBRU47d0JBQ2Q7NEJBQ0UsU0FBUyxFQUFFLGdCQUFnQjt5QkFDNUI7cUJBQ0YsUUFDSzt3QkFDSixXQUFXLEVBQUUsSUFBSTt3QkFDakIsS0FBSyxFQUFFLG9CQUFvQjtxQkFDNUIsYUFDVSxDQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsZ0JBQWdCLEVBQUUsQ0FBRTtzSkFVekQsRUFBRTtzQkFEakIsS0FBSztnQkFJVSxlQUFlO3NCQUQ5QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJakMscUJBQXFCO3NCQURwQyxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJNUMsZUFBZTtzQkFEOUIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWpDLFdBQVc7c0JBRDFCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJekIsT0FBTztzQkFEdEIsZUFBZTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSS9DLE9BQU87c0JBRHRCLGVBQWU7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUkvQyxNQUFNO3NCQURyQixlQUFlO3VCQUFDLHNCQUFzQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZDYW52YXNEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9pbnRlcm5hbCc7XG5pbXBvcnQgeyBGX0lURU1TX0NPTlRBSU5FUiwgRkl0ZW1zQ29udGFpbmVyQmFzZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRl9GTE9XX0NPTVBPTkVOVCwgRkZsb3dCYXNlIH0gZnJvbSAnLi9mLWZsb3ctYmFzZSc7XG5pbXBvcnQgeyBJVHJhbnNmb3JtTW9kZWwgfSBmcm9tICdAZm9ibGV4L2NvcmUnO1xuaW1wb3J0IHtcbiAgRl9OT0RFX0lOUFVUX0RJUkVDVElWRSwgRl9OT0RFX09VVExFVF9ESVJFQ1RJVkUsXG4gIEZfTk9ERV9PVVRQVVRfRElSRUNUSVZFLFxuICBGTm9kZUlucHV0QmFzZSxcbiAgRk5vZGVPdXRsZXRCYXNlLFxuICBGTm9kZU91dHB1dEJhc2Vcbn0gZnJvbSAnLi4vZi1jb25uZWN0b3JzJztcbmltcG9ydCB7IEZfTk9ERVNfQ09OVEFJTkVSLCBGTm9kZXNDb250YWluZXJCYXNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICBGX0NPTk5FQ1RJT05TX0NPTlRBSU5FUixcbiAgRkNvbm5lY3Rpb25zQ29udGFpbmVyQmFzZVxufSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IEZfQkFDS0dST1VORCwgRkJhY2tncm91bmRCYXNlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwnO1xuXG5sZXQgdW5pcXVlSWQ6IG51bWJlciA9IDA7XG5cbmV4cG9ydCBjb25zdCBDT05ORUNUSU9OX01BUktFUl9TVEFSVCA9IFwiY29ubmVjdGlvbi1tYXJrZXItc3RhcnRcIjtcbmV4cG9ydCBjb25zdCBDT05ORUNUSU9OX01BUktFUl9FTkQgPSBcImNvbm5lY3Rpb24tbWFya2VyLWVuZFwiO1xuZXhwb3J0IGNvbnN0IENPTk5FQ1RJT05fTUFSS0VSX1NUQVJUX1NFTEVDVEVEID0gXCJjb25uZWN0aW9uLW1hcmtlci1zdGFydC1zZWxlY3RlZFwiO1xuZXhwb3J0IGNvbnN0IENPTk5FQ1RJT05fTUFSS0VSX0VORF9TRUxFQ1RFRCA9IFwiY29ubmVjdGlvbi1tYXJrZXItZW5kLXNlbGVjdGVkXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdmdbZkZsb3ddJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2YtZmxvdy5jb21wb25lbnQuaHRtbCcsXG4gIGhvc3REaXJlY3RpdmVzOiBbXG4gICAge1xuICAgICAgZGlyZWN0aXZlOiBGQ2FudmFzRGlyZWN0aXZlXG4gICAgfVxuICBdLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgY2xhc3M6IFwiZi1jb21wb25lbnQgZi1mbG93XCJcbiAgfSxcbiAgcHJvdmlkZXJzOiBbIHsgcHJvdmlkZTogRl9GTE9XX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IEZGbG93Q29tcG9uZW50IH0gXSxcbn0pXG5leHBvcnQgY2xhc3MgRkZsb3dDb21wb25lbnQgZXh0ZW5kcyBGRmxvd0Jhc2Uge1xuXG4gIHB1YmxpYyByZWFkb25seSBDT05ORUNUSU9OX01BUktFUl9TVEFSVCA9IENPTk5FQ1RJT05fTUFSS0VSX1NUQVJUO1xuICBwdWJsaWMgcmVhZG9ubHkgQ09OTkVDVElPTl9NQVJLRVJfRU5EID0gQ09OTkVDVElPTl9NQVJLRVJfRU5EO1xuICBwdWJsaWMgcmVhZG9ubHkgQ09OTkVDVElPTl9NQVJLRVJfU1RBUlRfU0VMRUNURUQgPSBDT05ORUNUSU9OX01BUktFUl9TVEFSVF9TRUxFQ1RFRDtcbiAgcHVibGljIHJlYWRvbmx5IENPTk5FQ1RJT05fTUFSS0VSX0VORF9TRUxFQ1RFRCA9IENPTk5FQ1RJT05fTUFSS0VSX0VORF9TRUxFQ1RFRDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyA9IGBmLWZsb3ctJHsgdW5pcXVlSWQrKyB9YDtcblxuICBAQ29udGVudENoaWxkKEZfTk9ERVNfQ09OVEFJTkVSLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZk5vZGVzQ29udGFpbmVyITogRk5vZGVzQ29udGFpbmVyQmFzZTtcblxuICBAQ29udGVudENoaWxkKEZfQ09OTkVDVElPTlNfQ09OVEFJTkVSLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmQ29ubmVjdGlvbnNDb250YWluZXIhOiBGQ29ubmVjdGlvbnNDb250YWluZXJCYXNlO1xuXG4gIEBDb250ZW50Q2hpbGQoRl9JVEVNU19DT05UQUlORVIsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmSXRlbXNDb250YWluZXIhOiBGSXRlbXNDb250YWluZXJCYXNlO1xuXG4gIEBWaWV3Q2hpbGQoRl9CQUNLR1JPVU5ELCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZkJhY2tncm91bmQhOiBGQmFja2dyb3VuZEJhc2U7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihGX05PREVfT1VUTEVUX0RJUkVDVElWRSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgb3V0bGV0cyE6IFF1ZXJ5TGlzdDxGTm9kZU91dGxldEJhc2U+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oRl9OT0RFX09VVFBVVF9ESVJFQ1RJVkUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHVibGljIG92ZXJyaWRlIG91dHB1dHMhOiBRdWVyeUxpc3Q8Rk5vZGVPdXRwdXRCYXNlPjtcblxuICBAQ29udGVudENoaWxkcmVuKEZfTk9ERV9JTlBVVF9ESVJFQ1RJVkUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHVibGljIG92ZXJyaWRlIGlucHV0cyE6IFF1ZXJ5TGlzdDxGTm9kZUlucHV0QmFzZT47XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldCB0cmFuc2Zvcm0oKTogSVRyYW5zZm9ybU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5mSXRlbXNDb250YWluZXIudHJhbnNmb3JtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZWxlbWVudFJlZmVyZW5jZTogRWxlbWVudFJlZjxTVkdTVkdFbGVtZW50PixcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZmVyZW5jZSwgY2hhbmdlRGV0ZWN0b3JSZWYsIG5nWm9uZSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgeG1sbnM6c3ZnPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgPHN2ZzpnIGZCYWNrZ3JvdW5kPlxuICAgIDxyZWN0IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwidXJsKCNiYWNrZ3JvdW5kKVwiPjwvcmVjdD5cbiAgPC9zdmc6Zz5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8c3ZnOmRlZnM+XG4gICAgPHN2ZzptYXJrZXIgW2lkXT1cIkNPTk5FQ1RJT05fTUFSS0VSX1NUQVJUXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1zdGFydFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIyXCI+PC9zdmc6Y2lyY2xlPlxuICAgIDwvc3ZnOm1hcmtlcj5cbiAgICA8c3ZnOm1hcmtlciBbaWRdPVwiQ09OTkVDVElPTl9NQVJLRVJfRU5EXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1lbmRcIiBtYXJrZXJIZWlnaHQ9XCIxMFwiIG1hcmtlcldpZHRoPVwiMTBcIiBvcmllbnQ9XCJhdXRvXCIgcmVmWD1cIjVcIiByZWZZPVwiM1wiPlxuICAgICAgPHN2ZzpwYXRoIGQ9XCJNMCwwIEw2LDMgMCw2WlwiPjwvc3ZnOnBhdGg+XG4gICAgPC9zdmc6bWFya2VyPlxuICAgIDxzdmc6bWFya2VyIFtpZF09XCJDT05ORUNUSU9OX01BUktFUl9TVEFSVF9TRUxFQ1RFRFwiIGNsYXNzPVwiY29ubmVjdGlvbi1tYXJrZXItc3RhcnQgZi1zZWxlY3RlZFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIyXCI+PC9zdmc6Y2lyY2xlPlxuICAgIDwvc3ZnOm1hcmtlcj5cbiAgICA8c3ZnOm1hcmtlciBbaWRdPVwiQ09OTkVDVElPTl9NQVJLRVJfRU5EX1NFTEVDVEVEXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1lbmQgZi1zZWxlY3RlZFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIG9yaWVudD1cImF1dG9cIiByZWZYPVwiNVwiIHJlZlk9XCIzXCI+XG4gICAgICA8c3ZnOnBhdGggZD1cIk0wLDAgTDYsMyAwLDZaXCI+PC9zdmc6cGF0aD5cbiAgICA8L3N2ZzptYXJrZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZDb25uZWN0aW9uc0NvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ubmVjdGlvbiBvZiBmQ29ubmVjdGlvbnNDb250YWluZXIuZkNvbm5lY3Rpb25zLnRvQXJyYXkoKVwiPlxuICAgICAgICA8c3ZnOm1hcmtlciBbaWRdPVwiJ2Nvbm5lY3Rpb24tbWFya2VyLXN0YXJ0LScgKyBjb25uZWN0aW9uLmZyb21Ubz8ub3V0cHV0Py5jb2xvclwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgICAgICA8c3ZnOmNpcmNsZSBjeD1cIjVcIiBjeT1cIjVcIiByPVwiMlwiIFthdHRyLnN0cm9rZV09XCInbm9uZSdcIiBbYXR0ci5maWxsXT1cImNvbm5lY3Rpb24uZnJvbVRvPy5vdXRwdXQ/LmNvbG9yXCI+PC9zdmc6Y2lyY2xlPlxuICAgICAgICA8L3N2ZzptYXJrZXI+XG4gICAgICAgIDxzdmc6bWFya2VyIFtpZF09XCInY29ubmVjdGlvbi1tYXJrZXItZW5kLScgKyBjb25uZWN0aW9uLmZyb21Ubz8uaW5wdXQ/LmNvbG9yXCIgbWFya2VySGVpZ2h0PVwiMTBcIiBtYXJrZXJXaWR0aD1cIjEwXCIgb3JpZW50PVwiYXV0b1wiIHJlZlg9XCI1XCIgcmVmWT1cIjNcIj5cbiAgICAgICAgICA8c3ZnOnBhdGggZD1cIk0wLDAgTDYsMyAwLDZaXCIgW2F0dHIuc3Ryb2tlXT1cIidub25lJ1wiIFthdHRyLmZpbGxdPVwiY29ubmVjdGlvbi5mcm9tVG8/LmlucHV0Py5jb2xvclwiPjwvc3ZnOnBhdGg+XG4gICAgICAgIDwvc3ZnOm1hcmtlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHN2ZzpwYXR0ZXJuIGlkPVwiYmFja2dyb3VuZFwiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCIxMFwiIGNsYXNzPVwiZmItYmFja2dyb3VuZC1wYXR0ZXJuXCJcbiAgICAgICAgICAgICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIwLjVcIi8+XG4gICAgPC9zdmc6cGF0dGVybj5cbiAgPC9zdmc6ZGVmcz5cbjwvbmctY29udGFpbmVyPlxuIl19
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWZsb3cvZi1mbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2YtZmxvdy9zcmMvY29tcG9uZW50cy9mLWZsb3cvZi1mbG93LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQUUsWUFBWSxFQUV2QixLQUFLLEVBRUwsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxpQkFBaUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVELE9BQU8sRUFBRSxpQkFBaUIsRUFBdUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXhCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFlBQVksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQXdCLE1BQU0sMkJBQTJCLENBQUM7QUFDMUYsT0FBTyxFQUFrQixjQUFjLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQUVuRyxJQUFJLFFBQVEsR0FBVyxDQUFDLENBQUM7QUFFekIsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcseUJBQXlCLENBQUM7QUFDakUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsdUJBQXVCLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsa0NBQWtDLENBQUM7QUFDbkYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsZ0NBQWdDLENBQUM7QUFtQi9FLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBUztJQTRCM0MsSUFBb0IsU0FBUztRQUMzQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxZQUNJLGdCQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsTUFBYztRQUVoQixLQUFLLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFuQ3JDLDRCQUF1QixHQUFHLHVCQUF1QixDQUFDO1FBQ2xELDBCQUFxQixHQUFHLHFCQUFxQixDQUFDO1FBQzlDLHFDQUFnQyxHQUFHLGdDQUFnQyxDQUFDO1FBQ3BFLG1DQUE4QixHQUFHLDhCQUE4QixDQUFDO1FBR2hFLE9BQUUsR0FBVyxVQUFXLFFBQVEsRUFBRyxFQUFFLENBQUM7UUFjdEMsWUFBTyxHQUFzQixFQUFFLENBQUM7UUFFaEMsWUFBTyxHQUFzQixFQUFFLENBQUE7UUFFL0IsV0FBTSxHQUFxQixFQUFFLENBQUM7SUFZOUMsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUF5QjtRQUMzQyxJQUFJLFNBQVMsWUFBWSxlQUFlLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUI7YUFBTSxJQUFJLFNBQVMsWUFBWSxjQUFjLEVBQUU7WUFDOUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0I7YUFBTSxJQUFJLFNBQVMsWUFBWSxlQUFlLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUI7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVNLGVBQWUsQ0FBQyxTQUF5QjtRQUM5QyxJQUFJLFNBQVMsWUFBWSxlQUFlLEVBQUU7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQztTQUMxRDthQUFNLElBQUksU0FBUyxZQUFZLGNBQWMsRUFBRTtZQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1NBQ3hEO2FBQU0sSUFBSSxTQUFTLFlBQVksZUFBZSxFQUFFO1lBQy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7U0FDMUQ7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQzs4R0E1RFUsY0FBYztrR0FBZCxjQUFjLDRJQUxkO1lBQ1AsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRTtZQUMxRCxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO1NBQ3BFLHVFQVlhLGlCQUFpQixzR0FHakIsdUJBQXVCLGtGQUd2QixpQkFBaUIsMkdBR3BCLFlBQVksMklDaEV6QixtckVBbUNBOzsyRkRVYSxjQUFjO2tCQWpCMUIsU0FBUzsrQkFDRSxZQUFZLGtCQUVOO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxnQkFBZ0I7eUJBQzVCO3FCQUNGLFFBQ0s7d0JBQ0osV0FBVyxFQUFFLElBQUk7d0JBQ2pCLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLGFBQ1U7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRTt3QkFDMUQsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRTtxQkFDcEU7c0pBVWUsRUFBRTtzQkFEakIsS0FBSztnQkFJVSxlQUFlO3NCQUQ5QixZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJakMscUJBQXFCO3NCQURwQyxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFJNUMsZUFBZTtzQkFEOUIsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSWpDLFdBQVc7c0JBRDFCLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRkNhbnZhc0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2ludGVybmFsJztcbmltcG9ydCB7IEZfSVRFTVNfQ09OVEFJTkVSLCBGSXRlbXNDb250YWluZXJCYXNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBGX0ZMT1dfQ09NUE9ORU5ULCBGRmxvd0Jhc2UgfSBmcm9tICcuL2YtZmxvdy1iYXNlJztcbmltcG9ydCB7IElUcmFuc2Zvcm1Nb2RlbCB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGX05PREVTX0NPTlRBSU5FUiwgRk5vZGVzQ29udGFpbmVyQmFzZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtcbiAgRl9DT05ORUNUSU9OU19DT05UQUlORVIsXG4gIEZDb25uZWN0aW9uc0NvbnRhaW5lckJhc2Vcbn0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBGX0JBQ0tHUk9VTkQsIEZCYWNrZ3JvdW5kQmFzZSB9IGZyb20gJy4uLy4uL2ludGVybmFsJztcbmltcG9ydCB7IEZfRkxPV19DT05ORUNUT1JfUEFSRU5ULCBJRmxvd0Nvbm5lY3RvclBhcmVudCB9IGZyb20gJy4vaS1mbG93LWNvbm5lY3Rvci1wYXJlbnQnO1xuaW1wb3J0IHsgRkNvbm5lY3RvckJhc2UsIEZOb2RlSW5wdXRCYXNlLCBGTm9kZU91dGxldEJhc2UsIEZOb2RlT3V0cHV0QmFzZSB9IGZyb20gJy4uL2YtY29ubmVjdG9ycyc7XG5cbmxldCB1bmlxdWVJZDogbnVtYmVyID0gMDtcblxuZXhwb3J0IGNvbnN0IENPTk5FQ1RJT05fTUFSS0VSX1NUQVJUID0gXCJjb25uZWN0aW9uLW1hcmtlci1zdGFydFwiO1xuZXhwb3J0IGNvbnN0IENPTk5FQ1RJT05fTUFSS0VSX0VORCA9IFwiY29ubmVjdGlvbi1tYXJrZXItZW5kXCI7XG5leHBvcnQgY29uc3QgQ09OTkVDVElPTl9NQVJLRVJfU1RBUlRfU0VMRUNURUQgPSBcImNvbm5lY3Rpb24tbWFya2VyLXN0YXJ0LXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgQ09OTkVDVElPTl9NQVJLRVJfRU5EX1NFTEVDVEVEID0gXCJjb25uZWN0aW9uLW1hcmtlci1lbmQtc2VsZWN0ZWRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3ZnW2ZGbG93XScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mLWZsb3cuY29tcG9uZW50Lmh0bWwnLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogRkNhbnZhc0RpcmVjdGl2ZVxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgIGNsYXNzOiBcImYtY29tcG9uZW50IGYtZmxvd1wiXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgICAgeyBwcm92aWRlOiBGX0ZMT1dfQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogRkZsb3dDb21wb25lbnQgfSxcbiAgICAgIHsgcHJvdmlkZTogRl9GTE9XX0NPTk5FQ1RPUl9QQVJFTlQsIHVzZUV4aXN0aW5nOiBGRmxvd0NvbXBvbmVudCB9XG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZGbG93Q29tcG9uZW50IGV4dGVuZHMgRkZsb3dCYXNlIGltcGxlbWVudHMgSUZsb3dDb25uZWN0b3JQYXJlbnQge1xuXG4gIHB1YmxpYyByZWFkb25seSBDT05ORUNUSU9OX01BUktFUl9TVEFSVCA9IENPTk5FQ1RJT05fTUFSS0VSX1NUQVJUO1xuICBwdWJsaWMgcmVhZG9ubHkgQ09OTkVDVElPTl9NQVJLRVJfRU5EID0gQ09OTkVDVElPTl9NQVJLRVJfRU5EO1xuICBwdWJsaWMgcmVhZG9ubHkgQ09OTkVDVElPTl9NQVJLRVJfU1RBUlRfU0VMRUNURUQgPSBDT05ORUNUSU9OX01BUktFUl9TVEFSVF9TRUxFQ1RFRDtcbiAgcHVibGljIHJlYWRvbmx5IENPTk5FQ1RJT05fTUFSS0VSX0VORF9TRUxFQ1RFRCA9IENPTk5FQ1RJT05fTUFSS0VSX0VORF9TRUxFQ1RFRDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgb3ZlcnJpZGUgaWQ6IHN0cmluZyA9IGBmLWZsb3ctJHsgdW5pcXVlSWQrKyB9YDtcblxuICBAQ29udGVudENoaWxkKEZfTk9ERVNfQ09OVEFJTkVSLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZk5vZGVzQ29udGFpbmVyITogRk5vZGVzQ29udGFpbmVyQmFzZTtcblxuICBAQ29udGVudENoaWxkKEZfQ09OTkVDVElPTlNfQ09OVEFJTkVSLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmQ29ubmVjdGlvbnNDb250YWluZXIhOiBGQ29ubmVjdGlvbnNDb250YWluZXJCYXNlO1xuXG4gIEBDb250ZW50Q2hpbGQoRl9JVEVNU19DT05UQUlORVIsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBvdmVycmlkZSBmSXRlbXNDb250YWluZXIhOiBGSXRlbXNDb250YWluZXJCYXNlO1xuXG4gIEBWaWV3Q2hpbGQoRl9CQUNLR1JPVU5ELCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgb3ZlcnJpZGUgZkJhY2tncm91bmQhOiBGQmFja2dyb3VuZEJhc2U7XG5cbiAgcHVibGljIG92ZXJyaWRlIG91dGxldHM6IEZOb2RlT3V0bGV0QmFzZVtdID0gW107XG5cbiAgcHVibGljIG92ZXJyaWRlIG91dHB1dHM6IEZOb2RlT3V0cHV0QmFzZVtdID0gW11cblxuICBwdWJsaWMgb3ZlcnJpZGUgaW5wdXRzOiBGTm9kZUlucHV0QmFzZVtdID0gW107XG5cbiAgcHVibGljIG92ZXJyaWRlIGdldCB0cmFuc2Zvcm0oKTogSVRyYW5zZm9ybU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy5mSXRlbXNDb250YWluZXIudHJhbnNmb3JtO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPFNWR1NWR0VsZW1lbnQ+LFxuICAgICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgbmdab25lOiBOZ1pvbmVcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZmVyZW5jZSwgY2hhbmdlRGV0ZWN0b3JSZWYsIG5nWm9uZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ29ubmVjdG9yKGNvbm5lY3RvcjogRkNvbm5lY3RvckJhc2UpIHtcbiAgICBpZiAoY29ubmVjdG9yIGluc3RhbmNlb2YgRk5vZGVPdXRsZXRCYXNlKSB7XG4gICAgICB0aGlzLm91dGxldHMucHVzaChjb25uZWN0b3IpO1xuICAgIH0gZWxzZSBpZiAoY29ubmVjdG9yIGluc3RhbmNlb2YgRk5vZGVJbnB1dEJhc2UpIHtcbiAgICAgIHRoaXMuaW5wdXRzLnB1c2goY29ubmVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKGNvbm5lY3RvciBpbnN0YW5jZW9mIEZOb2RlT3V0cHV0QmFzZSkge1xuICAgICAgdGhpcy5vdXRwdXRzLnB1c2goY29ubmVjdG9yKTtcbiAgICB9XG4gICAgdGhpcy5jb25uZWN0b3JDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb25uZWN0b3IoY29ubmVjdG9yOiBGQ29ubmVjdG9yQmFzZSkge1xuICAgIGlmIChjb25uZWN0b3IgaW5zdGFuY2VvZiBGTm9kZU91dGxldEJhc2UpIHtcbiAgICAgIHRoaXMub3V0bGV0cyA9IHRoaXMub3V0bGV0cy5maWx0ZXIoeCA9PiB4ICE9PSBjb25uZWN0b3IpO1xuICAgIH0gZWxzZSBpZiAoY29ubmVjdG9yIGluc3RhbmNlb2YgRk5vZGVJbnB1dEJhc2UpIHtcbiAgICAgIHRoaXMuaW5wdXRzID0gdGhpcy5pbnB1dHMuZmlsdGVyKHggPT4geCAhPT0gY29ubmVjdG9yKTtcbiAgICB9IGVsc2UgaWYgKGNvbm5lY3RvciBpbnN0YW5jZW9mIEZOb2RlT3V0cHV0QmFzZSkge1xuICAgICAgdGhpcy5vdXRwdXRzID0gdGhpcy5vdXRwdXRzLmZpbHRlcih4ID0+IHggIT09IGNvbm5lY3Rvcik7XG4gICAgfVxuICAgIHRoaXMuY29ubmVjdG9yQ2hhbmdlcy5uZXh0KCk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgeG1sbnM6c3ZnPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgPHN2ZzpnIGZCYWNrZ3JvdW5kPlxuICAgIDxyZWN0IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIiBmaWxsPVwidXJsKCNiYWNrZ3JvdW5kKVwiPjwvcmVjdD5cbiAgPC9zdmc6Zz5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICA8c3ZnOmRlZnM+XG4gICAgPHN2ZzptYXJrZXIgW2lkXT1cIkNPTk5FQ1RJT05fTUFSS0VSX1NUQVJUXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1zdGFydFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIyXCI+PC9zdmc6Y2lyY2xlPlxuICAgIDwvc3ZnOm1hcmtlcj5cbiAgICA8c3ZnOm1hcmtlciBbaWRdPVwiQ09OTkVDVElPTl9NQVJLRVJfRU5EXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1lbmRcIiBtYXJrZXJIZWlnaHQ9XCIxMFwiIG1hcmtlcldpZHRoPVwiMTBcIiBvcmllbnQ9XCJhdXRvXCIgcmVmWD1cIjVcIiByZWZZPVwiM1wiPlxuICAgICAgPHN2ZzpwYXRoIGQ9XCJNMCwwIEw2LDMgMCw2WlwiPjwvc3ZnOnBhdGg+XG4gICAgPC9zdmc6bWFya2VyPlxuICAgIDxzdmc6bWFya2VyIFtpZF09XCJDT05ORUNUSU9OX01BUktFUl9TVEFSVF9TRUxFQ1RFRFwiIGNsYXNzPVwiY29ubmVjdGlvbi1tYXJrZXItc3RhcnQgZi1zZWxlY3RlZFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIyXCI+PC9zdmc6Y2lyY2xlPlxuICAgIDwvc3ZnOm1hcmtlcj5cbiAgICA8c3ZnOm1hcmtlciBbaWRdPVwiQ09OTkVDVElPTl9NQVJLRVJfRU5EX1NFTEVDVEVEXCIgY2xhc3M9XCJjb25uZWN0aW9uLW1hcmtlci1lbmQgZi1zZWxlY3RlZFwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIG9yaWVudD1cImF1dG9cIiByZWZYPVwiNVwiIHJlZlk9XCIzXCI+XG4gICAgICA8c3ZnOnBhdGggZD1cIk0wLDAgTDYsMyAwLDZaXCI+PC9zdmc6cGF0aD5cbiAgICA8L3N2ZzptYXJrZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZDb25uZWN0aW9uc0NvbnRhaW5lclwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29ubmVjdGlvbiBvZiBmQ29ubmVjdGlvbnNDb250YWluZXIuZkNvbm5lY3Rpb25zLnRvQXJyYXkoKVwiPlxuICAgICAgICA8c3ZnOm1hcmtlciBbaWRdPVwiJ2Nvbm5lY3Rpb24tbWFya2VyLXN0YXJ0LScgKyBjb25uZWN0aW9uLmZyb21Ubz8ub3V0cHV0Py5jb2xvclwiIG1hcmtlckhlaWdodD1cIjEwXCIgbWFya2VyV2lkdGg9XCIxMFwiIHJlZlk9XCI1XCIgcmVmWD1cIjVcIj5cbiAgICAgICAgICA8c3ZnOmNpcmNsZSBjeD1cIjVcIiBjeT1cIjVcIiByPVwiMlwiIFthdHRyLnN0cm9rZV09XCInbm9uZSdcIiBbYXR0ci5maWxsXT1cImNvbm5lY3Rpb24uZnJvbVRvPy5vdXRwdXQ/LmNvbG9yXCI+PC9zdmc6Y2lyY2xlPlxuICAgICAgICA8L3N2ZzptYXJrZXI+XG4gICAgICAgIDxzdmc6bWFya2VyIFtpZF09XCInY29ubmVjdGlvbi1tYXJrZXItZW5kLScgKyBjb25uZWN0aW9uLmZyb21Ubz8uaW5wdXQ/LmNvbG9yXCIgbWFya2VySGVpZ2h0PVwiMTBcIiBtYXJrZXJXaWR0aD1cIjEwXCIgb3JpZW50PVwiYXV0b1wiIHJlZlg9XCI1XCIgcmVmWT1cIjNcIj5cbiAgICAgICAgICA8c3ZnOnBhdGggZD1cIk0wLDAgTDYsMyAwLDZaXCIgW2F0dHIuc3Ryb2tlXT1cIidub25lJ1wiIFthdHRyLmZpbGxdPVwiY29ubmVjdGlvbi5mcm9tVG8/LmlucHV0Py5jb2xvclwiPjwvc3ZnOnBhdGg+XG4gICAgICAgIDwvc3ZnOm1hcmtlcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHN2ZzpwYXR0ZXJuIGlkPVwiYmFja2dyb3VuZFwiIGhlaWdodD1cIjEwXCIgd2lkdGg9XCIxMFwiIGNsYXNzPVwiZmItYmFja2dyb3VuZC1wYXR0ZXJuXCJcbiAgICAgICAgICAgICAgICAgcGF0dGVyblVuaXRzPVwidXNlclNwYWNlT25Vc2VcIj5cbiAgICAgIDxzdmc6Y2lyY2xlIGN4PVwiNVwiIGN5PVwiNVwiIHI9XCIwLjVcIi8+XG4gICAgPC9zdmc6cGF0dGVybj5cbiAgPC9zdmc6ZGVmcz5cbjwvbmctY29udGFpbmVyPlxuIl19