@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 +1 @@
1
- {"version":3,"file":"foblex-flow.mjs","sources":["../../../projects/f-flow/src/i-selectable.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-base.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-identifiers.ts","../../../projects/f-flow/src/components/f-connection/common/f-path/f-connection-path.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-gradient/f-connection-gradient.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-gradient/f-connection-gradient.component.html","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text-path.directive.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text.component.html","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.component.ts","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.component.html","../../../projects/f-flow/src/components/f-connection/f-temp-connection/temp-connection-input-output-model.ts","../../../projects/f-flow/src/components/f-connection/common/f-drag-handle/f-connection-drag-handle.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-selection/f-connection-selection.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-common.module.ts","../../../projects/f-flow/src/components/f-connection/common/get-connection-intersect.ts","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.module.ts","../../../projects/f-flow/src/tokens.ts","../../../projects/f-flow/src/internal/f-canvas/f-canvas-base.ts","../../../projects/f-flow/src/internal/f-canvas/f-canvas.directive.ts","../../../projects/f-flow/src/internal/f-backgroud/f-background-base.ts","../../../projects/f-flow/src/internal/f-backgroud/f-background.directive.ts","../../../projects/f-flow/src/components/f-connectors/get-element-rect-in-canvas.ts","../../../projects/f-flow/src/components/f-connectors/f-connector-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/f-node-input-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/is-node-input.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/f-node-input.directive.ts","../../../projects/f-flow/src/components/f-connectors/f-out-connector-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/f-node-outlet-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/is-node-outlet.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/f-node-outlet.directive.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/f-node-output-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/is-node-output.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/f-node-output.directive.ts","../../../projects/f-flow/src/components/f-node/f-node-base.ts","../../../projects/f-flow/src/components/f-node/f-drag-handle/f-drag-handle.directive.ts","../../../projects/f-flow/src/components/f-node/f-drag-handle/is-drag-handle.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object-base.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object.component.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object.component.html","../../../projects/f-flow/src/components/f-node/f-node.component.ts","../../../projects/f-flow/src/components/f-node/f-node.component.html","../../../projects/f-flow/src/components/f-node/is-node.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container.component.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container.component.html","../../../projects/f-flow/src/common-behaviours/change-zoom/change-zoom.ts","../../../projects/f-flow/src/common-behaviours/fit-to-parent/fit-to-parent.ts","../../../projects/f-flow/src/common-behaviours/one-to-one-centering/one-to-one-centering.ts","../../../projects/f-flow/src/common-behaviours/change-position.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/canvas-change.event.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/f-items-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/f-items-container.directive.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container.component.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container.component.html","../../../projects/f-flow/src/directives/f-draggable/e-draggable-type.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-move/canvas.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-down/canvas-on-pointer-down.handler.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-down/canvas-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-down/create-connection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-down/create-connection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection.event.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-up/create-connection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-up/create-connection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-move/reassign-connection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-down/reassign-connection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-down/reassign-connection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-connection.event.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-up/reassign-connection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-up/reassign-connection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/default-drag-handler/default-drag.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-down/external-item-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item-base.ts","../../../projects/f-flow/src/directives/f-external-item/is-external-item.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item.service.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item.directive.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-move/external-item-on-pointer-move.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-down/external-item-on-pointer-down.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/create-node.event.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-up/external-item-on-pointer-up.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-up/external-item-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-down/node-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection-source.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection-target.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/node.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-down/node.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-up/node.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-up/node-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-move/selection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-down/selection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-down/selection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-up/selection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-up/selection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.service.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable-base.ts","../../../projects/f-flow/src/directives/f-line-alignment/domain/find-nearest-coordinate-by-x.ts","../../../projects/f-flow/src/directives/f-line-alignment/domain/find-nearest-coordinate-by-y.ts","../../../projects/f-flow/src/directives/f-line-alignment/f-line-alignment.directive.ts","../../../projects/f-flow/src/directives/f-selection/f-selection.directive.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.directive.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.module.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/connect-if-intersect/connect-if-intersect.handler.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/connect-if-intersect/connect-if-intersect.request.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/f-connect-if-intersect-base.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/f-connect-if-intersect.directive.ts","../../../projects/f-flow/src/directives/f-zoom/f-zoom-base.ts","../../../projects/f-flow/src/directives/f-zoom/f-zoom.directive.ts","../../../projects/f-flow/src/components/f-flow/f-flow-base.ts","../../../projects/f-flow/src/components/f-flow/f-flow.component.ts","../../../projects/f-flow/src/components/f-flow/f-flow.component.html","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.component.ts","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.component.html","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.module.ts","../../../projects/f-flow/src/f-flow.module.ts","../../../projects/f-flow/src/foblex-flow.ts"],"sourcesContent":["export interface ISelectable {\n\n hostElement: HTMLElement | SVGElement;\n\n select(): void;\n\n deselect(): void;\n\n isSelected(): boolean;\n}\n\nexport const F_SELECTED_CLASS = 'f-selected';\n","import { Directive } from '@angular/core';\nimport { IHasHostElement, IVector, VectorExtensions } from '@foblex/core';\nimport { FNodeOutputBase } from '../../f-connectors';\nimport { IInputOutputModel } from './i-input-output-model';\nimport { F_SELECTED_CLASS, ISelectable } from '../../../i-selectable';\nimport { FConnectionPathComponent } from './f-path';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\nimport { Subject } from 'rxjs';\n\n@Directive()\nexport abstract class FConnectionBase<TOutput = FNodeOutputBase> implements IHasHostElement, ISelectable, IHasStateChanges {\n\n public abstract id: any;\n\n public abstract hostElement: SVGGElement;\n\n public abstract outputId: any;\n\n public abstract inputId: any;\n\n public fromTo: IInputOutputModel<TOutput> | undefined;\n\n public abstract fPath: FConnectionPathComponent;\n\n public path: string = '';\n\n public vector: IVector = VectorExtensions.initialize();\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public initialize(): void {\n\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public abstract initializeDrag(): void;\n\n public abstract redraw(): void;\n\n public abstract setVector(vector: IVector): void;\n\n public abstract completeDrag(): void;\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n}\n","export const F_CONNECTION_IDENTIFIERS = {\n\n textId(connectionId: string): string {\n return 'connection_text_' + connectionId;\n },\n connectionForSelectionId(connectionId: string): string {\n return 'connection_for_selection_' + connectionId;\n },\n connectionId(connectionId: string): string {\n return 'connection_' + connectionId;\n },\n gradientId(connectionId: string): string {\n return 'connection_gradient_' + connectionId;\n },\n linkToGradient(connectionId: string): string {\n return `url(#${ F_CONNECTION_IDENTIFIERS.gradientId(connectionId) })`;\n },\n linkToConnection(connectionId: string): string {\n return `#${ F_CONNECTION_IDENTIFIERS.connectionId(connectionId) }`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input, OnInit\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\nimport { ISelectable } from '../../../../i-selectable';\n\n@Component({\n selector: \"path[f-connection-path]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-path\",\n '[attr.id]': 'attrConnectionId',\n '[attr.stroke]': 'linkToGradient',\n },\n})\nexport class FConnectionPathComponent implements IHasHostElement, ISelectable, OnInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get linkToGradient(): string {\n return F_CONNECTION_IDENTIFIERS.linkToGradient(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get attrConnectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public ngOnInit(): void {\n this.deselect();\n }\n\n public setPath(path: string): void {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n\n public select(): void {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start-selected)`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end-selected)`);\n }\n\n public deselect(): void {\n if (this.fromTo?.input) {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start-${ this.fromTo?.output?.color })`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end-${ this.fromTo?.input?.color })`);\n } else {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start)`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end)`);\n }\n }\n\n public isSelected(): boolean {\n return this.hostElement.getAttribute('marker-start') === `url(#connection-marker-start-selected)`\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ElementRef, Input\n} from \"@angular/core\";\nimport { IHasHostElement, IVector, Point } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"linearGradient[fConnectionGradient]\",\n templateUrl: \"./f-connection-gradient.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-gradient\",\n '[attr.id]': 'gradientId'\n },\n})\nexport class FConnectionGradientComponent implements IHasHostElement, AfterContentInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get gradientId(): string {\n return F_CONNECTION_IDENTIFIERS.gradientId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGLinearGradientElement {\n return this.elementReference.nativeElement;\n }\n\n public get stop1Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(0) as SVGStopElement;\n }\n\n public get stop2Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(1) as SVGStopElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGLinearGradientElement>,\n ) {\n }\n\n public ngAfterContentInit(): void {\n this.stop1Element.setAttribute('offset', '0%');\n this.stop2Element.setAttribute('offset', '100%');\n }\n\n private updateGradient(): void {\n this.setFromColor(this.fromTo?.output.color);\n this.setToColor(this.fromTo?.input?.color);\n }\n\n private setFromColor(color: string | undefined): void {\n this.stop1Element.setAttribute('stop-color', color || 'transparent');\n }\n\n private setToColor(color: string | undefined): void {\n this.stop2Element.setAttribute('stop-color', color || 'transparent');\n }\n\n public redraw(vector: IVector): void {\n const x: number = vector.point2.x - vector.point1.x;\n const y: number = vector.point2.y - vector.point1.y;\n const distance: number = Math.sqrt(x * x + y * y) || 0.01;\n\n const from = new Point(0.5 - (0.5 * x) / distance, 0.5 - (0.5 * y) / distance);\n\n this.hostElement.setAttribute('x1', from.x.toString());\n this.hostElement.setAttribute('y1', from.y.toString());\n\n const to = new Point(0.5 + (0.5 * x) / distance, 0.5 + (0.5 * y) / distance);\n this.hostElement.setAttribute('x2', to.x.toString());\n this.hostElement.setAttribute('y2', to.y.toString());\n this.updateGradient();\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:stop/>\n <svg:stop/>\n</ng-container>\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Directive({\n selector: 'textPath[f-connection-text-path]',\n host: {\n '[attr.href]': 'linkToConnection'\n }\n})\nexport class FConnectionTextPathDirective implements IHasHostElement, OnInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get linkToConnection(): string {\n return F_CONNECTION_IDENTIFIERS.linkToConnection(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public ngOnInit(): void {\n this.hostElement.setAttribute('startOffset', '50%');\n this.hostElement.setAttribute('text-anchor', `middle`);\n }\n\n public getBBox(): DOMRect {\n return this.hostElement.getBBox();\n }\n\n public setOffset(offset: number): void {\n this.hostElement.setAttribute('startOffset', offset.toString());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input, ViewChild\n} from \"@angular/core\";\nimport { IHasHostElement, IVector, PointExtensions } from '@foblex/core';\nimport { FConnectionTextPathDirective } from './f-connection-text-path.directive';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"text[f-connection-text]\",\n templateUrl: \"./f-connection-text.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-text\",\n '[attr.id]': 'textId',\n },\n})\nexport class FConnectionTextComponent implements IHasHostElement {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get textId(): string {\n return F_CONNECTION_IDENTIFIERS.textId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGTextElement {\n return this.elementReference.nativeElement;\n }\n\n @ViewChild(FConnectionTextPathDirective, { static: true })\n public textPathDirective!: FConnectionTextPathDirective;\n\n constructor(\n private elementReference: ElementRef<SVGTextElement>\n ) {\n }\n\n public redraw(vector: IVector): void {\n\n const isTextReverse: boolean = FConnectionTextComponent.isTextReverse(vector);\n\n this.hostElement.setAttribute('dy', isTextReverse ? '15' : '-8');\n\n const textRect = this.textPathDirective.getBBox();\n const textRectCenter = [ textRect.x + textRect.width / 2, textRect.y + textRect.height / 2 ];\n this.hostElement.setAttribute('transform', isTextReverse ? `rotate(180, ${ textRectCenter })` : '');\n const startOffset = FConnectionTextComponent.getTextStartOffset(vector, this.fromTo?.output.name || '');\n // this.textPathDirective.setOffset(startOffset);\n\n if (startOffset < 0) {\n\n this.hostElement.style.display = 'none';\n } else {\n\n this.hostElement.style.display = 'unset';\n }\n }\n\n private static isTextReverse(vector: IVector): boolean {\n return vector.point1.x > vector.point2.x;\n }\n\n private static getTextStartOffset(vector: IVector, name: string): number {\n const symbolWidth: number = 8;\n const vectorLength: number = PointExtensions.hypotenuse(vector.point1, vector.point2);\n return vectorLength / 2 - ((name || '').length * symbolWidth) / 2;\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:textPath f-connection-text-path [fromTo]=\"fromTo\">\n {{ fromTo?.output?.name }}\n </svg:textPath>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, ElementRef, InjectionToken, ViewChild\n} from \"@angular/core\";\nimport { FConnectionBase } from '../common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../f-connectors';\nimport { FConnectionPathComponent } from '../common/f-path';\nimport { FConnectionGradientComponent } from '../common/f-gradient';\nimport { FConnectionTextComponent } from '../common/f-connection-text';\nimport { IVector } from '@foblex/core';\n\nexport const F_TEMP_CONNECTION_COMPONENT = new InjectionToken<FConnectionBase>('F_TEMP_CONNECTION_COMPONENT');\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fTempConnection]\",\n templateUrl: \"./f-temp-connection.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection f-temp-connection\"\n },\n providers: [\n { provide: F_TEMP_CONNECTION_COMPONENT, useExisting: FTempConnectionComponent }\n ],\n})\nexport class FTempConnectionComponent\n extends FConnectionBase<FNodeOutputBase | FNodeOutletBase> implements AfterViewInit {\n\n public override id: string = `f-temp-connection-${ uniqueId++ }`;\n\n public override outputId: any;\n\n public override inputId: any;\n\n @ViewChild(FConnectionPathComponent, { static: true })\n public override fPath!: FConnectionPathComponent;\n\n @ViewChild(FConnectionGradientComponent, { static: true })\n public fGradient!: FConnectionGradientComponent;\n\n @ViewChild(FConnectionTextComponent, { static: true })\n public fText!: FConnectionTextComponent;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n this.hostElement.style.display = \"none\";\n }\n\n public initializeDrag(): void {\n this.hostElement.style.display = \"unset\";\n }\n\n public setVector(vector: IVector): void {\n this.vector = vector;\n this.path = `M${ vector.point1.x },${ vector.point1.y }L${ vector.point2.x + 0.0001 },${ vector.point2.y + 0.0001 }`;\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fText.redraw(this.vector);\n }\n\n public completeDrag(): void {\n this.hostElement.style.display = \"none\";\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:linearGradient fConnectionGradient [fromTo]=\"fromTo\"></svg:linearGradient>\n <svg:g>\n <svg:path f-connection-path stroke-dasharray=\"10,10\" [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n </svg:g>\n <svg:text f-connection-text [fromTo]=\"fromTo\"></svg:text>\n</ng-container>\n","import { IInputOutputModel } from '../common/i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../f-connectors';\n\nexport class TempConnectionInputOutputModel\n implements IInputOutputModel<FNodeOutputBase | FNodeOutletBase, null> {\n\n public input = null;\n\n public constructor(\n public output: FNodeOutputBase | FNodeOutletBase\n ) {\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint } from '@foblex/core';\n\nexport const F_CONNECTION_DRAG_HANDLE_CLASS = 'f-connection-drag-handle';\n\n@Component({\n selector: \"circle[f-connection-drag-handle]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class'\n }\n})\nexport class FConnectionDragHandleComponent implements IHasHostElement {\n\n public readonly class: string = F_CONNECTION_DRAG_HANDLE_CLASS;\n\n public get hostElement(): SVGCircleElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGCircleElement>,\n ) {\n }\n\n public redraw(point: IPoint): void {\n this.hostElement.setAttribute('cx', point.x.toString());\n this.hostElement.setAttribute('cy', point.y.toString());\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"path[fConnectionSelection]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-selection\",\n '[attr.id]': 'connectionForSelectionId',\n },\n})\nexport class FConnectionSelectionComponent implements IHasHostElement {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get connectionForSelectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionForSelectionId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public setPath(path: string) {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent,\n FConnectionTextComponent, FConnectionTextPathDirective\n} from './index';\n\n@NgModule({\n declarations: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n ]\n})\nexport class FConnectionCommonModule {\n}\n","import { IRect, IVector, RectExtensions } from '@foblex/core';\n\nexport function getConnectionIntersect(fromRect: IRect, toRect: IRect): IVector {\n\n const fromResult = RectExtensions.intersectionWithVector(fromRect, fromRect.gravityCenter, toRect.gravityCenter);\n const toResult = RectExtensions.intersectionWithVector(toRect, fromRect.gravityCenter, toRect.gravityCenter);\n\n return {\n point1: fromResult ? fromResult[ 1 ] : fromRect.gravityCenter,\n point2: toResult ? toResult[ 0 ] : toRect.gravityCenter,\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FTempConnectionComponent } from './f-temp-connection.component';\nimport { FConnectionCommonModule } from '../common';\n\n@NgModule({\n declarations: [\n FTempConnectionComponent,\n ],\n imports: [\n CommonModule,\n FConnectionCommonModule\n ],\n exports: [\n FTempConnectionComponent,\n ]\n})\nexport class FTempConnectionModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const F_CONNECT_IF_INTERSECT = new InjectionToken('F_CONNECT_IF_INTERSECT');\n\nexport const F_CONNECTION_COMPONENT = new InjectionToken('F_CONNECTION_COMPONENT');\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\nexport const F_CANVAS = new InjectionToken<FCanvasBase>('F_CANVAS');\n\n@Directive()\nexport abstract class FCanvasBase implements IHasHostElement {\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGSVGElement>\n ) {\n this.initialize();\n }\n\n protected initialize(): void {\n this.hostElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg');\n this.hostElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n this.hostElement.setAttribute('version', '1.1');\n this.hostElement.setAttribute('baseProfile', 'full');\n this.hostElement.style.cssText = 'user-select:none; width:100%; height:100%;';\n }\n}\n","import {\n Directive, ElementRef\n} from \"@angular/core\";\nimport { F_CANVAS, FCanvasBase } from './f-canvas-base';\n\n@Directive({\n selector: \"svg[fCanvas]\",\n standalone: true,\n providers: [ { provide: F_CANVAS, useExisting: FCanvasDirective } ],\n})\nexport class FCanvasDirective extends FCanvasBase {\n\n constructor(\n elementReference: ElementRef<SVGSVGElement>\n ) {\n super(elementReference);\n }\n}\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IHasHostElement, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { FCanvasBase } from '../f-canvas';\n\nexport const F_BACKGROUND = new InjectionToken<FBackgroundBase>('F_BACKGROUND');\n\n@Directive()\nexport abstract class FBackgroundBase implements IHasHostElement {\n\n public transform: ITransformModel = TransformModelExtensions.default();\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGGElement>,\n private fCanvas: FCanvasBase\n ) {\n console.log('FBackgroundBase');\n }\n\n public isBackgroundElement(element: HTMLElement | SVGElement): boolean {\n return this.hostElement === element || this.hostElement.contains(element) || this.fCanvas.hostElement.contains(element);\n }\n}\n","import {\n Directive, ElementRef, Inject\n} from \"@angular/core\";\nimport { F_BACKGROUND, FBackgroundBase } from './f-background-base';\nimport { F_CANVAS, FCanvasBase } from '../f-canvas';\n\n@Directive({\n selector: \"g[fBackground]\",\n standalone: true,\n providers: [ { provide: F_BACKGROUND, useExisting: FBackgroundDirective } ],\n})\nexport class FBackgroundDirective extends FBackgroundBase {\n\n constructor(\n elementReference: ElementRef<SVGGElement>,\n @Inject(F_CANVAS) fCanvas: FCanvasBase\n ) {\n super(elementReference, fCanvas);\n }\n}\n","import { IRect, ITransformModel, Point, RectExtensions, SizeExtensions } from '@foblex/core';\n\nexport function getElementRectInCanvas(element: HTMLElement | SVGElement, transform: ITransformModel, svgHost: SVGSVGElement): IRect {\n const rect = RectExtensions.fromElement(element);\n const position = Point.fromPoint(rect).matrixTransform(svgHost).sub(transform.scaledPosition).sub(transform.position).div(transform.scale);\n const size = SizeExtensions.initialize(rect.width / transform.scale, rect.height / transform.scale);\n return RectExtensions.initialize(position.x, position.y, size.width, size.height);\n}\n","import { Subject } from 'rxjs';\nimport { IHasHostElement, IRect, ITransformModel } from '@foblex/core';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { getElementRectInCanvas } from './get-element-rect-in-canvas';\n\nexport abstract class FConnectorBase implements IHasStateChanges, IHasHostElement {\n\n public abstract id: any;\n\n public abstract color: string;\n\n public abstract disabled: boolean;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract canBeConnected: boolean;\n\n public getElementRectInCanvas(transform: ITransformModel, svgHost: SVGSVGElement): IRect {\n return getElementRectInCanvas(this.hostElement, transform, svgHost);\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_INPUT_DIRECTIVE = new InjectionToken<FNodeInputBase>('F_NODE_INPUT_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeInputBase extends FConnectorBase {\n\n public abstract multiple: boolean;\n\n public isConnected: boolean = false;\n\n public get canBeConnected(): boolean {\n return !this.disabled && (this.multiple ? true : !this.isConnected);\n }\n}\n","export function isNodeInput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeInput]');\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_INPUT_DIRECTIVE, FNodeInputBase } from './f-node-input-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeInput]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-input\",\n '[class.f-node-input-multiple]': 'multiple',\n '[class.f-node-input-disabled]': 'disabled',\n '[class.f-node-input-not-connectable]': '!canBeConnected',\n },\n providers: [ { provide: F_NODE_INPUT_DIRECTIVE, useExisting: FNodeInputDirective } ],\n})\nexport class FNodeInputDirective extends FNodeInputBase {\n\n @Input()\n public override id: any = `f-node-input-${ uniqueId++ }`;\n\n @Input('fNodeInputColor')\n public fNodeInputColor: string | undefined;\n\n public get color(): string {\n return this.fNodeInputColor || 'black';\n }\n\n @Input('fNodeInputMultiple')\n public override multiple: boolean = true;\n\n @Input('fNodeInputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>\n ) {\n super();\n }\n}\n","import { FConnectorBase } from './f-connector-base';\n\nexport abstract class FOutConnectorBase extends FConnectorBase {\n\n public abstract name: string;\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FOutConnectorBase } from '../f-out-connector-base';\n\nexport const F_NODE_OUTLET_DIRECTIVE = new InjectionToken<FNodeOutletBase>('F_NODE_OUTLET_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeOutletBase extends FOutConnectorBase {\n\n public abstract isConnectionFromOutlet: boolean;\n\n\n private outputs: FOutConnectorBase[] = [];\n\n public get canBeConnected(): boolean {\n return !this.disabled;\n }\n\n public setOutputs(outputs: FOutConnectorBase[]): void {\n this.outputs = outputs;\n }\n}\n","export function isNodeOutlet(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutlet]');\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_OUTLET_DIRECTIVE, FNodeOutletBase } from './f-node-outlet-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutlet]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-outlet\",\n '[class.f-node-outlet-disabled]': 'disabled'\n },\n providers: [ { provide: F_NODE_OUTLET_DIRECTIVE, useExisting: FNodeOutletDirective } ],\n})\nexport class FNodeOutletDirective extends FNodeOutletBase {\n\n @Input()\n public override id: string = `f-node-outlet-${ uniqueId++ }`;\n\n @Input('fNodeOutletColor')\n public override color: string = 'black';\n\n @Input()\n public override name: string = '';\n\n @Input('fNodeOutletDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input()\n public override isConnectionFromOutlet: boolean = false\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>\n ) {\n super();\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FOutConnectorBase } from '../f-out-connector-base';\n\nexport const F_NODE_OUTPUT_DIRECTIVE = new InjectionToken<FNodeOutputBase>('F_NODE_OUTPUT_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeOutputBase extends FOutConnectorBase {\n\n public isConnected: boolean = false;\n\n public override get canBeConnected(): boolean {\n return !this.disabled && !this.isConnected;\n }\n}\n","export function isNodeOutput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutput]');\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { FNodeOutputBase, F_NODE_OUTPUT_DIRECTIVE } from './f-node-output-base';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutput]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-output\",\n '[class.f-node-output-disabled]': 'disabled',\n '[class.f-node-output-connected]': 'isConnected'\n },\n providers: [ { provide: F_NODE_OUTPUT_DIRECTIVE, useExisting: FNodeOutputDirective } ],\n})\nexport class FNodeOutputDirective extends FNodeOutputBase {\n\n @Input()\n public override id: any = `f-node-output-${ uniqueId++ }`;\n\n @Input('fNodeOutputColor')\n public override color: string = 'black';\n\n @Input()\n public override name: string = '';\n\n @Input('fNodeOutputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>\n ) {\n super();\n }\n}\n","import { EventEmitter, InjectionToken, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IHasHostElement, IPoint, PointExtensions } from '@foblex/core';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { F_SELECTED_CLASS, ISelectable } from '../../i-selectable';\nimport { FDragHandleDirective } from './f-drag-handle';\nimport { FForeignObjectBase } from './f-foreign-object';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\n\nexport const F_NODE_COMPONENT = new InjectionToken<FNodeBase>('F_NODE_COMPONENT');\n\nexport abstract class FNodeBase implements IHasStateChanges, ISelectable, IHasHostElement {\n\n public abstract id: any;\n\n public abstract handles: QueryList<FDragHandleDirective>;\n\n public abstract fForeignObject: FForeignObjectBase;\n\n public abstract hostElement: SVGGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract positionChange: EventEmitter<IPoint>;\n\n public abstract position: IPoint;\n\n protected _position: IPoint = PointExtensions.initialize();\n\n public abstract refresh(): void;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public redraw(): void {\n this.hostElement.setAttribute('transform', 'translate(' + this.position.x + ',' + this.position.y + ')');\n }\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n public updatePosition(position: IPoint): void {\n this._position = position;\n }\n\n public completeDrag(): void {\n this.positionChange.emit(this.position)\n }\n}\n","import {\n Directive, ElementRef, Inject, InjectionToken, Input, OnDestroy, Optional, SkipSelf\n} from \"@angular/core\";\nimport { Subject } from 'rxjs';\nimport { BooleanExtensions, IHasHostElement } from '@foblex/core';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\nimport { F_NODE_COMPONENT } from '../f-node-base';\n\nexport const F_DRAG_HANDLE: InjectionToken<FDragHandleDirective> = new InjectionToken<FDragHandleDirective>('F_DRAG_HANDLE');\n\n@Directive({\n selector: \"[fDragHandle]\",\n host: {\n class: \"f-drag-handle f-component\",\n '[class.f-drag-handle-disabled]': 'disabled'\n },\n providers: [ { provide: F_DRAG_HANDLE, useExisting: FDragHandleDirective } ],\n})\nexport class FDragHandleDirective implements IHasHostElement, IHasStateChanges, OnDestroy {\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public _parentNode: {} | undefined;\n\n @Input('fDragHandleDisabled')\n public get disabled(): boolean {\n return this.isDisabled;\n }\n\n public set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE_COMPONENT) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","export function isNodeDragHandle(element: HTMLElement | SVGElement): boolean {\n const dragHandle = getClosestDragHandle(element);\n return !!dragHandle && !isElementOrParentExcluded(element);\n}\n\nfunction isElementOrParentExcluded(element: HTMLElement | SVGElement): boolean {\n const isContains = isElementContainsClass(element);\n const parentElement = (element.parentElement as HTMLElement);\n const dragHandle = getClosestDragHandle(parentElement);\n if (!isContains && !!dragHandle) {\n return isElementOrParentExcluded(parentElement);\n }\n return isContains;\n}\n\nfunction getClosestDragHandle(element: HTMLElement | SVGElement): HTMLElement {\n return element.closest('[fDragHandle]') as HTMLElement;\n}\n\nfunction isElementContainsClass(element: HTMLElement | SVGElement): boolean {\n return element.classList.contains('f-drag-handle-disabled');\n}\n","import {\n AfterViewInit, Directive, InjectionToken, OnDestroy\n} from '@angular/core';\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\nimport { FResizeObserver, IHasHostElement, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\n\nexport const F_FOREIGN_OBJECT_COMPONENT = new InjectionToken<FForeignObjectBase>('F_FOREIGN_OBJECT_COMPONENT');\n\n@Directive()\nexport abstract class FForeignObjectBase implements AfterViewInit, IHasStateChanges, IHasHostElement, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n public _parentNode: {} | undefined;\n\n public abstract hostElement: SVGForeignObjectElement;\n\n public stateChanges: Subject<void> = new Subject<void>();\n\n public abstract transform: ITransformModel;\n\n protected constructor(\n _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngAfterViewInit(): void {\n this.subscriptions$.add(\n this.subscribeOnResizeChanges()\n );\n }\n\n private subscribeOnResizeChanges(): Subscription {\n return new FResizeObserver(this.hostElement.firstChild as HTMLElement).pipe(startWith(null), debounceTime(10)).subscribe(() => {\n this.redraw();\n this.stateChanges.next();\n });\n }\n\n public redraw(): void {\n const element = this.hostElement.firstChild as HTMLElement;\n if (element && !!element.getBoundingClientRect) {\n const rect = RectExtensions.fromElement(element);\n const scale = this.transform.scale;\n this.hostElement.setAttribute(\"width\", `${ rect.width / scale }`);\n this.hostElement.setAttribute(\"height\", `${ rect.height / scale }`);\n }\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n this.subscriptions$.unsubscribe();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject, Input, Optional, SkipSelf\n} from \"@angular/core\";\nimport {\n FForeignObjectBase, F_FOREIGN_OBJECT_COMPONENT\n} from './f-foreign-object-base';\nimport { FFlowComponent } from '../../f-flow';\nimport { ITransformModel } from '@foblex/core';\nimport { F_NODE_COMPONENT } from '../index';\n\n@Component({\n selector: \"foreignObject[fForeignObject]\",\n exportAs: \"fComponent\",\n templateUrl: \"./f-foreign-object.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-foreign-object f-component\",\n '[attr.width]': 'defaultWidth',\n '[attr.height]': 'defaultHeight'\n },\n providers: [\n { provide: F_FOREIGN_OBJECT_COMPONENT, useExisting: FForeignObjectComponent }\n ]\n})\nexport class FForeignObjectComponent extends FForeignObjectBase {\n\n @Input('fDefaultWidth')\n public defaultWidth: number = 100;\n\n @Input('fDefaultHeight')\n public defaultHeight: number = 100;\n\n public get hostElement(): SVGForeignObjectElement {\n return this.elementReference.nativeElement;\n }\n\n public get transform(): ITransformModel {\n return this.flow.transform;\n }\n\n constructor(\n private elementReference: ElementRef<SVGForeignObjectElement>,\n private flow: FFlowComponent,\n @Inject(F_NODE_COMPONENT) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n super(_parentNode);\n this.hostElement.style.cssText = 'overflow:visible;';\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content></ng-content>\n</ng-container>\n","import {\n ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, EventEmitter,\n Input, OnDestroy, OnInit, Output, QueryList,\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint, PointExtensions, PointInput } from '@foblex/core';\nimport {\n FNodeBase, F_NODE_COMPONENT\n} from './f-node-base';\nimport { F_DRAG_HANDLE, FDragHandleDirective } from './f-drag-handle';\nimport { F_FOREIGN_OBJECT_COMPONENT, FForeignObjectBase } from './f-foreign-object';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fNode]\",\n exportAs: \"fComponent\",\n templateUrl: \"./f-node.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n class: \"f-node f-component\"\n },\n providers: [\n { provide: F_NODE_COMPONENT, useExisting: FNodeComponent }\n ]\n})\nexport class FNodeComponent extends FNodeBase implements OnInit, IHasHostElement, OnDestroy {\n\n @Input()\n public override id: any = `f-node-${ uniqueId++ }`;\n\n @ContentChildren(F_DRAG_HANDLE, { descendants: true })\n public override handles!: QueryList<FDragHandleDirective>;\n\n @ContentChild(F_FOREIGN_OBJECT_COMPONENT, { static: true })\n public override fForeignObject!: FForeignObjectBase;\n\n @Input('fNodePosition')\n public override set position(value: PointInput) {\n this._position = PointExtensions.castToPoint(value);\n this.refresh();\n }\n\n public override get position(): IPoint {\n return this._position;\n }\n\n @Output('fNodePositionChange')\n public override positionChange: EventEmitter<IPoint> = new EventEmitter<IPoint>();\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n super.redraw();\n }\n\n public refresh(): void {\n this.stateChanges.next();\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content></ng-content>\n</ng-container>\n","export function isNode(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNode]');\n}\n\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken, QueryList } from '@angular/core';\nimport { FConnectionBase } from '../../../components/f-connection/common/f-connection-base';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../../../components';\n\nexport const F_CONNECTIONS_CONTAINER: InjectionToken<FConnectionsContainerBase> = new InjectionToken<FConnectionsContainerBase>('F_CONNECTIONS_CONTAINER');\n\n@Directive()\nexport abstract class FConnectionsContainerBase implements IHasHostElement {\n\n public abstract hostElement: SVGGElement;\n\n public abstract fConnections: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n public abstract fTempConnection: FConnectionBase<FNodeOutputBase | FNodeOutletBase>;\n\n public findConnectionWithElement(element: HTMLElement | SVGElement): FConnectionBase<FNodeOutputBase> | undefined {\n return this.fConnections.toArray().find((x) => {\n return x.isContains(element);\n });\n }\n\n public findOutgoingConnections(outputs: FNodeOutputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return findOutgoingConnections(this.fConnections.toArray(), outputs);\n }\n\n public findIncomingConnections(inputs: FNodeInputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return findIncomingConnections(this.fConnections.toArray(), inputs);\n }\n}\n\nexport function findIncomingConnections(allConnections: FConnectionBase<FNodeOutputBase>[], inputs: FNodeInputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return allConnections.filter((x) => {\n return inputs.includes(x.fromTo!.input);\n })!;\n}\n\nexport function findOutgoingConnections(allConnections: FConnectionBase<FNodeOutputBase>[], outputs: FNodeOutputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return allConnections.filter((x) => {\n return outputs.includes(x.fromTo!.output);\n })!;\n}\n","import { Component, ContentChildren, ElementRef, QueryList, ViewChild } from \"@angular/core\";\nimport { F_CONNECTIONS_CONTAINER, FConnectionsContainerBase } from './f-connections-container-base';\nimport { FConnectionBase } from '../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../components';\nimport { F_TEMP_CONNECTION_COMPONENT } from '../../../components';\nimport { F_CONNECTION_COMPONENT } from '../../../tokens';\n\n@Component({\n selector: \"g[fConnectionsContainer]\",\n templateUrl: './f-connections-container.component.html',\n exportAs: 'fComponent',\n host: {\n 'class': 'f-connections-container'\n },\n providers: [ { provide: F_CONNECTIONS_CONTAINER, useExisting: FConnectionsContainerComponent } ],\n})\nexport class FConnectionsContainerComponent extends FConnectionsContainerBase {\n\n @ContentChildren(F_CONNECTION_COMPONENT, { descendants: true })\n public override fConnections!: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n @ViewChild(F_TEMP_CONNECTION_COMPONENT, { static: true })\n public override fTempConnection!: FConnectionBase<FNodeOutputBase | FNodeOutletBase>;\n\n public override get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super();\n }\n}\n\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content select=\"[fConnection]\"></ng-content>\n <svg:g fTempConnection></svg:g>\n</ng-container>\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanChangeZoom } from './i-can-change-zoom';\nimport { IPoint, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanChangeZoomConstructor = Constructor<ICanChangeZoom> & AbstractConstructor<ICanChangeZoom>;\n\nexport function mixinChangeZoom<T extends AbstractConstructor<ITransformable>>(base: T): CanChangeZoomConstructor & T;\nexport function mixinChangeZoom<T extends Constructor<ITransformable>>(base: T): CanChangeZoomConstructor & T {\n return class extends base {\n\n public setZoom(scaleValue: number, toPosition: IPoint): void {\n if (scaleValue !== this.transform.scale) {\n\n const summaryPosition = PointExtensions.sum(this.transform.scaledPosition, this.transform.position);\n\n const newX = toPosition.x - (toPosition.x - summaryPosition.x) * scaleValue / this.transform.scale;\n const newY = toPosition.y - (toPosition.y - summaryPosition.y) * scaleValue / this.transform.scale;\n\n this.transform.scale = scaleValue;\n this.transform.scaledPosition = PointExtensions.sub(PointExtensions.initialize(newX, newY), this.transform.position);\n }\n }\n\n public setScalePosition(value: IPoint): void {\n this.transform.scaledPosition = value;\n }\n\n public resetZoom(): void {\n this.transform.scale = 1;\n this.transform.scaledPosition = PointExtensions.initialize();\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanFitToParent } from './i-can-fit-to-parent';\nimport { IPoint, IRect, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanFitToParentConstructor = Constructor<ICanFitToParent> & AbstractConstructor<ICanFitToParent>;\n\nexport function mixinFitToParent<T extends AbstractConstructor<ITransformable>>(base: T): CanFitToParentConstructor & T;\nexport function mixinFitToParent<T extends Constructor<ITransformable>>(base: T): CanFitToParentConstructor & T {\n return class extends base {\n\n public fitToParent(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n if (\n (itemsContainerWidth > parentRect.width || itemsContainerHeight > parentRect.height) ||\n itemsContainerWidth < parentRect.width && itemsContainerHeight < parentRect.height\n ) {\n this.transform.scale = Math.min(parentRect.width / itemsContainerWidth, parentRect.height / itemsContainerHeight);\n }\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanOneToOneCentering } from './i-can-one-to-one-centering';\nimport { IPoint, IRect, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanOneToOneCenteringConstructor = Constructor<ICanOneToOneCentering> & AbstractConstructor<ICanOneToOneCentering>;\n\nexport function mixinOneToOneCentering<T extends AbstractConstructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T;\nexport function mixinOneToOneCentering<T extends Constructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T {\n return class extends base {\n\n public oneToOneCentering(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n this.transform.scale = 1;\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from './constructor';\nimport { IPoint, ITransformable, PointExtensions } from '@foblex/core';\n\nexport interface ICanChangePosition {\n\n setPosition(position: IPoint): void;\n\n getPosition(): IPoint;\n}\n\ntype CanChangePositionConstructor = Constructor<ICanChangePosition> & AbstractConstructor<ICanChangePosition>;\n\nexport function mixinChangePosition<T extends AbstractConstructor<ITransformable>>(base: T): CanChangePositionConstructor & T;\nexport function mixinChangePosition<T extends Constructor<ITransformable>>(base: T): CanChangePositionConstructor & T {\n return class extends base {\n\n public getPosition(): IPoint {\n return this.transform.position;\n }\n\n public setPosition(position: IPoint): void {\n this.transform.position = PointExtensions.copy(position);\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CanvasChangeEvent {\n constructor(\n public readonly position: IPoint,\n public readonly scale: number,\n ) {\n }\n}\n","import {\n IHasHostElement,\n ITransformModel, PointExtensions,\n TransformModelExtensions\n} from '@foblex/core';\nimport { Directive, ElementRef, EventEmitter, InjectionToken } from '@angular/core';\nimport {\n ICanChangePosition, ICanChangeZoom, ICanFitToParent, ICanOneToOneCentering,\n mixinChangePosition,\n mixinChangeZoom,\n mixinFitToParent,\n mixinOneToOneCentering\n} from '../../../common-behaviours';\nimport { CanvasChangeEvent } from './canvas-change.event';\n\nexport const F_ITEMS_CONTAINER = new InjectionToken<FItemsContainerBase>('F_ITEMS_CONTAINER');\n\nconst MIXIN_BASE = mixinChangePosition(\n mixinFitToParent(\n mixinOneToOneCentering(\n mixinChangeZoom(\n class {\n constructor(\n public transform: ITransformModel\n ) {\n }\n }))));\n\n@Directive()\nexport abstract class FItemsContainerBase\n extends MIXIN_BASE\n implements IHasHostElement, ICanChangePosition, ICanFitToParent, ICanOneToOneCentering, ICanChangeZoom {\n\n public abstract canvasChange: EventEmitter<CanvasChangeEvent>;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super(TransformModelExtensions.default());\n this.parseData();\n }\n\n public parseData(): void {\n const transform = TransformModelExtensions.fromString(this.hostElement.getAttribute(\"transform\"));\n this.transform = transform ? transform : this.transform;\n }\n\n public redraw(): void {\n this.hostElement.setAttribute(\"transform\", TransformModelExtensions.toString(this.transform));\n }\n\n public redrawWithAnimation(): void {\n this.hostElement.setAttribute(\"style\", 'transition: transform 0.15s ease-in-out');\n this.redraw();\n setTimeout(() => {\n this.hostElement.removeAttribute(\"style\");\n }, 150)\n }\n\n public completeDrag(): void {\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n this.canvasChange.emit(\n new CanvasChangeEvent(position, this.transform.scale)\n );\n }\n}\n","import {\n Directive, ElementRef, EventEmitter, Input, Output,\n} from \"@angular/core\";\nimport {\n FItemsContainerBase, F_ITEMS_CONTAINER\n} from './f-items-container-base';\nimport { IPoint, PointExtensions } from '@foblex/core';\nimport { CanvasChangeEvent } from './canvas-change.event';\n\n@Directive({\n selector: \"g[fItemsContainer]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-items-container'\n },\n providers: [ { provide: F_ITEMS_CONTAINER, useExisting: FItemsContainerDirective } ],\n})\nexport class FItemsContainerDirective extends FItemsContainerBase {\n\n @Output()\n public override canvasChange: EventEmitter<CanvasChangeEvent> = new EventEmitter<CanvasChangeEvent>();\n\n @Input()\n public set position(value: IPoint | undefined) {\n if (!value) {\n return;\n }\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n if (!PointExtensions.isEqual(position, value)) {\n this.transform.position = value;\n this.transform.scaledPosition = PointExtensions.initialize();\n this.redraw();\n }\n }\n\n @Input()\n public set scale(value: number | undefined) {\n if (!value) {\n return;\n }\n this.transform.scale = value;\n this.redraw();\n }\n\n constructor(\n elementReference: ElementRef<SVGGElement>\n ) {\n super(elementReference);\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, ElementRef, InjectionToken, NgZone, QueryList } from '@angular/core';\nimport { defer, merge, Observable, startWith, switchMap, take } from 'rxjs';\nimport { FNodeBase } from '../../../components';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\n\nexport const F_NODES_CONTAINER = new InjectionToken<FNodesContainerBase>('F_NODES_CONTAINER');\n\n@Directive()\nexport abstract class FNodesContainerBase implements IHasHostElement, IHasStateChanges {\n\n public abstract hostElement: SVGGElement;\n\n public abstract fNodes: QueryList<FNodeBase>;\n\n public readonly stateChanges: Observable<void> = defer(() => {\n const items = this.fNodes;\n\n if (items) {\n return items.changes.pipe(\n startWith(items),\n switchMap(() => merge(...items.map(x => merge(x.fForeignObject.stateChanges, x.stateChanges)))),\n );\n }\n\n return this.ngZone.onStable.pipe(\n take(1),\n switchMap(() => this.stateChanges),\n );\n }) as Observable<void>;\n\n protected constructor(\n\n private ngZone: NgZone\n ) {\n }\n\n public findNode(element: HTMLElement | SVGElement): FNodeBase | undefined {\n return this.fNodes.find((x) => {\n return x.isContains!(element);\n });\n }\n\n public setNodeToTopLayer(node: FNodeBase): void {\n const elements = Array.from(this.hostElement.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === node.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.hostElement.removeChild(x);\n this.hostElement.insertBefore(x, node.hostElement);\n });\n }\n }\n}\n","import {\n Component, ContentChildren, ElementRef, NgZone, QueryList\n} from \"@angular/core\";\nimport { F_NODES_CONTAINER, FNodesContainerBase } from './f-nodes-container-base';\nimport { F_NODE_COMPONENT, FNodeBase } from '../../../components';\n\n@Component({\n selector: \"g[fNodesContainer]\",\n templateUrl: './f-nodes-container.component.html',\n exportAs: 'fComponent',\n host: {\n 'class': 'f-nodes-container'\n },\n providers: [ { provide: F_NODES_CONTAINER, useExisting: FNodesContainerComponent } ],\n})\nexport class FNodesContainerComponent extends FNodesContainerBase {\n\n public override get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n @ContentChildren(F_NODE_COMPONENT, { descendants: true })\n public override fNodes!: QueryList<FNodeBase>;\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ngZone: NgZone\n ) {\n super(ngZone);\n }\n}\n\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content select=\"[fNode]\"></ng-content>\n</ng-container>\n","export enum EDraggableType {\n\n NODE = 'node',\n\n REASSIGN_CONNECTION = 'reassign-connection',\n\n TEMP_CONNECTION = 'temp-connection',\n\n CONNECTION = 'connection',\n\n CANVAS = 'canvas',\n\n PALETTE_ITEM = 'palette-item',\n\n DEFAULT = 'default',\n\n SELECTION = 'selection'\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { FItemsContainerBase } from '../../../f-containers/f-items-container';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { IDraggableItem } from '../../i-draggable-item';\n\nexport class CanvasOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CANVAS;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fItemsContainer: FItemsContainerBase\n ) {\n this.onPointerDownPosition = this.fItemsContainer.transform.position;\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n this.fItemsContainer.setPosition(Point.fromPoint(this.onPointerDownPosition).add(difference));\n this.fItemsContainer.redraw();\n }\n\n public complete(): void {\n this.fItemsContainer.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { CanvasOnPointerDownRequest } from './canvas-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FItemsContainerBase } from '../../../f-containers';\nimport { FBackgroundBase } from '../../../../internal';\nimport { CanvasOnPointerMove } from '../canvas-on-pointer-move';\n\nexport class CanvasOnPointerDownHandler\n implements IHandler<CanvasOnPointerDownRequest, IDragHandler | undefined> {\n\n constructor(\n private fBackground: FBackgroundBase,\n private fItemsContainer: FItemsContainerBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: CanvasOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n if (this.fBackground.isBackgroundElement(payload.event.targetElement) && payload.event.isMouseLeftButton()) {\n result = {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: [\n new CanvasOnPointerMove(this.fItemsContainer)\n ]\n };\n }\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nexport class CanvasOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\n\nexport class CreateConnectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n ) {\n }\n}\n","import {\n IPoint,\n IRect,\n ITransformModel,\n Point,\n RectExtensions,\n} from '@foblex/core';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../../components';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\n\nexport class CreateConnectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.TEMP_CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase | FNodeOutletBase>,\n private mouseDownPoint: IPoint,\n transform: ITransformModel,\n hostElement: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(transform, hostElement);\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.mouseDownPoint.x, this.mouseDownPoint.y, 0, 0);\n }\n\n public initialize(): void {\n this.connection.initializeDrag();\n this.move(new Point(0, 0));\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n const vector = getConnectionIntersect(\n this.onPointerDownFromConnectorRect,\n toPoint\n );\n\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n this.connection.completeDrag();\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindFirstCanBeConnectedOutputByOutletRequest } from './find-first-can-be-connected-output-by-outlet.request';\nimport { FFlowBase, FNodeOutputBase } from '../../../../../components';\n\nexport class FindFirstCanBeConnectedOutputByOutletHandler\n implements IHandler<FindFirstCanBeConnectedOutputByOutletRequest, FNodeOutputBase | undefined> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FindFirstCanBeConnectedOutputByOutletRequest): FNodeOutputBase | undefined {\n let result: FNodeOutputBase | undefined;\n\n const node = this.fFlow.fNodesContainer.fNodes.find((x) => x.isContains(payload.outlet.hostElement));\n if (!node) {\n throw new Error('Node not found');\n }\n\n const outputsOfNode = this.fFlow.outputs.filter((x) => {\n return node.isContains(x.hostElement) && x.canBeConnected;\n });\n\n if (outputsOfNode.length > 0) {\n result = outputsOfNode[ 0 ];\n }\n\n return result;\n }\n}\n","import { FNodeOutletBase } from '../../../../../components';\n\nexport class FindFirstCanBeConnectedOutputByOutletRequest {\n\n constructor(\n public outlet: FNodeOutletBase\n ) {\n }\n}\n","import { IHandler, IPoint, Point } from '@foblex/core';\nimport { CreateConnectionOnPointerDownRequest } from './create-connection-on-pointer-down.request';\nimport { IDragHandler } from '../../../i-drag-handler';\nimport {\n FFlowBase, FNodeBase, FNodeOutletBase, FNodeOutputBase, isNodeOutlet, isNodeOutput, TempConnectionInputOutputModel\n} from '../../../../../components';\nimport { FNodesContainerBase } from '../../../../f-containers/f-nodes-container';\nimport { CreateConnectionOnPointerMove } from '../create-connection.on-pointer-move';\nimport {\n FConnectionsContainerBase\n} from '../../../../f-containers/f-connections-container/f-connections-container-base';\nimport {\n FindFirstCanBeConnectedOutputByOutletHandler,\n FindFirstCanBeConnectedOutputByOutletRequest\n} from '../find-first-can-be-connected-output-by-outlet';\n\nexport class CreateConnectionOnPointerDown\n implements IHandler<CreateConnectionOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n private get fNodesContainer(): FNodesContainerBase {\n return this.fFlow.fNodesContainer;\n }\n\n constructor(\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: CreateConnectionOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const node = this.fNodesContainer.findNode(payload.event.targetElement);\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n if (node) {\n\n if (isNodeOutlet(payload.event.targetElement)) {\n const outlet = this.fFlow.outlets.find((x) => {\n return x.hostElement.contains(payload.event.targetElement);\n });\n if (!outlet) {\n throw new Error('Outlet not found');\n }\n const nodeOutputs = this.fFlow.outputs.filter((x) => node.isContains(x.hostElement));\n outlet.setOutputs(nodeOutputs);\n\n if (outlet.canBeConnected) {\n const outletCenter = outlet.getElementRectInCanvas(payload.transform, this.hostElement).gravityCenter;\n if (outlet.isConnectionFromOutlet) {\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, outlet, outletCenter);\n } else {\n const output = new FindFirstCanBeConnectedOutputByOutletHandler(this.fFlow).handle(\n new FindFirstCanBeConnectedOutputByOutletRequest(outlet)\n );\n if (!output) {\n throw new Error('Output not found');\n }\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, output, outletCenter);\n }\n }\n } else if (this.isNodeOutput(payload.event.targetElement, node)) {\n const output = this.fFlow.outputs.find((x) => {\n return x.hostElement.contains(payload.event.targetElement);\n });\n if (!output) {\n throw new Error('Output not found');\n }\n if (output.canBeConnected) {\n const outputCenter = output.getElementRectInCanvas(payload.transform, this.hostElement).gravityCenter;\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, output, outputCenter);\n }\n }\n }\n\n return result;\n }\n\n private createConnectionHandler(\n payload: CreateConnectionOnPointerDownRequest,\n pointerPositionInCanvas: Point,\n output: FNodeOutputBase | FNodeOutletBase,\n outputCenter: IPoint\n ): IDragHandler {\n\n // @ts-ignore\n this.fConnectionsContainer.fTempConnection.fromTo = new TempConnectionInputOutputModel(output);\n\n return {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: [\n new CreateConnectionOnPointerMove(\n this.fConnectionsContainer.fTempConnection, outputCenter, payload.transform, this.hostElement\n )\n ]\n };\n }\n\n private isNodeOutput(targetElement: HTMLElement, node: FNodeBase): boolean {\n const outlets = this.fFlow.outlets.filter((x) => node.isContains(x.hostElement));\n return isNodeOutput(targetElement) && !outlets.length;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeBase, FNodeInputBase } from '../../../../../components';\nimport {\n FirstNotConnectedInputOfNodeUnderPointerRequest\n} from './first-not-connected-input-of-node-under-pointer.request';\n\nexport class FirstNotConnectedInputOfNodeUnderPointerHandler\n implements IHandler<FirstNotConnectedInputOfNodeUnderPointerRequest, FNodeInputBase | undefined> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FirstNotConnectedInputOfNodeUnderPointerRequest): FNodeInputBase | undefined {\n const position = payload.event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n\n const nodes = elementsFromPoint.map((element) => {\n return this.fFlow.fNodesContainer.fNodes.find((x) => x.isContains(element))\n }).filter((x) => !!x) as FNodeBase[];\n\n const inputs = nodes.map((x) => {\n return this.fFlow.inputs.filter((i) => x.isContains(i.hostElement)).find((i) => {\n return !i.isConnected && i.canBeConnected;\n });\n });\n const result = inputs.find((x) => !!x);\n\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class FirstNotConnectedInputOfNodeUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeInputBase, isNodeInput } from '../../../../../components';\nimport {\n InputsUnderPointerRequest\n} from './inputs-under-pointer.request';\n\nexport class InputsUnderPointerHandler\n implements IHandler<InputsUnderPointerRequest, FNodeInputBase[]> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: InputsUnderPointerRequest): FNodeInputBase[] {\n const position = payload.event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n return elementsFromPoint.filter((x) => isNodeInput(x as HTMLElement)).map((element) => {\n return this.fFlow.inputs.find((x) => x.isContains(element))!\n }).filter((x) => !!x);\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class InputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { ReassignConnectionOnPointerMove } from '../reassign-connection';\nimport { CreateConnectionOnPointerMove } from '../create-connection';\n\nexport class FindInputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: CreateConnectionOnPointerMove | ReassignConnectionOnPointerMove\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindInputsUnderPointerRequest } from './find-inputs-under-pointer.request';\nimport { FFlowBase, FNodeInputBase } from '../../../../components';\nimport { InputsUnderPointerHandler, InputsUnderPointerRequest } from './inputs-under-pointer';\nimport {\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n FirstNotConnectedInputOfNodeUnderPointerRequest\n} from './first-not-connected-input-of-node-under-pointer';\n\nexport class FindInputsUnderPointerHandler\n implements IHandler<FindInputsUnderPointerRequest, FNodeInputBase[]> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FindInputsUnderPointerRequest): FNodeInputBase[] {\n const inputsUnderPointer = this.getInputsUnderPointer(payload);\n\n return inputsUnderPointer.filter((x) => {\n const targetNode = this.fFlow.fNodesContainer.fNodes.find((y) => y.isContains(x.hostElement));\n const sourceNode = this.fFlow.fNodesContainer.fNodes.find((y) => y.isContains(payload.dragHandler.connection.fromTo!.output.hostElement));\n return sourceNode?.hostElement !== targetNode?.hostElement;\n });\n }\n\n private getInputsUnderPointer(payload: FindInputsUnderPointerRequest): FNodeInputBase[] {\n let inputs = new InputsUnderPointerHandler(this.fFlow).handle(\n new InputsUnderPointerRequest(payload.event)\n );\n\n const input = new FirstNotConnectedInputOfNodeUnderPointerHandler(this.fFlow).handle(\n new FirstNotConnectedInputOfNodeUnderPointerRequest(payload.event)\n );\n\n if (input) {\n inputs.push(input);\n }\n inputs = inputs.filter((x) => x.canBeConnected);\n return inputs;\n }\n}\n","export class CreateConnectionEvent<T = any> {\n\n constructor(\n public outputId: T,\n public inputId: T\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeOutletBase, FNodeOutputBase, isNodeOutlet } from '../../../../../components';\nimport { CreateConnectionOnPointerUpRequest } from './create-connection-on-pointer-up.request';\nimport { EDraggableType } from '../../../e-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../../find-inputs-under-pointer';\nimport { CreateConnectionOnPointerMove } from '../create-connection.on-pointer-move';\nimport { EventEmitter } from '@angular/core';\nimport { CreateConnectionEvent } from '../create-connection.event';\nimport {\n FindFirstCanBeConnectedOutputByOutletHandler,\n FindFirstCanBeConnectedOutputByOutletRequest\n} from '../find-first-can-be-connected-output-by-outlet';\n\nexport class CreateConnectionOnPointerUp\n implements IHandler<CreateConnectionOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onCreateConnection: EventEmitter<CreateConnectionEvent>\n ) {\n }\n\n public handle(payload: CreateConnectionOnPointerUpRequest): void {\n const isCreateConnection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.TEMP_CONNECTION);\n if (isCreateConnection) {\n const handler = payload.dragHandler.draggableItems[ 0 ] as CreateConnectionOnPointerMove;\n\n const inputsUnderPointer = new FindInputsUnderPointerHandler(this.fFlow).handle(\n new FindInputsUnderPointerRequest(payload.event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n let output: FNodeOutputBase | FNodeOutletBase | undefined = handler.connection.fromTo!.output;\n\n const isOutlet = isNodeOutlet(output.hostElement);\n if (isOutlet) {\n\n output = new FindFirstCanBeConnectedOutputByOutletHandler(this.fFlow).handle(\n new FindFirstCanBeConnectedOutputByOutletRequest(output as FNodeOutletBase)\n );\n if (!output) {\n throw new Error('Output not found');\n }\n }\n this.onCreateConnection.emit(new CreateConnectionEvent(output.id, inputsUnderPointer[ 0 ]?.id));\n }\n handler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\n\nexport class CreateConnectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { FConnectionBase } from '../../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../../components';\nimport { getConnectionIntersect } from '../../../../../components/f-connection/common/get-connection-intersect';\nimport { IDraggableItem } from '../../../i-draggable-item';\nimport { EDraggableType } from '../../../e-draggable-type';\n\nexport class ReassignConnectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.REASSIGN_CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase>,\n private canvasTransform: ITransformModel,\n private canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.connection.vector.point2.x, this.connection.vector.point2.y, 0, 0);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const toRect = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = getConnectionIntersect(this.onPointerDownFromConnectorRect, toRect);\n\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n const fromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(this.canvasTransform, this.canvasHost);\n const toConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(this.canvasTransform, this.canvasHost);\n const vector = getConnectionIntersect(fromConnectorRect, toConnectorRect);\n\n this.connection.setVector(vector);\n this.connection.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\nimport { F_CONNECTION_DRAG_HANDLE_CLASS } from '../../../../../components/f-connection/common/f-drag-handle';\nimport { FConnectionBase } from '../../../../../components/f-connection/common/f-connection-base';\nimport { FFlowBase, FNodeOutputBase } from '../../../../../components';\nimport { ReassignConnectionOnPointerMove } from '../reassign-on-pointer-move';\nimport { ReassignConnectionOnPointerDownRequest } from './reassign-connection-on-pointer-down.request';\nimport { FConnectionsContainerBase } from '../../../../f-containers/f-connections-container/f-connections-container-base';\n\nexport class ReassignConnectionOnPointerDown\n implements IHandler<ReassignConnectionOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n constructor(\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: ReassignConnectionOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n const position = payload.event.getPosition();\n const allElements = document.elementsFromPoint(position.x, position.y);\n\n const dragHandlesOfConnections = allElements.filter((x) => {\n return !!this.fConnectionsContainer.findConnectionWithElement(x as HTMLElement) && x.classList.contains(F_CONNECTION_DRAG_HANDLE_CLASS);\n });\n\n let connectionToReassign: FConnectionBase<FNodeOutputBase> | undefined;\n if (dragHandlesOfConnections.length) {\n connectionToReassign = this.fConnectionsContainer.findConnectionWithElement(dragHandlesOfConnections[ 0 ] as HTMLElement);\n }\n\n if (connectionToReassign && payload.event.isMouseLeftButton()) {\n result = {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: [\n new ReassignConnectionOnPointerMove(\n connectionToReassign, payload.transform, this.hostElement\n )\n ]\n }\n }\n\n return result;\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\n\nexport class ReassignConnectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel\n ) {\n }\n}\n","export class ReassignConnectionEvent<T = any> {\n\n constructor(\n public connectionId: T,\n public outputId: T,\n public oldInputId: T,\n public newInputId: T\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase } from '../../../../../components';\nimport { ReassignConnectionOnPointerMove } from '../reassign-on-pointer-move/reassign-connection.on-pointer-move';\nimport { ReassignConnectionOnPointerUpRequest } from './reassign-connection-on-pointer-up.request';\nimport { EDraggableType } from '../../../e-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../../find-inputs-under-pointer';\nimport { EventEmitter } from '@angular/core';\nimport { ReassignConnectionEvent } from '../reassign-connection.event';\n\nexport class ReassignConnectionOnPointerUp\n implements IHandler<ReassignConnectionOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onReassignConnection: EventEmitter<ReassignConnectionEvent>\n ) {\n }\n\n public handle(payload: ReassignConnectionOnPointerUpRequest): void {\n console.log('ReassignConnectionOnPointerUp', payload);\n const isReassignConnection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.REASSIGN_CONNECTION);\n if (isReassignConnection) {\n console.log('ReassignConnectionOnPointerUp - isReassignConnection');\n const handler = payload.dragHandler.draggableItems[ 0 ] as ReassignConnectionOnPointerMove;\n\n const inputsUnderPointer = new FindInputsUnderPointerHandler(this.fFlow).handle(\n new FindInputsUnderPointerRequest(payload.event, handler)\n );\n console.log(inputsUnderPointer);\n\n if (inputsUnderPointer.length > 0) {\n if (handler.connection.fromTo?.input?.id !== inputsUnderPointer[ 0 ]?.id) {\n\n this.onReassignConnection.emit(\n new ReassignConnectionEvent(\n handler.connection.id, handler.connection.fromTo?.output.id,\n handler.connection.fromTo?.input?.id,\n inputsUnderPointer[ 0 ]?.id\n )\n );\n }\n }\n handler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\n\nexport class ReassignConnectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { IDragHandler } from '../i-drag-handler';\n\nexport class DefaultDragHandler\n implements IHandler<void, IDragHandler> {\n\n public handle(): IDragHandler {\n\n return {\n onPointerDownScale: 1,\n onPointerDownPosition: new Point(0, 0),\n draggableItems: []\n };\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class ExternalItemOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n\n@Directive()\nexport abstract class FExternalItemBase implements IHasHostElement {\n\n public abstract id: any;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract data: any;\n}\n","export function isExternalItem(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fExternalItem]');\n}\n\nexport function getExternalItem(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n}\n","import { Injectable } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\n\n@Injectable()\nexport class FExternalItemService {\n\n private items: FExternalItemBase[] = [];\n\n public registerItem(item: FExternalItemBase): void {\n this.items.push(item);\n }\n\n public getItem(element: HTMLElement | SVGElement): FExternalItemBase | undefined {\n return this.items.find(item => item.hostElement === element);\n }\n\n public removeItem(item: FExternalItemBase): void {\n const index = this.items.indexOf(item);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FExternalItemBase, F_EXTERNAL_ITEM } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fExternalItem]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-external-item\",\n },\n providers: [\n { provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }\n ],\n})\nexport class FExternalItemDirective extends FExternalItemBase implements OnInit, OnDestroy {\n\n @Input()\n public override id: string = `f-external-item-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override data: any;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fExternalItemService: FExternalItemService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fExternalItemService.registerItem(this);\n }\n\n public ngOnDestroy(): void {\n this.fExternalItemService.removeItem(this);\n }\n}\n","import { DomElementExtensions, IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FExternalItemBase } from '../../../f-external-item';\nimport { IDraggableItem } from '../../i-draggable-item';\n\nexport class ExternalItemOnPointerMoveHandler implements IDraggableItem {\n\n public readonly type = EDraggableType.PALETTE_ITEM;\n\n public placeholder: HTMLElement | SVGElement | undefined;\n\n private onPointerDownRect: IRect = RectExtensions.initialize();\n\n private difference: IPoint = PointExtensions.initialize();\n\n constructor(\n public externalItem: FExternalItemBase\n ) {\n }\n\n private getStyle(position: IPoint): string {\n return `position: absolute; left: 0; top: 0; transform: translate(${ position.x }px, ${ position.y }px)`;\n }\n\n public initialize(): void {\n this.onPointerDownRect = RectExtensions.fromElement(this.externalItem.hostElement);\n this.placeholder = DomElementExtensions.deepCloneNode(this.externalItem.hostElement);\n document.body.appendChild(this.placeholder);\n }\n\n public move(difference: IPoint): void {\n this.difference = difference;\n const position = Point.fromPoint(this.onPointerDownRect).add(this.difference);\n this.placeholder!.setAttribute('style', this.getStyle(position));\n }\n\n public getPlaceholderRect(): IRect {\n return RectExtensions.fromElement(this.placeholder!);\n }\n\n public complete(): void {\n document.body.removeChild(this.placeholder!);\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { ExternalItemOnPointerDownRequest } from './external-item-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FExternalItemService, getExternalItem, isExternalItem } from '../../../f-external-item';\nimport {\n ExternalItemOnPointerMoveHandler\n} from '../external-item-on-pointer-move';\n\nexport class ExternalItemOnPointerDownHandler\n implements IHandler<ExternalItemOnPointerDownRequest, IDragHandler | undefined> {\n\n constructor(\n private fExternalItemService: FExternalItemService,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: ExternalItemOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n if (isExternalItem(payload.event.targetElement)) {\n const item = this.fExternalItemService.getItem(getExternalItem(payload.event.targetElement));\n if (!item) {\n throw new Error('External item not found');\n }\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n result = {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: [\n new ExternalItemOnPointerMoveHandler(item)\n ]\n };\n }\n return result;\n }\n}\n","import { IRect } from '@foblex/core';\n\nexport class CreateNodeEvent<TData = any> {\n\n constructor(\n public rect: IRect,\n public data: TData,\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { ExternalItemOnPointerUpRequest } from './external-item-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { ExternalItemOnPointerMoveHandler } from '../external-item-on-pointer-move';\nimport { FFlowBase, getElementRectInCanvas } from '../../../../components';\nimport { EventEmitter } from '@angular/core';\nimport { CreateNodeEvent } from '../create-node.event';\n\nexport class ExternalItemOnPointerUpHandler\n implements IHandler<ExternalItemOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onCreateNode: EventEmitter<CreateNodeEvent>\n ) {\n }\n\n public handle(payload: ExternalItemOnPointerUpRequest): void {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.fFlow.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isDragPaletteItem = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.PALETTE_ITEM);\n\n if (isDragPaletteItem) {\n const dragHandler = payload.dragHandler.draggableItems[ 0 ] as ExternalItemOnPointerMoveHandler\n dragHandler.move(difference);\n\n const isPointerInCanvasRect = document.elementsFromPoint(payload.event.getPosition().x, payload.event.getPosition().y).some((x) => x === this.fFlow.hostElement);\n if (isPointerInCanvasRect) {\n const rectInCanvas = getElementRectInCanvas(dragHandler.placeholder!, this.fFlow.transform, this.fFlow.hostElement);\n this.onCreateNode.emit(\n new CreateNodeEvent(rectInCanvas, dragHandler.externalItem.data)\n );\n }\n dragHandler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\n\nexport class ExternalItemOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class NodeOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n public selectedItems: ISelectable[],\n public isMoveCurrentNode: boolean = false\n ) {\n }\n}\n","import { IPoint, ITransformModel, IVector, Point, VectorExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionDragHandler implements IDraggableItem {\n\n public readonly type = EDraggableType.CONNECTION;\n\n private onPointerDownVector: IVector = VectorExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownVector = getConnectionIntersect(\n this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost),\n this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost)\n );\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const fromPoint = Point.fromPoint(this.onPointerDownVector.point1).add(difference);\n const toPoint = Point.fromPoint(this.onPointerDownVector.point2).add(difference);\n\n this.connection.setVector(VectorExtensions.initialize(fromPoint, toPoint));\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionSourceDragHandler implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n private connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const fromPoint = RectExtensions.addPoint(this.onPointerDownFromConnectorRect, difference);\n const vector = getConnectionIntersect(fromPoint, this.onPointerDownToConnectorRect);\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionTargetDragHandler implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n private connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n const vector = getConnectionIntersect(this.onPointerDownFromConnectorRect, toPoint);\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FNodeBase } from '../../../../components';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.NODE;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n public fNode: FNodeBase\n ) {\n this.onPointerDownPosition = this.fNode.position;\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const position = Point.fromPoint(this.onPointerDownPosition).add(difference);\n this.fNode.updatePosition(position);\n this.fNode.redraw();\n this.fLineAlignment?.handle(difference);\n }\n\n public complete(): void {\n this.fNode.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { NodeOnPointerDownRequest } from './node-on-pointer-down.request';\nimport { FFlowBase, isNodeDragHandle } from '../../../../components';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FNodesContainerBase } from '../../../f-containers';\nimport { FConnectionsContainerBase } from '../../../f-containers';\nimport { FNodeInputBase, FNodeOutputBase } from '../../../../components';\nimport { FNodeBase } from '../../../../components';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport {\n FConnectionDragHandler,\n FConnectionSourceDragHandler,\n FConnectionTargetDragHandler,\n NodeOnPointerMove\n} from '../node-on-pointer-move';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerDown\n implements IHandler<NodeOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n private get fNodesContainer(): FNodesContainerBase {\n return this.fFlow.fNodesContainer;\n }\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: NodeOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const node = this.fNodesContainer.findNode(payload.event.targetElement);\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n if (node) {\n if (isNodeDragHandle(payload.event.targetElement)) {\n if (!payload.selectedItems.includes(node) && payload.isMoveCurrentNode) {\n payload.selectedItems.push(node);\n node.select();\n }\n this.fNodesContainer.setNodeToTopLayer(node!);\n const itemsToDrag: IDraggableItem[] = this.calculateDraggableConnectionsAndNodes(payload);\n\n const draggedNodes = itemsToDrag.filter((x) => {\n return x.type === EDraggableType.NODE;\n }).map((x) => (x as NodeOnPointerMove).fNode);\n\n this.fLineAlignment?.initialize(this.fNodesContainer.fNodes.toArray(), draggedNodes);\n\n result = {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: itemsToDrag\n }\n }\n }\n\n return result;\n }\n\n private calculateDraggableConnectionsAndNodes(payload: NodeOnPointerDownRequest): IDraggableItem[] {\n let itemsToDrag: IDraggableItem[] = [];\n\n const selectedNodes = payload.selectedItems.map((x) => {\n return this.fNodesContainer.findNode(x.hostElement);\n }).filter((x) => !!x) as FNodeBase[];\n\n const nodeDragHandlers = selectedNodes.map((x) => new NodeOnPointerMove(this.fLineAlignment, x));\n itemsToDrag = nodeDragHandlers;\n\n const allOutputs: FNodeOutputBase[] = selectedNodes.reduce((result: FNodeOutputBase[], x: FNodeBase) => {\n return result.concat(this.getOutputsForNode(x));\n }, []);\n\n const allInputs: FNodeInputBase[] = selectedNodes.reduce((result: FNodeInputBase[], x: FNodeBase) => {\n return result.concat(this.getInputsForNode(x));\n }, []);\n\n nodeDragHandlers.forEach((nodeHandler) => {\n const outputConnections = this.fConnectionsContainer.findOutgoingConnections(this.getOutputsForNode(nodeHandler.fNode));\n outputConnections.forEach((c) => {\n if (allInputs.includes(c.fromTo!.input!)) {\n itemsToDrag.push(new FConnectionDragHandler(c, payload.transform, this.hostElement));\n } else {\n itemsToDrag.push(new FConnectionSourceDragHandler(c, payload.transform, this.hostElement));\n }\n });\n const inputConnections = this.fConnectionsContainer.findIncomingConnections(this.getInputsForNode(nodeHandler.fNode));\n inputConnections.forEach((c) => {\n if (allOutputs.includes(c.fromTo!.output! as FNodeOutputBase)) {\n const index = itemsToDrag.findIndex((x) => x.type === EDraggableType.CONNECTION && (x as FConnectionDragHandler).connection.id === c.id);\n if (index !== -1) {\n itemsToDrag.push(new FConnectionDragHandler(c, payload.transform, this.hostElement));\n }\n } else {\n itemsToDrag.push(new FConnectionTargetDragHandler(c, payload.transform, this.hostElement));\n }\n });\n //itemsToDrag.push(new NodeOnPointerMove(this.fLineAlignment, x.fNode));\n });\n return itemsToDrag;\n }\n\n private getInputsForNode(node: FNodeBase): FNodeInputBase[] {\n return this.fFlow.inputs.toArray().filter((x) => node.isContains(x.hostElement));\n }\n\n private getOutputsForNode(node: FNodeBase): FNodeOutputBase[] {\n return this.fFlow.outputs.toArray().filter((x) => node.isContains(x.hostElement));\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { NodeOnPointerUpRequest } from './node-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectIfIntersectBase } from '../../../f-connect-if-intersect';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerUp\n implements IHandler<NodeOnPointerUpRequest, void> {\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n private fConnectIfIntersect: FConnectIfIntersectBase | undefined,\n public hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: NodeOnPointerUpRequest): void {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isDragNodes = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.NODE);\n\n if (isDragNodes) {\n const nearestIntersection = this.fLineAlignment?.findNearestCoordinate(difference);\n if (nearestIntersection) {\n difference.x = nearestIntersection.xResult.value ? (difference.x - nearestIntersection.xResult.distance!) : difference.x;\n difference.y = nearestIntersection.yResult.value ? (difference.y - nearestIntersection.yResult.distance!) : difference.y;\n }\n\n payload.dragHandler.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete();\n });\n this.fConnectIfIntersect?.handle(payload.dragHandler.draggableItems);\n this.fLineAlignment?.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\n\nexport class NodeOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FSelectionDirective } from '../../../f-selection';\nimport { ISelectable } from '../../../../i-selectable';\nimport { FFlowBase, getElementRectInCanvas } from '../../../../components';\n\nexport class SelectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.SELECTION;\n\n public selectedItems: ISelectable[] = [];\n\n private readonly items: { element: ISelectable, rect: IRect }[] = [];\n\n private canvasPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fFlow: FFlowBase,\n private fSelection: FSelectionDirective | undefined,\n private selectedOnStart: ISelectable[],\n private onPointerDownPosition: IPoint = PointExtensions.initialize(),\n ) {\n const nodeRects = fFlow.fNodesContainer.fNodes.map((x) => {\n return {\n element: x,\n rect: RectExtensions.mult(getElementRectInCanvas(x.hostElement, fFlow.transform, this.fFlow.hostElement), fFlow.transform.scale)\n };\n });\n\n const lineRects = fFlow.fConnectionsContainer.fConnections.map((x) => {\n return {\n element: x,\n rect: RectExtensions.mult(getElementRectInCanvas(x.fPath.hostElement, fFlow.transform, this.fFlow.hostElement), fFlow.transform.scale)\n };\n });\n this.items = [ ...nodeRects, ...lineRects ].filter((x) => {\n return !selectedOnStart.includes(x.element);\n });\n this.canvasPosition = Point.fromPoint(fFlow.transform.position).add(fFlow.transform.scaledPosition);\n }\n\n public initialize(): void {\n this.fSelection?.show();\n this.fSelection?.draw({ ...this.onPointerDownPosition, width: 0, height: 0 });\n }\n\n public move(difference: IPoint): void {\n const currentPoint = Point.fromPoint(difference).add(this.onPointerDownPosition);\n const x: number = Math.min(this.onPointerDownPosition.x, currentPoint.x);\n const y: number = Math.min(this.onPointerDownPosition.y, currentPoint.y);\n\n const width = Math.abs(difference.x);\n const height = Math.abs(difference.y);\n\n this.fSelection?.draw({ x, y, width, height });\n this.selectedItems = [];\n this.items.forEach((item) => {\n item.element.deselect();\n const itemRect = RectExtensions.addPoint(item.rect, this.canvasPosition);\n if (\n RectExtensions.intersectionWithRect(itemRect, RectExtensions.initialize(x, y, width, height))\n ) {\n item.element.select();\n this.selectedItems.push(item.element);\n }\n });\n }\n\n public complete(): void {\n this.fSelection?.hide();\n this.selectedItems.push(...this.selectedOnStart || [])\n }\n}\n","import { IHandler, MouseEventExtensions, Point } from '@foblex/core';\nimport { FFlowBase, isNodeOutlet, isNodeOutput } from '../../../../components';\nimport { SelectionOnPointerDownRequest } from './selection-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { SelectionOnPointerMove } from '../selection-on-pointer-move';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { FSelectionDirective } from '../../../f-selection';\n\nexport class SelectionOnPointerDown implements IHandler<SelectionOnPointerDownRequest, IDragHandler> {\n\n constructor(\n private fFlow: FFlowBase,\n private fSelection: FSelectionDirective | undefined,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: SelectionOnPointerDownRequest): IDragHandler {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n let node = this.fFlow.fNodesContainer.findNode(payload.event.targetElement);\n const connection = this.fFlow.fConnectionsContainer.findConnectionWithElement(payload.event.targetElement);\n\n payload.selectedItems.forEach((x) => {\n if (x !== node || (!isNodeOutlet(payload.event.targetElement) && !isNodeOutput(payload.event.targetElement))) {\n x.deselect();\n }\n });\n const isMultiselect =\n MouseEventExtensions.isCommandButton(payload.event.originalEvent) ||\n MouseEventExtensions.isShiftPressed(payload.event.originalEvent);\n if (!isMultiselect) {\n payload.selectedItems = [];\n }\n if (node) {\n if (node) {\n if (!payload.selectedItems.includes(node)) {\n payload.selectedItems.push(node);\n } else {\n payload.selectedItems.splice(payload.selectedItems.indexOf(node), 1);\n }\n }\n\n } else if (connection) {\n if (!payload.selectedItems.includes(connection)) {\n payload.selectedItems.push(connection);\n } else {\n payload.selectedItems.splice(payload.selectedItems.indexOf(connection), 1);\n }\n }\n payload.selectedItems.forEach((x) => {\n if (!x.isSelected()) {\n x.select();\n }\n });\n\n let draggableItems: IDraggableItem[] = [];\n if (MouseEventExtensions.isShiftPressed(payload.event.originalEvent)) {\n draggableItems = [\n new SelectionOnPointerMove(this.fFlow, this.fSelection, payload.selectedItems, pointerPositionInCanvas)\n ];\n }\n return {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: draggableItems,\n selectedItems: payload.selectedItems\n }\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class SelectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n public selectedItems: ISelectable[]\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { SelectionOnPointerUpRequest } from './selection-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { ISelectable } from '../../../../i-selectable';\nimport { SelectionOnPointerMove } from '../selection-on-pointer-move';\n\nexport class SelectionOnPointerUp\n implements IHandler<SelectionOnPointerUpRequest, ISelectable[]> {\n\n constructor(\n public hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: SelectionOnPointerUpRequest): ISelectable[] {\n let result: ISelectable[] = payload.selectedItems;\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isSelection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.SELECTION);\n\n if (isSelection) {\n payload.dragHandler.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete();\n });\n result = (payload.dragHandler.draggableItems[ 0 ] as SelectionOnPointerMove).selectedItems;\n }\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class SelectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler,\n public selectedItems: ISelectable[]\n ) {\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FFlowBase } from '../../components';\nimport { ITransformModel } from '@foblex/core';\n\n@Injectable()\nexport class FDraggableService {\n\n private fFlow: FFlowBase | undefined;\n\n public get hostElement(): SVGSVGElement {\n return this.fFlow!.hostElement;\n }\n\n public get transform(): ITransformModel {\n return this.fFlow!.transform;\n }\n\n constructor(\n ) {\n }\n\n public setFlow(fFlow: FFlowBase): void {\n this.fFlow = fFlow;\n }\n\n public onPointerDown(event: PointerEvent): void {\n\n }\n}\n","import {\n IDragAndDropBase, IHasHostElement, IPointerEvent, ITransformModel, Point\n} from '@foblex/core';\nimport { Subscription } from 'rxjs';\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy } from '@angular/core';\nimport { FItemsContainerBase } from '../f-containers';\nimport { FBackgroundBase } from '../../internal';\nimport { FFlowBase } from '../../components';\nimport { CanvasOnPointerDownHandler, CanvasOnPointerDownRequest } from './canvas';\nimport { IDragHandler } from './i-drag-handler';\nimport { DefaultDragHandler } from './default-drag-handler';\nimport {\n SelectionOnPointerDown,\n SelectionOnPointerDownRequest,\n SelectionOnPointerUp,\n SelectionOnPointerUpRequest\n} from './selection';\nimport {\n ReassignConnectionEvent, ReassignConnectionOnPointerDown,\n ReassignConnectionOnPointerDownRequest, ReassignConnectionOnPointerUp, ReassignConnectionOnPointerUpRequest\n} from './connections';\nimport { NodeOnPointerDown, NodeOnPointerDownRequest, NodeOnPointerUp, NodeOnPointerUpRequest } from './node';\nimport {\n CreateConnectionEvent, CreateConnectionOnPointerDown,\n CreateConnectionOnPointerDownRequest, CreateConnectionOnPointerUp, CreateConnectionOnPointerUpRequest\n} from './connections';\nimport { EDraggableType } from './e-draggable-type';\nimport { FConnectIfIntersectBase } from '../f-connect-if-intersect';\nimport { FLineAlignmentDirective } from '../f-line-alignment';\nimport { ISelectable } from '../../i-selectable';\nimport { FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\nimport {\n CreateNodeEvent,\n ExternalItemOnPointerDownHandler,\n ExternalItemOnPointerDownRequest,\n ExternalItemOnPointerUpHandler, ExternalItemOnPointerUpRequest\n} from './external-item';\nimport { FSelectionDirective } from '../f-selection';\n\nexport const F_DND_DIRECTIVE = new InjectionToken<FDraggableBase>('F_DND_DIRECTIVE');\n\n@Directive()\nexport abstract class FDraggableBase extends IDragAndDropBase implements IHasHostElement, AfterViewInit, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n private get transform(): ITransformModel {\n return this.fItemsContainer.transform;\n }\n\n private get fItemsContainer(): FItemsContainerBase {\n return this.fFlow.fItemsContainer;\n }\n\n private get fBackground(): FBackgroundBase {\n return this.fFlow.fBackground;\n }\n\n private dragHandler: IDragHandler = new DefaultDragHandler().handle();\n\n private dragSelection!: SelectionOnPointerDown;\n private reassignConnection!: ReassignConnectionOnPointerDown;\n private dragCanvas!: CanvasOnPointerDownHandler;\n private dragNode!: NodeOnPointerDown;\n private createConnection!: CreateConnectionOnPointerDown;\n private dragExternalItem!: ExternalItemOnPointerDownHandler;\n\n public abstract onCreateConnection: EventEmitter<CreateConnectionEvent>;\n\n public abstract onReassignConnection: EventEmitter<ReassignConnectionEvent>;\n\n public abstract onCreateNode: EventEmitter<CreateNodeEvent>;\n\n public abstract fLineAlignment: FLineAlignmentDirective | undefined;\n\n public abstract fConnectIfIntersect: FConnectIfIntersectBase | undefined;\n\n public abstract fSelection: FSelectionDirective | undefined;\n\n private selectedItems: ISelectable[] = [];\n\n protected constructor(\n protected fFlow: FFlowBase,\n protected fDNDService: FDraggableService,\n protected fExternalItemService: FExternalItemService,\n private elementReference: ElementRef<SVGSVGElement>,\n ngZone: NgZone,\n ) {\n super(ngZone);\n this.fDNDService.setFlow(this.fFlow);\n }\n\n public ngAfterViewInit(): void {\n super.subscribe(document);\n\n this.dragSelection = new SelectionOnPointerDown(this.fFlow, this.fSelection, this.hostElement);\n this.reassignConnection = new ReassignConnectionOnPointerDown(this.fFlow, this.hostElement);\n this.dragCanvas = new CanvasOnPointerDownHandler(this.fBackground, this.fItemsContainer, this.hostElement);\n this.dragNode = new NodeOnPointerDown(this.fLineAlignment, this.fFlow, this.hostElement);\n this.createConnection = new CreateConnectionOnPointerDown(this.fFlow, this.hostElement);\n this.dragExternalItem = new ExternalItemOnPointerDownHandler(this.fExternalItemService, this.hostElement);\n }\n\n public override onPointerDown(event: IPointerEvent): boolean {\n let result: boolean = event.isMouseLeftButton();\n const selection = this.dragSelection.handle(\n new SelectionOnPointerDownRequest(event, this.transform, this.selectedItems)\n );\n this.selectedItems = selection.selectedItems || [];\n\n const reassignConnection = this.reassignConnection.handle(\n new ReassignConnectionOnPointerDownRequest(event, this.transform)\n );\n\n const createConnection = this.createConnection.handle(\n new CreateConnectionOnPointerDownRequest(event, this.transform)\n );\n\n const dragNode = this.dragNode.handle(\n new NodeOnPointerDownRequest(event, this.transform, this.selectedItems)\n );\n\n const dragCanvas = this.dragCanvas.handle(\n new CanvasOnPointerDownRequest(event)\n );\n\n const dragExternalItem = this.dragExternalItem.handle(\n new ExternalItemOnPointerDownRequest(event)\n );\n\n const dragSelection = selection.draggableItems.length ? selection : undefined;\n\n const dragHandle = dragSelection || reassignConnection || createConnection || dragNode || dragCanvas || dragExternalItem;\n if (!dragHandle) {\n this.dragHandler = new DefaultDragHandler().handle();\n result = false;\n } else {\n this.dragHandler = dragHandle;\n }\n\n return result;\n }\n\n protected override prepareDragSequence(event: IPointerEvent) {\n const isDragNodes = this.dragHandler.draggableItems.some((x) => x.type === EDraggableType.NODE);\n if (isDragNodes) {\n this.dragHandler = this.dragNode.handle(\n new NodeOnPointerDownRequest(event, this.transform, this.selectedItems, true)\n )!;\n }\n this.dragHandler.draggableItems.forEach((item) => {\n item.initialize();\n });\n }\n\n public override onPointerMove(event: IPointerEvent): void {\n const pointerPositionInCanvas = Point.fromPoint(event.getPosition()).matrixTransform(this.hostElement);\n const difference = pointerPositionInCanvas.div(this.dragHandler.onPointerDownScale).sub(this.dragHandler.onPointerDownPosition);\n this.dragHandler.draggableItems.forEach((item) => {\n item.move(difference);\n });\n }\n\n public override onPointerUp(event: IPointerEvent): void {\n new ReassignConnectionOnPointerUp(this.fFlow, this.onReassignConnection).handle(\n new ReassignConnectionOnPointerUpRequest(event, this.dragHandler)\n );\n\n new CreateConnectionOnPointerUp(this.fFlow, this.onCreateConnection).handle(\n new CreateConnectionOnPointerUpRequest(event, this.dragHandler)\n );\n\n new NodeOnPointerUp(this.fLineAlignment, this.fConnectIfIntersect, this.hostElement).handle(\n new NodeOnPointerUpRequest(event, this.dragHandler)\n );\n\n this.selectedItems = new SelectionOnPointerUp(this.hostElement).handle(\n new SelectionOnPointerUpRequest(event, this.dragHandler, this.selectedItems)\n );\n\n new ExternalItemOnPointerUpHandler(this.fFlow, this.onCreateNode).handle(\n new ExternalItemOnPointerUpRequest(event, this.dragHandler)\n );\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n this.subscriptions$.unsubscribe();\n }\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\nexport function findNearestCoordinateByX(elements: IRect[], target: IRect): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of elements) {\n const distanceLeftLeft = target.x - element.x;\n const distanceLeftRight = target.x - (element.x + element.width);\n const distanceCenterCenter = target.gravityCenter.x - element.gravityCenter.x;\n const distanceRightLeft = (target.x + target.width) - element.x;\n const distanceRightRight = (target.x + target.width) - (element.x + element.width);\n\n if (\n Math.abs(distanceLeftLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceLeftRight) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightRight) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.x;\n }\n if (Math.abs(distanceLeftLeft) < Math.abs(minDistance)) {\n minDistance = distanceLeftLeft;\n nearest = element.x;\n }\n if (Math.abs(distanceRightRight) < Math.abs(minDistance)) {\n minDistance = distanceRightRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceLeftRight) < Math.abs(minDistance)) {\n minDistance = distanceLeftRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceRightLeft) < Math.abs(minDistance)) {\n minDistance = distanceRightLeft;\n nearest = element.x;\n }\n }\n }\n return { value: nearest, distance: minDistance };\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\nexport function findNearestCoordinateByY(elements: IRect[], target: IRect): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of elements) {\n const distanceTopTop = target.y - element.y;\n const distanceTopBottom = target.y - (element.y + element.height);\n const distanceCenterCenter = target.gravityCenter.y - element.gravityCenter.y;\n const distanceBottomTop = (target.y + target.height) - element.y;\n const distanceBottomBottom = (target.y + target.height) - (element.y + element.height);\n\n if (\n Math.abs(distanceTopTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceTopBottom) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomBottom) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.y;\n }\n if (Math.abs(distanceTopTop) < Math.abs(minDistance)) {\n minDistance = distanceTopTop;\n nearest = element.y;\n }\n if (Math.abs(distanceBottomBottom) < Math.abs(minDistance)) {\n minDistance = distanceBottomBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceTopBottom) < Math.abs(minDistance)) {\n minDistance = distanceTopBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceBottomTop) < Math.abs(minDistance)) {\n minDistance = distanceBottomTop;\n nearest = element.y;\n }\n }\n }\n\n return { value: nearest, distance: minDistance };\n}\n","import { Directive, ElementRef, Inject, InjectionToken } from '@angular/core';\nimport { IPoint, IRect, ISize, ITransformModel, LineFElement, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { F_FLOW_COMPONENT, FFlowBase, FNodeBase, getElementRectInCanvas } from '../../components';\nimport { findNearestCoordinateByX, findNearestCoordinateByY, ILineAlignmentResult } from './domain';\n\nexport const F_LINE_ALIGNMENT = new InjectionToken<FLineAlignmentDirective>('F_LINE_ALIGNMENT');\n\n@Directive({\n selector: \"g[fLineAlignment]\",\n standalone: true,\n host: {\n 'class': 'f-line-alignment f-component'\n },\n providers: [\n { provide: F_LINE_ALIGNMENT, useExisting: FLineAlignmentDirective }\n ],\n})\nexport class FLineAlignmentDirective {\n\n private get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n private fHorizontalLine: LineFElement = new LineFElement();\n\n private fVerticalLine: LineFElement = new LineFElement();\n\n private size: ISize = SizeExtensions.initialize();\n\n private draggedNodeRect: IRect = RectExtensions.initialize();\n\n private rects: IRect[] = [];\n\n private get transform(): ITransformModel {\n return this.fFlow.fItemsContainer.transform;\n }\n\n constructor(\n @Inject(F_FLOW_COMPONENT) private fFlow: FFlowBase,\n private elementReference: ElementRef<SVGGElement>\n ) {\n this.hostElement.appendChild(this.fHorizontalLine.hostElement);\n this.hostElement.appendChild(this.fVerticalLine.hostElement);\n }\n\n public initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void {\n this.size = this.fFlow.hostElement.getBoundingClientRect();\n this.rects = [];\n const draggedNodeRects = currentNodes.map((x) => {\n return getElementRectInCanvas(x.hostElement, this.transform, this.fFlow.hostElement);\n });\n this.draggedNodeRect = RectExtensions.union(draggedNodeRects);\n\n const allNodesExcludeCurrents = allNodes.filter((x) => {\n return !currentNodes.includes(x);\n });\n\n this.rects = allNodesExcludeCurrents.map((x) => {\n return getElementRectInCanvas(x.hostElement, this.transform, this.fFlow.hostElement);\n });\n }\n\n public handle(difference: IPoint): void {\n this.drawIntersections(difference);\n }\n\n private drawIntersections(difference: IPoint): void {\n const intersect = this.findNearestCoordinate(difference);\n if (intersect.xResult.value !== undefined) {\n this.fVerticalLine.show();\n this.fVerticalLine.draw({\n x1: intersect.xResult.value * this.transform.scale + this.transform.position.x + this.transform.scaledPosition.x,\n x2: intersect.xResult.value * this.transform.scale + this.transform.position.x + this.transform.scaledPosition.x,\n y1: 0,\n y2: this.size.height\n });\n } else {\n this.fVerticalLine.hide();\n }\n if (intersect.yResult.value !== undefined) {\n this.fHorizontalLine.show();\n this.fHorizontalLine.draw({\n x1: 0,\n x2: this.size.width,\n y1: intersect.yResult.value * this.transform.scale + this.transform.position.y + this.transform.scaledPosition.y,\n y2: intersect.yResult.value * this.transform.scale + this.transform.position.y + this.transform.scaledPosition.y,\n });\n } else {\n this.fHorizontalLine.hide();\n }\n }\n\n public findNearestCoordinate(difference: IPoint): ILineAlignmentResult {\n let result: ILineAlignmentResult = {\n xResult: { value: undefined, distance: undefined },\n yResult: { value: undefined, distance: undefined }\n };\n const rect = RectExtensions.addPoint(this.draggedNodeRect, difference);\n const xResult = findNearestCoordinateByX(this.rects, rect);\n const yResult = findNearestCoordinateByY(this.rects, rect);\n result = { xResult, yResult };\n return result;\n }\n\n public complete(): void {\n this.fVerticalLine.hide();\n this.fHorizontalLine.hide();\n }\n}\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IRectElementModel, RectFElement } from '@foblex/core';\n\nexport const F_SELECTION = new InjectionToken<FSelectionDirective>('F_SELECTION');\n\n@Directive({\n selector: \"g[fSelection]\",\n standalone: true,\n host: {\n 'class': 'f-selection f-component'\n },\n providers: [\n { provide: F_SELECTION, useExisting: FSelectionDirective }\n ],\n})\nexport class FSelectionDirective {\n\n private get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n private fElement: RectFElement = new RectFElement();\n\n constructor(\n private elementReference: ElementRef<SVGGElement>\n ) {\n this.hostElement.appendChild(this.fElement.hostElement);\n }\n\n public hide(): void {\n this.fElement.hide();\n }\n\n public show(): void {\n this.fElement.show();\n }\n\n public draw(object: Partial<IRectElementModel>): void {\n this.fElement.draw(object);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n Output\n} from \"@angular/core\";\nimport { F_DND_DIRECTIVE, FDraggableBase } from './f-draggable-base';\nimport { F_FLOW_COMPONENT, FFlowBase } from '../../components';\nimport { F_LINE_ALIGNMENT, FLineAlignmentDirective } from '../f-line-alignment';\nimport { FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\nimport { CreateConnectionEvent, ReassignConnectionEvent } from './connections';\nimport { CreateNodeEvent } from './external-item';\nimport { F_SELECTION, FSelectionDirective } from '../f-selection';\nimport {\n FConnectIfIntersectBase,\n} from '../f-connect-if-intersect';\nimport { F_CONNECT_IF_INTERSECT } from '../../tokens';\n\n@Directive({\n selector: \"svg[fDraggable]\",\n providers: [\n { provide: F_DND_DIRECTIVE, useExisting: FDraggableDirective }\n ]\n})\nexport class FDraggableDirective extends FDraggableBase {\n\n @Input()\n public override disabled: boolean = false;\n\n @ContentChild(F_LINE_ALIGNMENT, { static: true })\n public override fLineAlignment: FLineAlignmentDirective | undefined;\n\n @ContentChild(F_SELECTION, { static: true })\n public override fSelection: FSelectionDirective | undefined;\n\n @ContentChild(F_CONNECT_IF_INTERSECT)\n public override fConnectIfIntersect: FConnectIfIntersectBase | undefined;\n\n @Output()\n public override onCreateConnection: EventEmitter<CreateConnectionEvent> = new EventEmitter<CreateConnectionEvent>();\n\n @Output()\n public override onReassignConnection: EventEmitter<ReassignConnectionEvent> = new EventEmitter<ReassignConnectionEvent>();\n\n @Output()\n public override onCreateNode: EventEmitter<CreateNodeEvent> = new EventEmitter<CreateNodeEvent>();\n\n constructor(\n @Inject(F_FLOW_COMPONENT) fFlow: FFlowBase,\n fDNDService: FDraggableService,\n fExternalItemService: FExternalItemService,\n elementReference: ElementRef<SVGSVGElement>,\n ngZone: NgZone\n ) {\n super(fFlow, fDNDService, fExternalItemService, elementReference, ngZone);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FDraggableDirective } from './f-draggable.directive';\nimport { FExternalItemDirective, FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\n\n@NgModule({\n declarations: [\n FDraggableDirective,\n FExternalItemDirective,\n ],\n imports: [\n CommonModule\n ],\n providers: [\n FExternalItemService,\n FDraggableService\n ],\n exports: [\n FDraggableDirective,\n FExternalItemDirective,\n ]\n})\nexport class FDraggableModule {\n}\n","import { IHandler, RectExtensions } from '@foblex/core';\nimport { ConnectIfIntersectRequest } from './connect-if-intersect.request';\nimport { FConnectionBase } from '../../../components';\nimport { FFlowBase, FNodeBase, FNodeInputBase, FNodeOutputBase, getElementRectInCanvas } from '../../../components';\nimport { FItemsContainerBase } from '../../f-containers';\nimport { findIncomingConnections, findOutgoingConnections } from '../../f-containers';\nimport { EDraggableType } from '../../f-draggable';\nimport { NodeOnPointerMove } from '../../f-draggable';\n\nexport class ConnectIfIntersectHandler implements IHandler<ConnectIfIntersectRequest> {\n\n constructor(\n private connections: FConnectionBase<FNodeOutputBase>[],\n private fFlow: FFlowBase,\n private fItemsContainer: FItemsContainerBase\n ) {\n }\n\n public handle(request: ConnectIfIntersectRequest): void {\n const isValid = this.isValidRequest(request);\n if (!isValid) {\n return;\n }\n const fNode = (request.draggableItems[ 0 ] as NodeOnPointerMove).fNode;\n\n const outputsOfNode = this.getOutputsForNode(fNode);\n const inputsOfNode = this.getInputsForNode(fNode);\n\n const isCantBeConnectedByOutput = outputsOfNode.some((x) => !x.canBeConnected);\n const isCantBeConnectedByInput = this.connections.some((x) => {\n return inputsOfNode.find((input) => input.id === x.fromTo?.input?.id);\n });\n\n if (!isCantBeConnectedByInput && outputsOfNode.length && !isCantBeConnectedByOutput && inputsOfNode.length) {\n const output = outputsOfNode[ 0 ];\n const input = inputsOfNode[ 0 ];\n const outgoingConnections = findOutgoingConnections(this.connections, [ output ]);\n const incomingConnections = findIncomingConnections(this.connections, [ input ]);\n if (outgoingConnections.length === 0 && incomingConnections.length === 0) {\n const connections = this.findConnectionsUnderNode(fNode);\n if (connections.length) {\n console.log('connections', connections);\n }\n }\n }\n }\n\n private isValidRequest(request: ConnectIfIntersectRequest): boolean {\n const result =\n request?.draggableItems.length === 1 &&\n request?.draggableItems[ 0 ].type === EDraggableType.NODE;\n\n return result;\n }\n\n private getOutputsForNode(node: FNodeBase): FNodeOutputBase[] {\n return this.fFlow.outputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getInputsForNode(node: FNodeBase): FNodeInputBase[] {\n return this.fFlow.inputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private findConnectionsUnderNode(node: FNodeBase): FConnectionBase<FNodeOutputBase>[] {\n const nodeRect = getElementRectInCanvas(node.hostElement, this.fItemsContainer.transform, this.fFlow.hostElement);\n return this.connections.filter((x) => {\n const intersection = RectExtensions.intersectionWithVector(nodeRect, x.vector.point1, x.vector.point2);\n return (intersection || []).length > 0\n });\n }\n}\n","import { IDraggableItem } from '../../f-draggable';\n\nexport class ConnectIfIntersectRequest {\n\n constructor(\n public readonly draggableItems: IDraggableItem[]\n ) {\n }\n}\n","import { Directive, QueryList } from '@angular/core';\nimport { FConnectionBase, FNodeOutputBase } from '../../components';\nimport { IDraggableItem } from '../f-draggable';\n\n@Directive()\nexport abstract class FConnectIfIntersectBase {\n\n public abstract id: any;\n\n public abstract fConnections: QueryList<FConnectionBase<FNodeOutputBase>> | undefined;\n\n public abstract handle(draggableItems: IDraggableItem[]): void;\n}\n","import { ContentChildren, Directive, Inject, Input, QueryList } from '@angular/core';\nimport { IDraggableItem } from '../f-draggable';\nimport { FConnectIfIntersectBase } from './f-connect-if-intersect-base';\nimport {\n F_FLOW_COMPONENT,\n FConnectionBase,\n FFlowBase,\n FNodeOutputBase\n} from '../../components';\nimport { ConnectIfIntersectHandler, ConnectIfIntersectRequest } from './connect-if-intersect';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../f-containers';\nimport { F_CONNECT_IF_INTERSECT, F_CONNECTION_COMPONENT } from '../../tokens';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"g[fConnectIfIntersect]\",\n standalone: true,\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-connect-if-intersect\"\n },\n providers: [\n { provide: F_CONNECT_IF_INTERSECT, useExisting: FConnectIfIntersectDirective }\n ]\n})\nexport class FConnectIfIntersectDirective extends FConnectIfIntersectBase {\n\n @Input()\n public override id: string = `f-connect-if-intersect-${ uniqueId++ }`;\n\n @ContentChildren(F_CONNECTION_COMPONENT, { descendants: true })\n public override fConnections!: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n constructor(\n @Inject(F_FLOW_COMPONENT) private fFlow: FFlowBase,\n @Inject(F_ITEMS_CONTAINER) private fItemsContainer: FItemsContainerBase\n ) {\n super();\n }\n\n public override handle(draggableItems: IDraggableItem[]): void {\n new ConnectIfIntersectHandler(\n this.fConnections.toArray(), this.fFlow, this.fItemsContainer\n ).handle(\n new ConnectIfIntersectRequest(draggableItems)\n );\n }\n}\n","import { EventExtensions, Point, RectExtensions } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\nimport { FCanvasBase } from '../../internal';\nimport { FItemsContainerBase } from '../f-containers';\nimport { FDraggableBase } from '../f-draggable';\nimport { isNode } from '../../components';\n\nexport const F_ZOOM = new InjectionToken<FZoomBase>('F_ZOOM');\n\nexport abstract class FZoomBase {\n\n protected isEnabled: boolean = false;\n\n private minimum: number = 0.3;\n private maximum: number = 4;\n\n private step: number = 1.1;\n\n private listeners: Function = EventExtensions.emptyListener();\n\n protected constructor(\n private fItemsContainer: FItemsContainerBase,\n private fDnd: FDraggableBase,\n private fCanvas: FCanvasBase,\n ) {\n }\n\n protected toggleZoom(): void {\n if (this.isEnabled && this.fCanvas.hostElement) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n\n private subscribe(): void {\n this.listeners();\n\n this.fCanvas.hostElement.addEventListener('wheel', this.onWheel.bind(this));\n this.fCanvas.hostElement.addEventListener('dblclick', this.onDoubleClick.bind(this));\n this.listeners = () => {\n this.fCanvas.hostElement.removeEventListener('wheel', this.onWheel.bind(this));\n this.fCanvas.hostElement.removeEventListener('dblclick', this.onDoubleClick.bind(this));\n };\n }\n\n public getScale(): number {\n return this.fItemsContainer.transform.scale || 1;\n }\n\n private onWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (this.fDnd.isDragStarted) {\n return;\n }\n\n let result: number = this.getScale();\n\n if (event.deltaY > 0) {\n if (this.getScale() / this.step >= this.minimum) {\n result = this.getScale() / this.step;\n }\n } else if (event.deltaY < 0) {\n if (this.getScale() * this.step <= this.maximum) {\n result = this.getScale() * this.step;\n }\n }\n\n const pointerPositionInCanvas = new Point(event.clientX, event.clientY).matrixTransform(this.fCanvas.hostElement);\n\n this.fItemsContainer.setZoom(result, pointerPositionInCanvas);\n this.fItemsContainer.redraw();\n this.fItemsContainer.completeDrag();\n }\n\n public onZoomToCenter(deltaY: number): void {\n const preventDefault = () => {\n };\n const rect = RectExtensions.fromElement(this.fCanvas.hostElement);\n\n this.onWheel({\n deltaY, preventDefault, clientX: rect.gravityCenter.x, clientY: rect.gravityCenter.y\n } as WheelEvent);\n }\n\n private onDoubleClick(event: MouseEvent): void {\n event.preventDefault();\n\n if (this.fDnd.isDragStarted || isNode(event.target as HTMLElement)) {\n return;\n }\n\n let result: number = this.getScale();\n\n if (this.getScale() * 1.7 <= this.maximum) {\n result = this.getScale() * 1.7;\n }\n const pointerPositionInCanvas = new Point(event.clientX, event.clientY).matrixTransform(this.fCanvas.hostElement);\n this.fItemsContainer.setZoom(result, pointerPositionInCanvas);\n this.fItemsContainer.redrawWithAnimation();\n this.fItemsContainer.completeDrag();\n }\n\n public reset(): void {\n this.fItemsContainer.resetZoom();\n this.fItemsContainer.redraw();\n this.fItemsContainer.completeDrag();\n }\n\n protected unsubscribe(): void {\n this.listeners();\n this.listeners = EventExtensions.emptyListener();\n }\n}\n","import {\n AfterViewInit,\n Directive, Inject, Input, OnDestroy\n} from \"@angular/core\";\nimport { BooleanExtensions } from '@foblex/core';\nimport { FZoomBase, F_ZOOM } from './f-zoom-base';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../f-containers';\nimport { F_CANVAS, FCanvasBase } from '../../internal';\nimport { F_DND_DIRECTIVE, FDraggableBase } from '../f-draggable';\n\n@Directive({\n selector: \"g[fZoom]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-flow-zoom f-component'\n },\n providers: [ { provide: F_ZOOM, useExisting: FZoomDirective } ],\n})\nexport class FZoomDirective extends FZoomBase implements AfterViewInit, OnDestroy {\n\n @Input('fZoom')\n public get fFlowZoom(): boolean {\n return this.isEnabled;\n }\n\n public set fFlowZoom(isEnabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isEnabled);\n if (value !== this.isEnabled) {\n this.isEnabled = value;\n this.toggleZoom();\n }\n }\n\n constructor(\n @Inject(F_ITEMS_CONTAINER) fItemsContainer: FItemsContainerBase,\n @Inject(F_DND_DIRECTIVE) fDnd: FDraggableBase,\n @Inject(F_CANVAS) fCanvas: FCanvasBase\n ) {\n super(fItemsContainer, fDnd, fCanvas);\n }\n\n public ngAfterViewInit(): void {\n super.toggleZoom();\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n }\n}\n","import { AfterContentInit, ChangeDetectorRef, Directive, ElementRef, InjectionToken, NgZone, OnDestroy, QueryList } from '@angular/core';\nimport { IHasHostElement, ITransformModel } from '@foblex/core';\nimport { FItemsContainerBase } from '../../directives';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\nimport { merge, startWith, Subject, takeUntil } from 'rxjs';\nimport { FBackgroundBase } from '../../internal';\nimport { FConnectionsContainerBase } from '../../directives';\nimport { FNodesContainerBase } from '../../directives';\n\nexport const F_FLOW_COMPONENT = new InjectionToken<FFlowBase>('F_FLOW_COMPONENT');\n\n@Directive()\nexport abstract class FFlowBase implements IHasHostElement, AfterContentInit, OnDestroy {\n\n public abstract id: any;\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n private readonly onDestroy: Subject<void> = new Subject<void>();\n\n\n public abstract fNodesContainer: FNodesContainerBase;\n\n public abstract fConnectionsContainer: FConnectionsContainerBase;\n\n\n public abstract fItemsContainer: FItemsContainerBase;\n\n public abstract fBackground: FBackgroundBase;\n\n public abstract transform: ITransformModel;\n\n public abstract outlets: QueryList<FNodeOutletBase>;\n\n public abstract outputs: QueryList<FNodeOutputBase>;\n\n public abstract inputs: QueryList<FNodeInputBase>;\n\n protected constructor(\n private elementReference: ElementRef<SVGSVGElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n }\n\n public ngAfterContentInit(): void {\n this.subscribeOnComponentsChanges();\n }\n\n protected subscribeOnComponentsChanges(): void {\n const changes = [\n this.fNodesContainer.fNodes.changes,\n this.fConnectionsContainer.fConnections.changes,\n this.outlets.changes,\n this.outputs.changes,\n this.inputs.changes\n ];\n\n merge(...changes).pipe(startWith(null), takeUntil(this.onDestroy)).subscribe(() => {\n const changedOrDestroyed = merge(...changes, this.onDestroy);\n\n merge(this.fNodesContainer.stateChanges).pipe(startWith(null), takeUntil(changedOrDestroyed)).subscribe(() => {\n\n this.fConnectionsContainer.fConnections.forEach((connection) => {\n connection.fromTo = {\n output: this.outputs.find((x) => x.id === connection.outputId)!,\n input: this.inputs.find((x) => x.id === connection.inputId)!\n };\n connection.initialize();\n });\n });\n\n });\n }\n\n public ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import {\n ChangeDetectorRef,\n Component, ContentChild,\n ContentChildren,\n ElementRef,\n Input,\n NgZone,\n QueryList,\n ViewChild\n} from '@angular/core';\nimport { FCanvasDirective } from '../../internal';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../../directives';\nimport { F_FLOW_COMPONENT, FFlowBase } from './f-flow-base';\nimport { ITransformModel } from '@foblex/core';\nimport {\n F_NODE_INPUT_DIRECTIVE, F_NODE_OUTLET_DIRECTIVE,\n F_NODE_OUTPUT_DIRECTIVE,\n FNodeInputBase,\n FNodeOutletBase,\n FNodeOutputBase\n} from '../f-connectors';\nimport { F_NODES_CONTAINER, FNodesContainerBase } from '../../directives';\nimport {\n F_CONNECTIONS_CONTAINER,\n FConnectionsContainerBase\n} from '../../directives';\nimport { F_BACKGROUND, FBackgroundBase } from '../../internal';\n\nlet uniqueId: number = 0;\n\nexport const CONNECTION_MARKER_START = \"connection-marker-start\";\nexport const CONNECTION_MARKER_END = \"connection-marker-end\";\nexport const CONNECTION_MARKER_START_SELECTED = \"connection-marker-start-selected\";\nexport const CONNECTION_MARKER_END_SELECTED = \"connection-marker-end-selected\";\n@Component({\n selector: 'svg[fFlow]',\n templateUrl: './f-flow.component.html',\n hostDirectives: [\n {\n directive: FCanvasDirective\n }\n ],\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-flow\"\n },\n providers: [ { provide: F_FLOW_COMPONENT, useExisting: FFlowComponent } ],\n})\nexport class FFlowComponent extends FFlowBase {\n\n public readonly CONNECTION_MARKER_START = CONNECTION_MARKER_START;\n public readonly CONNECTION_MARKER_END = CONNECTION_MARKER_END;\n public readonly CONNECTION_MARKER_START_SELECTED = CONNECTION_MARKER_START_SELECTED;\n public readonly CONNECTION_MARKER_END_SELECTED = CONNECTION_MARKER_END_SELECTED;\n\n @Input()\n public override id: string = `f-flow-${ uniqueId++ }`;\n\n @ContentChild(F_NODES_CONTAINER, { static: true })\n public override fNodesContainer!: FNodesContainerBase;\n\n @ContentChild(F_CONNECTIONS_CONTAINER, { descendants: true })\n public override fConnectionsContainer!: FConnectionsContainerBase;\n\n @ContentChild(F_ITEMS_CONTAINER, { static: true })\n public override fItemsContainer!: FItemsContainerBase;\n\n @ViewChild(F_BACKGROUND, { static: true })\n public override fBackground!: FBackgroundBase;\n\n @ContentChildren(F_NODE_OUTLET_DIRECTIVE, { descendants: true })\n public override outlets!: QueryList<FNodeOutletBase>;\n\n @ContentChildren(F_NODE_OUTPUT_DIRECTIVE, { descendants: true })\n public override outputs!: QueryList<FNodeOutputBase>;\n\n @ContentChildren(F_NODE_INPUT_DIRECTIVE, { descendants: true })\n public override inputs!: QueryList<FNodeInputBase>;\n\n public override get transform(): ITransformModel {\n return this.fItemsContainer.transform;\n }\n\n constructor(\n elementReference: ElementRef<SVGSVGElement>,\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone\n ) {\n super(elementReference, changeDetectorRef, ngZone);\n }\n}\n","<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","import {\n ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild\n} from \"@angular/core\";\nimport { IVector } from '@foblex/core';\nimport { F_CONNECTION_COMPONENT } from '../../../tokens';\nimport {\n FConnectionBase,\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent, FConnectionTextComponent, getConnectionIntersect\n} from '../common';\nimport { F_FLOW_COMPONENT, FFlowBase } from '../../f-flow';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fConnection]\",\n templateUrl: \"./f-connection.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-connection\"\n },\n providers: [ { provide: F_CONNECTION_COMPONENT, useExisting: FConnectionComponent } ],\n})\nexport class FConnectionComponent extends FConnectionBase {\n\n @Input()\n public override id: string = `f-connection-${ uniqueId++ }`;\n\n @Input()\n public override outputId: any;\n\n @Input()\n public override inputId: any;\n\n @ViewChild(FConnectionPathComponent, { static: true })\n public override fPath!: FConnectionPathComponent;\n\n @ViewChild(FConnectionGradientComponent, { static: true })\n public fGradient!: FConnectionGradientComponent;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(FConnectionTextComponent, { static: true })\n public fText!: FConnectionTextComponent;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n @Inject(F_FLOW_COMPONENT) private flow: FFlowBase\n ) {\n super();\n }\n\n public override initialize(): void {\n const vector = getConnectionIntersect(\n this.fromTo!.output.getElementRectInCanvas(this.flow.transform, this.flow.hostElement),\n this.fromTo!.input.getElementRectInCanvas(this.flow.transform, this.flow.hostElement)\n );\n this.setVector(vector);\n this.redraw();\n }\n\n public initializeDrag(): void {\n }\n\n public setVector(vector: IVector): void {\n this.vector = vector;\n this.path = `M${ vector.point1.x },${ vector.point1.y }L${ vector.point2.x + 0.0001 },${ vector.point2.y + 0.0001 }`;\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fSelection.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fDragHandle.redraw(this.vector.point2);\n this.fText.redraw(this.vector);\n }\n\n public override select(): void {\n this.fPath.select();\n super.select();\n }\n\n public override deselect(): void {\n this.fPath.deselect();\n super.deselect();\n }\n\n public completeDrag(): void {\n this.redraw();\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:linearGradient fConnectionGradient [fromTo]=\"fromTo\"></svg:linearGradient>\n <svg:path fConnectionSelection [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n <svg:g>\n <svg:path f-connection-path [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n <svg:circle f-connection-drag-handle r=\"8\"></svg:circle>\n </svg:g>\n <svg:text f-connection-text [fromTo]=\"fromTo\"></svg:text>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FConnectionCommonModule } from '../common';\nimport { FConnectionComponent } from './f-connection.component';\n\n@NgModule({\n declarations: [\n FConnectionComponent\n ],\n imports: [\n CommonModule,\n FConnectionCommonModule\n ],\n exports: [\n FConnectionComponent\n ]\n})\nexport class FConnectionModule {\n}\n","import { NgModule } from '@angular/core';\nimport { FFlowComponent, FTempConnectionModule } from './components';\nimport { FConnectionCommonModule } from './components';\nimport { FNodeInputDirective, FNodeOutletDirective, FNodeOutputDirective } from './components';\nimport { FDragHandleDirective, FForeignObjectComponent, FNodeComponent } from './components';\nimport { CommonModule } from '@angular/common';\nimport { FConnectionsContainerComponent, FItemsContainerDirective, FNodesContainerComponent, FZoomDirective } from './directives';\nimport { FBackgroundDirective, FCanvasDirective } from './internal';\n\n@NgModule({\n declarations: [\n FFlowComponent,\n FNodeComponent,\n FZoomDirective,\n FForeignObjectComponent,\n FDragHandleDirective,\n FItemsContainerDirective,\n FNodesContainerComponent,\n FConnectionsContainerComponent,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n ],\n imports: [\n CommonModule,\n FTempConnectionModule,\n FCanvasDirective,\n FBackgroundDirective,\n ],\n providers: [],\n exports: [\n FFlowComponent,\n FNodeComponent,\n FZoomDirective,\n FForeignObjectComponent,\n FDragHandleDirective,\n FItemsContainerDirective,\n FNodesContainerComponent,\n FConnectionsContainerComponent,\n FConnectionCommonModule,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n ]\n})\nexport class FFlowModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FConnectionTextPathDirective","uniqueId","i1.FConnectionGradientComponent","i2.FConnectionPathComponent","i3.FConnectionTextComponent","i1.FCanvasBase","i1.FTempConnectionComponent","i1.FExternalItemService","i1.FFlowBase","i2.FDraggableService","i3.FExternalItemService","ALIGN_THRESHOLD","i1.FDraggableService","i2.FExternalItemService","i1.FCanvasDirective","i3.FBackgroundDirective","i1.FConnectionDragHandleComponent","i2.FConnectionGradientComponent","i3.FConnectionPathComponent","i4.FConnectionTextComponent","i5.FConnectionSelectionComponent"],"mappings":"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"}
1
+ {"version":3,"file":"foblex-flow.mjs","sources":["../../../projects/f-flow/src/i-selectable.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-base.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-identifiers.ts","../../../projects/f-flow/src/components/f-connection/common/f-path/f-connection-path.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-gradient/f-connection-gradient.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-gradient/f-connection-gradient.component.html","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text-path.directive.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-text/f-connection-text.component.html","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.component.ts","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.component.html","../../../projects/f-flow/src/components/f-connection/f-temp-connection/temp-connection-input-output-model.ts","../../../projects/f-flow/src/components/f-connection/common/f-drag-handle/f-connection-drag-handle.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-selection/f-connection-selection.component.ts","../../../projects/f-flow/src/components/f-connection/common/f-connection-common.module.ts","../../../projects/f-flow/src/components/f-connection/common/get-connection-intersect.ts","../../../projects/f-flow/src/components/f-connection/f-temp-connection/f-temp-connection.module.ts","../../../projects/f-flow/src/tokens.ts","../../../projects/f-flow/src/internal/f-canvas/f-canvas-base.ts","../../../projects/f-flow/src/internal/f-canvas/f-canvas.directive.ts","../../../projects/f-flow/src/internal/f-backgroud/f-background-base.ts","../../../projects/f-flow/src/internal/f-backgroud/f-background.directive.ts","../../../projects/f-flow/src/components/f-connectors/get-element-rect-in-canvas.ts","../../../projects/f-flow/src/components/f-connectors/f-connector-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/f-node-input-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/is-node-input.ts","../../../projects/f-flow/src/components/f-flow/i-flow-connector-parent.ts","../../../projects/f-flow/src/components/f-connectors/f-node-input/f-node-input.directive.ts","../../../projects/f-flow/src/components/f-connectors/f-out-connector-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/f-node-outlet-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/is-node-outlet.ts","../../../projects/f-flow/src/components/f-connectors/f-node-outlet/f-node-outlet.directive.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/f-node-output-base.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/is-node-output.ts","../../../projects/f-flow/src/components/f-connectors/f-node-output/f-node-output.directive.ts","../../../projects/f-flow/src/components/f-node/f-node-base.ts","../../../projects/f-flow/src/components/f-node/f-drag-handle/f-drag-handle.directive.ts","../../../projects/f-flow/src/components/f-node/f-drag-handle/is-drag-handle.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object-base.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object.component.ts","../../../projects/f-flow/src/components/f-node/f-foreign-object/f-foreign-object.component.html","../../../projects/f-flow/src/components/f-node/f-node.component.ts","../../../projects/f-flow/src/components/f-node/f-node.component.html","../../../projects/f-flow/src/components/f-node/is-node.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container.component.ts","../../../projects/f-flow/src/directives/f-containers/f-connections-container/f-connections-container.component.html","../../../projects/f-flow/src/common-behaviours/change-zoom/change-zoom.ts","../../../projects/f-flow/src/common-behaviours/fit-to-parent/fit-to-parent.ts","../../../projects/f-flow/src/common-behaviours/one-to-one-centering/one-to-one-centering.ts","../../../projects/f-flow/src/common-behaviours/change-position.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/canvas-change.event.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/f-items-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-items-container/f-items-container.directive.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container-base.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container.component.ts","../../../projects/f-flow/src/directives/f-containers/f-nodes-container/f-nodes-container.component.html","../../../projects/f-flow/src/directives/f-draggable/e-draggable-type.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-move/canvas.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-down/canvas-on-pointer-down.handler.ts","../../../projects/f-flow/src/directives/f-draggable/canvas/canvas-on-pointer-down/canvas-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-down/create-connection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/find-first-can-be-connected-output-by-outlet/find-first-can-be-connected-output-by-outlet.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-down/create-connection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/first-not-connected-input-of-node-under-pointer/first-not-connected-input-of-node-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/inputs-under-pointer/inputs-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/find-inputs-under-pointer/find-inputs-under-pointer.handler.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection.event.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-up/create-connection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/connections/create-connection/create-connection-on-pointer-up/create-connection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-move/reassign-connection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-down/reassign-connection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-down/reassign-connection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-connection.event.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-up/reassign-connection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/connections/reassign-connection/reassign-on-pointer-up/reassign-connection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/default-drag-handler/default-drag.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-down/external-item-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item-base.ts","../../../projects/f-flow/src/directives/f-external-item/is-external-item.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item.service.ts","../../../projects/f-flow/src/directives/f-external-item/f-external-item.directive.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-move/external-item-on-pointer-move.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-down/external-item-on-pointer-down.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/create-node.event.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-up/external-item-on-pointer-up.handler.ts","../../../projects/f-flow/src/directives/f-draggable/external-item/external-item-on-pointer-up/external-item-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-down/node-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection-source.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/f-connection-target.drag-handler.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-move/node.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-down/node.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-up/node.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/node/node-on-pointer-up/node-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-move/selection.on-pointer-move.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-down/selection.on-pointer-down.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-down/selection-on-pointer-down.request.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-up/selection.on-pointer-up.ts","../../../projects/f-flow/src/directives/f-draggable/selection/selection-on-pointer-up/selection-on-pointer-up.request.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.service.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable-base.ts","../../../projects/f-flow/src/directives/f-line-alignment/domain/find-nearest-coordinate-by-x.ts","../../../projects/f-flow/src/directives/f-line-alignment/domain/find-nearest-coordinate-by-y.ts","../../../projects/f-flow/src/directives/f-line-alignment/f-line-alignment.directive.ts","../../../projects/f-flow/src/directives/f-selection/f-selection.directive.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.directive.ts","../../../projects/f-flow/src/directives/f-draggable/f-draggable.module.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/connect-if-intersect/connect-if-intersect.handler.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/connect-if-intersect/connect-if-intersect.request.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/f-connect-if-intersect-base.ts","../../../projects/f-flow/src/directives/f-connect-if-intersect/f-connect-if-intersect.directive.ts","../../../projects/f-flow/src/directives/f-zoom/f-zoom-base.ts","../../../projects/f-flow/src/directives/f-zoom/f-zoom.directive.ts","../../../projects/f-flow/src/components/f-flow/f-flow-base.ts","../../../projects/f-flow/src/components/f-flow/f-flow.component.ts","../../../projects/f-flow/src/components/f-flow/f-flow.component.html","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.component.ts","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.component.html","../../../projects/f-flow/src/components/f-connection/f-connection/f-connection.module.ts","../../../projects/f-flow/src/f-flow.module.ts","../../../projects/f-flow/src/foblex-flow.ts"],"sourcesContent":["export interface ISelectable {\n\n hostElement: HTMLElement | SVGElement;\n\n select(): void;\n\n deselect(): void;\n\n isSelected(): boolean;\n}\n\nexport const F_SELECTED_CLASS = 'f-selected';\n","import { Directive } from '@angular/core';\nimport { IHasHostElement, IVector, VectorExtensions } from '@foblex/core';\nimport { FNodeOutputBase } from '../../f-connectors';\nimport { IInputOutputModel } from './i-input-output-model';\nimport { F_SELECTED_CLASS, ISelectable } from '../../../i-selectable';\nimport { FConnectionPathComponent } from './f-path';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\nimport { Subject } from 'rxjs';\n\n@Directive()\nexport abstract class FConnectionBase<TOutput = FNodeOutputBase> implements IHasHostElement, ISelectable, IHasStateChanges {\n\n public abstract id: any;\n\n public abstract hostElement: SVGGElement;\n\n public abstract outputId: any;\n\n public abstract inputId: any;\n\n public fromTo: IInputOutputModel<TOutput> | undefined;\n\n public abstract fPath: FConnectionPathComponent;\n\n public path: string = '';\n\n public vector: IVector = VectorExtensions.initialize();\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public initialize(): void {\n\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public abstract initializeDrag(): void;\n\n public abstract redraw(): void;\n\n public abstract setVector(vector: IVector): void;\n\n public abstract completeDrag(): void;\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n}\n","export const F_CONNECTION_IDENTIFIERS = {\n\n textId(connectionId: string): string {\n return 'connection_text_' + connectionId;\n },\n connectionForSelectionId(connectionId: string): string {\n return 'connection_for_selection_' + connectionId;\n },\n connectionId(connectionId: string): string {\n return 'connection_' + connectionId;\n },\n gradientId(connectionId: string): string {\n return 'connection_gradient_' + connectionId;\n },\n linkToGradient(connectionId: string): string {\n return `url(#${ F_CONNECTION_IDENTIFIERS.gradientId(connectionId) })`;\n },\n linkToConnection(connectionId: string): string {\n return `#${ F_CONNECTION_IDENTIFIERS.connectionId(connectionId) }`;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input, OnInit\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\nimport { ISelectable } from '../../../../i-selectable';\n\n@Component({\n selector: \"path[f-connection-path]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-path\",\n '[attr.id]': 'attrConnectionId',\n '[attr.stroke]': 'linkToGradient',\n },\n})\nexport class FConnectionPathComponent implements IHasHostElement, ISelectable, OnInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get linkToGradient(): string {\n return F_CONNECTION_IDENTIFIERS.linkToGradient(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get attrConnectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public ngOnInit(): void {\n this.deselect();\n }\n\n public setPath(path: string): void {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n\n public select(): void {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start-selected)`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end-selected)`);\n }\n\n public deselect(): void {\n if (this.fromTo?.input) {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start-${ this.fromTo?.output?.color })`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end-${ this.fromTo?.input?.color })`);\n } else {\n this.hostElement.setAttribute('marker-start', `url(#connection-marker-start)`);\n this.hostElement.setAttribute('marker-end', `url(#connection-marker-end)`);\n }\n }\n\n public isSelected(): boolean {\n return this.hostElement.getAttribute('marker-start') === `url(#connection-marker-start-selected)`\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component, ElementRef, Input\n} from \"@angular/core\";\nimport { IHasHostElement, IVector, Point } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"linearGradient[fConnectionGradient]\",\n templateUrl: \"./f-connection-gradient.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-gradient\",\n '[attr.id]': 'gradientId'\n },\n})\nexport class FConnectionGradientComponent implements IHasHostElement, AfterContentInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get gradientId(): string {\n return F_CONNECTION_IDENTIFIERS.gradientId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGLinearGradientElement {\n return this.elementReference.nativeElement;\n }\n\n public get stop1Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(0) as SVGStopElement;\n }\n\n public get stop2Element(): SVGStopElement {\n return this.elementReference.nativeElement.children.item(1) as SVGStopElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGLinearGradientElement>,\n ) {\n }\n\n public ngAfterContentInit(): void {\n this.stop1Element.setAttribute('offset', '0%');\n this.stop2Element.setAttribute('offset', '100%');\n }\n\n private updateGradient(): void {\n this.setFromColor(this.fromTo?.output.color);\n this.setToColor(this.fromTo?.input?.color);\n }\n\n private setFromColor(color: string | undefined): void {\n this.stop1Element.setAttribute('stop-color', color || 'transparent');\n }\n\n private setToColor(color: string | undefined): void {\n this.stop2Element.setAttribute('stop-color', color || 'transparent');\n }\n\n public redraw(vector: IVector): void {\n const x: number = vector.point2.x - vector.point1.x;\n const y: number = vector.point2.y - vector.point1.y;\n const distance: number = Math.sqrt(x * x + y * y) || 0.01;\n\n const from = new Point(0.5 - (0.5 * x) / distance, 0.5 - (0.5 * y) / distance);\n\n this.hostElement.setAttribute('x1', from.x.toString());\n this.hostElement.setAttribute('y1', from.y.toString());\n\n const to = new Point(0.5 + (0.5 * x) / distance, 0.5 + (0.5 * y) / distance);\n this.hostElement.setAttribute('x2', to.x.toString());\n this.hostElement.setAttribute('y2', to.y.toString());\n this.updateGradient();\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:stop/>\n <svg:stop/>\n</ng-container>\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Directive({\n selector: 'textPath[f-connection-text-path]',\n host: {\n '[attr.href]': 'linkToConnection'\n }\n})\nexport class FConnectionTextPathDirective implements IHasHostElement, OnInit {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get linkToConnection(): string {\n return F_CONNECTION_IDENTIFIERS.linkToConnection(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public ngOnInit(): void {\n this.hostElement.setAttribute('startOffset', '50%');\n this.hostElement.setAttribute('text-anchor', `middle`);\n }\n\n public getBBox(): DOMRect {\n return this.hostElement.getBBox();\n }\n\n public setOffset(offset: number): void {\n this.hostElement.setAttribute('startOffset', offset.toString());\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input, ViewChild\n} from \"@angular/core\";\nimport { IHasHostElement, IVector, PointExtensions } from '@foblex/core';\nimport { FConnectionTextPathDirective } from './f-connection-text-path.directive';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"text[f-connection-text]\",\n templateUrl: \"./f-connection-text.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-text\",\n '[attr.id]': 'textId',\n },\n})\nexport class FConnectionTextComponent implements IHasHostElement {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get textId(): string {\n return F_CONNECTION_IDENTIFIERS.textId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGTextElement {\n return this.elementReference.nativeElement;\n }\n\n @ViewChild(FConnectionTextPathDirective, { static: true })\n public textPathDirective!: FConnectionTextPathDirective;\n\n constructor(\n private elementReference: ElementRef<SVGTextElement>\n ) {\n }\n\n public redraw(vector: IVector): void {\n\n const isTextReverse: boolean = FConnectionTextComponent.isTextReverse(vector);\n\n this.hostElement.setAttribute('dy', isTextReverse ? '15' : '-8');\n\n const textRect = this.textPathDirective.getBBox();\n const textRectCenter = [ textRect.x + textRect.width / 2, textRect.y + textRect.height / 2 ];\n this.hostElement.setAttribute('transform', isTextReverse ? `rotate(180, ${ textRectCenter })` : '');\n const startOffset = FConnectionTextComponent.getTextStartOffset(vector, this.fromTo?.output.name || '');\n // this.textPathDirective.setOffset(startOffset);\n\n if (startOffset < 0) {\n\n this.hostElement.style.display = 'none';\n } else {\n\n this.hostElement.style.display = 'unset';\n }\n }\n\n private static isTextReverse(vector: IVector): boolean {\n return vector.point1.x > vector.point2.x;\n }\n\n private static getTextStartOffset(vector: IVector, name: string): number {\n const symbolWidth: number = 8;\n const vectorLength: number = PointExtensions.hypotenuse(vector.point1, vector.point2);\n return vectorLength / 2 - ((name || '').length * symbolWidth) / 2;\n }\n}\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:textPath f-connection-text-path [fromTo]=\"fromTo\">\n {{ fromTo?.output?.name }}\n </svg:textPath>\n</ng-container>\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component, ElementRef, InjectionToken, ViewChild\n} from \"@angular/core\";\nimport { FConnectionBase } from '../common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../f-connectors';\nimport { FConnectionPathComponent } from '../common/f-path';\nimport { FConnectionGradientComponent } from '../common/f-gradient';\nimport { FConnectionTextComponent } from '../common/f-connection-text';\nimport { IVector } from '@foblex/core';\n\nexport const F_TEMP_CONNECTION_COMPONENT = new InjectionToken<FConnectionBase>('F_TEMP_CONNECTION_COMPONENT');\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fTempConnection]\",\n templateUrl: \"./f-temp-connection.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection f-temp-connection\"\n },\n providers: [\n { provide: F_TEMP_CONNECTION_COMPONENT, useExisting: FTempConnectionComponent }\n ],\n})\nexport class FTempConnectionComponent\n extends FConnectionBase<FNodeOutputBase | FNodeOutletBase> implements AfterViewInit {\n\n public override id: string = `f-temp-connection-${ uniqueId++ }`;\n\n public override outputId: any;\n\n public override inputId: any;\n\n @ViewChild(FConnectionPathComponent, { static: true })\n public override fPath!: FConnectionPathComponent;\n\n @ViewChild(FConnectionGradientComponent, { static: true })\n public fGradient!: FConnectionGradientComponent;\n\n @ViewChild(FConnectionTextComponent, { static: true })\n public fText!: FConnectionTextComponent;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n this.hostElement.style.display = \"none\";\n }\n\n public initializeDrag(): void {\n this.hostElement.style.display = \"unset\";\n }\n\n public setVector(vector: IVector): void {\n this.vector = vector;\n this.path = `M${ vector.point1.x },${ vector.point1.y }L${ vector.point2.x + 0.0001 },${ vector.point2.y + 0.0001 }`;\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fText.redraw(this.vector);\n }\n\n public completeDrag(): void {\n this.hostElement.style.display = \"none\";\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:linearGradient fConnectionGradient [fromTo]=\"fromTo\"></svg:linearGradient>\n <svg:g>\n <svg:path f-connection-path stroke-dasharray=\"10,10\" [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n </svg:g>\n <svg:text f-connection-text [fromTo]=\"fromTo\"></svg:text>\n</ng-container>\n","import { IInputOutputModel } from '../common/i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../f-connectors';\n\nexport class TempConnectionInputOutputModel\n implements IInputOutputModel<FNodeOutputBase | FNodeOutletBase, null> {\n\n public input = null;\n\n public constructor(\n public output: FNodeOutputBase | FNodeOutletBase\n ) {\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint } from '@foblex/core';\n\nexport const F_CONNECTION_DRAG_HANDLE_CLASS = 'f-connection-drag-handle';\n\n@Component({\n selector: \"circle[f-connection-drag-handle]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'class'\n }\n})\nexport class FConnectionDragHandleComponent implements IHasHostElement {\n\n public readonly class: string = F_CONNECTION_DRAG_HANDLE_CLASS;\n\n public get hostElement(): SVGCircleElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGCircleElement>,\n ) {\n }\n\n public redraw(point: IPoint): void {\n this.hostElement.setAttribute('cx', point.x.toString());\n this.hostElement.setAttribute('cy', point.y.toString());\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Input\n} from \"@angular/core\";\nimport { IHasHostElement } from '@foblex/core';\nimport { F_CONNECTION_IDENTIFIERS } from '../f-connection-identifiers';\nimport { IInputOutputModel } from '../i-input-output-model';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../f-connectors';\n\n@Component({\n selector: \"path[fConnectionSelection]\",\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-component f-connection-selection\",\n '[attr.id]': 'connectionForSelectionId',\n },\n})\nexport class FConnectionSelectionComponent implements IHasHostElement {\n\n @Input()\n public fromTo: IInputOutputModel<FNodeOutputBase | FNodeOutletBase> | undefined;\n\n public get connectionForSelectionId(): string {\n return F_CONNECTION_IDENTIFIERS.connectionForSelectionId(\n this.fromTo?.output.id + this.fromTo?.input?.id\n );\n }\n\n public get hostElement(): SVGPathElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGPathElement>,\n ) {\n }\n\n public setPath(path: string) {\n this.hostElement.setAttribute(\"d\", `${ path }`);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent,\n FConnectionTextComponent, FConnectionTextPathDirective\n} from './index';\n\n@NgModule({\n declarations: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n ],\n imports: [\n CommonModule\n ],\n exports: [\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent,\n FConnectionTextComponent,\n FConnectionTextPathDirective,\n FConnectionSelectionComponent,\n ]\n})\nexport class FConnectionCommonModule {\n}\n","import { IRect, IVector, RectExtensions } from '@foblex/core';\n\nexport function getConnectionIntersect(fromRect: IRect, toRect: IRect): IVector {\n\n const fromResult = RectExtensions.intersectionWithVector(fromRect, fromRect.gravityCenter, toRect.gravityCenter);\n const toResult = RectExtensions.intersectionWithVector(toRect, fromRect.gravityCenter, toRect.gravityCenter);\n\n return {\n point1: fromResult ? fromResult[ 1 ] : fromRect.gravityCenter,\n point2: toResult ? toResult[ 0 ] : toRect.gravityCenter,\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FTempConnectionComponent } from './f-temp-connection.component';\nimport { FConnectionCommonModule } from '../common';\n\n@NgModule({\n declarations: [\n FTempConnectionComponent,\n ],\n imports: [\n CommonModule,\n FConnectionCommonModule\n ],\n exports: [\n FTempConnectionComponent,\n ]\n})\nexport class FTempConnectionModule {\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const F_CONNECT_IF_INTERSECT = new InjectionToken('F_CONNECT_IF_INTERSECT');\n\nexport const F_CONNECTION_COMPONENT = new InjectionToken('F_CONNECTION_COMPONENT');\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IHasHostElement } from '@foblex/core';\n\nexport const F_CANVAS = new InjectionToken<FCanvasBase>('F_CANVAS');\n\n@Directive()\nexport abstract class FCanvasBase implements IHasHostElement {\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGSVGElement>\n ) {\n this.initialize();\n }\n\n protected initialize(): void {\n this.hostElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns', 'http://www.w3.org/2000/svg');\n this.hostElement.setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n this.hostElement.setAttribute('version', '1.1');\n this.hostElement.setAttribute('baseProfile', 'full');\n this.hostElement.style.cssText = 'user-select:none; width:100%; height:100%;';\n }\n}\n","import {\n Directive, ElementRef\n} from \"@angular/core\";\nimport { F_CANVAS, FCanvasBase } from './f-canvas-base';\n\n@Directive({\n selector: \"svg[fCanvas]\",\n standalone: true,\n providers: [ { provide: F_CANVAS, useExisting: FCanvasDirective } ],\n})\nexport class FCanvasDirective extends FCanvasBase {\n\n constructor(\n elementReference: ElementRef<SVGSVGElement>\n ) {\n super(elementReference);\n }\n}\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IHasHostElement, ITransformModel, TransformModelExtensions } from '@foblex/core';\nimport { FCanvasBase } from '../f-canvas';\n\nexport const F_BACKGROUND = new InjectionToken<FBackgroundBase>('F_BACKGROUND');\n\n@Directive()\nexport abstract class FBackgroundBase implements IHasHostElement {\n\n public transform: ITransformModel = TransformModelExtensions.default();\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGGElement>,\n private fCanvas: FCanvasBase\n ) {\n console.log('FBackgroundBase');\n }\n\n public isBackgroundElement(element: HTMLElement | SVGElement): boolean {\n return this.hostElement === element || this.hostElement.contains(element) || this.fCanvas.hostElement.contains(element);\n }\n}\n","import {\n Directive, ElementRef, Inject\n} from \"@angular/core\";\nimport { F_BACKGROUND, FBackgroundBase } from './f-background-base';\nimport { F_CANVAS, FCanvasBase } from '../f-canvas';\n\n@Directive({\n selector: \"g[fBackground]\",\n standalone: true,\n providers: [ { provide: F_BACKGROUND, useExisting: FBackgroundDirective } ],\n})\nexport class FBackgroundDirective extends FBackgroundBase {\n\n constructor(\n elementReference: ElementRef<SVGGElement>,\n @Inject(F_CANVAS) fCanvas: FCanvasBase\n ) {\n super(elementReference, fCanvas);\n }\n}\n","import { IRect, ITransformModel, Point, RectExtensions, SizeExtensions } from '@foblex/core';\n\nexport function getElementRectInCanvas(element: HTMLElement | SVGElement, transform: ITransformModel, svgHost: SVGSVGElement): IRect {\n const rect = RectExtensions.fromElement(element);\n const position = Point.fromPoint(rect).matrixTransform(svgHost).sub(transform.scaledPosition).sub(transform.position).div(transform.scale);\n const size = SizeExtensions.initialize(rect.width / transform.scale, rect.height / transform.scale);\n return RectExtensions.initialize(position.x, position.y, size.width, size.height);\n}\n","import { Subject } from 'rxjs';\nimport { IHasHostElement, IRect, ITransformModel } from '@foblex/core';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { getElementRectInCanvas } from './get-element-rect-in-canvas';\n\nexport abstract class FConnectorBase implements IHasStateChanges, IHasHostElement {\n\n public abstract id: any;\n\n public abstract color: string;\n\n public abstract disabled: boolean;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract canBeConnected: boolean;\n\n public getElementRectInCanvas(transform: ITransformModel, svgHost: SVGSVGElement): IRect {\n return getElementRectInCanvas(this.hostElement, transform, svgHost);\n }\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FConnectorBase } from '../f-connector-base';\n\nexport const F_NODE_INPUT_DIRECTIVE = new InjectionToken<FNodeInputBase>('F_NODE_INPUT_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeInputBase extends FConnectorBase {\n\n public abstract multiple: boolean;\n\n public isConnected: boolean = false;\n\n public get canBeConnected(): boolean {\n return !this.disabled && (this.multiple ? true : !this.isConnected);\n }\n}\n","export function isNodeInput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeInput]');\n}\n","import { FConnectorBase } from '../f-connectors';\nimport { InjectionToken } from '@angular/core';\n\nexport const F_FLOW_CONNECTOR_PARENT = new InjectionToken('F_FLOW_CONNECTOR_PARENT');\n\nexport interface IFlowConnectorParent {\n\n addConnector(connector: FConnectorBase): void;\n\n removeConnector(connector: FConnectorBase): void;\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, Optional, SkipSelf } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_INPUT_DIRECTIVE, FNodeInputBase } from './f-node-input-base';\nimport { F_FLOW_CONNECTOR_PARENT, IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeInput]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-input\",\n '[class.f-node-input-multiple]': 'multiple',\n '[class.f-node-input-disabled]': 'disabled',\n '[class.f-node-input-not-connectable]': '!canBeConnected',\n },\n providers: [ { provide: F_NODE_INPUT_DIRECTIVE, useExisting: FNodeInputDirective } ],\n})\nexport class FNodeInputDirective extends FNodeInputBase implements OnDestroy {\n\n @Input()\n public override id: any = `f-node-input-${ uniqueId++ }`;\n\n @Input('fNodeInputColor')\n public fNodeInputColor: string | undefined;\n\n public get color(): string {\n return this.fNodeInputColor || 'black';\n }\n\n @Input('fNodeInputMultiple')\n public override multiple: boolean = true;\n\n @Input('fNodeInputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_FLOW_CONNECTOR_PARENT) @Optional() @SkipSelf() private _parentFlow?: IFlowConnectorParent,\n ) {\n super();\n this._parentFlow?.addConnector(this);\n }\n\n public ngOnDestroy(): void {\n this._parentFlow?.removeConnector(this);\n }\n}\n","import { FConnectorBase } from './f-connector-base';\n\nexport abstract class FOutConnectorBase extends FConnectorBase {\n\n public abstract name: string;\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FOutConnectorBase } from '../f-out-connector-base';\n\nexport const F_NODE_OUTLET_DIRECTIVE = new InjectionToken<FNodeOutletBase>('F_NODE_OUTLET_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeOutletBase extends FOutConnectorBase {\n\n public abstract isConnectionFromOutlet: boolean;\n\n\n private outputs: FOutConnectorBase[] = [];\n\n public get canBeConnected(): boolean {\n return !this.disabled;\n }\n\n public setOutputs(outputs: FOutConnectorBase[]): void {\n this.outputs = outputs;\n }\n}\n","export function isNodeOutlet(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutlet]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, Optional, SkipSelf } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { F_NODE_OUTLET_DIRECTIVE, FNodeOutletBase } from './f-node-outlet-base';\nimport { F_FLOW_CONNECTOR_PARENT, IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutlet]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-outlet\",\n '[class.f-node-outlet-disabled]': 'disabled'\n },\n providers: [ { provide: F_NODE_OUTLET_DIRECTIVE, useExisting: FNodeOutletDirective } ],\n})\nexport class FNodeOutletDirective extends FNodeOutletBase implements OnDestroy {\n\n @Input()\n public override id: string = `f-node-outlet-${ uniqueId++ }`;\n\n @Input('fNodeOutletColor')\n public override color: string = 'black';\n\n @Input()\n public override name: string = '';\n\n @Input('fNodeOutletDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n @Input()\n public override isConnectionFromOutlet: boolean = false\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_FLOW_CONNECTOR_PARENT) @Optional() @SkipSelf() private _parentFlow?: IFlowConnectorParent,\n ) {\n super();\n this._parentFlow?.addConnector(this);\n }\n\n public ngOnDestroy(): void {\n this._parentFlow?.removeConnector(this);\n }\n}\n","import { Directive, InjectionToken } from '@angular/core';\nimport { FOutConnectorBase } from '../f-out-connector-base';\n\nexport const F_NODE_OUTPUT_DIRECTIVE = new InjectionToken<FNodeOutputBase>('F_NODE_OUTPUT_DIRECTIVE');\n\n@Directive()\nexport abstract class FNodeOutputBase extends FOutConnectorBase {\n\n public isConnected: boolean = false;\n\n public override get canBeConnected(): boolean {\n return !this.disabled && !this.isConnected;\n }\n}\n","export function isNodeOutput(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNodeOutput]');\n}\n","import { Directive, ElementRef, Inject, Input, OnDestroy, Optional, SkipSelf } from '@angular/core';\nimport { BooleanExtensions } from '@foblex/core';\nimport { FNodeOutputBase, F_NODE_OUTPUT_DIRECTIVE } from './f-node-output-base';\nimport { F_FLOW_CONNECTOR_PARENT, IFlowConnectorParent } from '../../f-flow/i-flow-connector-parent';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fNodeOutput]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-node-output\",\n '[class.f-node-output-disabled]': 'disabled',\n '[class.f-node-output-connected]': 'isConnected'\n },\n providers: [ { provide: F_NODE_OUTPUT_DIRECTIVE, useExisting: FNodeOutputDirective } ],\n})\nexport class FNodeOutputDirective extends FNodeOutputBase implements OnDestroy {\n\n @Input()\n public override id: any = `f-node-output-${ uniqueId++ }`;\n\n @Input('fNodeOutputColor')\n public override color: string = 'black';\n\n @Input()\n public override name: string = '';\n\n @Input('fNodeOutputDisabled')\n public override get disabled(): boolean {\n return this.isDisabled;\n }\n\n public override set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_FLOW_CONNECTOR_PARENT) @Optional() @SkipSelf() private _parentFlow?: IFlowConnectorParent,\n ) {\n super();\n this._parentFlow?.addConnector(this);\n }\n\n public ngOnDestroy(): void {\n this._parentFlow?.removeConnector(this);\n }\n}\n","import { EventEmitter, InjectionToken, QueryList } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IHasHostElement, IPoint, PointExtensions } from '@foblex/core';\nimport { IHasStateChanges } from '../../i-has-state-changes';\nimport { F_SELECTED_CLASS, ISelectable } from '../../i-selectable';\nimport { FDragHandleDirective } from './f-drag-handle';\nimport { FForeignObjectBase } from './f-foreign-object';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\n\nexport const F_NODE_COMPONENT = new InjectionToken<FNodeBase>('F_NODE_COMPONENT');\n\nexport abstract class FNodeBase implements IHasStateChanges, ISelectable, IHasHostElement {\n\n public abstract id: any;\n\n public abstract handles: QueryList<FDragHandleDirective>;\n\n public abstract fForeignObject: FForeignObjectBase;\n\n public abstract hostElement: SVGGElement;\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public abstract positionChange: EventEmitter<IPoint>;\n\n public abstract position: IPoint;\n\n protected _position: IPoint = PointExtensions.initialize();\n\n public abstract refresh(): void;\n\n public isContains(element: HTMLElement | SVGElement): boolean {\n return this.hostElement.contains(element);\n }\n\n public redraw(): void {\n this.hostElement.setAttribute('transform', 'translate(' + this.position.x + ',' + this.position.y + ')');\n }\n\n public deselect(): void {\n this.hostElement.classList.remove(F_SELECTED_CLASS);\n }\n\n public select(): void {\n this.hostElement.classList.add(F_SELECTED_CLASS);\n }\n\n public isSelected(): boolean {\n return this.hostElement.classList.contains(F_SELECTED_CLASS);\n }\n\n public updatePosition(position: IPoint): void {\n this._position = position;\n }\n\n public completeDrag(): void {\n this.positionChange.emit(this.position)\n }\n}\n","import {\n Directive, ElementRef, Inject, InjectionToken, Input, OnDestroy, Optional, SkipSelf\n} from \"@angular/core\";\nimport { Subject } from 'rxjs';\nimport { BooleanExtensions, IHasHostElement } from '@foblex/core';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\nimport { F_NODE_COMPONENT } from '../f-node-base';\n\nexport const F_DRAG_HANDLE: InjectionToken<FDragHandleDirective> = new InjectionToken<FDragHandleDirective>('F_DRAG_HANDLE');\n\n@Directive({\n selector: \"[fDragHandle]\",\n host: {\n class: \"f-drag-handle f-component\",\n '[class.f-drag-handle-disabled]': 'disabled'\n },\n providers: [ { provide: F_DRAG_HANDLE, useExisting: FDragHandleDirective } ],\n})\nexport class FDragHandleDirective implements IHasHostElement, IHasStateChanges, OnDestroy {\n\n public readonly stateChanges: Subject<void> = new Subject<void>();\n\n public _parentNode: {} | undefined;\n\n @Input('fDragHandleDisabled')\n public get disabled(): boolean {\n return this.isDisabled;\n }\n\n public set disabled(isDisabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isDisabled);\n if (value !== this.isDisabled) {\n this.isDisabled = value;\n this.stateChanges.next();\n }\n }\n\n private isDisabled: boolean = false;\n\n public get hostElement(): HTMLElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n @Inject(F_NODE_COMPONENT) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","export function isNodeDragHandle(element: HTMLElement | SVGElement): boolean {\n const dragHandle = getClosestDragHandle(element);\n return !!dragHandle && !isElementOrParentExcluded(element);\n}\n\nfunction isElementOrParentExcluded(element: HTMLElement | SVGElement): boolean {\n const isContains = isElementContainsClass(element);\n const parentElement = (element.parentElement as HTMLElement);\n const dragHandle = getClosestDragHandle(parentElement);\n if (!isContains && !!dragHandle) {\n return isElementOrParentExcluded(parentElement);\n }\n return isContains;\n}\n\nfunction getClosestDragHandle(element: HTMLElement | SVGElement): HTMLElement {\n return element.closest('[fDragHandle]') as HTMLElement;\n}\n\nfunction isElementContainsClass(element: HTMLElement | SVGElement): boolean {\n return element.classList.contains('f-drag-handle-disabled');\n}\n","import {\n AfterViewInit, Directive, InjectionToken, OnDestroy\n} from '@angular/core';\nimport { debounceTime, startWith, Subject, Subscription } from 'rxjs';\nimport { FResizeObserver, IHasHostElement, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\n\nexport const F_FOREIGN_OBJECT_COMPONENT = new InjectionToken<FForeignObjectBase>('F_FOREIGN_OBJECT_COMPONENT');\n\n@Directive()\nexport abstract class FForeignObjectBase implements AfterViewInit, IHasStateChanges, IHasHostElement, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n public _parentNode: {} | undefined;\n\n public abstract hostElement: SVGForeignObjectElement;\n\n public stateChanges: Subject<void> = new Subject<void>();\n\n public abstract transform: ITransformModel;\n\n protected constructor(\n _parentNode?: any,\n ) {\n this._parentNode = _parentNode;\n }\n\n public ngAfterViewInit(): void {\n this.subscriptions$.add(\n this.subscribeOnResizeChanges()\n );\n }\n\n private subscribeOnResizeChanges(): Subscription {\n return new FResizeObserver(this.hostElement.firstChild as HTMLElement).pipe(startWith(null)).subscribe(() => {\n this.redraw();\n this.stateChanges.next();\n });\n }\n\n public redraw(): void {\n const element = this.hostElement.firstChild as HTMLElement;\n console.log(element);\n if (element && !!element.getBoundingClientRect) {\n const rect = RectExtensions.fromElement(element);\n const scale = this.transform.scale;\n this.hostElement.setAttribute(\"width\", `${ rect.width / scale }`);\n this.hostElement.setAttribute(\"height\", `${ rect.height / scale }`);\n }\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n this.subscriptions$.unsubscribe();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component, ElementRef, Inject, Input, Optional, SkipSelf\n} from \"@angular/core\";\nimport {\n FForeignObjectBase, F_FOREIGN_OBJECT_COMPONENT\n} from './f-foreign-object-base';\nimport { FFlowComponent } from '../../f-flow';\nimport { ITransformModel } from '@foblex/core';\nimport { F_NODE_COMPONENT } from '../index';\n\n@Component({\n selector: \"foreignObject[fForeignObject]\",\n exportAs: \"fComponent\",\n templateUrl: \"./f-foreign-object.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: \"f-foreign-object f-component\",\n '[attr.width]': 'defaultWidth',\n '[attr.height]': 'defaultHeight'\n },\n providers: [\n { provide: F_FOREIGN_OBJECT_COMPONENT, useExisting: FForeignObjectComponent }\n ]\n})\nexport class FForeignObjectComponent extends FForeignObjectBase {\n\n @Input('fDefaultWidth')\n public defaultWidth: number = 100;\n\n @Input('fDefaultHeight')\n public defaultHeight: number = 100;\n\n public get hostElement(): SVGForeignObjectElement {\n return this.elementReference.nativeElement;\n }\n\n public get transform(): ITransformModel {\n return this.flow.transform;\n }\n\n constructor(\n private elementReference: ElementRef<SVGForeignObjectElement>,\n private flow: FFlowComponent,\n @Inject(F_NODE_COMPONENT) @Optional() @SkipSelf() _parentNode?: any,\n ) {\n super(_parentNode);\n this.hostElement.style.cssText = 'overflow:visible;';\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content></ng-content>\n</ng-container>\n","import {\n ChangeDetectionStrategy, Component, ContentChild, ContentChildren, ElementRef, EventEmitter,\n Input, OnDestroy, OnInit, Output, QueryList,\n} from \"@angular/core\";\nimport { IHasHostElement, IPoint, PointExtensions, PointInput } from '@foblex/core';\nimport {\n FNodeBase, F_NODE_COMPONENT\n} from './f-node-base';\nimport { F_DRAG_HANDLE, FDragHandleDirective } from './f-drag-handle';\nimport { F_FOREIGN_OBJECT_COMPONENT, FForeignObjectBase } from './f-foreign-object';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fNode]\",\n exportAs: \"fComponent\",\n templateUrl: \"./f-node.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n class: \"f-node f-component\"\n },\n providers: [\n { provide: F_NODE_COMPONENT, useExisting: FNodeComponent }\n ]\n})\nexport class FNodeComponent extends FNodeBase implements OnInit, IHasHostElement, OnDestroy {\n\n @Input()\n public override id: any = `f-node-${ uniqueId++ }`;\n\n @ContentChildren(F_DRAG_HANDLE, { descendants: true })\n public override handles!: QueryList<FDragHandleDirective>;\n\n @ContentChild(F_FOREIGN_OBJECT_COMPONENT, { static: true })\n public override fForeignObject!: FForeignObjectBase;\n\n @Input('fNodePosition')\n public override set position(value: PointInput) {\n this._position = PointExtensions.castToPoint(value);\n this.refresh();\n }\n\n public override get position(): IPoint {\n return this._position;\n }\n\n @Output('fNodePositionChange')\n public override positionChange: EventEmitter<IPoint> = new EventEmitter<IPoint>();\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n super.redraw();\n }\n\n public refresh(): void {\n this.stateChanges.next();\n }\n\n public ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content></ng-content>\n</ng-container>\n","export function isNode(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fNode]');\n}\n\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken, QueryList } from '@angular/core';\nimport { FConnectionBase } from '../../../components/f-connection/common/f-connection-base';\nimport { FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../../../components';\n\nexport const F_CONNECTIONS_CONTAINER: InjectionToken<FConnectionsContainerBase> = new InjectionToken<FConnectionsContainerBase>('F_CONNECTIONS_CONTAINER');\n\n@Directive()\nexport abstract class FConnectionsContainerBase implements IHasHostElement {\n\n public abstract hostElement: SVGGElement;\n\n public abstract fConnections: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n public abstract fTempConnection: FConnectionBase<FNodeOutputBase | FNodeOutletBase>;\n\n public findConnectionWithElement(element: HTMLElement | SVGElement): FConnectionBase<FNodeOutputBase> | undefined {\n return this.fConnections.toArray().find((x) => {\n return x.isContains(element);\n });\n }\n\n public findOutgoingConnections(outputs: FNodeOutputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return findOutgoingConnections(this.fConnections.toArray(), outputs);\n }\n\n public findIncomingConnections(inputs: FNodeInputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return findIncomingConnections(this.fConnections.toArray(), inputs);\n }\n}\n\nexport function findIncomingConnections(allConnections: FConnectionBase<FNodeOutputBase>[], inputs: FNodeInputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return allConnections.filter((x) => {\n return inputs.includes(x.fromTo!.input);\n })!;\n}\n\nexport function findOutgoingConnections(allConnections: FConnectionBase<FNodeOutputBase>[], outputs: FNodeOutputBase[]): FConnectionBase<FNodeOutputBase>[] {\n return allConnections.filter((x) => {\n return outputs.includes(x.fromTo!.output);\n })!;\n}\n","import { Component, ContentChildren, ElementRef, QueryList, ViewChild } from \"@angular/core\";\nimport { F_CONNECTIONS_CONTAINER, FConnectionsContainerBase } from './f-connections-container-base';\nimport { FConnectionBase } from '../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../components';\nimport { F_TEMP_CONNECTION_COMPONENT } from '../../../components';\nimport { F_CONNECTION_COMPONENT } from '../../../tokens';\n\n@Component({\n selector: \"g[fConnectionsContainer]\",\n templateUrl: './f-connections-container.component.html',\n exportAs: 'fComponent',\n host: {\n 'class': 'f-connections-container'\n },\n providers: [ { provide: F_CONNECTIONS_CONTAINER, useExisting: FConnectionsContainerComponent } ],\n})\nexport class FConnectionsContainerComponent extends FConnectionsContainerBase {\n\n @ContentChildren(F_CONNECTION_COMPONENT, { descendants: true })\n public override fConnections!: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n @ViewChild(F_TEMP_CONNECTION_COMPONENT, { static: true })\n public override fTempConnection!: FConnectionBase<FNodeOutputBase | FNodeOutletBase>;\n\n public override get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super();\n }\n}\n\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content select=\"[fConnection]\"></ng-content>\n <svg:g fTempConnection></svg:g>\n</ng-container>\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanChangeZoom } from './i-can-change-zoom';\nimport { IPoint, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanChangeZoomConstructor = Constructor<ICanChangeZoom> & AbstractConstructor<ICanChangeZoom>;\n\nexport function mixinChangeZoom<T extends AbstractConstructor<ITransformable>>(base: T): CanChangeZoomConstructor & T;\nexport function mixinChangeZoom<T extends Constructor<ITransformable>>(base: T): CanChangeZoomConstructor & T {\n return class extends base {\n\n public setZoom(scaleValue: number, toPosition: IPoint): void {\n if (scaleValue !== this.transform.scale) {\n\n const summaryPosition = PointExtensions.sum(this.transform.scaledPosition, this.transform.position);\n\n const newX = toPosition.x - (toPosition.x - summaryPosition.x) * scaleValue / this.transform.scale;\n const newY = toPosition.y - (toPosition.y - summaryPosition.y) * scaleValue / this.transform.scale;\n\n this.transform.scale = scaleValue;\n this.transform.scaledPosition = PointExtensions.sub(PointExtensions.initialize(newX, newY), this.transform.position);\n }\n }\n\n public setScalePosition(value: IPoint): void {\n this.transform.scaledPosition = value;\n }\n\n public resetZoom(): void {\n this.transform.scale = 1;\n this.transform.scaledPosition = PointExtensions.initialize();\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanFitToParent } from './i-can-fit-to-parent';\nimport { IPoint, IRect, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanFitToParentConstructor = Constructor<ICanFitToParent> & AbstractConstructor<ICanFitToParent>;\n\nexport function mixinFitToParent<T extends AbstractConstructor<ITransformable>>(base: T): CanFitToParentConstructor & T;\nexport function mixinFitToParent<T extends Constructor<ITransformable>>(base: T): CanFitToParentConstructor & T {\n return class extends base {\n\n public fitToParent(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n if (\n (itemsContainerWidth > parentRect.width || itemsContainerHeight > parentRect.height) ||\n itemsContainerWidth < parentRect.width && itemsContainerHeight < parentRect.height\n ) {\n this.transform.scale = Math.min(parentRect.width / itemsContainerWidth, parentRect.height / itemsContainerHeight);\n }\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from '../constructor';\nimport { ICanOneToOneCentering } from './i-can-one-to-one-centering';\nimport { IPoint, IRect, ITransformable, PointExtensions } from '@foblex/core';\n\ntype CanOneToOneCenteringConstructor = Constructor<ICanOneToOneCentering> & AbstractConstructor<ICanOneToOneCentering>;\n\nexport function mixinOneToOneCentering<T extends AbstractConstructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T;\nexport function mixinOneToOneCentering<T extends Constructor<ITransformable>>(base: T): CanOneToOneCenteringConstructor & T {\n return class extends base {\n\n public oneToOneCentering(rect: IRect, parentRect: IRect, points: IPoint[]): void {\n this.transform.scaledPosition = PointExtensions.initialize();\n this.transform.position = this.getZeroPositionWithoutScale(points);\n const itemsContainerWidth = rect.width / this.transform.scale;\n const itemsContainerHeight = rect.height / this.transform.scale;\n this.transform.scale = 1;\n\n const newX = (parentRect.width - itemsContainerWidth * this.transform.scale) / 2 - this.transform.position.x * this.transform.scale;\n const newY = (parentRect.height - itemsContainerHeight * this.transform.scale) / 2 - this.transform.position.y * this.transform.scale;\n\n this.transform.position = PointExtensions.initialize(newX, newY);\n }\n\n private getZeroPositionWithoutScale(points: IPoint[]): IPoint {\n const xPoint = points.length ? Math.min(...points.map((point) => point.x)) : 0;\n const yPoint = points.length ? Math.min(...points.map((point) => point.y)) : 0;\n return PointExtensions.initialize(xPoint, yPoint)\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { AbstractConstructor, Constructor } from './constructor';\nimport { IPoint, ITransformable, PointExtensions } from '@foblex/core';\n\nexport interface ICanChangePosition {\n\n setPosition(position: IPoint): void;\n\n getPosition(): IPoint;\n}\n\ntype CanChangePositionConstructor = Constructor<ICanChangePosition> & AbstractConstructor<ICanChangePosition>;\n\nexport function mixinChangePosition<T extends AbstractConstructor<ITransformable>>(base: T): CanChangePositionConstructor & T;\nexport function mixinChangePosition<T extends Constructor<ITransformable>>(base: T): CanChangePositionConstructor & T {\n return class extends base {\n\n public getPosition(): IPoint {\n return this.transform.position;\n }\n\n public setPosition(position: IPoint): void {\n this.transform.position = PointExtensions.copy(position);\n }\n\n constructor(...args: any[]) {\n super(...args);\n }\n };\n}\n","import { IPoint } from '@foblex/core';\n\nexport class CanvasChangeEvent {\n constructor(\n public readonly position: IPoint,\n public readonly scale: number,\n ) {\n }\n}\n","import {\n IHasHostElement,\n ITransformModel, PointExtensions,\n TransformModelExtensions\n} from '@foblex/core';\nimport { Directive, ElementRef, EventEmitter, InjectionToken } from '@angular/core';\nimport {\n ICanChangePosition, ICanChangeZoom, ICanFitToParent, ICanOneToOneCentering,\n mixinChangePosition,\n mixinChangeZoom,\n mixinFitToParent,\n mixinOneToOneCentering\n} from '../../../common-behaviours';\nimport { CanvasChangeEvent } from './canvas-change.event';\n\nexport const F_ITEMS_CONTAINER = new InjectionToken<FItemsContainerBase>('F_ITEMS_CONTAINER');\n\nconst MIXIN_BASE = mixinChangePosition(\n mixinFitToParent(\n mixinOneToOneCentering(\n mixinChangeZoom(\n class {\n constructor(\n public transform: ITransformModel\n ) {\n }\n }))));\n\n@Directive()\nexport abstract class FItemsContainerBase\n extends MIXIN_BASE\n implements IHasHostElement, ICanChangePosition, ICanFitToParent, ICanOneToOneCentering, ICanChangeZoom {\n\n public abstract canvasChange: EventEmitter<CanvasChangeEvent>;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n protected constructor(\n private elementReference: ElementRef<SVGGElement>,\n ) {\n super(TransformModelExtensions.default());\n this.parseData();\n }\n\n public parseData(): void {\n const transform = TransformModelExtensions.fromString(this.hostElement.getAttribute(\"transform\"));\n this.transform = transform ? transform : this.transform;\n }\n\n public redraw(): void {\n this.hostElement.setAttribute(\"transform\", TransformModelExtensions.toString(this.transform));\n }\n\n public redrawWithAnimation(): void {\n this.hostElement.setAttribute(\"style\", 'transition: transform 0.15s ease-in-out');\n this.redraw();\n setTimeout(() => {\n this.hostElement.removeAttribute(\"style\");\n }, 150)\n }\n\n public completeDrag(): void {\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n this.canvasChange.emit(\n new CanvasChangeEvent(position, this.transform.scale)\n );\n }\n}\n","import {\n Directive, ElementRef, EventEmitter, Input, Output,\n} from \"@angular/core\";\nimport {\n FItemsContainerBase, F_ITEMS_CONTAINER\n} from './f-items-container-base';\nimport { IPoint, PointExtensions } from '@foblex/core';\nimport { CanvasChangeEvent } from './canvas-change.event';\n\n@Directive({\n selector: \"g[fItemsContainer]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-items-container'\n },\n providers: [ { provide: F_ITEMS_CONTAINER, useExisting: FItemsContainerDirective } ],\n})\nexport class FItemsContainerDirective extends FItemsContainerBase {\n\n @Output()\n public override canvasChange: EventEmitter<CanvasChangeEvent> = new EventEmitter<CanvasChangeEvent>();\n\n @Input()\n public set position(value: IPoint | undefined) {\n if (!value) {\n return;\n }\n const position = PointExtensions.sum(this.transform.position, this.transform.scaledPosition);\n if (!PointExtensions.isEqual(position, value)) {\n this.transform.position = value;\n this.transform.scaledPosition = PointExtensions.initialize();\n this.redraw();\n }\n }\n\n @Input()\n public set scale(value: number | undefined) {\n if (!value) {\n return;\n }\n this.transform.scale = value;\n this.redraw();\n }\n\n constructor(\n elementReference: ElementRef<SVGGElement>\n ) {\n super(elementReference);\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, ElementRef, InjectionToken, NgZone, QueryList } from '@angular/core';\nimport { defer, merge, Observable, startWith, switchMap, take } from 'rxjs';\nimport { FNodeBase } from '../../../components';\nimport { IHasStateChanges } from '../../../i-has-state-changes';\n\nexport const F_NODES_CONTAINER = new InjectionToken<FNodesContainerBase>('F_NODES_CONTAINER');\n\n@Directive()\nexport abstract class FNodesContainerBase implements IHasHostElement, IHasStateChanges {\n\n public abstract hostElement: SVGGElement;\n\n public abstract fNodes: QueryList<FNodeBase>;\n\n public readonly stateChanges: Observable<void> = defer(() => {\n const items = this.fNodes;\n\n if (items) {\n return items.changes.pipe(\n startWith(items),\n switchMap(() => merge(...items.map(x => merge(x.fForeignObject.stateChanges, x.stateChanges)))),\n );\n }\n\n return this.ngZone.onStable.pipe(\n take(1),\n switchMap(() => this.stateChanges),\n );\n }) as Observable<void>;\n\n protected constructor(\n\n private ngZone: NgZone\n ) {\n }\n\n public findNode(element: HTMLElement | SVGElement): FNodeBase | undefined {\n return this.fNodes.find((x) => {\n return x.isContains!(element);\n });\n }\n\n public setNodeToTopLayer(node: FNodeBase): void {\n const elements = Array.from(this.hostElement.children);\n const elementsCount = elements.length;\n const targetIndex: number = elements.findIndex((x) => x === node.hostElement);\n if (targetIndex !== elementsCount - 1) {\n const afterElements = elements.splice(targetIndex + 1);\n afterElements.forEach((x) => {\n this.hostElement.removeChild(x);\n this.hostElement.insertBefore(x, node.hostElement);\n });\n }\n }\n}\n","import {\n Component, ContentChildren, ElementRef, NgZone, QueryList\n} from \"@angular/core\";\nimport { F_NODES_CONTAINER, FNodesContainerBase } from './f-nodes-container-base';\nimport { F_NODE_COMPONENT, FNodeBase } from '../../../components';\n\n@Component({\n selector: \"g[fNodesContainer]\",\n templateUrl: './f-nodes-container.component.html',\n exportAs: 'fComponent',\n host: {\n 'class': 'f-nodes-container'\n },\n providers: [ { provide: F_NODES_CONTAINER, useExisting: FNodesContainerComponent } ],\n})\nexport class FNodesContainerComponent extends FNodesContainerBase {\n\n public override get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n @ContentChildren(F_NODE_COMPONENT, { descendants: true })\n public override fNodes!: QueryList<FNodeBase>;\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n ngZone: NgZone\n ) {\n super(ngZone);\n }\n}\n\n\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <ng-content select=\"[fNode]\"></ng-content>\n</ng-container>\n","export enum EDraggableType {\n\n NODE = 'node',\n\n REASSIGN_CONNECTION = 'reassign-connection',\n\n TEMP_CONNECTION = 'temp-connection',\n\n CONNECTION = 'connection',\n\n CANVAS = 'canvas',\n\n PALETTE_ITEM = 'palette-item',\n\n DEFAULT = 'default',\n\n SELECTION = 'selection'\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { FItemsContainerBase } from '../../../f-containers/f-items-container';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { IDraggableItem } from '../../i-draggable-item';\n\nexport class CanvasOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CANVAS;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fItemsContainer: FItemsContainerBase\n ) {\n this.onPointerDownPosition = this.fItemsContainer.transform.position;\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n this.fItemsContainer.setPosition(Point.fromPoint(this.onPointerDownPosition).add(difference));\n this.fItemsContainer.redraw();\n }\n\n public complete(): void {\n this.fItemsContainer.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { CanvasOnPointerDownRequest } from './canvas-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FItemsContainerBase } from '../../../f-containers';\nimport { FBackgroundBase } from '../../../../internal';\nimport { CanvasOnPointerMove } from '../canvas-on-pointer-move';\n\nexport class CanvasOnPointerDownHandler\n implements IHandler<CanvasOnPointerDownRequest, IDragHandler | undefined> {\n\n constructor(\n private fBackground: FBackgroundBase,\n private fItemsContainer: FItemsContainerBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: CanvasOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n if (this.fBackground.isBackgroundElement(payload.event.targetElement) && payload.event.isMouseLeftButton()) {\n result = {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: [\n new CanvasOnPointerMove(this.fItemsContainer)\n ]\n };\n }\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nexport class CanvasOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\n\nexport class CreateConnectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n ) {\n }\n}\n","import {\n IPoint,\n IRect,\n ITransformModel,\n Point,\n RectExtensions,\n} from '@foblex/core';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutletBase, FNodeOutputBase } from '../../../../components';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\n\nexport class CreateConnectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.TEMP_CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase | FNodeOutletBase>,\n private mouseDownPoint: IPoint,\n transform: ITransformModel,\n hostElement: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(transform, hostElement);\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.mouseDownPoint.x, this.mouseDownPoint.y, 0, 0);\n }\n\n public initialize(): void {\n this.connection.initializeDrag();\n this.move(new Point(0, 0));\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n const vector = getConnectionIntersect(\n this.onPointerDownFromConnectorRect,\n toPoint\n );\n\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n this.connection.completeDrag();\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindFirstCanBeConnectedOutputByOutletRequest } from './find-first-can-be-connected-output-by-outlet.request';\nimport { FFlowBase, FNodeOutputBase } from '../../../../../components';\n\nexport class FindFirstCanBeConnectedOutputByOutletHandler\n implements IHandler<FindFirstCanBeConnectedOutputByOutletRequest, FNodeOutputBase | undefined> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FindFirstCanBeConnectedOutputByOutletRequest): FNodeOutputBase | undefined {\n let result: FNodeOutputBase | undefined;\n\n const node = this.fFlow.fNodesContainer.fNodes.find((x) => x.isContains(payload.outlet.hostElement));\n if (!node) {\n throw new Error('Node not found');\n }\n\n const outputsOfNode = this.fFlow.outputs.filter((x) => {\n return node.isContains(x.hostElement) && x.canBeConnected;\n });\n\n if (outputsOfNode.length > 0) {\n result = outputsOfNode[ 0 ];\n }\n\n return result;\n }\n}\n","import { FNodeOutletBase } from '../../../../../components';\n\nexport class FindFirstCanBeConnectedOutputByOutletRequest {\n\n constructor(\n public outlet: FNodeOutletBase\n ) {\n }\n}\n","import { IHandler, IPoint, Point } from '@foblex/core';\nimport { CreateConnectionOnPointerDownRequest } from './create-connection-on-pointer-down.request';\nimport { IDragHandler } from '../../../i-drag-handler';\nimport {\n FFlowBase, FNodeBase, FNodeOutletBase, FNodeOutputBase, isNodeOutlet, isNodeOutput, TempConnectionInputOutputModel\n} from '../../../../../components';\nimport { FNodesContainerBase } from '../../../../f-containers/f-nodes-container';\nimport { CreateConnectionOnPointerMove } from '../create-connection.on-pointer-move';\nimport {\n FConnectionsContainerBase\n} from '../../../../f-containers/f-connections-container/f-connections-container-base';\nimport {\n FindFirstCanBeConnectedOutputByOutletHandler,\n FindFirstCanBeConnectedOutputByOutletRequest\n} from '../find-first-can-be-connected-output-by-outlet';\n\nexport class CreateConnectionOnPointerDown\n implements IHandler<CreateConnectionOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n private get fNodesContainer(): FNodesContainerBase {\n return this.fFlow.fNodesContainer;\n }\n\n constructor(\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: CreateConnectionOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const node = this.fNodesContainer.findNode(payload.event.targetElement);\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n if (node) {\n\n if (isNodeOutlet(payload.event.targetElement)) {\n const outlet = this.fFlow.outlets.find((x) => {\n return x.hostElement.contains(payload.event.targetElement);\n });\n if (!outlet) {\n throw new Error('Outlet not found');\n }\n const nodeOutputs = this.fFlow.outputs.filter((x) => node.isContains(x.hostElement));\n outlet.setOutputs(nodeOutputs);\n\n if (outlet.canBeConnected) {\n const outletCenter = outlet.getElementRectInCanvas(payload.transform, this.hostElement).gravityCenter;\n if (outlet.isConnectionFromOutlet) {\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, outlet, outletCenter);\n } else {\n const output = new FindFirstCanBeConnectedOutputByOutletHandler(this.fFlow).handle(\n new FindFirstCanBeConnectedOutputByOutletRequest(outlet)\n );\n if (!output) {\n throw new Error('Output not found');\n }\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, output, outletCenter);\n }\n }\n } else if (this.isNodeOutput(payload.event.targetElement, node)) {\n const output = this.fFlow.outputs.find((x) => {\n return x.hostElement.contains(payload.event.targetElement);\n });\n if (!output) {\n throw new Error('Output not found');\n }\n if (output.canBeConnected) {\n const outputCenter = output.getElementRectInCanvas(payload.transform, this.hostElement).gravityCenter;\n result = this.createConnectionHandler(payload, pointerPositionInCanvas, output, outputCenter);\n }\n }\n }\n\n return result;\n }\n\n private createConnectionHandler(\n payload: CreateConnectionOnPointerDownRequest,\n pointerPositionInCanvas: Point,\n output: FNodeOutputBase | FNodeOutletBase,\n outputCenter: IPoint\n ): IDragHandler {\n\n // @ts-ignore\n this.fConnectionsContainer.fTempConnection.fromTo = new TempConnectionInputOutputModel(output);\n\n return {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: [\n new CreateConnectionOnPointerMove(\n this.fConnectionsContainer.fTempConnection, outputCenter, payload.transform, this.hostElement\n )\n ]\n };\n }\n\n private isNodeOutput(targetElement: HTMLElement, node: FNodeBase): boolean {\n const outlets = this.fFlow.outlets.filter((x) => node.isContains(x.hostElement));\n return isNodeOutput(targetElement) && !outlets.length;\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeBase, FNodeInputBase } from '../../../../../components';\nimport {\n FirstNotConnectedInputOfNodeUnderPointerRequest\n} from './first-not-connected-input-of-node-under-pointer.request';\n\nexport class FirstNotConnectedInputOfNodeUnderPointerHandler\n implements IHandler<FirstNotConnectedInputOfNodeUnderPointerRequest, FNodeInputBase | undefined> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FirstNotConnectedInputOfNodeUnderPointerRequest): FNodeInputBase | undefined {\n const position = payload.event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n\n const nodes = elementsFromPoint.map((element) => {\n return this.fFlow.fNodesContainer.fNodes.find((x) => x.isContains(element))\n }).filter((x) => !!x) as FNodeBase[];\n\n const inputs = nodes.map((x) => {\n return this.fFlow.inputs.filter((i) => x.isContains(i.hostElement)).find((i) => {\n return !i.isConnected && i.canBeConnected;\n });\n });\n const result = inputs.find((x) => !!x);\n\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class FirstNotConnectedInputOfNodeUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeInputBase, isNodeInput } from '../../../../../components';\nimport {\n InputsUnderPointerRequest\n} from './inputs-under-pointer.request';\n\nexport class InputsUnderPointerHandler\n implements IHandler<InputsUnderPointerRequest, FNodeInputBase[]> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: InputsUnderPointerRequest): FNodeInputBase[] {\n const position = payload.event.getPosition();\n const elementsFromPoint = document.elementsFromPoint(position.x, position.y) as HTMLElement[];\n return elementsFromPoint.filter((x) => isNodeInput(x as HTMLElement)).map((element) => {\n return this.fFlow.inputs.find((x) => x.isContains(element))!\n }).filter((x) => !!x);\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class InputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { ReassignConnectionOnPointerMove } from '../reassign-connection';\nimport { CreateConnectionOnPointerMove } from '../create-connection';\n\nexport class FindInputsUnderPointerRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: CreateConnectionOnPointerMove | ReassignConnectionOnPointerMove\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FindInputsUnderPointerRequest } from './find-inputs-under-pointer.request';\nimport { FFlowBase, FNodeInputBase } from '../../../../components';\nimport { InputsUnderPointerHandler, InputsUnderPointerRequest } from './inputs-under-pointer';\nimport {\n FirstNotConnectedInputOfNodeUnderPointerHandler,\n FirstNotConnectedInputOfNodeUnderPointerRequest\n} from './first-not-connected-input-of-node-under-pointer';\n\nexport class FindInputsUnderPointerHandler\n implements IHandler<FindInputsUnderPointerRequest, FNodeInputBase[]> {\n\n constructor(\n private fFlow: FFlowBase\n ) {\n }\n\n public handle(payload: FindInputsUnderPointerRequest): FNodeInputBase[] {\n const inputsUnderPointer = this.getInputsUnderPointer(payload);\n\n return inputsUnderPointer.filter((x) => {\n const targetNode = this.fFlow.fNodesContainer.fNodes.find((y) => y.isContains(x.hostElement));\n const sourceNode = this.fFlow.fNodesContainer.fNodes.find((y) => y.isContains(payload.dragHandler.connection.fromTo!.output.hostElement));\n return sourceNode?.hostElement !== targetNode?.hostElement;\n });\n }\n\n private getInputsUnderPointer(payload: FindInputsUnderPointerRequest): FNodeInputBase[] {\n let inputs = new InputsUnderPointerHandler(this.fFlow).handle(\n new InputsUnderPointerRequest(payload.event)\n );\n\n const input = new FirstNotConnectedInputOfNodeUnderPointerHandler(this.fFlow).handle(\n new FirstNotConnectedInputOfNodeUnderPointerRequest(payload.event)\n );\n\n if (input) {\n inputs.push(input);\n }\n inputs = inputs.filter((x) => x.canBeConnected);\n return inputs;\n }\n}\n","export class CreateConnectionEvent<T = any> {\n\n constructor(\n public outputId: T,\n public inputId: T\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase, FNodeOutletBase, FNodeOutputBase, isNodeOutlet } from '../../../../../components';\nimport { CreateConnectionOnPointerUpRequest } from './create-connection-on-pointer-up.request';\nimport { EDraggableType } from '../../../e-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../../find-inputs-under-pointer';\nimport { CreateConnectionOnPointerMove } from '../create-connection.on-pointer-move';\nimport { EventEmitter } from '@angular/core';\nimport { CreateConnectionEvent } from '../create-connection.event';\nimport {\n FindFirstCanBeConnectedOutputByOutletHandler,\n FindFirstCanBeConnectedOutputByOutletRequest\n} from '../find-first-can-be-connected-output-by-outlet';\n\nexport class CreateConnectionOnPointerUp\n implements IHandler<CreateConnectionOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onCreateConnection: EventEmitter<CreateConnectionEvent>\n ) {\n }\n\n public handle(payload: CreateConnectionOnPointerUpRequest): void {\n const isCreateConnection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.TEMP_CONNECTION);\n if (isCreateConnection) {\n const handler = payload.dragHandler.draggableItems[ 0 ] as CreateConnectionOnPointerMove;\n\n const inputsUnderPointer = new FindInputsUnderPointerHandler(this.fFlow).handle(\n new FindInputsUnderPointerRequest(payload.event, handler)\n );\n\n if (inputsUnderPointer.length > 0) {\n let output: FNodeOutputBase | FNodeOutletBase | undefined = handler.connection.fromTo!.output;\n\n const isOutlet = isNodeOutlet(output.hostElement);\n if (isOutlet) {\n\n output = new FindFirstCanBeConnectedOutputByOutletHandler(this.fFlow).handle(\n new FindFirstCanBeConnectedOutputByOutletRequest(output as FNodeOutletBase)\n );\n if (!output) {\n throw new Error('Output not found');\n }\n }\n this.onCreateConnection.emit(new CreateConnectionEvent(output.id, inputsUnderPointer[ 0 ]?.id));\n }\n handler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\n\nexport class CreateConnectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { FConnectionBase } from '../../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../../components';\nimport { getConnectionIntersect } from '../../../../../components/f-connection/common/get-connection-intersect';\nimport { IDraggableItem } from '../../../i-draggable-item';\nimport { EDraggableType } from '../../../e-draggable-type';\n\nexport class ReassignConnectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.REASSIGN_CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase>,\n private canvasTransform: ITransformModel,\n private canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = RectExtensions.initialize(this.connection.vector.point2.x, this.connection.vector.point2.y, 0, 0);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const toRect = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n\n const vector = getConnectionIntersect(this.onPointerDownFromConnectorRect, toRect);\n\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n const fromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(this.canvasTransform, this.canvasHost);\n const toConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(this.canvasTransform, this.canvasHost);\n const vector = getConnectionIntersect(fromConnectorRect, toConnectorRect);\n\n this.connection.setVector(vector);\n this.connection.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\nimport { F_CONNECTION_DRAG_HANDLE_CLASS } from '../../../../../components/f-connection/common/f-drag-handle';\nimport { FConnectionBase } from '../../../../../components/f-connection/common/f-connection-base';\nimport { FFlowBase, FNodeOutputBase } from '../../../../../components';\nimport { ReassignConnectionOnPointerMove } from '../reassign-on-pointer-move';\nimport { ReassignConnectionOnPointerDownRequest } from './reassign-connection-on-pointer-down.request';\nimport { FConnectionsContainerBase } from '../../../../f-containers/f-connections-container/f-connections-container-base';\n\nexport class ReassignConnectionOnPointerDown\n implements IHandler<ReassignConnectionOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n constructor(\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: ReassignConnectionOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n const position = payload.event.getPosition();\n const allElements = document.elementsFromPoint(position.x, position.y);\n\n const dragHandlesOfConnections = allElements.filter((x) => {\n return !!this.fConnectionsContainer.findConnectionWithElement(x as HTMLElement) && x.classList.contains(F_CONNECTION_DRAG_HANDLE_CLASS);\n });\n\n let connectionToReassign: FConnectionBase<FNodeOutputBase> | undefined;\n if (dragHandlesOfConnections.length) {\n connectionToReassign = this.fConnectionsContainer.findConnectionWithElement(dragHandlesOfConnections[ 0 ] as HTMLElement);\n }\n\n if (connectionToReassign && payload.event.isMouseLeftButton()) {\n result = {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: [\n new ReassignConnectionOnPointerMove(\n connectionToReassign, payload.transform, this.hostElement\n )\n ]\n }\n }\n\n return result;\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\n\nexport class ReassignConnectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel\n ) {\n }\n}\n","export class ReassignConnectionEvent<T = any> {\n\n constructor(\n public connectionId: T,\n public outputId: T,\n public oldInputId: T,\n public newInputId: T\n ) {\n }\n}\n","import { IHandler } from '@foblex/core';\nimport { FFlowBase } from '../../../../../components';\nimport { ReassignConnectionOnPointerMove } from '../reassign-on-pointer-move/reassign-connection.on-pointer-move';\nimport { ReassignConnectionOnPointerUpRequest } from './reassign-connection-on-pointer-up.request';\nimport { EDraggableType } from '../../../e-draggable-type';\nimport { FindInputsUnderPointerHandler, FindInputsUnderPointerRequest } from '../../find-inputs-under-pointer';\nimport { EventEmitter } from '@angular/core';\nimport { ReassignConnectionEvent } from '../reassign-connection.event';\n\nexport class ReassignConnectionOnPointerUp\n implements IHandler<ReassignConnectionOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onReassignConnection: EventEmitter<ReassignConnectionEvent>\n ) {\n }\n\n public handle(payload: ReassignConnectionOnPointerUpRequest): void {\n console.log('ReassignConnectionOnPointerUp', payload);\n const isReassignConnection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.REASSIGN_CONNECTION);\n if (isReassignConnection) {\n console.log('ReassignConnectionOnPointerUp - isReassignConnection');\n const handler = payload.dragHandler.draggableItems[ 0 ] as ReassignConnectionOnPointerMove;\n\n const inputsUnderPointer = new FindInputsUnderPointerHandler(this.fFlow).handle(\n new FindInputsUnderPointerRequest(payload.event, handler)\n );\n console.log(inputsUnderPointer);\n\n if (inputsUnderPointer.length > 0) {\n if (handler.connection.fromTo?.input?.id !== inputsUnderPointer[ 0 ]?.id) {\n\n this.onReassignConnection.emit(\n new ReassignConnectionEvent(\n handler.connection.id, handler.connection.fromTo?.output.id,\n handler.connection.fromTo?.input?.id,\n inputsUnderPointer[ 0 ]?.id\n )\n );\n }\n }\n handler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../../i-drag-handler';\n\nexport class ReassignConnectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { IDragHandler } from '../i-drag-handler';\n\nexport class DefaultDragHandler\n implements IHandler<void, IDragHandler> {\n\n public handle(): IDragHandler {\n\n return {\n onPointerDownScale: 1,\n onPointerDownPosition: new Point(0, 0),\n draggableItems: []\n };\n }\n}\n","import { IPointerEvent } from '@foblex/core';\n\nexport class ExternalItemOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent\n ) {\n }\n}\n","import { IHasHostElement } from '@foblex/core';\nimport { Directive, InjectionToken } from '@angular/core';\n\nexport const F_EXTERNAL_ITEM = new InjectionToken<FExternalItemBase>('F_EXTERNAL_ITEM');\n\n@Directive()\nexport abstract class FExternalItemBase implements IHasHostElement {\n\n public abstract id: any;\n\n public abstract hostElement: HTMLElement | SVGElement;\n\n public abstract data: any;\n}\n","export function isExternalItem(element: HTMLElement | SVGElement): boolean {\n return !!element.closest('[fExternalItem]');\n}\n\nexport function getExternalItem(element: HTMLElement | SVGElement): HTMLElement | SVGElement {\n return element.closest('[fExternalItem]') as HTMLElement | SVGElement;\n}\n","import { Injectable } from '@angular/core';\nimport { FExternalItemBase } from './f-external-item-base';\n\n@Injectable()\nexport class FExternalItemService {\n\n private items: FExternalItemBase[] = [];\n\n public registerItem(item: FExternalItemBase): void {\n this.items.push(item);\n }\n\n public getItem(element: HTMLElement | SVGElement): FExternalItemBase | undefined {\n return this.items.find(item => item.hostElement === element);\n }\n\n public removeItem(item: FExternalItemBase): void {\n const index = this.items.indexOf(item);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n }\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FExternalItemBase, F_EXTERNAL_ITEM } from './f-external-item-base';\nimport { FExternalItemService } from './f-external-item.service';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"[fExternalItem]\",\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-external-item\",\n },\n providers: [\n { provide: F_EXTERNAL_ITEM, useExisting: FExternalItemDirective }\n ],\n})\nexport class FExternalItemDirective extends FExternalItemBase implements OnInit, OnDestroy {\n\n @Input()\n public override id: string = `f-external-item-${ uniqueId++ }`;\n\n public override get hostElement(): HTMLElement | SVGElement {\n return this.elementReference.nativeElement;\n }\n\n @Input()\n public override data: any;\n\n constructor(\n private elementReference: ElementRef<HTMLElement>,\n private fExternalItemService: FExternalItemService,\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.fExternalItemService.registerItem(this);\n }\n\n public ngOnDestroy(): void {\n this.fExternalItemService.removeItem(this);\n }\n}\n","import { DomElementExtensions, IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FExternalItemBase } from '../../../f-external-item';\nimport { IDraggableItem } from '../../i-draggable-item';\n\nexport class ExternalItemOnPointerMoveHandler implements IDraggableItem {\n\n public readonly type = EDraggableType.PALETTE_ITEM;\n\n public placeholder: HTMLElement | SVGElement | undefined;\n\n private onPointerDownRect: IRect = RectExtensions.initialize();\n\n private difference: IPoint = PointExtensions.initialize();\n\n constructor(\n public externalItem: FExternalItemBase\n ) {\n }\n\n private getStyle(position: IPoint): string {\n return `position: absolute; left: 0; top: 0; transform: translate(${ position.x }px, ${ position.y }px)`;\n }\n\n public initialize(): void {\n this.onPointerDownRect = RectExtensions.fromElement(this.externalItem.hostElement);\n this.placeholder = DomElementExtensions.deepCloneNode(this.externalItem.hostElement);\n document.body.appendChild(this.placeholder);\n }\n\n public move(difference: IPoint): void {\n this.difference = difference;\n const position = Point.fromPoint(this.onPointerDownRect).add(this.difference);\n this.placeholder!.setAttribute('style', this.getStyle(position));\n }\n\n public getPlaceholderRect(): IRect {\n return RectExtensions.fromElement(this.placeholder!);\n }\n\n public complete(): void {\n document.body.removeChild(this.placeholder!);\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { ExternalItemOnPointerDownRequest } from './external-item-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FExternalItemService, getExternalItem, isExternalItem } from '../../../f-external-item';\nimport {\n ExternalItemOnPointerMoveHandler\n} from '../external-item-on-pointer-move';\n\nexport class ExternalItemOnPointerDownHandler\n implements IHandler<ExternalItemOnPointerDownRequest, IDragHandler | undefined> {\n\n constructor(\n private fExternalItemService: FExternalItemService,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: ExternalItemOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n if (isExternalItem(payload.event.targetElement)) {\n const item = this.fExternalItemService.getItem(getExternalItem(payload.event.targetElement));\n if (!item) {\n throw new Error('External item not found');\n }\n\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n result = {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: [\n new ExternalItemOnPointerMoveHandler(item)\n ]\n };\n }\n return result;\n }\n}\n","import { IRect } from '@foblex/core';\n\nexport class CreateNodeEvent<TData = any> {\n\n constructor(\n public rect: IRect,\n public data: TData,\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { ExternalItemOnPointerUpRequest } from './external-item-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { ExternalItemOnPointerMoveHandler } from '../external-item-on-pointer-move';\nimport { FFlowBase, getElementRectInCanvas } from '../../../../components';\nimport { EventEmitter } from '@angular/core';\nimport { CreateNodeEvent } from '../create-node.event';\n\nexport class ExternalItemOnPointerUpHandler\n implements IHandler<ExternalItemOnPointerUpRequest, void> {\n\n constructor(\n private fFlow: FFlowBase,\n private onCreateNode: EventEmitter<CreateNodeEvent>\n ) {\n }\n\n public handle(payload: ExternalItemOnPointerUpRequest): void {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.fFlow.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isDragPaletteItem = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.PALETTE_ITEM);\n\n if (isDragPaletteItem) {\n const dragHandler = payload.dragHandler.draggableItems[ 0 ] as ExternalItemOnPointerMoveHandler\n dragHandler.move(difference);\n\n const isPointerInCanvasRect = document.elementsFromPoint(payload.event.getPosition().x, payload.event.getPosition().y).some((x) => x === this.fFlow.hostElement);\n if (isPointerInCanvasRect) {\n const rectInCanvas = getElementRectInCanvas(dragHandler.placeholder!, this.fFlow.transform, this.fFlow.hostElement);\n this.onCreateNode.emit(\n new CreateNodeEvent(rectInCanvas, dragHandler.externalItem.data)\n );\n }\n dragHandler.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\n\nexport class ExternalItemOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class NodeOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n public selectedItems: ISelectable[],\n public isMoveCurrentNode: boolean = false\n ) {\n }\n}\n","import { IPoint, ITransformModel, IVector, Point, VectorExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionDragHandler implements IDraggableItem {\n\n public readonly type = EDraggableType.CONNECTION;\n\n private onPointerDownVector: IVector = VectorExtensions.initialize();\n\n constructor(\n public connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownVector = getConnectionIntersect(\n this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost),\n this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost)\n );\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const fromPoint = Point.fromPoint(this.onPointerDownVector.point1).add(difference);\n const toPoint = Point.fromPoint(this.onPointerDownVector.point2).add(difference);\n\n this.connection.setVector(VectorExtensions.initialize(fromPoint, toPoint));\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionSourceDragHandler implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n private connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const fromPoint = RectExtensions.addPoint(this.onPointerDownFromConnectorRect, difference);\n const vector = getConnectionIntersect(fromPoint, this.onPointerDownToConnectorRect);\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, IRect, ITransformModel, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectionBase } from '../../../../components/f-connection/common/f-connection-base';\nimport { FNodeOutputBase } from '../../../../components';\nimport { getConnectionIntersect } from '../../../../components/f-connection/common/get-connection-intersect';\n\nexport class FConnectionTargetDragHandler implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.CONNECTION;\n\n private readonly onPointerDownFromConnectorRect: IRect = RectExtensions.initialize();\n private readonly onPointerDownToConnectorRect: IRect = RectExtensions.initialize();\n\n constructor(\n private connection: FConnectionBase<FNodeOutputBase>,\n canvasTransform: ITransformModel,\n canvasHost: SVGSVGElement\n ) {\n this.onPointerDownFromConnectorRect = this.connection.fromTo!.output.getElementRectInCanvas(canvasTransform, canvasHost);\n this.onPointerDownToConnectorRect = this.connection.fromTo!.input!.getElementRectInCanvas(canvasTransform, canvasHost);\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const toPoint = RectExtensions.addPoint(this.onPointerDownToConnectorRect, difference);\n const vector = getConnectionIntersect(this.onPointerDownFromConnectorRect, toPoint);\n this.connection.setVector(vector);\n this.connection.redraw();\n }\n\n public complete(): void {\n }\n}\n","import { IPoint, Point, PointExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FNodeBase } from '../../../../components';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.NODE;\n\n private onPointerDownPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n public fNode: FNodeBase\n ) {\n this.onPointerDownPosition = this.fNode.position;\n }\n\n public initialize(): void {\n }\n\n public move(difference: IPoint): void {\n const position = Point.fromPoint(this.onPointerDownPosition).add(difference);\n this.fNode.updatePosition(position);\n this.fNode.redraw();\n this.fLineAlignment?.handle(difference);\n }\n\n public complete(): void {\n this.fNode.completeDrag();\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { NodeOnPointerDownRequest } from './node-on-pointer-down.request';\nimport { FFlowBase, isNodeDragHandle } from '../../../../components';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { FNodesContainerBase } from '../../../f-containers';\nimport { FConnectionsContainerBase } from '../../../f-containers';\nimport { FNodeInputBase, FNodeOutputBase } from '../../../../components';\nimport { FNodeBase } from '../../../../components';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport {\n FConnectionDragHandler,\n FConnectionSourceDragHandler,\n FConnectionTargetDragHandler,\n NodeOnPointerMove\n} from '../node-on-pointer-move';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerDown\n implements IHandler<NodeOnPointerDownRequest, IDragHandler | undefined> {\n\n private get fConnectionsContainer(): FConnectionsContainerBase {\n return this.fFlow.fConnectionsContainer;\n }\n\n private get fNodesContainer(): FNodesContainerBase {\n return this.fFlow.fNodesContainer;\n }\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n private fFlow: FFlowBase,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: NodeOnPointerDownRequest): IDragHandler | undefined {\n let result: IDragHandler | undefined;\n\n const node = this.fNodesContainer.findNode(payload.event.targetElement);\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n if (node) {\n if (isNodeDragHandle(payload.event.targetElement)) {\n if (!payload.selectedItems.includes(node) && payload.isMoveCurrentNode) {\n payload.selectedItems.push(node);\n node.select();\n }\n this.fNodesContainer.setNodeToTopLayer(node!);\n const itemsToDrag: IDraggableItem[] = this.calculateDraggableConnectionsAndNodes(payload);\n\n const draggedNodes = itemsToDrag.filter((x) => {\n return x.type === EDraggableType.NODE;\n }).map((x) => (x as NodeOnPointerMove).fNode);\n\n this.fLineAlignment?.initialize(this.fNodesContainer.fNodes.toArray(), draggedNodes);\n\n result = {\n onPointerDownScale: payload.transform.scale,\n onPointerDownPosition: pointerPositionInCanvas.div(payload.transform.scale),\n draggableItems: itemsToDrag\n }\n }\n }\n\n return result;\n }\n\n private calculateDraggableConnectionsAndNodes(payload: NodeOnPointerDownRequest): IDraggableItem[] {\n let itemsToDrag: IDraggableItem[] = [];\n\n const selectedNodes = payload.selectedItems.map((x) => {\n return this.fNodesContainer.findNode(x.hostElement);\n }).filter((x) => !!x) as FNodeBase[];\n\n const nodeDragHandlers = selectedNodes.map((x) => new NodeOnPointerMove(this.fLineAlignment, x));\n itemsToDrag = nodeDragHandlers;\n\n const allOutputs: FNodeOutputBase[] = selectedNodes.reduce((result: FNodeOutputBase[], x: FNodeBase) => {\n return result.concat(this.getOutputsForNode(x));\n }, []);\n\n const allInputs: FNodeInputBase[] = selectedNodes.reduce((result: FNodeInputBase[], x: FNodeBase) => {\n return result.concat(this.getInputsForNode(x));\n }, []);\n\n nodeDragHandlers.forEach((nodeHandler) => {\n const outputConnections = this.fConnectionsContainer.findOutgoingConnections(this.getOutputsForNode(nodeHandler.fNode));\n outputConnections.forEach((c) => {\n if (allInputs.includes(c.fromTo!.input!)) {\n itemsToDrag.push(new FConnectionDragHandler(c, payload.transform, this.hostElement));\n } else {\n itemsToDrag.push(new FConnectionSourceDragHandler(c, payload.transform, this.hostElement));\n }\n });\n const inputConnections = this.fConnectionsContainer.findIncomingConnections(this.getInputsForNode(nodeHandler.fNode));\n inputConnections.forEach((c) => {\n if (allOutputs.includes(c.fromTo!.output! as FNodeOutputBase)) {\n const index = itemsToDrag.findIndex((x) => x.type === EDraggableType.CONNECTION && (x as FConnectionDragHandler).connection.id === c.id);\n if (index !== -1) {\n itemsToDrag.push(new FConnectionDragHandler(c, payload.transform, this.hostElement));\n }\n } else {\n itemsToDrag.push(new FConnectionTargetDragHandler(c, payload.transform, this.hostElement));\n }\n });\n //itemsToDrag.push(new NodeOnPointerMove(this.fLineAlignment, x.fNode));\n });\n return itemsToDrag;\n }\n\n private getInputsForNode(node: FNodeBase): FNodeInputBase[] {\n return this.fFlow.inputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getOutputsForNode(node: FNodeBase): FNodeOutputBase[] {\n return this.fFlow.outputs.filter((x) => node.isContains(x.hostElement));\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { NodeOnPointerUpRequest } from './node-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FConnectIfIntersectBase } from '../../../f-connect-if-intersect';\nimport { FLineAlignmentDirective } from '../../../f-line-alignment';\n\nexport class NodeOnPointerUp\n implements IHandler<NodeOnPointerUpRequest, void> {\n\n constructor(\n private fLineAlignment: FLineAlignmentDirective | undefined,\n private fConnectIfIntersect: FConnectIfIntersectBase | undefined,\n public hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: NodeOnPointerUpRequest): void {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isDragNodes = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.NODE);\n\n if (isDragNodes) {\n const nearestIntersection = this.fLineAlignment?.findNearestCoordinate(difference);\n if (nearestIntersection) {\n difference.x = nearestIntersection.xResult.value ? (difference.x - nearestIntersection.xResult.distance!) : difference.x;\n difference.y = nearestIntersection.yResult.value ? (difference.y - nearestIntersection.yResult.distance!) : difference.y;\n }\n\n payload.dragHandler.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete();\n });\n this.fConnectIfIntersect?.handle(payload.dragHandler.draggableItems);\n this.fLineAlignment?.complete();\n }\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\n\nexport class NodeOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler\n ) {\n }\n}\n","import { IPoint, IRect, Point, PointExtensions, RectExtensions } from '@foblex/core';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { FSelectionDirective } from '../../../f-selection';\nimport { ISelectable } from '../../../../i-selectable';\nimport { FFlowBase, getElementRectInCanvas } from '../../../../components';\n\nexport class SelectionOnPointerMove implements IDraggableItem {\n\n public readonly type: EDraggableType = EDraggableType.SELECTION;\n\n public selectedItems: ISelectable[] = [];\n\n private readonly items: { element: ISelectable, rect: IRect }[] = [];\n\n private canvasPosition: IPoint = PointExtensions.initialize();\n\n constructor(\n private fFlow: FFlowBase,\n private fSelection: FSelectionDirective | undefined,\n private selectedOnStart: ISelectable[],\n private onPointerDownPosition: IPoint = PointExtensions.initialize(),\n ) {\n const nodeRects = fFlow.fNodesContainer.fNodes.map((x) => {\n return {\n element: x,\n rect: RectExtensions.mult(getElementRectInCanvas(x.hostElement, fFlow.transform, this.fFlow.hostElement), fFlow.transform.scale)\n };\n });\n\n const lineRects = fFlow.fConnectionsContainer.fConnections.map((x) => {\n return {\n element: x,\n rect: RectExtensions.mult(getElementRectInCanvas(x.fPath.hostElement, fFlow.transform, this.fFlow.hostElement), fFlow.transform.scale)\n };\n });\n this.items = [ ...nodeRects, ...lineRects ].filter((x) => {\n return !selectedOnStart.includes(x.element);\n });\n this.canvasPosition = Point.fromPoint(fFlow.transform.position).add(fFlow.transform.scaledPosition);\n }\n\n public initialize(): void {\n this.fSelection?.show();\n this.fSelection?.draw({ ...this.onPointerDownPosition, width: 0, height: 0 });\n }\n\n public move(difference: IPoint): void {\n const currentPoint = Point.fromPoint(difference).add(this.onPointerDownPosition);\n const x: number = Math.min(this.onPointerDownPosition.x, currentPoint.x);\n const y: number = Math.min(this.onPointerDownPosition.y, currentPoint.y);\n\n const width = Math.abs(difference.x);\n const height = Math.abs(difference.y);\n\n this.fSelection?.draw({ x, y, width, height });\n this.selectedItems = [];\n this.items.forEach((item) => {\n item.element.deselect();\n const itemRect = RectExtensions.addPoint(item.rect, this.canvasPosition);\n if (\n RectExtensions.intersectionWithRect(itemRect, RectExtensions.initialize(x, y, width, height))\n ) {\n item.element.select();\n this.selectedItems.push(item.element);\n }\n });\n }\n\n public complete(): void {\n this.fSelection?.hide();\n this.selectedItems.push(...this.selectedOnStart || [])\n }\n}\n","import { IHandler, MouseEventExtensions, Point } from '@foblex/core';\nimport { FFlowBase, isNodeOutlet, isNodeOutput } from '../../../../components';\nimport { SelectionOnPointerDownRequest } from './selection-on-pointer-down.request';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { SelectionOnPointerMove } from '../selection-on-pointer-move';\nimport { IDraggableItem } from '../../i-draggable-item';\nimport { FSelectionDirective } from '../../../f-selection';\n\nexport class SelectionOnPointerDown implements IHandler<SelectionOnPointerDownRequest, IDragHandler> {\n\n constructor(\n private fFlow: FFlowBase,\n private fSelection: FSelectionDirective | undefined,\n private hostElement: SVGSVGElement\n ) {\n }\n\n public handle(payload: SelectionOnPointerDownRequest): IDragHandler {\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n\n let node = this.fFlow.fNodesContainer.findNode(payload.event.targetElement);\n const connection = this.fFlow.fConnectionsContainer.findConnectionWithElement(payload.event.targetElement);\n\n payload.selectedItems.forEach((x) => {\n if (x !== node || (!isNodeOutlet(payload.event.targetElement) && !isNodeOutput(payload.event.targetElement))) {\n x.deselect();\n }\n });\n const isMultiselect =\n MouseEventExtensions.isCommandButton(payload.event.originalEvent) ||\n MouseEventExtensions.isShiftPressed(payload.event.originalEvent);\n if (!isMultiselect) {\n payload.selectedItems = [];\n }\n if (node) {\n if (node) {\n if (!payload.selectedItems.includes(node)) {\n payload.selectedItems.push(node);\n } else {\n payload.selectedItems.splice(payload.selectedItems.indexOf(node), 1);\n }\n }\n\n } else if (connection) {\n if (!payload.selectedItems.includes(connection)) {\n payload.selectedItems.push(connection);\n } else {\n payload.selectedItems.splice(payload.selectedItems.indexOf(connection), 1);\n }\n }\n payload.selectedItems.forEach((x) => {\n if (!x.isSelected()) {\n x.select();\n }\n });\n\n let draggableItems: IDraggableItem[] = [];\n if (MouseEventExtensions.isShiftPressed(payload.event.originalEvent)) {\n draggableItems = [\n new SelectionOnPointerMove(this.fFlow, this.fSelection, payload.selectedItems, pointerPositionInCanvas)\n ];\n }\n return {\n onPointerDownScale: 1,\n onPointerDownPosition: pointerPositionInCanvas.div(1),\n draggableItems: draggableItems,\n selectedItems: payload.selectedItems\n }\n }\n}\n","import { IPointerEvent, ITransformModel } from '@foblex/core';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class SelectionOnPointerDownRequest {\n\n constructor(\n public event: IPointerEvent,\n public transform: ITransformModel,\n public selectedItems: ISelectable[]\n ) {\n }\n}\n","import { IHandler, Point } from '@foblex/core';\nimport { SelectionOnPointerUpRequest } from './selection-on-pointer-up.request';\nimport { EDraggableType } from '../../e-draggable-type';\nimport { ISelectable } from '../../../../i-selectable';\nimport { SelectionOnPointerMove } from '../selection-on-pointer-move';\n\nexport class SelectionOnPointerUp\n implements IHandler<SelectionOnPointerUpRequest, ISelectable[]> {\n\n constructor(\n public hostElement: SVGSVGElement,\n ) {\n }\n\n public handle(payload: SelectionOnPointerUpRequest): ISelectable[] {\n let result: ISelectable[] = payload.selectedItems;\n const pointerPositionInCanvas = Point.fromPoint(payload.event.getPosition()).matrixTransform(this.hostElement);\n let difference = pointerPositionInCanvas.div(payload.dragHandler.onPointerDownScale).sub(payload.dragHandler.onPointerDownPosition);\n\n const isSelection = payload.dragHandler.draggableItems.some((x) => x.type === EDraggableType.SELECTION);\n\n if (isSelection) {\n payload.dragHandler.draggableItems.forEach((x) => {\n x.move(difference);\n x.complete();\n });\n result = (payload.dragHandler.draggableItems[ 0 ] as SelectionOnPointerMove).selectedItems;\n }\n return result;\n }\n}\n","import { IPointerEvent } from '@foblex/core';\nimport { IDragHandler } from '../../i-drag-handler';\nimport { ISelectable } from '../../../../i-selectable';\n\nexport class SelectionOnPointerUpRequest {\n\n constructor(\n public event: IPointerEvent,\n public dragHandler: IDragHandler,\n public selectedItems: ISelectable[]\n ) {\n }\n}\n","import { Injectable } from '@angular/core';\nimport { FFlowBase } from '../../components';\nimport { ITransformModel } from '@foblex/core';\n\n@Injectable()\nexport class FDraggableService {\n\n private fFlow: FFlowBase | undefined;\n\n public get hostElement(): SVGSVGElement {\n return this.fFlow!.hostElement;\n }\n\n public get transform(): ITransformModel {\n return this.fFlow!.transform;\n }\n\n constructor(\n ) {\n }\n\n public setFlow(fFlow: FFlowBase): void {\n this.fFlow = fFlow;\n }\n\n public onPointerDown(event: PointerEvent): void {\n\n }\n}\n","import {\n IDragAndDropBase, IHasHostElement, IPointerEvent, ITransformModel, Point\n} from '@foblex/core';\nimport { Subscription } from 'rxjs';\nimport { AfterViewInit, Directive, ElementRef, EventEmitter, InjectionToken, NgZone, OnDestroy } from '@angular/core';\nimport { FItemsContainerBase } from '../f-containers';\nimport { FBackgroundBase } from '../../internal';\nimport { FFlowBase } from '../../components';\nimport { CanvasOnPointerDownHandler, CanvasOnPointerDownRequest } from './canvas';\nimport { IDragHandler } from './i-drag-handler';\nimport { DefaultDragHandler } from './default-drag-handler';\nimport {\n SelectionOnPointerDown,\n SelectionOnPointerDownRequest,\n SelectionOnPointerUp,\n SelectionOnPointerUpRequest\n} from './selection';\nimport {\n ReassignConnectionEvent, ReassignConnectionOnPointerDown,\n ReassignConnectionOnPointerDownRequest, ReassignConnectionOnPointerUp, ReassignConnectionOnPointerUpRequest\n} from './connections';\nimport { NodeOnPointerDown, NodeOnPointerDownRequest, NodeOnPointerUp, NodeOnPointerUpRequest } from './node';\nimport {\n CreateConnectionEvent, CreateConnectionOnPointerDown,\n CreateConnectionOnPointerDownRequest, CreateConnectionOnPointerUp, CreateConnectionOnPointerUpRequest\n} from './connections';\nimport { EDraggableType } from './e-draggable-type';\nimport { FConnectIfIntersectBase } from '../f-connect-if-intersect';\nimport { FLineAlignmentDirective } from '../f-line-alignment';\nimport { ISelectable } from '../../i-selectable';\nimport { FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\nimport {\n CreateNodeEvent,\n ExternalItemOnPointerDownHandler,\n ExternalItemOnPointerDownRequest,\n ExternalItemOnPointerUpHandler, ExternalItemOnPointerUpRequest\n} from './external-item';\nimport { FSelectionDirective } from '../f-selection';\n\nexport const F_DND_DIRECTIVE = new InjectionToken<FDraggableBase>('F_DND_DIRECTIVE');\n\n@Directive()\nexport abstract class FDraggableBase extends IDragAndDropBase implements IHasHostElement, AfterViewInit, OnDestroy {\n\n private subscriptions$: Subscription = new Subscription();\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n private get transform(): ITransformModel {\n return this.fItemsContainer.transform;\n }\n\n private get fItemsContainer(): FItemsContainerBase {\n return this.fFlow.fItemsContainer;\n }\n\n private get fBackground(): FBackgroundBase {\n return this.fFlow.fBackground;\n }\n\n private dragHandler: IDragHandler = new DefaultDragHandler().handle();\n\n private dragSelection!: SelectionOnPointerDown;\n private reassignConnection!: ReassignConnectionOnPointerDown;\n private dragCanvas!: CanvasOnPointerDownHandler;\n private dragNode!: NodeOnPointerDown;\n private createConnection!: CreateConnectionOnPointerDown;\n private dragExternalItem!: ExternalItemOnPointerDownHandler;\n\n public abstract onCreateConnection: EventEmitter<CreateConnectionEvent>;\n\n public abstract onReassignConnection: EventEmitter<ReassignConnectionEvent>;\n\n public abstract onCreateNode: EventEmitter<CreateNodeEvent>;\n\n public abstract fLineAlignment: FLineAlignmentDirective | undefined;\n\n public abstract fConnectIfIntersect: FConnectIfIntersectBase | undefined;\n\n public abstract fSelection: FSelectionDirective | undefined;\n\n private selectedItems: ISelectable[] = [];\n\n protected constructor(\n protected fFlow: FFlowBase,\n protected fDNDService: FDraggableService,\n protected fExternalItemService: FExternalItemService,\n private elementReference: ElementRef<SVGSVGElement>,\n ngZone: NgZone,\n ) {\n super(ngZone);\n this.fDNDService.setFlow(this.fFlow);\n }\n\n public ngAfterViewInit(): void {\n super.subscribe(document);\n\n this.dragSelection = new SelectionOnPointerDown(this.fFlow, this.fSelection, this.hostElement);\n this.reassignConnection = new ReassignConnectionOnPointerDown(this.fFlow, this.hostElement);\n this.dragCanvas = new CanvasOnPointerDownHandler(this.fBackground, this.fItemsContainer, this.hostElement);\n this.dragNode = new NodeOnPointerDown(this.fLineAlignment, this.fFlow, this.hostElement);\n this.createConnection = new CreateConnectionOnPointerDown(this.fFlow, this.hostElement);\n this.dragExternalItem = new ExternalItemOnPointerDownHandler(this.fExternalItemService, this.hostElement);\n }\n\n public override onPointerDown(event: IPointerEvent): boolean {\n let result: boolean = event.isMouseLeftButton();\n const selection = this.dragSelection.handle(\n new SelectionOnPointerDownRequest(event, this.transform, this.selectedItems)\n );\n this.selectedItems = selection.selectedItems || [];\n\n const reassignConnection = this.reassignConnection.handle(\n new ReassignConnectionOnPointerDownRequest(event, this.transform)\n );\n\n const createConnection = this.createConnection.handle(\n new CreateConnectionOnPointerDownRequest(event, this.transform)\n );\n\n const dragNode = this.dragNode.handle(\n new NodeOnPointerDownRequest(event, this.transform, this.selectedItems)\n );\n\n const dragCanvas = this.dragCanvas.handle(\n new CanvasOnPointerDownRequest(event)\n );\n\n const dragExternalItem = this.dragExternalItem.handle(\n new ExternalItemOnPointerDownRequest(event)\n );\n\n const dragSelection = selection.draggableItems.length ? selection : undefined;\n\n const dragHandle = dragSelection || reassignConnection || createConnection || dragNode || dragCanvas || dragExternalItem;\n if (!dragHandle) {\n this.dragHandler = new DefaultDragHandler().handle();\n result = false;\n } else {\n this.dragHandler = dragHandle;\n }\n\n return result;\n }\n\n protected override prepareDragSequence(event: IPointerEvent) {\n const isDragNodes = this.dragHandler.draggableItems.some((x) => x.type === EDraggableType.NODE);\n if (isDragNodes) {\n this.dragHandler = this.dragNode.handle(\n new NodeOnPointerDownRequest(event, this.transform, this.selectedItems, true)\n )!;\n }\n this.dragHandler.draggableItems.forEach((item) => {\n item.initialize();\n });\n }\n\n public override onPointerMove(event: IPointerEvent): void {\n const pointerPositionInCanvas = Point.fromPoint(event.getPosition()).matrixTransform(this.hostElement);\n const difference = pointerPositionInCanvas.div(this.dragHandler.onPointerDownScale).sub(this.dragHandler.onPointerDownPosition);\n this.dragHandler.draggableItems.forEach((item) => {\n item.move(difference);\n });\n }\n\n public override onPointerUp(event: IPointerEvent): void {\n new ReassignConnectionOnPointerUp(this.fFlow, this.onReassignConnection).handle(\n new ReassignConnectionOnPointerUpRequest(event, this.dragHandler)\n );\n\n new CreateConnectionOnPointerUp(this.fFlow, this.onCreateConnection).handle(\n new CreateConnectionOnPointerUpRequest(event, this.dragHandler)\n );\n\n new NodeOnPointerUp(this.fLineAlignment, this.fConnectIfIntersect, this.hostElement).handle(\n new NodeOnPointerUpRequest(event, this.dragHandler)\n );\n\n this.selectedItems = new SelectionOnPointerUp(this.hostElement).handle(\n new SelectionOnPointerUpRequest(event, this.dragHandler, this.selectedItems)\n );\n\n new ExternalItemOnPointerUpHandler(this.fFlow, this.onCreateNode).handle(\n new ExternalItemOnPointerUpRequest(event, this.dragHandler)\n );\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n this.subscriptions$.unsubscribe();\n }\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\nexport function findNearestCoordinateByX(elements: IRect[], target: IRect): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of elements) {\n const distanceLeftLeft = target.x - element.x;\n const distanceLeftRight = target.x - (element.x + element.width);\n const distanceCenterCenter = target.gravityCenter.x - element.gravityCenter.x;\n const distanceRightLeft = (target.x + target.width) - element.x;\n const distanceRightRight = (target.x + target.width) - (element.x + element.width);\n\n if (\n Math.abs(distanceLeftLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceLeftRight) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightLeft) <= ALIGN_THRESHOLD ||\n Math.abs(distanceRightRight) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.x;\n }\n if (Math.abs(distanceLeftLeft) < Math.abs(minDistance)) {\n minDistance = distanceLeftLeft;\n nearest = element.x;\n }\n if (Math.abs(distanceRightRight) < Math.abs(minDistance)) {\n minDistance = distanceRightRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceLeftRight) < Math.abs(minDistance)) {\n minDistance = distanceLeftRight;\n nearest = element.x + element.width;\n }\n if (Math.abs(distanceRightLeft) < Math.abs(minDistance)) {\n minDistance = distanceRightLeft;\n nearest = element.x;\n }\n }\n }\n return { value: nearest, distance: minDistance };\n}\n","import { IRect } from '@foblex/core';\nimport { INearestCoordinateResult } from './i-nearest-coordinate-result';\n\nconst ALIGN_THRESHOLD = 10;\n\nexport function findNearestCoordinateByY(elements: IRect[], target: IRect): INearestCoordinateResult {\n let nearest: number | undefined;\n let minDistance: number | undefined;\n\n for (const element of elements) {\n const distanceTopTop = target.y - element.y;\n const distanceTopBottom = target.y - (element.y + element.height);\n const distanceCenterCenter = target.gravityCenter.y - element.gravityCenter.y;\n const distanceBottomTop = (target.y + target.height) - element.y;\n const distanceBottomBottom = (target.y + target.height) - (element.y + element.height);\n\n if (\n Math.abs(distanceTopTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceTopBottom) <= ALIGN_THRESHOLD ||\n Math.abs(distanceCenterCenter) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomTop) <= ALIGN_THRESHOLD ||\n Math.abs(distanceBottomBottom) <= ALIGN_THRESHOLD\n ) {\n if (minDistance === undefined || Math.abs(distanceCenterCenter) < Math.abs(minDistance)) {\n minDistance = distanceCenterCenter;\n nearest = element.gravityCenter.y;\n }\n if (Math.abs(distanceTopTop) < Math.abs(minDistance)) {\n minDistance = distanceTopTop;\n nearest = element.y;\n }\n if (Math.abs(distanceBottomBottom) < Math.abs(minDistance)) {\n minDistance = distanceBottomBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceTopBottom) < Math.abs(minDistance)) {\n minDistance = distanceTopBottom;\n nearest = element.y + element.height;\n }\n if (Math.abs(distanceBottomTop) < Math.abs(minDistance)) {\n minDistance = distanceBottomTop;\n nearest = element.y;\n }\n }\n }\n\n return { value: nearest, distance: minDistance };\n}\n","import { Directive, ElementRef, Inject, InjectionToken } from '@angular/core';\nimport { IPoint, IRect, ISize, ITransformModel, LineFElement, RectExtensions, SizeExtensions } from '@foblex/core';\nimport { F_FLOW_COMPONENT, FFlowBase, FNodeBase, getElementRectInCanvas } from '../../components';\nimport { findNearestCoordinateByX, findNearestCoordinateByY, ILineAlignmentResult } from './domain';\n\nexport const F_LINE_ALIGNMENT = new InjectionToken<FLineAlignmentDirective>('F_LINE_ALIGNMENT');\n\n@Directive({\n selector: \"g[fLineAlignment]\",\n standalone: true,\n host: {\n 'class': 'f-line-alignment f-component'\n },\n providers: [\n { provide: F_LINE_ALIGNMENT, useExisting: FLineAlignmentDirective }\n ],\n})\nexport class FLineAlignmentDirective {\n\n private get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n private fHorizontalLine: LineFElement = new LineFElement();\n\n private fVerticalLine: LineFElement = new LineFElement();\n\n private size: ISize = SizeExtensions.initialize();\n\n private draggedNodeRect: IRect = RectExtensions.initialize();\n\n private rects: IRect[] = [];\n\n private get transform(): ITransformModel {\n return this.fFlow.fItemsContainer.transform;\n }\n\n constructor(\n @Inject(F_FLOW_COMPONENT) private fFlow: FFlowBase,\n private elementReference: ElementRef<SVGGElement>\n ) {\n this.hostElement.appendChild(this.fHorizontalLine.hostElement);\n this.hostElement.appendChild(this.fVerticalLine.hostElement);\n }\n\n public initialize(allNodes: FNodeBase[], currentNodes: FNodeBase[]): void {\n this.size = this.fFlow.hostElement.getBoundingClientRect();\n this.rects = [];\n const draggedNodeRects = currentNodes.map((x) => {\n return getElementRectInCanvas(x.hostElement, this.transform, this.fFlow.hostElement);\n });\n this.draggedNodeRect = RectExtensions.union(draggedNodeRects);\n\n const allNodesExcludeCurrents = allNodes.filter((x) => {\n return !currentNodes.includes(x);\n });\n\n this.rects = allNodesExcludeCurrents.map((x) => {\n return getElementRectInCanvas(x.hostElement, this.transform, this.fFlow.hostElement);\n });\n console.log(this.rects);\n }\n\n public handle(difference: IPoint): void {\n this.drawIntersections(difference);\n }\n\n private drawIntersections(difference: IPoint): void {\n const intersect = this.findNearestCoordinate(difference);\n if (intersect.xResult.value !== undefined) {\n this.fVerticalLine.show();\n this.fVerticalLine.draw({\n x1: intersect.xResult.value * this.transform.scale + this.transform.position.x + this.transform.scaledPosition.x,\n x2: intersect.xResult.value * this.transform.scale + this.transform.position.x + this.transform.scaledPosition.x,\n y1: 0,\n y2: this.size.height\n });\n } else {\n this.fVerticalLine.hide();\n }\n if (intersect.yResult.value !== undefined) {\n this.fHorizontalLine.show();\n this.fHorizontalLine.draw({\n x1: 0,\n x2: this.size.width,\n y1: intersect.yResult.value * this.transform.scale + this.transform.position.y + this.transform.scaledPosition.y,\n y2: intersect.yResult.value * this.transform.scale + this.transform.position.y + this.transform.scaledPosition.y,\n });\n } else {\n this.fHorizontalLine.hide();\n }\n }\n\n public findNearestCoordinate(difference: IPoint): ILineAlignmentResult {\n let result: ILineAlignmentResult = {\n xResult: { value: undefined, distance: undefined },\n yResult: { value: undefined, distance: undefined }\n };\n const rect = RectExtensions.addPoint(this.draggedNodeRect, difference);\n const xResult = findNearestCoordinateByX(this.rects, rect);\n const yResult = findNearestCoordinateByY(this.rects, rect);\n result = { xResult, yResult };\n return result;\n }\n\n public complete(): void {\n this.fVerticalLine.hide();\n this.fHorizontalLine.hide();\n }\n}\n","import { Directive, ElementRef, InjectionToken } from '@angular/core';\nimport { IRectElementModel, RectFElement } from '@foblex/core';\n\nexport const F_SELECTION = new InjectionToken<FSelectionDirective>('F_SELECTION');\n\n@Directive({\n selector: \"g[fSelection]\",\n standalone: true,\n host: {\n 'class': 'f-selection f-component'\n },\n providers: [\n { provide: F_SELECTION, useExisting: FSelectionDirective }\n ],\n})\nexport class FSelectionDirective {\n\n private get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n private fElement: RectFElement = new RectFElement();\n\n constructor(\n private elementReference: ElementRef<SVGGElement>\n ) {\n this.hostElement.appendChild(this.fElement.hostElement);\n }\n\n public hide(): void {\n this.fElement.hide();\n }\n\n public show(): void {\n this.fElement.show();\n }\n\n public draw(object: Partial<IRectElementModel>): void {\n this.fElement.draw(object);\n }\n}\n","import {\n ContentChild,\n Directive,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n NgZone,\n Output\n} from \"@angular/core\";\nimport { F_DND_DIRECTIVE, FDraggableBase } from './f-draggable-base';\nimport { F_FLOW_COMPONENT, FFlowBase } from '../../components';\nimport { F_LINE_ALIGNMENT, FLineAlignmentDirective } from '../f-line-alignment';\nimport { FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\nimport { CreateConnectionEvent, ReassignConnectionEvent } from './connections';\nimport { CreateNodeEvent } from './external-item';\nimport { F_SELECTION, FSelectionDirective } from '../f-selection';\nimport {\n FConnectIfIntersectBase,\n} from '../f-connect-if-intersect';\nimport { F_CONNECT_IF_INTERSECT } from '../../tokens';\n\n@Directive({\n selector: \"svg[fDraggable]\",\n providers: [\n { provide: F_DND_DIRECTIVE, useExisting: FDraggableDirective }\n ]\n})\nexport class FDraggableDirective extends FDraggableBase {\n\n @Input()\n public override disabled: boolean = false;\n\n @ContentChild(F_LINE_ALIGNMENT, { static: true })\n public override fLineAlignment: FLineAlignmentDirective | undefined;\n\n @ContentChild(F_SELECTION, { static: true })\n public override fSelection: FSelectionDirective | undefined;\n\n @ContentChild(F_CONNECT_IF_INTERSECT)\n public override fConnectIfIntersect: FConnectIfIntersectBase | undefined;\n\n @Output()\n public override onCreateConnection: EventEmitter<CreateConnectionEvent> = new EventEmitter<CreateConnectionEvent>();\n\n @Output()\n public override onReassignConnection: EventEmitter<ReassignConnectionEvent> = new EventEmitter<ReassignConnectionEvent>();\n\n @Output()\n public override onCreateNode: EventEmitter<CreateNodeEvent> = new EventEmitter<CreateNodeEvent>();\n\n constructor(\n @Inject(F_FLOW_COMPONENT) fFlow: FFlowBase,\n fDNDService: FDraggableService,\n fExternalItemService: FExternalItemService,\n elementReference: ElementRef<SVGSVGElement>,\n ngZone: NgZone\n ) {\n super(fFlow, fDNDService, fExternalItemService, elementReference, ngZone);\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FDraggableDirective } from './f-draggable.directive';\nimport { FExternalItemDirective, FExternalItemService } from '../f-external-item';\nimport { FDraggableService } from './f-draggable.service';\n\n@NgModule({\n declarations: [\n FDraggableDirective,\n FExternalItemDirective,\n ],\n imports: [\n CommonModule\n ],\n providers: [\n FExternalItemService,\n FDraggableService\n ],\n exports: [\n FDraggableDirective,\n FExternalItemDirective,\n ]\n})\nexport class FDraggableModule {\n}\n","import { IHandler, RectExtensions } from '@foblex/core';\nimport { ConnectIfIntersectRequest } from './connect-if-intersect.request';\nimport { FConnectionBase } from '../../../components';\nimport { FFlowBase, FNodeBase, FNodeInputBase, FNodeOutputBase, getElementRectInCanvas } from '../../../components';\nimport { FItemsContainerBase } from '../../f-containers';\nimport { findIncomingConnections, findOutgoingConnections } from '../../f-containers';\nimport { EDraggableType } from '../../f-draggable';\nimport { NodeOnPointerMove } from '../../f-draggable';\n\nexport class ConnectIfIntersectHandler implements IHandler<ConnectIfIntersectRequest> {\n\n constructor(\n private connections: FConnectionBase<FNodeOutputBase>[],\n private fFlow: FFlowBase,\n private fItemsContainer: FItemsContainerBase\n ) {\n }\n\n public handle(request: ConnectIfIntersectRequest): void {\n const isValid = this.isValidRequest(request);\n if (!isValid) {\n return;\n }\n const fNode = (request.draggableItems[ 0 ] as NodeOnPointerMove).fNode;\n\n const outputsOfNode = this.getOutputsForNode(fNode);\n const inputsOfNode = this.getInputsForNode(fNode);\n\n const isCantBeConnectedByOutput = outputsOfNode.some((x) => !x.canBeConnected);\n const isCantBeConnectedByInput = this.connections.some((x) => {\n return inputsOfNode.find((input) => input.id === x.fromTo?.input?.id);\n });\n\n if (!isCantBeConnectedByInput && outputsOfNode.length && !isCantBeConnectedByOutput && inputsOfNode.length) {\n const output = outputsOfNode[ 0 ];\n const input = inputsOfNode[ 0 ];\n const outgoingConnections = findOutgoingConnections(this.connections, [ output ]);\n const incomingConnections = findIncomingConnections(this.connections, [ input ]);\n if (outgoingConnections.length === 0 && incomingConnections.length === 0) {\n const connections = this.findConnectionsUnderNode(fNode);\n if (connections.length) {\n console.log('connections', connections);\n }\n }\n }\n }\n\n private isValidRequest(request: ConnectIfIntersectRequest): boolean {\n const result =\n request?.draggableItems.length === 1 &&\n request?.draggableItems[ 0 ].type === EDraggableType.NODE;\n\n return result;\n }\n\n private getOutputsForNode(node: FNodeBase): FNodeOutputBase[] {\n return this.fFlow.outputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private getInputsForNode(node: FNodeBase): FNodeInputBase[] {\n return this.fFlow.inputs.filter((x) => node.isContains(x.hostElement));\n }\n\n private findConnectionsUnderNode(node: FNodeBase): FConnectionBase<FNodeOutputBase>[] {\n const nodeRect = getElementRectInCanvas(node.hostElement, this.fItemsContainer.transform, this.fFlow.hostElement);\n return this.connections.filter((x) => {\n const intersection = RectExtensions.intersectionWithVector(nodeRect, x.vector.point1, x.vector.point2);\n return (intersection || []).length > 0\n });\n }\n}\n","import { IDraggableItem } from '../../f-draggable';\n\nexport class ConnectIfIntersectRequest {\n\n constructor(\n public readonly draggableItems: IDraggableItem[]\n ) {\n }\n}\n","import { Directive, QueryList } from '@angular/core';\nimport { FConnectionBase, FNodeOutputBase } from '../../components';\nimport { IDraggableItem } from '../f-draggable';\n\n@Directive()\nexport abstract class FConnectIfIntersectBase {\n\n public abstract id: any;\n\n public abstract fConnections: QueryList<FConnectionBase<FNodeOutputBase>> | undefined;\n\n public abstract handle(draggableItems: IDraggableItem[]): void;\n}\n","import { ContentChildren, Directive, Inject, Input, QueryList } from '@angular/core';\nimport { IDraggableItem } from '../f-draggable';\nimport { FConnectIfIntersectBase } from './f-connect-if-intersect-base';\nimport {\n F_FLOW_COMPONENT,\n FConnectionBase,\n FFlowBase,\n FNodeOutputBase\n} from '../../components';\nimport { ConnectIfIntersectHandler, ConnectIfIntersectRequest } from './connect-if-intersect';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../f-containers';\nimport { F_CONNECT_IF_INTERSECT, F_CONNECTION_COMPONENT } from '../../tokens';\n\nlet uniqueId: number = 0;\n\n@Directive({\n selector: \"g[fConnectIfIntersect]\",\n standalone: true,\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-connect-if-intersect\"\n },\n providers: [\n { provide: F_CONNECT_IF_INTERSECT, useExisting: FConnectIfIntersectDirective }\n ]\n})\nexport class FConnectIfIntersectDirective extends FConnectIfIntersectBase {\n\n @Input()\n public override id: string = `f-connect-if-intersect-${ uniqueId++ }`;\n\n @ContentChildren(F_CONNECTION_COMPONENT, { descendants: true })\n public override fConnections!: QueryList<FConnectionBase<FNodeOutputBase>>;\n\n constructor(\n @Inject(F_FLOW_COMPONENT) private fFlow: FFlowBase,\n @Inject(F_ITEMS_CONTAINER) private fItemsContainer: FItemsContainerBase\n ) {\n super();\n }\n\n public override handle(draggableItems: IDraggableItem[]): void {\n new ConnectIfIntersectHandler(\n this.fConnections.toArray(), this.fFlow, this.fItemsContainer\n ).handle(\n new ConnectIfIntersectRequest(draggableItems)\n );\n }\n}\n","import { EventExtensions, Point, RectExtensions } from '@foblex/core';\nimport { InjectionToken } from '@angular/core';\nimport { FCanvasBase } from '../../internal';\nimport { FItemsContainerBase } from '../f-containers';\nimport { FDraggableBase } from '../f-draggable';\nimport { isNode } from '../../components';\n\nexport const F_ZOOM = new InjectionToken<FZoomBase>('F_ZOOM');\n\nexport abstract class FZoomBase {\n\n protected isEnabled: boolean = false;\n\n private minimum: number = 0.3;\n private maximum: number = 4;\n\n private step: number = 1.1;\n\n private listeners: Function = EventExtensions.emptyListener();\n\n protected constructor(\n private fItemsContainer: FItemsContainerBase,\n private fDnd: FDraggableBase,\n private fCanvas: FCanvasBase,\n ) {\n }\n\n protected toggleZoom(): void {\n if (this.isEnabled && this.fCanvas.hostElement) {\n this.subscribe();\n } else {\n this.unsubscribe();\n }\n }\n\n private subscribe(): void {\n this.listeners();\n\n this.fCanvas.hostElement.addEventListener('wheel', this.onWheel.bind(this));\n this.fCanvas.hostElement.addEventListener('dblclick', this.onDoubleClick.bind(this));\n this.listeners = () => {\n this.fCanvas.hostElement.removeEventListener('wheel', this.onWheel.bind(this));\n this.fCanvas.hostElement.removeEventListener('dblclick', this.onDoubleClick.bind(this));\n };\n }\n\n public getScale(): number {\n return this.fItemsContainer.transform.scale || 1;\n }\n\n private onWheel(event: WheelEvent): void {\n event.preventDefault();\n\n if (this.fDnd.isDragStarted) {\n return;\n }\n\n let result: number = this.getScale();\n\n if (event.deltaY > 0) {\n if (this.getScale() / this.step >= this.minimum) {\n result = this.getScale() / this.step;\n }\n } else if (event.deltaY < 0) {\n if (this.getScale() * this.step <= this.maximum) {\n result = this.getScale() * this.step;\n }\n }\n\n const pointerPositionInCanvas = new Point(event.clientX, event.clientY).matrixTransform(this.fCanvas.hostElement);\n\n this.fItemsContainer.setZoom(result, pointerPositionInCanvas);\n this.fItemsContainer.redraw();\n this.fItemsContainer.completeDrag();\n }\n\n public onZoomToCenter(deltaY: number): void {\n const preventDefault = () => {\n };\n const rect = RectExtensions.fromElement(this.fCanvas.hostElement);\n\n this.onWheel({\n deltaY, preventDefault, clientX: rect.gravityCenter.x, clientY: rect.gravityCenter.y\n } as WheelEvent);\n }\n\n private onDoubleClick(event: MouseEvent): void {\n event.preventDefault();\n\n if (this.fDnd.isDragStarted || isNode(event.target as HTMLElement)) {\n return;\n }\n\n let result: number = this.getScale();\n\n if (this.getScale() * 1.7 <= this.maximum) {\n result = this.getScale() * 1.7;\n }\n const pointerPositionInCanvas = new Point(event.clientX, event.clientY).matrixTransform(this.fCanvas.hostElement);\n this.fItemsContainer.setZoom(result, pointerPositionInCanvas);\n this.fItemsContainer.redrawWithAnimation();\n this.fItemsContainer.completeDrag();\n }\n\n public reset(): void {\n this.fItemsContainer.resetZoom();\n this.fItemsContainer.redraw();\n this.fItemsContainer.completeDrag();\n }\n\n protected unsubscribe(): void {\n this.listeners();\n this.listeners = EventExtensions.emptyListener();\n }\n}\n","import {\n AfterViewInit,\n Directive, Inject, Input, OnDestroy\n} from \"@angular/core\";\nimport { BooleanExtensions } from '@foblex/core';\nimport { FZoomBase, F_ZOOM } from './f-zoom-base';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../f-containers';\nimport { F_CANVAS, FCanvasBase } from '../../internal';\nimport { F_DND_DIRECTIVE, FDraggableBase } from '../f-draggable';\n\n@Directive({\n selector: \"g[fZoom]\",\n exportAs: 'fComponent',\n host: {\n 'class': 'f-flow-zoom f-component'\n },\n providers: [ { provide: F_ZOOM, useExisting: FZoomDirective } ],\n})\nexport class FZoomDirective extends FZoomBase implements AfterViewInit, OnDestroy {\n\n @Input('fZoom')\n public get fFlowZoom(): boolean {\n return this.isEnabled;\n }\n\n public set fFlowZoom(isEnabled: boolean | undefined | string) {\n const value = BooleanExtensions.castToBoolean(isEnabled);\n if (value !== this.isEnabled) {\n this.isEnabled = value;\n this.toggleZoom();\n }\n }\n\n constructor(\n @Inject(F_ITEMS_CONTAINER) fItemsContainer: FItemsContainerBase,\n @Inject(F_DND_DIRECTIVE) fDnd: FDraggableBase,\n @Inject(F_CANVAS) fCanvas: FCanvasBase\n ) {\n super(fItemsContainer, fDnd, fCanvas);\n }\n\n public ngAfterViewInit(): void {\n super.toggleZoom();\n }\n\n public ngOnDestroy(): void {\n super.unsubscribe();\n }\n}\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n Directive,\n ElementRef,\n InjectionToken,\n NgZone,\n OnDestroy,\n QueryList\n} from '@angular/core';\nimport { IHasHostElement, ITransformModel } from '@foblex/core';\nimport { FItemsContainerBase } from '../../directives';\nimport { FConnectorBase, FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\nimport { merge, startWith, Subject, takeUntil } from 'rxjs';\nimport { FBackgroundBase } from '../../internal';\nimport { FConnectionsContainerBase } from '../../directives';\nimport { FNodesContainerBase } from '../../directives';\n\nexport const F_FLOW_COMPONENT = new InjectionToken<FFlowBase>('F_FLOW_COMPONENT');\n\n@Directive()\nexport abstract class FFlowBase implements IHasHostElement, AfterContentInit, OnDestroy {\n\n public abstract id: any;\n\n public get hostElement(): SVGSVGElement {\n return this.elementReference.nativeElement;\n }\n\n private readonly onDestroy: Subject<void> = new Subject<void>();\n\n\n public abstract fNodesContainer: FNodesContainerBase;\n\n public abstract fConnectionsContainer: FConnectionsContainerBase;\n\n\n public abstract fItemsContainer: FItemsContainerBase;\n\n public abstract fBackground: FBackgroundBase;\n\n public abstract transform: ITransformModel;\n\n public abstract outlets: FNodeOutletBase[];\n\n public abstract outputs: FNodeOutputBase[];\n\n public abstract inputs: FNodeInputBase[];\n\n public connectorChanges: Subject<void> = new Subject<void>();\n\n protected constructor(\n private elementReference: ElementRef<SVGSVGElement>,\n private changeDetectorRef: ChangeDetectorRef,\n private ngZone: NgZone\n ) {\n }\n\n public ngAfterContentInit(): void {\n this.subscribeOnComponentsChanges();\n }\n\n protected subscribeOnComponentsChanges(): void {\n const changes = [\n this.fNodesContainer.fNodes.changes,\n this.fConnectionsContainer.fConnections.changes,\n this.connectorChanges\n ];\n\n merge(...changes).pipe(startWith(null), takeUntil(this.onDestroy)).subscribe(() => {\n const changedOrDestroyed = merge(...changes, this.onDestroy);\n\n merge(this.fNodesContainer.stateChanges).pipe(startWith(null), takeUntil(changedOrDestroyed)).subscribe(() => {\n\n this.fConnectionsContainer.fConnections.forEach((connection) => {\n const output = this.outputs.find((x) => x.id === connection.outputId);\n const input = this.inputs.find((x) => x.id === connection.inputId);\n if (input && output) {\n connection.fromTo = {\n output,\n input\n };\n connection.initialize();\n }\n });\n });\n });\n }\n\n\n public ngOnDestroy(): void {\n this.onDestroy.next();\n this.onDestroy.complete();\n }\n}\n","import {\n ChangeDetectorRef,\n Component, ContentChild,\n ElementRef,\n Input,\n NgZone,\n ViewChild\n} from '@angular/core';\nimport { FCanvasDirective } from '../../internal';\nimport { F_ITEMS_CONTAINER, FItemsContainerBase } from '../../directives';\nimport { F_FLOW_COMPONENT, FFlowBase } from './f-flow-base';\nimport { ITransformModel } from '@foblex/core';\nimport { F_NODES_CONTAINER, FNodesContainerBase } from '../../directives';\nimport {\n F_CONNECTIONS_CONTAINER,\n FConnectionsContainerBase\n} from '../../directives';\nimport { F_BACKGROUND, FBackgroundBase } from '../../internal';\nimport { F_FLOW_CONNECTOR_PARENT, IFlowConnectorParent } from './i-flow-connector-parent';\nimport { FConnectorBase, FNodeInputBase, FNodeOutletBase, FNodeOutputBase } from '../f-connectors';\n\nlet uniqueId: number = 0;\n\nexport const CONNECTION_MARKER_START = \"connection-marker-start\";\nexport const CONNECTION_MARKER_END = \"connection-marker-end\";\nexport const CONNECTION_MARKER_START_SELECTED = \"connection-marker-start-selected\";\nexport const CONNECTION_MARKER_END_SELECTED = \"connection-marker-end-selected\";\n\n@Component({\n selector: 'svg[fFlow]',\n templateUrl: './f-flow.component.html',\n hostDirectives: [\n {\n directive: FCanvasDirective\n }\n ],\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-flow\"\n },\n providers: [\n { provide: F_FLOW_COMPONENT, useExisting: FFlowComponent },\n { provide: F_FLOW_CONNECTOR_PARENT, useExisting: FFlowComponent }\n ],\n})\nexport class FFlowComponent extends FFlowBase implements IFlowConnectorParent {\n\n public readonly CONNECTION_MARKER_START = CONNECTION_MARKER_START;\n public readonly CONNECTION_MARKER_END = CONNECTION_MARKER_END;\n public readonly CONNECTION_MARKER_START_SELECTED = CONNECTION_MARKER_START_SELECTED;\n public readonly CONNECTION_MARKER_END_SELECTED = CONNECTION_MARKER_END_SELECTED;\n\n @Input()\n public override id: string = `f-flow-${ uniqueId++ }`;\n\n @ContentChild(F_NODES_CONTAINER, { static: true })\n public override fNodesContainer!: FNodesContainerBase;\n\n @ContentChild(F_CONNECTIONS_CONTAINER, { descendants: true })\n public override fConnectionsContainer!: FConnectionsContainerBase;\n\n @ContentChild(F_ITEMS_CONTAINER, { static: true })\n public override fItemsContainer!: FItemsContainerBase;\n\n @ViewChild(F_BACKGROUND, { static: true })\n public override fBackground!: FBackgroundBase;\n\n public override outlets: FNodeOutletBase[] = [];\n\n public override outputs: FNodeOutputBase[] = []\n\n public override inputs: FNodeInputBase[] = [];\n\n public override get transform(): ITransformModel {\n return this.fItemsContainer.transform;\n }\n\n constructor(\n elementReference: ElementRef<SVGSVGElement>,\n changeDetectorRef: ChangeDetectorRef,\n ngZone: NgZone\n ) {\n super(elementReference, changeDetectorRef, ngZone);\n }\n\n public addConnector(connector: FConnectorBase) {\n if (connector instanceof FNodeOutletBase) {\n this.outlets.push(connector);\n } else if (connector instanceof FNodeInputBase) {\n this.inputs.push(connector);\n } else if (connector instanceof FNodeOutputBase) {\n this.outputs.push(connector);\n }\n this.connectorChanges.next();\n }\n\n public removeConnector(connector: FConnectorBase) {\n if (connector instanceof FNodeOutletBase) {\n this.outlets = this.outlets.filter(x => x !== connector);\n } else if (connector instanceof FNodeInputBase) {\n this.inputs = this.inputs.filter(x => x !== connector);\n } else if (connector instanceof FNodeOutputBase) {\n this.outputs = this.outputs.filter(x => x !== connector);\n }\n this.connectorChanges.next();\n }\n}\n","<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","import {\n ChangeDetectionStrategy, Component, ElementRef, Inject, Input, ViewChild\n} from \"@angular/core\";\nimport { IVector } from '@foblex/core';\nimport { F_CONNECTION_COMPONENT } from '../../../tokens';\nimport {\n FConnectionBase,\n FConnectionDragHandleComponent,\n FConnectionGradientComponent,\n FConnectionPathComponent, FConnectionSelectionComponent, FConnectionTextComponent, getConnectionIntersect\n} from '../common';\nimport { F_FLOW_COMPONENT, FFlowBase } from '../../f-flow';\n\nlet uniqueId: number = 0;\n\n@Component({\n selector: \"g[fConnection]\",\n templateUrl: \"./f-connection.component.html\",\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.id]': 'id',\n class: \"f-component f-connection\"\n },\n providers: [ { provide: F_CONNECTION_COMPONENT, useExisting: FConnectionComponent } ],\n})\nexport class FConnectionComponent extends FConnectionBase {\n\n @Input()\n public override id: string = `f-connection-${ uniqueId++ }`;\n\n @Input()\n public override outputId: any;\n\n @Input()\n public override inputId: any;\n\n @ViewChild(FConnectionPathComponent, { static: true })\n public override fPath!: FConnectionPathComponent;\n\n @ViewChild(FConnectionGradientComponent, { static: true })\n public fGradient!: FConnectionGradientComponent;\n\n @ViewChild(FConnectionDragHandleComponent, { static: true })\n public fDragHandle!: FConnectionDragHandleComponent;\n\n @ViewChild(FConnectionSelectionComponent, { static: true })\n public fSelection!: FConnectionSelectionComponent;\n\n @ViewChild(FConnectionTextComponent, { static: true })\n public fText!: FConnectionTextComponent;\n\n public get hostElement(): SVGGElement {\n return this.elementReference.nativeElement;\n }\n\n constructor(\n private elementReference: ElementRef<SVGGElement>,\n @Inject(F_FLOW_COMPONENT) private flow: FFlowBase\n ) {\n super();\n }\n\n public override initialize(): void {\n const vector = getConnectionIntersect(\n this.fromTo!.output.getElementRectInCanvas(this.flow.transform, this.flow.hostElement),\n this.fromTo!.input.getElementRectInCanvas(this.flow.transform, this.flow.hostElement)\n );\n this.setVector(vector);\n this.redraw();\n }\n\n public initializeDrag(): void {\n }\n\n public setVector(vector: IVector): void {\n this.vector = vector;\n this.path = `M${ vector.point1.x },${ vector.point1.y }L${ vector.point2.x + 0.0001 },${ vector.point2.y + 0.0001 }`;\n }\n\n public redraw(): void {\n this.fPath.setPath(this.path);\n this.fSelection.setPath(this.path);\n this.fGradient.redraw(this.vector);\n this.fDragHandle.redraw(this.vector.point2);\n this.fText.redraw(this.vector);\n }\n\n public override select(): void {\n this.fPath.select();\n super.select();\n }\n\n public override deselect(): void {\n this.fPath.deselect();\n super.deselect();\n }\n\n public completeDrag(): void {\n this.redraw();\n }\n}\n","<ng-container xmlns:svg=\"http://www.w3.org/2000/svg\">\n <svg:linearGradient fConnectionGradient [fromTo]=\"fromTo\"></svg:linearGradient>\n <svg:path fConnectionSelection [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n <svg:g>\n <svg:path f-connection-path [attr.d]=\"path\" [fromTo]=\"fromTo\"></svg:path>\n <svg:circle f-connection-drag-handle r=\"8\"></svg:circle>\n </svg:g>\n <svg:text f-connection-text [fromTo]=\"fromTo\"></svg:text>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FConnectionCommonModule } from '../common';\nimport { FConnectionComponent } from './f-connection.component';\n\n@NgModule({\n declarations: [\n FConnectionComponent\n ],\n imports: [\n CommonModule,\n FConnectionCommonModule\n ],\n exports: [\n FConnectionComponent\n ]\n})\nexport class FConnectionModule {\n}\n","import { NgModule } from '@angular/core';\nimport { FFlowComponent, FTempConnectionModule } from './components';\nimport { FConnectionCommonModule } from './components';\nimport { FNodeInputDirective, FNodeOutletDirective, FNodeOutputDirective } from './components';\nimport { FDragHandleDirective, FForeignObjectComponent, FNodeComponent } from './components';\nimport { CommonModule } from '@angular/common';\nimport { FConnectionsContainerComponent, FItemsContainerDirective, FNodesContainerComponent, FZoomDirective } from './directives';\nimport { FBackgroundDirective, FCanvasDirective } from './internal';\n\n@NgModule({\n declarations: [\n FFlowComponent,\n FNodeComponent,\n FZoomDirective,\n FForeignObjectComponent,\n FDragHandleDirective,\n FItemsContainerDirective,\n FNodesContainerComponent,\n FConnectionsContainerComponent,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n ],\n imports: [\n CommonModule,\n FTempConnectionModule,\n FCanvasDirective,\n FBackgroundDirective,\n ],\n providers: [],\n exports: [\n FFlowComponent,\n FNodeComponent,\n FZoomDirective,\n FForeignObjectComponent,\n FDragHandleDirective,\n FItemsContainerDirective,\n FNodesContainerComponent,\n FConnectionsContainerComponent,\n FConnectionCommonModule,\n FNodeInputDirective,\n FNodeOutletDirective,\n FNodeOutputDirective,\n ]\n})\nexport class FFlowModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FConnectionTextPathDirective","uniqueId","i1.FConnectionGradientComponent","i2.FConnectionPathComponent","i3.FConnectionTextComponent","i1.FCanvasBase","i1.FTempConnectionComponent","i1.FExternalItemService","i1.FFlowBase","i2.FDraggableService","i3.FExternalItemService","ALIGN_THRESHOLD","i1.FDraggableService","i2.FExternalItemService","i3.FBackgroundDirective","i1.FConnectionDragHandleComponent","i2.FConnectionGradientComponent","i3.FConnectionPathComponent","i4.FConnectionTextComponent","i5.FConnectionSelectionComponent"],"mappings":"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"}