ngx-vflow 0.2.2 → 0.3.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.
Files changed (31) hide show
  1. package/esm2022/lib/vflow/components/edge-label/edge-label.component.mjs +13 -10
  2. package/esm2022/lib/vflow/components/handle/handle.component.mjs +22 -25
  3. package/esm2022/lib/vflow/components/node/node.component.mjs +57 -22
  4. package/esm2022/lib/vflow/components/vflow/vflow.component.mjs +3 -3
  5. package/esm2022/lib/vflow/decorators/microtask.decorator.mjs +11 -0
  6. package/esm2022/lib/vflow/decorators/run-in-injection-context.decorator.mjs +26 -0
  7. package/esm2022/lib/vflow/directives/handle-size-controller.directive.mjs +38 -0
  8. package/esm2022/lib/vflow/models/edge.model.mjs +15 -11
  9. package/esm2022/lib/vflow/models/handle.model.mjs +32 -3
  10. package/esm2022/lib/vflow/models/node.model.mjs +3 -22
  11. package/esm2022/lib/vflow/services/edge-changes.service.mjs +2 -2
  12. package/esm2022/lib/vflow/services/flow-entities.service.mjs +2 -2
  13. package/esm2022/lib/vflow/services/handle.service.mjs +3 -4
  14. package/esm2022/lib/vflow/utils/add-nodes-to-edges.mjs +3 -3
  15. package/esm2022/lib/vflow/utils/resizable.mjs +11 -0
  16. package/esm2022/lib/vflow/vflow.module.mjs +5 -2
  17. package/fesm2022/ngx-vflow.mjs +262 -142
  18. package/fesm2022/ngx-vflow.mjs.map +1 -1
  19. package/lib/vflow/components/handle/handle.component.d.ts +5 -4
  20. package/lib/vflow/components/node/node.component.d.ts +7 -6
  21. package/lib/vflow/components/vflow/vflow.component.d.ts +2 -2
  22. package/lib/vflow/decorators/microtask.decorator.d.ts +1 -0
  23. package/lib/vflow/decorators/run-in-injection-context.decorator.d.ts +8 -0
  24. package/lib/vflow/directives/handle-size-controller.directive.d.ts +10 -0
  25. package/lib/vflow/models/edge.model.d.ts +2 -2
  26. package/lib/vflow/models/handle.model.d.ts +30 -2
  27. package/lib/vflow/models/node.model.d.ts +2 -2
  28. package/lib/vflow/services/handle.service.d.ts +3 -6
  29. package/lib/vflow/utils/resizable.d.ts +3 -0
  30. package/lib/vflow/vflow.module.d.ts +4 -3
  31. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/services/viewport.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-defined.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/reference.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/map-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/round.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/draggable.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/template.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/add-nodes-to-edges.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/flow.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/connection.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/hash.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-entities.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/node.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge-label.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/point-on-line-by-ratio.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/straigh-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/bezier-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/reference-keeper.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/changes-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.module.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Injectable, Signal, WritableSignal, signal } from '@angular/core';\nimport { Point } from '../interfaces/point.interface';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\n\n@Injectable()\nexport class ViewportService {\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState { return { zoom: 1, x: 0, y: 0 } }\n\n /**\n * Internal signal that accepts value from user by lib api\n * When this signal changes, lib sets new view state and update readableViewport signal\n */\n public readonly writableViewport: WritableSignal<WritableViewport> = signal({\n changeType: 'initial',\n state: ViewportService.getDefaultViewport()\n })\n\n /**\n * Public signal with viewport state. User can directly read from this signal. It's updated by:\n * - user events on flow\n * - writableViewport signal\n */\n public readonly readableViewport: WritableSignal<ViewportState> = signal(ViewportService.getDefaultViewport())\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n}\n","export function isDefined<T>(data: T | undefined): data is T {\n return data !== undefined\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'svg[rootSvgRef]'\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n}\n","import { Directive, ElementRef, Injector, Input, OnInit, effect, inject, runInInjectionContext } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, zoom, zoomIdentity, zoomTransform } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>\n\n@Directive({ selector: 'g[mapContext]' })\nexport class MapContextDirective implements OnInit {\n @Input()\n public minZoom!: number\n\n @Input()\n public maxZoom!: number\n\n protected rootSvg = inject(RootSvgReferenceDirective).element\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n protected viewportService = inject(ViewportService)\n\n protected rootSvgSelection = select(this.rootSvg)\n protected zoomableSelection = select(this.host)\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n // TODO: hack with timer fixes wrong node scaling (handle positions not matched with content size)\n protected manualViewportChangeEffect = effect(() => setTimeout(() => {\n const viewport = this.viewportService.writableViewport()\n const state = viewport.state\n\n if (viewport.changeType === 'initial') {\n return\n }\n\n // If only zoom provided\n if (isDefined(state.zoom) && (!isDefined(state.x) && !isDefined(state.y))) {\n this.rootSvgSelection.call(this.zoomBehavior.scaleTo, state.zoom)\n\n return\n }\n\n // If only pan provided\n if ((isDefined(state.x) && isDefined(state.y)) && !isDefined(state.zoom)) {\n this.rootSvgSelection.call(this.zoomBehavior.translateTo, state.x, state.y)\n\n return\n }\n\n // If whole viewort state provided\n if (isDefined(state.x) && isDefined(state.y) && isDefined(state.zoom)) {\n this.rootSvgSelection.call(this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(state.zoom)\n )\n\n return\n }\n }), { allowSignalWrites: true })\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.minZoom, this.maxZoom])\n .on('zoom', this.handleZoom)\n\n this.rootSvgSelection.call(this.zoomBehavior)\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set({ zoom: transform.k, x: transform.x, y: transform.y })\n\n this.zoomableSelection.attr('transform', transform.toString())\n }\n}\n","export const round = (num: number) => Math.round(num * 100) / 100\n","import { Injectable } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3DragEvent, drag } from 'd3-drag';\nimport { NodeModel } from '../models/node.model';\nimport { round } from '../utils/round';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>\n\n@Injectable()\nexport class DraggableService {\n /**\n * Enable or disable draggable behavior for element.\n * model contains draggable flag which declares if draggable should be enabled or not\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public toggleDraggable(element: Element, model: NodeModel) {\n const d3Element = select(element)\n\n const behavior = model.draggable\n ? this.getDragBehavior(model)\n : this.getIgnoreDragBehavior()\n\n d3Element.call(behavior)\n }\n\n /**\n * TODO: not shure if this work, need to check\n *\n * @param element\n */\n public destroy(element: Element) {\n select(element).on('.drag', null)\n }\n\n /**\n * Node drag behavior. Updated node's coordinate according to dragging\n *\n * @param model\n * @returns\n */\n private getDragBehavior(model: NodeModel) {\n let deltaX: number\n let deltaY: number\n\n return drag()\n .on('start', (event: DragEvent) => {\n deltaX = model.point().x - event.x\n deltaY = model.point().y - event.y\n })\n\n .on('drag', (event: DragEvent) => {\n model.point.set(\n {\n x: round(event.x + deltaX),\n y: round(event.y + deltaY)\n }\n )\n })\n }\n\n /**\n * Specify ignoring drag behavior. It's responsible for not moving the map when user tries to drag node\n * with disabled drag behavior\n */\n private getIgnoreDragBehavior() {\n return drag()\n .on('drag', (event: DragEvent) => {\n (event.sourceEvent as Event).stopPropagation()\n })\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EdgeContext } from '../interfaces/template-context.interface';\n\n@Directive({ selector: 'ng-template[edge]' })\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[connection]' })\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[edgeLabelHtml]' })\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[nodeHtml]' })\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[handle]' })\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n","import { EdgeModel } from \"../models/edge.model\"\nimport { NodeModel } from \"../models/node.model\"\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]) {\n const nodesById = nodes.reduce((acc, n) => {\n acc[n.node.id] = n\n\n return acc\n }, {} as { [nodeId: string]: NodeModel })\n\n edges.forEach(e => {\n e.source = nodesById[e.edge.source]\n e.target = nodesById[e.edge.target]\n })\n}\n","import { Signal, WritableSignal, computed, signal } from \"@angular/core\";\nimport { HandlePositions } from \"../interfaces/handle-positions.interface\";\n\nexport class FlowModel {\n /**\n * Global setting with handle positions. Nodes derive this value\n *\n * @deprecated\n */\n public handlePositions: WritableSignal<HandlePositions> = signal({ source: 'right', target: 'left' })\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400])\n\n public flowWidth = computed(() => this.view() === 'auto' ? '100%' : this.view()[0])\n\n public flowHeight = computed(() => this.view() === 'auto' ? '100%' : this.view()[1])\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\n\nexport interface FlowStatusIdle {\n state: 'idle',\n payload: null\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start',\n payload: {\n sourceNode: NodeModel\n sourceHandle: HandleModel\n }\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation',\n payload: {\n sourceNode: NodeModel\n targetNode: NodeModel\n sourceHandle: HandleModel\n targetHandle: HandleModel\n valid: boolean\n }\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end',\n payload: {\n sourceNode: NodeModel\n targetNode: NodeModel\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n }\n}\n\nexport type FlowStatus =\n FlowStatusIdle |\n FlowStatusConnectionStart |\n FlowStatusConnectionValidation |\n FlowStatusConnectionEnd\n\n@Injectable()\nexport class FlowStatusService {\n public readonly status = signal<FlowStatus>({ state: 'idle', payload: null })\n\n public setIdleStatus() {\n this.status.set({ state: 'idle', payload: null })\n }\n\n public setConnectionStartStatus(sourceNode: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { sourceNode, sourceHandle } })\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n sourceNode: NodeModel,\n targetNode: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n ) {\n this.status.set({ state: 'connection-validation', payload: { sourceNode, targetNode, sourceHandle, targetHandle, valid } })\n }\n\n public setConnectionEndStatus(sourceNode: NodeModel, targetNode: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel) {\n this.status.set({ state: 'connection-end', payload: { sourceNode, targetNode, sourceHandle, targetHandle } })\n }\n}\n\n/**\n * Batch status changes together to call them one after another\n *\n * @param changes list of set[FlowStatus.state]Status() calls\n */\nexport function batchStatusChanges(...changes: Function[]) {\n if (changes.length) {\n const [firstChange, ...restChanges] = changes\n // first change is sync\n firstChange()\n // without timer, subscribed effects/comuted signals only get latest value\n restChanges.forEach(change => setTimeout(() => change()))\n }\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from \"../interfaces/connection-settings.interface\";\nimport { Curve, EdgeType } from \"../interfaces/edge.interface\";\n\nexport class ConnectionModel {\n public curve: Curve\n public type: EdgeType\n public validator: ConnectionValidatorFn\n\n constructor(public connection: ConnectionSettings) {\n this.curve = connection.curve ?? 'bezier'\n this.type = connection.type ?? 'default'\n this.validator = connection.validator ?? (() => true)\n }\n}\n","export function hashCode(str: string): number {\n return str.split('').reduce((a, b) => {\n a = ((a << 5) - a) + b.charCodeAt(0)\n\n return a & a\n }, 0)\n}\n","import { Injectable, computed, effect, signal, untracked } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { EdgeModel } from '../models/edge.model';\nimport { ConnectionModel } from '../models/connection.model';\nimport { Marker } from '../interfaces/marker.interface';\nimport { hashCode } from '../utils/hash';\n\n@Injectable()\nexport class FlowEntitiesService {\n public readonly nodes = signal<NodeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly edges = signal<EdgeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly connection = signal<ConnectionModel>(new ConnectionModel({}))\n\n public readonly markers = computed(() => {\n const markersMap = new Map<number, Marker>()\n\n this.validEdges().forEach(e => {\n if (e.edge.markers?.start) {\n const hash = hashCode(JSON.stringify(e.edge.markers.start))\n markersMap.set(hash, e.edge.markers.start)\n }\n\n if (e.edge.markers?.end) {\n const hash = hashCode(JSON.stringify(e.edge.markers.end))\n markersMap.set(hash, e.edge.markers.end)\n }\n })\n\n const connectionMarker = this.connection().connection.marker\n if (connectionMarker) {\n const hash = hashCode(JSON.stringify(connectionMarker))\n markersMap.set(hash, connectionMarker)\n }\n\n return markersMap\n })\n\n public readonly validEdges = computed(() => {\n const nodes = this.nodes()\n\n return this.edges().filter(e => nodes.includes(e.source) && nodes.includes(e.target))\n })\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ node }) => node.id === id) as NodeModel<T> | undefined\n }\n\n public getDetachedEdges() {\n return this.edges().filter(e => e.detached())\n }\n}\n","import { Directive, EventEmitter, Output, effect, inject } from '@angular/core';\nimport { Connection } from '../interfaces/connection.interface';\nimport { FlowStatusService } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\n\n@Directive({\n selector: '[connectionController]',\n standalone: true\n})\nexport class ConnectionControllerDirective {\n /**\n * This event fires when user tries to create new Edge.\n *\n * `Connection` is an entity that contains data about source and target nodes.\n *\n * Also it's important to note, that this event only fires when connection is valid by validator function in `ConnectionSettings`,\n * by default without passing the validator every connection concidered valid.\n */\n @Output()\n public onConnect = new EventEmitter<Connection>()\n\n private statusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n\n protected connectEffect = effect(() => {\n const status = this.statusService.status()\n\n if (status.state === 'connection-end') {\n const sourceModel = status.payload.sourceNode\n const targetModel = status.payload.targetNode\n\n const source = sourceModel.node.id\n const target = targetModel.node.id\n\n const sourceHandle = status.payload.sourceHandle.rawHandle.id\n const targetHandle = status.payload.targetHandle.rawHandle.id\n\n const connection = this.flowEntitiesService.connection()\n\n if (connection.validator({ source, target, sourceHandle, targetHandle })) {\n this.onConnect.emit({ source, target, sourceHandle, targetHandle })\n }\n }\n }, { allowSignalWrites: true })\n}\n","import { computed, signal } from \"@angular/core\";\nimport { NodeHandle } from \"../services/handle.service\";\nimport { NodeModel } from \"./node.model\";\nexport class HandleModel {\n public readonly strokeWidth = 2\n\n public size = signal({\n width: 10 + (2 * this.strokeWidth),\n height: 10 + (2 * this.strokeWidth)\n })\n\n public offset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return {\n x: 0,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'right': return {\n x: this.parentNode.size().width,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'top': return {\n x: this.parentPosition().x + (this.parentSize().width / 2),\n y: 0\n }\n case 'bottom': return {\n x: this.parentPosition().x + this.parentSize().width / 2,\n y: this.parentNode.size().height\n }\n }\n })\n\n public sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return { x: -(this.size().width / 2), y: 0 }\n case 'right': return { x: this.size().width / 2, y: 0 }\n case 'top': return { x: 0, y: -(this.size().height / 2) }\n case 'bottom': return { x: 0, y: this.size().height / 2 }\n }\n })\n\n public pointAbsolute = computed(() => {\n return {\n x: this.parentNode.point().x + this.offset().x + this.sizeOffset().x,\n y: this.parentNode.point().y + this.offset().y + this.sizeOffset().y,\n }\n })\n\n public parentSize = signal(this.rawHandle.parentSize)\n public parentPosition = signal(this.rawHandle.parentPosition)\n\n constructor(\n public rawHandle: NodeHandle,\n private parentNode: NodeModel\n ) { }\n}\n","import { computed, signal } from '@angular/core'\nimport { Node } from '../interfaces/node.interface'\nimport { FlowModel } from './flow.model'\nimport { isDefined } from '../utils/is-defined'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { HandleModel } from './handle.model'\n\nexport class NodeModel<T = unknown> {\n public point = signal({ x: 0, y: 0 })\n\n public point$ = toObservable(this.point)\n\n public size = signal({ width: 0, height: 0 })\n\n public pointTransform = computed(() => `translate(${this.point().x}, ${this.point().y})`)\n\n // Now source and handle positions derived from parent flow\n public sourcePosition = computed(() => this.flow.handlePositions().source)\n public targetPosition = computed(() => this.flow.handlePositions().target)\n\n public handles = computed(\n () => {\n if (this.node.type === 'html-template') {\n return this.rawHandles()\n }\n\n return [\n new HandleModel(\n {\n position: this.sourcePosition(),\n type: 'source',\n parentPosition: { x: 0, y: 0 },\n parentSize: this.size()\n },\n this\n ),\n new HandleModel(\n {\n position: this.targetPosition(),\n type: 'target',\n parentPosition: { x: 0, y: 0 },\n parentSize: this.size()\n },\n this\n ),\n\n ]\n }\n )\n\n public rawHandles = signal<HandleModel[]>([])\n\n public draggable = true\n\n // disabled for configuration for now\n public readonly magnetRadius = 20\n\n private flow!: FlowModel\n\n constructor(\n public node: Node<T>\n ) {\n this.point.set(node.point)\n\n if (isDefined(node.draggable)) this.draggable = node.draggable\n }\n\n /**\n * Bind parent flow model to node\n *\n * @param flow parent flow\n */\n public bindFlow(flow: FlowModel) {\n this.flow = flow\n }\n}\n","import { signal } from \"@angular/core\"\nimport { EdgeLabel } from \"../interfaces/edge-label.interface\"\n\nexport class EdgeLabelModel {\n public size = signal({ width: 0, height: 0 })\n\n constructor(public edgeLabel: EdgeLabel) { }\n}\n","import { Point } from \"../interfaces/point.interface\";\n\n/**\n * Get point on line\n *\n * https://math.stackexchange.com/questions/563566/how-do-i-find-the-middle1-2-1-3-1-4-etc-of-a-line\n */\nexport function getPointOnLineByRatio(start: Point, end: Point, ratio: number): Point {\n return {\n x: (1 - ratio) * start.x + ratio * end.x,\n y: (1 - ratio) * start.y + ratio * end.y,\n };\n}\n","import { PathData } from \"../../interfaces/path-data.interface\";\nimport { Point } from \"../../interfaces/point.interface\";\nimport { path as d3Path } from 'd3-path'\nimport { UsingPoints } from \"../../types/using-points.type\";\nimport { getPointOnLineByRatio } from \"../point-on-line-by-ratio\";\n\nexport function straightPath(\n source: Point,\n target: Point,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const [start, center, end] = usingPoints\n const nullPoint = { x: 0, y: 0 }\n\n const path = d3Path()\n\n path.moveTo(source.x, source.y)\n path.lineTo(target.x, target.y)\n\n return {\n path: path.toString(),\n points: {\n start: start ? getPointOnLineByRatio(source, target, .15) : nullPoint,\n center: center ? getPointOnLineByRatio(source, target, .50) : nullPoint,\n end: end ? getPointOnLineByRatio(source, target, .85) : nullPoint,\n }\n }\n}\n","import { PathData } from '../../interfaces/path-data.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Path, path as d3Path } from 'd3-path';\nimport { UsingPoints } from '../../types/using-points.type';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath(\n source: Point,\n target: Point,\n sourcePosition: Position,\n targetPosition: Position,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const path = d3Path();\n\n path.moveTo(source.x, source.y);\n\n const distanceVector = { x: source.x - target.x, y: source.y - target.y };\n\n const firstControl = calcControlPoint(source, sourcePosition, distanceVector);\n const secondControl = calcControlPoint(target, targetPosition, distanceVector);\n\n path.bezierCurveTo(\n firstControl.x,\n firstControl.y,\n secondControl.x,\n secondControl.y,\n target.x,\n target.y\n );\n\n return getPathData(\n path,\n source,\n target,\n firstControl,\n secondControl,\n usingPoints\n );\n}\n\n/**\n * Calculate control point based on provided point\n *\n * @param point relative this point control point is gonna be computed (the source or the target)\n * @param pointPosition position of {point} on block\n * @param distanceVector transmits the distance between the source and the target as x and y coordinates\n */\n\nfunction calcControlPoint(\n point: Point,\n pointPosition: Position,\n distanceVector: Point\n) {\n const factorPoint = { x: 0, y: 0 };\n\n switch (pointPosition) {\n case 'top':\n factorPoint.y = 1;\n break;\n case 'bottom':\n factorPoint.y = -1;\n break;\n case 'right':\n factorPoint.x = 1;\n break;\n case 'left':\n factorPoint.x = -1;\n break;\n }\n\n // TODO: explain name\n const fullDistanceVector = {\n x: distanceVector.x * Math.abs(factorPoint.x),\n y: distanceVector.y * Math.abs(factorPoint.y),\n };\n\n // TODO: probably need to make this configurable\n const curvature = 0.25;\n // thanks colleagues from react/svelte world\n // https://github.com/xyflow/xyflow/blob/f0117939bae934447fa7f232081f937169ee23b5/packages/system/src/utils/edges/bezier-edge.ts#L56\n const controlOffset =\n curvature * 25 * Math.sqrt(Math.abs(fullDistanceVector.x + fullDistanceVector.y));\n\n return {\n x: point.x + factorPoint.x * controlOffset,\n y: point.y - factorPoint.y * controlOffset,\n };\n}\n\nfunction getPathData(\n path: Path,\n source: Point,\n target: Point,\n firstControl: Point,\n secondControl: Point,\n usingPoints: UsingPoints\n): PathData {\n const [start, center, end] = usingPoints;\n\n const nullPoint = { x: 0, y: 0 };\n\n return {\n path: path.toString(),\n points: {\n start: start\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.1)\n : nullPoint,\n center: center\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.5)\n : nullPoint,\n end: end\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.9)\n : nullPoint,\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n controlPoint1: Point,\n controlPoint2: Point,\n ratio: number\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(\n sourcePoint,\n controlPoint1,\n ratio\n );\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(\n controlPoint1,\n controlPoint2,\n ratio\n );\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(\n controlPoint2,\n targetPoint,\n ratio\n );\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio\n );\n}\n","import { computed } from \"@angular/core\";\nimport { EdgeLabelPosition } from \"../interfaces/edge-label.interface\";\nimport { Edge, Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { EdgeLabelModel } from \"./edge-label.model\";\nimport { NodeModel } from \"./node.model\";\nimport { straightPath } from \"../math/edge-path/straigh-path\";\nimport { bezierPath } from \"../math/edge-path/bezier-path\";\nimport { UsingPoints } from \"../types/using-points.type\";\nimport { Point } from \"../interfaces/point.interface\";\nimport { HandleModel } from \"./handle.model\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\n\nexport class EdgeModel {\n public source!: NodeModel\n public target!: NodeModel\n public curve: Curve\n public type: EdgeType\n\n public detached = computed(() => {\n if (!this.source || !this.target) {\n return true\n }\n\n let existsSourceHandle = false\n let existsTargetHandle = false\n\n if (this.edge.sourceHandle) {\n existsSourceHandle = !!this.source.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n existsSourceHandle = !!this.source.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!this.target.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n existsTargetHandle = !!this.target.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n return !existsSourceHandle || !existsTargetHandle\n })\n\n public detached$ = toObservable(this.detached)\n\n public path = computed(() => {\n let source: HandleModel | undefined\n if (this.edge.sourceHandle) {\n source = this.source.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n source = this.source.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n let target: HandleModel | undefined\n if (this.edge.targetHandle) {\n target = this.target.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n target = this.target.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n // TODO: don't like this\n if (!source || !target) {\n return {\n path: '',\n points: {\n start: { x: 0, y: 0 },\n center: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n }\n }\n }\n\n switch (this.curve) {\n case 'straight':\n return straightPath(source.pointAbsolute(), target.pointAbsolute(), this.usingPoints)\n case 'bezier':\n return bezierPath(\n source.pointAbsolute(), target.pointAbsolute(),\n source.rawHandle.position,\n target.rawHandle.position,\n this.usingPoints\n )\n }\n })\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {}\n\n private usingPoints: UsingPoints\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default'\n this.curve = edge.curve ?? 'bezier'\n\n if (edge.edgeLabels?.start) this.edgeLabels.start = new EdgeLabelModel(edge.edgeLabels.start)\n if (edge.edgeLabels?.center) this.edgeLabels.center = new EdgeLabelModel(edge.edgeLabels.center)\n if (edge.edgeLabels?.end) this.edgeLabels.end = new EdgeLabelModel(edge.edgeLabels.end)\n\n this.usingPoints = [!!this.edgeLabels.start, !!this.edgeLabels.center, !!this.edgeLabels.end]\n }\n}\n","import { NodeModel } from \"../models/node.model\";\nimport { Node } from '../interfaces/node.interface';\nimport { EdgeModel } from \"../models/edge.model\";\nimport { Edge } from \"../interfaces/edge.interface\";\n\nexport class ReferenceKeeper {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node, NodeModel> = new Map()\n oldNodeModels.forEach(model => oldNodesMap.set(model.node, model))\n\n return newNodes.map(newNode => {\n if (oldNodesMap.has(newNode)) return oldNodesMap.get(newNode)!\n else return new NodeModel(newNode)\n })\n }\n\n /**\n * Create new models for new edge references and keep old models for old edge references\n */\n public static edges(newEdges: Edge[], oldEdgeModels: EdgeModel[]) {\n const oldEdgesMap: Map<Edge, EdgeModel> = new Map()\n oldEdgeModels.forEach(model => oldEdgesMap.set(model.edge, model))\n\n return newEdges.map(newEdge => {\n if (oldEdgesMap.has(newEdge)) return oldEdgesMap.get(newEdge)!\n else return new EdgeModel(newEdge)\n })\n }\n}\n","import { Injectable, Signal, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Observable, asyncScheduler, filter, map, merge, observeOn, of, pairwise, skip, switchMap } from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n // Check for nodes list change and watch for specific node from this list change its position\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.point$.pipe(\n // skip initial position from signal\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n // For now it's a single node, later this list will also be filled\n // with child node position changes\n map(changedNode => [\n { type: 'position', id: changedNode.node.id, point: changedNode.point() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n newList.filter(node => !oldList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'add', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n oldList.filter(node => !newList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'remove', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$\n ).pipe(\n // this fixes a bug when on fire node event change,\n // you can't get valid list of detached edges\n observeOn(asyncScheduler),\n )\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Observable, asyncScheduler, combineLatest, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap, zip } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\nconst haveSameContents = <T>(a: T[], b: T[]) =>\n a.length === b.length &&\n [...new Set([...a, ...b])].every(\n v => a.filter(e => e === v).length === b.filter(e => e === v).length\n );\n\n@Injectable()\nexport class EdgeChangesService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected edgeDetachedChange$ = merge(\n toObservable(\n computed(() => {\n const nodes = this.entitiesService.nodes()\n const edges = untracked(this.entitiesService.edges)\n\n return edges.filter(({ source, target }) =>\n !nodes.includes(source) || !nodes.includes(target)\n )\n })\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(\n ...edges.map(e => e.detached$.pipe(map(() => e)))\n )\n }),\n map((edges) => edges.filter(e => e.detached())),\n // TODO check why there are 2 emits\n skip(2),\n )\n ).pipe(\n // here we check if 2 approaches to detect detached edges emits same\n // and same values (this may happen on node delete)\n distinctUntilChanged(haveSameContents),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter(edge => !oldList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'add', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter(edge => !newList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$\n )\n .pipe(\n // this fixes the case when user gets 'deteched' changes\n // and tries to delete these edges inside stream\n // angular may ignore this change because [edges] input changed\n // right after [nodes] input change\n observeOn(asyncScheduler),\n )\n}\n","import { Directive, EventEmitter, Output, effect, inject } from '@angular/core';\nimport { NodeChange } from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\n@Directive({\n selector: '[changesController]',\n standalone: true\n})\nexport class ChangesControllerDirective {\n protected nodesChangeService = inject(NodesChangeService)\n protected edgesChangeService = inject(EdgeChangesService)\n\n /**\n * Watch nodes change\n */\n @Output()\n public onNodesChange = new EventEmitter<NodeChange[]>()\n\n /**\n * Watch nodes change\n */\n @Output()\n public onEdgesChange = new EventEmitter<EdgeChange[]>()\n\n protected nodesChangeProxySubscription = this.nodesChangeService.changes$\n .pipe(\n tap((changes) => this.onNodesChange.emit(changes)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected edgesChangeProxySubscription = this.edgesChangeService.changes$\n .pipe(\n tap((changes) => this.onEdgesChange.emit(changes)),\n takeUntilDestroyed()\n )\n .subscribe()\n}\n","import { Injectable, Signal, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\nimport { Point } from '../interfaces/point.interface';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\n\nexport interface NodeHandle {\n position: Position\n type: HandleType\n parentPosition: Point\n parentSize: { width: number, height: number }\n id?: string\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null)\n\n public createHandle(newHandle: HandleModel) {\n const node = this.node()\n if (node) {\n node.rawHandles.update(handles => [...handles, newHandle])\n }\n }\n\n public destroyHandle(handleToDestoy: HandleModel) {\n const node = this.node()\n // TODO: microtask\n if (node) {\n queueMicrotask(() => node.rawHandles.update(\n handles => handles.filter(handle => handle !== handleToDestoy)\n ));\n }\n }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, Injector, Input, NgZone, OnDestroy, OnInit, TemplateRef, ViewChild, computed, effect, inject, runInInjectionContext, signal } from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService, batchStatusChanges } from '../../services/flow-status.service';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\n@Component({\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService]\n})\nexport class NodeComponent implements OnInit, AfterViewInit, OnDestroy {\n protected handleService = inject(HandleService)\n protected injector = inject(Injector)\n\n @Input()\n public nodeModel!: NodeModel\n\n @Input()\n public nodeHtmlTemplate?: TemplateRef<any>\n\n @ViewChild('nodeContent')\n public nodeContentRef!: ElementRef<SVGGraphicsElement>\n\n @ViewChild('htmlWrapper')\n public htmlWrapperRef!: ElementRef<HTMLDivElement>\n\n private draggableService = inject(DraggableService)\n private flowStatusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef)\n\n protected showMagnet = computed(() =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation'\n )\n\n private sourceHanldeState = signal<HandleState>('idle')\n private targetHandleState = signal<HandleState>('idle')\n\n public ngOnInit() {\n this.handleService.node.set(this.nodeModel);\n\n this.draggableService.toggleDraggable(this.hostRef.nativeElement, this.nodeModel)\n }\n\n public ngAfterViewInit(): void {\n // TODO remove microtask\n queueMicrotask(() => {\n if (this.nodeModel.node.type === 'default') {\n const { width, height } = this.nodeContentRef.nativeElement.getBBox()\n this.nodeModel.size.set({ width, height })\n }\n\n if (this.nodeModel.node.type === 'html-template') {\n const width = this.htmlWrapperRef.nativeElement.clientWidth\n const height = this.htmlWrapperRef.nativeElement.clientHeight\n\n this.nodeModel.size.set({ width, height })\n }\n })\n }\n\n public ngOnDestroy(): void {\n this.draggableService.destroy(this.hostRef.nativeElement)\n }\n\n protected startConnection(event: MouseEvent, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation()\n\n this.flowStatusService.setConnectionStartStatus(this.nodeModel, handle)\n }\n\n protected endConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-validation') {\n const sourceNode = status.payload.sourceNode\n const targetNode = this.nodeModel\n const sourceHandle = status.payload.sourceHandle\n const targetHandle = status.payload.targetHandle\n\n batchStatusChanges(\n // call to create connection\n () => this.flowStatusService.setConnectionEndStatus(sourceNode, targetNode, sourceHandle, targetHandle),\n // when connection created, we need go back to idle status\n () => this.flowStatusService.setIdleStatus()\n )\n }\n }\n\n /**\n * TODO srp\n */\n protected validateTargetHandle(targetHandle: HandleModel) {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceNode = status.payload.sourceNode\n const sourceHandle = status.payload.sourceHandle\n const source = sourceNode.node.id\n\n const targetNode = this.nodeModel\n const target = targetNode.node.id\n\n const valid = this.flowEntitiesService.connection().validator({\n source,\n target,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id\n })\n this.targetHandleState.set(valid ? 'valid' : 'invalid')\n\n this.flowStatusService.setConnectionValidationStatus(valid, sourceNode, targetNode, sourceHandle, targetHandle)\n }\n }\n\n /**\n * TODO srp\n */\n protected resetValidateTargetHandle() {\n this.targetHandleState.set('idle')\n\n // drop back to start status\n const status = this.flowStatusService.status()\n if (status.state === 'connection-validation') {\n this.flowStatusService.setConnectionStartStatus(status.payload.sourceNode, status.payload.sourceHandle)\n }\n }\n\n // protected getHandleContext(type: 'source' | 'target') {\n // if (type === 'source') {\n // return {\n // $implicit: {\n // point: this.nodeModel.sourceOffset,\n // alignedPoint: this.nodeModel.sourceOffsetAligned,\n // state: this.sourceHanldeStateReadonly\n // }\n // }\n // }\n\n // return {\n // $implicit: {\n // point: this.nodeModel.targetOffset,\n // alignedPoint: this.nodeModel.targetOffsetAligned,\n // state: this.targetHanldeStateReadonly\n // }\n // }\n // }\n}\n","<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n #sourceHandle\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle()\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle()\"\n />\n</ng-container>\n\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, TemplateRef, ViewChild, computed, signal } from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Point } from '../../interfaces/point.interface';\n\n@Component({\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [`\n .edge-label-wrapper {\n width: max-content;\n\n /*\n this is a fix for bug in chrome, for some reason if the div fully matches the size\n of foreignObject there are occurs some visual artifacts around this div\n */\n margin-top: 1px;\n margin-left: 1px;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n // TODO: too many inputs\n @Input()\n public model!: EdgeLabelModel\n\n @Input()\n public edgeModel!: EdgeModel\n\n @Input()\n public set point(point: Point) { this.pointSignal.set(point) }\n\n @Input()\n public htmlTemplate?: TemplateRef<any>\n\n @ViewChild('edgeLabelWrapper')\n public edgeLabelWrapperRef!: ElementRef<HTMLDivElement>\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.pointSignal()\n\n const { width, height } = this.model.size()\n\n return {\n x: point.x - (width / 2),\n y: point.y - (height / 2)\n }\n })\n\n private pointSignal = signal({ x: 0, y: 0 })\n\n public ngAfterViewInit(): void {\n queueMicrotask(() => {\n // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.\n // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\n const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2\n\n const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n\n this.model.size.set({ width, height })\n })\n }\n\n protected getLabelContext() {\n return {\n $implicit: {\n edge: this.edgeModel.edge,\n label: this.model.edgeLabel\n }\n }\n }\n}\n","<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n","import { ChangeDetectionStrategy, Component, Input, OnInit, Signal, TemplateRef, computed } from '@angular/core';\nimport { EdgeModel } from '../../models/edge.model';\nimport { hashCode } from '../../utils/hash';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\n\n@Component({\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeComponent implements OnInit {\n @Input()\n public model!: EdgeModel\n\n @Input()\n public edgeTemplate?: TemplateRef<EdgeContext>\n\n @Input()\n public edgeLabelHtmlTemplate?: TemplateRef<any>\n\n protected markerStartUrl = computed(() => {\n const marker = this.model.edge.markers?.start\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected markerEndUrl = computed(() => {\n const marker = this.model.edge.markers?.end\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected edgeContext!: EdgeContext\n\n public ngOnInit(): void {\n this.edgeContext = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.model.edge,\n path: computed(() => this.model.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl\n }\n }\n }\n}\n","<svg:path\n *ngIf=\"model.type === 'default'\"\n [attr.d]=\"model.path().path\"\n [attr.marker-start]=\"markerStartUrl()\"\n [attr.marker-end]=\"markerEndUrl()\"\n [attr.stroke]=\"defaultColor\"\n stroke-width=\"2\"\n fill=\"none\"\n/>\n\n<ng-container *ngIf=\"model.type === 'template' && edgeTemplate\">\n <ng-container *ngTemplateOutlet=\"edgeTemplate; context: edgeContext\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.start as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.start\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.center as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.center\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.end as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.end\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\n\n@Directive({ selector: 'g[spacePointContext]' })\nexport class SpacePointContextDirective {\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.mouseMovement()\n\n const point = this.rootSvg.createSVGPoint()\n point.x = movement.x\n point.y = movement.y\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse())\n })\n\n private rootSvg = inject(RootSvgReferenceDirective).element\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n\n private mouseMovement = toSignal(\n fromEvent<MouseEvent>(this.rootSvg, 'mousemove').pipe(\n map(event => ({ x: event.clientX, y: event.clientY })),\n ),\n { initialValue: { x: 0, y: 0 } }\n )\n}\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, computed, inject } from '@angular/core';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { straightPath } from '../../math/edge-path/straigh-path';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { bezierPath } from '../../math/edge-path/bezier-path';\nimport { hashCode } from '../../utils/hash';\nimport { Position } from '../../types/position.type';\n\n@Component({\n selector: 'g[connection]',\n template: `\n <ng-container *ngIf=\"model.type === 'default'\">\n <svg:path\n *ngIf=\"path() as path\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\"\n fill=\"none\"\n stroke-width=\"2\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"model.type === 'template' && template\">\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConnectionComponent {\n @Input({ required: true })\n public model!: ConnectionModel\n\n @Input()\n public template?: TemplateRef<any>\n\n private flowStatusService = inject(FlowStatusService)\n private spacePointContext = inject(SpacePointContextDirective)\n\n protected path = computed(() => {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetPoint = this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n if (status.state === 'connection-validation') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetHandle = status.payload.targetHandle\n // ignore magnet if validation failed\n const targetPoint = status.payload.valid\n ? targetHandle.pointAbsolute()\n : this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = status.payload.valid\n ? targetHandle.rawHandle.position\n : getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n return null\n })\n\n protected markerUrl = computed(() => {\n const marker = this.model.connection.marker\n\n if (marker) {\n return `url(#${hashCode(JSON.stringify(marker))})`\n }\n\n return ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected getContext() {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl\n }\n }\n }\n}\n\nfunction getOppositePostion(position: Position): Position {\n switch (position) {\n case 'top':\n return 'bottom'\n case 'bottom':\n return 'top'\n case 'left':\n return 'right'\n case 'right':\n return 'left'\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\n\n@Component({\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefsComponent {\n @Input({ required: true })\n public markers: Map<number, Marker> = new Map()\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n}\n","<svg:marker\n *ngFor=\"let marker of markers | keyvalue\"\n [attr.id]=\"marker.key\"\n [attr.markerWidth]=\"marker.value.width ?? 16.5\"\n [attr.markerHeight]=\"marker.value.height ?? 16.5\"\n [attr.orient]=\"marker.value.orient ?? 'auto-start-reverse'\"\n viewBox=\"-10 -10 20 20\"\n [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\"\n refX=\"0\"\n refY=\"0\"\n>\n <polyline\n *ngIf=\"marker.value.type === 'arrow-closed' || !marker.value.type\"\n class=\"marker__arrow_closed\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n />\n\n <polyline\n *ngIf=\"marker.value.type === 'arrow'\"\n class=\"marker__arrow_default\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n points=\"-5,-4 0,0 -5,4\"\n />\n</svg:marker>\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n// TODO: too general purpose nane\n@Directive({ selector: 'svg[rootSvgContext]' })\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService)\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n protected resetConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n this.flowStatusService.setIdleStatus()\n }\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Injector, Input, OnChanges, Output, Signal, SimpleChanges, ViewChild, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport { Node } from '../../interfaces/node.interface';\nimport { MapContextDirective } from '../../directives/map-context.directive';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { ViewportService } from '../../services/viewport.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';\nimport { HandlePositions } from '../../interfaces/handle-positions.interface';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { FlowModel } from '../../models/flow.model';\nimport { skip } from 'rxjs';\nimport { Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceKeeper } from '../../utils/reference-keeper';\nimport { NodesChangeService } from '../../services/node-changes.service';\nimport { EdgeChangesService } from '../../services/edge-changes.service';\nimport { NodeChange } from '../../types/node-change.type';\nimport { ChangesControllerDirective } from '../../directives/changes-controller.directive';\nimport { EdgeChange } from '../../types/edge-change.type';\n\nconst connectionControllerHostDirective = {\n directive: ConnectionControllerDirective,\n outputs: ['onConnect']\n}\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: ['onNodesChange', 'onEdgesChange']\n}\n\n@Component({\n selector: 'vflow',\n templateUrl: './vflow.component.html',\n styleUrls: ['./vflow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n DraggableService,\n ViewportService,\n FlowStatusService,\n FlowEntitiesService,\n NodesChangeService,\n EdgeChangesService\n ],\n hostDirectives: [\n connectionControllerHostDirective,\n changesControllerHostDirective\n ]\n})\nexport class VflowComponent {\n // #region DI\n private viewportService = inject(ViewportService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private nodesChangeService = inject(NodesChangeService)\n private edgesChangeService = inject(EdgeChangesService)\n private injector = inject(Injector)\n // #endregion\n\n // #region SETTINGS\n\n /**\n * Size for flow view\n *\n * accepts\n * - absolute size in format [width, height] or\n * - 'auto' to compute size based on parent element size\n */\n @Input()\n public set view(view: [number, number] | 'auto') {\n this.flowModel.view.set(view)\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public minZoom = 0.5\n\n /**\n * Maximum zoom value\n */\n @Input()\n public maxZoom = 3\n\n /**\n * Object that controls flow direction.\n *\n * For example, if you want to archieve right to left direction\n * then you need to pass these positions { source: 'left', target: 'right' }\n *\n * @deprecated\n */\n @Input()\n public set handlePositions(handlePositions: HandlePositions) {\n this.flowModel.handlePositions.set(handlePositions)\n }\n\n /**\n * Background color for flow\n */\n @Input()\n public background: string = '#FFFFFF'\n\n /**\n * Settings for connection (it renders when user tries to create edge between nodes)\n *\n * You need to pass `ConnectionSettings` in this input.\n */\n @Input({ transform: (settings: ConnectionSettings) => new ConnectionModel(settings) })\n public set connection(connection: ConnectionModel) { this.flowEntitiesService.connection.set(connection) }\n\n public get connection() { return this.flowEntitiesService.connection() }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes())\n )\n\n // TODO better to solve this by DI\n bindFlowToNodes(this.flowModel, newModels)\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(newModels, this.flowEntitiesService.edges())\n\n this.flowEntitiesService.nodes.set(newModels)\n }\n\n protected get nodeModels() { return this.flowEntitiesService.nodes() }\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.nodeModels, newModels)\n\n this.flowEntitiesService.edges.set(newModels)\n }\n\n protected get edgeModels() { return this.flowEntitiesService.validEdges() }\n // #endregion\n\n // #region TEMPLATES\n @ContentChild(NodeHtmlTemplateDirective)\n protected nodeHtmlDirective?: NodeHtmlTemplateDirective\n\n @ContentChild(EdgeTemplateDirective)\n protected edgeTemplateDirective?: EdgeTemplateDirective\n\n @ContentChild(EdgeLabelHtmlTemplateDirective)\n protected edgeLabelHtmlDirective?: EdgeLabelHtmlTemplateDirective\n\n @ContentChild(ConnectionTemplateDirective)\n protected connectionTemplateDirective?: ConnectionTemplateDirective\n // #endregion\n\n // #region DIRECTIVES\n @ViewChild(MapContextDirective)\n protected mapContext!: MapContextDirective\n // #endregion\n\n // #region SIGNAL_API\n /**\n * Signal for reading viewport change\n */\n public readonly viewport = this.viewportService.readableViewport.asReadonly()\n\n /**\n * Signal for reading nodes change\n */\n public readonly nodesChange =\n toSignal(this.nodesChangeService.changes$, { initialValue: [] as NodeChange[] })\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange =\n toSignal(this.edgesChangeService.changes$, { initialValue: [] as EdgeChange[] })\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport)\n .pipe(skip(1)) // skip default value that set by signal\n\n /**\n * Observable with nodes change\n */\n public readonly nodesChange$ = this.nodesChangeService.changes$\n\n /**\n * Observable with nodes change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$\n // #endregion\n\n // TODO: probably better to make it injectable\n protected flowModel = new FlowModel()\n\n protected markers = this.flowEntitiesService.markers\n\n // #region METHODS_API\n /**\n * Change viewport to specified state\n *\n * @param viewport viewport state\n */\n public viewportTo(viewport: ViewportState): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: viewport })\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: { zoom } })\n }\n\n /**\n * Move to specified coordinate\n *\n * @param point point where to move\n */\n public panTo(point: Point): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: point })\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.node\n }\n\n /**\n * Sync method to get detached edges\n */\n public getDetachedEdges(): Edge[] {\n return this.flowEntitiesService.getDetachedEdges().map(e => e.edge)\n }\n // #endregion\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node.id\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge.id\n }\n}\n\nfunction bindFlowToNodes(flow: FlowModel, nodes: NodeModel[]) {\n nodes.forEach(n => n.bindFlow(flow))\n}\n\n","<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels; trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels; trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n","import { Component, ElementRef, Input, OnDestroy, OnInit, inject, signal } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\n\n@Component({\n selector: 'handle',\n templateUrl: './handle.component.html'\n})\nexport class HandleComponent implements OnInit, OnDestroy {\n private handleService = inject(HandleService)\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement\n\n /**\n * At what side of node this component should be placed\n */\n @Input({ required: true })\n public position!: Position\n\n /**\n * Source or target\n */\n @Input({ required: true })\n public type!: 'source' | 'target'\n\n /**\n * Should be used if node has more than one source/target\n */\n @Input()\n public id?: string\n\n public model!: HandleModel\n\n public ngOnInit() {\n queueMicrotask(() => {\n const { width, height, x, y } = this.parentRect()\n\n this.model = new HandleModel(\n {\n position: this.position,\n type: this.type,\n id: this.id,\n parentPosition: { x, y },\n parentSize: { width, height }\n },\n this.handleService.node()!\n )\n\n this.handleService.createHandle(this.model)\n })\n }\n\n public ngOnDestroy(): void {\n this.handleService.destroyHandle(this.model)\n }\n\n private parentRect() {\n const parent = this.element.parentElement!\n\n return {\n x: parent.offsetLeft,\n y: parent.offsetTop,\n width: parent.clientWidth,\n height: parent.clientHeight\n }\n }\n}\n\n","","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VflowComponent } from './components/vflow/vflow.component';\nimport { NodeComponent } from './components/node/node.component';\nimport { MapContextDirective } from './directives/map-context.directive';\nimport { EdgeComponent } from './components/edge/edge.component';\nimport { EdgeLabelComponent } from './components/edge-label/edge-label.component';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from './directives/template.directive';\nimport { ConnectionComponent } from './components/connection/connection.component';\nimport { SpacePointContextDirective } from './directives/space-point-context.directive';\nimport { RootSvgReferenceDirective } from './directives/reference.directive';\nimport { RootSvgContextDirective } from './directives/root-svg-context.directive';\nimport { DefsComponent } from './components/defs/defs.component';\nimport { HandleComponent } from './components/handle/handle.component';\n\nconst components = [\n VflowComponent,\n NodeComponent,\n EdgeComponent,\n EdgeLabelComponent,\n ConnectionComponent,\n HandleComponent,\n DefsComponent\n]\n\nconst directives = [\n SpacePointContextDirective,\n MapContextDirective,\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n]\n\nconst templateDirectives = [\n NodeHtmlTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective\n]\n\n@NgModule({\n imports: [CommonModule],\n exports: [\n VflowComponent,\n HandleComponent,\n ...templateDirectives\n ],\n declarations: [...components, ...directives, ...templateDirectives],\n})\nexport class VflowModule { }\n","// Modules\nexport * from './lib/vflow/vflow.module';\n\n// Interfaces\nexport * from './lib/vflow/interfaces/node.interface';\nexport * from './lib/vflow/interfaces/point.interface';\nexport * from './lib/vflow/interfaces/edge.interface';\nexport * from './lib/vflow/interfaces/edge-label.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection-settings.interface';\nexport * from './lib/vflow/interfaces/handle-positions.interface';\nexport * from './lib/vflow/interfaces/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\n\n// Types\nexport * from './lib/vflow/types/node-change.type';\nexport * from './lib/vflow/types/edge-change.type';\nexport * from './lib/vflow/types/position.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/components/handle/handle.component';\n\n// Directives\nexport * from './lib/vflow/directives/template.directive';\nexport * from './lib/vflow/directives/connection-controller.directive';\nexport * from './lib/vflow/directives/changes-controller.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["path","d3Path","i2.EdgeLabelComponent","i1.ConnectionControllerDirective","i2.ChangesControllerDirective","i3","i4.NodeComponent","i5.EdgeComponent","i6.ConnectionComponent","i7.DefsComponent","i8.SpacePointContextDirective","i9.MapContextDirective","i10.RootSvgReferenceDirective","i11.RootSvgContextDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/services/viewport.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-defined.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/reference.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/map-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/round.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/draggable.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/template.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/add-nodes-to-edges.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/flow.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/connection.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/hash.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-entities.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/node.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge-label.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/point-on-line-by-ratio.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/straigh-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/math/edge-path/bezier-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/reference-keeper.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-changes.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/changes-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/resizable.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/run-in-injection-context.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/microtask.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/handle-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/node/node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge-label/edge-label.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/edge/edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/defs/defs.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/vflow/vflow.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.module.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Injectable, Signal, WritableSignal, signal } from '@angular/core';\nimport { Point } from '../interfaces/point.interface';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\n\n@Injectable()\nexport class ViewportService {\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState { return { zoom: 1, x: 0, y: 0 } }\n\n /**\n * Internal signal that accepts value from user by lib api\n * When this signal changes, lib sets new view state and update readableViewport signal\n */\n public readonly writableViewport: WritableSignal<WritableViewport> = signal({\n changeType: 'initial',\n state: ViewportService.getDefaultViewport()\n })\n\n /**\n * Public signal with viewport state. User can directly read from this signal. It's updated by:\n * - user events on flow\n * - writableViewport signal\n */\n public readonly readableViewport: WritableSignal<ViewportState> = signal(ViewportService.getDefaultViewport())\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n}\n","export function isDefined<T>(data: T | undefined): data is T {\n return data !== undefined\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: 'svg[rootSvgRef]'\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement\n}\n","import { Directive, ElementRef, Injector, Input, OnInit, effect, inject, runInInjectionContext } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, zoom, zoomIdentity, zoomTransform } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>\n\n@Directive({ selector: 'g[mapContext]' })\nexport class MapContextDirective implements OnInit {\n @Input()\n public minZoom!: number\n\n @Input()\n public maxZoom!: number\n\n protected rootSvg = inject(RootSvgReferenceDirective).element\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n protected viewportService = inject(ViewportService)\n\n protected rootSvgSelection = select(this.rootSvg)\n protected zoomableSelection = select(this.host)\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n // TODO: hack with timer fixes wrong node scaling (handle positions not matched with content size)\n protected manualViewportChangeEffect = effect(() => setTimeout(() => {\n const viewport = this.viewportService.writableViewport()\n const state = viewport.state\n\n if (viewport.changeType === 'initial') {\n return\n }\n\n // If only zoom provided\n if (isDefined(state.zoom) && (!isDefined(state.x) && !isDefined(state.y))) {\n this.rootSvgSelection.call(this.zoomBehavior.scaleTo, state.zoom)\n\n return\n }\n\n // If only pan provided\n if ((isDefined(state.x) && isDefined(state.y)) && !isDefined(state.zoom)) {\n this.rootSvgSelection.call(this.zoomBehavior.translateTo, state.x, state.y)\n\n return\n }\n\n // If whole viewort state provided\n if (isDefined(state.x) && isDefined(state.y) && isDefined(state.zoom)) {\n this.rootSvgSelection.call(this.zoomBehavior.transform,\n zoomIdentity.translate(state.x, state.y).scale(state.zoom)\n )\n\n return\n }\n }), { allowSignalWrites: true })\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.minZoom, this.maxZoom])\n .on('zoom', this.handleZoom)\n\n this.rootSvgSelection.call(this.zoomBehavior)\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set({ zoom: transform.k, x: transform.x, y: transform.y })\n\n this.zoomableSelection.attr('transform', transform.toString())\n }\n}\n","export const round = (num: number) => Math.round(num * 100) / 100\n","import { Injectable } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3DragEvent, drag } from 'd3-drag';\nimport { NodeModel } from '../models/node.model';\nimport { round } from '../utils/round';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>\n\n@Injectable()\nexport class DraggableService {\n /**\n * Enable or disable draggable behavior for element.\n * model contains draggable flag which declares if draggable should be enabled or not\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public toggleDraggable(element: Element, model: NodeModel) {\n const d3Element = select(element)\n\n const behavior = model.draggable\n ? this.getDragBehavior(model)\n : this.getIgnoreDragBehavior()\n\n d3Element.call(behavior)\n }\n\n /**\n * TODO: not shure if this work, need to check\n *\n * @param element\n */\n public destroy(element: Element) {\n select(element).on('.drag', null)\n }\n\n /**\n * Node drag behavior. Updated node's coordinate according to dragging\n *\n * @param model\n * @returns\n */\n private getDragBehavior(model: NodeModel) {\n let deltaX: number\n let deltaY: number\n\n return drag()\n .on('start', (event: DragEvent) => {\n deltaX = model.point().x - event.x\n deltaY = model.point().y - event.y\n })\n\n .on('drag', (event: DragEvent) => {\n model.point.set(\n {\n x: round(event.x + deltaX),\n y: round(event.y + deltaY)\n }\n )\n })\n }\n\n /**\n * Specify ignoring drag behavior. It's responsible for not moving the map when user tries to drag node\n * with disabled drag behavior\n */\n private getIgnoreDragBehavior() {\n return drag()\n .on('drag', (event: DragEvent) => {\n (event.sourceEvent as Event).stopPropagation()\n })\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { EdgeContext } from '../interfaces/template-context.interface';\n\n@Directive({ selector: 'ng-template[edge]' })\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[connection]' })\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[edgeLabelHtml]' })\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[nodeHtml]' })\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n\n@Directive({ selector: 'ng-template[handle]' })\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef)\n}\n","import { EdgeModel } from \"../models/edge.model\"\nimport { NodeModel } from \"../models/node.model\"\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]) {\n const nodesById = nodes.reduce((acc, n) => {\n acc[n.node.id] = n\n\n return acc\n }, {} as { [nodeId: string]: NodeModel })\n\n edges.forEach(e => {\n e.source.set(nodesById[e.edge.source])\n e.target.set(nodesById[e.edge.target])\n })\n}\n","import { Signal, WritableSignal, computed, signal } from \"@angular/core\";\nimport { HandlePositions } from \"../interfaces/handle-positions.interface\";\n\nexport class FlowModel {\n /**\n * Global setting with handle positions. Nodes derive this value\n *\n * @deprecated\n */\n public handlePositions: WritableSignal<HandlePositions> = signal({ source: 'right', target: 'left' })\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400])\n\n public flowWidth = computed(() => this.view() === 'auto' ? '100%' : this.view()[0])\n\n public flowHeight = computed(() => this.view() === 'auto' ? '100%' : this.view()[1])\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\n\nexport interface FlowStatusIdle {\n state: 'idle',\n payload: null\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start',\n payload: {\n sourceNode: NodeModel\n sourceHandle: HandleModel\n }\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation',\n payload: {\n sourceNode: NodeModel\n targetNode: NodeModel\n sourceHandle: HandleModel\n targetHandle: HandleModel\n valid: boolean\n }\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end',\n payload: {\n sourceNode: NodeModel\n targetNode: NodeModel\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n }\n}\n\nexport type FlowStatus =\n FlowStatusIdle |\n FlowStatusConnectionStart |\n FlowStatusConnectionValidation |\n FlowStatusConnectionEnd\n\n@Injectable()\nexport class FlowStatusService {\n public readonly status = signal<FlowStatus>({ state: 'idle', payload: null })\n\n public setIdleStatus() {\n this.status.set({ state: 'idle', payload: null })\n }\n\n public setConnectionStartStatus(sourceNode: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { sourceNode, sourceHandle } })\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n sourceNode: NodeModel,\n targetNode: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel\n ) {\n this.status.set({ state: 'connection-validation', payload: { sourceNode, targetNode, sourceHandle, targetHandle, valid } })\n }\n\n public setConnectionEndStatus(sourceNode: NodeModel, targetNode: NodeModel, sourceHandle: HandleModel, targetHandle: HandleModel) {\n this.status.set({ state: 'connection-end', payload: { sourceNode, targetNode, sourceHandle, targetHandle } })\n }\n}\n\n/**\n * Batch status changes together to call them one after another\n *\n * @param changes list of set[FlowStatus.state]Status() calls\n */\nexport function batchStatusChanges(...changes: Function[]) {\n if (changes.length) {\n const [firstChange, ...restChanges] = changes\n // first change is sync\n firstChange()\n // without timer, subscribed effects/comuted signals only get latest value\n restChanges.forEach(change => setTimeout(() => change()))\n }\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from \"../interfaces/connection-settings.interface\";\nimport { Curve, EdgeType } from \"../interfaces/edge.interface\";\n\nexport class ConnectionModel {\n public curve: Curve\n public type: EdgeType\n public validator: ConnectionValidatorFn\n\n constructor(public connection: ConnectionSettings) {\n this.curve = connection.curve ?? 'bezier'\n this.type = connection.type ?? 'default'\n this.validator = connection.validator ?? (() => true)\n }\n}\n","export function hashCode(str: string): number {\n return str.split('').reduce((a, b) => {\n a = ((a << 5) - a) + b.charCodeAt(0)\n\n return a & a\n }, 0)\n}\n","import { Injectable, computed, effect, signal, untracked } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { EdgeModel } from '../models/edge.model';\nimport { ConnectionModel } from '../models/connection.model';\nimport { Marker } from '../interfaces/marker.interface';\nimport { hashCode } from '../utils/hash';\n\n@Injectable()\nexport class FlowEntitiesService {\n public readonly nodes = signal<NodeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly edges = signal<EdgeModel[]>([], {\n // empty arrays considered equal, other arrays may not be equal\n equal: (a, b) => !a.length && !b.length ? true : a === b\n })\n\n public readonly connection = signal<ConnectionModel>(new ConnectionModel({}))\n\n public readonly markers = computed(() => {\n const markersMap = new Map<number, Marker>()\n\n this.validEdges().forEach(e => {\n if (e.edge.markers?.start) {\n const hash = hashCode(JSON.stringify(e.edge.markers.start))\n markersMap.set(hash, e.edge.markers.start)\n }\n\n if (e.edge.markers?.end) {\n const hash = hashCode(JSON.stringify(e.edge.markers.end))\n markersMap.set(hash, e.edge.markers.end)\n }\n })\n\n const connectionMarker = this.connection().connection.marker\n if (connectionMarker) {\n const hash = hashCode(JSON.stringify(connectionMarker))\n markersMap.set(hash, connectionMarker)\n }\n\n return markersMap\n })\n\n public readonly validEdges = computed(() => {\n const nodes = this.nodes()\n\n return this.edges().filter(e => nodes.includes(e.source()!) && nodes.includes(e.target()!))\n })\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ node }) => node.id === id) as NodeModel<T> | undefined\n }\n\n public getDetachedEdges() {\n return this.edges().filter(e => e.detached())\n }\n}\n","import { Directive, EventEmitter, Output, effect, inject } from '@angular/core';\nimport { Connection } from '../interfaces/connection.interface';\nimport { FlowStatusService } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\n\n@Directive({\n selector: '[connectionController]',\n standalone: true\n})\nexport class ConnectionControllerDirective {\n /**\n * This event fires when user tries to create new Edge.\n *\n * `Connection` is an entity that contains data about source and target nodes.\n *\n * Also it's important to note, that this event only fires when connection is valid by validator function in `ConnectionSettings`,\n * by default without passing the validator every connection concidered valid.\n */\n @Output()\n public onConnect = new EventEmitter<Connection>()\n\n private statusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n\n protected connectEffect = effect(() => {\n const status = this.statusService.status()\n\n if (status.state === 'connection-end') {\n const sourceModel = status.payload.sourceNode\n const targetModel = status.payload.targetNode\n\n const source = sourceModel.node.id\n const target = targetModel.node.id\n\n const sourceHandle = status.payload.sourceHandle.rawHandle.id\n const targetHandle = status.payload.targetHandle.rawHandle.id\n\n const connection = this.flowEntitiesService.connection()\n\n if (connection.validator({ source, target, sourceHandle, targetHandle })) {\n this.onConnect.emit({ source, target, sourceHandle, targetHandle })\n }\n }\n }, { allowSignalWrites: true })\n}\n","import { computed, signal } from '@angular/core'\nimport { Node } from '../interfaces/node.interface'\nimport { FlowModel } from './flow.model'\nimport { isDefined } from '../utils/is-defined'\nimport { toObservable } from '@angular/core/rxjs-interop'\nimport { HandleModel } from './handle.model'\n\nexport class NodeModel<T = unknown> {\n public point = signal({ x: 0, y: 0 })\n\n public point$ = toObservable(this.point)\n\n public size = signal({ width: 0, height: 0 })\n\n public pointTransform = computed(() => `translate(${this.point().x}, ${this.point().y})`)\n\n // Now source and handle positions derived from parent flow\n public sourcePosition = computed(() => this.flow.handlePositions().source)\n public targetPosition = computed(() => this.flow.handlePositions().target)\n\n public handles = signal<HandleModel[]>([])\n\n public handles$ = toObservable(this.handles)\n\n public draggable = true\n\n // disabled for configuration for now\n public readonly magnetRadius = 20\n\n private flow!: FlowModel\n\n constructor(\n public node: Node<T>\n ) {\n this.point.set(node.point)\n\n if (isDefined(node.draggable)) this.draggable = node.draggable\n }\n\n /**\n * Bind parent flow model to node\n *\n * @param flow parent flow\n */\n public bindFlow(flow: FlowModel) {\n this.flow = flow\n }\n}\n","import { signal } from \"@angular/core\"\nimport { EdgeLabel } from \"../interfaces/edge-label.interface\"\n\nexport class EdgeLabelModel {\n public size = signal({ width: 0, height: 0 })\n\n constructor(public edgeLabel: EdgeLabel) { }\n}\n","import { Point } from \"../interfaces/point.interface\";\n\n/**\n * Get point on line\n *\n * https://math.stackexchange.com/questions/563566/how-do-i-find-the-middle1-2-1-3-1-4-etc-of-a-line\n */\nexport function getPointOnLineByRatio(start: Point, end: Point, ratio: number): Point {\n return {\n x: (1 - ratio) * start.x + ratio * end.x,\n y: (1 - ratio) * start.y + ratio * end.y,\n };\n}\n","import { PathData } from \"../../interfaces/path-data.interface\";\nimport { Point } from \"../../interfaces/point.interface\";\nimport { path as d3Path } from 'd3-path'\nimport { UsingPoints } from \"../../types/using-points.type\";\nimport { getPointOnLineByRatio } from \"../point-on-line-by-ratio\";\n\nexport function straightPath(\n source: Point,\n target: Point,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const [start, center, end] = usingPoints\n const nullPoint = { x: 0, y: 0 }\n\n const path = d3Path()\n\n path.moveTo(source.x, source.y)\n path.lineTo(target.x, target.y)\n\n return {\n path: path.toString(),\n points: {\n start: start ? getPointOnLineByRatio(source, target, .15) : nullPoint,\n center: center ? getPointOnLineByRatio(source, target, .50) : nullPoint,\n end: end ? getPointOnLineByRatio(source, target, .85) : nullPoint,\n }\n }\n}\n","import { PathData } from '../../interfaces/path-data.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Path, path as d3Path } from 'd3-path';\nimport { UsingPoints } from '../../types/using-points.type';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath(\n source: Point,\n target: Point,\n sourcePosition: Position,\n targetPosition: Position,\n usingPoints: UsingPoints = [false, false, false]\n): PathData {\n const path = d3Path();\n\n path.moveTo(source.x, source.y);\n\n const distanceVector = { x: source.x - target.x, y: source.y - target.y };\n\n const firstControl = calcControlPoint(source, sourcePosition, distanceVector);\n const secondControl = calcControlPoint(target, targetPosition, distanceVector);\n\n path.bezierCurveTo(\n firstControl.x,\n firstControl.y,\n secondControl.x,\n secondControl.y,\n target.x,\n target.y\n );\n\n return getPathData(\n path,\n source,\n target,\n firstControl,\n secondControl,\n usingPoints\n );\n}\n\n/**\n * Calculate control point based on provided point\n *\n * @param point relative this point control point is gonna be computed (the source or the target)\n * @param pointPosition position of {point} on block\n * @param distanceVector transmits the distance between the source and the target as x and y coordinates\n */\n\nfunction calcControlPoint(\n point: Point,\n pointPosition: Position,\n distanceVector: Point\n) {\n const factorPoint = { x: 0, y: 0 };\n\n switch (pointPosition) {\n case 'top':\n factorPoint.y = 1;\n break;\n case 'bottom':\n factorPoint.y = -1;\n break;\n case 'right':\n factorPoint.x = 1;\n break;\n case 'left':\n factorPoint.x = -1;\n break;\n }\n\n // TODO: explain name\n const fullDistanceVector = {\n x: distanceVector.x * Math.abs(factorPoint.x),\n y: distanceVector.y * Math.abs(factorPoint.y),\n };\n\n // TODO: probably need to make this configurable\n const curvature = 0.25;\n // thanks colleagues from react/svelte world\n // https://github.com/xyflow/xyflow/blob/f0117939bae934447fa7f232081f937169ee23b5/packages/system/src/utils/edges/bezier-edge.ts#L56\n const controlOffset =\n curvature * 25 * Math.sqrt(Math.abs(fullDistanceVector.x + fullDistanceVector.y));\n\n return {\n x: point.x + factorPoint.x * controlOffset,\n y: point.y - factorPoint.y * controlOffset,\n };\n}\n\nfunction getPathData(\n path: Path,\n source: Point,\n target: Point,\n firstControl: Point,\n secondControl: Point,\n usingPoints: UsingPoints\n): PathData {\n const [start, center, end] = usingPoints;\n\n const nullPoint = { x: 0, y: 0 };\n\n return {\n path: path.toString(),\n points: {\n start: start\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.1)\n : nullPoint,\n center: center\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.5)\n : nullPoint,\n end: end\n ? getPointOnBezier(source, target, firstControl, secondControl, 0.9)\n : nullPoint,\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n controlPoint1: Point,\n controlPoint2: Point,\n ratio: number\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(\n sourcePoint,\n controlPoint1,\n ratio\n );\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(\n controlPoint1,\n controlPoint2,\n ratio\n );\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(\n controlPoint2,\n targetPoint,\n ratio\n );\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio\n );\n}\n","import { computed, signal } from \"@angular/core\";\nimport { EdgeLabelPosition } from \"../interfaces/edge-label.interface\";\nimport { Edge, Curve, EdgeType } from \"../interfaces/edge.interface\";\nimport { EdgeLabelModel } from \"./edge-label.model\";\nimport { NodeModel } from \"./node.model\";\nimport { straightPath } from \"../math/edge-path/straigh-path\";\nimport { bezierPath } from \"../math/edge-path/bezier-path\";\nimport { UsingPoints } from \"../types/using-points.type\";\nimport { HandleModel } from \"./handle.model\";\nimport { toObservable } from \"@angular/core/rxjs-interop\";\n\nexport class EdgeModel {\n public source = signal<NodeModel | undefined>(undefined)\n public target = signal<NodeModel | undefined>(undefined)\n public curve: Curve\n public type: EdgeType\n\n public detached = computed(() => {\n const source = this.source()\n const target = this.target()\n\n if (!source || !target) {\n return true\n }\n\n let existsSourceHandle = false\n let existsTargetHandle = false\n\n if (this.edge.sourceHandle) {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n existsSourceHandle = !!source.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n existsTargetHandle = !!target.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n return !existsSourceHandle || !existsTargetHandle\n })\n\n public detached$ = toObservable(this.detached)\n\n public path = computed(() => {\n let source: HandleModel | undefined\n if (this.edge.sourceHandle) {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.sourceHandle)\n } else {\n source = this.source()?.handles()\n .find(handle => handle.rawHandle.type === 'source')\n }\n\n let target: HandleModel | undefined\n if (this.edge.targetHandle) {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.id === this.edge.targetHandle)\n } else {\n target = this.target()?.handles()\n .find(handle => handle.rawHandle.type === 'target')\n }\n\n // TODO: don't like this\n if (!source || !target) {\n return {\n path: '',\n points: {\n start: { x: 0, y: 0 },\n center: { x: 0, y: 0 },\n end: { x: 0, y: 0 }\n }\n }\n }\n\n switch (this.curve) {\n case 'straight':\n return straightPath(source.pointAbsolute(), target.pointAbsolute(), this.usingPoints)\n case 'bezier':\n return bezierPath(\n source.pointAbsolute(), target.pointAbsolute(),\n source.rawHandle.position,\n target.rawHandle.position,\n this.usingPoints\n )\n }\n })\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {}\n\n private usingPoints: UsingPoints\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default'\n this.curve = edge.curve ?? 'bezier'\n\n if (edge.edgeLabels?.start) this.edgeLabels.start = new EdgeLabelModel(edge.edgeLabels.start)\n if (edge.edgeLabels?.center) this.edgeLabels.center = new EdgeLabelModel(edge.edgeLabels.center)\n if (edge.edgeLabels?.end) this.edgeLabels.end = new EdgeLabelModel(edge.edgeLabels.end)\n\n this.usingPoints = [!!this.edgeLabels.start, !!this.edgeLabels.center, !!this.edgeLabels.end]\n }\n}\n","import { NodeModel } from \"../models/node.model\";\nimport { Node } from '../interfaces/node.interface';\nimport { EdgeModel } from \"../models/edge.model\";\nimport { Edge } from \"../interfaces/edge.interface\";\n\nexport class ReferenceKeeper {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node, NodeModel> = new Map()\n oldNodeModels.forEach(model => oldNodesMap.set(model.node, model))\n\n return newNodes.map(newNode => {\n if (oldNodesMap.has(newNode)) return oldNodesMap.get(newNode)!\n else return new NodeModel(newNode)\n })\n }\n\n /**\n * Create new models for new edge references and keep old models for old edge references\n */\n public static edges(newEdges: Edge[], oldEdgeModels: EdgeModel[]) {\n const oldEdgesMap: Map<Edge, EdgeModel> = new Map()\n oldEdgeModels.forEach(model => oldEdgesMap.set(model.edge, model))\n\n return newEdges.map(newEdge => {\n if (oldEdgesMap.has(newEdge)) return oldEdgesMap.get(newEdge)!\n else return new EdgeModel(newEdge)\n })\n }\n}\n","import { Injectable, Signal, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Observable, asyncScheduler, filter, map, merge, observeOn, of, pairwise, skip, switchMap } from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n // Check for nodes list change and watch for specific node from this list change its position\n switchMap((nodes) =>\n merge(\n ...nodes.map(node =>\n node.point$.pipe(\n // skip initial position from signal\n skip(1),\n map(() => node)\n )\n )\n )\n ),\n // For now it's a single node, later this list will also be filled\n // with child node position changes\n map(changedNode => [\n { type: 'position', id: changedNode.node.id, point: changedNode.point() }\n ])\n ) satisfies Observable<NodeChange[]>\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n newList.filter(node => !oldList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'add', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes)\n .pipe(\n pairwise(),\n map(([oldList, newList]) =>\n oldList.filter(node => !newList.includes(node))\n ),\n filter((nodes) => !!nodes.length),\n map((nodes) =>\n nodes.map(node => ({ type: 'remove', id: node.node.id }))\n )\n ) satisfies Observable<NodeChange[]>\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$\n ).pipe(\n // this fixes a bug when on fire node event change,\n // you can't get valid list of detached edges\n observeOn(asyncScheduler),\n )\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Observable, asyncScheduler, combineLatest, distinctUntilChanged, filter, map, merge, observeOn, pairwise, skip, switchMap, tap, zip } from 'rxjs';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\nconst haveSameContents = <T>(a: T[], b: T[]) =>\n a.length === b.length &&\n [...new Set([...a, ...b])].every(\n v => a.filter(e => e === v).length === b.filter(e => e === v).length\n );\n\n@Injectable()\nexport class EdgeChangesService {\n protected entitiesService = inject(FlowEntitiesService)\n\n protected edgeDetachedChange$ = merge(\n toObservable(\n computed(() => {\n const nodes = this.entitiesService.nodes()\n const edges = untracked(this.entitiesService.edges)\n\n return edges.filter(({ source, target }) =>\n !nodes.includes(source()!) || !nodes.includes(target()!)\n )\n })\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(\n ...edges.map(e => e.detached$.pipe(map(() => e)))\n )\n }),\n map((edges) => edges.filter(e => e.detached())),\n // TODO check why there are 2 emits\n skip(2),\n )\n ).pipe(\n // here we check if 2 approaches to detect detached edges emits same\n // and same values (this may happen on node delete)\n distinctUntilChanged(haveSameContents),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter(edge => !oldList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'add', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges)\n .pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter(edge => !newList.includes(edge))\n }),\n filter(edges => !!edges.length),\n map((edges) =>\n edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))\n )\n ) satisfies Observable<EdgeChange[]>\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$\n )\n .pipe(\n // this fixes the case when user gets 'deteched' changes\n // and tries to delete these edges inside stream\n // angular may ignore this change because [edges] input changed\n // right after [nodes] input change\n observeOn(asyncScheduler),\n )\n}\n","import { Directive, EventEmitter, Output, effect, inject } from '@angular/core';\nimport { NodeChange } from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { EdgeChange } from '../types/edge-change.type';\n\n@Directive({\n selector: '[changesController]',\n standalone: true\n})\nexport class ChangesControllerDirective {\n protected nodesChangeService = inject(NodesChangeService)\n protected edgesChangeService = inject(EdgeChangesService)\n\n /**\n * Watch nodes change\n */\n @Output()\n public onNodesChange = new EventEmitter<NodeChange[]>()\n\n /**\n * Watch nodes change\n */\n @Output()\n public onEdgesChange = new EventEmitter<EdgeChange[]>()\n\n protected nodesChangeProxySubscription = this.nodesChangeService.changes$\n .pipe(\n tap((changes) => this.onNodesChange.emit(changes)),\n takeUntilDestroyed()\n )\n .subscribe()\n\n protected edgesChangeProxySubscription = this.edgesChangeService.changes$\n .pipe(\n tap((changes) => this.onEdgesChange.emit(changes)),\n takeUntilDestroyed()\n )\n .subscribe()\n}\n","import { Injectable, Signal, TemplateRef, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\nimport { Point } from '../interfaces/point.interface';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\nexport interface NodeHandle {\n position: Position\n type: HandleType\n id?: string\n parentReference?: HTMLElement\n template?: TemplateRef<any>\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null)\n\n public createHandle(newHandle: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(handles => [...handles, newHandle])\n }\n }\n\n public destroyHandle(handleToDestoy: HandleModel) {\n const node = this.node()\n if (node) {\n node.handles.update(\n handles => handles.filter(handle => handle !== handleToDestoy)\n )\n }\n }\n}\n","import { computed, signal } from \"@angular/core\";\nimport { NodeHandle } from \"../services/handle.service\";\nimport { NodeModel } from \"./node.model\";\nimport { Subject, map } from \"rxjs\";\nimport { toSignal } from \"@angular/core/rxjs-interop\";\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\nexport class HandleModel {\n public readonly strokeWidth = 2\n\n /**\n * Pre-computed size for default handle, changed dynamically\n * for custom handles\n */\n public size = signal({\n width: 10 + (2 * this.strokeWidth),\n height: 10 + (2 * this.strokeWidth)\n })\n\n public offset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return {\n x: 0,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'right': return {\n x: this.parentNode.size().width,\n y: this.parentPosition().y + (this.parentSize().height / 2)\n }\n case 'top': return {\n x: this.parentPosition().x + (this.parentSize().width / 2),\n y: 0\n }\n case 'bottom': return {\n x: this.parentPosition().x + this.parentSize().width / 2,\n y: this.parentNode.size().height\n }\n }\n })\n\n public sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left': return { x: -(this.size().width / 2), y: 0 }\n case 'right': return { x: this.size().width / 2, y: 0 }\n case 'top': return { x: 0, y: -(this.size().height / 2) }\n case 'bottom': return { x: 0, y: this.size().height / 2 }\n }\n })\n\n public pointAbsolute = computed(() => {\n return {\n x: this.parentNode.point().x + this.offset().x + this.sizeOffset().x,\n y: this.parentNode.point().y + this.offset().y + this.sizeOffset().y,\n }\n })\n\n public state = signal<HandleState>('idle')\n\n private updateParentSizeAndPosition$ = new Subject<void>()\n\n public parentSize = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => ({\n width: this.parentReference.offsetWidth,\n height: this.parentReference.offsetHeight\n }))\n ),\n {\n initialValue: { width: 0, height: 0 }\n }\n )\n\n public parentPosition = toSignal(\n this.updateParentSizeAndPosition$.pipe(\n map(() => ({\n x: this.parentReference.offsetLeft,\n y: this.parentReference.offsetTop\n }))\n ),\n {\n initialValue: { x: 0, y: 0 }\n }\n )\n\n public parentReference = this.rawHandle.parentReference!\n\n public template = this.rawHandle.template\n\n public templateContext = {\n $implicit: {\n point: this.offset,\n state: this.state\n }\n }\n\n constructor(\n public rawHandle: NodeHandle,\n private parentNode: NodeModel\n ) { }\n\n public updateParent() {\n this.updateParentSizeAndPosition$.next()\n }\n}\n","import { NgZone } from \"@angular/core\";\nimport { Observable } from \"rxjs\";\n\nexport function resizable(elems: Element[], zone: NgZone) {\n return new Observable<ResizeObserverEntry[]>((subscriber) => {\n let ro = new ResizeObserver((entries) => {\n zone.run(() => subscriber.next(entries))\n });\n\n elems.forEach(e => ro.observe(e))\n\n return () => ro.disconnect()\n });\n}\n","import { Directive, Injector, inject, runInInjectionContext } from \"@angular/core\";\n\nexport function InjectionContext(target: any, key: string, descriptor: PropertyDescriptor) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n if (this instanceof WithInjectorDirective) {\n return runInInjectionContext(this.injector, () => originalMethod.apply(this, args))\n } else {\n throw new Error('Class that contains decorated method must extends WithInjectorDirective class')\n }\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n\n@Directive()\nexport abstract class WithInjectorDirective {\n public readonly injector = inject(Injector)\n}\n","export function Microtask(target: any, key: string, descriptor: TypedPropertyDescriptor<(...args: any[]) => void>) {\n const originalMethod = descriptor.value;\n\n descriptor.value = function (...args: any[]) {\n queueMicrotask(() => {\n originalMethod?.apply(this, args)\n })\n };\n\n // Return the modified descriptor\n return descriptor;\n}\n","import { AfterViewInit, Directive, ElementRef, Input, inject } from '@angular/core';\nimport { HandleModel } from '../models/handle.model';\n\n@Directive({ selector: '[handleSizeController]' })\nexport class HandleSizeControllerDirective implements AfterViewInit {\n @Input({ required: true, alias: 'handleSizeController' })\n public handleModel!: HandleModel\n\n private handleWrapper = inject(ElementRef) as ElementRef<SVGGElement>\n\n public ngAfterViewInit(): void {\n const element = this.handleWrapper.nativeElement\n const rect = element.getBBox()\n\n const stroke = getChildStrokeWidth(element)\n this.handleModel.size.set({\n width: rect.width + stroke,\n height: rect.height + stroke\n })\n }\n}\n\nfunction getChildStrokeWidth(element: SVGGElement) {\n const child = element.firstElementChild\n\n if (child) {\n const stroke = getComputedStyle(child).strokeWidth\n const strokeAsNumber = Number(stroke.replace('px', ''))\n\n if (isNaN(strokeAsNumber)) {\n return 0\n }\n\n return strokeAsNumber\n }\n\n return 0\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, HostBinding, Injector, Input, NgZone, OnDestroy, OnInit, QueryList, TemplateRef, ViewChild, ViewChildren, computed, effect, inject, runInInjectionContext, signal } from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService, batchStatusChanges } from '../../services/flow-status.service';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { resizable } from '../../utils/resizable';\nimport { Subscription, map, startWith, switchMap, tap } from 'rxjs';\nimport { InjectionContext, WithInjectorDirective } from '../../decorators/run-in-injection-context.decorator';\nimport { Microtask } from '../../decorators/microtask.decorator';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle'\n\n@Component({\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService]\n})\nexport class NodeComponent extends WithInjectorDirective implements OnInit, AfterViewInit, OnDestroy {\n protected handleService = inject(HandleService)\n protected zone = inject(NgZone)\n\n @Input()\n public nodeModel!: NodeModel\n\n @Input()\n public nodeHtmlTemplate?: TemplateRef<any>\n\n @ViewChild('nodeContent')\n public nodeContentRef!: ElementRef<SVGGraphicsElement>\n\n @ViewChild('htmlWrapper')\n public htmlWrapperRef!: ElementRef<HTMLDivElement>\n\n private draggableService = inject(DraggableService)\n private flowStatusService = inject(FlowStatusService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef)\n\n protected showMagnet = computed(() =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation'\n )\n\n private subscription = new Subscription()\n\n public ngOnInit() {\n this.handleService.node.set(this.nodeModel);\n\n this.draggableService.toggleDraggable(this.hostRef.nativeElement, this.nodeModel)\n\n const sub = this.nodeModel.handles$\n .pipe(\n switchMap((handles) =>\n resizable(handles.map(h => h.parentReference!), this.zone)\n .pipe(map(() => handles))\n ),\n tap((handles) => handles.forEach(h => h.updateParent()))\n )\n .subscribe()\n\n this.subscription.add(sub)\n }\n\n @Microtask\n public ngAfterViewInit(): void {\n this.setInitialHandles()\n\n if (this.nodeModel.node.type === 'default') {\n const { width, height } = this.nodeContentRef.nativeElement.getBBox()\n this.nodeModel.size.set({ width, height })\n }\n\n if (this.nodeModel.node.type === 'html-template') {\n const sub = resizable([this.htmlWrapperRef.nativeElement], this.zone)\n .pipe(\n startWith(null),\n tap(() => {\n const width = this.htmlWrapperRef.nativeElement.clientWidth\n const height = this.htmlWrapperRef.nativeElement.clientHeight\n\n this.nodeModel.size.set({ width, height })\n })\n ).subscribe()\n\n this.subscription.add(sub)\n }\n }\n\n public ngOnDestroy(): void {\n this.draggableService.destroy(this.hostRef.nativeElement)\n this.subscription.unsubscribe()\n }\n\n protected startConnection(event: MouseEvent, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation()\n\n this.flowStatusService.setConnectionStartStatus(this.nodeModel, handle)\n }\n\n protected endConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-validation') {\n const sourceNode = status.payload.sourceNode\n const targetNode = this.nodeModel\n const sourceHandle = status.payload.sourceHandle\n const targetHandle = status.payload.targetHandle\n\n batchStatusChanges(\n // call to create connection\n () => this.flowStatusService.setConnectionEndStatus(sourceNode, targetNode, sourceHandle, targetHandle),\n // when connection created, we need go back to idle status\n () => this.flowStatusService.setIdleStatus()\n )\n }\n }\n\n /**\n * TODO srp\n */\n protected validateTargetHandle(targetHandle: HandleModel) {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceNode = status.payload.sourceNode\n const sourceHandle = status.payload.sourceHandle\n const source = sourceNode.node.id\n\n const targetNode = this.nodeModel\n const target = targetNode.node.id\n\n const valid = this.flowEntitiesService.connection().validator({\n source,\n target,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id\n })\n\n targetHandle.state.set(valid ? 'valid' : 'invalid')\n\n this.flowStatusService.setConnectionValidationStatus(valid, sourceNode, targetNode, sourceHandle, targetHandle)\n }\n }\n\n /**\n * TODO srp\n */\n protected resetValidateTargetHandle(targetHandle: HandleModel) {\n targetHandle.state.set('idle')\n\n // drop back to start status\n const status = this.flowStatusService.status()\n if (status.state === 'connection-validation') {\n this.flowStatusService.setConnectionStartStatus(status.payload.sourceNode, status.payload.sourceHandle)\n }\n }\n\n @InjectionContext\n private setInitialHandles() {\n if (this.nodeModel.node.type === 'default') {\n this.handleService.createHandle(\n new HandleModel(\n {\n position: this.nodeModel.sourcePosition(),\n type: 'source',\n parentReference: this.htmlWrapperRef.nativeElement\n },\n this.nodeModel\n ),\n )\n\n this.handleService.createHandle(\n new HandleModel(\n {\n position: this.nodeModel.targetPosition(),\n type: 'target',\n parentReference: this.htmlWrapperRef.nativeElement\n },\n this.nodeModel\n ),\n )\n }\n }\n}\n","<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'default'\"\n #nodeContent\n width=\"100\"\n height=\"50\"\n>\n <div #htmlWrapper class=\"default-node\" [innerHTML]=\"nodeModel.node.text ?? ''\"></div>\n</svg:foreignObject>\n\n<svg:foreignObject\n *ngIf=\"nodeModel.node.type === 'html-template' && nodeHtmlTemplate\"\n [attr.width]=\"nodeModel.size().width\"\n [attr.height]=\"nodeModel.size().height\"\n>\n <div #htmlWrapper class=\"wrapper\">\n <ng-container\n [ngTemplateOutlet]=\"nodeHtmlTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { node: nodeModel.node } }\"\n [ngTemplateOutletInjector]=\"injector\"\n />\n </div>\n</svg:foreignObject>\n\n<ng-container *ngFor=\"let handle of nodeModel.handles()\">\n <svg:circle\n *ngIf=\"!handle.template\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n r=\"5\"\n stroke=\"white\"\n fill=\"black\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n />\n\n <svg:g\n *ngIf=\"handle.template\"\n [handleSizeController]=\"handle\"\n (mousedown)=\"handle.rawHandle.type === 'source' ? startConnection($event, handle) : null\"\n (mouseup)=\"handle.rawHandle.type === 'target' ? endConnection() : null\"\n >\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n\n <svg:circle\n *ngIf=\"handle.rawHandle.type === 'target' && showMagnet()\"\n class=\"magnet\"\n [attr.r]=\"nodeModel.magnetRadius\"\n [attr.cx]=\"handle.offset().x\"\n [attr.cy]=\"handle.offset().y\"\n (mouseup)=\"endConnection(); resetValidateTargetHandle(handle)\"\n (mouseover)=\"validateTargetHandle(handle)\"\n (mouseout)=\"resetValidateTargetHandle(handle)\"\n />\n</ng-container>\n\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnChanges, OnInit, SimpleChanges, TemplateRef, ViewChild, computed, signal } from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Point } from '../../interfaces/point.interface';\nimport { Microtask } from '../../decorators/microtask.decorator';\n\n@Component({\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [`\n .edge-label-wrapper {\n width: max-content;\n\n /*\n this is a fix for bug in chrome, for some reason if the div fully matches the size\n of foreignObject there are occurs some visual artifacts around this div\n */\n margin-top: 1px;\n margin-left: 1px;\n }\n `],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n // TODO: too many inputs\n @Input()\n public model!: EdgeLabelModel\n\n @Input()\n public edgeModel!: EdgeModel\n\n @Input()\n public set point(point: Point) { this.pointSignal.set(point) }\n\n @Input()\n public htmlTemplate?: TemplateRef<any>\n\n @ViewChild('edgeLabelWrapper')\n public edgeLabelWrapperRef!: ElementRef<HTMLDivElement>\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.pointSignal()\n\n const { width, height } = this.model.size()\n\n return {\n x: point.x - (width / 2),\n y: point.y - (height / 2)\n }\n })\n\n private pointSignal = signal({ x: 0, y: 0 })\n\n @Microtask\n public ngAfterViewInit(): void {\n // this is a fix for visual artifact in chrome that for some reason adresses only for edge label.\n // the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\n const MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME = 2\n\n const width = this.edgeLabelWrapperRef.nativeElement.clientWidth + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n const height = this.edgeLabelWrapperRef.nativeElement.clientHeight + MAGIC_VALUE_TO_FIX_GLITCH_IN_CHROME\n\n this.model.size.set({ width, height })\n\n }\n\n protected getLabelContext() {\n return {\n $implicit: {\n edge: this.edgeModel.edge,\n label: this.model.edgeLabel\n }\n }\n }\n}\n","<svg:foreignObject\n [attr.x]=\"edgeLabelPoint().x\"\n [attr.y]=\"edgeLabelPoint().y\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n *ngIf=\"model.edgeLabel.type === 'html-template' && htmlTemplate\"\n>\n <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container\n *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\"\n />\n </div>\n</svg:foreignObject>\n","import { ChangeDetectionStrategy, Component, Input, OnInit, Signal, TemplateRef, computed } from '@angular/core';\nimport { EdgeModel } from '../../models/edge.model';\nimport { hashCode } from '../../utils/hash';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\n\n@Component({\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EdgeComponent implements OnInit {\n @Input()\n public model!: EdgeModel\n\n @Input()\n public edgeTemplate?: TemplateRef<EdgeContext>\n\n @Input()\n public edgeLabelHtmlTemplate?: TemplateRef<any>\n\n protected markerStartUrl = computed(() => {\n const marker = this.model.edge.markers?.start\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected markerEndUrl = computed(() => {\n const marker = this.model.edge.markers?.end\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected edgeContext!: EdgeContext\n\n public ngOnInit(): void {\n this.edgeContext = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.model.edge,\n path: computed(() => this.model.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl\n }\n }\n }\n}\n","<svg:path\n *ngIf=\"model.type === 'default'\"\n [attr.d]=\"model.path().path\"\n [attr.marker-start]=\"markerStartUrl()\"\n [attr.marker-end]=\"markerEndUrl()\"\n [attr.stroke]=\"defaultColor\"\n stroke-width=\"2\"\n fill=\"none\"\n/>\n\n<ng-container *ngIf=\"model.type === 'template' && edgeTemplate\">\n <ng-container *ngTemplateOutlet=\"edgeTemplate; context: edgeContext\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.start as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.start\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.center as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.center\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n\n<ng-container *ngIf=\"model.edgeLabels?.end as label\">\n <svg:g edgeLabel\n [model]=\"label\"\n [point]=\"model.path().points.end\"\n [edgeModel]=\"model\"\n [htmlTemplate]=\"edgeLabelHtmlTemplate\"\n />\n</ng-container>\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { fromEvent, map, startWith } from 'rxjs';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\n\n@Directive({ selector: 'g[spacePointContext]' })\nexport class SpacePointContextDirective {\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.mouseMovement()\n\n const point = this.rootSvg.createSVGPoint()\n point.x = movement.x\n point.y = movement.y\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse())\n })\n\n private rootSvg = inject(RootSvgReferenceDirective).element\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement\n\n private mouseMovement = toSignal(\n fromEvent<MouseEvent>(this.rootSvg, 'mousemove').pipe(\n map(event => ({ x: event.clientX, y: event.clientY })),\n ),\n { initialValue: { x: 0, y: 0 } }\n )\n}\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, computed, inject } from '@angular/core';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { straightPath } from '../../math/edge-path/straigh-path';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { bezierPath } from '../../math/edge-path/bezier-path';\nimport { hashCode } from '../../utils/hash';\nimport { Position } from '../../types/position.type';\n\n@Component({\n selector: 'g[connection]',\n template: `\n <ng-container *ngIf=\"model.type === 'default'\">\n <svg:path\n *ngIf=\"path() as path\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\"\n fill=\"none\"\n stroke-width=\"2\"\n />\n </ng-container>\n\n <ng-container *ngIf=\"model.type === 'template' && template\">\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n </ng-container>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConnectionComponent {\n @Input({ required: true })\n public model!: ConnectionModel\n\n @Input()\n public template?: TemplateRef<any>\n\n private flowStatusService = inject(FlowStatusService)\n private spacePointContext = inject(SpacePointContextDirective)\n\n protected path = computed(() => {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetPoint = this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n if (status.state === 'connection-validation') {\n const sourceHandle = status.payload.sourceHandle\n const sourcePoint = sourceHandle.pointAbsolute()\n const sourcePosition = sourceHandle.rawHandle.position\n\n const targetHandle = status.payload.targetHandle\n // ignore magnet if validation failed\n const targetPoint = status.payload.valid\n ? targetHandle.pointAbsolute()\n : this.spacePointContext.svgCurrentSpacePoint()\n const targetPosition = status.payload.valid\n ? targetHandle.rawHandle.position\n : getOppositePostion(sourceHandle.rawHandle.position)\n\n switch (this.model.curve) {\n case 'straight': return straightPath(sourcePoint, targetPoint).path\n case 'bezier': return bezierPath(\n sourcePoint, targetPoint,\n sourcePosition, targetPosition\n ).path\n }\n }\n\n return null\n })\n\n protected markerUrl = computed(() => {\n const marker = this.model.connection.marker\n\n if (marker) {\n return `url(#${hashCode(JSON.stringify(marker))})`\n }\n\n return ''\n })\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n\n protected getContext() {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl\n }\n }\n }\n}\n\nfunction getOppositePostion(position: Position): Position {\n switch (position) {\n case 'top':\n return 'bottom'\n case 'bottom':\n return 'top'\n case 'left':\n return 'right'\n case 'right':\n return 'left'\n }\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\n\n@Component({\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DefsComponent {\n @Input({ required: true })\n public markers: Map<number, Marker> = new Map()\n\n protected readonly defaultColor = 'rgb(177, 177, 183)'\n}\n","<svg:marker\n *ngFor=\"let marker of markers | keyvalue\"\n [attr.id]=\"marker.key\"\n [attr.markerWidth]=\"marker.value.width ?? 16.5\"\n [attr.markerHeight]=\"marker.value.height ?? 16.5\"\n [attr.orient]=\"marker.value.orient ?? 'auto-start-reverse'\"\n viewBox=\"-10 -10 20 20\"\n [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\"\n refX=\"0\"\n refY=\"0\"\n>\n <polyline\n *ngIf=\"marker.value.type === 'arrow-closed' || !marker.value.type\"\n class=\"marker__arrow_closed\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n />\n\n <polyline\n *ngIf=\"marker.value.type === 'arrow'\"\n class=\"marker__arrow_default\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n points=\"-5,-4 0,0 -5,4\"\n />\n</svg:marker>\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n// TODO: too general purpose nane\n@Directive({ selector: 'svg[rootSvgContext]' })\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService)\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n protected resetConnection() {\n const status = this.flowStatusService.status()\n\n if (status.state === 'connection-start') {\n this.flowStatusService.setIdleStatus()\n }\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Injector, Input, OnChanges, Output, Signal, SimpleChanges, ViewChild, computed, effect, inject, runInInjectionContext } from '@angular/core';\nimport { Node } from '../../interfaces/node.interface';\nimport { MapContextDirective } from '../../directives/map-context.directive';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { ViewportService } from '../../services/viewport.service';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, NodeHtmlTemplateDirective } from '../../directives/template.directive';\nimport { HandlePositions } from '../../interfaces/handle-positions.interface';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { FlowModel } from '../../models/flow.model';\nimport { skip } from 'rxjs';\nimport { Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceKeeper } from '../../utils/reference-keeper';\nimport { NodesChangeService } from '../../services/node-changes.service';\nimport { EdgeChangesService } from '../../services/edge-changes.service';\nimport { NodeChange } from '../../types/node-change.type';\nimport { ChangesControllerDirective } from '../../directives/changes-controller.directive';\nimport { EdgeChange } from '../../types/edge-change.type';\n\nconst connectionControllerHostDirective = {\n directive: ConnectionControllerDirective,\n outputs: ['onConnect']\n}\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: ['onNodesChange', 'onEdgesChange']\n}\n\n@Component({\n selector: 'vflow',\n templateUrl: './vflow.component.html',\n styleUrls: ['./vflow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n DraggableService,\n ViewportService,\n FlowStatusService,\n FlowEntitiesService,\n NodesChangeService,\n EdgeChangesService\n ],\n hostDirectives: [\n connectionControllerHostDirective,\n changesControllerHostDirective\n ]\n})\nexport class VflowComponent {\n // #region DI\n private viewportService = inject(ViewportService)\n private flowEntitiesService = inject(FlowEntitiesService)\n private nodesChangeService = inject(NodesChangeService)\n private edgesChangeService = inject(EdgeChangesService)\n private injector = inject(Injector)\n // #endregion\n\n // #region SETTINGS\n\n /**\n * Size for flow view\n *\n * accepts\n * - absolute size in format [width, height] or\n * - 'auto' to compute size based on parent element size\n */\n @Input()\n public set view(view: [number, number] | 'auto') {\n this.flowModel.view.set(view)\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public minZoom = 0.5\n\n /**\n * Maximum zoom value\n */\n @Input()\n public maxZoom = 3\n\n /**\n * Object that controls flow direction.\n *\n * For example, if you want to archieve right to left direction\n * then you need to pass these positions { source: 'left', target: 'right' }\n *\n * @deprecated\n */\n @Input()\n public set handlePositions(handlePositions: HandlePositions) {\n this.flowModel.handlePositions.set(handlePositions)\n }\n\n /**\n * Background color for flow\n */\n @Input()\n public background: string = '#FFFFFF'\n\n /**\n * Settings for connection (it renders when user tries to create edge between nodes)\n *\n * You need to pass `ConnectionSettings` in this input.\n */\n @Input({ transform: (settings: ConnectionSettings) => new ConnectionModel(settings) })\n public set connection(connection: ConnectionModel) { this.flowEntitiesService.connection.set(connection) }\n\n public get connection() { return this.flowEntitiesService.connection() }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.nodes(newNodes, this.flowEntitiesService.nodes())\n )\n\n // TODO better to solve this by DI\n bindFlowToNodes(this.flowModel, newModels)\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(newModels, this.flowEntitiesService.edges())\n\n this.flowEntitiesService.nodes.set(newModels)\n }\n\n protected get nodeModels() { return this.flowEntitiesService.nodes() }\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector,\n () => ReferenceKeeper.edges(newEdges, this.flowEntitiesService.edges())\n )\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.nodeModels, newModels)\n\n this.flowEntitiesService.edges.set(newModels)\n }\n\n protected get edgeModels() { return this.flowEntitiesService.validEdges() }\n // #endregion\n\n // #region TEMPLATES\n @ContentChild(NodeHtmlTemplateDirective)\n protected nodeHtmlDirective?: NodeHtmlTemplateDirective\n\n @ContentChild(EdgeTemplateDirective)\n protected edgeTemplateDirective?: EdgeTemplateDirective\n\n @ContentChild(EdgeLabelHtmlTemplateDirective)\n protected edgeLabelHtmlDirective?: EdgeLabelHtmlTemplateDirective\n\n @ContentChild(ConnectionTemplateDirective)\n protected connectionTemplateDirective?: ConnectionTemplateDirective\n // #endregion\n\n // #region DIRECTIVES\n @ViewChild(MapContextDirective)\n protected mapContext!: MapContextDirective\n // #endregion\n\n // #region SIGNAL_API\n /**\n * Signal for reading viewport change\n */\n public readonly viewport = this.viewportService.readableViewport.asReadonly()\n\n /**\n * Signal for reading nodes change\n */\n public readonly nodesChange =\n toSignal(this.nodesChangeService.changes$, { initialValue: [] as NodeChange[] })\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange =\n toSignal(this.edgesChangeService.changes$, { initialValue: [] as EdgeChange[] })\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport)\n .pipe(skip(1)) // skip default value that set by signal\n\n /**\n * Observable with nodes change\n */\n public readonly nodesChange$ = this.nodesChangeService.changes$\n\n /**\n * Observable with nodes change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$\n // #endregion\n\n // TODO: probably better to make it injectable\n protected flowModel = new FlowModel()\n\n protected markers = this.flowEntitiesService.markers\n\n // #region METHODS_API\n /**\n * Change viewport to specified state\n *\n * @param viewport viewport state\n */\n public viewportTo(viewport: ViewportState): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: viewport })\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: { zoom } })\n }\n\n /**\n * Move to specified coordinate\n *\n * @param point point where to move\n */\n public panTo(point: Point): void {\n this.viewportService.writableViewport.set({ changeType: 'absolute', state: point })\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.node\n }\n\n /**\n * Sync method to get detached edges\n */\n public getDetachedEdges(): Edge[] {\n return this.flowEntitiesService.getDetachedEdges().map(e => e.edge)\n }\n // #endregion\n\n protected trackNodes(idx: number, { node }: NodeModel) {\n return node\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge\n }\n}\n\nfunction bindFlowToNodes(flow: FlowModel, nodes: NodeModel[]) {\n nodes.forEach(n => n.bindFlow(flow))\n}\n\n","<svg:svg\n rootSvgRef\n rootSvgContext\n class=\"root-svg\"\n #flow\n [style.backgroundColor]=\"background\"\n [attr.width]=\"flowModel.flowWidth()\"\n [attr.height]=\"flowModel.flowHeight()\"\n>\n <defs [markers]=\"markers()\" flowDefs />\n\n <svg:g\n mapContext\n spacePointContext\n [minZoom]=\"minZoom\"\n [maxZoom]=\"maxZoom\"\n >\n <!-- Connection -->\n <svg:g\n connection\n [model]=\"connection\"\n [template]=\"connectionTemplateDirective?.templateRef\"\n />\n\n <!-- Edges -->\n <svg:g\n *ngFor=\"let model of edgeModels; trackBy: trackEdges\"\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective?.templateRef\"\n />\n\n <!-- Nodes -->\n <svg:g\n *ngFor=\"let model of nodeModels; trackBy: trackNodes\"\n node\n [nodeModel]=\"model\"\n [nodeHtmlTemplate]=\"nodeHtmlDirective?.templateRef\"\n [attr.transform]=\"model.pointTransform()\"\n />\n </svg:g>\n\n</svg:svg>\n","import { Component, ElementRef, Injector, Input, NgZone, OnDestroy, OnInit, TemplateRef, inject, runInInjectionContext, signal } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { InjectionContext, WithInjectorDirective } from '../../decorators/run-in-injection-context.decorator';\n\n@Component({\n selector: 'handle',\n templateUrl: './handle.component.html'\n})\nexport class HandleComponent extends WithInjectorDirective implements OnInit, OnDestroy {\n private handleService = inject(HandleService)\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement\n\n /**\n * At what side of node this component should be placed\n */\n @Input({ required: true })\n public position!: Position\n\n /**\n * Source or target\n */\n @Input({ required: true })\n public type!: 'source' | 'target'\n\n /**\n * Should be used if node has more than one source/target\n */\n @Input()\n public id?: string\n\n @Input()\n public template?: TemplateRef<any>\n\n public model!: HandleModel\n\n @InjectionContext\n public ngOnInit() {\n this.model = new HandleModel(\n {\n position: this.position,\n type: this.type,\n id: this.id,\n parentReference: this.element.parentElement!,\n template: this.template\n },\n this.handleService.node()!\n )\n\n this.handleService.createHandle(this.model)\n\n queueMicrotask(() => this.model.updateParent())\n }\n\n public ngOnDestroy(): void {\n this.handleService.destroyHandle(this.model)\n }\n}\n\n","","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { VflowComponent } from './components/vflow/vflow.component';\nimport { NodeComponent } from './components/node/node.component';\nimport { MapContextDirective } from './directives/map-context.directive';\nimport { EdgeComponent } from './components/edge/edge.component';\nimport { EdgeLabelComponent } from './components/edge-label/edge-label.component';\nimport { ConnectionTemplateDirective, EdgeLabelHtmlTemplateDirective, EdgeTemplateDirective, HandleTemplateDirective, NodeHtmlTemplateDirective } from './directives/template.directive';\nimport { ConnectionComponent } from './components/connection/connection.component';\nimport { SpacePointContextDirective } from './directives/space-point-context.directive';\nimport { RootSvgReferenceDirective } from './directives/reference.directive';\nimport { RootSvgContextDirective } from './directives/root-svg-context.directive';\nimport { DefsComponent } from './components/defs/defs.component';\nimport { HandleComponent } from './components/handle/handle.component';\nimport { HandleSizeControllerDirective } from './directives/handle-size-controller.directive';\n\nconst components = [\n VflowComponent,\n NodeComponent,\n EdgeComponent,\n EdgeLabelComponent,\n ConnectionComponent,\n HandleComponent,\n DefsComponent\n]\n\nconst directives = [\n SpacePointContextDirective,\n MapContextDirective,\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n HandleSizeControllerDirective\n]\n\nconst templateDirectives = [\n NodeHtmlTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective\n]\n\n@NgModule({\n imports: [CommonModule],\n exports: [\n VflowComponent,\n HandleComponent,\n ...templateDirectives\n ],\n declarations: [...components, ...directives, ...templateDirectives],\n})\nexport class VflowModule { }\n","// Modules\nexport * from './lib/vflow/vflow.module';\n\n// Interfaces\nexport * from './lib/vflow/interfaces/node.interface';\nexport * from './lib/vflow/interfaces/point.interface';\nexport * from './lib/vflow/interfaces/edge.interface';\nexport * from './lib/vflow/interfaces/edge-label.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection.interface';\nexport * from './lib/vflow/interfaces/connection-settings.interface';\nexport * from './lib/vflow/interfaces/handle-positions.interface';\nexport * from './lib/vflow/interfaces/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\n\n// Types\nexport * from './lib/vflow/types/node-change.type';\nexport * from './lib/vflow/types/edge-change.type';\nexport * from './lib/vflow/types/position.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/components/handle/handle.component';\n\n// Directives\nexport * from './lib/vflow/directives/template.directive';\nexport * from './lib/vflow/directives/connection-controller.directive';\nexport * from './lib/vflow/directives/changes-controller.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["path","d3Path","i2.HandleSizeControllerDirective","i2.EdgeLabelComponent","i1.ConnectionControllerDirective","i2.ChangesControllerDirective","i3","i4.NodeComponent","i5.EdgeComponent","i6.ConnectionComponent","i7.DefsComponent","i8.SpacePointContextDirective","i9.MapContextDirective","i10.RootSvgReferenceDirective","i11.RootSvgContextDirective"],"mappings":"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"}