@foblex/flow 1.1.7 → 1.1.9
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.
- package/README.md +2 -24
- package/components/f-connectors/f-node-input/f-node-input.directive.d.ts +7 -4
- package/components/f-connectors/f-node-outlet/f-node-outlet.directive.d.ts +7 -4
- package/components/f-connectors/f-node-output/f-node-output.directive.d.ts +7 -4
- package/components/f-flow/f-flow-base.d.ts +6 -4
- package/components/f-flow/f-flow.component.d.ts +10 -7
- package/components/f-flow/i-flow-connector-parent.d.ts +7 -0
- package/esm2022/components/f-connectors/f-node-input/f-node-input.directive.mjs +18 -5
- package/esm2022/components/f-connectors/f-node-outlet/f-node-outlet.directive.mjs +18 -5
- package/esm2022/components/f-connectors/f-node-output/f-node-output.directive.mjs +18 -5
- package/esm2022/components/f-flow/f-flow-base.mjs +3 -4
- package/esm2022/components/f-flow/f-flow.component.mjs +39 -14
- package/esm2022/components/f-flow/i-flow-connector-parent.mjs +3 -0
- package/esm2022/directives/f-connect-if-intersect/connect-if-intersect/connect-if-intersect.handler.mjs +4 -7
- package/esm2022/directives/f-draggable/node/node-on-pointer-down/node.on-pointer-down.mjs +3 -3
- package/esm2022/directives/f-draggable/selection/selection-on-pointer-move/selection.on-pointer-move.mjs +3 -3
- package/fesm2022/foblex-flow.mjs +91 -33
- package/fesm2022/foblex-flow.mjs.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,24 +1,2 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project f-flow` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project f-flow`.
|
|
8
|
-
> Note: Don't forget to add `--project f-flow` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build f-flow` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build f-flow`, go to the dist folder `cd dist/f-flow` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test f-flow` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
1
|
+
# @foblex/flow
|
|
2
|
+
> A simple flow control library for Angular 2+.
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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:
|
|
23
|
-
abstract outputs:
|
|
24
|
-
abstract inputs:
|
|
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
|
|
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:
|
|
26
|
-
outputs:
|
|
27
|
-
inputs:
|
|
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"
|
|
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
|
-
|
|
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 }
|
|
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,
|
|
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
|
-
|
|
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 }
|
|
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,
|
|
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
|
-
|
|
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 }
|
|
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,
|
|
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,9 +20,7 @@ export class FFlowBase {
|
|
|
19
20
|
const changes = [
|
|
20
21
|
this.fNodesContainer.fNodes.changes,
|
|
21
22
|
this.fConnectionsContainer.fConnections.changes,
|
|
22
|
-
this.
|
|
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);
|
|
@@ -46,4 +45,4 @@ export class FFlowBase {
|
|
|
46
45
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.5", ngImport: i0, type: FFlowBase, decorators: [{
|
|
47
46
|
type: Directive
|
|
48
47
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; } });
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZi1mbG93LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mLWZsb3cvc3JjL2NvbXBvbmVudHMvZi1mbG93L2YtZmxvdy1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsY0FBYyxFQUlmLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFZLGtCQUFrQixDQUFDLENBQUM7QUFHbEYsTUFBTSxPQUFnQixTQUFTO0lBSTdCLElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUM7SUFDN0MsQ0FBQztJQXdCRCxZQUNZLGdCQUEyQyxFQUMzQyxpQkFBb0MsRUFDcEMsTUFBYztRQUZkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMkI7UUFDM0Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekJULGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQW9CekQscUJBQWdCLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7SUFPN0QsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRVMsNEJBQTRCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTztZQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLE9BQU87WUFDL0MsSUFBSSxDQUFDLGdCQUFnQjtTQUN0QixDQUFDO1FBRUYsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoRixNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFN0QsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBRTNHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7b0JBQzdELFVBQVUsQ0FBQyxNQUFNLEdBQUc7d0JBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsUUFBUSxDQUFFO3dCQUMvRCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FBRTtxQkFDN0QsQ0FBQztvQkFDRixVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDOzhHQXRFbUIsU0FBUztrR0FBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQUQ5QixTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJSGFzSG9zdEVsZW1lbnQsIElUcmFuc2Zvcm1Nb2RlbCB9IGZyb20gJ0Bmb2JsZXgvY29yZSc7XG5pbXBvcnQgeyBGSXRlbXNDb250YWluZXJCYXNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBGQ29ubmVjdG9yQmFzZSwgRk5vZGVJbnB1dEJhc2UsIEZOb2RlT3V0bGV0QmFzZSwgRk5vZGVPdXRwdXRCYXNlIH0gZnJvbSAnLi4vZi1jb25uZWN0b3JzJztcbmltcG9ydCB7IG1lcmdlLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRkJhY2tncm91bmRCYXNlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwnO1xuaW1wb3J0IHsgRkNvbm5lY3Rpb25zQ29udGFpbmVyQmFzZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgRk5vZGVzQ29udGFpbmVyQmFzZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuXG5leHBvcnQgY29uc3QgRl9GTE9XX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxGRmxvd0Jhc2U+KCdGX0ZMT1dfQ09NUE9ORU5UJyk7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZGbG93QmFzZSBpbXBsZW1lbnRzIElIYXNIb3N0RWxlbWVudCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgYWJzdHJhY3QgaWQ6IGFueTtcblxuICBwdWJsaWMgZ2V0IGhvc3RFbGVtZW50KCk6IFNWR1NWR0VsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWZlcmVuY2UubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgb25EZXN0cm95OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuXG4gIHB1YmxpYyBhYnN0cmFjdCBmTm9kZXNDb250YWluZXI6IEZOb2Rlc0NvbnRhaW5lckJhc2U7XG5cbiAgcHVibGljIGFic3RyYWN0IGZDb25uZWN0aW9uc0NvbnRhaW5lcjogRkNvbm5lY3Rpb25zQ29udGFpbmVyQmFzZTtcblxuXG4gIHB1YmxpYyBhYnN0cmFjdCBmSXRlbXNDb250YWluZXI6IEZJdGVtc0NvbnRhaW5lckJhc2U7XG5cbiAgcHVibGljIGFic3RyYWN0IGZCYWNrZ3JvdW5kOiBGQmFja2dyb3VuZEJhc2U7XG5cbiAgcHVibGljIGFic3RyYWN0IHRyYW5zZm9ybTogSVRyYW5zZm9ybU1vZGVsO1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBvdXRsZXRzOiBGTm9kZU91dGxldEJhc2VbXTtcblxuICBwdWJsaWMgYWJzdHJhY3Qgb3V0cHV0czogRk5vZGVPdXRwdXRCYXNlW107XG5cbiAgcHVibGljIGFic3RyYWN0IGlucHV0czogRk5vZGVJbnB1dEJhc2VbXTtcblxuICBwdWJsaWMgY29ubmVjdG9yQ2hhbmdlczogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmZXJlbmNlOiBFbGVtZW50UmVmPFNWR1NWR0VsZW1lbnQ+LFxuICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmliZU9uQ29tcG9uZW50c0NoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVPbkNvbXBvbmVudHNDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBbXG4gICAgICB0aGlzLmZOb2Rlc0NvbnRhaW5lci5mTm9kZXMuY2hhbmdlcyxcbiAgICAgIHRoaXMuZkNvbm5lY3Rpb25zQ29udGFpbmVyLmZDb25uZWN0aW9ucy5jaGFuZ2VzLFxuICAgICAgdGhpcy5jb25uZWN0b3JDaGFuZ2VzXG4gICAgXTtcblxuICAgIG1lcmdlKC4uLmNoYW5nZXMpLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZE9yRGVzdHJveWVkID0gbWVyZ2UoLi4uY2hhbmdlcywgdGhpcy5vbkRlc3Ryb3kpO1xuXG4gICAgICBtZXJnZSh0aGlzLmZOb2Rlc0NvbnRhaW5lci5zdGF0ZUNoYW5nZXMpLnBpcGUoc3RhcnRXaXRoKG51bGwpLCB0YWtlVW50aWwoY2hhbmdlZE9yRGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcblxuICAgICAgICB0aGlzLmZDb25uZWN0aW9uc0NvbnRhaW5lci5mQ29ubmVjdGlvbnMuZm9yRWFjaCgoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgIGNvbm5lY3Rpb24uZnJvbVRvID0ge1xuICAgICAgICAgICAgb3V0cHV0OiB0aGlzLm91dHB1dHMuZmluZCgoeCkgPT4geC5pZCA9PT0gY29ubmVjdGlvbi5vdXRwdXRJZCkhLFxuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuaW5wdXRzLmZpbmQoKHgpID0+IHguaWQgPT09IGNvbm5lY3Rpb24uaW5wdXRJZCkhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25uZWN0aW9uLmluaXRpYWxpemUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9XG5cblxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
|