ngx-vflow 1.14.0 → 1.15.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 (30) hide show
  1. package/esm2022/lib/vflow/components/node/node.component.mjs +5 -4
  2. package/esm2022/lib/vflow/interfaces/flow-entity.interface.mjs +1 -1
  3. package/esm2022/lib/vflow/interfaces/node.interface.mjs +13 -5
  4. package/esm2022/lib/vflow/interfaces/optimization.interface.mjs +2 -1
  5. package/esm2022/lib/vflow/interfaces/template-context.interface.mjs +1 -1
  6. package/esm2022/lib/vflow/models/edge.model.mjs +4 -9
  7. package/esm2022/lib/vflow/models/node.model.mjs +51 -7
  8. package/esm2022/lib/vflow/services/edge-rendering.service.mjs +1 -1
  9. package/esm2022/lib/vflow/services/flow-rendering.service.mjs +9 -1
  10. package/esm2022/lib/vflow/utils/is-callable.mjs +10 -0
  11. package/esm2022/lib/vflow/utils/is-vflow-component.mjs +9 -0
  12. package/esm2022/public-api.mjs +2 -1
  13. package/esm2022/testing/provide-custom-node-mocks.mjs +3 -2
  14. package/fesm2022/ngx-vflow-testing.mjs +2 -1
  15. package/fesm2022/ngx-vflow-testing.mjs.map +1 -1
  16. package/fesm2022/ngx-vflow.mjs +231 -167
  17. package/fesm2022/ngx-vflow.mjs.map +1 -1
  18. package/lib/vflow/interfaces/flow-entity.interface.d.ts +2 -1
  19. package/lib/vflow/interfaces/node.interface.d.ts +2 -2
  20. package/lib/vflow/interfaces/optimization.interface.d.ts +4 -0
  21. package/lib/vflow/interfaces/template-context.interface.d.ts +4 -0
  22. package/lib/vflow/models/edge.model.d.ts +2 -0
  23. package/lib/vflow/models/node.model.d.ts +4 -0
  24. package/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.d.ts +1 -0
  25. package/lib/vflow/services/edge-rendering.service.d.ts +1 -1
  26. package/lib/vflow/services/flow-rendering.service.d.ts +4 -0
  27. package/lib/vflow/utils/is-callable.d.ts +1 -0
  28. package/lib/vflow/utils/is-vflow-component.d.ts +4 -0
  29. package/package.json +1 -1
  30. package/public-api.d.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-overlapping-area.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/nodes.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/utils/viewport.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/optimization.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-settings.service.ts","../../../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/utils/get-os.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/keyboard.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/selection.service.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/utils/align-number.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/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/component-event-bus.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-accessor.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/custom-node-base/custom-node-base.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-node/custom-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/node.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/constants/magic-number-to-fix-glitch-in-chrome.constant.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/to-unified-node.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/math/edge-path/smooth-step-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/signals/extended-computed.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/identity-checker/reference-identity-checker.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/utils/is-group-node.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/assert-injector.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/signals/to-lazy-signal.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/transform-background.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/microtask.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/overlays.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/resizable.ts","../../../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/utils/adjust-direction.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/event.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/pointer.directive.ts","../../../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/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/handle-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/node-handles-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/node-resize-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/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/id.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.html","../../../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/flow-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-space-points.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/preview-flow-render-strategy.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/preview-flow/draw-node.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/preview-flow/preview-flow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-rendering.service.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/directives/drag-handle.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/selectable.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/minimap.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/toolbar.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/node-toolbar/node-toolbar.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Rect } from '../interfaces/rect';\n\nexport const getOverlappingArea = (rectA: Rect, rectB: Rect): number => {\n const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n\n return Math.ceil(xOverlap * yOverlap);\n};\n","import { Box } from '../interfaces/box';\nimport { IntersectingNodesOptions } from '../interfaces/intersecting-nodes-options.interface';\nimport { Rect } from '../interfaces/rect';\nimport { NodeModel } from '../models/node.model';\nimport { getOverlappingArea } from './get-overlapping-area';\n\nexport function getNodesBounds(nodes: NodeModel[]): Rect {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n\n let box: Box = { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity };\n\n nodes.forEach((node) => {\n const nodeBox = nodeToBox(node);\n box = getBoundsOfBoxes(box, nodeBox);\n });\n\n return boxToRect(box);\n}\n\nexport function getIntesectingNodes(\n nodeId: string,\n nodes: NodeModel[],\n options?: IntersectingNodesOptions,\n): NodeModel[] {\n const node = nodes.find((n) => n.rawNode.id === nodeId);\n if (!node) return [];\n\n const nodeRect = nodeToRect(node);\n\n return nodes.filter((currentNode) => {\n if (currentNode.rawNode.id === nodeId) return false;\n\n const overlappingArea = getOverlappingArea(nodeToRect(currentNode), nodeRect);\n\n if (options?.partially) {\n return overlappingArea > 0;\n }\n\n return overlappingArea >= nodeRect.width * nodeRect.height;\n });\n}\n\nfunction nodeToBox(node: NodeModel): Box {\n return {\n x: node.point().x,\n y: node.point().y,\n x2: node.point().x + node.size().width,\n y2: node.point().y + node.size().height,\n };\n}\n\nexport function nodeToRect(node: NodeModel): Rect {\n return {\n x: node.globalPoint().x,\n y: node.globalPoint().y,\n width: node.width(),\n height: node.height(),\n };\n}\n\nfunction boxToRect({ x, y, x2, y2 }: Box): Rect {\n return {\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n };\n}\n\nfunction getBoundsOfBoxes(box1: Box, box2: Box): Box {\n return {\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n };\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from '../interfaces/connection-settings.interface';\nimport { Connection } from '../interfaces/connection.interface';\nimport { Curve, EdgeType } from '../interfaces/edge.interface';\nimport { ConnectionMode } from '../types/connection-mode.type';\n\nexport class ConnectionModel {\n public curve: Curve;\n public type: EdgeType;\n public validator: ConnectionValidatorFn;\n public mode: ConnectionMode;\n\n constructor(public settings: ConnectionSettings) {\n this.curve = settings.curve ?? 'bezier';\n this.type = settings.type ?? 'default';\n this.mode = settings.mode ?? 'strict';\n\n const validatorsToRun = this.getValidators(settings);\n this.validator = (connection) => validatorsToRun.every((v) => v(connection));\n }\n\n private getValidators(settings: ConnectionSettings) {\n const validators = [];\n\n validators.push(notSelfValidator);\n\n if (this.mode === 'loose') {\n validators.push(hasSourceAndTargetHandleValidator);\n }\n\n if (settings.validator) {\n validators.push(settings.validator);\n }\n\n return validators;\n }\n}\n\n/**\n * Internal validator that not allows self connections\n */\nconst notSelfValidator = (connection: Connection) => {\n return connection.source !== connection.target;\n};\n\nconst hasSourceAndTargetHandleValidator = (connection: Connection) => {\n return connection.sourceHandle !== undefined && connection.targetHandle !== undefined;\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, Signal, WritableSignal, computed, signal } 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';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { MinimapModel } from '../models/minimap.model';\nimport { DynamicNode, Node } from '../interfaces/node.interface';\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 rawNodes = computed(() => this.nodes().map((n) => n.rawNode) as Node[] | DynamicNode[]);\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 rawEdges = computed(() => this.edges().map((e) => e.edge));\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 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().settings.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 entities: Signal<FlowEntity[]> = computed(() => [...this.nodes(), ...this.edges()]);\n\n public minimap: WritableSignal<MinimapModel | null> = signal(null);\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ rawNode }) => rawNode.id === id) as NodeModel<T> | undefined;\n }\n\n public getDetachedEdges() {\n return this.edges().filter((e) => e.detached());\n }\n}\n","import { Rect } from '../interfaces/rect';\nimport { ViewportState } from '../interfaces/viewport.interface';\n\nexport function getViewportForBounds(\n bounds: Rect,\n width: number,\n height: number,\n minZoom: number,\n maxZoom: number,\n padding: number,\n): ViewportState {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n\n return { x, y, zoom: clampedZoom };\n}\n\nexport function clamp(value: number, min = 0, max = 1): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Calculates the visible area bounds in world coordinates based on the current viewport state\n *\n * @param viewport Current viewport state (x, y, zoom)\n * @param flowWidth Width of the flow container\n * @param flowHeight Height of the flow container\n * @returns Rect representing the visible area in world coordinates\n */\nexport function getViewportBounds(viewport: ViewportState, flowWidth: number, flowHeight: number): Rect {\n const zoom = viewport.zoom;\n\n return {\n x: -viewport.x / zoom,\n y: -viewport.y / zoom,\n width: flowWidth / zoom,\n height: flowHeight / zoom,\n };\n}\n\n/**\n * Checks if a rectangle intersects with the viewport's visible area\n *\n * @param rect Rectangle to check (in world coordinates)\n * @param viewport Current viewport state\n * @param flowWidth Width of the flow container\n * @param flowHeight Height of the flow container\n * @returns true if the rectangle intersects with the viewport, false otherwise\n */\nexport function isRectInViewport(rect: Rect, viewport: ViewportState, flowWidth: number, flowHeight: number): boolean {\n const viewportBounds = getViewportBounds(viewport, flowWidth, flowHeight);\n\n // Check if rectangles intersect using standard rectangle intersection test\n // No intersection if: rect is completely to the left, right, above, or below the viewport\n const isNotIntersecting =\n rect.x + rect.width < viewportBounds.x || // Rect is completely to the left\n rect.x > viewportBounds.x + viewportBounds.width || // Rect is completely to the right\n rect.y + rect.height < viewportBounds.y || // Rect is completely above\n rect.y > viewportBounds.y + viewportBounds.height; // Rect is completely below\n\n return !isNotIntersecting;\n}\n","export const DEFAULT_OPTIMIZATION: Required<Optimization> = {\n detachedGroupsLayer: false,\n virtualization: false,\n virtualizationZoomThreshold: 0.5,\n};\n\nexport interface Optimization {\n /**\n * If true, the layer with groups will be placed behind the edges layer.\n * This approach fixes the issue when you can't select an edge inside group.\n *\n * @default false\n */\n detachedGroupsLayer?: boolean;\n\n /**\n * If true, enables viewport virtualization to improve performance by only rendering\n * nodes and edges that are currently visible in the viewport. This optimization\n * filters out entities that are outside the visible area, reducing the number of\n * DOM elements and improving rendering performance for large flows.\n *\n * It uses canvas as a virtualization layer during viewport change.\n * When the viewport change ends, the library hydrates the canvas with the actual nodes and edges.\n */\n virtualization?: boolean;\n\n /**\n * The zoom threshold below which the only virtualization layer is drawn.\n * This should help to avoid performance issues when zooming out too much.\n */\n virtualizationZoomThreshold?: number;\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { Background } from '../types/background.type';\nimport { DEFAULT_OPTIMIZATION, Optimization } from '../interfaces/optimization.interface';\n\n@Injectable()\nexport class FlowSettingsService {\n public entitiesSelectable = signal(true);\n\n public elevateNodesOnSelect = signal(true);\n public elevateEdgesOnSelect = signal(true);\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400]);\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowWidth = signal(0);\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowHeight = signal(0);\n\n public minZoom = signal(0.5);\n\n public maxZoom = signal(3);\n\n public background = signal<Background>({ type: 'solid', color: '#fff' });\n\n public snapGrid = signal<[number, number]>([1, 1]);\n\n public optimization = signal<Required<Optimization>>(DEFAULT_OPTIMIZATION);\n}\n","import { Injectable, WritableSignal, inject, signal } from '@angular/core';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\nimport { getNodesBounds } from '../utils/nodes';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { getViewportForBounds } from '../utils/viewport';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { FitViewOptions } from '../interfaces/fit-view-options.interface';\nimport { NodeModel } from '../models/node.model';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ViewportService {\n private entitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState {\n return { zoom: 1, x: 0, y: 0 };\n }\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 duration: 0,\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 public readonly viewportChangeEnd$ = new Subject<void>();\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n\n public fitView(options: FitViewOptions = { padding: 0.1, duration: 0, nodes: [] }) {\n const nodes = this.getBoundsNodes(options.nodes ?? []);\n\n const state = getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n this.flowSettingsService.minZoom(),\n this.flowSettingsService.maxZoom(),\n options.padding ?? 0.1,\n );\n\n const duration = options.duration ?? 0;\n\n this.writableViewport.set({ changeType: 'absolute', state, duration });\n }\n\n public triggerViewportChangeEvent(type: 'end') {\n if (type === 'end') {\n this.viewportChangeEnd$.next();\n }\n }\n\n private getBoundsNodes(nodeIds: string[]) {\n return !nodeIds?.length\n ? // If nodes option not passed or the list is empty, then get fit the whole view\n this.entitiesService.nodes()\n : // Otherwise fit to specific nodes\n nodeIds\n .map((nodeId) => this.entitiesService.nodes().find(({ rawNode }) => rawNode.id === nodeId))\n .filter((node): node is NodeModel => !!node);\n }\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 standalone: true,\n selector: 'svg[rootSvgRef]',\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement;\n}\n","export function getOS() {\n const userAgent = window.navigator.userAgent.toLowerCase();\n const macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i;\n const windowsPlatforms = /(win32|win64|windows|wince)/i;\n const iosPlatforms = /(iphone|ipad|ipod)/i;\n\n let os = null;\n\n if (macosPlatforms.test(userAgent)) {\n os = 'macos' as const;\n } else if (iosPlatforms.test(userAgent)) {\n os = 'ios' as const;\n } else if (windowsPlatforms.test(userAgent)) {\n os = 'windows' as const;\n } else if (/android/.test(userAgent)) {\n os = 'android' as const;\n } else if (!os && /linux/.test(userAgent)) {\n os = 'linux' as const;\n }\n\n return os;\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { KeyboardAction, KeyboardShortcuts } from '../types/keyboard-action.type';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge, switchMap, tap } from 'rxjs';\nimport { getOS } from '../utils/get-os';\n\n@Injectable()\nexport class KeyboardService {\n private actions: WritableSignal<KeyboardShortcuts> = signal({\n multiSelection: [\n getOS() === 'macos' ? 'MetaLeft' : 'ControlLeft',\n getOS() === 'macos' ? 'MetaRight' : 'ControlRight',\n ],\n });\n\n private actionsActive: Record<KeyboardAction, boolean> = {\n multiSelection: false,\n };\n\n constructor() {\n toObservable(this.actions)\n .pipe(\n switchMap(() =>\n merge(\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n tap((event) => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = true;\n }\n }\n }),\n ),\n\n fromEvent<KeyboardEvent>(document, 'keyup').pipe(\n tap((event) => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = false;\n }\n }\n }),\n ),\n ),\n ),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n public setShortcuts(newActions: KeyboardShortcuts) {\n this.actions.update((actions) => ({ ...actions, ...newActions }));\n }\n\n public isActiveAction(action: KeyboardAction) {\n return this.actionsActive[action];\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Subject, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardService } from './keyboard.service';\n\nexport interface ViewportForSelection {\n start: ViewportState;\n end: ViewportState;\n /**\n * Target may not exist if viewport change made programmatically\n */\n target?: Element;\n}\n\n@Injectable()\nexport class SelectionService {\n private static delta = 6;\n\n private flowEntitiesService = inject(FlowEntitiesService);\n private keyboardService = inject(KeyboardService);\n\n protected viewport$ = new Subject<ViewportForSelection>();\n\n protected resetSelection = this.viewport$\n .pipe(\n tap(({ start, end, target }) => {\n if (start && end && target) {\n const delta = SelectionService.delta;\n\n const diffX = Math.abs(end.x - start.x);\n const diffY = Math.abs(end.y - start.y);\n\n // click (not drag)\n const isClick = diffX < delta && diffY < delta;\n // do not reset if event chain contains selectable elems\n const isNotSelectable = !target.closest('.selectable');\n\n if (isClick && isNotSelectable) {\n this.select(null);\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n public setViewport(viewport: ViewportForSelection) {\n this.viewport$.next(viewport);\n }\n\n public select(entity: FlowEntity | null) {\n // ? May be not a responsibility of this method\n // if entity already selected - do nothing\n if (entity?.selected()) {\n return;\n }\n\n if (!this.keyboardService.isActiveAction('multiSelection')) {\n // undo select for previously selected nodes\n this.flowEntitiesService.entities().forEach((n) => n.selected.set(false));\n }\n\n if (entity) {\n // select passed entity\n entity.selected.set(true);\n }\n }\n}\n","import { Directive, ElementRef, NgZone, OnInit, effect, inject, signal, untracked } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, ZoomTransform, zoom, zoomIdentity } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { SelectionService, ViewportForSelection } from '../services/selection.service';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({\n standalone: true,\n selector: 'g[mapContext]',\n host: {\n '[attr.transform]': 'transform()',\n },\n})\nexport class MapContextDirective implements OnInit {\n protected rootSvg = inject(RootSvgReferenceDirective).element;\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement;\n protected selectionService = inject(SelectionService);\n protected viewportService = inject(ViewportService);\n protected flowSettingsService = inject(FlowSettingsService);\n protected zone = inject(NgZone);\n\n protected rootSvgSelection = select(this.rootSvg);\n\n protected transform = signal<string>('');\n\n protected viewportForSelection: Partial<ViewportForSelection> = {};\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n protected manualViewportChangeEffect = effect(\n () => {\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.transition().duration(viewport.duration).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 // remain same zoom value\n const zoom = untracked(this.viewportService.readableViewport).zoom;\n\n this.rootSvgSelection\n .transition()\n .duration(viewport.duration)\n .call(this.zoomBehavior.transform, zoomIdentity.translate(state.x, state.y).scale(zoom));\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\n .transition()\n .duration(viewport.duration)\n .call(this.zoomBehavior.transform, zoomIdentity.translate(state.x, state.y).scale(state.zoom));\n\n return;\n }\n },\n { allowSignalWrites: true },\n );\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.flowSettingsService.minZoom(), this.flowSettingsService.maxZoom()])\n .filter(this.filterCondition)\n .on('start', this.handleZoomStart)\n .on('zoom', this.handleZoom)\n .on('end', this.handleZoomEnd);\n\n this.rootSvgSelection.call(this.zoomBehavior).on('dblclick.zoom', null);\n });\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set(mapTransformToViewportState(transform));\n\n this.transform.set(transform.toString());\n };\n\n private handleZoomStart = ({ transform }: ZoomEvent) => {\n this.viewportForSelection = {\n start: mapTransformToViewportState(transform),\n };\n };\n\n private handleZoomEnd = ({ transform, sourceEvent }: ZoomEvent) => {\n this.zone.run(() => {\n this.viewportForSelection = {\n ...this.viewportForSelection,\n end: mapTransformToViewportState(transform),\n target: evTarget(sourceEvent),\n };\n\n this.viewportService.triggerViewportChangeEvent('end');\n\n // TODO: maybe use triggerViewportChangeEvent instead of this method?\n this.selectionService.setViewport(this.viewportForSelection as ViewportForSelection);\n });\n };\n\n private filterCondition = (event: Event) => {\n if (event.type === 'mousedown' || event.type === 'touchstart') {\n return (event.target as Element).closest('.vflow-node') === null;\n }\n\n return true;\n };\n}\n\nconst mapTransformToViewportState = (transform: ZoomTransform): ViewportState => ({\n zoom: transform.k,\n x: transform.x,\n y: transform.y,\n});\n\nconst evTarget = (anyEvent: any): Element | undefined => {\n if (anyEvent instanceof Event && anyEvent.target instanceof Element) {\n return anyEvent.target;\n }\n\n return undefined;\n};\n\ndeclare module 'd3-selection' {\n interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {\n transition(): Selection<GElement, Datum, PElement, PDatum>;\n duration(duration: number): Selection<GElement, Datum, PElement, PDatum>;\n }\n}\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>;\n","export const round = (num: number): number => Math.round(num * 100) / 100;\n","export function align(num: number, constant: number): number {\n return Math.ceil(num / constant) * constant;\n}\n","import { Injectable, inject } 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';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Point } from '../interfaces/point.interface';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { align } from '../utils/align-number';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>;\n\n@Injectable()\nexport class DraggableService {\n private entitiesService = inject(FlowEntitiesService);\n private settingsService = inject(FlowSettingsService);\n\n /**\n * Enable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public enable(element: Element, model: NodeModel) {\n select(element).call(this.getDragBehavior(model));\n }\n\n /**\n * Disable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public disable(element: Element) {\n select(element).call(drag().on('drag', null));\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 dragNodes: NodeModel[] = [];\n let initialPositions: Point[] = [];\n\n const filterCondition = (event: Event) => {\n // if there is at least one drag handle, we should check if we are dragging it\n if (model.dragHandlesCount()) {\n return !!(event.target as Element).closest('.vflow-drag-handle');\n }\n\n return true;\n };\n\n return drag()\n .filter(filterCondition)\n .on('start', (event: DragEvent) => {\n dragNodes = this.getDragNodes(model);\n\n initialPositions = dragNodes.map((node) => ({\n x: node.point().x - event.x,\n y: node.point().y - event.y,\n }));\n })\n\n .on('drag', (event: DragEvent) => {\n dragNodes.forEach((model, index) => {\n const point = {\n x: round(event.x + initialPositions[index].x),\n y: round(event.y + initialPositions[index].y),\n };\n\n this.moveNode(model, point);\n });\n });\n }\n\n private getDragNodes(model: NodeModel) {\n return model.selected()\n ? this.entitiesService\n .nodes()\n // selected draggable nodes (with current node)\n .filter((node) => node.selected() && node.draggable())\n : // we only can move current node if it's not selected\n [model];\n }\n\n /**\n * @todo make it unit testable\n */\n private moveNode(model: NodeModel, point: Point) {\n point = this.alignToGrid(point);\n\n const parent = model.parent();\n // keep node in bounds of parent\n if (parent) {\n point.x = Math.min(parent.width() - model.width(), point.x);\n point.x = Math.max(0, point.x);\n\n point.y = Math.min(parent.height() - model.height(), point.y);\n point.y = Math.max(0, point.y);\n }\n\n model.setPoint(point);\n }\n\n /**\n * @todo make it unit testable\n */\n private alignToGrid(point: Point) {\n const [snapX, snapY] = this.settingsService.snapGrid();\n\n if (snapX > 1) {\n point.x = align(point.x, snapX);\n }\n\n if (snapY > 1) {\n point.y = align(point.y, snapY);\n }\n\n return point;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport {\n ConnectionContext,\n EdgeContext,\n GroupNodeContext,\n HtmlEdgeLabelContext,\n NodeContext,\n SvgNodeContext,\n} from '../interfaces/template-context.interface';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edge]',\n})\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef);\n\n static ngTemplateContextGuard(dir: EdgeTemplateDirective, ctx: unknown): ctx is EdgeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[connection]',\n})\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: ConnectionTemplateDirective, ctx: unknown): ctx is ConnectionContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edgeLabelHtml]',\n})\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: EdgeLabelHtmlTemplateDirective, ctx: unknown): ctx is HtmlEdgeLabelContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeHtml]',\n})\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: NodeHtmlTemplateDirective, ctx: unknown): ctx is NodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeSvg]',\n})\nexport class NodeSvgTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: NodeSvgTemplateDirective, ctx: unknown): ctx is SvgNodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[groupNode]',\n})\nexport class GroupNodeTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: GroupNodeTemplateDirective, ctx: unknown): ctx is GroupNodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[handle]',\n})\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n // TODO\n // static ngTemplateContextGuard(dir: HandleTemplateDirective, ctx: unknown): ctx is HandleContext {\n // return true;\n // }\n}\n","import { EdgeModel } from '../models/edge.model';\nimport { NodeModel } from '../models/node.model';\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]): void {\n const nodesById = nodes.reduce(\n (acc, n) => {\n acc[n.rawNode.id] = n;\n\n return acc;\n },\n {} as { [nodeId: string]: NodeModel },\n );\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 { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { ConnectionInternal } from '../interfaces/connection.internal.interface';\nimport { EdgeModel } from '../models/edge.model';\n\nexport interface FlowStatusIdle {\n state: 'idle';\n payload: null;\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start';\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'>;\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation';\n payload: ConnectionInternal & {\n valid: boolean;\n };\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end';\n payload: ConnectionInternal;\n}\n\nexport interface FlowStatusReconnectionStart {\n state: 'reconnection-start';\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'> & {\n oldEdge: EdgeModel;\n };\n}\n\nexport interface FlowStatusReconnectionValidation {\n state: 'reconnection-validation';\n payload: ConnectionInternal & {\n valid: boolean;\n oldEdge: EdgeModel;\n };\n}\n\nexport interface FlowStatusReconnectionEnd {\n state: 'reconnection-end';\n payload: ConnectionInternal & {\n oldEdge: EdgeModel;\n };\n}\n\nexport type FlowStatus =\n | FlowStatusIdle\n | FlowStatusConnectionStart\n | FlowStatusConnectionValidation\n | FlowStatusConnectionEnd\n | FlowStatusReconnectionStart\n | FlowStatusReconnectionValidation\n | FlowStatusReconnectionEnd;\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(source: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { source, sourceHandle } });\n }\n\n public setReconnectionStartStatus(source: NodeModel, sourceHandle: HandleModel, oldEdge: EdgeModel) {\n this.status.set({ state: 'reconnection-start', payload: { source, sourceHandle, oldEdge } });\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n ) {\n this.status.set({ state: 'connection-validation', payload: { source, target, sourceHandle, targetHandle, valid } });\n }\n\n public setReconnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n oldEdge: EdgeModel,\n ) {\n this.status.set({\n state: 'reconnection-validation',\n payload: { source, target, sourceHandle, targetHandle, valid, oldEdge },\n });\n }\n\n public setConnectionEndStatus(\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n ) {\n this.status.set({ state: 'connection-end', payload: { source, target, sourceHandle, targetHandle } });\n }\n\n public setReconnectionEndStatus(\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n oldEdge: EdgeModel,\n ) {\n this.status.set({ state: 'reconnection-end', payload: { source, target, sourceHandle, targetHandle, oldEdge } });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AnyComponentNodeEvent } from '../interfaces/component-node-event.interface';\n\n@Injectable()\nexport class ComponentEventBusService {\n private _event$ = new Subject<AnyComponentNodeEvent>();\n\n public event$ = this._event$.asObservable();\n\n public pushEvent(event: AnyComponentNodeEvent) {\n this._event$.next(event);\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * Service to fix cyclic dependency between node and resizable component\n */\n@Injectable()\nexport class NodeAccessorService {\n public model = signal<NodeModel | null>(null);\n}\n","import { DestroyRef, Directive, EventEmitter, OnInit, inject, signal, OutputEmitterRef } from '@angular/core';\nimport { merge, Observable, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\n\n@Directive()\nexport abstract class CustomNodeBaseComponent<T = any> implements OnInit {\n private eventBus = inject(ComponentEventBusService);\n private nodeService = inject(NodeAccessorService);\n\n protected destroyRef = inject(DestroyRef);\n\n /**\n * Signal with selected state of node\n */\n public selected = this.nodeService.model()!.selected;\n\n public data = signal<T | undefined>(undefined);\n\n public ngOnInit(): void {\n this.trackEvents().pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private trackEvents() {\n const props = Object.getOwnPropertyNames(this);\n\n const emittersOrRefs = new Map<Observable<unknown>, string>();\n for (const prop of props) {\n const field = (this as Record<string, unknown>)[prop];\n\n if (field instanceof EventEmitter) {\n emittersOrRefs.set(field, prop);\n }\n\n if (field instanceof OutputEmitterRef) {\n emittersOrRefs.set(outputRefToObservable(field), prop);\n }\n }\n\n return merge(\n ...Array.from(emittersOrRefs.keys()).map((emitter) =>\n emitter.pipe(\n tap((event) => {\n this.eventBus.pushEvent({\n nodeId: this.nodeService.model()?.rawNode.id ?? '',\n eventName: emittersOrRefs.get(emitter)!,\n eventPayload: event,\n });\n }),\n ),\n ),\n );\n }\n}\n\nfunction outputRefToObservable(ref: OutputEmitterRef<unknown>) {\n return new Observable((subscriber) => {\n const subscription = ref.subscribe((value) => {\n subscriber.next(value);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { Directive, input, OnInit } from '@angular/core';\nimport { ComponentNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from '../../components/custom-node-base/custom-node-base.component';\n\n@Directive()\nexport abstract class CustomNodeComponent<T = any> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n public node = input.required<ComponentNode<T>>();\n\n public override ngOnInit(): void {\n if (this.node().data) {\n this.data.set(this.node().data);\n }\n\n super.ngOnInit();\n }\n}\n","import { Directive, input, OnInit } from '@angular/core';\nimport { ComponentDynamicNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from '../../components/custom-node-base/custom-node-base.component';\n\n@Directive()\nexport abstract class CustomDynamicNodeComponent<T = any> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n public node = input.required<ComponentDynamicNode<T>>();\n\n public override ngOnInit(): void {\n const data = this.node().data;\n\n if (data) {\n this.data = data;\n }\n\n super.ngOnInit();\n }\n}\n","import { Type, WritableSignal } from '@angular/core';\nimport { Point } from './point.interface';\nimport { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';\nimport { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';\nimport { NodePreview } from './node-preview.interface';\n\nexport type Node<T = any> =\n | DefaultNode\n | HtmlTemplateNode<T>\n | SvgTemplateNode<T>\n | ComponentNode<T>\n | DefaultGroupNode\n | TemplateGroupNode<T>;\n\nexport type DynamicNode<T = any> =\n | DefaultDynamicNode\n | HtmlTemplateDynamicNode<T>\n | SvgTemplateDynamicNode<T>\n | ComponentDynamicNode<T>\n | DefaultDynamicGroupNode\n | TemplateDynamicGroupNode<T>;\n\nexport interface SharedNode {\n id: string;\n point: Point;\n draggable?: boolean;\n parentId?: string | null;\n preview?: NodePreview;\n}\n\nexport interface SharedDynamicNode {\n id: string;\n point: WritableSignal<Point>;\n draggable?: WritableSignal<boolean>;\n parentId?: WritableSignal<string | null>;\n preview?: WritableSignal<NodePreview>;\n}\n\nexport interface DefaultNode extends SharedNode {\n type: 'default';\n text?: string;\n width?: number;\n height?: number;\n}\n\nexport interface DefaultDynamicNode extends SharedDynamicNode {\n type: 'default';\n text?: WritableSignal<string>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport interface HtmlTemplateNode<T = any> extends SharedNode {\n type: 'html-template';\n data?: T;\n width?: number;\n height?: number;\n}\n\nexport interface SvgTemplateNode<T = any> extends SharedNode {\n type: 'svg-template';\n width: number;\n height: number;\n data?: T;\n}\n\nexport interface HtmlTemplateDynamicNode<T = any> extends SharedDynamicNode {\n type: 'html-template';\n data?: WritableSignal<T>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport interface SvgTemplateDynamicNode<T = any> extends SharedDynamicNode {\n type: 'svg-template';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n data?: WritableSignal<T>;\n}\n\nexport interface DefaultGroupNode extends SharedNode {\n type: 'default-group';\n width: number;\n height: number;\n color?: string;\n resizable?: boolean;\n}\n\nexport interface DefaultDynamicGroupNode extends SharedDynamicNode {\n type: 'default-group';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n color?: WritableSignal<string>;\n resizable?: WritableSignal<boolean>;\n}\n\nexport interface TemplateGroupNode<T> extends SharedNode {\n type: 'template-group';\n width: number;\n height: number;\n data?: T;\n}\n\nexport interface TemplateDynamicGroupNode<T> extends SharedDynamicNode {\n type: 'template-group';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n data?: WritableSignal<T>;\n}\n\nexport interface ComponentNode<T = any> extends SharedNode {\n type: Type<CustomNodeComponent<T>>;\n data?: T;\n width?: number;\n height?: number;\n}\n\nexport interface ComponentDynamicNode<T = any> extends SharedDynamicNode {\n type: Type<CustomDynamicNodeComponent<T>>;\n data?: WritableSignal<T>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport function isStaticNode<T>(node: Node<T> | DynamicNode<T>): node is Node<T> {\n return typeof node.point !== 'function';\n}\n\nexport function isDynamicNode<T>(node: Node<T> | DynamicNode<T>): node is DynamicNode<T> {\n return typeof node.point === 'function';\n}\n\nexport function isComponentStaticNode<T>(node: Node<T>): node is ComponentNode<T> {\n return Object.prototype.isPrototypeOf.call(CustomNodeComponent, node.type);\n}\n\nexport function isComponentDynamicNode<T>(node: DynamicNode<T>): node is ComponentDynamicNode<T> {\n return Object.prototype.isPrototypeOf.call(CustomDynamicNodeComponent, node.type);\n}\n\nexport function isTemplateStaticNode<T>(node: Node<T>): node is HtmlTemplateNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isTemplateDynamicNode<T>(node: DynamicNode<T>): node is HtmlTemplateDynamicNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isSvgTemplateStaticNode<T>(node: Node<T>): node is SvgTemplateNode<T> {\n return node.type === 'svg-template';\n}\n\nexport function isSvgTemplateDynamicNode<T>(node: DynamicNode<T>): node is SvgTemplateDynamicNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isDefaultStaticNode(node: Node): node is DefaultNode {\n return node.type === 'default';\n}\n\nexport function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode {\n return node.type === 'default';\n}\n\nexport function isDefaultStaticGroupNode(node: Node): node is DefaultGroupNode {\n return node.type === 'default-group';\n}\n\nexport function isDefaultDynamicGroupNode(node: DynamicNode): node is DefaultDynamicGroupNode {\n return node.type === 'default-group';\n}\n\nexport function isTemplateStaticGroupNode<T>(node: Node<T>): node is TemplateGroupNode<T> {\n return node.type === 'template-group';\n}\n\nexport function isTemplateDynamicGroupNode<T>(node: DynamicNode<T>): node is TemplateDynamicGroupNode<T> {\n return node.type === 'template-group';\n}\n","// this is a number to fix visual artifact in chrome.\n// the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\nexport const MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME = 2;\n","import { signal, Signal } from '@angular/core';\nimport { DynamicNode, isDynamicNode, Node } from '../interfaces/node.interface';\n\nexport function toUnifiedNode<T>(node: Node<T> | DynamicNode<T>): DynamicNode<T> {\n if (isDynamicNode(node)) {\n return node;\n }\n\n return {\n ...toSignalProperties(node),\n // non-signal props below\n id: node.id,\n // TODO this actually of incorrect type for component nodes\n type: node.type,\n } as DynamicNode<T>;\n}\n\nfunction toSignalProperties(obj: Record<string, any>): Record<string, Signal<any>> {\n const newObj: Record<string, Signal<any>> = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n newObj[key] = signal(obj[key]);\n }\n }\n return newObj;\n}\n","import { TemplateRef, computed, inject, signal } from '@angular/core';\nimport { DynamicNode, Node, isComponentDynamicNode, isComponentStaticNode } from '../interfaces/node.interface';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { HandleModel } from './handle.model';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Point } from '../interfaces/point.interface';\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME } from '../constants/magic-number-to-fix-glitch-in-chrome.constant';\nimport { Contextable } from '../interfaces/contextable.interface';\nimport { GroupNodeContext, NodeContext } from '../interfaces/template-context.interface';\nimport { toUnifiedNode } from '../utils/to-unified-node';\nimport { Observable } from 'rxjs';\nimport { NodePreview } from '../interfaces/node-preview.interface';\n\nexport class NodeModel<T = unknown>\n implements FlowEntity, Contextable<NodeContext | GroupNodeContext | { $implicit: object }>\n{\n private static defaultWidth = 100;\n private static defaultHeight = 50;\n private static defaultColor = '#1b262c';\n\n private entitiesService = inject(FlowEntitiesService);\n\n public isVisible = signal(false);\n\n public point = signal<Point>({ x: 0, y: 0 });\n public point$: Observable<Point>;\n\n public width = signal(NodeModel.defaultWidth);\n public width$: Observable<number>;\n\n public height = signal(NodeModel.defaultHeight);\n public height$: Observable<number>;\n\n /**\n * @deprecated use width or height signals\n */\n public size = computed(() => ({ width: this.width(), height: this.height() }));\n /**\n * @deprecated use width$ or height$\n */\n public size$: Observable<{ width: number; height: number }>;\n\n /**\n * If resizer is used, the node size fully depends on the resizer\n * Otherwise it calculates the size based on the content\n */\n public styleWidth = computed(() => (this.controlledByResizer() ? `${this.width()}px` : '100%'));\n public styleHeight = computed(() => (this.controlledByResizer() ? `${this.height()}px` : '100%'));\n\n public foWidth = computed(() => this.width() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);\n public foHeight = computed(() => this.height() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);\n\n public renderOrder = signal(0);\n\n public selected = signal(false);\n public selected$: Observable<boolean>;\n\n public preview = signal<NodePreview>({ style: {} });\n\n public globalPoint = computed(() => {\n let parent = this.parent();\n let x = this.point().x;\n let y = this.point().y;\n\n while (parent !== null) {\n x += parent.point().x;\n y += parent.point().y;\n\n parent = parent.parent();\n }\n\n return { x, y };\n });\n\n public pointTransform = computed(() => `translate(${this.globalPoint().x}, ${this.globalPoint().y})`);\n\n public handles = signal<HandleModel[]>([]);\n public handles$: Observable<HandleModel[]>;\n\n public draggable = signal(true);\n\n public dragHandlesCount = signal(0);\n\n // disabled for configuration for now\n public readonly magnetRadius = 20;\n\n // TODO: not sure if we need to statically store it\n public isComponentType =\n isComponentStaticNode(this.rawNode as Node) || isComponentDynamicNode(this.rawNode as DynamicNode);\n\n // Default node specific thing\n public text = signal('');\n\n // Component node specific thing\n public componentTypeInputs = {\n node: this.rawNode,\n };\n\n public parent = computed(() => this.entitiesService.nodes().find((n) => n.rawNode.id === this.parentId()) ?? null);\n\n public children = computed(() => this.entitiesService.nodes().filter((n) => n.parentId() === this.rawNode.id));\n\n public color = signal(NodeModel.defaultColor);\n\n public controlledByResizer = signal(false);\n public resizable = signal(false);\n public resizing = signal(false);\n public resizerTemplate = signal<TemplateRef<unknown> | null>(null);\n\n public context = {\n $implicit: {},\n };\n\n private parentId = signal<string | null>(null);\n\n constructor(public rawNode: Node<T> | DynamicNode<T>) {\n const internalNode = toUnifiedNode(rawNode);\n\n if (internalNode.point) {\n this.point = internalNode.point;\n }\n\n if (internalNode.width) {\n this.width = internalNode.width;\n }\n\n if (internalNode.height) {\n this.height = internalNode.height;\n }\n\n if (internalNode.draggable) {\n this.draggable = internalNode.draggable;\n }\n\n if (internalNode.parentId) {\n this.parentId = internalNode.parentId;\n }\n\n if (internalNode.preview) {\n this.preview = internalNode.preview;\n }\n\n if (internalNode.type === 'default-group' && internalNode.color) {\n this.color = internalNode.color;\n }\n\n if (internalNode.type === 'default-group' && internalNode.resizable) {\n this.resizable = internalNode.resizable;\n }\n\n if (internalNode.type === 'default' && internalNode.text) {\n this.text = internalNode.text;\n }\n\n if (internalNode.type === 'html-template') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected,\n },\n };\n }\n\n if (internalNode.type === 'svg-template') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected,\n width: this.width,\n height: this.height,\n },\n };\n }\n\n if (internalNode.type === 'template-group') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected.asReadonly(),\n width: this.width,\n height: this.height,\n },\n };\n }\n\n // Initialize Observables after all signal assignments\n this.point$ = toObservable(this.point);\n this.width$ = toObservable(this.width);\n this.height$ = toObservable(this.height);\n this.size$ = toObservable(this.size);\n this.selected$ = toObservable(this.selected);\n this.handles$ = toObservable(this.handles);\n }\n\n public setPoint(point: Point) {\n this.point.set(point);\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 { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function straightPath({ sourcePoint, targetPoint }: CurveFactoryParams): CurveLayout {\n return {\n path: `M ${sourcePoint.x},${sourcePoint.y}L ${targetPoint.x},${targetPoint.y}`,\n labelPoints: {\n start: getPointOnLineByRatio(sourcePoint, targetPoint, 0.15),\n center: getPointOnLineByRatio(sourcePoint, targetPoint, 0.5),\n end: getPointOnLineByRatio(sourcePoint, targetPoint, 0.85),\n },\n };\n}\n","import { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath({\n sourcePoint,\n targetPoint,\n sourcePosition,\n targetPosition,\n}: CurveFactoryParams): CurveLayout {\n const distanceVector = { x: sourcePoint.x - targetPoint.x, y: sourcePoint.y - targetPoint.y };\n\n const sourceControl = calcControlPoint(sourcePoint, sourcePosition, distanceVector);\n const targetControl = calcControlPoint(targetPoint, targetPosition, distanceVector);\n\n const path = `M${sourcePoint.x},${sourcePoint.y} C${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${targetPoint.x},${targetPoint.y}`;\n\n return getPathData(path, sourcePoint, targetPoint, sourceControl, targetControl);\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(point: Point, pointPosition: Position, distanceVector: Point) {\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 = 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: string,\n source: Point,\n target: Point,\n sourceControl: Point,\n targetControl: Point,\n): CurveLayout {\n return {\n path,\n labelPoints: {\n start: getPointOnBezier(source, target, sourceControl, targetControl, 0.1),\n center: getPointOnBezier(source, target, sourceControl, targetControl, 0.5),\n end: getPointOnBezier(source, target, sourceControl, targetControl, 0.9),\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n sourceControl: Point,\n targetControl: Point,\n ratio: number,\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(sourcePoint, sourceControl, ratio);\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(sourceControl, targetControl, ratio);\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(targetControl, targetPoint, ratio);\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio,\n );\n}\n","import { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Position } from '../../types/position.type';\n\nconst handleDirections = {\n left: { x: -1, y: 0 },\n right: { x: 1, y: 0 },\n top: { x: 0, y: -1 },\n bottom: { x: 0, y: 1 },\n};\n\nexport function getEdgeCenter(source: Point, target: Point): [number, number, number, number] {\n const xOffset = Math.abs(target.x - source.x) / 2;\n const centerX = target.x < source.x ? target.x + xOffset : target.x - xOffset;\n\n const yOffset = Math.abs(target.y - source.y) / 2;\n const centerY = target.y < source.y ? target.y + yOffset : target.y - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nconst getDirection = ({\n source,\n sourcePosition = 'bottom',\n target,\n}: {\n source: Point;\n sourcePosition: Position;\n target: Point;\n}): Point => {\n if (sourcePosition === 'left' || sourcePosition === 'right') {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nconst distance = (a: Point, b: Point) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({\n source,\n sourcePosition = 'bottom',\n target,\n targetPosition = 'top',\n offset,\n}: {\n source: Point;\n sourcePosition: Position;\n target: Point;\n targetPosition: Position;\n offset: number;\n}): [Point[], number, number] {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped: Point = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n const targetGapped: Point = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n const dir = getDirection({\n source: sourceGapped,\n sourcePosition,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const sourceGapOffset = { x: 0, y: 0 };\n const targetGapOffset = { x: 0, y: 0 };\n\n const [defaultCenterX, defaultCenterY] = getEdgeCenter(source, target);\n\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource: Point[] = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n if (sourcePosition === targetPosition) {\n const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n\n // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n } else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n }\n\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n\n const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n\n // we want to place the label on the longest segment of the edge\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n } else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n\n const pathPoints = [\n source,\n { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n ...points,\n { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n target,\n ];\n\n return [pathPoints, centerX, centerY];\n}\n\nfunction getBend(a: Point, b: Point, c: Point, size: number): string {\n const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n const { x, y } = b;\n\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\n\nexport function smoothStepPath(\n { sourcePoint, targetPoint, sourcePosition, targetPosition }: CurveFactoryParams,\n borderRadius: number = 5,\n): CurveLayout {\n const [points, labelX, labelY] = getPoints({\n source: sourcePoint,\n sourcePosition,\n target: targetPoint,\n targetPosition,\n offset: 20,\n });\n\n const path = points.reduce<string>((res, p, i) => {\n let segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n } else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n\n res += segment;\n\n return res;\n }, '');\n\n // Performance optimization: Pre-calculate cumulative distances and use binary search\n const n = points.length;\n if (n < 2) {\n return {\n path,\n labelPoints: {\n start: { x: labelX, y: labelY },\n center: { x: labelX, y: labelY },\n end: { x: labelX, y: labelY },\n },\n };\n }\n\n // Pre-calculate segment lengths and cumulative distances in a single loop\n const segmentLengths: number[] = new Array(n - 1);\n const cumulativeDistances: number[] = new Array(n);\n cumulativeDistances[0] = 0;\n\n let totalLength = 0;\n\n for (let i = 0; i < n - 1; i++) {\n const dx = points[i + 1].x - points[i].x;\n const dy = points[i + 1].y - points[i].y;\n const len = Math.sqrt(dx * dx + dy * dy);\n segmentLengths[i] = len;\n totalLength += len;\n cumulativeDistances[i + 1] = totalLength;\n }\n\n // Optimized helper function using binary search\n const getPointAtRatio = (ratio: number): Point => {\n const targetDistance = totalLength * ratio;\n\n // Edge cases\n if (targetDistance <= 0) return points[0];\n if (targetDistance >= totalLength) return points[n - 1];\n\n // Binary search for the correct segment\n let low = 0;\n let high = n - 1;\n\n while (low < high - 1) {\n const mid = (low + high) >>> 1; // Bitwise right shift is faster than Math.floor\n if (cumulativeDistances[mid] < targetDistance) {\n low = mid;\n } else {\n high = mid;\n }\n }\n\n // Calculate position within the segment\n const segmentStartDistance = cumulativeDistances[low];\n const localDistance = targetDistance - segmentStartDistance;\n const t = localDistance / segmentLengths[low];\n\n // Linear interpolation\n const start = points[low];\n const end = points[low + 1];\n\n return {\n x: start.x + (end.x - start.x) * t,\n y: start.y + (end.y - start.y) * t,\n };\n };\n\n return {\n path,\n labelPoints: {\n start: getPointAtRatio(0.15),\n center: { x: labelX, y: labelY },\n end: getPointAtRatio(0.85),\n },\n };\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { CreateComputedOptions } from '@angular/core';\nimport { computed as ngComputed } from '@angular/core';\n\n/**\n * @todo Use `linkedSignal` after Angular update\n */\nexport function extendedComputed<TValue>(\n computedCallback: (currentValue: TValue) => TValue,\n options?: CreateComputedOptions<TValue>,\n) {\n if (!options) {\n options = { equal: Object.is };\n }\n\n let currentValue: TValue = undefined!;\n return ngComputed(() => {\n return (currentValue = computedCallback(currentValue));\n }, options);\n}\n","import { computed, inject, 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 { toObservable } from '@angular/core/rxjs-interop';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { smoothStepPath } from '../math/edge-path/smooth-step-path';\nimport { hashCode } from '../utils/hash';\nimport { Contextable } from '../interfaces/contextable.interface';\nimport { EdgeContext } from '../interfaces/template-context.interface';\nimport { HandleModel } from './handle.model';\nimport { CurveFactoryParams } from '../interfaces/curve-factory.interface';\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { extendedComputed } from '../utils/signals/extended-computed';\n\nexport class EdgeModel implements FlowEntity, Contextable<EdgeContext> {\n private readonly flowEntitiesService = inject(FlowEntitiesService);\n\n public source = signal<NodeModel | undefined>(undefined);\n public target = signal<NodeModel | undefined>(undefined);\n public curve: Curve;\n public type: EdgeType;\n public reconnectable: boolean | 'source' | 'target';\n public floating: boolean;\n\n public selected = signal(false);\n public selected$ = toObservable(this.selected);\n\n public renderOrder = signal(0);\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().find((handle) => handle.rawHandle.id === this.edge.sourceHandle);\n } else {\n existsSourceHandle = !!source.handles().find((handle) => handle.rawHandle.type === 'source');\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!target.handles().find((handle) => handle.rawHandle.id === this.edge.targetHandle);\n } else {\n existsTargetHandle = !!target.handles().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 const source = this.sourceHandle();\n const target = this.targetHandle();\n\n // TODO: don't like this\n if (!source || !target) {\n return {\n path: '',\n labelPoints: {\n start: { x: 0, y: 0 },\n center: { x: 0, y: 0 },\n end: { x: 0, y: 0 },\n },\n };\n }\n\n const params = this.getPathFactoryParams(source, target);\n\n switch (this.curve) {\n case 'straight':\n return straightPath(params);\n case 'bezier':\n return bezierPath(params);\n case 'smooth-step':\n return smoothStepPath(params);\n case 'step':\n return smoothStepPath(params, 0);\n default:\n return this.curve(params);\n }\n });\n\n public sourceHandle = extendedComputed<HandleModel | null>((previousHandle) => {\n let handle: HandleModel | null = null;\n\n if (this.floating) {\n handle = this.closestHandles().sourceHandle;\n } else {\n if (this.edge.sourceHandle) {\n handle =\n this.source()\n ?.handles()\n .find((handle) => handle.rawHandle.id === this.edge.sourceHandle) ?? null;\n } else {\n handle =\n this.source()\n ?.handles()\n .find((handle) => handle.rawHandle.type === 'source') ?? null;\n }\n }\n\n // In case of virtual scrolling, if the node is scrolled out of view the handle may disappear\n // which could lead to the edge not being rendered\n // so we return the previous handle if the current one is null\n // TODO: check if this breaks anything\n if (handle === null) {\n return previousHandle;\n }\n\n return handle;\n });\n\n public targetHandle = extendedComputed<HandleModel | null>((previousHandle) => {\n let handle: HandleModel | null = null;\n\n if (this.floating) {\n handle = this.closestHandles().targetHandle;\n } else {\n if (this.edge.targetHandle) {\n handle =\n this.target()\n ?.handles()\n .find((handle) => handle.rawHandle.id === this.edge.targetHandle) ?? null;\n } else {\n handle =\n this.target()\n ?.handles()\n .find((handle) => handle.rawHandle.type === 'target') ?? null;\n }\n }\n\n // In case of virtual scrolling, if the node is scrolled out of view the handle may disappear\n // which could lead to the edge not being rendered\n // so we return the previous handle if the current one is null\n // TODO: check if this breaks anything\n if (handle === null) {\n return previousHandle;\n }\n\n return handle;\n });\n\n public closestHandles = computed(() => {\n const source = this.source();\n const target = this.target();\n\n if (!source || !target) {\n return { sourceHandle: null, targetHandle: null };\n }\n\n // Get all source handles from source node\n const sourceHandles =\n this.flowEntitiesService.connection().mode === 'strict'\n ? source.handles().filter((h) => h.rawHandle.type === 'source')\n : source.handles();\n // Get all target handles from target node\n const targetHandles =\n this.flowEntitiesService.connection().mode === 'strict'\n ? target.handles().filter((h) => h.rawHandle.type === 'target')\n : target.handles();\n\n if (sourceHandles.length === 0 || targetHandles.length === 0) {\n return { sourceHandle: null, targetHandle: null };\n }\n\n let minDistance = Infinity;\n let closestSourceHandle: HandleModel | null = null;\n let closestTargetHandle: HandleModel | null = null;\n\n // Check all combinations of source and target handles\n for (const sourceHandle of sourceHandles) {\n for (const targetHandle of targetHandles) {\n const sourcePoint = sourceHandle.pointAbsolute();\n const targetPoint = targetHandle.pointAbsolute();\n\n const distance = Math.sqrt(\n Math.pow(sourcePoint.x - targetPoint.x, 2) + Math.pow(sourcePoint.y - targetPoint.y, 2),\n );\n\n if (distance < minDistance) {\n minDistance = distance;\n closestSourceHandle = sourceHandle;\n closestTargetHandle = targetHandle;\n }\n }\n }\n\n return {\n sourceHandle: closestSourceHandle,\n targetHandle: closestTargetHandle,\n };\n });\n\n /**\n * TODO: not reactive\n */\n public markerStartUrl = computed(() => {\n const marker = this.edge.markers?.start;\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : '';\n });\n\n /**\n * TODO: not reactive\n */\n public markerEndUrl = computed(() => {\n const marker = this.edge.markers?.end;\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : '';\n });\n\n public context = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.edge,\n path: computed(() => this.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl,\n selected: this.selected.asReadonly(),\n },\n };\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {};\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default';\n this.curve = edge.curve ?? 'bezier';\n this.reconnectable = edge.reconnectable ?? false;\n this.floating = edge.floating ?? false;\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\n private getPathFactoryParams(source: HandleModel, target: HandleModel): CurveFactoryParams {\n return {\n mode: 'edge',\n edge: this.edge,\n sourcePoint: source.pointAbsolute(),\n targetPoint: target.pointAbsolute(),\n sourcePosition: source.rawHandle.position,\n targetPosition: target.rawHandle.position,\n allEdges: this.flowEntitiesService.rawEdges(),\n allNodes: this.flowEntitiesService.rawNodes(),\n };\n }\n}\n","import { NodeModel } from '../../models/node.model';\nimport { DynamicNode, Node } from '../../interfaces/node.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Edge } from '../../interfaces/edge.interface';\n\nexport class ReferenceIdentityChecker {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[] | DynamicNode[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node | DynamicNode, NodeModel> = new Map();\n oldNodeModels.forEach((model) => oldNodesMap.set(model.rawNode, model));\n\n return newNodes.map((newNode) => {\n return oldNodesMap.get(newNode) ?? 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[]): 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, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n Observable,\n asyncScheduler,\n distinctUntilChanged,\n filter,\n map,\n merge,\n observeOn,\n pairwise,\n skip,\n switchMap,\n} from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n// this delay fixes the cases when change triggered\n// but the flow not yet fylly re-rendered\nconst DELAY_FOR_SCHEDULER = 25;\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService);\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes).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 map((changedNode) => {\n return [\n { type: 'position', id: changedNode.rawNode.id, point: changedNode.point() } as NodeChange,\n // TODO: emits even if node is not change position\n ...(this.entitiesService\n .nodes()\n .filter((node) => node !== changedNode && node.selected())\n .map((node) => ({ type: 'position', id: node.rawNode.id, point: node.point() })) as NodeChange[]),\n ];\n }),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeSizeChange$ = toObservable(this.entitiesService.nodes).pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map((node) =>\n node.size$.pipe(\n skip(1),\n map(() => node),\n ),\n ),\n ),\n ),\n map((changedNode) => [{ type: 'size', id: changedNode.rawNode.id, size: changedNode.size() }]),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes).pipe(\n pairwise(),\n map(([oldList, newList]) => newList.filter((node) => !oldList.includes(node))),\n filter((nodes) => !!nodes.length),\n map((nodes) => nodes.map((node) => ({ type: 'add', id: node.rawNode.id }))),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes).pipe(\n pairwise(),\n map(([oldList, newList]) => oldList.filter((node) => !newList.includes(node))),\n filter((nodes) => !!nodes.length),\n map((nodes) => nodes.map((node) => ({ type: 'remove', id: node.rawNode.id }))),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeSelectedChange$ = toObservable(this.entitiesService.nodes).pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map((node) =>\n node.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => node),\n ),\n ),\n ),\n ),\n map((changedNode) => [{ type: 'select', id: changedNode.rawNode.id, selected: changedNode.selected() }]),\n ) satisfies Observable<NodeChange[]>;\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeSizeChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$,\n this.nodeSelectedChange$,\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, DELAY_FOR_SCHEDULER),\n );\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport {\n Observable,\n asyncScheduler,\n distinctUntilChanged,\n filter,\n map,\n merge,\n observeOn,\n pairwise,\n skip,\n switchMap,\n zip,\n} 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((v) => a.filter((e) => e === v).length === b.filter((e) => e === v).length);\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 }) => !nodes.includes(source()!) || !nodes.includes(target()!));\n }),\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(...edges.map((e) => e.detached$.pipe(map(() => e))));\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) => edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges).pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter((edge) => !oldList.includes(edge));\n }),\n filter((edges) => !!edges.length),\n map((edges) => edges.map(({ edge }) => ({ type: 'add', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges).pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter((edge) => !newList.includes(edge));\n }),\n filter((edges) => !!edges.length),\n map((edges) => edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeSelectChange$ = toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) =>\n merge(\n ...edges.map((edge) =>\n edge.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => edge),\n ),\n ),\n ),\n ),\n map((changedEdge) => [{ type: 'select', id: changedEdge.edge.id, selected: changedEdge.selected() }]),\n ) satisfies Observable<EdgeChange[]>;\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$,\n this.edgeSelectChange$,\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, inject } from '@angular/core';\nimport {\n NodeAddChange,\n NodeChange,\n NodePositionChange,\n NodeRemoveChange,\n NodeSelectedChange,\n NodeSizeChange,\n} from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { Observable, filter, map } from 'rxjs';\nimport {\n EdgeAddChange,\n EdgeChange,\n EdgeDetachedChange,\n EdgeRemoveChange,\n EdgeSelectChange,\n} from '../types/edge-change.type';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\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 public readonly onNodesChange = outputFromObservable(this.nodesChangeService.changes$);\n\n public readonly onNodesChangePosition = outputFromObservable(this.nodeChangesOfType('position'), {\n alias: 'onNodesChange.position',\n });\n\n /**\n * @deprecated use `onNodesChange.position` instead\n */\n public readonly onNodesChangePositionSignle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('position')),\n { alias: 'onNodesChange.position.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.position` instead\n */\n public readonly onNodesChangePositionMany = outputFromObservable(\n this.manyChanges(this.nodeChangesOfType('position')),\n { alias: 'onNodesChange.position.many' },\n );\n\n public readonly onNodesChangeSize = outputFromObservable(this.nodeChangesOfType('size'), {\n alias: 'onNodesChange.size',\n });\n\n /**\n * @deprecated use `onNodesChange.size` instead\n */\n public readonly onNodesChangeSizeSingle = outputFromObservable(this.singleChange(this.nodeChangesOfType('size')), {\n alias: 'onNodesChange.size.single',\n });\n\n /**\n * @deprecated use `onNodesChange.size` instead\n */\n public readonly onNodesChangeSizeMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('size')), {\n alias: 'onNodesChange.size.many',\n });\n\n public readonly onNodesChangeAdd = outputFromObservable(this.nodeChangesOfType('add'), {\n alias: 'onNodesChange.add',\n });\n\n /**\n * @deprecated use `onNodesChange.add` instead\n */\n public readonly onNodesChangeAddSingle = outputFromObservable(this.singleChange(this.nodeChangesOfType('add')), {\n alias: 'onNodesChange.add.single',\n });\n\n /**\n * @deprecated use `onNodesChange.add` instead\n */\n public readonly onNodesChangeAddMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('add')), {\n alias: 'onNodesChange.add.many',\n });\n\n public readonly onNodesChangeRemove = outputFromObservable(this.nodeChangesOfType('remove'), {\n alias: 'onNodesChange.remove',\n });\n\n /**\n * @deprecated use `onNodesChange.remove` instead\n */\n public readonly onNodesChangeRemoveSingle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('remove')),\n { alias: 'onNodesChange.remove.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.remove` instead\n */\n public readonly onNodesChangeRemoveMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('remove')), {\n alias: 'onNodesChange.remove.many',\n });\n\n public readonly onNodesChangeSelect = outputFromObservable(this.nodeChangesOfType('select'), {\n alias: 'onNodesChange.select',\n });\n\n /**\n * @deprecated use `onNodesChange.select` instead\n */\n public readonly onNodesChangeSelectSingle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('select')),\n { alias: 'onNodesChange.select.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.select` instead\n */\n public readonly onNodesChangeSelectMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('select')), {\n alias: 'onNodesChange.select.many',\n });\n\n /**\n * Watch edges change\n */\n public readonly onEdgesChange = outputFromObservable(this.edgesChangeService.changes$);\n\n public readonly onNodesChangeDetached = outputFromObservable(this.edgeChangesOfType('detached'), {\n alias: 'onEdgesChange.detached',\n });\n\n /**\n * @deprecated use `onEdgesChange.detached` instead\n */\n public readonly onNodesChangeDetachedSingle = outputFromObservable(\n this.singleChange(this.edgeChangesOfType('detached')),\n { alias: 'onEdgesChange.detached.single' },\n );\n\n /**\n * @deprecated use `onEdgesChange.detached` instead\n */\n public readonly onNodesChangeDetachedMany = outputFromObservable(\n this.manyChanges(this.edgeChangesOfType('detached')),\n { alias: 'onEdgesChange.detached.many' },\n );\n\n public readonly onEdgesChangeAdd = outputFromObservable(this.edgeChangesOfType('add'), {\n alias: 'onEdgesChange.add',\n });\n\n /**\n * @deprecated use `onEdgesChange.add` instead\n */\n public readonly onEdgeChangeAddSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('add')), {\n alias: 'onEdgesChange.add.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.add` instead\n */\n public readonly onEdgeChangeAddMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('add')), {\n alias: 'onEdgesChange.add.many',\n });\n\n public readonly onEdgeChangeRemove = outputFromObservable(this.edgeChangesOfType('remove'), {\n alias: 'onEdgesChange.remove',\n });\n\n /**\n * @deprecated use `onEdgesChange.remove` instead\n */\n public readonly onEdgeChangeRemoveSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('remove')), {\n alias: 'onEdgesChange.remove.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.remove` instead\n */\n public readonly onEdgeChangeRemoveMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('remove')), {\n alias: 'onEdgesChange.remove.many',\n });\n\n public readonly onEdgeChangeSelect = outputFromObservable(this.edgeChangesOfType('select'), {\n alias: 'onEdgesChange.select',\n });\n\n /**\n * @deprecated use `onEdgesChange.select` instead\n */\n public readonly onEdgeChangeSelectSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('select')), {\n alias: 'onEdgesChange.select.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.select` instead\n */\n public readonly onEdgeChangeSelectMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('select')), {\n alias: 'onEdgesChange.select.many',\n });\n\n private nodeChangesOfType<T extends NodeChange['type']>(type: T) {\n return this.nodesChangeService.changes$.pipe(\n map((changes) => changes.filter((c): c is NodeChangeMap[T] => c.type === type)),\n filter((changes) => !!changes.length),\n );\n }\n\n private edgeChangesOfType<T extends EdgeChange['type']>(type: T) {\n return this.edgesChangeService.changes$.pipe(\n map((changes) => changes.filter((c): c is EdgeChangeMap[T] => c.type === type)),\n filter((changes) => !!changes.length),\n );\n }\n\n private singleChange<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter((changes) => changes.length === 1),\n map(([first]) => first),\n );\n }\n\n private manyChanges<T>(changes$: Observable<T[]>) {\n return changes$.pipe(filter((changes) => changes.length > 1));\n }\n}\n\n// TODO: do not write this types manually\ntype NodeChangeMap = {\n position: NodePositionChange;\n size: NodeSizeChange;\n add: NodeAddChange;\n remove: NodeRemoveChange;\n select: NodeSelectedChange;\n};\n\ntype EdgeChangeMap = {\n detached: EdgeDetachedChange;\n add: EdgeAddChange;\n remove: EdgeRemoveChange;\n select: EdgeSelectChange;\n};\n","import { NodeModel } from '../models/node.model';\n\nexport function isGroupNode(node: NodeModel): boolean {\n return node.rawNode.type === 'default-group' || node.rawNode.type === 'template-group';\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/* eslint-disable @typescript-eslint/ban-types */\nimport { Injector, assertInInjectionContext, inject, runInInjectionContext } from '@angular/core';\n\n/**\n * `assertInjector` extends `assertInInjectionContext` with an optional `Injector`\n * After assertion, `assertInjector` runs the `runner` function with the guaranteed `Injector`\n * whether it is the default `Injector` within the current **Injection Context**\n * or the custom `Injector` that was passed in.\n *\n * @template {() => any} Runner - Runner is a function that can return anything\n * @param {Function} fn - the Function to pass in `assertInInjectionContext`\n * @param {Injector | undefined | null} injector - the optional \"custom\" Injector\n * @param {Runner} runner - the runner fn\n * @returns {ReturnType<Runner>} result - returns the result of the Runner\n *\n * @example\n * ```ts\n * function injectValue(injector?: Injector) {\n * return assertInjector(injectValue, injector, () => 'value');\n * }\n *\n * injectValue(); // string\n * ```\n */\nexport function assertInjector<Runner extends () => any>(\n fn: Function,\n injector: Injector | undefined | null,\n runner: Runner,\n): ReturnType<Runner>;\n/**\n * `assertInjector` extends `assertInInjectionContext` with an optional `Injector`\n * After assertion, `assertInjector` returns a guaranteed `Injector` whether it is the default `Injector`\n * within the current **Injection Context** or the custom `Injector` that was passed in.\n *\n * @param {Function} fn - the Function to pass in `assertInInjectionContext`\n * @param {Injector | undefined | null} injector - the optional \"custom\" Injector\n * @returns Injector\n *\n * @example\n * ```ts\n * function injectDestroy(injector?: Injector) {\n * injector = assertInjector(injectDestroy, injector);\n *\n * return runInInjectionContext(injector, () => {\n * // code\n * })\n * }\n * ```\n */\nexport function assertInjector(fn: Function, injector: Injector | undefined | null): Injector;\nexport function assertInjector(fn: Function, injector: Injector | undefined | null, runner?: () => any) {\n !injector && assertInInjectionContext(fn);\n const assertedInjector = injector ?? inject(Injector);\n\n if (!runner) return assertedInjector;\n return runInInjectionContext(assertedInjector, runner);\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { computed, untracked, type Signal } from '@angular/core';\nimport { toSignal, type ToSignalOptions } from '@angular/core/rxjs-interop';\nimport type { Observable, Subscribable } from 'rxjs';\nimport { assertInjector } from '../assert-injector';\n\ntype ReturnType<T, U> = (T | U) | (T | undefined) | (T | null) | T;\n\nexport function toLazySignal<T>(source: Observable<T> | Subscribable<T>): Signal<T | undefined>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & {\n initialValue?: undefined;\n requireSync?: false;\n },\n): Signal<T | undefined>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: null; requireSync?: false },\n): Signal<T | null>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync: true },\n): Signal<T>;\n\nexport function toLazySignal<T, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue: U; requireSync?: false },\n): Signal<T | U>;\n\n/**\n * Function `toLazySignal()` is a proxy function that will call the original\n * `toSignal()` function when the returned signal is read for the first time.\n */\nexport function toLazySignal<T, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions & { initialValue?: U },\n): Signal<ReturnType<T, U>> {\n const injector = assertInjector(toLazySignal, options?.injector);\n let s: Signal<ReturnType<T, U>>;\n\n return computed<ReturnType<T, U>>(() => {\n if (!s) {\n s = untracked(() => toSignal(source, { ...options, injector } as any));\n }\n return s();\n });\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { NodeModel } from '../models/node.model';\nimport { isGroupNode } from '../utils/is-group-node';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { isRectInViewport } from '../utils/viewport';\nimport { ViewportService } from './viewport.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { asyncScheduler, debounceTime, filter, map, merge, observeOn } from 'rxjs';\nimport { toLazySignal } from '../utils/signals/to-lazy-signal';\n\n@Injectable()\nexport class NodeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n private viewportService = inject(ViewportService);\n\n public readonly nodes = computed(() => {\n if (!this.flowSettingsService.optimization().virtualization) {\n return [...this.flowEntitiesService.nodes()].sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());\n }\n\n return this.viewportNodesAfterInteraction().sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());\n });\n\n public readonly groups = computed(() => {\n return this.nodes().filter((n) => isGroupNode(n));\n });\n\n public readonly nonGroups = computed(() => {\n return this.nodes().filter((n) => !isGroupNode(n));\n });\n\n public viewportNodes = computed(() => {\n const nodes = this.flowEntitiesService.nodes();\n const viewport = this.viewportService.readableViewport();\n const flowWidth = this.flowSettingsService.computedFlowWidth();\n const flowHeight = this.flowSettingsService.computedFlowHeight();\n\n return nodes.filter((n) => {\n const { x, y } = n.globalPoint();\n const width = n.width();\n const height = n.height();\n\n return isRectInViewport({ x, y, width, height }, viewport, flowWidth, flowHeight);\n });\n });\n\n private viewportNodesAfterInteraction = toLazySignal(\n merge(\n // TODO: maybe there is a better way wait when viewport is ready?\n // (to correctly calculate viewport nodes on first render)\n toObservable(this.flowEntitiesService.nodes).pipe(\n observeOn(asyncScheduler),\n filter((nodes) => !!nodes.length),\n ),\n\n this.viewportService.viewportChangeEnd$.pipe(debounceTime(300)),\n ).pipe(\n map(() => {\n const viewport = this.viewportService.readableViewport();\n const zoomThreshold = this.flowSettingsService.optimization().virtualizationZoomThreshold;\n\n return viewport.zoom < zoomThreshold ? [] : this.viewportNodes();\n }),\n ),\n {\n initialValue: [],\n },\n );\n\n private maxOrder = computed(() => {\n return Math.max(...this.flowEntitiesService.nodes().map((n) => n.renderOrder()));\n });\n\n public pullNode(node: NodeModel) {\n // pull node\n node.renderOrder.set(this.maxOrder() + 1);\n\n // pull children\n node.children().forEach((n) => this.pullNode(n));\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { Observable, Subject, animationFrameScheduler, fromEvent, map, merge, observeOn, share, tap } from 'rxjs';\nimport { Point } from '../interfaces/point.interface';\n\nexport interface PointerEvent {\n x: number;\n y: number;\n movementX: number;\n movementY: number;\n target: Element | null;\n originalEvent: MouseEvent | TouchEvent;\n}\n\n@Directive({\n standalone: true,\n selector: 'svg[rootPointer]',\n})\nexport class RootPointerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement;\n\n private initialTouch$ = new Subject<TouchEvent>();\n\n private prevTouchEvent: TouchEvent | null = null;\n\n // TODO: do not emit if mouse not down\n public mouseMovement$ = fromEvent<MouseEvent>(this.host, 'mousemove').pipe(\n map((event) => ({\n x: event.clientX,\n y: event.clientY,\n movementX: event.movementX,\n movementY: event.movementY,\n target: event.target as Element | null,\n originalEvent: event,\n })),\n observeOn(animationFrameScheduler),\n share(),\n ) satisfies Observable<Point>;\n\n public touchMovement$ = merge(this.initialTouch$, fromEvent<TouchEvent>(this.host, 'touchmove')).pipe(\n tap((event) => event.preventDefault()),\n map((originalEvent) => {\n const x = originalEvent.touches[0]?.clientX ?? 0;\n const y = originalEvent.touches[0]?.clientY ?? 0;\n const movementX = this.prevTouchEvent ? originalEvent.touches[0].pageX - this.prevTouchEvent.touches[0].pageX : 0;\n const movementY = this.prevTouchEvent ? originalEvent.touches[0].pageY - this.prevTouchEvent.touches[0].pageY : 0;\n\n const target = document.elementFromPoint(x, y);\n\n return { x, y, movementX, movementY, target, originalEvent };\n }),\n tap((event) => (this.prevTouchEvent = event.originalEvent)),\n observeOn(animationFrameScheduler),\n share(),\n ) satisfies Observable<Point>;\n\n public pointerMovement$: Observable<PointerEvent> = merge(this.mouseMovement$, this.touchMovement$);\n\n public touchEnd$ = fromEvent<TouchEvent>(this.host, 'touchend').pipe(\n map((originalEvent) => {\n const x = originalEvent.changedTouches[0]?.clientX ?? 0;\n const y = originalEvent.changedTouches[0]?.clientY ?? 0;\n const target = document.elementFromPoint(x, y);\n\n return { x, y, target, originalEvent };\n }),\n tap(() => (this.prevTouchEvent = null)),\n share(),\n ) satisfies Observable<Point>;\n\n public mouseUp$ = fromEvent<MouseEvent>(this.host, 'mouseup').pipe(\n map((originalEvent) => {\n const x = originalEvent.clientX;\n const y = originalEvent.clientY;\n const target = originalEvent.target;\n\n return { x, y, target, originalEvent };\n }),\n share(),\n ) satisfies Observable<Point>;\n\n public documentPointerEnd$ = merge(fromEvent(document, 'mouseup'), fromEvent(document, 'touchend')).pipe(share());\n\n /**\n * We should know when user started a touch in order to not\n * show old touch position when connection creation is started\n */\n public setInitialTouch(event: TouchEvent) {\n this.initialTouch$.next(event);\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\nimport { RootPointerDirective } from './root-pointer.directive';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: 'g[spacePointContext]',\n})\nexport class SpacePointContextDirective {\n private pointerMovementDirective = inject(RootPointerDirective);\n private rootSvg = inject(RootSvgReferenceDirective).element;\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement;\n\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.pointerMovement();\n\n if (!movement) {\n return { x: 0, y: 0 };\n }\n\n return this.documentPointToFlowPoint({\n x: movement.x,\n y: movement.y,\n });\n });\n\n public pointerMovement = toSignal(this.pointerMovementDirective.pointerMovement$);\n\n public documentPointToFlowPoint(documentPoint: Point) {\n const point = this.rootSvg.createSVGPoint();\n point.x = documentPoint.x;\n point.y = documentPoint.y;\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse());\n }\n}\n","import { Background } from '../types/background.type';\n\nexport function transformBackground(background: Background | string): Background {\n return typeof background === 'string' ? { type: 'solid', color: background } : background;\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 { computed, Injectable, signal } from '@angular/core';\nimport { ToolbarModel } from '../models/toolbar.model';\nimport { NodeModel } from '../models/node.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\n@Injectable()\nexport class OverlaysService {\n private readonly toolbars = signal<ToolbarModel[]>([]);\n\n public nodeToolbarsMap = computed(() => {\n const map = new Map<NodeModel, ToolbarModel[]>();\n\n this.toolbars().forEach((toolbar) => {\n const existing = map.get(toolbar.node) ?? [];\n map.set(toolbar.node, [...existing, toolbar]);\n });\n\n return map;\n });\n\n @Microtask\n public addToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => [...toolbars, toolbar]);\n }\n\n @Microtask\n public removeToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => toolbars.filter((t) => t !== toolbar));\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 const 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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n NgZone,\n TemplateRef,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { resizable } from '../../utils/resizable';\nimport { startWith, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME } from '../../constants/magic-number-to-fix-glitch-in-chrome.constant';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { HtmlEdgeLabelContext } from '../../interfaces/template-context.interface';\nimport { HtmlTemplateEdgeLabel } from '../../interfaces/edge-label.interface';\n\n@Component({\n standalone: true,\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [\n `\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 ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private settingsService = inject(FlowSettingsService);\n\n // TODO: too many inputs\n public model = input.required<EdgeLabelModel>();\n\n public edgeModel = input.required<EdgeModel>();\n\n public point = input({ x: 0, y: 0 });\n\n public htmlTemplate = input<TemplateRef<any>>();\n\n public edgeLabelWrapperRef = viewChild.required<ElementRef<Element>>('edgeLabelWrapper');\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.point();\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 protected edgeLabelStyle = computed(() => {\n const label = this.model().edgeLabel;\n\n if (label.type === 'default' && label.style) {\n const flowBackground = this.settingsService.background();\n\n let color = 'transparent';\n\n if (flowBackground.type === 'dots') {\n color = flowBackground.backgroundColor ?? '#fff';\n }\n\n if (flowBackground.type === 'solid') {\n color = flowBackground.color;\n }\n\n label.style.backgroundColor = label.style.backgroundColor ?? color;\n\n return label.style;\n }\n\n return null;\n });\n\n public ngAfterViewInit(): void {\n const labelElement = this.edgeLabelWrapperRef().nativeElement;\n\n resizable([labelElement], this.zone)\n .pipe(\n startWith(null),\n tap(() => {\n const width = labelElement.clientWidth + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME;\n const height = labelElement.clientHeight + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME;\n\n this.model().size.set({ width, height });\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n // TODO: move to model with Contextable interface\n protected getLabelContext(): HtmlEdgeLabelContext {\n return {\n $implicit: {\n edge: this.edgeModel().edge,\n label: this.model().edgeLabel as HtmlTemplateEdgeLabel,\n },\n };\n }\n}\n","@if (model(); as model) {\n @if (model.edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\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 <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n }\n\n @if (model.edgeLabel.type === 'default') {\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 <div #edgeLabelWrapper class=\"edge-label-wrapper\" [style]=\"edgeLabelStyle()\">\n {{ model.edgeLabel.text }}\n </div>\n </svg:foreignObject>\n }\n}\n","import { ConnectionInternal } from '../interfaces/connection.internal.interface';\n\n/**\n * This function contains a hack-y behavior.\n * If the handles are of the same type (source-source or target-target),\n * it returns nodes where source === target and\n * handles where sourceHandle === targetHandle\n *\n * This leads to that notSelfValidator returns false for these cases,\n * exactly what we need for strict connection type\n */\nexport function adjustDirection(connection: ConnectionInternal): ConnectionInternal {\n const result = {} as ConnectionInternal;\n\n if (connection.sourceHandle.rawHandle.type === 'source') {\n result.source = connection.source;\n result.sourceHandle = connection.sourceHandle;\n } else {\n result.source = connection.target;\n result.sourceHandle = connection.targetHandle;\n }\n\n if (connection.targetHandle.rawHandle.type === 'target') {\n result.target = connection.target;\n result.targetHandle = connection.targetHandle;\n } else {\n result.target = connection.source;\n result.targetHandle = connection.sourceHandle;\n }\n\n return result;\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { Connection, ReconnectionEvent } from '../interfaces/connection.interface';\nimport { FlowStatusConnectionEnd, FlowStatusReconnectionEnd, FlowStatusService } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { HandleModel } from '../models/handle.model';\nimport { adjustDirection } from '../utils/adjust-direction';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, map, tap } from 'rxjs';\nimport { EdgeModel } from '../models/edge.model';\n\n@Directive({\n selector: '[onConnect], [onReconnect]',\n standalone: true,\n})\nexport class ConnectionControllerDirective {\n private statusService = inject(FlowStatusService);\n private flowEntitiesService = inject(FlowEntitiesService);\n\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 * @todo add connect event and deprecate onConnect\n */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onConnect = outputFromObservable<Connection>(\n toObservable(this.statusService.status).pipe(\n filter((status): status is FlowStatusConnectionEnd => status.state === 'connection-end'),\n map((status) => statusToConnection(status, this.isStrictMode())),\n tap(() => this.statusService.setIdleStatus()),\n filter((connection) => this.flowEntitiesService.connection().validator(connection)),\n ),\n );\n\n public readonly onReconnect = outputFromObservable<ReconnectionEvent>(\n toObservable(this.statusService.status).pipe(\n filter((status): status is FlowStatusReconnectionEnd => status.state === 'reconnection-end'),\n map((status) => {\n const connection = statusToConnection(status, this.isStrictMode());\n const oldEdge = status.payload.oldEdge.edge;\n\n return { connection, oldEdge };\n }),\n tap(() => this.statusService.setIdleStatus()),\n filter(({ connection }) => this.flowEntitiesService.connection().validator(connection)),\n ),\n );\n\n protected isStrictMode = computed(() => this.flowEntitiesService.connection().mode === 'strict');\n\n public startConnection(handle: HandleModel) {\n this.statusService.setConnectionStartStatus(handle.parentNode, handle);\n }\n\n public startReconnection(handle: HandleModel, oldEdge: EdgeModel) {\n this.statusService.setReconnectionStartStatus(handle.parentNode, handle, oldEdge);\n }\n\n public validateConnection(handle: HandleModel) {\n const status = this.statusService.status();\n\n if (status.state === 'connection-start' || status.state === 'reconnection-start') {\n const isReconnection = status.state === 'reconnection-start';\n\n let source = status.payload.source;\n let target = handle.parentNode;\n let sourceHandle = status.payload.sourceHandle;\n let targetHandle = handle;\n\n if (this.isStrictMode()) {\n // swap direction (if needed) according to actual source and target of strict mode\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: handle.parentNode,\n targetHandle: handle,\n });\n\n source = adjusted.source;\n target = adjusted.target;\n sourceHandle = adjusted.sourceHandle;\n targetHandle = adjusted.targetHandle;\n }\n\n const valid = this.flowEntitiesService.connection().validator({\n source: source.rawNode.id,\n target: target.rawNode.id,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id,\n });\n\n // TODO: check how react flow handles highlight of handle\n // if direction changes\n handle.state.set(valid ? 'valid' : 'invalid');\n\n // status is about how we draw connection, so we don't need\n // swapped diretion here\n isReconnection\n ? this.statusService.setReconnectionValidationStatus(\n valid,\n status.payload.source,\n handle.parentNode,\n status.payload.sourceHandle,\n handle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionValidationStatus(\n valid,\n status.payload.source,\n handle.parentNode,\n status.payload.sourceHandle,\n handle,\n );\n }\n }\n\n public resetValidateConnection(targetHandle: HandleModel) {\n targetHandle.state.set('idle');\n\n // drop back to start status\n const status = this.statusService.status();\n if (status.state === 'connection-validation' || status.state === 'reconnection-validation') {\n const isReconnection = status.state === 'reconnection-validation';\n\n isReconnection\n ? this.statusService.setReconnectionStartStatus(\n status.payload.source,\n status.payload.sourceHandle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionStartStatus(status.payload.source, status.payload.sourceHandle);\n }\n }\n\n public endConnection() {\n const status = this.statusService.status();\n\n if (status.state === 'connection-validation' || status.state === 'reconnection-validation') {\n const isReconnection = status.state === 'reconnection-validation';\n\n const source = status.payload.source;\n const sourceHandle = status.payload.sourceHandle;\n const target = status.payload.target;\n const targetHandle = status.payload.targetHandle;\n\n isReconnection\n ? this.statusService.setReconnectionEndStatus(\n source,\n target,\n sourceHandle,\n targetHandle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionEndStatus(source, target, sourceHandle, targetHandle);\n }\n }\n}\n\nfunction statusToConnection(\n status: FlowStatusConnectionEnd | FlowStatusReconnectionEnd,\n isStrictMode: boolean,\n): Connection {\n let source = status.payload.source;\n let target = status.payload.target;\n let sourceHandle = status.payload.sourceHandle;\n let targetHandle = status.payload.targetHandle;\n\n if (isStrictMode) {\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: status.payload.target,\n targetHandle: status.payload.targetHandle,\n });\n\n source = adjusted.source;\n target = adjusted.target;\n sourceHandle = adjusted.sourceHandle;\n targetHandle = adjusted.targetHandle;\n }\n\n const sourceId = source.rawNode.id;\n const targetId = target.rawNode.id;\n\n const sourceHandleId = sourceHandle.rawHandle.id;\n const targetHandleId = targetHandle.rawHandle.id;\n\n return {\n source: sourceId,\n target: targetId,\n sourceHandle: sourceHandleId,\n targetHandle: targetHandleId,\n };\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { EdgeModel } from '../models/edge.model';\nimport { FlowSettingsService } from './flow-settings.service';\n\n@Injectable()\nexport class EdgeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n\n public readonly edges = computed(() => {\n if (!this.flowSettingsService.optimization().virtualization) {\n return [...this.flowEntitiesService.validEdges()].sort(\n (aEdge, bEdge) => aEdge.renderOrder() - bEdge.renderOrder(),\n );\n }\n\n return this.viewportEdges().sort((aEdge, bEdge) => aEdge.renderOrder() - bEdge.renderOrder());\n });\n\n private viewportEdges = computed(() => {\n return this.flowEntitiesService.validEdges().filter((e) => {\n const sourceHandle = e.sourceHandle();\n const targetHandle = e.targetHandle();\n\n return sourceHandle && targetHandle;\n });\n });\n\n private maxOrder = computed(() => {\n return Math.max(...this.flowEntitiesService.validEdges().map((n) => n.renderOrder()));\n });\n\n public pull(edge: EdgeModel) {\n const isAlreadyOnTop = edge.renderOrder() !== 0 && this.maxOrder() === edge.renderOrder();\n\n if (isAlreadyOnTop) {\n return;\n }\n\n // pull node\n edge.renderOrder.set(this.maxOrder() + 1);\n }\n}\n","export function isTouchEvent(event: Event): event is TouchEvent {\n return window.TouchEvent && event instanceof TouchEvent;\n}\n","import { Directive, ElementRef, HostListener, inject, output } from '@angular/core';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RootPointerDirective } from './root-pointer.directive';\nimport { isTouchEvent } from '../utils/event';\n\n@Directive({\n standalone: true,\n selector: '[pointerStart], [pointerEnd], [pointerOver], [pointerOut]',\n})\nexport class PointerDirective {\n protected hostElement = inject<ElementRef<Element>>(ElementRef).nativeElement;\n protected pointerMovementDirective = inject(RootPointerDirective);\n\n protected readonly pointerOver = output<Event>();\n\n protected readonly pointerOut = output<Event>();\n\n /**\n * @todo the Angular may somehow ignore the event.\n * reproduced here: https://www.ngx-vflow.org/workshops/layout/vizdom-layout\n */\n protected readonly pointerStart = output<Event>();\n\n protected readonly pointerEnd = output<Event>();\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n protected onPointerStart(event: Event) {\n this.pointerStart.emit(event);\n\n if (isTouchEvent(event)) {\n this.pointerMovementDirective.setInitialTouch(event);\n }\n }\n\n @HostListener('mouseup', ['$event'])\n protected onPointerEnd(event: Event) {\n this.pointerEnd.emit(event);\n }\n\n @HostListener('mouseover', ['$event'])\n protected onMouseOver(event: Event) {\n this.pointerOver.emit(event);\n }\n\n @HostListener('mouseout', ['$event'])\n protected onMouseOut(event: Event) {\n this.pointerOut.emit(event);\n }\n\n private wasPointerOver = false;\n\n // TODO check if i could avoid global touch end\n protected touchEnd = this.pointerMovementDirective.touchEnd$\n .pipe(\n filter(({ target }) => target === this.hostElement),\n tap(({ originalEvent }) => this.pointerEnd.emit(originalEvent)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n protected touchOverOut = this.pointerMovementDirective.touchMovement$\n .pipe(\n tap(({ target, originalEvent }) => {\n this.handleTouchOverAndOut(target, originalEvent);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n // TODO: dirty imperative implementation\n private handleTouchOverAndOut(target: Element | null, event: TouchEvent) {\n if (target === this.hostElement) {\n this.pointerOver.emit(event);\n this.wasPointerOver = true;\n } else {\n // should not emit before pointerOver\n if (this.wasPointerOver) {\n this.pointerOut.emit(event);\n }\n\n this.wasPointerOver = false;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Injector, TemplateRef, computed, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EdgeModel } from '../../models/edge.model';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { EdgeLabelComponent } from '../edge-label/edge-label.component';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { HandleModel } from '../../models/handle.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\nimport { PointerDirective } from '../../directives/pointer.directive';\n\n@Component({\n standalone: true,\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n styleUrls: ['./edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'selectable',\n '[style.visibility]': 'isReconnecting() ? \"hidden\" : \"visible\"',\n },\n imports: [NgTemplateOutlet, EdgeLabelComponent, PointerDirective],\n})\nexport class EdgeComponent {\n protected injector = inject(Injector);\n private selectionService = inject(SelectionService);\n private flowSettingsService = inject(FlowSettingsService);\n private flowStatusService = inject(FlowStatusService);\n private edgeRenderingService = inject(EdgeRenderingService);\n\n // TODO remove dependency from this directive\n private connectionController = inject(ConnectionControllerDirective, { optional: true });\n\n public model = input.required<EdgeModel>();\n\n public edgeTemplate = input<TemplateRef<EdgeContext>>();\n\n public edgeLabelHtmlTemplate = input<TemplateRef<any>>();\n\n protected isReconnecting = computed(() => {\n const status = this.flowStatusService.status();\n const isReconnecting = status.state === 'reconnection-start' || status.state === 'reconnection-validation';\n\n return isReconnecting && status.payload.oldEdge === this.model();\n });\n\n public select() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model());\n }\n }\n\n public pull() {\n if (this.flowSettingsService.elevateEdgesOnSelect()) {\n this.edgeRenderingService.pull(this.model());\n }\n }\n\n protected startReconnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation();\n\n this.connectionController?.startReconnection(handle, this.model());\n }\n}\n","@if (model().type === 'default') {\n <svg:path\n class=\"edge\"\n [attr.d]=\"model().path().path\"\n [attr.marker-start]=\"model().markerStartUrl()\"\n [attr.marker-end]=\"model().markerEndUrl()\"\n [class.edge_selected]=\"model().selected()\" />\n\n <svg:path class=\"interactive-edge\" [attr.d]=\"model().path().path\" (click)=\"select(); pull()\" />\n}\n\n@if (model().type === 'template' && edgeTemplate()) {\n @if (edgeTemplate(); as edgeTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"edgeTemplate\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n }\n}\n\n@if (model().edgeLabels.start; as label) {\n @if (model().path().labelPoints?.start; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().edgeLabels.center; as label) {\n @if (model().path().labelPoints?.center; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().edgeLabels.end; as label) {\n @if (model().path().labelPoints?.end; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().sourceHandle() && model().targetHandle()) {\n @if (model().reconnectable === true || model().reconnectable === 'source') {\n <svg:circle\n class=\"reconnect-handle\"\n r=\"10\"\n [attr.cx]=\"model().sourceHandle()!.pointAbsolute().x\"\n [attr.cy]=\"model().sourceHandle()!.pointAbsolute().y\"\n (pointerStart)=\"startReconnection($event, model().targetHandle()!)\" />\n }\n\n @if (model().reconnectable === true || model().reconnectable === 'target') {\n <svg:circle\n class=\"reconnect-handle\"\n r=\"10\"\n [attr.cx]=\"model().targetHandle()!.pointAbsolute().x\"\n [attr.cy]=\"model().targetHandle()!.pointAbsolute().y\"\n (pointerStart)=\"startReconnection($event, model().sourceHandle()!)\" />\n }\n}\n","import { Injectable, TemplateRef, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\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 userOffsetX: number;\n userOffsetY: number;\n id?: string;\n hostReference?: Element;\n template?: TemplateRef<any> | null;\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null);\n\n @Microtask // TODO fixes rendering of handle for group node\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((handles) => handles.filter((handle) => handle !== handleToDestoy));\n }\n }\n}\n","import { AfterViewInit, Directive, ElementRef, inject, input } from '@angular/core';\nimport { HandleModel } from '../models/handle.model';\n\n@Directive({\n standalone: true,\n selector: '[handleSizeController]',\n})\nexport class HandleSizeControllerDirective implements AfterViewInit {\n public handleModel = input.required<HandleModel>({\n alias: 'handleSizeController',\n });\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 { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: 'default-node',\n templateUrl: './default-node.component.html',\n styleUrls: [`./default-node.component.scss`],\n host: {\n '[class.selected]': 'selected()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultNodeComponent {\n public selected = input(false);\n}\n","<ng-content />\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n inject,\n OnInit,\n TemplateRef,\n input,\n viewChild,\n effect,\n ChangeDetectionStrategy,\n OnDestroy,\n} from '@angular/core';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ViewportService } from '../../services/viewport.service';\nimport { round } from '../../utils/round';\nimport { Microtask } from '../../decorators/microtask.decorator';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { NodeModel } from '../../models/node.model';\nimport { Rect } from '../../interfaces/rect';\nimport { PointerEvent } from '../../directives/root-pointer.directive';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { PointerDirective } from '../../directives/pointer.directive';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { Point } from '../../interfaces/point.interface';\nimport { align } from '../../utils/align-number';\n\ntype Side = 'top' | 'right' | 'bottom' | 'left' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\ninterface DistanceToEdge {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\n@Component({\n standalone: true,\n selector: '[resizable]',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss'],\n imports: [PointerDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizableComponent implements OnInit, AfterViewInit, OnDestroy {\n private nodeAccessor = inject(NodeAccessorService);\n private rootPointer = inject(RootPointerDirective);\n private viewportService = inject(ViewportService);\n private spacePointContext = inject(SpacePointContextDirective);\n private settingsService = inject(FlowSettingsService);\n private hostRef = inject<ElementRef<Element>>(ElementRef);\n\n public resizable = input<boolean | ''>();\n\n public resizerColor = input('#2e414c');\n\n public gap = input(1.5);\n\n private resizer = viewChild.required<TemplateRef<unknown>>('resizer');\n\n protected get model() {\n return this.nodeAccessor.model()!;\n }\n\n protected lineGap = 3;\n protected handleSize = 6;\n\n private resizeSide: Side | null = null;\n\n private zoom = computed(() => this.viewportService.readableViewport().zoom ?? 0);\n\n private minWidth = 0;\n private minHeight = 0;\n private maxWidth = Infinity;\n private maxHeight = Infinity;\n\n // TODO: allow reszie beside the flow\n protected resizeOnGlobalMouseMove = this.rootPointer.pointerMovement$\n .pipe(\n filter(() => this.resizeSide !== null),\n filter((event) => event.movementX !== 0 || event.movementY !== 0),\n tap((event) => this.resize(event)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n protected endResizeOnGlobalMouseUp = this.rootPointer.documentPointerEnd$\n .pipe(\n tap(() => this.endResize()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n constructor() {\n effect(\n () => {\n const resizable = this.resizable();\n\n if (typeof resizable === 'boolean') {\n this.model.resizable.set(resizable);\n } else {\n this.model.resizable.set(true);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n public ngOnInit(): void {\n this.model.controlledByResizer.set(true);\n this.model.resizerTemplate.set(this.resizer());\n }\n\n public ngOnDestroy(): void {\n this.model.controlledByResizer.set(false);\n }\n\n @Microtask\n public ngAfterViewInit() {\n this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0;\n this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0;\n this.maxWidth = +getComputedStyle(this.hostRef.nativeElement).maxWidth.replace('px', '') || Infinity;\n this.maxHeight = +getComputedStyle(this.hostRef.nativeElement).maxHeight.replace('px', '') || Infinity;\n }\n\n protected startResize(side: Side, event: Event) {\n event.stopPropagation();\n this.resizeSide = side;\n this.model.resizing.set(true);\n }\n\n protected resize(event: PointerEvent) {\n if (!this.resizeSide) return;\n\n const offset = calcOffset(event.movementX, event.movementY, this.zoom());\n\n const resized = this.applyResize(this.resizeSide, this.model, offset, this.getDistanceToEdge(event));\n\n const { x, y, width, height } = constrainRect(\n resized,\n this.model,\n this.resizeSide,\n this.minWidth,\n this.minHeight,\n this.maxWidth,\n this.maxHeight,\n );\n\n this.model.setPoint({ x, y });\n this.model.width.set(width);\n this.model.height.set(height);\n }\n\n protected endResize() {\n this.resizeSide = null;\n this.model.resizing.set(false);\n }\n\n private getDistanceToEdge(event: PointerEvent): DistanceToEdge {\n const flowPoint = this.spacePointContext.documentPointToFlowPoint({ x: event.x, y: event.y });\n const { x, y } = this.model.globalPoint();\n\n return {\n left: flowPoint.x - x,\n right: flowPoint.x - (x + this.model.width()),\n top: flowPoint.y - y,\n bottom: flowPoint.y - (y + this.model.height()),\n };\n }\n\n private applyResize(side: Side, model: NodeModel, offset: Point, distanceToEdge: DistanceToEdge): Rect {\n const { x, y } = model.point();\n const width = model.width();\n const height = model.height();\n const [snapX, snapY] = this.settingsService.snapGrid();\n\n switch (side) {\n case 'left': {\n const movementX = offset.x + distanceToEdge.left;\n const newX = align(x + movementX, snapX);\n const deltaX = newX - x;\n\n return {\n x: newX,\n y,\n width: width - deltaX,\n height,\n };\n }\n case 'right': {\n const movementX = offset.x + distanceToEdge.right;\n const newWidth = align(width + movementX, snapX);\n\n return {\n x,\n y,\n width: newWidth,\n height,\n };\n }\n case 'top': {\n const movementY = offset.y + distanceToEdge.top;\n const newY = align(y + movementY, snapY);\n const deltaY = newY - y;\n\n return {\n x,\n y: newY,\n width,\n height: height - deltaY,\n };\n }\n case 'bottom': {\n const movementY = offset.y + distanceToEdge.bottom;\n const newHeight = align(height + movementY, snapY);\n\n return {\n x,\n y,\n width,\n height: newHeight,\n };\n }\n case 'top-left': {\n const movementX = offset.x + distanceToEdge.left;\n const movementY = offset.y + distanceToEdge.top;\n const newX = align(x + movementX, snapX);\n const newY = align(y + movementY, snapY);\n const deltaX = newX - x;\n const deltaY = newY - y;\n\n return {\n x: newX,\n y: newY,\n width: width - deltaX,\n height: height - deltaY,\n };\n }\n case 'top-right': {\n const movementX = offset.x + distanceToEdge.right;\n const movementY = offset.y + distanceToEdge.top;\n const newY = align(y + movementY, snapY);\n const deltaY = newY - y;\n\n return {\n x,\n y: newY,\n width: align(width + movementX, snapX),\n height: height - deltaY,\n };\n }\n case 'bottom-left': {\n const movementX = offset.x + distanceToEdge.left;\n const movementY = offset.y + distanceToEdge.bottom;\n const newX = align(x + movementX, snapX);\n const deltaX = newX - x;\n\n return {\n x: newX,\n y,\n width: width - deltaX,\n height: align(height + movementY, snapY),\n };\n }\n case 'bottom-right': {\n const movementX = offset.x + distanceToEdge.right;\n const movementY = offset.y + distanceToEdge.bottom;\n\n return {\n x,\n y,\n width: align(width + movementX, snapX),\n height: align(height + movementY, snapY),\n };\n }\n }\n }\n}\n\nfunction calcOffset(movementX: number, movementY: number, zoom: number): Point {\n return {\n x: round(movementX / zoom),\n y: round(movementY / zoom),\n };\n}\n\nfunction constrainRect(\n rect: Rect,\n model: NodeModel,\n side: Side,\n minWidth: number,\n minHeight: number,\n maxWidth: number,\n maxHeight: number,\n) {\n let { x, y, width, height } = rect;\n\n // 1. Prevent negative dimensions\n width = Math.max(width, 0);\n height = Math.max(height, 0);\n\n // 2. Apply minimum size constraints\n width = Math.max(minWidth, width);\n height = Math.max(minHeight, height);\n width = Math.min(maxWidth, width);\n height = Math.min(maxHeight, height);\n\n // Apply left/top constraints based on minimum size\n x = Math.min(x, model.point().x + model.width() - minWidth);\n y = Math.min(y, model.point().y + model.height() - minHeight);\n x = Math.max(x, model.point().x + model.width() - maxWidth);\n y = Math.max(y, model.point().y + model.height() - maxHeight);\n\n const parent = model.parent();\n // 3. Apply maximum size constraints based on parent size (if exists)\n if (parent) {\n const parentWidth = parent.width();\n const parentHeight = parent.height();\n const modelX = model.point().x;\n const modelY = model.point().y;\n\n x = Math.max(x, 0);\n y = Math.max(y, 0);\n\n // Stop resizing when hitting left or top boundary\n if (side.includes('left') && x === 0) {\n width = Math.min(width, modelX + model.width());\n }\n if (side.includes('top') && y === 0) {\n height = Math.min(height, modelY + model.height());\n }\n\n // Allow right/bottom resizing without being blocked\n width = Math.min(width, parentWidth - x);\n height = Math.min(height, parentHeight - y);\n }\n\n const bounds = getNodesBounds(model.children());\n // 4. Apply child node constraints (if children exist)\n if (bounds) {\n if (side.includes('left')) {\n x = Math.min(x, model.point().x + model.width() - (bounds.x + bounds.width));\n width = Math.max(width, bounds.x + bounds.width);\n }\n\n if (side.includes('right')) {\n width = Math.max(width, bounds.x + bounds.width);\n }\n\n if (side.includes('bottom')) {\n height = Math.max(height, bounds.y + bounds.height);\n }\n\n if (side.includes('top')) {\n y = Math.min(y, model.point().y + model.height() - (bounds.y + bounds.height));\n height = Math.max(height, bounds.y + bounds.height);\n }\n }\n\n return {\n x,\n y,\n width,\n height,\n };\n}\n","<ng-template #resizer>\n <svg:g>\n <!-- top line -->\n <svg:line\n class=\"top\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"-gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"-gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('top', $event)\" />\n <!-- Left line -->\n <svg:line\n class=\"left\"\n stroke-width=\"2\"\n [attr.x1]=\"-gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"-gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('left', $event)\" />\n <!-- Bottom line -->\n <svg:line\n class=\"bottom\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"model.size().height + gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"model.size().height + gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom', $event)\" />\n <!-- Right line -->\n <svg:line\n class=\"right\"\n stroke-width=\"2\"\n [attr.x1]=\"model.size().width + gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"model.size().width + gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('right', $event)\" />\n\n <!-- Top Left -->\n <svg:rect\n class=\"top-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-left', $event)\" />\n\n <!-- Top right -->\n <svg:rect\n class=\"top-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-right', $event)\" />\n\n <!-- Bottom left -->\n <svg:rect\n class=\"bottom-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-left', $event)\" />\n\n <!-- Bottom right -->\n <svg:rect\n class=\"bottom-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-right', $event)\" />\n </svg:g>\n</ng-template>\n\n<ng-content />\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 pointAbsolute = computed(() => {\n return {\n x: this.parentNode.globalPoint().x + this.hostOffset().x + this.sizeOffset().x,\n y: this.parentNode.globalPoint().y + this.hostOffset().y + this.sizeOffset().y,\n };\n });\n\n public state = signal<HandleState>('idle');\n\n private updateHostSizeAndPosition$ = new Subject<void>();\n\n // TODO: for some reason toLazySignal breaks unit tests, so we use toSignal here\n private hostSize = toSignal(this.updateHostSizeAndPosition$.pipe(map(() => this.getHostSize())), {\n initialValue: { width: 0, height: 0 },\n });\n\n // TODO: for some reason toLazySignal breaks unit tests, so we use toSignal here\n private hostPosition = toSignal(\n this.updateHostSizeAndPosition$.pipe(\n map(() => ({\n x: this.hostReference instanceof HTMLElement ? this.hostReference.offsetLeft : 0, // for now just 0 for group nodes\n y: this.hostReference instanceof HTMLElement ? this.hostReference.offsetTop : 0, // for now just 0 for group nodes\n })),\n ),\n {\n initialValue: { x: 0, y: 0 },\n },\n );\n\n public hostOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left':\n return {\n x: -this.rawHandle.userOffsetX,\n y: -this.rawHandle.userOffsetY + this.hostPosition().y + this.hostSize().height / 2,\n };\n case 'right':\n return {\n x: -this.rawHandle.userOffsetX + this.parentNode.size().width,\n y: -this.rawHandle.userOffsetY + this.hostPosition().y + this.hostSize().height / 2,\n };\n case 'top':\n return {\n x: -this.rawHandle.userOffsetX + this.hostPosition().x + this.hostSize().width / 2,\n y: -this.rawHandle.userOffsetY,\n };\n case 'bottom':\n return {\n x: -this.rawHandle.userOffsetX + this.hostPosition().x + this.hostSize().width / 2,\n y: -this.rawHandle.userOffsetY + this.parentNode.size().height,\n };\n }\n });\n\n private sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left':\n return { x: -(this.size().width / 2), y: 0 };\n case 'right':\n return { x: this.size().width / 2, y: 0 };\n case 'top':\n return { x: 0, y: -(this.size().height / 2) };\n case 'bottom':\n return { x: 0, y: this.size().height / 2 };\n }\n });\n\n public hostReference = this.rawHandle.hostReference!;\n\n public template = this.rawHandle.template;\n\n public templateContext = {\n $implicit: {\n point: this.hostOffset,\n state: this.state,\n node: this.parentNode.rawNode,\n },\n };\n\n constructor(\n public rawHandle: NodeHandle,\n public parentNode: NodeModel,\n ) {}\n\n public updateHost() {\n this.updateHostSizeAndPosition$.next();\n }\n\n private getHostSize(): { width: number; height: number } {\n if (this.hostReference instanceof HTMLElement) {\n return {\n width: this.hostReference.offsetWidth,\n height: this.hostReference.offsetHeight,\n };\n } else if (this.hostReference instanceof SVGGraphicsElement) {\n return this.hostReference.getBBox();\n }\n\n return { width: 0, height: 0 };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n OnInit,\n TemplateRef,\n inject,\n input,\n runInInjectionContext,\n} 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 standalone: true,\n selector: 'handle',\n templateUrl: './handle.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HandleComponent implements OnInit {\n private injector = inject(Injector);\n private handleService = inject(HandleService);\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private destroyRef = inject(DestroyRef);\n\n /**\n * At what side of node this component should be placed\n */\n public position = input.required<Position>();\n\n /**\n * Source or target\n */\n public type = input.required<'source' | 'target'>();\n\n /**\n * Should be used if node has more than one source/target\n */\n public id = input<string>();\n\n public template = input<TemplateRef<any> | null>();\n\n public offsetX = input<number>(0);\n public offsetY = input<number>(0);\n\n public ngOnInit() {\n runInInjectionContext(this.injector, () => {\n const node = this.handleService.node();\n\n if (node) {\n const model = new HandleModel(\n {\n position: this.position(),\n type: this.type(),\n id: this.id(),\n hostReference: this.element.parentElement!,\n template: this.template(),\n userOffsetX: this.offsetX(),\n userOffsetY: this.offsetY(),\n },\n node,\n );\n\n this.handleService.createHandle(model);\n\n requestAnimationFrame(() => model.updateHost());\n\n this.destroyRef.onDestroy(() => this.handleService.destroyHandle(model));\n }\n });\n }\n}\n","","import { DestroyRef, Directive, ElementRef, inject, NgZone, OnInit } from '@angular/core';\nimport { NodeAccessorService } from '../services/node-accessor.service';\nimport { map, switchMap, tap } from 'rxjs';\nimport { resizable } from '../utils/resizable';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[nodeHandlesController]',\n standalone: true,\n})\nexport class NodeHandlesControllerDirective implements OnInit {\n private nodeAccessor = inject(NodeAccessorService);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private hostElementRef = inject<ElementRef<Element>>(ElementRef);\n\n public ngOnInit(): void {\n const model = this.nodeAccessor.model()!;\n\n model.handles$\n .pipe(\n switchMap((handles) =>\n resizable([...handles.map((h) => h.hostReference!), this.hostElementRef.nativeElement], this.zone).pipe(\n map(() => handles),\n ),\n ),\n tap((handles) => {\n // TODO (performance) inspect how to avoid calls of this when flow initially rendered\n handles.forEach((h) => h.updateHost());\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject, NgZone, OnInit } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { NodeAccessorService } from '../services/node-accessor.service';\nimport { filter, merge, startWith, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Only suitable for HTML nodes\n */\n@Directive({\n selector: '[nodeResizeController]',\n standalone: true,\n})\nexport class NodeResizeControllerDirective implements OnInit {\n private nodeAccessor = inject(NodeAccessorService);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private hostElementRef = inject<ElementRef<Element>>(ElementRef);\n\n public ngOnInit(): void {\n const model = this.nodeAccessor.model()!;\n\n const host = this.hostElementRef.nativeElement;\n\n merge(resizable([host], this.zone))\n .pipe(\n startWith(null),\n filter(() => !model.resizing()),\n tap(() => {\n model.width.set(host.clientWidth);\n model.height.set(host.clientHeight);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { HandleSizeControllerDirective } from '../../directives/handle-size-controller.directive';\nimport { NgTemplateOutlet, NgComponentOutlet } from '@angular/common';\nimport { DefaultNodeComponent } from '../default-node/default-node.component';\nimport { PointerDirective } from '../../directives/pointer.directive';\n\n// TODO: fix loading of these by @defer (should work in Angular 18+)\n// public components that uses in default node (loaded by defer)\nimport { ResizableComponent } from '../../public-components/resizable/resizable.component';\nimport { HandleComponent } from '../../public-components/handle/handle.component';\nimport { NodeHandlesControllerDirective } from '../../directives/node-handles-controller.directive';\nimport { NodeResizeControllerDirective } from '../../directives/node-resize-controller.directive';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle';\n\n@Component({\n standalone: true,\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService, NodeAccessorService],\n host: {\n class: 'vflow-node',\n },\n imports: [\n PointerDirective,\n DefaultNodeComponent,\n HandleComponent,\n NgTemplateOutlet,\n NgComponentOutlet,\n ResizableComponent,\n HandleSizeControllerDirective,\n NodeHandlesControllerDirective,\n NodeResizeControllerDirective,\n ],\n})\nexport class NodeComponent implements OnInit, OnDestroy {\n protected injector = inject(Injector);\n private handleService = inject(HandleService);\n private draggableService = inject(DraggableService);\n private flowStatusService = inject(FlowStatusService);\n private nodeRenderingService = inject(NodeRenderingService);\n private flowSettingsService = inject(FlowSettingsService);\n private selectionService = inject(SelectionService);\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef);\n private nodeAccessor = inject(NodeAccessorService);\n private overlaysService = inject(OverlaysService);\n\n // TODO remove dependency from this directive\n private connectionController = inject(ConnectionControllerDirective, { optional: true });\n\n public model = input.required<NodeModel>();\n\n public nodeTemplate = input<TemplateRef<any>>();\n\n public nodeSvgTemplate = input<TemplateRef<any>>();\n\n public groupNodeTemplate = input<TemplateRef<any>>();\n\n protected showMagnet = computed(\n () =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation' ||\n this.flowStatusService.status().state === 'reconnection-start' ||\n this.flowStatusService.status().state === 'reconnection-validation',\n );\n\n protected toolbars = computed(() => this.overlaysService.nodeToolbarsMap().get(this.model()));\n\n public ngOnInit() {\n this.model().isVisible.set(true);\n\n this.nodeAccessor.model.set(this.model());\n this.handleService.node.set(this.model());\n\n effect(\n () => {\n if (this.model().draggable()) {\n this.draggableService.enable(this.hostRef.nativeElement, this.model());\n } else {\n this.draggableService.disable(this.hostRef.nativeElement);\n }\n },\n { injector: this.injector },\n );\n }\n\n public ngOnDestroy(): void {\n this.model().isVisible.set(false);\n\n this.draggableService.destroy(this.hostRef.nativeElement);\n }\n\n protected startConnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation();\n\n this.connectionController?.startConnection(handle);\n }\n\n protected validateConnection(handle: HandleModel) {\n this.connectionController?.validateConnection(handle);\n }\n\n protected resetValidateConnection(targetHandle: HandleModel) {\n this.connectionController?.resetValidateConnection(targetHandle);\n }\n\n protected endConnection() {\n this.connectionController?.endConnection();\n }\n\n protected pullNode() {\n if (this.flowSettingsService.elevateNodesOnSelect()) {\n this.nodeRenderingService.pullNode(this.model());\n }\n }\n\n protected selectNode() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model());\n }\n }\n}\n","<!-- Default node -->\n@if (model().rawNode.type === 'default') {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode(); selectNode()\">\n <default-node\n nodeHandlesController\n [selected]=\"model().selected()\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\"\n [style.max-width]=\"model().styleWidth()\"\n [style.max-height]=\"model().styleHeight()\">\n <div [outerHTML]=\"model().text()\"></div>\n\n <handle type=\"source\" position=\"right\" />\n <handle type=\"target\" position=\"left\" />\n </default-node>\n </svg:foreignObject>\n}\n\n<!-- HTML Template node -->\n@if (model().rawNode.type === 'html-template' && nodeTemplate()) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n}\n\n<!-- SVG Template node -->\n@if (model().rawNode.type === 'svg-template' && nodeSvgTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeSvgTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Component node -->\n@if (model().isComponentType) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngComponentOutlet]=\"$any(model().rawNode.type)\"\n [ngComponentOutletInputs]=\"model().componentTypeInputs\"\n [ngComponentOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n}\n\n<!-- Default group node -->\n@if (model().rawNode.type === 'default-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [resizable]=\"model().resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"model().color()\"\n [class.default-group-node_selected]=\"model().selected()\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\"\n [style.stroke]=\"model().color()\"\n [style.fill]=\"model().color()\"\n (click)=\"pullNode(); selectNode()\" />\n}\n\n<!-- Template group node -->\n@if (model().rawNode.type === 'template-group' && groupNodeTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Resizer -->\n@if (model().resizerTemplate(); as template) {\n @if (model().resizable()) {\n <ng-template [ngTemplateOutlet]=\"template\" />\n }\n}\n\n<!-- Handles -->\n@for (handle of model().handles(); track handle) {\n @if (handle.template === undefined) {\n <svg:circle\n class=\"default-handle\"\n r=\"5\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\" />\n }\n\n @if (handle.template === null) {\n <svg:g\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\" />\n }\n\n @if (handle.template) {\n <svg:g\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\">\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n }\n\n @if (showMagnet()) {\n <svg:circle\n class=\"magnet\"\n [attr.r]=\"model().magnetRadius\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n (pointerEnd)=\"endConnection(); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\" />\n }\n}\n\n<!-- Toolbar -->\n@for (toolbar of toolbars(); track toolbar) {\n <svg:foreignObject\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\">\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n </svg:foreignObject>\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, computed, inject, input } 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';\nimport { smoothStepPath } from '../../math/edge-path/smooth-step-path';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ConnectionContext } from '../../interfaces/template-context.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { CurveFactoryParams } from '../../interfaces/curve-factory.interface';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\n\n@Component({\n standalone: true,\n selector: 'g[connection]',\n template: `\n @if (model().type === 'default') {\n @if (path(); as path) {\n <svg:path\n fill=\"none\"\n stroke-width=\"2\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\" />\n }\n }\n\n @if (model().type === 'template') {\n @if (template(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n})\nexport class ConnectionComponent {\n private readonly flowStatusService = inject(FlowStatusService);\n private readonly spacePointContext = inject(SpacePointContextDirective);\n private readonly flowEntitiesService = inject(FlowEntitiesService);\n\n public model = input.required<ConnectionModel>();\n\n public template = input<TemplateRef<any>>();\n\n protected path = computed(() => {\n const status = this.flowStatusService.status();\n const curve = this.model().curve;\n\n if (status.state === 'connection-start' || status.state === 'reconnection-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 const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);\n\n switch (curve) {\n case 'straight':\n return straightPath(params).path;\n case 'bezier':\n return bezierPath(params).path;\n case 'smooth-step':\n return smoothStepPath(params).path;\n case 'step':\n return smoothStepPath(params, 0).path;\n default:\n return curve(params).path;\n }\n }\n\n if (status.state === 'connection-validation' || status.state === 'reconnection-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 const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);\n\n switch (curve) {\n case 'straight':\n return straightPath(params).path;\n case 'bezier':\n return bezierPath(params).path;\n case 'smooth-step':\n return smoothStepPath(params).path;\n case 'step':\n return smoothStepPath(params, 0).path;\n default:\n return curve(params).path;\n }\n }\n\n return null;\n });\n\n protected markerUrl = computed(() => {\n const marker = this.model().settings.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 // TODO: move context to model\n protected getContext(): ConnectionContext {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl,\n },\n };\n }\n\n private getPathFactoryParams(\n sourcePoint: Point,\n targetPoint: Point,\n sourcePosition: Position,\n targetPosition: Position,\n ): CurveFactoryParams {\n return {\n mode: 'connection',\n sourcePoint,\n targetPoint,\n sourcePosition,\n targetPosition,\n allEdges: this.flowEntitiesService.rawEdges(),\n allNodes: this.flowEntitiesService.rawNodes(),\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","export function id(): string {\n const randomLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n\n return randomLetter + Date.now();\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { id } from '../../utils/id';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { map, switchMap } from 'rxjs';\nimport { toLazySignal } from '../../utils/signals/to-lazy-signal';\n\nconst defaultBg = '#fff';\nconst defaultGap = 20;\nconst defaultDotSize = 2;\nconst defaultDotColor = 'rgb(177, 177, 183)';\nconst defaultImageScale = 0.1;\nconst defaultRepeated = true;\n\n@Component({\n standalone: true,\n selector: 'g[background]',\n templateUrl: './background.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BackgroundComponent {\n private viewportService = inject(ViewportService);\n private rootSvg = inject(RootSvgReferenceDirective).element;\n private settingsService = inject(FlowSettingsService);\n\n protected backgroundSignal = this.settingsService.background;\n\n // DOTS PATTERN\n protected scaledGap = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n const zoom = this.viewportService.readableViewport().zoom;\n\n return zoom * (background.gap ?? defaultGap);\n }\n\n return 0;\n });\n\n protected x = computed(() => this.viewportService.readableViewport().x % this.scaledGap());\n\n protected y = computed(() => this.viewportService.readableViewport().y % this.scaledGap());\n\n protected patternColor = computed(() => {\n const bg = this.backgroundSignal();\n\n if (bg.type === 'dots') {\n return bg.color ?? defaultDotColor;\n }\n\n return defaultDotColor;\n });\n\n protected patternSize = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n return (this.viewportService.readableViewport().zoom * (background.size ?? defaultDotSize)) / 2;\n }\n\n return 0;\n });\n\n // IMAGE PATTERN\n protected bgImageSrc = computed(() => {\n const background = this.backgroundSignal();\n\n return background.type === 'image' ? background.src : '';\n });\n\n protected imageSize = toLazySignal(\n toObservable(this.backgroundSignal).pipe(\n switchMap(() => createImage(this.bgImageSrc())),\n map((image) => ({ width: image.naturalWidth, height: image.naturalHeight })),\n ),\n { initialValue: { width: 0, height: 0 } },\n );\n\n protected scaledImageWidth = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;\n\n return this.imageSize().width * zoom * (background.scale ?? defaultImageScale);\n }\n\n return 0;\n });\n\n protected scaledImageHeight = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;\n\n return this.imageSize().height * zoom * (background.scale ?? defaultImageScale);\n }\n\n return 0;\n });\n\n protected imageX = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n if (!background.repeat) {\n return background.fixed ? 0 : this.viewportService.readableViewport().x;\n }\n\n return background.fixed ? 0 : this.viewportService.readableViewport().x % this.scaledImageWidth();\n }\n\n return 0;\n });\n\n protected imageY = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n if (!background.repeat) {\n return background.fixed ? 0 : this.viewportService.readableViewport().y;\n }\n\n return background.fixed ? 0 : this.viewportService.readableViewport().y % this.scaledImageHeight();\n }\n\n return 0;\n });\n\n protected repeated = computed(() => {\n const background = this.backgroundSignal();\n\n return background.type === 'image' && (background.repeat ?? defaultRepeated);\n });\n\n // Without ID there will be pattern collision for several flows on the page\n // Later pattern ID may be exposed to API\n protected patternId = id();\n protected patternUrl = `url(#${this.patternId})`;\n\n constructor() {\n effect(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n this.rootSvg.style.backgroundColor = background.backgroundColor ?? defaultBg;\n }\n\n if (background.type === 'solid') {\n this.rootSvg.style.backgroundColor = background.color;\n }\n });\n }\n}\n\nfunction createImage(url: string) {\n const image = new Image();\n\n image.src = url;\n\n return new Promise<HTMLImageElement>((resolve) => {\n image.onload = () => resolve(image);\n });\n}\n","@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\">\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\">\n <svg:image [attr.href]=\"bgImageSrc()\" [attr.width]=\"scaledImageWidth()\" [attr.height]=\"scaledImageHeight()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\" />\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\nimport { KeyValuePipe } from '@angular/common';\n\n@Component({\n standalone: true,\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KeyValuePipe],\n})\nexport class DefsComponent {\n public markers = input.required<Map<number, Marker>>();\n\n protected readonly defaultColor = 'rgb(177, 177, 183)';\n}\n","@for (marker of markers() | keyvalue; track marker) {\n <svg:marker\n viewBox=\"-10 -10 20 20\"\n refX=\"0\"\n refY=\"0\"\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 [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\">\n @if (marker.value.type === 'arrow-closed' || !marker.value.type) {\n <polyline\n class=\"marker__arrow_closed\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\" />\n }\n\n @if (marker.value.type === 'arrow') {\n <polyline\n class=\"marker__arrow_default\"\n points=\"-5,-4 0,0 -5,4\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\" />\n }\n </svg:marker>\n}\n","import { Directive, ElementRef, NgZone, Signal, computed, inject } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { tap } from 'rxjs';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: 'svg[flowSizeController]',\n host: {\n '[attr.width]': 'flowWidth()',\n '[attr.height]': 'flowHeight()',\n },\n})\nexport class FlowSizeControllerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef);\n private flowSettingsService = inject(FlowSettingsService);\n\n public flowWidth: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view();\n\n return view === 'auto' ? '100%' : view[0];\n });\n\n public flowHeight: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view();\n\n return view === 'auto' ? '100%' : view[1];\n });\n\n constructor() {\n resizable([this.host.nativeElement], inject(NgZone))\n .pipe(\n tap(([entry]) => {\n this.flowSettingsService.computedFlowWidth.set(entry.contentRect.width);\n this.flowSettingsService.computedFlowHeight.set(entry.contentRect.height);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n// TODO: too general purpose nane\n@Directive({\n standalone: true,\n selector: 'svg[rootSvgContext]',\n})\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService);\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n @HostListener('contextmenu')\n protected resetConnection() {\n const status = this.flowStatusService.status();\n\n if (status.state === 'connection-start' || status.state === 'reconnection-start') {\n this.flowStatusService.setIdleStatus();\n }\n }\n}\n","import { SpacePoint, Point } from '../interfaces/point.interface';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * @todo handle regular nodes\n *\n * @param point global point in flow coordinates\n * @param groups sorted array of groups\n * @returns\n */\nexport function getSpacePoints(point: Point, groups: NodeModel[]): SpacePoint[] {\n const result: SpacePoint[] = [];\n\n for (const group of groups) {\n const { x, y } = group.globalPoint();\n\n if (point.x >= x && point.x <= x + group.width() && point.y >= y && point.y <= y + group.height()) {\n result.push({\n x: point.x - x,\n y: point.y - y,\n spaceNodeId: group.rawNode.id,\n });\n }\n }\n\n result.reverse();\n\n // TODO: spread does not work, because the point is SVGPoint\n result.push({ spaceNodeId: null, x: point.x, y: point.y });\n\n return result;\n}\n","import { Injectable } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport abstract class PreviewFlowRenderStrategyService {\n public abstract shouldRenderNode(node: NodeModel): boolean;\n}\n\n@Injectable()\nexport class ViewportPreviewFlowRenderStrategyService extends PreviewFlowRenderStrategyService {\n public shouldRenderNode(node: NodeModel): boolean {\n // Do not render preview node if the real node is visible\n return !node.isVisible();\n }\n}\n","import { NodeModel } from '../../models/node.model';\n\nexport function drawNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n if (Object.keys(node.preview().style).length) {\n drawStyledNode(ctx, node);\n return;\n }\n\n if (node.rawNode.type === 'default') {\n drawDefaultNode(ctx, node);\n return;\n }\n\n if (node.rawNode.type === 'default-group') {\n drawDefaultGroupNode(ctx, node);\n return;\n }\n\n drawUnknownNode(ctx, node);\n}\n\nfunction drawDefaultNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n borderRadius(ctx, node, 5);\n\n // Draw background (background-color: white)\n ctx.fillStyle = 'white';\n ctx.fill();\n\n // Draw border (border: 1.5px solid #1b262c)\n ctx.strokeStyle = '#1b262c';\n ctx.lineWidth = 1.5;\n ctx.stroke();\n\n // Draw centered text (color: black, justify-content: center)\n ctx.fillStyle = 'black';\n // TODO: use as in default node\n ctx.font = '14px Arial';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n const centerX = point.x + width / 2;\n const centerY = point.y + height / 2;\n ctx.fillText(node.text(), centerX, centerY);\n}\n\nfunction drawDefaultGroupNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n ctx.globalAlpha = 0.05;\n ctx.fillStyle = node.color();\n ctx.fillRect(point.x, point.y, width, height);\n ctx.globalAlpha = 1;\n\n ctx.strokeStyle = node.color();\n ctx.lineWidth = 1.5;\n ctx.strokeRect(point.x, point.y, width, height);\n}\n\nfunction drawStyledNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n const style = node.preview().style;\n\n if (style.borderRadius) {\n const radius = parseFloat(style.borderRadius);\n borderRadius(ctx, node, radius);\n } else {\n ctx.beginPath();\n ctx.rect(point.x, point.y, width, height);\n ctx.closePath();\n }\n\n if (style.backgroundColor) {\n ctx.fillStyle = style.backgroundColor;\n }\n\n if (style.borderColor) {\n ctx.strokeStyle = style.borderColor;\n }\n\n if (style.borderWidth) {\n ctx.lineWidth = parseFloat(style.borderWidth);\n }\n\n ctx.fill();\n ctx.stroke();\n}\n\nfunction drawUnknownNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n ctx.fillStyle = 'rgb(0 0 0 / 10%)';\n ctx.fillRect(point.x, point.y, width, height);\n}\n\nfunction borderRadius(ctx: CanvasRenderingContext2D, node: NodeModel, radius: number) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n // Create rounded rectangle path\n ctx.beginPath();\n ctx.moveTo(point.x + radius, point.y);\n ctx.lineTo(point.x + width - radius, point.y);\n ctx.quadraticCurveTo(point.x + width, point.y, point.x + width, point.y + radius);\n ctx.lineTo(point.x + width, point.y + height - radius);\n ctx.quadraticCurveTo(point.x + width, point.y + height, point.x + width - radius, point.y + height);\n ctx.lineTo(point.x + radius, point.y + height);\n ctx.quadraticCurveTo(point.x, point.y + height, point.x, point.y + height - radius);\n ctx.lineTo(point.x, point.y + radius);\n ctx.quadraticCurveTo(point.x, point.y, point.x + radius, point.y);\n ctx.closePath();\n}\n","import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { PreviewFlowRenderStrategyService } from '../../services/preview-flow-render-strategy.service';\nimport { drawNode } from './draw-node';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\n\n@Component({\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'canvas[previewFlow]',\n template: '',\n})\nexport class PreviewFlowComponent {\n private viewportService = inject(ViewportService);\n private renderStrategy = inject(PreviewFlowRenderStrategyService);\n private nodeRenderingService = inject(NodeRenderingService);\n private renderer2 = inject(Renderer2);\n\n private element = inject<ElementRef<HTMLCanvasElement>>(ElementRef).nativeElement;\n private ctx = this.element.getContext('2d')!;\n\n readonly width = input<number>(0);\n readonly height = input<number>(0);\n\n private readonly dpr = window.devicePixelRatio;\n\n constructor() {\n effect(() => {\n // Set the \"actual\" size of the canvas\n this.renderer2.setProperty(this.element, 'width', this.width() * this.dpr);\n this.renderer2.setProperty(this.element, 'height', this.height() * this.dpr);\n\n // Set the \"drawn\" size of the canvas\n this.renderer2.setStyle(this.element, 'width', `${this.width()}px`);\n this.renderer2.setStyle(this.element, 'height', `${this.height()}px`);\n\n // Scale the context to match device pixel ratio\n this.ctx.scale(this.dpr, this.dpr);\n });\n\n effect(() => {\n const viewport = this.viewportService.readableViewport();\n\n this.ctx.clearRect(0, 0, this.width(), this.height());\n\n // Save the current context state\n this.ctx.save();\n\n // Apply viewport transformations (zoom and pan)\n this.ctx.setTransform(\n viewport.zoom * this.dpr, // horizontal scaling with DPR\n 0, // horizontal skewing\n 0, // vertical skewing\n viewport.zoom * this.dpr, // vertical scaling with DPR\n viewport.x * this.dpr, // horizontal translation with DPR\n viewport.y * this.dpr, // vertical translation with DPR\n );\n\n for (let i = 0; i < this.nodeRenderingService.viewportNodes().length; i++) {\n const node = this.nodeRenderingService.viewportNodes()[i];\n\n if (this.renderStrategy.shouldRenderNode(node)) {\n drawNode(this.ctx, node);\n }\n }\n\n // Restore the context state\n this.ctx.restore();\n });\n }\n}\n","import { inject, Injectable, NgZone, signal } from '@angular/core';\n\n@Injectable()\nexport class FlowRenderingService {\n public flowInitialized = signal(false);\n\n constructor() {\n inject(NgZone).runOutsideAngular(async () => {\n await skipFrames(2);\n\n this.flowInitialized.set(true);\n });\n }\n}\n\n// TODO may break on edge cases\nfunction skipFrames(count: number): Promise<void> {\n return new Promise((resolve) => {\n let frames = 0;\n\n function checkFrame() {\n frames++;\n\n if (frames < count) {\n requestAnimationFrame(checkFrame);\n } else {\n resolve();\n }\n }\n\n requestAnimationFrame(checkFrame);\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n inject,\n runInInjectionContext,\n contentChild,\n viewChild,\n} from '@angular/core';\nimport { DynamicNode, 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, outputFromObservable } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n} from '../../directives/template.directive';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { skip } from 'rxjs';\nimport { SpacePoint, Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceIdentityChecker } from '../../utils/identity-checker/reference-identity-checker';\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';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { Background } from '../../types/background.type';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { FitViewOptions } from '../../interfaces/fit-view-options.interface';\nimport { Optimization } from '../../interfaces/optimization.interface';\nimport { KeyboardShortcuts } from '../../types/keyboard-action.type';\nimport { KeyboardService } from '../../services/keyboard.service';\nimport { transformBackground } from '../../utils/transform-background';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EdgeComponent } from '../edge/edge.component';\nimport { NodeComponent } from '../node/node.component';\nimport { ConnectionComponent } from '../connection/connection.component';\nimport { BackgroundComponent } from '../background/background.component';\nimport { DefsComponent } from '../defs/defs.component';\nimport { FlowSizeControllerDirective } from '../../directives/flow-size-controller.directive';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { RootSvgContextDirective } from '../../directives/root-svg-context.directive';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\nimport { getSpacePoints } from '../../utils/get-space-points';\nimport { getIntesectingNodes } from '../../utils/nodes';\nimport { IntersectingNodesOptions } from '../../interfaces/intersecting-nodes-options.interface';\nimport { PreviewFlowComponent } from '../preview-flow/preview-flow.component';\nimport {\n PreviewFlowRenderStrategyService,\n ViewportPreviewFlowRenderStrategyService,\n} from '../../services/preview-flow-render-strategy.service';\nimport { toLazySignal } from '../../utils/signals/to-lazy-signal';\nimport { FlowRenderingService } from '../../services/flow-rendering.service';\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: [\n 'onNodesChange',\n 'onNodesChange.position',\n 'onNodesChange.position.single',\n 'onNodesChange.position.many',\n 'onNodesChange.size',\n 'onNodesChange.size.single',\n 'onNodesChange.size.many',\n 'onNodesChange.add',\n 'onNodesChange.add.single',\n 'onNodesChange.add.many',\n 'onNodesChange.remove',\n 'onNodesChange.remove.single',\n 'onNodesChange.remove.many',\n 'onNodesChange.select',\n 'onNodesChange.select.single',\n 'onNodesChange.select.many',\n 'onEdgesChange',\n 'onEdgesChange.detached',\n 'onEdgesChange.detached.single',\n 'onEdgesChange.detached.many',\n 'onEdgesChange.add',\n 'onEdgesChange.add.single',\n 'onEdgesChange.add.many',\n 'onEdgesChange.remove',\n 'onEdgesChange.remove.single',\n 'onEdgesChange.remove.many',\n 'onEdgesChange.select',\n 'onEdgesChange.select.single',\n 'onEdgesChange.select.many',\n ],\n};\n\n@Component({\n standalone: true,\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 NodeRenderingService,\n EdgeRenderingService,\n SelectionService,\n FlowSettingsService,\n ComponentEventBusService,\n KeyboardService,\n OverlaysService,\n { provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },\n FlowRenderingService,\n ],\n hostDirectives: [changesControllerHostDirective],\n imports: [\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n RootPointerDirective,\n FlowSizeControllerDirective,\n DefsComponent,\n BackgroundComponent,\n MapContextDirective,\n SpacePointContextDirective,\n ConnectionComponent,\n NodeComponent,\n EdgeComponent,\n NgTemplateOutlet,\n PreviewFlowComponent,\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 nodeRenderingService = inject(NodeRenderingService);\n private edgeRenderingService = inject(EdgeRenderingService);\n private flowSettingsService = inject(FlowSettingsService);\n private componentEventBusService = inject(ComponentEventBusService);\n private keyboardService = inject(KeyboardService);\n private injector = inject(Injector);\n private flowRenderingService = inject(FlowRenderingService);\n\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.flowSettingsService.view.set(view);\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public set minZoom(value: number) {\n this.flowSettingsService.minZoom.set(value);\n }\n\n /**\n * Maximum zoom value\n */\n @Input()\n public set maxZoom(value: number) {\n this.flowSettingsService.maxZoom.set(value);\n }\n\n /**\n * Background for flow\n */\n @Input()\n public set background(value: Background | string) {\n this.flowSettingsService.background.set(transformBackground(value));\n }\n\n @Input()\n public set optimization(newOptimization: Optimization) {\n this.flowSettingsService.optimization.update((optimization) => ({\n ...optimization,\n ...newOptimization,\n }));\n }\n\n /**\n * Global rule if you can or can't select entities\n */\n @Input()\n public set entitiesSelectable(value: boolean) {\n this.flowSettingsService.entitiesSelectable.set(value);\n }\n\n @Input()\n public set keyboardShortcuts(value: KeyboardShortcuts) {\n this.keyboardService.setShortcuts(value);\n }\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({\n transform: (settings: ConnectionSettings) => new ConnectionModel(settings),\n })\n public set connection(connection: ConnectionModel) {\n this.flowEntitiesService.connection.set(connection);\n }\n\n public get connection() {\n return this.flowEntitiesService.connection();\n }\n\n /**\n * Snap grid for node movement. Passes as [x, y]\n */\n @Input()\n public set snapGrid(value: [number, number]) {\n this.flowSettingsService.snapGrid.set(value);\n }\n\n /**\n * Raizing z-index for selected node\n */\n @Input()\n public set elevateNodesOnSelect(value: boolean) {\n this.flowSettingsService.elevateNodesOnSelect.set(value);\n }\n\n /**\n * Raizing z-index for selected edge\n */\n @Input()\n public set elevateEdgesOnSelect(value: boolean) {\n this.flowSettingsService.elevateEdgesOnSelect.set(value);\n }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[] | DynamicNode[]) {\n const models = runInInjectionContext(this.injector, () =>\n ReferenceIdentityChecker.nodes(newNodes, this.flowEntitiesService.nodes()),\n );\n\n // TODO: consider calling only fo new nodes\n // quick and dirty binding nodes to edges\n addNodesToEdges(models, this.flowEntitiesService.edges());\n\n this.flowEntitiesService.nodes.set(models);\n\n models.forEach((model) => this.nodeRenderingService.pullNode(model));\n }\n\n protected nodeModels = this.nodeRenderingService.nodes;\n protected groups = this.nodeRenderingService.groups;\n protected nonGroups = this.nodeRenderingService.nonGroups;\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector, () =>\n ReferenceIdentityChecker.edges(newEdges, this.flowEntitiesService.edges()),\n );\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.flowEntitiesService.nodes(), newModels);\n\n this.flowEntitiesService.edges.set(newModels);\n }\n\n protected edgeModels = this.edgeRenderingService.edges;\n // #endregion\n\n // #region OUTPUTS\n /**\n * Event that accumulates all custom node events\n *\n * @experimental\n */\n public readonly onComponentNodeEvent = outputFromObservable<any>(this.componentEventBusService.event$); // TODO: research how to remove any\n // #endregion\n\n // #region TEMPLATES\n protected nodeTemplateDirective = contentChild(NodeHtmlTemplateDirective);\n\n protected nodeSvgTemplateDirective = contentChild(NodeSvgTemplateDirective);\n\n protected groupNodeTemplateDirective = contentChild(GroupNodeTemplateDirective);\n\n protected edgeTemplateDirective = contentChild(EdgeTemplateDirective);\n\n protected edgeLabelHtmlDirective = contentChild(EdgeLabelHtmlTemplateDirective);\n\n protected connectionTemplateDirective = contentChild(ConnectionTemplateDirective);\n // #endregion\n\n // #region DIRECTIVES\n protected mapContext = viewChild(MapContextDirective);\n\n protected spacePointContext = viewChild.required(SpacePointContextDirective);\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 = toLazySignal(this.nodesChangeService.changes$, {\n initialValue: [] as NodeChange[],\n });\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange = toLazySignal(this.edgesChangeService.changes$, {\n initialValue: [] as EdgeChange[],\n });\n\n public readonly initialized = this.flowRenderingService.flowInitialized.asReadonly();\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport).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 edges change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$;\n\n public readonly initialized$ = toObservable(this.flowRenderingService.flowInitialized);\n // #endregion\n\n protected markers = this.flowEntitiesService.markers;\n protected minimap = this.flowEntitiesService.minimap;\n\n protected flowOptimization = this.flowSettingsService.optimization;\n protected flowWidth = this.flowSettingsService.computedFlowWidth;\n protected flowHeight = this.flowSettingsService.computedFlowHeight;\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({\n changeType: 'absolute',\n state: viewport,\n duration: 0,\n });\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({\n changeType: 'absolute',\n state: { zoom },\n duration: 0,\n });\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({\n changeType: 'absolute',\n state: point,\n duration: 0,\n });\n }\n\n public fitView(options?: FitViewOptions) {\n this.viewportService.fitView(options);\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.rawNode;\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\n /**\n * Convert point received from document to point on the flow\n */\n public documentPointToFlowPoint(point: Point): Point;\n public documentPointToFlowPoint(point: Point, options?: { spaces: false }): Point;\n /**\n * Convert point received from document to a stack of space points on the flow\n * Space point has a spaceNodeId, coordinates are relative to this node\n */\n public documentPointToFlowPoint(point: Point, options?: { spaces: true }): SpacePoint[];\n public documentPointToFlowPoint(point: Point, options?: { spaces: boolean }): unknown {\n const transformedPoint = this.spacePointContext().documentPointToFlowPoint(point);\n\n if (options?.spaces) {\n return getSpacePoints(transformedPoint, this.nodeRenderingService.groups());\n }\n\n return transformedPoint;\n }\n\n /**\n * Gets nodes that intersect with the specified node\n *\n * @template T - The type of data associated with the nodes\n * @param nodeId - The ID of the node to check intersections for\n * @param options.partially - If true, returns nodes that partially intersect. If false, only returns fully intersecting nodes\n * @returns An array of nodes that intersect with the specified node\n */\n public getIntesectingNodes<T>(\n nodeId: string,\n options: IntersectingNodesOptions = { partially: true },\n ): Node<T>[] | DynamicNode<T>[] {\n return getIntesectingNodes(nodeId, this.nodeModels(), options).map((n) => n.rawNode) as\n | Node<T>[]\n | DynamicNode<T>[];\n }\n\n /**\n * Converts a node's position to the coordinate space of another node\n *\n * @param nodeId - The ID of the node whose position should be converted\n * @param spaceNodeId - The ID of the node that defines the target coordinate space.\n * If null, returns the position in global coordinates\n * @returns {Point} The converted position. Returns {x: Infinity, y: Infinity} if either node is not found\n */\n public toNodeSpace(nodeId: string, spaceNodeId: string | null): Point {\n const node = this.nodeModels().find((n) => n.rawNode.id === nodeId);\n\n if (!node) return { x: Infinity, y: Infinity };\n\n if (spaceNodeId === null) {\n return node.globalPoint();\n }\n\n const coordinateSpaceNode = this.nodeModels().find((n) => n.rawNode.id === spaceNodeId);\n\n if (!coordinateSpaceNode) return { x: Infinity, y: Infinity };\n\n return getSpacePoints(node.globalPoint(), [coordinateSpaceNode])[0];\n }\n // #endregion\n\n protected trackNodes(idx: number, { rawNode: node }: NodeModel) {\n return node;\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge;\n }\n}\n","<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { NodeAccessorService } from '../services/node-accessor.service';\n\n@Directive({\n standalone: true,\n selector: '[dragHandle]',\n host: {\n class: 'vflow-drag-handle',\n },\n})\nexport class DragHandleDirective {\n private nodeAccessor = inject(NodeAccessorService);\n\n private get model() {\n return this.nodeAccessor.model()!;\n }\n\n constructor() {\n this.model.dragHandlesCount.update((count) => count + 1);\n\n inject(DestroyRef).onDestroy(() => {\n this.model.dragHandlesCount.update((count) => count - 1);\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { SelectionService } from '../services/selection.service';\nimport { EdgeComponent } from '../components/edge/edge.component';\n\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { NodeComponent } from '../components/node/node.component';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { fromEvent, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: '[selectable]',\n})\nexport class SelectableDirective {\n private flowSettingsService = inject(FlowSettingsService);\n private selectionService = inject(SelectionService);\n private parentEdge = inject(EdgeComponent, { optional: true });\n private parentNode = inject(NodeComponent, { optional: true });\n\n private host = inject<ElementRef<Element>>(ElementRef);\n\n protected selectOnEvent = this.getEvent$()\n .pipe(\n tap(() => this.select()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n private select() {\n const entity = this.entity();\n if (entity && this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(entity);\n }\n }\n\n private entity(): FlowEntity | null {\n if (this.parentNode) {\n return this.parentNode.model();\n } else if (this.parentEdge) {\n return this.parentEdge.model();\n }\n\n return null;\n }\n\n private getEvent$() {\n return fromEvent(this.host.nativeElement, 'click');\n }\n}\n","import { signal, TemplateRef } from '@angular/core';\n\nexport class MinimapModel {\n public template = signal<TemplateRef<unknown> | null>(null);\n}\n","import {\n Component,\n computed,\n inject,\n Injector,\n OnInit,\n signal,\n TemplateRef,\n input,\n viewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { MinimapModel } from '../../models/minimap.model';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { getViewportForBounds } from '../../utils/viewport';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { ViewportService } from '../../services/viewport.service';\nimport { DefaultNodeComponent } from '../../components/default-node/default-node.component';\n\nexport type MiniMapPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n@Component({\n standalone: true,\n selector: 'mini-map',\n templateUrl: './minimap.component.html',\n styleUrls: [`./minimap.component.scss`],\n imports: [DefaultNodeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MiniMapComponent implements OnInit {\n protected entitiesService = inject(FlowEntitiesService);\n protected flowSettingsService = inject(FlowSettingsService);\n protected viewportService = inject(ViewportService);\n protected injector = inject(Injector);\n\n /**\n * The color outside the viewport (invisible area)\n */\n public maskColor = input(`rgba(215, 215, 215, 0.6)`);\n\n /**\n * The minimap stroke color\n */\n public strokeColor = input(`rgb(200, 200, 200)`);\n\n /**\n * The corner of the flow where to render a mini-map\n */\n public position = input<MiniMapPosition>('bottom-right');\n\n /**\n * Make a minimap bigger on hover\n */\n public scaleOnHover = input(false);\n\n private minimap = viewChild.required<TemplateRef<unknown>>('minimap');\n\n private readonly minimapOffset = 10;\n\n private readonly minimapScale = computed(() => {\n if (this.scaleOnHover()) {\n return this.hovered() ? 0.4 : 0.2;\n }\n\n return 0.2;\n });\n\n protected viewportColor = computed(() => {\n const bg = this.flowSettingsService.background();\n\n if (bg.type === 'dots' || bg.type === 'solid') {\n return bg.color ?? '#fff';\n }\n\n return '#fff';\n });\n\n protected hovered = signal(false);\n\n protected minimapPoint = computed(() => {\n switch (this.position()) {\n case 'top-left':\n return { x: this.minimapOffset, y: this.minimapOffset };\n case 'top-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.minimapOffset,\n };\n case 'bottom-left':\n return {\n x: this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset,\n };\n case 'bottom-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset,\n };\n }\n });\n\n protected minimapWidth = computed(() => this.flowSettingsService.computedFlowWidth() * this.minimapScale());\n protected minimapHeight = computed(() => this.flowSettingsService.computedFlowHeight() * this.minimapScale());\n\n protected viewportTransform = computed(() => {\n const viewport = this.viewportService.readableViewport();\n let scale = 1 / viewport.zoom;\n\n let x = -(viewport.x * this.minimapScale()) * scale;\n x /= this.minimapScale();\n\n let y = -(viewport.y * this.minimapScale()) * scale;\n y /= this.minimapScale();\n\n scale /= this.minimapScale();\n\n return `translate(${x}, ${y}) scale(${scale})`;\n });\n\n protected boundsViewport = computed(() => {\n const nodes = this.entitiesService.nodes();\n\n return getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n -Infinity,\n 1.5,\n 0,\n );\n });\n\n protected minimapTransform = computed(() => {\n const vport = this.boundsViewport();\n\n const x = vport.x * this.minimapScale();\n const y = vport.y * this.minimapScale();\n const scale = vport.zoom * this.minimapScale();\n\n return `translate(${x} ${y}) scale(${scale})`;\n });\n\n public ngOnInit(): void {\n const model = new MinimapModel();\n model.template.set(this.minimap());\n\n this.entitiesService.minimap.set(model);\n }\n\n protected trackNodes(idx: number, { rawNode }: NodeModel) {\n return rawNode;\n }\n}\n","<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.rawNode.type === 'default' || model.rawNode.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.rawNode.type === 'default-group' || model.rawNode.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n","import { computed, signal, TemplateRef } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { NodeModel } from './node.model';\n\nexport class ToolbarModel {\n public position = signal<Position>('top');\n public template = signal<TemplateRef<unknown> | null>(null);\n\n public offset = signal(10);\n\n public point = computed(() => {\n switch (this.position()) {\n case 'top':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: -this.size().height - this.offset(),\n };\n case 'bottom':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: this.node.size().height + this.offset(),\n };\n case 'left':\n return {\n x: -this.size().width - this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2,\n };\n case 'right':\n return {\n x: this.node.size().width + this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2,\n };\n }\n });\n\n public transform = computed(() => `translate(${this.point().x}, ${this.point().y})`);\n\n public size = signal({ width: 0, height: 0 });\n\n constructor(public node: NodeModel) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n input,\n viewChild,\n effect,\n forwardRef,\n NgZone,\n DestroyRef,\n} from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { ToolbarModel } from '../../models/toolbar.model';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { resizable } from '../../utils/resizable';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap } from 'rxjs';\n\n@Component({\n standalone: true,\n selector: 'node-toolbar',\n template: `\n <ng-template #toolbar>\n <div class=\"wrapper\" nodeToolbarWrapper [model]=\"model\">\n <ng-content />\n </div>\n </ng-template>\n `,\n styles: [\n `\n .wrapper {\n width: max-content;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [forwardRef(() => NodeToolbarWrapperDirective)],\n})\nexport class NodeToolbarComponent implements OnInit, OnDestroy {\n private overlaysService = inject(OverlaysService);\n private nodeService = inject(NodeAccessorService);\n\n public position = input<Position>('top');\n\n protected toolbarContentTemplate = viewChild.required<TemplateRef<unknown>>('toolbar');\n\n protected model = new ToolbarModel(this.nodeService.model()!);\n\n constructor() {\n effect(() => this.model.position.set(this.position()), { allowSignalWrites: true });\n }\n\n public ngOnInit(): void {\n this.model.template.set(this.toolbarContentTemplate());\n\n this.overlaysService.addToolbar(this.model);\n }\n\n public ngOnDestroy(): void {\n this.overlaysService.removeToolbar(this.model);\n }\n}\n\n@Directive({\n selector: '[nodeToolbarWrapper]',\n standalone: true,\n})\nexport class NodeToolbarWrapperDirective implements OnInit {\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n public model = input.required<ToolbarModel>();\n\n public ngOnInit(): void {\n resizable([this.element.nativeElement], this.zone)\n .pipe(\n tap(() => this.setSize()),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private setSize() {\n this.model().size.set({\n width: this.element.nativeElement.clientWidth,\n height: this.element.nativeElement.clientHeight,\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { EdgeComponent } from '../../components/edge/edge.component';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\n\n@Component({\n selector: 'g[customTemplateEdge]',\n templateUrl: './custom-template-edge.component.html',\n styleUrls: ['./custom-template-edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '(mousedown)': 'pull()',\n '(touchstart)': 'pull()',\n },\n})\nexport class CustomTemplateEdgeComponent {\n private edge = inject(EdgeComponent);\n private flowSettingsService = inject(FlowSettingsService);\n private edgeRenderingService = inject(EdgeRenderingService);\n\n protected model = this.edge.model();\n protected context = this.model.context.$implicit;\n\n protected pull() {\n if (this.flowSettingsService.elevateEdgesOnSelect()) {\n this.edgeRenderingService.pull(this.model);\n }\n }\n}\n","<ng-content />\n\n<svg:path #interactiveEdge class=\"interactive-edge\" [attr.d]=\"context.path()\" />\n","import { VflowComponent } from './components/vflow/vflow.component';\n\nimport { DragHandleDirective } from './directives/drag-handle.directive';\nimport { SelectableDirective } from './directives/selectable.directive';\nimport {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n HandleTemplateDirective,\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n} from './directives/template.directive';\nimport { ConnectionControllerDirective } from './directives/connection-controller.directive';\n\nimport { MiniMapComponent } from './public-components/minimap/minimap.component';\nimport { NodeToolbarComponent } from './public-components/node-toolbar/node-toolbar.component';\nimport { ResizableComponent } from './public-components/resizable/resizable.component';\nimport { HandleComponent } from './public-components/handle/handle.component';\nimport { CustomTemplateEdgeComponent } from './public-components/custom-template-edge/custom-template-edge.component';\n\nexport const Vflow = [\n VflowComponent,\n HandleComponent,\n ResizableComponent,\n SelectableDirective,\n MiniMapComponent,\n NodeToolbarComponent,\n CustomTemplateEdgeComponent,\n DragHandleDirective,\n ConnectionControllerDirective,\n\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n GroupNodeTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective,\n] as const;\n","// Standalone Util\nexport * from './lib/vflow/vflow';\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/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\nexport * from './lib/vflow/interfaces/component-node-event.interface';\nexport * from './lib/vflow/interfaces/fit-view-options.interface';\nexport * from './lib/vflow/interfaces/optimization.interface';\nexport * from './lib/vflow/interfaces/intersecting-nodes-options.interface';\nexport * from './lib/vflow/interfaces/curve-factory.interface';\nexport * from './lib/vflow/interfaces/node-preview.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';\nexport * from './lib/vflow/types/background.type';\nexport * from './lib/vflow/types/connection-mode.type';\nexport * from './lib/vflow/types/keyboard-action.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/public-components/handle/handle.component';\nexport * from './lib/vflow/public-components/custom-node/custom-node.component';\nexport * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component';\nexport * from './lib/vflow/public-components/resizable/resizable.component';\nexport * from './lib/vflow/public-components/minimap/minimap.component';\nexport * from './lib/vflow/public-components/node-toolbar/node-toolbar.component';\nexport * from './lib/vflow/public-components/custom-template-edge/custom-template-edge.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';\nexport * from './lib/vflow/directives/selectable.directive';\nexport * from './lib/vflow/directives/drag-handle.directive';\n\n// ! Internals\nexport { ConnectionModel as ɵConnectionModel } from './lib/vflow/models/connection.model';\nexport { HandleModel as ɵHandleModel } from './lib/vflow/models/handle.model';\nexport { NodeModel as ɵNodeModel } from './lib/vflow/models/node.model';\n\nexport { ComponentEventBusService as ɵComponentEventBusService } from './lib/vflow/services/component-event-bus.service';\nexport { HandleService as ɵHandleService } from './lib/vflow/services/handle.service';\nexport { FlowSettingsService as ɵFlowSettingsService } from './lib/vflow/services/flow-settings.service';\nexport { FlowEntitiesService as ɵFlowEntitiesService } from './lib/vflow/services/flow-entities.service';\nexport { NodeAccessorService as ɵNodeAccessorService } from './lib/vflow/services/node-accessor.service';\nexport { ViewportService as ɵViewportService } from './lib/vflow/services/viewport.service';\nexport { SelectionService as ɵSelectionService } from './lib/vflow/services/selection.service';\n\nexport { RootPointerDirective as ɵRootPointerDirective } from './lib/vflow/directives/root-pointer.directive';\nexport { SpacePointContextDirective as ɵSpacePointContextDirective } from './lib/vflow/directives/space-point-context.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ngComputed"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-vflow.mjs","sources":["../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-overlapping-area.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/nodes.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/utils/viewport.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/optimization.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-settings.service.ts","../../../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/utils/get-os.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/keyboard.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/selection.service.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/utils/align-number.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/services/flow-status.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-callable.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/component-event-bus.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-accessor.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/custom-node-base/custom-node-base.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-node/custom-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-vflow-component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/interfaces/node.interface.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/constants/magic-number-to-fix-glitch-in-chrome.constant.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/to-unified-node.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/is-group-node.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/assert-injector.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/signals/to-lazy-signal.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/node-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/signals/extended-computed.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/math/edge-path/smooth-step-path.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/edge.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/identity-checker/reference-identity-checker.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/directives/root-pointer.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/space-point-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/transform-background.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/decorators/microtask.decorator.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/overlays.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/resizable.ts","../../../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/utils/adjust-direction.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/connection-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/edge-rendering.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/event.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/pointer.directive.ts","../../../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/services/handle.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/handle-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/default-node/default-node.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/resizable/resizable.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/handle.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/handle/handle.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/handle/handle.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/node-handles-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/node-resize-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/connection/connection.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/id.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/background/background.component.html","../../../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/flow-size-controller.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/root-svg-context.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/utils/get-space-points.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/preview-flow-render-strategy.service.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/preview-flow/draw-node.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/components/preview-flow/preview-flow.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/services/flow-rendering.service.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/directives/drag-handle.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/directives/selectable.directive.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/models/minimap.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/minimap/minimap.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/models/toolbar.model.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/node-toolbar/node-toolbar.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.ts","../../../projects/ngx-vflow-lib/src/lib/vflow/public-components/custom-template-edge/custom-template-edge.component.html","../../../projects/ngx-vflow-lib/src/lib/vflow/vflow.ts","../../../projects/ngx-vflow-lib/src/public-api.ts","../../../projects/ngx-vflow-lib/src/ngx-vflow.ts"],"sourcesContent":["import { Rect } from '../interfaces/rect';\n\nexport const getOverlappingArea = (rectA: Rect, rectB: Rect): number => {\n const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n\n return Math.ceil(xOverlap * yOverlap);\n};\n","import { Box } from '../interfaces/box';\nimport { IntersectingNodesOptions } from '../interfaces/intersecting-nodes-options.interface';\nimport { Rect } from '../interfaces/rect';\nimport { NodeModel } from '../models/node.model';\nimport { getOverlappingArea } from './get-overlapping-area';\n\nexport function getNodesBounds(nodes: NodeModel[]): Rect {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n\n let box: Box = { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity };\n\n nodes.forEach((node) => {\n const nodeBox = nodeToBox(node);\n box = getBoundsOfBoxes(box, nodeBox);\n });\n\n return boxToRect(box);\n}\n\nexport function getIntesectingNodes(\n nodeId: string,\n nodes: NodeModel[],\n options?: IntersectingNodesOptions,\n): NodeModel[] {\n const node = nodes.find((n) => n.rawNode.id === nodeId);\n if (!node) return [];\n\n const nodeRect = nodeToRect(node);\n\n return nodes.filter((currentNode) => {\n if (currentNode.rawNode.id === nodeId) return false;\n\n const overlappingArea = getOverlappingArea(nodeToRect(currentNode), nodeRect);\n\n if (options?.partially) {\n return overlappingArea > 0;\n }\n\n return overlappingArea >= nodeRect.width * nodeRect.height;\n });\n}\n\nfunction nodeToBox(node: NodeModel): Box {\n return {\n x: node.point().x,\n y: node.point().y,\n x2: node.point().x + node.size().width,\n y2: node.point().y + node.size().height,\n };\n}\n\nexport function nodeToRect(node: NodeModel): Rect {\n return {\n x: node.globalPoint().x,\n y: node.globalPoint().y,\n width: node.width(),\n height: node.height(),\n };\n}\n\nfunction boxToRect({ x, y, x2, y2 }: Box): Rect {\n return {\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n };\n}\n\nfunction getBoundsOfBoxes(box1: Box, box2: Box): Box {\n return {\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n };\n}\n","import { ConnectionSettings, ConnectionValidatorFn } from '../interfaces/connection-settings.interface';\nimport { Connection } from '../interfaces/connection.interface';\nimport { Curve, EdgeType } from '../interfaces/edge.interface';\nimport { ConnectionMode } from '../types/connection-mode.type';\n\nexport class ConnectionModel {\n public curve: Curve;\n public type: EdgeType;\n public validator: ConnectionValidatorFn;\n public mode: ConnectionMode;\n\n constructor(public settings: ConnectionSettings) {\n this.curve = settings.curve ?? 'bezier';\n this.type = settings.type ?? 'default';\n this.mode = settings.mode ?? 'strict';\n\n const validatorsToRun = this.getValidators(settings);\n this.validator = (connection) => validatorsToRun.every((v) => v(connection));\n }\n\n private getValidators(settings: ConnectionSettings) {\n const validators = [];\n\n validators.push(notSelfValidator);\n\n if (this.mode === 'loose') {\n validators.push(hasSourceAndTargetHandleValidator);\n }\n\n if (settings.validator) {\n validators.push(settings.validator);\n }\n\n return validators;\n }\n}\n\n/**\n * Internal validator that not allows self connections\n */\nconst notSelfValidator = (connection: Connection) => {\n return connection.source !== connection.target;\n};\n\nconst hasSourceAndTargetHandleValidator = (connection: Connection) => {\n return connection.sourceHandle !== undefined && connection.targetHandle !== undefined;\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, Signal, WritableSignal, computed, signal } 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';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { MinimapModel } from '../models/minimap.model';\nimport { DynamicNode, Node } from '../interfaces/node.interface';\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 rawNodes = computed(() => this.nodes().map((n) => n.rawNode) as Node[] | DynamicNode[]);\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 rawEdges = computed(() => this.edges().map((e) => e.edge));\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 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().settings.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 entities: Signal<FlowEntity[]> = computed(() => [...this.nodes(), ...this.edges()]);\n\n public minimap: WritableSignal<MinimapModel | null> = signal(null);\n\n public getNode<T>(id: string) {\n return this.nodes().find(({ rawNode }) => rawNode.id === id) as NodeModel<T> | undefined;\n }\n\n public getDetachedEdges() {\n return this.edges().filter((e) => e.detached());\n }\n}\n","import { Rect } from '../interfaces/rect';\nimport { ViewportState } from '../interfaces/viewport.interface';\n\nexport function getViewportForBounds(\n bounds: Rect,\n width: number,\n height: number,\n minZoom: number,\n maxZoom: number,\n padding: number,\n): ViewportState {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n\n return { x, y, zoom: clampedZoom };\n}\n\nexport function clamp(value: number, min = 0, max = 1): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/**\n * Calculates the visible area bounds in world coordinates based on the current viewport state\n *\n * @param viewport Current viewport state (x, y, zoom)\n * @param flowWidth Width of the flow container\n * @param flowHeight Height of the flow container\n * @returns Rect representing the visible area in world coordinates\n */\nexport function getViewportBounds(viewport: ViewportState, flowWidth: number, flowHeight: number): Rect {\n const zoom = viewport.zoom;\n\n return {\n x: -viewport.x / zoom,\n y: -viewport.y / zoom,\n width: flowWidth / zoom,\n height: flowHeight / zoom,\n };\n}\n\n/**\n * Checks if a rectangle intersects with the viewport's visible area\n *\n * @param rect Rectangle to check (in world coordinates)\n * @param viewport Current viewport state\n * @param flowWidth Width of the flow container\n * @param flowHeight Height of the flow container\n * @returns true if the rectangle intersects with the viewport, false otherwise\n */\nexport function isRectInViewport(rect: Rect, viewport: ViewportState, flowWidth: number, flowHeight: number): boolean {\n const viewportBounds = getViewportBounds(viewport, flowWidth, flowHeight);\n\n // Check if rectangles intersect using standard rectangle intersection test\n // No intersection if: rect is completely to the left, right, above, or below the viewport\n const isNotIntersecting =\n rect.x + rect.width < viewportBounds.x || // Rect is completely to the left\n rect.x > viewportBounds.x + viewportBounds.width || // Rect is completely to the right\n rect.y + rect.height < viewportBounds.y || // Rect is completely above\n rect.y > viewportBounds.y + viewportBounds.height; // Rect is completely below\n\n return !isNotIntersecting;\n}\n","export const DEFAULT_OPTIMIZATION: Required<Optimization> = {\n detachedGroupsLayer: false,\n virtualization: false,\n virtualizationZoomThreshold: 0.5,\n lazyLoadTrigger: 'immediate',\n};\n\nexport interface Optimization {\n /**\n * If true, the layer with groups will be placed behind the edges layer.\n * This approach fixes the issue when you can't select an edge inside group.\n *\n * @default false\n */\n detachedGroupsLayer?: boolean;\n\n /**\n * If true, enables viewport virtualization to improve performance by only rendering\n * nodes and edges that are currently visible in the viewport. This optimization\n * filters out entities that are outside the visible area, reducing the number of\n * DOM elements and improving rendering performance for large flows.\n *\n * It uses canvas as a virtualization layer during viewport change.\n * When the viewport change ends, the library hydrates the canvas with the actual nodes and edges.\n */\n virtualization?: boolean;\n\n /**\n * The zoom threshold below which the only virtualization layer is drawn.\n * This should help to avoid performance issues when zooming out too much.\n */\n virtualizationZoomThreshold?: number;\n\n /**\n * The trigger for lazy loading of entities.\n */\n lazyLoadTrigger?: 'immediate' | 'viewport';\n}\n","import { Injectable, WritableSignal, signal } from '@angular/core';\nimport { Background } from '../types/background.type';\nimport { DEFAULT_OPTIMIZATION, Optimization } from '../interfaces/optimization.interface';\n\n@Injectable()\nexport class FlowSettingsService {\n public entitiesSelectable = signal(true);\n\n public elevateNodesOnSelect = signal(true);\n public elevateEdgesOnSelect = signal(true);\n\n /**\n * @see {VflowComponent.view}\n */\n public view: WritableSignal<[number, number] | 'auto'> = signal([400, 400]);\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowWidth = signal(0);\n\n /**\n * Set based on view property. May change if view is 'auto'\n */\n public computedFlowHeight = signal(0);\n\n public minZoom = signal(0.5);\n\n public maxZoom = signal(3);\n\n public background = signal<Background>({ type: 'solid', color: '#fff' });\n\n public snapGrid = signal<[number, number]>([1, 1]);\n\n public optimization = signal<Required<Optimization>>(DEFAULT_OPTIMIZATION);\n}\n","import { Injectable, WritableSignal, inject, signal } from '@angular/core';\nimport { ViewportState, WritableViewport } from '../interfaces/viewport.interface';\nimport { getNodesBounds } from '../utils/nodes';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { getViewportForBounds } from '../utils/viewport';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { FitViewOptions } from '../interfaces/fit-view-options.interface';\nimport { NodeModel } from '../models/node.model';\nimport { Subject } from 'rxjs';\n\n@Injectable()\nexport class ViewportService {\n private entitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n\n /**\n * The default value used by d3, just copy it here\n *\n * @returns default viewport value\n */\n private static getDefaultViewport(): ViewportState {\n return { zoom: 1, x: 0, y: 0 };\n }\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 duration: 0,\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 public readonly viewportChangeEnd$ = new Subject<void>();\n\n // TODO: add writableViewportWithConstraints (to apply min zoom/max zoom values)\n\n public fitView(options: FitViewOptions = { padding: 0.1, duration: 0, nodes: [] }) {\n const nodes = this.getBoundsNodes(options.nodes ?? []);\n\n const state = getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n this.flowSettingsService.minZoom(),\n this.flowSettingsService.maxZoom(),\n options.padding ?? 0.1,\n );\n\n const duration = options.duration ?? 0;\n\n this.writableViewport.set({ changeType: 'absolute', state, duration });\n }\n\n public triggerViewportChangeEvent(type: 'end') {\n if (type === 'end') {\n this.viewportChangeEnd$.next();\n }\n }\n\n private getBoundsNodes(nodeIds: string[]) {\n return !nodeIds?.length\n ? // If nodes option not passed or the list is empty, then get fit the whole view\n this.entitiesService.nodes()\n : // Otherwise fit to specific nodes\n nodeIds\n .map((nodeId) => this.entitiesService.nodes().find(({ rawNode }) => rawNode.id === nodeId))\n .filter((node): node is NodeModel => !!node);\n }\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 standalone: true,\n selector: 'svg[rootSvgRef]',\n})\nexport class RootSvgReferenceDirective {\n public readonly element = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement;\n}\n","export function getOS() {\n const userAgent = window.navigator.userAgent.toLowerCase();\n const macosPlatforms = /(macintosh|macintel|macppc|mac68k|macos)/i;\n const windowsPlatforms = /(win32|win64|windows|wince)/i;\n const iosPlatforms = /(iphone|ipad|ipod)/i;\n\n let os = null;\n\n if (macosPlatforms.test(userAgent)) {\n os = 'macos' as const;\n } else if (iosPlatforms.test(userAgent)) {\n os = 'ios' as const;\n } else if (windowsPlatforms.test(userAgent)) {\n os = 'windows' as const;\n } else if (/android/.test(userAgent)) {\n os = 'android' as const;\n } else if (!os && /linux/.test(userAgent)) {\n os = 'linux' as const;\n }\n\n return os;\n}\n","import { Injectable, signal, WritableSignal } from '@angular/core';\nimport { KeyboardAction, KeyboardShortcuts } from '../types/keyboard-action.type';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { fromEvent, merge, switchMap, tap } from 'rxjs';\nimport { getOS } from '../utils/get-os';\n\n@Injectable()\nexport class KeyboardService {\n private actions: WritableSignal<KeyboardShortcuts> = signal({\n multiSelection: [\n getOS() === 'macos' ? 'MetaLeft' : 'ControlLeft',\n getOS() === 'macos' ? 'MetaRight' : 'ControlRight',\n ],\n });\n\n private actionsActive: Record<KeyboardAction, boolean> = {\n multiSelection: false,\n };\n\n constructor() {\n toObservable(this.actions)\n .pipe(\n switchMap(() =>\n merge(\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(\n tap((event) => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = true;\n }\n }\n }),\n ),\n\n fromEvent<KeyboardEvent>(document, 'keyup').pipe(\n tap((event) => {\n for (const action in this.actions()) {\n const keyCodes = this.actions()[action as KeyboardAction] ?? [];\n\n if (keyCodes.includes(event.code)) {\n this.actionsActive[action as KeyboardAction] = false;\n }\n }\n }),\n ),\n ),\n ),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n\n public setShortcuts(newActions: KeyboardShortcuts) {\n this.actions.update((actions) => ({ ...actions, ...newActions }));\n }\n\n public isActiveAction(action: KeyboardAction) {\n return this.actionsActive[action];\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Subject, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KeyboardService } from './keyboard.service';\n\nexport interface ViewportForSelection {\n start: ViewportState;\n end: ViewportState;\n /**\n * Target may not exist if viewport change made programmatically\n */\n target?: Element;\n}\n\n@Injectable()\nexport class SelectionService {\n private static delta = 6;\n\n private flowEntitiesService = inject(FlowEntitiesService);\n private keyboardService = inject(KeyboardService);\n\n protected viewport$ = new Subject<ViewportForSelection>();\n\n protected resetSelection = this.viewport$\n .pipe(\n tap(({ start, end, target }) => {\n if (start && end && target) {\n const delta = SelectionService.delta;\n\n const diffX = Math.abs(end.x - start.x);\n const diffY = Math.abs(end.y - start.y);\n\n // click (not drag)\n const isClick = diffX < delta && diffY < delta;\n // do not reset if event chain contains selectable elems\n const isNotSelectable = !target.closest('.selectable');\n\n if (isClick && isNotSelectable) {\n this.select(null);\n }\n }\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n public setViewport(viewport: ViewportForSelection) {\n this.viewport$.next(viewport);\n }\n\n public select(entity: FlowEntity | null) {\n // ? May be not a responsibility of this method\n // if entity already selected - do nothing\n if (entity?.selected()) {\n return;\n }\n\n if (!this.keyboardService.isActiveAction('multiSelection')) {\n // undo select for previously selected nodes\n this.flowEntitiesService.entities().forEach((n) => n.selected.set(false));\n }\n\n if (entity) {\n // select passed entity\n entity.selected.set(true);\n }\n }\n}\n","import { Directive, ElementRef, NgZone, OnInit, effect, inject, signal, untracked } from '@angular/core';\nimport { select } from 'd3-selection';\nimport { D3ZoomEvent, ZoomBehavior, ZoomTransform, zoom, zoomIdentity } from 'd3-zoom';\nimport { ViewportService } from '../services/viewport.service';\nimport { isDefined } from '../utils/is-defined';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { ViewportState } from '../interfaces/viewport.interface';\nimport { SelectionService, ViewportForSelection } from '../services/selection.service';\nimport { FlowSettingsService } from '../services/flow-settings.service';\n\n@Directive({\n standalone: true,\n selector: 'g[mapContext]',\n host: {\n '[attr.transform]': 'transform()',\n },\n})\nexport class MapContextDirective implements OnInit {\n protected rootSvg = inject(RootSvgReferenceDirective).element;\n protected host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement;\n protected selectionService = inject(SelectionService);\n protected viewportService = inject(ViewportService);\n protected flowSettingsService = inject(FlowSettingsService);\n protected zone = inject(NgZone);\n\n protected rootSvgSelection = select(this.rootSvg);\n\n protected transform = signal<string>('');\n\n protected viewportForSelection: Partial<ViewportForSelection> = {};\n\n // under the hood this effect triggers handleZoom, so error throws without this flag\n protected manualViewportChangeEffect = effect(\n () => {\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.transition().duration(viewport.duration).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 // remain same zoom value\n const zoom = untracked(this.viewportService.readableViewport).zoom;\n\n this.rootSvgSelection\n .transition()\n .duration(viewport.duration)\n .call(this.zoomBehavior.transform, zoomIdentity.translate(state.x, state.y).scale(zoom));\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\n .transition()\n .duration(viewport.duration)\n .call(this.zoomBehavior.transform, zoomIdentity.translate(state.x, state.y).scale(state.zoom));\n\n return;\n }\n },\n { allowSignalWrites: true },\n );\n\n protected zoomBehavior!: ZoomBehavior<SVGSVGElement, unknown>;\n\n public ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n this.zoomBehavior = zoom<SVGSVGElement, unknown>()\n .scaleExtent([this.flowSettingsService.minZoom(), this.flowSettingsService.maxZoom()])\n .filter(this.filterCondition)\n .on('start', this.handleZoomStart)\n .on('zoom', this.handleZoom)\n .on('end', this.handleZoomEnd);\n\n this.rootSvgSelection.call(this.zoomBehavior).on('dblclick.zoom', null);\n });\n }\n\n private handleZoom = ({ transform }: ZoomEvent) => {\n // update public signal for user to read\n this.viewportService.readableViewport.set(mapTransformToViewportState(transform));\n\n this.transform.set(transform.toString());\n };\n\n private handleZoomStart = ({ transform }: ZoomEvent) => {\n this.viewportForSelection = {\n start: mapTransformToViewportState(transform),\n };\n };\n\n private handleZoomEnd = ({ transform, sourceEvent }: ZoomEvent) => {\n this.zone.run(() => {\n this.viewportForSelection = {\n ...this.viewportForSelection,\n end: mapTransformToViewportState(transform),\n target: evTarget(sourceEvent),\n };\n\n this.viewportService.triggerViewportChangeEvent('end');\n\n // TODO: maybe use triggerViewportChangeEvent instead of this method?\n this.selectionService.setViewport(this.viewportForSelection as ViewportForSelection);\n });\n };\n\n private filterCondition = (event: Event) => {\n if (event.type === 'mousedown' || event.type === 'touchstart') {\n return (event.target as Element).closest('.vflow-node') === null;\n }\n\n return true;\n };\n}\n\nconst mapTransformToViewportState = (transform: ZoomTransform): ViewportState => ({\n zoom: transform.k,\n x: transform.x,\n y: transform.y,\n});\n\nconst evTarget = (anyEvent: any): Element | undefined => {\n if (anyEvent instanceof Event && anyEvent.target instanceof Element) {\n return anyEvent.target;\n }\n\n return undefined;\n};\n\ndeclare module 'd3-selection' {\n interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum> {\n transition(): Selection<GElement, Datum, PElement, PDatum>;\n duration(duration: number): Selection<GElement, Datum, PElement, PDatum>;\n }\n}\n\ntype ZoomEvent = D3ZoomEvent<SVGSVGElement, unknown>;\n","export const round = (num: number): number => Math.round(num * 100) / 100;\n","export function align(num: number, constant: number): number {\n return Math.ceil(num / constant) * constant;\n}\n","import { Injectable, inject } 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';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { Point } from '../interfaces/point.interface';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { align } from '../utils/align-number';\n\ntype DragEvent = D3DragEvent<Element, unknown, unknown>;\n\n@Injectable()\nexport class DraggableService {\n private entitiesService = inject(FlowEntitiesService);\n private settingsService = inject(FlowSettingsService);\n\n /**\n * Enable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public enable(element: Element, model: NodeModel) {\n select(element).call(this.getDragBehavior(model));\n }\n\n /**\n * Disable draggable behavior for element.\n *\n * @param element target element for toggling draggable\n * @param model model with data for this element\n */\n public disable(element: Element) {\n select(element).call(drag().on('drag', null));\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 dragNodes: NodeModel[] = [];\n let initialPositions: Point[] = [];\n\n const filterCondition = (event: Event) => {\n // if there is at least one drag handle, we should check if we are dragging it\n if (model.dragHandlesCount()) {\n return !!(event.target as Element).closest('.vflow-drag-handle');\n }\n\n return true;\n };\n\n return drag()\n .filter(filterCondition)\n .on('start', (event: DragEvent) => {\n dragNodes = this.getDragNodes(model);\n\n initialPositions = dragNodes.map((node) => ({\n x: node.point().x - event.x,\n y: node.point().y - event.y,\n }));\n })\n\n .on('drag', (event: DragEvent) => {\n dragNodes.forEach((model, index) => {\n const point = {\n x: round(event.x + initialPositions[index].x),\n y: round(event.y + initialPositions[index].y),\n };\n\n this.moveNode(model, point);\n });\n });\n }\n\n private getDragNodes(model: NodeModel) {\n return model.selected()\n ? this.entitiesService\n .nodes()\n // selected draggable nodes (with current node)\n .filter((node) => node.selected() && node.draggable())\n : // we only can move current node if it's not selected\n [model];\n }\n\n /**\n * @todo make it unit testable\n */\n private moveNode(model: NodeModel, point: Point) {\n point = this.alignToGrid(point);\n\n const parent = model.parent();\n // keep node in bounds of parent\n if (parent) {\n point.x = Math.min(parent.width() - model.width(), point.x);\n point.x = Math.max(0, point.x);\n\n point.y = Math.min(parent.height() - model.height(), point.y);\n point.y = Math.max(0, point.y);\n }\n\n model.setPoint(point);\n }\n\n /**\n * @todo make it unit testable\n */\n private alignToGrid(point: Point) {\n const [snapX, snapY] = this.settingsService.snapGrid();\n\n if (snapX > 1) {\n point.x = align(point.x, snapX);\n }\n\n if (snapY > 1) {\n point.y = align(point.y, snapY);\n }\n\n return point;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport {\n ConnectionContext,\n EdgeContext,\n GroupNodeContext,\n HtmlEdgeLabelContext,\n NodeContext,\n SvgNodeContext,\n} from '../interfaces/template-context.interface';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edge]',\n})\nexport class EdgeTemplateDirective {\n public templateRef = inject<TemplateRef<EdgeContext>>(TemplateRef);\n\n static ngTemplateContextGuard(dir: EdgeTemplateDirective, ctx: unknown): ctx is EdgeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[connection]',\n})\nexport class ConnectionTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: ConnectionTemplateDirective, ctx: unknown): ctx is ConnectionContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edgeLabelHtml]',\n})\nexport class EdgeLabelHtmlTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: EdgeLabelHtmlTemplateDirective, ctx: unknown): ctx is HtmlEdgeLabelContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeHtml]',\n})\nexport class NodeHtmlTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: NodeHtmlTemplateDirective, ctx: unknown): ctx is NodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeSvg]',\n})\nexport class NodeSvgTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: NodeSvgTemplateDirective, ctx: unknown): ctx is SvgNodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[groupNode]',\n})\nexport class GroupNodeTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n static ngTemplateContextGuard(dir: GroupNodeTemplateDirective, ctx: unknown): ctx is GroupNodeContext {\n return true;\n }\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[handle]',\n})\nexport class HandleTemplateDirective {\n public templateRef = inject(TemplateRef);\n\n // TODO\n // static ngTemplateContextGuard(dir: HandleTemplateDirective, ctx: unknown): ctx is HandleContext {\n // return true;\n // }\n}\n","import { EdgeModel } from '../models/edge.model';\nimport { NodeModel } from '../models/node.model';\n\nexport function addNodesToEdges(nodes: NodeModel[], edges: EdgeModel[]): void {\n const nodesById = nodes.reduce(\n (acc, n) => {\n acc[n.rawNode.id] = n;\n\n return acc;\n },\n {} as { [nodeId: string]: NodeModel },\n );\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 { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\nimport { HandleModel } from '../models/handle.model';\nimport { ConnectionInternal } from '../interfaces/connection.internal.interface';\nimport { EdgeModel } from '../models/edge.model';\n\nexport interface FlowStatusIdle {\n state: 'idle';\n payload: null;\n}\n\nexport interface FlowStatusConnectionStart {\n state: 'connection-start';\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'>;\n}\n\nexport interface FlowStatusConnectionValidation {\n state: 'connection-validation';\n payload: ConnectionInternal & {\n valid: boolean;\n };\n}\n\nexport interface FlowStatusConnectionEnd {\n state: 'connection-end';\n payload: ConnectionInternal;\n}\n\nexport interface FlowStatusReconnectionStart {\n state: 'reconnection-start';\n payload: Omit<ConnectionInternal, 'target' | 'targetHandle'> & {\n oldEdge: EdgeModel;\n };\n}\n\nexport interface FlowStatusReconnectionValidation {\n state: 'reconnection-validation';\n payload: ConnectionInternal & {\n valid: boolean;\n oldEdge: EdgeModel;\n };\n}\n\nexport interface FlowStatusReconnectionEnd {\n state: 'reconnection-end';\n payload: ConnectionInternal & {\n oldEdge: EdgeModel;\n };\n}\n\nexport type FlowStatus =\n | FlowStatusIdle\n | FlowStatusConnectionStart\n | FlowStatusConnectionValidation\n | FlowStatusConnectionEnd\n | FlowStatusReconnectionStart\n | FlowStatusReconnectionValidation\n | FlowStatusReconnectionEnd;\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(source: NodeModel, sourceHandle: HandleModel) {\n this.status.set({ state: 'connection-start', payload: { source, sourceHandle } });\n }\n\n public setReconnectionStartStatus(source: NodeModel, sourceHandle: HandleModel, oldEdge: EdgeModel) {\n this.status.set({ state: 'reconnection-start', payload: { source, sourceHandle, oldEdge } });\n }\n\n public setConnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n ) {\n this.status.set({ state: 'connection-validation', payload: { source, target, sourceHandle, targetHandle, valid } });\n }\n\n public setReconnectionValidationStatus(\n valid: boolean,\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n oldEdge: EdgeModel,\n ) {\n this.status.set({\n state: 'reconnection-validation',\n payload: { source, target, sourceHandle, targetHandle, valid, oldEdge },\n });\n }\n\n public setConnectionEndStatus(\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n ) {\n this.status.set({ state: 'connection-end', payload: { source, target, sourceHandle, targetHandle } });\n }\n\n public setReconnectionEndStatus(\n source: NodeModel,\n target: NodeModel,\n sourceHandle: HandleModel,\n targetHandle: HandleModel,\n oldEdge: EdgeModel,\n ) {\n this.status.set({ state: 'reconnection-end', payload: { source, target, sourceHandle, targetHandle, oldEdge } });\n }\n}\n","export function isCallable(fn: any): boolean {\n try {\n new Proxy(fn, { apply: () => undefined })();\n return true;\n } catch (err) {\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { AnyComponentNodeEvent } from '../interfaces/component-node-event.interface';\n\n@Injectable()\nexport class ComponentEventBusService {\n private _event$ = new Subject<AnyComponentNodeEvent>();\n\n public event$ = this._event$.asObservable();\n\n public pushEvent(event: AnyComponentNodeEvent) {\n this._event$.next(event);\n }\n}\n","import { Injectable, signal } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * Service to fix cyclic dependency between node and resizable component\n */\n@Injectable()\nexport class NodeAccessorService {\n public model = signal<NodeModel | null>(null);\n}\n","import { DestroyRef, Directive, EventEmitter, OnInit, inject, signal, OutputEmitterRef } from '@angular/core';\nimport { merge, Observable, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\n\n@Directive()\nexport abstract class CustomNodeBaseComponent<T = any> implements OnInit {\n private eventBus = inject(ComponentEventBusService);\n private nodeService = inject(NodeAccessorService);\n\n protected destroyRef = inject(DestroyRef);\n\n /**\n * Signal with selected state of node\n */\n public selected = this.nodeService.model()!.selected;\n\n public data = signal<T | undefined>(undefined);\n\n public ngOnInit(): void {\n this.trackEvents().pipe(takeUntilDestroyed(this.destroyRef)).subscribe();\n }\n\n private trackEvents() {\n const props = Object.getOwnPropertyNames(this);\n\n const emittersOrRefs = new Map<Observable<unknown>, string>();\n for (const prop of props) {\n const field = (this as Record<string, unknown>)[prop];\n\n if (field instanceof EventEmitter) {\n emittersOrRefs.set(field, prop);\n }\n\n if (field instanceof OutputEmitterRef) {\n emittersOrRefs.set(outputRefToObservable(field), prop);\n }\n }\n\n return merge(\n ...Array.from(emittersOrRefs.keys()).map((emitter) =>\n emitter.pipe(\n tap((event) => {\n this.eventBus.pushEvent({\n nodeId: this.nodeService.model()?.rawNode.id ?? '',\n eventName: emittersOrRefs.get(emitter)!,\n eventPayload: event,\n });\n }),\n ),\n ),\n );\n }\n}\n\nfunction outputRefToObservable(ref: OutputEmitterRef<unknown>) {\n return new Observable((subscriber) => {\n const subscription = ref.subscribe((value) => {\n subscriber.next(value);\n });\n\n return () => {\n subscription.unsubscribe();\n };\n });\n}\n","import { Directive, input, OnInit } from '@angular/core';\nimport { ComponentDynamicNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from '../../components/custom-node-base/custom-node-base.component';\n\n@Directive()\nexport abstract class CustomDynamicNodeComponent<T = any> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n public node = input.required<ComponentDynamicNode<T>>();\n\n public override ngOnInit(): void {\n const data = this.node().data;\n\n if (data) {\n this.data = data;\n }\n\n super.ngOnInit();\n }\n}\n","import { Directive, input, OnInit } from '@angular/core';\nimport { ComponentNode } from '../../interfaces/node.interface';\nimport { CustomNodeBaseComponent } from '../../components/custom-node-base/custom-node-base.component';\n\n@Directive()\nexport abstract class CustomNodeComponent<T = any> extends CustomNodeBaseComponent<T> implements OnInit {\n /**\n * Reference to node bound to this component\n */\n public node = input.required<ComponentNode<T>>();\n\n public override ngOnInit(): void {\n if (this.node().data) {\n this.data.set(this.node().data);\n }\n\n super.ngOnInit();\n }\n}\n","import { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';\nimport { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';\n\nexport function isCustomNodeComponent(type: any): type is CustomNodeComponent {\n return Object.prototype.isPrototypeOf.call(CustomNodeComponent, type);\n}\n\nexport function isCustomDynamicNodeComponent(type: any): type is CustomDynamicNodeComponent {\n return Object.prototype.isPrototypeOf.call(CustomDynamicNodeComponent, type);\n}\n","import { Type, WritableSignal } from '@angular/core';\nimport { Point } from './point.interface';\nimport { CustomNodeComponent } from '../public-components/custom-node/custom-node.component';\nimport { CustomDynamicNodeComponent } from '../public-components/custom-dynamic-node/custom-dynamic-node.component';\nimport { NodePreview } from './node-preview.interface';\nimport { isCallable } from '../utils/is-callable';\nimport { isCustomDynamicNodeComponent, isCustomNodeComponent } from '../utils/is-vflow-component';\n\nexport type Node<T = any> =\n | DefaultNode\n | HtmlTemplateNode<T>\n | SvgTemplateNode<T>\n | ComponentNode<T>\n | DefaultGroupNode\n | TemplateGroupNode<T>;\n\nexport type DynamicNode<T = any> =\n | DefaultDynamicNode\n | HtmlTemplateDynamicNode<T>\n | SvgTemplateDynamicNode<T>\n | ComponentDynamicNode<T>\n | DefaultDynamicGroupNode\n | TemplateDynamicGroupNode<T>;\n\nexport interface SharedNode {\n id: string;\n point: Point;\n draggable?: boolean;\n parentId?: string | null;\n preview?: NodePreview;\n}\n\nexport interface SharedDynamicNode {\n id: string;\n point: WritableSignal<Point>;\n draggable?: WritableSignal<boolean>;\n parentId?: WritableSignal<string | null>;\n preview?: WritableSignal<NodePreview>;\n}\n\nexport interface DefaultNode extends SharedNode {\n type: 'default';\n text?: string;\n width?: number;\n height?: number;\n}\n\nexport interface DefaultDynamicNode extends SharedDynamicNode {\n type: 'default';\n text?: WritableSignal<string>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport interface HtmlTemplateNode<T = any> extends SharedNode {\n type: 'html-template';\n data?: T;\n width?: number;\n height?: number;\n}\n\nexport interface SvgTemplateNode<T = any> extends SharedNode {\n type: 'svg-template';\n width: number;\n height: number;\n data?: T;\n}\n\nexport interface HtmlTemplateDynamicNode<T = any> extends SharedDynamicNode {\n type: 'html-template';\n data?: WritableSignal<T>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport interface SvgTemplateDynamicNode<T = any> extends SharedDynamicNode {\n type: 'svg-template';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n data?: WritableSignal<T>;\n}\n\nexport interface DefaultGroupNode extends SharedNode {\n type: 'default-group';\n width: number;\n height: number;\n color?: string;\n resizable?: boolean;\n}\n\nexport interface DefaultDynamicGroupNode extends SharedDynamicNode {\n type: 'default-group';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n color?: WritableSignal<string>;\n resizable?: WritableSignal<boolean>;\n}\n\nexport interface TemplateGroupNode<T> extends SharedNode {\n type: 'template-group';\n width: number;\n height: number;\n data?: T;\n}\n\nexport interface TemplateDynamicGroupNode<T> extends SharedDynamicNode {\n type: 'template-group';\n width: WritableSignal<number>;\n height: WritableSignal<number>;\n data?: WritableSignal<T>;\n}\n\nexport interface ComponentNode<T = any> extends SharedNode {\n type: Type<CustomNodeComponent<T>> | (() => Promise<Type<CustomNodeComponent<T>>>);\n data?: T;\n width?: number;\n height?: number;\n}\n\nexport interface ComponentDynamicNode<T = any> extends SharedDynamicNode {\n type: Type<CustomDynamicNodeComponent<T>> | (() => Promise<Type<CustomDynamicNodeComponent<T>>>);\n data?: WritableSignal<T>;\n width?: WritableSignal<number>;\n height?: WritableSignal<number>;\n}\n\nexport function isStaticNode<T>(node: Node<T> | DynamicNode<T>): node is Node<T> {\n return typeof node.point !== 'function';\n}\n\nexport function isDynamicNode<T>(node: Node<T> | DynamicNode<T>): node is DynamicNode<T> {\n return typeof node.point === 'function';\n}\n\nexport function isComponentStaticNode<T>(node: Node<T>): node is ComponentNode<T> {\n if (isCustomNodeComponent(node.type)) {\n return true;\n }\n\n // Check if the type is a function with dynamic import\n return isCallable(node.type) && !isCallable(node.point);\n}\n\nexport function isComponentDynamicNode<T>(node: DynamicNode<T>): node is ComponentDynamicNode<T> {\n if (isCustomDynamicNodeComponent(node.type)) {\n return true;\n }\n\n // Check if the type is a function with dynamic import\n return isCallable(node.type) && isCallable(node.point);\n}\n\nexport function isTemplateStaticNode<T>(node: Node<T>): node is HtmlTemplateNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isTemplateDynamicNode<T>(node: DynamicNode<T>): node is HtmlTemplateDynamicNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isSvgTemplateStaticNode<T>(node: Node<T>): node is SvgTemplateNode<T> {\n return node.type === 'svg-template';\n}\n\nexport function isSvgTemplateDynamicNode<T>(node: DynamicNode<T>): node is SvgTemplateDynamicNode<T> {\n return node.type === 'html-template';\n}\n\nexport function isDefaultStaticNode(node: Node): node is DefaultNode {\n return node.type === 'default';\n}\n\nexport function isDefaultDynamicNode(node: DynamicNode): node is DefaultDynamicNode {\n return node.type === 'default';\n}\n\nexport function isDefaultStaticGroupNode(node: Node): node is DefaultGroupNode {\n return node.type === 'default-group';\n}\n\nexport function isDefaultDynamicGroupNode(node: DynamicNode): node is DefaultDynamicGroupNode {\n return node.type === 'default-group';\n}\n\nexport function isTemplateStaticGroupNode<T>(node: Node<T>): node is TemplateGroupNode<T> {\n return node.type === 'template-group';\n}\n\nexport function isTemplateDynamicGroupNode<T>(node: DynamicNode<T>): node is TemplateDynamicGroupNode<T> {\n return node.type === 'template-group';\n}\n","// this is a number to fix visual artifact in chrome.\n// the bug reproduces if edgeLabelWrapperRef size fully matched the size of parent foreignObject\nexport const MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME = 2;\n","import { signal, Signal } from '@angular/core';\nimport { DynamicNode, isDynamicNode, Node } from '../interfaces/node.interface';\n\nexport function toUnifiedNode<T>(node: Node<T> | DynamicNode<T>): DynamicNode<T> {\n if (isDynamicNode(node)) {\n return node;\n }\n\n return {\n ...toSignalProperties(node),\n // non-signal props below\n id: node.id,\n // TODO this actually of incorrect type for component nodes\n type: node.type,\n } as DynamicNode<T>;\n}\n\nfunction toSignalProperties(obj: Record<string, any>): Record<string, Signal<any>> {\n const newObj: Record<string, Signal<any>> = {};\n\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n newObj[key] = signal(obj[key]);\n }\n }\n return newObj;\n}\n","import { NodeModel } from '../models/node.model';\n\nexport function isGroupNode(node: NodeModel): boolean {\n return node.rawNode.type === 'default-group' || node.rawNode.type === 'template-group';\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\n/* eslint-disable @typescript-eslint/ban-types */\nimport { Injector, assertInInjectionContext, inject, runInInjectionContext } from '@angular/core';\n\n/**\n * `assertInjector` extends `assertInInjectionContext` with an optional `Injector`\n * After assertion, `assertInjector` runs the `runner` function with the guaranteed `Injector`\n * whether it is the default `Injector` within the current **Injection Context**\n * or the custom `Injector` that was passed in.\n *\n * @template {() => any} Runner - Runner is a function that can return anything\n * @param {Function} fn - the Function to pass in `assertInInjectionContext`\n * @param {Injector | undefined | null} injector - the optional \"custom\" Injector\n * @param {Runner} runner - the runner fn\n * @returns {ReturnType<Runner>} result - returns the result of the Runner\n *\n * @example\n * ```ts\n * function injectValue(injector?: Injector) {\n * return assertInjector(injectValue, injector, () => 'value');\n * }\n *\n * injectValue(); // string\n * ```\n */\nexport function assertInjector<Runner extends () => any>(\n fn: Function,\n injector: Injector | undefined | null,\n runner: Runner,\n): ReturnType<Runner>;\n/**\n * `assertInjector` extends `assertInInjectionContext` with an optional `Injector`\n * After assertion, `assertInjector` returns a guaranteed `Injector` whether it is the default `Injector`\n * within the current **Injection Context** or the custom `Injector` that was passed in.\n *\n * @param {Function} fn - the Function to pass in `assertInInjectionContext`\n * @param {Injector | undefined | null} injector - the optional \"custom\" Injector\n * @returns Injector\n *\n * @example\n * ```ts\n * function injectDestroy(injector?: Injector) {\n * injector = assertInjector(injectDestroy, injector);\n *\n * return runInInjectionContext(injector, () => {\n * // code\n * })\n * }\n * ```\n */\nexport function assertInjector(fn: Function, injector: Injector | undefined | null): Injector;\nexport function assertInjector(fn: Function, injector: Injector | undefined | null, runner?: () => any) {\n !injector && assertInInjectionContext(fn);\n const assertedInjector = injector ?? inject(Injector);\n\n if (!runner) return assertedInjector;\n return runInInjectionContext(assertedInjector, runner);\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport { computed, untracked, type Signal } from '@angular/core';\nimport { toSignal, type ToSignalOptions } from '@angular/core/rxjs-interop';\nimport type { Observable, Subscribable } from 'rxjs';\nimport { assertInjector } from '../assert-injector';\n\ntype ReturnType<T, U> = (T | U) | (T | undefined) | (T | null) | T;\n\nexport function toLazySignal<T>(source: Observable<T> | Subscribable<T>): Signal<T | undefined>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & {\n initialValue?: undefined;\n requireSync?: false;\n },\n): Signal<T | undefined>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: null; requireSync?: false },\n): Signal<T | null>;\n\nexport function toLazySignal<T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue?: undefined; requireSync: true },\n): Signal<T>;\n\nexport function toLazySignal<T, const U extends T>(\n source: Observable<T> | Subscribable<T>,\n options: ToSignalOptions & { initialValue: U; requireSync?: false },\n): Signal<T | U>;\n\n/**\n * Function `toLazySignal()` is a proxy function that will call the original\n * `toSignal()` function when the returned signal is read for the first time.\n */\nexport function toLazySignal<T, U = undefined>(\n source: Observable<T> | Subscribable<T>,\n options?: ToSignalOptions & { initialValue?: U },\n): Signal<ReturnType<T, U>> {\n const injector = assertInjector(toLazySignal, options?.injector);\n let s: Signal<ReturnType<T, U>>;\n\n return computed<ReturnType<T, U>>(() => {\n if (!s) {\n s = untracked(() => toSignal(source, { ...options, injector } as any));\n }\n return s();\n });\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { NodeModel } from '../models/node.model';\nimport { isGroupNode } from '../utils/is-group-node';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { isRectInViewport } from '../utils/viewport';\nimport { ViewportService } from './viewport.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { asyncScheduler, debounceTime, filter, map, merge, observeOn } from 'rxjs';\nimport { toLazySignal } from '../utils/signals/to-lazy-signal';\n\n@Injectable()\nexport class NodeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n private viewportService = inject(ViewportService);\n\n public readonly nodes = computed(() => {\n if (!this.flowSettingsService.optimization().virtualization) {\n return [...this.flowEntitiesService.nodes()].sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());\n }\n\n return this.viewportNodesAfterInteraction().sort((aNode, bNode) => aNode.renderOrder() - bNode.renderOrder());\n });\n\n public readonly groups = computed(() => {\n return this.nodes().filter((n) => isGroupNode(n));\n });\n\n public readonly nonGroups = computed(() => {\n return this.nodes().filter((n) => !isGroupNode(n));\n });\n\n public viewportNodes = computed(() => {\n const nodes = this.flowEntitiesService.nodes();\n const viewport = this.viewportService.readableViewport();\n const flowWidth = this.flowSettingsService.computedFlowWidth();\n const flowHeight = this.flowSettingsService.computedFlowHeight();\n\n return nodes.filter((n) => {\n const { x, y } = n.globalPoint();\n const width = n.width();\n const height = n.height();\n\n return isRectInViewport({ x, y, width, height }, viewport, flowWidth, flowHeight);\n });\n });\n\n private viewportNodesAfterInteraction = toLazySignal(\n merge(\n // TODO: maybe there is a better way wait when viewport is ready?\n // (to correctly calculate viewport nodes on first render)\n toObservable(this.flowEntitiesService.nodes).pipe(\n observeOn(asyncScheduler),\n filter((nodes) => !!nodes.length),\n ),\n\n this.viewportService.viewportChangeEnd$.pipe(debounceTime(300)),\n ).pipe(\n map(() => {\n const viewport = this.viewportService.readableViewport();\n const zoomThreshold = this.flowSettingsService.optimization().virtualizationZoomThreshold;\n\n return viewport.zoom < zoomThreshold ? [] : this.viewportNodes();\n }),\n ),\n {\n initialValue: [],\n },\n );\n\n private maxOrder = computed(() => {\n return Math.max(...this.flowEntitiesService.nodes().map((n) => n.renderOrder()));\n });\n\n public pullNode(node: NodeModel) {\n // pull node\n node.renderOrder.set(this.maxOrder() + 1);\n\n // pull children\n node.children().forEach((n) => this.pullNode(n));\n }\n}\n","// MIT License\n\n// Copyright (c) 2023 Chau Tran\n\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n// SOFTWARE.\n\nimport type { CreateComputedOptions } from '@angular/core';\nimport { computed as ngComputed } from '@angular/core';\n\n/**\n * @todo Use `linkedSignal` after Angular update\n */\nexport function extendedComputed<TValue>(\n computedCallback: (currentValue: TValue) => TValue,\n options?: CreateComputedOptions<TValue>,\n) {\n if (!options) {\n options = { equal: Object.is };\n }\n\n let currentValue: TValue = undefined!;\n return ngComputed(() => {\n return (currentValue = computedCallback(currentValue));\n }, options);\n}\n","import { TemplateRef, computed, inject, signal } from '@angular/core';\nimport { DynamicNode, Node, isComponentDynamicNode, isComponentStaticNode } from '../interfaces/node.interface';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { HandleModel } from './handle.model';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { Point } from '../interfaces/point.interface';\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME } from '../constants/magic-number-to-fix-glitch-in-chrome.constant';\nimport { Contextable } from '../interfaces/contextable.interface';\nimport { GroupNodeContext, NodeContext } from '../interfaces/template-context.interface';\nimport { toUnifiedNode } from '../utils/to-unified-node';\nimport { catchError, filter, Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { NodePreview } from '../interfaces/node-preview.interface';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { NodeRenderingService } from '../services/node-rendering.service';\nimport { extendedComputed } from '../utils/signals/extended-computed';\nimport { isCustomDynamicNodeComponent, isCustomNodeComponent } from '../utils/is-vflow-component';\nimport { isCallable } from '../utils/is-callable';\n\nexport class NodeModel<T = unknown>\n implements FlowEntity, Contextable<NodeContext | GroupNodeContext | { $implicit: object }>\n{\n private static defaultWidth = 100;\n private static defaultHeight = 50;\n private static defaultColor = '#1b262c';\n\n private entitiesService = inject(FlowEntitiesService);\n private settingsService = inject(FlowSettingsService);\n private nodeRenderingService = inject(NodeRenderingService);\n\n public isVisible = signal(false);\n\n public point = signal<Point>({ x: 0, y: 0 });\n public point$: Observable<Point>;\n\n public width = signal(NodeModel.defaultWidth);\n public width$: Observable<number>;\n\n public height = signal(NodeModel.defaultHeight);\n public height$: Observable<number>;\n\n /**\n * @deprecated use width or height signals\n */\n public size = computed(() => ({ width: this.width(), height: this.height() }));\n /**\n * @deprecated use width$ or height$\n */\n public size$: Observable<{ width: number; height: number }>;\n\n /**\n * If resizer is used, the node size fully depends on the resizer\n * Otherwise it calculates the size based on the content\n */\n public styleWidth = computed(() => (this.controlledByResizer() ? `${this.width()}px` : '100%'));\n public styleHeight = computed(() => (this.controlledByResizer() ? `${this.height()}px` : '100%'));\n\n public foWidth = computed(() => this.width() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);\n public foHeight = computed(() => this.height() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);\n\n public renderOrder = signal(0);\n\n public selected = signal(false);\n public selected$: Observable<boolean>;\n\n public preview = signal<NodePreview>({ style: {} });\n\n public globalPoint = computed(() => {\n let parent = this.parent();\n let x = this.point().x;\n let y = this.point().y;\n\n while (parent !== null) {\n x += parent.point().x;\n y += parent.point().y;\n\n parent = parent.parent();\n }\n\n return { x, y };\n });\n\n public pointTransform = computed(() => `translate(${this.globalPoint().x}, ${this.globalPoint().y})`);\n\n public handles = signal<HandleModel[]>([]);\n public handles$: Observable<HandleModel[]>;\n\n public draggable = signal(true);\n\n public dragHandlesCount = signal(0);\n\n // disabled for configuration for now\n public readonly magnetRadius = 20;\n\n // TODO: not sure if we need to statically store it\n public isComponentType =\n isComponentStaticNode(this.rawNode as Node) || isComponentDynamicNode(this.rawNode as DynamicNode);\n\n public shouldLoad = extendedComputed<boolean>((previousShouldLoad) => {\n if (previousShouldLoad) {\n return true;\n }\n\n if (this.settingsService.optimization().lazyLoadTrigger === 'immediate') {\n return true;\n } else if (this.settingsService.optimization().lazyLoadTrigger === 'viewport') {\n // Immediately load component if it's a plain class\n if (isCustomNodeComponent(this.rawNode.type)) {\n return true;\n }\n\n // Immediately load component if it's a plain class\n if (isCustomDynamicNodeComponent(this.rawNode.type)) {\n return true;\n }\n\n // For cases\n // - if it's a factory with dynamic import\n // - if it's a template (html, svg, group)\n // check if it's in the viewport\n if (\n isCallable(this.rawNode.type) ||\n this.rawNode.type === 'html-template' ||\n this.rawNode.type === 'svg-template' ||\n this.rawNode.type === 'template-group'\n ) {\n return this.nodeRenderingService.viewportNodes().includes(this as NodeModel);\n }\n }\n\n // For each other case, we want to load the component immediately\n return true;\n });\n\n public componentInstance$ = toObservable(this.shouldLoad).pipe(\n filter(Boolean),\n // @ts-expect-error we assume it's a function with dynamic import\n switchMap(() => this.rawNode.type()),\n catchError(() => of(this.rawNode.type)),\n shareReplay(1),\n );\n\n // Default node specific thing\n public text = signal('');\n\n // Component node specific thing\n public componentTypeInputs = {\n node: this.rawNode,\n };\n\n public parent = computed(() => this.entitiesService.nodes().find((n) => n.rawNode.id === this.parentId()) ?? null);\n\n public children = computed(() => this.entitiesService.nodes().filter((n) => n.parentId() === this.rawNode.id));\n\n public color = signal(NodeModel.defaultColor);\n\n public controlledByResizer = signal(false);\n public resizable = signal(false);\n public resizing = signal(false);\n public resizerTemplate = signal<TemplateRef<unknown> | null>(null);\n\n public context = {\n $implicit: {},\n };\n\n private parentId = signal<string | null>(null);\n\n constructor(public rawNode: Node<T> | DynamicNode<T>) {\n const internalNode = toUnifiedNode(rawNode);\n\n if (internalNode.point) {\n this.point = internalNode.point;\n }\n\n if (internalNode.width) {\n this.width = internalNode.width;\n }\n\n if (internalNode.height) {\n this.height = internalNode.height;\n }\n\n if (internalNode.draggable) {\n this.draggable = internalNode.draggable;\n }\n\n if (internalNode.parentId) {\n this.parentId = internalNode.parentId;\n }\n\n if (internalNode.preview) {\n this.preview = internalNode.preview;\n }\n\n if (internalNode.type === 'default-group' && internalNode.color) {\n this.color = internalNode.color;\n }\n\n if (internalNode.type === 'default-group' && internalNode.resizable) {\n this.resizable = internalNode.resizable;\n }\n\n if (internalNode.type === 'default' && internalNode.text) {\n this.text = internalNode.text;\n }\n\n if (internalNode.type === 'html-template') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected.asReadonly(),\n shouldLoad: this.shouldLoad,\n },\n };\n }\n\n if (internalNode.type === 'svg-template') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected.asReadonly(),\n width: this.width.asReadonly(),\n height: this.height.asReadonly(),\n shouldLoad: this.shouldLoad,\n },\n };\n }\n\n if (internalNode.type === 'template-group') {\n this.context = {\n $implicit: {\n node: rawNode,\n selected: this.selected.asReadonly(),\n width: this.width.asReadonly(),\n height: this.height.asReadonly(),\n shouldLoad: this.shouldLoad,\n },\n };\n }\n\n // Initialize Observables after all signal assignments\n this.point$ = toObservable(this.point);\n this.width$ = toObservable(this.width);\n this.height$ = toObservable(this.height);\n this.size$ = toObservable(this.size);\n this.selected$ = toObservable(this.selected);\n this.handles$ = toObservable(this.handles);\n }\n\n public setPoint(point: Point) {\n this.point.set(point);\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 { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function straightPath({ sourcePoint, targetPoint }: CurveFactoryParams): CurveLayout {\n return {\n path: `M ${sourcePoint.x},${sourcePoint.y}L ${targetPoint.x},${targetPoint.y}`,\n labelPoints: {\n start: getPointOnLineByRatio(sourcePoint, targetPoint, 0.15),\n center: getPointOnLineByRatio(sourcePoint, targetPoint, 0.5),\n end: getPointOnLineByRatio(sourcePoint, targetPoint, 0.85),\n },\n };\n}\n","import { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Position } from '../../types/position.type';\nimport { getPointOnLineByRatio } from '../point-on-line-by-ratio';\n\nexport function bezierPath({\n sourcePoint,\n targetPoint,\n sourcePosition,\n targetPosition,\n}: CurveFactoryParams): CurveLayout {\n const distanceVector = { x: sourcePoint.x - targetPoint.x, y: sourcePoint.y - targetPoint.y };\n\n const sourceControl = calcControlPoint(sourcePoint, sourcePosition, distanceVector);\n const targetControl = calcControlPoint(targetPoint, targetPosition, distanceVector);\n\n const path = `M${sourcePoint.x},${sourcePoint.y} C${sourceControl.x},${sourceControl.y} ${targetControl.x},${targetControl.y} ${targetPoint.x},${targetPoint.y}`;\n\n return getPathData(path, sourcePoint, targetPoint, sourceControl, targetControl);\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(point: Point, pointPosition: Position, distanceVector: Point) {\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 = 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: string,\n source: Point,\n target: Point,\n sourceControl: Point,\n targetControl: Point,\n): CurveLayout {\n return {\n path,\n labelPoints: {\n start: getPointOnBezier(source, target, sourceControl, targetControl, 0.1),\n center: getPointOnBezier(source, target, sourceControl, targetControl, 0.5),\n end: getPointOnBezier(source, target, sourceControl, targetControl, 0.9),\n },\n };\n}\n\n/**\n * Get point on bezier curve by ratio\n */\nfunction getPointOnBezier(\n sourcePoint: Point,\n targetPoint: Point,\n sourceControl: Point,\n targetControl: Point,\n ratio: number,\n): Point {\n const fromSourceToFirstControl: Point = getPointOnLineByRatio(sourcePoint, sourceControl, ratio);\n const fromFirstControlToSecond: Point = getPointOnLineByRatio(sourceControl, targetControl, ratio);\n const fromSecondControlToTarget: Point = getPointOnLineByRatio(targetControl, targetPoint, ratio);\n\n return getPointOnLineByRatio(\n getPointOnLineByRatio(fromSourceToFirstControl, fromFirstControlToSecond, ratio),\n getPointOnLineByRatio(fromFirstControlToSecond, fromSecondControlToTarget, ratio),\n ratio,\n );\n}\n","import { CurveFactoryParams, CurveLayout } from '../../interfaces/curve-factory.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { Position } from '../../types/position.type';\n\nconst handleDirections = {\n left: { x: -1, y: 0 },\n right: { x: 1, y: 0 },\n top: { x: 0, y: -1 },\n bottom: { x: 0, y: 1 },\n};\n\nexport function getEdgeCenter(source: Point, target: Point): [number, number, number, number] {\n const xOffset = Math.abs(target.x - source.x) / 2;\n const centerX = target.x < source.x ? target.x + xOffset : target.x - xOffset;\n\n const yOffset = Math.abs(target.y - source.y) / 2;\n const centerY = target.y < source.y ? target.y + yOffset : target.y - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nconst getDirection = ({\n source,\n sourcePosition = 'bottom',\n target,\n}: {\n source: Point;\n sourcePosition: Position;\n target: Point;\n}): Point => {\n if (sourcePosition === 'left' || sourcePosition === 'right') {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nconst distance = (a: Point, b: Point) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({\n source,\n sourcePosition = 'bottom',\n target,\n targetPosition = 'top',\n offset,\n}: {\n source: Point;\n sourcePosition: Position;\n target: Point;\n targetPosition: Position;\n offset: number;\n}): [Point[], number, number] {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped: Point = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n const targetGapped: Point = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n const dir = getDirection({\n source: sourceGapped,\n sourcePosition,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const sourceGapOffset = { x: 0, y: 0 };\n const targetGapOffset = { x: 0, y: 0 };\n\n const [defaultCenterX, defaultCenterY] = getEdgeCenter(source, target);\n\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource: Point[] = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n if (sourcePosition === targetPosition) {\n const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n\n // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n } else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n }\n\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n\n const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n\n // we want to place the label on the longest segment of the edge\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n } else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n\n const pathPoints = [\n source,\n { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n ...points,\n { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n target,\n ];\n\n return [pathPoints, centerX, centerY];\n}\n\nfunction getBend(a: Point, b: Point, c: Point, size: number): string {\n const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n const { x, y } = b;\n\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\n\nexport function smoothStepPath(\n { sourcePoint, targetPoint, sourcePosition, targetPosition }: CurveFactoryParams,\n borderRadius: number = 5,\n): CurveLayout {\n const [points, labelX, labelY] = getPoints({\n source: sourcePoint,\n sourcePosition,\n target: targetPoint,\n targetPosition,\n offset: 20,\n });\n\n const path = points.reduce<string>((res, p, i) => {\n let segment = '';\n\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n } else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n\n res += segment;\n\n return res;\n }, '');\n\n // Performance optimization: Pre-calculate cumulative distances and use binary search\n const n = points.length;\n if (n < 2) {\n return {\n path,\n labelPoints: {\n start: { x: labelX, y: labelY },\n center: { x: labelX, y: labelY },\n end: { x: labelX, y: labelY },\n },\n };\n }\n\n // Pre-calculate segment lengths and cumulative distances in a single loop\n const segmentLengths: number[] = new Array(n - 1);\n const cumulativeDistances: number[] = new Array(n);\n cumulativeDistances[0] = 0;\n\n let totalLength = 0;\n\n for (let i = 0; i < n - 1; i++) {\n const dx = points[i + 1].x - points[i].x;\n const dy = points[i + 1].y - points[i].y;\n const len = Math.sqrt(dx * dx + dy * dy);\n segmentLengths[i] = len;\n totalLength += len;\n cumulativeDistances[i + 1] = totalLength;\n }\n\n // Optimized helper function using binary search\n const getPointAtRatio = (ratio: number): Point => {\n const targetDistance = totalLength * ratio;\n\n // Edge cases\n if (targetDistance <= 0) return points[0];\n if (targetDistance >= totalLength) return points[n - 1];\n\n // Binary search for the correct segment\n let low = 0;\n let high = n - 1;\n\n while (low < high - 1) {\n const mid = (low + high) >>> 1; // Bitwise right shift is faster than Math.floor\n if (cumulativeDistances[mid] < targetDistance) {\n low = mid;\n } else {\n high = mid;\n }\n }\n\n // Calculate position within the segment\n const segmentStartDistance = cumulativeDistances[low];\n const localDistance = targetDistance - segmentStartDistance;\n const t = localDistance / segmentLengths[low];\n\n // Linear interpolation\n const start = points[low];\n const end = points[low + 1];\n\n return {\n x: start.x + (end.x - start.x) * t,\n y: start.y + (end.y - start.y) * t,\n };\n };\n\n return {\n path,\n labelPoints: {\n start: getPointAtRatio(0.15),\n center: { x: labelX, y: labelY },\n end: getPointAtRatio(0.85),\n },\n };\n}\n","import { computed, inject, 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 { toObservable } from '@angular/core/rxjs-interop';\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { smoothStepPath } from '../math/edge-path/smooth-step-path';\nimport { hashCode } from '../utils/hash';\nimport { Contextable } from '../interfaces/contextable.interface';\nimport { EdgeContext } from '../interfaces/template-context.interface';\nimport { HandleModel } from './handle.model';\nimport { CurveFactoryParams } from '../interfaces/curve-factory.interface';\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { extendedComputed } from '../utils/signals/extended-computed';\n\nexport class EdgeModel implements FlowEntity, Contextable<EdgeContext> {\n private readonly flowEntitiesService = inject(FlowEntitiesService);\n\n public source = signal<NodeModel | undefined>(undefined);\n public target = signal<NodeModel | undefined>(undefined);\n public curve: Curve;\n public type: EdgeType;\n public reconnectable: boolean | 'source' | 'target';\n public floating: boolean;\n\n public selected = signal(false);\n public selected$ = toObservable(this.selected);\n\n public shouldLoad = computed(() => (this.source()?.shouldLoad() ?? false) && (this.target()?.shouldLoad() ?? false));\n\n public renderOrder = signal(0);\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().find((handle) => handle.rawHandle.id === this.edge.sourceHandle);\n } else {\n existsSourceHandle = !!source.handles().find((handle) => handle.rawHandle.type === 'source');\n }\n\n if (this.edge.targetHandle) {\n existsTargetHandle = !!target.handles().find((handle) => handle.rawHandle.id === this.edge.targetHandle);\n } else {\n existsTargetHandle = !!target.handles().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 const source = this.sourceHandle();\n const target = this.targetHandle();\n\n // TODO: don't like this\n if (!source || !target) {\n return { path: '' };\n }\n\n const params = this.getPathFactoryParams(source, target);\n\n switch (this.curve) {\n case 'straight':\n return straightPath(params);\n case 'bezier':\n return bezierPath(params);\n case 'smooth-step':\n return smoothStepPath(params);\n case 'step':\n return smoothStepPath(params, 0);\n default:\n return this.curve(params);\n }\n });\n\n public sourceHandle = extendedComputed<HandleModel | null>((previousHandle) => {\n let handle: HandleModel | null = null;\n\n if (this.floating) {\n handle = this.closestHandles().sourceHandle;\n } else {\n if (this.edge.sourceHandle) {\n handle =\n this.source()\n ?.handles()\n .find((handle) => handle.rawHandle.id === this.edge.sourceHandle) ?? null;\n } else {\n handle =\n this.source()\n ?.handles()\n .find((handle) => handle.rawHandle.type === 'source') ?? null;\n }\n }\n\n // In case of virtual scrolling, if the node is scrolled out of view the handle may disappear\n // which could lead to the edge not being rendered\n // so we return the previous handle if the current one is null\n // TODO: check if this breaks anything\n if (handle === null) {\n return previousHandle;\n }\n\n return handle;\n });\n\n public targetHandle = extendedComputed<HandleModel | null>((previousHandle) => {\n let handle: HandleModel | null = null;\n\n if (this.floating) {\n handle = this.closestHandles().targetHandle;\n } else {\n if (this.edge.targetHandle) {\n handle =\n this.target()\n ?.handles()\n .find((handle) => handle.rawHandle.id === this.edge.targetHandle) ?? null;\n } else {\n handle =\n this.target()\n ?.handles()\n .find((handle) => handle.rawHandle.type === 'target') ?? null;\n }\n }\n\n // In case of virtual scrolling, if the node is scrolled out of view the handle may disappear\n // which could lead to the edge not being rendered\n // so we return the previous handle if the current one is null\n // TODO: check if this breaks anything\n if (handle === null) {\n return previousHandle;\n }\n\n return handle;\n });\n\n public closestHandles = computed(() => {\n const source = this.source();\n const target = this.target();\n\n if (!source || !target) {\n return { sourceHandle: null, targetHandle: null };\n }\n\n // Get all source handles from source node\n const sourceHandles =\n this.flowEntitiesService.connection().mode === 'strict'\n ? source.handles().filter((h) => h.rawHandle.type === 'source')\n : source.handles();\n // Get all target handles from target node\n const targetHandles =\n this.flowEntitiesService.connection().mode === 'strict'\n ? target.handles().filter((h) => h.rawHandle.type === 'target')\n : target.handles();\n\n if (sourceHandles.length === 0 || targetHandles.length === 0) {\n return { sourceHandle: null, targetHandle: null };\n }\n\n let minDistance = Infinity;\n let closestSourceHandle: HandleModel | null = null;\n let closestTargetHandle: HandleModel | null = null;\n\n // Check all combinations of source and target handles\n for (const sourceHandle of sourceHandles) {\n for (const targetHandle of targetHandles) {\n const sourcePoint = sourceHandle.pointAbsolute();\n const targetPoint = targetHandle.pointAbsolute();\n\n const distance = Math.sqrt(\n Math.pow(sourcePoint.x - targetPoint.x, 2) + Math.pow(sourcePoint.y - targetPoint.y, 2),\n );\n\n if (distance < minDistance) {\n minDistance = distance;\n closestSourceHandle = sourceHandle;\n closestTargetHandle = targetHandle;\n }\n }\n }\n\n return {\n sourceHandle: closestSourceHandle,\n targetHandle: closestTargetHandle,\n };\n });\n\n /**\n * TODO: not reactive\n */\n public markerStartUrl = computed(() => {\n const marker = this.edge.markers?.start;\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : '';\n });\n\n /**\n * TODO: not reactive\n */\n public markerEndUrl = computed(() => {\n const marker = this.edge.markers?.end;\n\n return marker ? `url(#${hashCode(JSON.stringify(marker))})` : '';\n });\n\n public context = {\n $implicit: {\n // TODO: check if edge could change\n edge: this.edge,\n path: computed(() => this.path().path),\n markerStart: this.markerStartUrl,\n markerEnd: this.markerEndUrl,\n selected: this.selected.asReadonly(),\n shouldLoad: this.shouldLoad,\n },\n };\n\n public edgeLabels: { [position in EdgeLabelPosition]?: EdgeLabelModel } = {};\n\n constructor(public edge: Edge) {\n this.type = edge.type ?? 'default';\n this.curve = edge.curve ?? 'bezier';\n this.reconnectable = edge.reconnectable ?? false;\n this.floating = edge.floating ?? false;\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\n private getPathFactoryParams(source: HandleModel, target: HandleModel): CurveFactoryParams {\n return {\n mode: 'edge',\n edge: this.edge,\n sourcePoint: source.pointAbsolute(),\n targetPoint: target.pointAbsolute(),\n sourcePosition: source.rawHandle.position,\n targetPosition: target.rawHandle.position,\n allEdges: this.flowEntitiesService.rawEdges(),\n allNodes: this.flowEntitiesService.rawNodes(),\n };\n }\n}\n","import { NodeModel } from '../../models/node.model';\nimport { DynamicNode, Node } from '../../interfaces/node.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport { Edge } from '../../interfaces/edge.interface';\n\nexport class ReferenceIdentityChecker {\n /**\n * Create new models for new node references and keep old models for old node references\n */\n public static nodes(newNodes: Node[] | DynamicNode[], oldNodeModels: NodeModel[]) {\n const oldNodesMap: Map<Node | DynamicNode, NodeModel> = new Map();\n oldNodeModels.forEach((model) => oldNodesMap.set(model.rawNode, model));\n\n return newNodes.map((newNode) => {\n return oldNodesMap.get(newNode) ?? 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[]): 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, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n Observable,\n asyncScheduler,\n distinctUntilChanged,\n filter,\n map,\n merge,\n observeOn,\n pairwise,\n skip,\n switchMap,\n} from 'rxjs';\nimport { NodeChange } from '../types/node-change.type';\n\n// this delay fixes the cases when change triggered\n// but the flow not yet fylly re-rendered\nconst DELAY_FOR_SCHEDULER = 25;\n\n@Injectable()\nexport class NodesChangeService {\n protected entitiesService = inject(FlowEntitiesService);\n\n protected nodesPositionChange$ = toObservable(this.entitiesService.nodes).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 map((changedNode) => {\n return [\n { type: 'position', id: changedNode.rawNode.id, point: changedNode.point() } as NodeChange,\n // TODO: emits even if node is not change position\n ...(this.entitiesService\n .nodes()\n .filter((node) => node !== changedNode && node.selected())\n .map((node) => ({ type: 'position', id: node.rawNode.id, point: node.point() })) as NodeChange[]),\n ];\n }),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeSizeChange$ = toObservable(this.entitiesService.nodes).pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map((node) =>\n node.size$.pipe(\n skip(1),\n map(() => node),\n ),\n ),\n ),\n ),\n map((changedNode) => [{ type: 'size', id: changedNode.rawNode.id, size: changedNode.size() }]),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeAddChange$ = toObservable(this.entitiesService.nodes).pipe(\n pairwise(),\n map(([oldList, newList]) => newList.filter((node) => !oldList.includes(node))),\n filter((nodes) => !!nodes.length),\n map((nodes) => nodes.map((node) => ({ type: 'add', id: node.rawNode.id }))),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeRemoveChange$ = toObservable(this.entitiesService.nodes).pipe(\n pairwise(),\n map(([oldList, newList]) => oldList.filter((node) => !newList.includes(node))),\n filter((nodes) => !!nodes.length),\n map((nodes) => nodes.map((node) => ({ type: 'remove', id: node.rawNode.id }))),\n ) satisfies Observable<NodeChange[]>;\n\n protected nodeSelectedChange$ = toObservable(this.entitiesService.nodes).pipe(\n switchMap((nodes) =>\n merge(\n ...nodes.map((node) =>\n node.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => node),\n ),\n ),\n ),\n ),\n map((changedNode) => [{ type: 'select', id: changedNode.rawNode.id, selected: changedNode.selected() }]),\n ) satisfies Observable<NodeChange[]>;\n\n public readonly changes$: Observable<NodeChange[]> = merge(\n this.nodesPositionChange$,\n this.nodeSizeChange$,\n this.nodeAddChange$,\n this.nodeRemoveChange$,\n this.nodeSelectedChange$,\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, DELAY_FOR_SCHEDULER),\n );\n}\n","import { Injectable, computed, inject, untracked } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport {\n Observable,\n asyncScheduler,\n distinctUntilChanged,\n filter,\n map,\n merge,\n observeOn,\n pairwise,\n skip,\n switchMap,\n zip,\n} 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((v) => a.filter((e) => e === v).length === b.filter((e) => e === v).length);\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 }) => !nodes.includes(source()!) || !nodes.includes(target()!));\n }),\n ),\n toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) => {\n return zip(...edges.map((e) => e.detached$.pipe(map(() => e))));\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) => edges.map(({ edge }) => ({ type: 'detached', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeAddChange$ = toObservable(this.entitiesService.edges).pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return newList.filter((edge) => !oldList.includes(edge));\n }),\n filter((edges) => !!edges.length),\n map((edges) => edges.map(({ edge }) => ({ type: 'add', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeRemoveChange$ = toObservable(this.entitiesService.edges).pipe(\n pairwise(),\n map(([oldList, newList]) => {\n return oldList.filter((edge) => !newList.includes(edge));\n }),\n filter((edges) => !!edges.length),\n map((edges) => edges.map(({ edge }) => ({ type: 'remove', id: edge.id }))),\n ) satisfies Observable<EdgeChange[]>;\n\n protected edgeSelectChange$ = toObservable(this.entitiesService.edges).pipe(\n switchMap((edges) =>\n merge(\n ...edges.map((edge) =>\n edge.selected$.pipe(\n distinctUntilChanged(),\n skip(1),\n map(() => edge),\n ),\n ),\n ),\n ),\n map((changedEdge) => [{ type: 'select', id: changedEdge.edge.id, selected: changedEdge.selected() }]),\n ) satisfies Observable<EdgeChange[]>;\n\n public readonly changes$: Observable<EdgeChange[]> = merge(\n this.edgeDetachedChange$,\n this.edgeAddChange$,\n this.edgeRemoveChange$,\n this.edgeSelectChange$,\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, inject } from '@angular/core';\nimport {\n NodeAddChange,\n NodeChange,\n NodePositionChange,\n NodeRemoveChange,\n NodeSelectedChange,\n NodeSizeChange,\n} from '../types/node-change.type';\nimport { EdgeChangesService } from '../services/edge-changes.service';\nimport { NodesChangeService } from '../services/node-changes.service';\nimport { Observable, filter, map } from 'rxjs';\nimport {\n EdgeAddChange,\n EdgeChange,\n EdgeDetachedChange,\n EdgeRemoveChange,\n EdgeSelectChange,\n} from '../types/edge-change.type';\nimport { outputFromObservable } from '@angular/core/rxjs-interop';\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 public readonly onNodesChange = outputFromObservable(this.nodesChangeService.changes$);\n\n public readonly onNodesChangePosition = outputFromObservable(this.nodeChangesOfType('position'), {\n alias: 'onNodesChange.position',\n });\n\n /**\n * @deprecated use `onNodesChange.position` instead\n */\n public readonly onNodesChangePositionSignle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('position')),\n { alias: 'onNodesChange.position.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.position` instead\n */\n public readonly onNodesChangePositionMany = outputFromObservable(\n this.manyChanges(this.nodeChangesOfType('position')),\n { alias: 'onNodesChange.position.many' },\n );\n\n public readonly onNodesChangeSize = outputFromObservable(this.nodeChangesOfType('size'), {\n alias: 'onNodesChange.size',\n });\n\n /**\n * @deprecated use `onNodesChange.size` instead\n */\n public readonly onNodesChangeSizeSingle = outputFromObservable(this.singleChange(this.nodeChangesOfType('size')), {\n alias: 'onNodesChange.size.single',\n });\n\n /**\n * @deprecated use `onNodesChange.size` instead\n */\n public readonly onNodesChangeSizeMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('size')), {\n alias: 'onNodesChange.size.many',\n });\n\n public readonly onNodesChangeAdd = outputFromObservable(this.nodeChangesOfType('add'), {\n alias: 'onNodesChange.add',\n });\n\n /**\n * @deprecated use `onNodesChange.add` instead\n */\n public readonly onNodesChangeAddSingle = outputFromObservable(this.singleChange(this.nodeChangesOfType('add')), {\n alias: 'onNodesChange.add.single',\n });\n\n /**\n * @deprecated use `onNodesChange.add` instead\n */\n public readonly onNodesChangeAddMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('add')), {\n alias: 'onNodesChange.add.many',\n });\n\n public readonly onNodesChangeRemove = outputFromObservable(this.nodeChangesOfType('remove'), {\n alias: 'onNodesChange.remove',\n });\n\n /**\n * @deprecated use `onNodesChange.remove` instead\n */\n public readonly onNodesChangeRemoveSingle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('remove')),\n { alias: 'onNodesChange.remove.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.remove` instead\n */\n public readonly onNodesChangeRemoveMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('remove')), {\n alias: 'onNodesChange.remove.many',\n });\n\n public readonly onNodesChangeSelect = outputFromObservable(this.nodeChangesOfType('select'), {\n alias: 'onNodesChange.select',\n });\n\n /**\n * @deprecated use `onNodesChange.select` instead\n */\n public readonly onNodesChangeSelectSingle = outputFromObservable(\n this.singleChange(this.nodeChangesOfType('select')),\n { alias: 'onNodesChange.select.single' },\n );\n\n /**\n * @deprecated use `onNodesChange.select` instead\n */\n public readonly onNodesChangeSelectMany = outputFromObservable(this.manyChanges(this.nodeChangesOfType('select')), {\n alias: 'onNodesChange.select.many',\n });\n\n /**\n * Watch edges change\n */\n public readonly onEdgesChange = outputFromObservable(this.edgesChangeService.changes$);\n\n public readonly onNodesChangeDetached = outputFromObservable(this.edgeChangesOfType('detached'), {\n alias: 'onEdgesChange.detached',\n });\n\n /**\n * @deprecated use `onEdgesChange.detached` instead\n */\n public readonly onNodesChangeDetachedSingle = outputFromObservable(\n this.singleChange(this.edgeChangesOfType('detached')),\n { alias: 'onEdgesChange.detached.single' },\n );\n\n /**\n * @deprecated use `onEdgesChange.detached` instead\n */\n public readonly onNodesChangeDetachedMany = outputFromObservable(\n this.manyChanges(this.edgeChangesOfType('detached')),\n { alias: 'onEdgesChange.detached.many' },\n );\n\n public readonly onEdgesChangeAdd = outputFromObservable(this.edgeChangesOfType('add'), {\n alias: 'onEdgesChange.add',\n });\n\n /**\n * @deprecated use `onEdgesChange.add` instead\n */\n public readonly onEdgeChangeAddSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('add')), {\n alias: 'onEdgesChange.add.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.add` instead\n */\n public readonly onEdgeChangeAddMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('add')), {\n alias: 'onEdgesChange.add.many',\n });\n\n public readonly onEdgeChangeRemove = outputFromObservable(this.edgeChangesOfType('remove'), {\n alias: 'onEdgesChange.remove',\n });\n\n /**\n * @deprecated use `onEdgesChange.remove` instead\n */\n public readonly onEdgeChangeRemoveSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('remove')), {\n alias: 'onEdgesChange.remove.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.remove` instead\n */\n public readonly onEdgeChangeRemoveMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('remove')), {\n alias: 'onEdgesChange.remove.many',\n });\n\n public readonly onEdgeChangeSelect = outputFromObservable(this.edgeChangesOfType('select'), {\n alias: 'onEdgesChange.select',\n });\n\n /**\n * @deprecated use `onEdgesChange.select` instead\n */\n public readonly onEdgeChangeSelectSingle = outputFromObservable(this.singleChange(this.edgeChangesOfType('select')), {\n alias: 'onEdgesChange.select.single',\n });\n\n /**\n * @deprecated use `onEdgesChange.select` instead\n */\n public readonly onEdgeChangeSelectMany = outputFromObservable(this.manyChanges(this.edgeChangesOfType('select')), {\n alias: 'onEdgesChange.select.many',\n });\n\n private nodeChangesOfType<T extends NodeChange['type']>(type: T) {\n return this.nodesChangeService.changes$.pipe(\n map((changes) => changes.filter((c): c is NodeChangeMap[T] => c.type === type)),\n filter((changes) => !!changes.length),\n );\n }\n\n private edgeChangesOfType<T extends EdgeChange['type']>(type: T) {\n return this.edgesChangeService.changes$.pipe(\n map((changes) => changes.filter((c): c is EdgeChangeMap[T] => c.type === type)),\n filter((changes) => !!changes.length),\n );\n }\n\n private singleChange<T>(changes$: Observable<T[]>) {\n return changes$.pipe(\n filter((changes) => changes.length === 1),\n map(([first]) => first),\n );\n }\n\n private manyChanges<T>(changes$: Observable<T[]>) {\n return changes$.pipe(filter((changes) => changes.length > 1));\n }\n}\n\n// TODO: do not write this types manually\ntype NodeChangeMap = {\n position: NodePositionChange;\n size: NodeSizeChange;\n add: NodeAddChange;\n remove: NodeRemoveChange;\n select: NodeSelectedChange;\n};\n\ntype EdgeChangeMap = {\n detached: EdgeDetachedChange;\n add: EdgeAddChange;\n remove: EdgeRemoveChange;\n select: EdgeSelectChange;\n};\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { Observable, Subject, animationFrameScheduler, fromEvent, map, merge, observeOn, share, tap } from 'rxjs';\nimport { Point } from '../interfaces/point.interface';\n\nexport interface PointerEvent {\n x: number;\n y: number;\n movementX: number;\n movementY: number;\n target: Element | null;\n originalEvent: MouseEvent | TouchEvent;\n}\n\n@Directive({\n standalone: true,\n selector: 'svg[rootPointer]',\n})\nexport class RootPointerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef).nativeElement;\n\n private initialTouch$ = new Subject<TouchEvent>();\n\n private prevTouchEvent: TouchEvent | null = null;\n\n // TODO: do not emit if mouse not down\n public mouseMovement$ = fromEvent<MouseEvent>(this.host, 'mousemove').pipe(\n map((event) => ({\n x: event.clientX,\n y: event.clientY,\n movementX: event.movementX,\n movementY: event.movementY,\n target: event.target as Element | null,\n originalEvent: event,\n })),\n observeOn(animationFrameScheduler),\n share(),\n ) satisfies Observable<Point>;\n\n public touchMovement$ = merge(this.initialTouch$, fromEvent<TouchEvent>(this.host, 'touchmove')).pipe(\n tap((event) => event.preventDefault()),\n map((originalEvent) => {\n const x = originalEvent.touches[0]?.clientX ?? 0;\n const y = originalEvent.touches[0]?.clientY ?? 0;\n const movementX = this.prevTouchEvent ? originalEvent.touches[0].pageX - this.prevTouchEvent.touches[0].pageX : 0;\n const movementY = this.prevTouchEvent ? originalEvent.touches[0].pageY - this.prevTouchEvent.touches[0].pageY : 0;\n\n const target = document.elementFromPoint(x, y);\n\n return { x, y, movementX, movementY, target, originalEvent };\n }),\n tap((event) => (this.prevTouchEvent = event.originalEvent)),\n observeOn(animationFrameScheduler),\n share(),\n ) satisfies Observable<Point>;\n\n public pointerMovement$: Observable<PointerEvent> = merge(this.mouseMovement$, this.touchMovement$);\n\n public touchEnd$ = fromEvent<TouchEvent>(this.host, 'touchend').pipe(\n map((originalEvent) => {\n const x = originalEvent.changedTouches[0]?.clientX ?? 0;\n const y = originalEvent.changedTouches[0]?.clientY ?? 0;\n const target = document.elementFromPoint(x, y);\n\n return { x, y, target, originalEvent };\n }),\n tap(() => (this.prevTouchEvent = null)),\n share(),\n ) satisfies Observable<Point>;\n\n public mouseUp$ = fromEvent<MouseEvent>(this.host, 'mouseup').pipe(\n map((originalEvent) => {\n const x = originalEvent.clientX;\n const y = originalEvent.clientY;\n const target = originalEvent.target;\n\n return { x, y, target, originalEvent };\n }),\n share(),\n ) satisfies Observable<Point>;\n\n public documentPointerEnd$ = merge(fromEvent(document, 'mouseup'), fromEvent(document, 'touchend')).pipe(share());\n\n /**\n * We should know when user started a touch in order to not\n * show old touch position when connection creation is started\n */\n public setInitialTouch(event: TouchEvent) {\n this.initialTouch$.next(event);\n }\n}\n","import { Directive, ElementRef, Signal, computed, inject } from '@angular/core';\nimport { RootSvgReferenceDirective } from './reference.directive';\nimport { Point } from '../interfaces/point.interface';\nimport { RootPointerDirective } from './root-pointer.directive';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: 'g[spacePointContext]',\n})\nexport class SpacePointContextDirective {\n private pointerMovementDirective = inject(RootPointerDirective);\n private rootSvg = inject(RootSvgReferenceDirective).element;\n private host = inject<ElementRef<SVGGElement>>(ElementRef).nativeElement;\n\n /**\n * Signal with current mouse position in svg space\n */\n public svgCurrentSpacePoint: Signal<Point> = computed(() => {\n const movement = this.pointerMovement();\n\n if (!movement) {\n return { x: 0, y: 0 };\n }\n\n return this.documentPointToFlowPoint({\n x: movement.x,\n y: movement.y,\n });\n });\n\n public pointerMovement = toSignal(this.pointerMovementDirective.pointerMovement$);\n\n public documentPointToFlowPoint(documentPoint: Point) {\n const point = this.rootSvg.createSVGPoint();\n point.x = documentPoint.x;\n point.y = documentPoint.y;\n\n return point.matrixTransform(this.host.getScreenCTM()!.inverse());\n }\n}\n","import { Background } from '../types/background.type';\n\nexport function transformBackground(background: Background | string): Background {\n return typeof background === 'string' ? { type: 'solid', color: background } : background;\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 { computed, Injectable, signal } from '@angular/core';\nimport { ToolbarModel } from '../models/toolbar.model';\nimport { NodeModel } from '../models/node.model';\nimport { Microtask } from '../decorators/microtask.decorator';\n\n@Injectable()\nexport class OverlaysService {\n private readonly toolbars = signal<ToolbarModel[]>([]);\n\n public nodeToolbarsMap = computed(() => {\n const map = new Map<NodeModel, ToolbarModel[]>();\n\n this.toolbars().forEach((toolbar) => {\n const existing = map.get(toolbar.node) ?? [];\n map.set(toolbar.node, [...existing, toolbar]);\n });\n\n return map;\n });\n\n @Microtask\n public addToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => [...toolbars, toolbar]);\n }\n\n @Microtask\n public removeToolbar(toolbar: ToolbarModel): void {\n this.toolbars.update((toolbars) => toolbars.filter((t) => t !== toolbar));\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 const 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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n NgZone,\n TemplateRef,\n computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { EdgeLabelModel } from '../../models/edge-label.model';\nimport { EdgeModel } from '../../models/edge.model';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { resizable } from '../../utils/resizable';\nimport { startWith, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME } from '../../constants/magic-number-to-fix-glitch-in-chrome.constant';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { HtmlEdgeLabelContext } from '../../interfaces/template-context.interface';\nimport { HtmlTemplateEdgeLabel } from '../../interfaces/edge-label.interface';\n\n@Component({\n standalone: true,\n selector: 'g[edgeLabel]',\n templateUrl: './edge-label.component.html',\n styles: [\n `\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 ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n})\nexport class EdgeLabelComponent implements AfterViewInit {\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private settingsService = inject(FlowSettingsService);\n\n // TODO: too many inputs\n public model = input.required<EdgeLabelModel>();\n\n public edgeModel = input.required<EdgeModel>();\n\n public point = input({ x: 0, y: 0 });\n\n public htmlTemplate = input<TemplateRef<any>>();\n\n public edgeLabelWrapperRef = viewChild.required<ElementRef<Element>>('edgeLabelWrapper');\n\n /**\n * Centered point of label\n *\n * TODO: maybe put it into EdgeLabelModel\n */\n protected edgeLabelPoint = computed(() => {\n const point = this.point();\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 protected edgeLabelStyle = computed(() => {\n const label = this.model().edgeLabel;\n\n if (label.type === 'default' && label.style) {\n const flowBackground = this.settingsService.background();\n\n let color = 'transparent';\n\n if (flowBackground.type === 'dots') {\n color = flowBackground.backgroundColor ?? '#fff';\n }\n\n if (flowBackground.type === 'solid') {\n color = flowBackground.color;\n }\n\n label.style.backgroundColor = label.style.backgroundColor ?? color;\n\n return label.style;\n }\n\n return null;\n });\n\n public ngAfterViewInit(): void {\n const labelElement = this.edgeLabelWrapperRef().nativeElement;\n\n resizable([labelElement], this.zone)\n .pipe(\n startWith(null),\n tap(() => {\n const width = labelElement.clientWidth + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME;\n const height = labelElement.clientHeight + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME;\n\n this.model().size.set({ width, height });\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n // TODO: move to model with Contextable interface\n protected getLabelContext(): HtmlEdgeLabelContext {\n return {\n $implicit: {\n edge: this.edgeModel().edge,\n label: this.model().edgeLabel as HtmlTemplateEdgeLabel,\n },\n };\n }\n}\n","@if (model(); as model) {\n @if (model.edgeLabel.type === 'html-template' && htmlTemplate()) {\n @if (htmlTemplate(); as htmlTemplate) {\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 <div #edgeLabelWrapper class=\"edge-label-wrapper\">\n <ng-container *ngTemplateOutlet=\"htmlTemplate; context: getLabelContext()\" />\n </div>\n </svg:foreignObject>\n }\n }\n\n @if (model.edgeLabel.type === 'default') {\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 <div #edgeLabelWrapper class=\"edge-label-wrapper\" [style]=\"edgeLabelStyle()\">\n {{ model.edgeLabel.text }}\n </div>\n </svg:foreignObject>\n }\n}\n","import { ConnectionInternal } from '../interfaces/connection.internal.interface';\n\n/**\n * This function contains a hack-y behavior.\n * If the handles are of the same type (source-source or target-target),\n * it returns nodes where source === target and\n * handles where sourceHandle === targetHandle\n *\n * This leads to that notSelfValidator returns false for these cases,\n * exactly what we need for strict connection type\n */\nexport function adjustDirection(connection: ConnectionInternal): ConnectionInternal {\n const result = {} as ConnectionInternal;\n\n if (connection.sourceHandle.rawHandle.type === 'source') {\n result.source = connection.source;\n result.sourceHandle = connection.sourceHandle;\n } else {\n result.source = connection.target;\n result.sourceHandle = connection.targetHandle;\n }\n\n if (connection.targetHandle.rawHandle.type === 'target') {\n result.target = connection.target;\n result.targetHandle = connection.targetHandle;\n } else {\n result.target = connection.source;\n result.targetHandle = connection.sourceHandle;\n }\n\n return result;\n}\n","import { Directive, computed, inject } from '@angular/core';\nimport { Connection, ReconnectionEvent } from '../interfaces/connection.interface';\nimport { FlowStatusConnectionEnd, FlowStatusReconnectionEnd, FlowStatusService } from '../services/flow-status.service';\n\nimport { FlowEntitiesService } from '../services/flow-entities.service';\nimport { HandleModel } from '../models/handle.model';\nimport { adjustDirection } from '../utils/adjust-direction';\nimport { outputFromObservable, toObservable } from '@angular/core/rxjs-interop';\nimport { filter, map, tap } from 'rxjs';\nimport { EdgeModel } from '../models/edge.model';\n\n@Directive({\n selector: '[onConnect], [onReconnect]',\n standalone: true,\n})\nexport class ConnectionControllerDirective {\n private statusService = inject(FlowStatusService);\n private flowEntitiesService = inject(FlowEntitiesService);\n\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 * @todo add connect event and deprecate onConnect\n */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onConnect = outputFromObservable<Connection>(\n toObservable(this.statusService.status).pipe(\n filter((status): status is FlowStatusConnectionEnd => status.state === 'connection-end'),\n map((status) => statusToConnection(status, this.isStrictMode())),\n tap(() => this.statusService.setIdleStatus()),\n filter((connection) => this.flowEntitiesService.connection().validator(connection)),\n ),\n );\n\n public readonly onReconnect = outputFromObservable<ReconnectionEvent>(\n toObservable(this.statusService.status).pipe(\n filter((status): status is FlowStatusReconnectionEnd => status.state === 'reconnection-end'),\n map((status) => {\n const connection = statusToConnection(status, this.isStrictMode());\n const oldEdge = status.payload.oldEdge.edge;\n\n return { connection, oldEdge };\n }),\n tap(() => this.statusService.setIdleStatus()),\n filter(({ connection }) => this.flowEntitiesService.connection().validator(connection)),\n ),\n );\n\n protected isStrictMode = computed(() => this.flowEntitiesService.connection().mode === 'strict');\n\n public startConnection(handle: HandleModel) {\n this.statusService.setConnectionStartStatus(handle.parentNode, handle);\n }\n\n public startReconnection(handle: HandleModel, oldEdge: EdgeModel) {\n this.statusService.setReconnectionStartStatus(handle.parentNode, handle, oldEdge);\n }\n\n public validateConnection(handle: HandleModel) {\n const status = this.statusService.status();\n\n if (status.state === 'connection-start' || status.state === 'reconnection-start') {\n const isReconnection = status.state === 'reconnection-start';\n\n let source = status.payload.source;\n let target = handle.parentNode;\n let sourceHandle = status.payload.sourceHandle;\n let targetHandle = handle;\n\n if (this.isStrictMode()) {\n // swap direction (if needed) according to actual source and target of strict mode\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: handle.parentNode,\n targetHandle: handle,\n });\n\n source = adjusted.source;\n target = adjusted.target;\n sourceHandle = adjusted.sourceHandle;\n targetHandle = adjusted.targetHandle;\n }\n\n const valid = this.flowEntitiesService.connection().validator({\n source: source.rawNode.id,\n target: target.rawNode.id,\n sourceHandle: sourceHandle.rawHandle.id,\n targetHandle: targetHandle.rawHandle.id,\n });\n\n // TODO: check how react flow handles highlight of handle\n // if direction changes\n handle.state.set(valid ? 'valid' : 'invalid');\n\n // status is about how we draw connection, so we don't need\n // swapped diretion here\n isReconnection\n ? this.statusService.setReconnectionValidationStatus(\n valid,\n status.payload.source,\n handle.parentNode,\n status.payload.sourceHandle,\n handle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionValidationStatus(\n valid,\n status.payload.source,\n handle.parentNode,\n status.payload.sourceHandle,\n handle,\n );\n }\n }\n\n public resetValidateConnection(targetHandle: HandleModel) {\n targetHandle.state.set('idle');\n\n // drop back to start status\n const status = this.statusService.status();\n if (status.state === 'connection-validation' || status.state === 'reconnection-validation') {\n const isReconnection = status.state === 'reconnection-validation';\n\n isReconnection\n ? this.statusService.setReconnectionStartStatus(\n status.payload.source,\n status.payload.sourceHandle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionStartStatus(status.payload.source, status.payload.sourceHandle);\n }\n }\n\n public endConnection() {\n const status = this.statusService.status();\n\n if (status.state === 'connection-validation' || status.state === 'reconnection-validation') {\n const isReconnection = status.state === 'reconnection-validation';\n\n const source = status.payload.source;\n const sourceHandle = status.payload.sourceHandle;\n const target = status.payload.target;\n const targetHandle = status.payload.targetHandle;\n\n isReconnection\n ? this.statusService.setReconnectionEndStatus(\n source,\n target,\n sourceHandle,\n targetHandle,\n status.payload.oldEdge,\n )\n : this.statusService.setConnectionEndStatus(source, target, sourceHandle, targetHandle);\n }\n }\n}\n\nfunction statusToConnection(\n status: FlowStatusConnectionEnd | FlowStatusReconnectionEnd,\n isStrictMode: boolean,\n): Connection {\n let source = status.payload.source;\n let target = status.payload.target;\n let sourceHandle = status.payload.sourceHandle;\n let targetHandle = status.payload.targetHandle;\n\n if (isStrictMode) {\n const adjusted = adjustDirection({\n source: status.payload.source,\n sourceHandle: status.payload.sourceHandle,\n target: status.payload.target,\n targetHandle: status.payload.targetHandle,\n });\n\n source = adjusted.source;\n target = adjusted.target;\n sourceHandle = adjusted.sourceHandle;\n targetHandle = adjusted.targetHandle;\n }\n\n const sourceId = source.rawNode.id;\n const targetId = target.rawNode.id;\n\n const sourceHandleId = sourceHandle.rawHandle.id;\n const targetHandleId = targetHandle.rawHandle.id;\n\n return {\n source: sourceId,\n target: targetId,\n sourceHandle: sourceHandleId,\n targetHandle: targetHandleId,\n };\n}\n","import { Injectable, computed, inject } from '@angular/core';\nimport { FlowEntitiesService } from './flow-entities.service';\nimport { EdgeModel } from '../models/edge.model';\nimport { FlowSettingsService } from './flow-settings.service';\n\n@Injectable()\nexport class EdgeRenderingService {\n private flowEntitiesService = inject(FlowEntitiesService);\n private flowSettingsService = inject(FlowSettingsService);\n\n public readonly edges = computed(() => {\n if (!this.flowSettingsService.optimization().virtualization) {\n return [...this.flowEntitiesService.validEdges()].sort(\n (aEdge, bEdge) => aEdge.renderOrder() - bEdge.renderOrder(),\n );\n }\n\n return this.viewportEdges().sort((aEdge, bEdge) => aEdge.renderOrder() - bEdge.renderOrder());\n });\n\n public readonly viewportEdges = computed(() => {\n return this.flowEntitiesService.validEdges().filter((e) => {\n const sourceHandle = e.sourceHandle();\n const targetHandle = e.targetHandle();\n\n return sourceHandle && targetHandle;\n });\n });\n\n private maxOrder = computed(() => {\n return Math.max(...this.flowEntitiesService.validEdges().map((n) => n.renderOrder()));\n });\n\n public pull(edge: EdgeModel) {\n const isAlreadyOnTop = edge.renderOrder() !== 0 && this.maxOrder() === edge.renderOrder();\n\n if (isAlreadyOnTop) {\n return;\n }\n\n // pull node\n edge.renderOrder.set(this.maxOrder() + 1);\n }\n}\n","export function isTouchEvent(event: Event): event is TouchEvent {\n return window.TouchEvent && event instanceof TouchEvent;\n}\n","import { Directive, ElementRef, HostListener, inject, output } from '@angular/core';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { RootPointerDirective } from './root-pointer.directive';\nimport { isTouchEvent } from '../utils/event';\n\n@Directive({\n standalone: true,\n selector: '[pointerStart], [pointerEnd], [pointerOver], [pointerOut]',\n})\nexport class PointerDirective {\n protected hostElement = inject<ElementRef<Element>>(ElementRef).nativeElement;\n protected pointerMovementDirective = inject(RootPointerDirective);\n\n protected readonly pointerOver = output<Event>();\n\n protected readonly pointerOut = output<Event>();\n\n /**\n * @todo the Angular may somehow ignore the event.\n * reproduced here: https://www.ngx-vflow.org/workshops/layout/vizdom-layout\n */\n protected readonly pointerStart = output<Event>();\n\n protected readonly pointerEnd = output<Event>();\n\n @HostListener('mousedown', ['$event'])\n @HostListener('touchstart', ['$event'])\n protected onPointerStart(event: Event) {\n this.pointerStart.emit(event);\n\n if (isTouchEvent(event)) {\n this.pointerMovementDirective.setInitialTouch(event);\n }\n }\n\n @HostListener('mouseup', ['$event'])\n protected onPointerEnd(event: Event) {\n this.pointerEnd.emit(event);\n }\n\n @HostListener('mouseover', ['$event'])\n protected onMouseOver(event: Event) {\n this.pointerOver.emit(event);\n }\n\n @HostListener('mouseout', ['$event'])\n protected onMouseOut(event: Event) {\n this.pointerOut.emit(event);\n }\n\n private wasPointerOver = false;\n\n // TODO check if i could avoid global touch end\n protected touchEnd = this.pointerMovementDirective.touchEnd$\n .pipe(\n filter(({ target }) => target === this.hostElement),\n tap(({ originalEvent }) => this.pointerEnd.emit(originalEvent)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n protected touchOverOut = this.pointerMovementDirective.touchMovement$\n .pipe(\n tap(({ target, originalEvent }) => {\n this.handleTouchOverAndOut(target, originalEvent);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n // TODO: dirty imperative implementation\n private handleTouchOverAndOut(target: Element | null, event: TouchEvent) {\n if (target === this.hostElement) {\n this.pointerOver.emit(event);\n this.wasPointerOver = true;\n } else {\n // should not emit before pointerOver\n if (this.wasPointerOver) {\n this.pointerOut.emit(event);\n }\n\n this.wasPointerOver = false;\n }\n }\n}\n","import { ChangeDetectionStrategy, Component, Injector, TemplateRef, computed, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { EdgeModel } from '../../models/edge.model';\nimport { EdgeContext } from '../../interfaces/template-context.interface';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { EdgeLabelComponent } from '../edge-label/edge-label.component';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { HandleModel } from '../../models/handle.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\nimport { PointerDirective } from '../../directives/pointer.directive';\n\n@Component({\n standalone: true,\n selector: 'g[edge]',\n templateUrl: './edge.component.html',\n styleUrls: ['./edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'selectable',\n '[style.visibility]': 'isReconnecting() ? \"hidden\" : \"visible\"',\n },\n imports: [NgTemplateOutlet, EdgeLabelComponent, PointerDirective],\n})\nexport class EdgeComponent {\n protected injector = inject(Injector);\n private selectionService = inject(SelectionService);\n private flowSettingsService = inject(FlowSettingsService);\n private flowStatusService = inject(FlowStatusService);\n private edgeRenderingService = inject(EdgeRenderingService);\n\n // TODO remove dependency from this directive\n private connectionController = inject(ConnectionControllerDirective, { optional: true });\n\n public model = input.required<EdgeModel>();\n\n public edgeTemplate = input<TemplateRef<EdgeContext>>();\n\n public edgeLabelHtmlTemplate = input<TemplateRef<any>>();\n\n protected isReconnecting = computed(() => {\n const status = this.flowStatusService.status();\n const isReconnecting = status.state === 'reconnection-start' || status.state === 'reconnection-validation';\n\n return isReconnecting && status.payload.oldEdge === this.model();\n });\n\n public select() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model());\n }\n }\n\n public pull() {\n if (this.flowSettingsService.elevateEdgesOnSelect()) {\n this.edgeRenderingService.pull(this.model());\n }\n }\n\n protected startReconnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation();\n\n this.connectionController?.startReconnection(handle, this.model());\n }\n}\n","@if (model().type === 'default') {\n <svg:path\n class=\"edge\"\n [attr.d]=\"model().path().path\"\n [attr.marker-start]=\"model().markerStartUrl()\"\n [attr.marker-end]=\"model().markerEndUrl()\"\n [class.edge_selected]=\"model().selected()\" />\n\n <svg:path class=\"interactive-edge\" [attr.d]=\"model().path().path\" (click)=\"select(); pull()\" />\n}\n\n@if (model().type === 'template' && edgeTemplate()) {\n @if (edgeTemplate(); as edgeTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"edgeTemplate\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n }\n}\n\n@if (model().edgeLabels.start; as label) {\n @if (model().path().labelPoints?.start; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().edgeLabels.center; as label) {\n @if (model().path().labelPoints?.center; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().edgeLabels.end; as label) {\n @if (model().path().labelPoints?.end; as point) {\n <svg:g edgeLabel [model]=\"label\" [point]=\"point\" [edgeModel]=\"model()\" [htmlTemplate]=\"edgeLabelHtmlTemplate()\" />\n }\n}\n\n@if (model().sourceHandle() && model().targetHandle()) {\n @if (model().reconnectable === true || model().reconnectable === 'source') {\n <svg:circle\n class=\"reconnect-handle\"\n r=\"10\"\n [attr.cx]=\"model().sourceHandle()!.pointAbsolute().x\"\n [attr.cy]=\"model().sourceHandle()!.pointAbsolute().y\"\n (pointerStart)=\"startReconnection($event, model().targetHandle()!)\" />\n }\n\n @if (model().reconnectable === true || model().reconnectable === 'target') {\n <svg:circle\n class=\"reconnect-handle\"\n r=\"10\"\n [attr.cx]=\"model().targetHandle()!.pointAbsolute().x\"\n [attr.cy]=\"model().targetHandle()!.pointAbsolute().y\"\n (pointerStart)=\"startReconnection($event, model().sourceHandle()!)\" />\n }\n}\n","import { Injectable, TemplateRef, signal } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { HandleType } from '../types/handle-type.type';\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 userOffsetX: number;\n userOffsetY: number;\n id?: string;\n hostReference?: Element;\n template?: TemplateRef<any> | null;\n}\n\n@Injectable()\nexport class HandleService {\n public readonly node = signal<NodeModel | null>(null);\n\n @Microtask // TODO fixes rendering of handle for group node\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((handles) => handles.filter((handle) => handle !== handleToDestoy));\n }\n }\n}\n","import { AfterViewInit, Directive, ElementRef, inject, input } from '@angular/core';\nimport { HandleModel } from '../models/handle.model';\n\n@Directive({\n standalone: true,\n selector: '[handleSizeController]',\n})\nexport class HandleSizeControllerDirective implements AfterViewInit {\n public handleModel = input.required<HandleModel>({\n alias: 'handleSizeController',\n });\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 { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n standalone: true,\n selector: 'default-node',\n templateUrl: './default-node.component.html',\n styleUrls: [`./default-node.component.scss`],\n host: {\n '[class.selected]': 'selected()',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DefaultNodeComponent {\n public selected = input(false);\n}\n","<ng-content />\n","import {\n AfterViewInit,\n Component,\n computed,\n ElementRef,\n inject,\n OnInit,\n TemplateRef,\n input,\n viewChild,\n effect,\n ChangeDetectionStrategy,\n OnDestroy,\n} from '@angular/core';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { filter, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ViewportService } from '../../services/viewport.service';\nimport { round } from '../../utils/round';\nimport { Microtask } from '../../decorators/microtask.decorator';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { NodeModel } from '../../models/node.model';\nimport { Rect } from '../../interfaces/rect';\nimport { PointerEvent } from '../../directives/root-pointer.directive';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { PointerDirective } from '../../directives/pointer.directive';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { Point } from '../../interfaces/point.interface';\nimport { align } from '../../utils/align-number';\n\ntype Side = 'top' | 'right' | 'bottom' | 'left' | 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\ninterface DistanceToEdge {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\n@Component({\n standalone: true,\n selector: '[resizable]',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss'],\n imports: [PointerDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizableComponent implements OnInit, AfterViewInit, OnDestroy {\n private nodeAccessor = inject(NodeAccessorService);\n private rootPointer = inject(RootPointerDirective);\n private viewportService = inject(ViewportService);\n private spacePointContext = inject(SpacePointContextDirective);\n private settingsService = inject(FlowSettingsService);\n private hostRef = inject<ElementRef<Element>>(ElementRef);\n\n public resizable = input<boolean | ''>();\n\n public resizerColor = input('#2e414c');\n\n public gap = input(1.5);\n\n private resizer = viewChild.required<TemplateRef<unknown>>('resizer');\n\n protected get model() {\n return this.nodeAccessor.model()!;\n }\n\n protected lineGap = 3;\n protected handleSize = 6;\n\n private resizeSide: Side | null = null;\n\n private zoom = computed(() => this.viewportService.readableViewport().zoom ?? 0);\n\n private minWidth = 0;\n private minHeight = 0;\n private maxWidth = Infinity;\n private maxHeight = Infinity;\n\n // TODO: allow reszie beside the flow\n protected resizeOnGlobalMouseMove = this.rootPointer.pointerMovement$\n .pipe(\n filter(() => this.resizeSide !== null),\n filter((event) => event.movementX !== 0 || event.movementY !== 0),\n tap((event) => this.resize(event)),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n protected endResizeOnGlobalMouseUp = this.rootPointer.documentPointerEnd$\n .pipe(\n tap(() => this.endResize()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n constructor() {\n effect(\n () => {\n const resizable = this.resizable();\n\n if (typeof resizable === 'boolean') {\n this.model.resizable.set(resizable);\n } else {\n this.model.resizable.set(true);\n }\n },\n { allowSignalWrites: true },\n );\n }\n\n public ngOnInit(): void {\n this.model.controlledByResizer.set(true);\n this.model.resizerTemplate.set(this.resizer());\n }\n\n public ngOnDestroy(): void {\n this.model.controlledByResizer.set(false);\n }\n\n @Microtask\n public ngAfterViewInit() {\n this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0;\n this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0;\n this.maxWidth = +getComputedStyle(this.hostRef.nativeElement).maxWidth.replace('px', '') || Infinity;\n this.maxHeight = +getComputedStyle(this.hostRef.nativeElement).maxHeight.replace('px', '') || Infinity;\n }\n\n protected startResize(side: Side, event: Event) {\n event.stopPropagation();\n this.resizeSide = side;\n this.model.resizing.set(true);\n }\n\n protected resize(event: PointerEvent) {\n if (!this.resizeSide) return;\n\n const offset = calcOffset(event.movementX, event.movementY, this.zoom());\n\n const resized = this.applyResize(this.resizeSide, this.model, offset, this.getDistanceToEdge(event));\n\n const { x, y, width, height } = constrainRect(\n resized,\n this.model,\n this.resizeSide,\n this.minWidth,\n this.minHeight,\n this.maxWidth,\n this.maxHeight,\n );\n\n this.model.setPoint({ x, y });\n this.model.width.set(width);\n this.model.height.set(height);\n }\n\n protected endResize() {\n this.resizeSide = null;\n this.model.resizing.set(false);\n }\n\n private getDistanceToEdge(event: PointerEvent): DistanceToEdge {\n const flowPoint = this.spacePointContext.documentPointToFlowPoint({ x: event.x, y: event.y });\n const { x, y } = this.model.globalPoint();\n\n return {\n left: flowPoint.x - x,\n right: flowPoint.x - (x + this.model.width()),\n top: flowPoint.y - y,\n bottom: flowPoint.y - (y + this.model.height()),\n };\n }\n\n private applyResize(side: Side, model: NodeModel, offset: Point, distanceToEdge: DistanceToEdge): Rect {\n const { x, y } = model.point();\n const width = model.width();\n const height = model.height();\n const [snapX, snapY] = this.settingsService.snapGrid();\n\n switch (side) {\n case 'left': {\n const movementX = offset.x + distanceToEdge.left;\n const newX = align(x + movementX, snapX);\n const deltaX = newX - x;\n\n return {\n x: newX,\n y,\n width: width - deltaX,\n height,\n };\n }\n case 'right': {\n const movementX = offset.x + distanceToEdge.right;\n const newWidth = align(width + movementX, snapX);\n\n return {\n x,\n y,\n width: newWidth,\n height,\n };\n }\n case 'top': {\n const movementY = offset.y + distanceToEdge.top;\n const newY = align(y + movementY, snapY);\n const deltaY = newY - y;\n\n return {\n x,\n y: newY,\n width,\n height: height - deltaY,\n };\n }\n case 'bottom': {\n const movementY = offset.y + distanceToEdge.bottom;\n const newHeight = align(height + movementY, snapY);\n\n return {\n x,\n y,\n width,\n height: newHeight,\n };\n }\n case 'top-left': {\n const movementX = offset.x + distanceToEdge.left;\n const movementY = offset.y + distanceToEdge.top;\n const newX = align(x + movementX, snapX);\n const newY = align(y + movementY, snapY);\n const deltaX = newX - x;\n const deltaY = newY - y;\n\n return {\n x: newX,\n y: newY,\n width: width - deltaX,\n height: height - deltaY,\n };\n }\n case 'top-right': {\n const movementX = offset.x + distanceToEdge.right;\n const movementY = offset.y + distanceToEdge.top;\n const newY = align(y + movementY, snapY);\n const deltaY = newY - y;\n\n return {\n x,\n y: newY,\n width: align(width + movementX, snapX),\n height: height - deltaY,\n };\n }\n case 'bottom-left': {\n const movementX = offset.x + distanceToEdge.left;\n const movementY = offset.y + distanceToEdge.bottom;\n const newX = align(x + movementX, snapX);\n const deltaX = newX - x;\n\n return {\n x: newX,\n y,\n width: width - deltaX,\n height: align(height + movementY, snapY),\n };\n }\n case 'bottom-right': {\n const movementX = offset.x + distanceToEdge.right;\n const movementY = offset.y + distanceToEdge.bottom;\n\n return {\n x,\n y,\n width: align(width + movementX, snapX),\n height: align(height + movementY, snapY),\n };\n }\n }\n }\n}\n\nfunction calcOffset(movementX: number, movementY: number, zoom: number): Point {\n return {\n x: round(movementX / zoom),\n y: round(movementY / zoom),\n };\n}\n\nfunction constrainRect(\n rect: Rect,\n model: NodeModel,\n side: Side,\n minWidth: number,\n minHeight: number,\n maxWidth: number,\n maxHeight: number,\n) {\n let { x, y, width, height } = rect;\n\n // 1. Prevent negative dimensions\n width = Math.max(width, 0);\n height = Math.max(height, 0);\n\n // 2. Apply minimum size constraints\n width = Math.max(minWidth, width);\n height = Math.max(minHeight, height);\n width = Math.min(maxWidth, width);\n height = Math.min(maxHeight, height);\n\n // Apply left/top constraints based on minimum size\n x = Math.min(x, model.point().x + model.width() - minWidth);\n y = Math.min(y, model.point().y + model.height() - minHeight);\n x = Math.max(x, model.point().x + model.width() - maxWidth);\n y = Math.max(y, model.point().y + model.height() - maxHeight);\n\n const parent = model.parent();\n // 3. Apply maximum size constraints based on parent size (if exists)\n if (parent) {\n const parentWidth = parent.width();\n const parentHeight = parent.height();\n const modelX = model.point().x;\n const modelY = model.point().y;\n\n x = Math.max(x, 0);\n y = Math.max(y, 0);\n\n // Stop resizing when hitting left or top boundary\n if (side.includes('left') && x === 0) {\n width = Math.min(width, modelX + model.width());\n }\n if (side.includes('top') && y === 0) {\n height = Math.min(height, modelY + model.height());\n }\n\n // Allow right/bottom resizing without being blocked\n width = Math.min(width, parentWidth - x);\n height = Math.min(height, parentHeight - y);\n }\n\n const bounds = getNodesBounds(model.children());\n // 4. Apply child node constraints (if children exist)\n if (bounds) {\n if (side.includes('left')) {\n x = Math.min(x, model.point().x + model.width() - (bounds.x + bounds.width));\n width = Math.max(width, bounds.x + bounds.width);\n }\n\n if (side.includes('right')) {\n width = Math.max(width, bounds.x + bounds.width);\n }\n\n if (side.includes('bottom')) {\n height = Math.max(height, bounds.y + bounds.height);\n }\n\n if (side.includes('top')) {\n y = Math.min(y, model.point().y + model.height() - (bounds.y + bounds.height));\n height = Math.max(height, bounds.y + bounds.height);\n }\n }\n\n return {\n x,\n y,\n width,\n height,\n };\n}\n","<ng-template #resizer>\n <svg:g>\n <!-- top line -->\n <svg:line\n class=\"top\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"-gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"-gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('top', $event)\" />\n <!-- Left line -->\n <svg:line\n class=\"left\"\n stroke-width=\"2\"\n [attr.x1]=\"-gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"-gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('left', $event)\" />\n <!-- Bottom line -->\n <svg:line\n class=\"bottom\"\n stroke-width=\"2\"\n [attr.x1]=\"lineGap\"\n [attr.y1]=\"model.size().height + gap()\"\n [attr.x2]=\"model.size().width - lineGap\"\n [attr.y2]=\"model.size().height + gap()\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom', $event)\" />\n <!-- Right line -->\n <svg:line\n class=\"right\"\n stroke-width=\"2\"\n [attr.x1]=\"model.size().width + gap()\"\n [attr.y1]=\"lineGap\"\n [attr.x2]=\"model.size().width + gap()\"\n [attr.y2]=\"model.size().height - lineGap\"\n [attr.stroke]=\"resizerColor()\"\n (pointerStart)=\"startResize('right', $event)\" />\n\n <!-- Top Left -->\n <svg:rect\n class=\"top-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-left', $event)\" />\n\n <!-- Top right -->\n <svg:rect\n class=\"top-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"-(handleSize / 2) - gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('top-right', $event)\" />\n\n <!-- Bottom left -->\n <svg:rect\n class=\"bottom-left\"\n [attr.x]=\"-(handleSize / 2) - gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-left', $event)\" />\n\n <!-- Bottom right -->\n <svg:rect\n class=\"bottom-right\"\n [attr.x]=\"model.size().width - handleSize / 2 + gap()\"\n [attr.y]=\"model.size().height - handleSize / 2 + gap()\"\n [attr.width]=\"handleSize\"\n [attr.height]=\"handleSize\"\n [attr.fill]=\"resizerColor()\"\n (pointerStart)=\"startResize('bottom-right', $event)\" />\n </svg:g>\n</ng-template>\n\n<ng-content />\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 pointAbsolute = computed(() => {\n return {\n x: this.parentNode.globalPoint().x + this.hostOffset().x + this.sizeOffset().x,\n y: this.parentNode.globalPoint().y + this.hostOffset().y + this.sizeOffset().y,\n };\n });\n\n public state = signal<HandleState>('idle');\n\n private updateHostSizeAndPosition$ = new Subject<void>();\n\n // TODO: for some reason toLazySignal breaks unit tests, so we use toSignal here\n private hostSize = toSignal(this.updateHostSizeAndPosition$.pipe(map(() => this.getHostSize())), {\n initialValue: { width: 0, height: 0 },\n });\n\n // TODO: for some reason toLazySignal breaks unit tests, so we use toSignal here\n private hostPosition = toSignal(\n this.updateHostSizeAndPosition$.pipe(\n map(() => ({\n x: this.hostReference instanceof HTMLElement ? this.hostReference.offsetLeft : 0, // for now just 0 for group nodes\n y: this.hostReference instanceof HTMLElement ? this.hostReference.offsetTop : 0, // for now just 0 for group nodes\n })),\n ),\n {\n initialValue: { x: 0, y: 0 },\n },\n );\n\n public hostOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left':\n return {\n x: -this.rawHandle.userOffsetX,\n y: -this.rawHandle.userOffsetY + this.hostPosition().y + this.hostSize().height / 2,\n };\n case 'right':\n return {\n x: -this.rawHandle.userOffsetX + this.parentNode.size().width,\n y: -this.rawHandle.userOffsetY + this.hostPosition().y + this.hostSize().height / 2,\n };\n case 'top':\n return {\n x: -this.rawHandle.userOffsetX + this.hostPosition().x + this.hostSize().width / 2,\n y: -this.rawHandle.userOffsetY,\n };\n case 'bottom':\n return {\n x: -this.rawHandle.userOffsetX + this.hostPosition().x + this.hostSize().width / 2,\n y: -this.rawHandle.userOffsetY + this.parentNode.size().height,\n };\n }\n });\n\n private sizeOffset = computed(() => {\n switch (this.rawHandle.position) {\n case 'left':\n return { x: -(this.size().width / 2), y: 0 };\n case 'right':\n return { x: this.size().width / 2, y: 0 };\n case 'top':\n return { x: 0, y: -(this.size().height / 2) };\n case 'bottom':\n return { x: 0, y: this.size().height / 2 };\n }\n });\n\n public hostReference = this.rawHandle.hostReference!;\n\n public template = this.rawHandle.template;\n\n public templateContext = {\n $implicit: {\n point: this.hostOffset,\n state: this.state,\n node: this.parentNode.rawNode,\n },\n };\n\n constructor(\n public rawHandle: NodeHandle,\n public parentNode: NodeModel,\n ) {}\n\n public updateHost() {\n this.updateHostSizeAndPosition$.next();\n }\n\n private getHostSize(): { width: number; height: number } {\n if (this.hostReference instanceof HTMLElement) {\n return {\n width: this.hostReference.offsetWidth,\n height: this.hostReference.offsetHeight,\n };\n } else if (this.hostReference instanceof SVGGraphicsElement) {\n return this.hostReference.getBBox();\n }\n\n return { width: 0, height: 0 };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injector,\n OnInit,\n TemplateRef,\n inject,\n input,\n runInInjectionContext,\n} 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 standalone: true,\n selector: 'handle',\n templateUrl: './handle.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HandleComponent implements OnInit {\n private injector = inject(Injector);\n private handleService = inject(HandleService);\n private element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private destroyRef = inject(DestroyRef);\n\n /**\n * At what side of node this component should be placed\n */\n public position = input.required<Position>();\n\n /**\n * Source or target\n */\n public type = input.required<'source' | 'target'>();\n\n /**\n * Should be used if node has more than one source/target\n */\n public id = input<string>();\n\n public template = input<TemplateRef<any> | null>();\n\n public offsetX = input<number>(0);\n public offsetY = input<number>(0);\n\n public ngOnInit() {\n runInInjectionContext(this.injector, () => {\n const node = this.handleService.node();\n\n if (node) {\n const model = new HandleModel(\n {\n position: this.position(),\n type: this.type(),\n id: this.id(),\n hostReference: this.element.parentElement!,\n template: this.template(),\n userOffsetX: this.offsetX(),\n userOffsetY: this.offsetY(),\n },\n node,\n );\n\n this.handleService.createHandle(model);\n\n requestAnimationFrame(() => model.updateHost());\n\n this.destroyRef.onDestroy(() => this.handleService.destroyHandle(model));\n }\n });\n }\n}\n","","import { DestroyRef, Directive, ElementRef, inject, NgZone, OnInit } from '@angular/core';\nimport { NodeAccessorService } from '../services/node-accessor.service';\nimport { map, switchMap, tap } from 'rxjs';\nimport { resizable } from '../utils/resizable';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n selector: '[nodeHandlesController]',\n standalone: true,\n})\nexport class NodeHandlesControllerDirective implements OnInit {\n private nodeAccessor = inject(NodeAccessorService);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private hostElementRef = inject<ElementRef<Element>>(ElementRef);\n\n public ngOnInit(): void {\n const model = this.nodeAccessor.model()!;\n\n model.handles$\n .pipe(\n switchMap((handles) =>\n resizable([...handles.map((h) => h.hostReference!), this.hostElementRef.nativeElement], this.zone).pipe(\n map(() => handles),\n ),\n ),\n tap((handles) => {\n // TODO (performance) inspect how to avoid calls of this when flow initially rendered\n handles.forEach((h) => h.updateHost());\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n}\n","import { DestroyRef, Directive, ElementRef, inject, NgZone, OnInit } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { NodeAccessorService } from '../services/node-accessor.service';\nimport { filter, merge, startWith, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n/**\n * Only suitable for HTML nodes\n */\n@Directive({\n selector: '[nodeResizeController]',\n standalone: true,\n})\nexport class NodeResizeControllerDirective implements OnInit {\n private nodeAccessor = inject(NodeAccessorService);\n private zone = inject(NgZone);\n private destroyRef = inject(DestroyRef);\n private hostElementRef = inject<ElementRef<Element>>(ElementRef);\n\n public ngOnInit(): void {\n const model = this.nodeAccessor.model()!;\n\n const host = this.hostElementRef.nativeElement;\n\n merge(resizable([host], this.zone))\n .pipe(\n startWith(null),\n filter(() => !model.resizing()),\n tap(() => {\n model.width.set(host.clientWidth);\n model.height.set(host.clientHeight);\n }),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n OnDestroy,\n OnInit,\n TemplateRef,\n computed,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { DraggableService } from '../../services/draggable.service';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { HandleService } from '../../services/handle.service';\nimport { HandleModel } from '../../models/handle.model';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { ConnectionControllerDirective } from '../../directives/connection-controller.directive';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { HandleSizeControllerDirective } from '../../directives/handle-size-controller.directive';\nimport { NgTemplateOutlet, NgComponentOutlet, AsyncPipe } from '@angular/common';\nimport { DefaultNodeComponent } from '../default-node/default-node.component';\nimport { PointerDirective } from '../../directives/pointer.directive';\n\n// TODO: fix loading of these by @defer (should work in Angular 18+)\n// public components that uses in default node (loaded by defer)\nimport { ResizableComponent } from '../../public-components/resizable/resizable.component';\nimport { HandleComponent } from '../../public-components/handle/handle.component';\nimport { NodeHandlesControllerDirective } from '../../directives/node-handles-controller.directive';\nimport { NodeResizeControllerDirective } from '../../directives/node-resize-controller.directive';\n\nexport type HandleState = 'valid' | 'invalid' | 'idle';\n\n@Component({\n standalone: true,\n selector: 'g[node]',\n templateUrl: './node.component.html',\n styleUrls: ['./node.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [HandleService, NodeAccessorService],\n host: {\n class: 'vflow-node',\n },\n imports: [\n PointerDirective,\n DefaultNodeComponent,\n HandleComponent,\n NgTemplateOutlet,\n NgComponentOutlet,\n ResizableComponent,\n HandleSizeControllerDirective,\n NodeHandlesControllerDirective,\n NodeResizeControllerDirective,\n AsyncPipe,\n ],\n})\nexport class NodeComponent implements OnInit, OnDestroy {\n protected injector = inject(Injector);\n private handleService = inject(HandleService);\n private draggableService = inject(DraggableService);\n private flowStatusService = inject(FlowStatusService);\n private nodeRenderingService = inject(NodeRenderingService);\n private flowSettingsService = inject(FlowSettingsService);\n private selectionService = inject(SelectionService);\n private hostRef = inject<ElementRef<SVGElement>>(ElementRef);\n private nodeAccessor = inject(NodeAccessorService);\n private overlaysService = inject(OverlaysService);\n\n // TODO remove dependency from this directive\n private connectionController = inject(ConnectionControllerDirective, { optional: true });\n\n public model = input.required<NodeModel>();\n\n public nodeTemplate = input<TemplateRef<any>>();\n\n public nodeSvgTemplate = input<TemplateRef<any>>();\n\n public groupNodeTemplate = input<TemplateRef<any>>();\n\n protected showMagnet = computed(\n () =>\n this.flowStatusService.status().state === 'connection-start' ||\n this.flowStatusService.status().state === 'connection-validation' ||\n this.flowStatusService.status().state === 'reconnection-start' ||\n this.flowStatusService.status().state === 'reconnection-validation',\n );\n\n protected toolbars = computed(() => this.overlaysService.nodeToolbarsMap().get(this.model()));\n\n public ngOnInit() {\n this.model().isVisible.set(true);\n\n this.nodeAccessor.model.set(this.model());\n this.handleService.node.set(this.model());\n\n effect(\n () => {\n if (this.model().draggable()) {\n this.draggableService.enable(this.hostRef.nativeElement, this.model());\n } else {\n this.draggableService.disable(this.hostRef.nativeElement);\n }\n },\n { injector: this.injector },\n );\n }\n\n public ngOnDestroy(): void {\n this.model().isVisible.set(false);\n\n this.draggableService.destroy(this.hostRef.nativeElement);\n }\n\n protected startConnection(event: Event, handle: HandleModel) {\n // ignore drag by stopping propagation\n event.stopPropagation();\n\n this.connectionController?.startConnection(handle);\n }\n\n protected validateConnection(handle: HandleModel) {\n this.connectionController?.validateConnection(handle);\n }\n\n protected resetValidateConnection(targetHandle: HandleModel) {\n this.connectionController?.resetValidateConnection(targetHandle);\n }\n\n protected endConnection() {\n this.connectionController?.endConnection();\n }\n\n protected pullNode() {\n if (this.flowSettingsService.elevateNodesOnSelect()) {\n this.nodeRenderingService.pullNode(this.model());\n }\n }\n\n protected selectNode() {\n if (this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(this.model());\n }\n }\n}\n","<!-- Default node -->\n@if (model().rawNode.type === 'default') {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode(); selectNode()\">\n <default-node\n nodeHandlesController\n [selected]=\"model().selected()\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\"\n [style.max-width]=\"model().styleWidth()\"\n [style.max-height]=\"model().styleHeight()\">\n <div [outerHTML]=\"model().text()\"></div>\n\n <handle type=\"source\" position=\"right\" />\n <handle type=\"target\" position=\"left\" />\n </default-node>\n </svg:foreignObject>\n}\n\n<!-- HTML Template node -->\n@if (model().rawNode.type === 'html-template' && nodeTemplate()) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n}\n\n<!-- SVG Template node -->\n@if (model().rawNode.type === 'svg-template' && nodeSvgTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"nodeSvgTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Component node -->\n@if (model().isComponentType) {\n @if (model().componentInstance$ | async; as component) {\n <svg:foreignObject\n class=\"selectable\"\n [attr.width]=\"model().foWidth()\"\n [attr.height]=\"model().foHeight()\"\n (click)=\"pullNode()\">\n <div\n nodeHandlesController\n nodeResizeController\n class=\"wrapper\"\n [style.width]=\"model().styleWidth()\"\n [style.height]=\"model().styleHeight()\">\n <ng-container\n [ngComponentOutlet]=\"$any(component)\"\n [ngComponentOutletInputs]=\"model().componentTypeInputs\"\n [ngComponentOutletInjector]=\"injector\" />\n </div>\n </svg:foreignObject>\n }\n}\n\n<!-- Default group node -->\n@if (model().rawNode.type === 'default-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [resizable]=\"model().resizable()\"\n [gap]=\"3\"\n [resizerColor]=\"model().color()\"\n [class.default-group-node_selected]=\"model().selected()\"\n [attr.width]=\"model().size().width\"\n [attr.height]=\"model().size().height\"\n [style.stroke]=\"model().color()\"\n [style.fill]=\"model().color()\"\n (click)=\"pullNode(); selectNode()\" />\n}\n\n<!-- Template group node -->\n@if (model().rawNode.type === 'template-group' && groupNodeTemplate()) {\n <svg:g class=\"selectable\" nodeHandlesController (click)=\"pullNode()\">\n <ng-container\n [ngTemplateOutlet]=\"groupNodeTemplate() ?? null\"\n [ngTemplateOutletContext]=\"model().context\"\n [ngTemplateOutletInjector]=\"injector\" />\n </svg:g>\n}\n\n<!-- Resizer -->\n@if (model().resizerTemplate(); as template) {\n @if (model().resizable()) {\n <ng-template [ngTemplateOutlet]=\"template\" />\n }\n}\n\n<!-- Handles -->\n@for (handle of model().handles(); track handle) {\n @if (handle.template === undefined) {\n <svg:circle\n class=\"default-handle\"\n r=\"5\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n [attr.stroke-width]=\"handle.strokeWidth\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\" />\n }\n\n @if (handle.template === null) {\n <svg:g\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\" />\n }\n\n @if (handle.template) {\n <svg:g\n [handleSizeController]=\"handle\"\n (pointerStart)=\"startConnection($event, handle)\"\n (pointerEnd)=\"endConnection()\">\n <ng-container *ngTemplateOutlet=\"handle.template; context: handle.templateContext\" />\n </svg:g>\n }\n\n @if (showMagnet()) {\n <svg:circle\n class=\"magnet\"\n [attr.r]=\"model().magnetRadius\"\n [attr.cx]=\"handle.hostOffset().x\"\n [attr.cy]=\"handle.hostOffset().y\"\n (pointerEnd)=\"endConnection(); resetValidateConnection(handle)\"\n (pointerOver)=\"validateConnection(handle)\"\n (pointerOut)=\"resetValidateConnection(handle)\" />\n }\n}\n\n<!-- Toolbar -->\n@for (toolbar of toolbars(); track toolbar) {\n <svg:foreignObject\n [attr.width]=\"toolbar.size().width\"\n [attr.height]=\"toolbar.size().height\"\n [attr.transform]=\"toolbar.transform()\">\n <ng-container [ngTemplateOutlet]=\"toolbar.template()\" />\n </svg:foreignObject>\n}\n","import { ChangeDetectionStrategy, Component, TemplateRef, computed, inject, input } 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';\nimport { smoothStepPath } from '../../math/edge-path/smooth-step-path';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ConnectionContext } from '../../interfaces/template-context.interface';\nimport { Point } from '../../interfaces/point.interface';\nimport { CurveFactoryParams } from '../../interfaces/curve-factory.interface';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\n\n@Component({\n standalone: true,\n selector: 'g[connection]',\n template: `\n @if (model().type === 'default') {\n @if (path(); as path) {\n <svg:path\n fill=\"none\"\n stroke-width=\"2\"\n [attr.d]=\"path\"\n [attr.marker-end]=\"markerUrl()\"\n [attr.stroke]=\"defaultColor\" />\n }\n }\n\n @if (model().type === 'template') {\n @if (template(); as template) {\n <ng-container *ngTemplateOutlet=\"template; context: getContext()\" />\n }\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n})\nexport class ConnectionComponent {\n private readonly flowStatusService = inject(FlowStatusService);\n private readonly spacePointContext = inject(SpacePointContextDirective);\n private readonly flowEntitiesService = inject(FlowEntitiesService);\n\n public model = input.required<ConnectionModel>();\n\n public template = input<TemplateRef<any>>();\n\n protected path = computed(() => {\n const status = this.flowStatusService.status();\n const curve = this.model().curve;\n\n if (status.state === 'connection-start' || status.state === 'reconnection-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 const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);\n\n switch (curve) {\n case 'straight':\n return straightPath(params).path;\n case 'bezier':\n return bezierPath(params).path;\n case 'smooth-step':\n return smoothStepPath(params).path;\n case 'step':\n return smoothStepPath(params, 0).path;\n default:\n return curve(params).path;\n }\n }\n\n if (status.state === 'connection-validation' || status.state === 'reconnection-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 const params = this.getPathFactoryParams(sourcePoint, targetPoint, sourcePosition, targetPosition);\n\n switch (curve) {\n case 'straight':\n return straightPath(params).path;\n case 'bezier':\n return bezierPath(params).path;\n case 'smooth-step':\n return smoothStepPath(params).path;\n case 'step':\n return smoothStepPath(params, 0).path;\n default:\n return curve(params).path;\n }\n }\n\n return null;\n });\n\n protected markerUrl = computed(() => {\n const marker = this.model().settings.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 // TODO: move context to model\n protected getContext(): ConnectionContext {\n return {\n $implicit: {\n path: this.path,\n marker: this.markerUrl,\n },\n };\n }\n\n private getPathFactoryParams(\n sourcePoint: Point,\n targetPoint: Point,\n sourcePosition: Position,\n targetPosition: Position,\n ): CurveFactoryParams {\n return {\n mode: 'connection',\n sourcePoint,\n targetPoint,\n sourcePosition,\n targetPosition,\n allEdges: this.flowEntitiesService.rawEdges(),\n allNodes: this.flowEntitiesService.rawNodes(),\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","export function id(): string {\n const randomLetter = String.fromCharCode(65 + Math.floor(Math.random() * 26));\n\n return randomLetter + Date.now();\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { id } from '../../utils/id';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { map, switchMap } from 'rxjs';\nimport { toLazySignal } from '../../utils/signals/to-lazy-signal';\n\nconst defaultBg = '#fff';\nconst defaultGap = 20;\nconst defaultDotSize = 2;\nconst defaultDotColor = 'rgb(177, 177, 183)';\nconst defaultImageScale = 0.1;\nconst defaultRepeated = true;\n\n@Component({\n standalone: true,\n selector: 'g[background]',\n templateUrl: './background.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BackgroundComponent {\n private viewportService = inject(ViewportService);\n private rootSvg = inject(RootSvgReferenceDirective).element;\n private settingsService = inject(FlowSettingsService);\n\n protected backgroundSignal = this.settingsService.background;\n\n // DOTS PATTERN\n protected scaledGap = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n const zoom = this.viewportService.readableViewport().zoom;\n\n return zoom * (background.gap ?? defaultGap);\n }\n\n return 0;\n });\n\n protected x = computed(() => this.viewportService.readableViewport().x % this.scaledGap());\n\n protected y = computed(() => this.viewportService.readableViewport().y % this.scaledGap());\n\n protected patternColor = computed(() => {\n const bg = this.backgroundSignal();\n\n if (bg.type === 'dots') {\n return bg.color ?? defaultDotColor;\n }\n\n return defaultDotColor;\n });\n\n protected patternSize = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n return (this.viewportService.readableViewport().zoom * (background.size ?? defaultDotSize)) / 2;\n }\n\n return 0;\n });\n\n // IMAGE PATTERN\n protected bgImageSrc = computed(() => {\n const background = this.backgroundSignal();\n\n return background.type === 'image' ? background.src : '';\n });\n\n protected imageSize = toLazySignal(\n toObservable(this.backgroundSignal).pipe(\n switchMap(() => createImage(this.bgImageSrc())),\n map((image) => ({ width: image.naturalWidth, height: image.naturalHeight })),\n ),\n { initialValue: { width: 0, height: 0 } },\n );\n\n protected scaledImageWidth = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;\n\n return this.imageSize().width * zoom * (background.scale ?? defaultImageScale);\n }\n\n return 0;\n });\n\n protected scaledImageHeight = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n const zoom = background.fixed ? 1 : this.viewportService.readableViewport().zoom;\n\n return this.imageSize().height * zoom * (background.scale ?? defaultImageScale);\n }\n\n return 0;\n });\n\n protected imageX = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n if (!background.repeat) {\n return background.fixed ? 0 : this.viewportService.readableViewport().x;\n }\n\n return background.fixed ? 0 : this.viewportService.readableViewport().x % this.scaledImageWidth();\n }\n\n return 0;\n });\n\n protected imageY = computed(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'image') {\n if (!background.repeat) {\n return background.fixed ? 0 : this.viewportService.readableViewport().y;\n }\n\n return background.fixed ? 0 : this.viewportService.readableViewport().y % this.scaledImageHeight();\n }\n\n return 0;\n });\n\n protected repeated = computed(() => {\n const background = this.backgroundSignal();\n\n return background.type === 'image' && (background.repeat ?? defaultRepeated);\n });\n\n // Without ID there will be pattern collision for several flows on the page\n // Later pattern ID may be exposed to API\n protected patternId = id();\n protected patternUrl = `url(#${this.patternId})`;\n\n constructor() {\n effect(() => {\n const background = this.backgroundSignal();\n\n if (background.type === 'dots') {\n this.rootSvg.style.backgroundColor = background.backgroundColor ?? defaultBg;\n }\n\n if (background.type === 'solid') {\n this.rootSvg.style.backgroundColor = background.color;\n }\n });\n }\n}\n\nfunction createImage(url: string) {\n const image = new Image();\n\n image.src = url;\n\n return new Promise<HTMLImageElement>((resolve) => {\n image.onload = () => resolve(image);\n });\n}\n","@if (backgroundSignal().type === 'dots') {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"x()\"\n [attr.y]=\"y()\"\n [attr.width]=\"scaledGap()\"\n [attr.height]=\"scaledGap()\">\n <svg:circle\n [attr.cx]=\"patternSize()\"\n [attr.cy]=\"patternSize()\"\n [attr.r]=\"patternSize()\"\n [attr.fill]=\"patternColor()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n}\n\n@if (backgroundSignal().type === 'image') {\n @if (repeated()) {\n <svg:pattern\n patternUnits=\"userSpaceOnUse\"\n [attr.id]=\"patternId\"\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\">\n <svg:image [attr.href]=\"bgImageSrc()\" [attr.width]=\"scaledImageWidth()\" [attr.height]=\"scaledImageHeight()\" />\n </svg:pattern>\n\n <svg:rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" [attr.fill]=\"patternUrl\" />\n }\n\n @if (!repeated()) {\n <svg:image\n [attr.x]=\"imageX()\"\n [attr.y]=\"imageY()\"\n [attr.width]=\"scaledImageWidth()\"\n [attr.height]=\"scaledImageHeight()\"\n [attr.href]=\"bgImageSrc()\" />\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Marker } from '../../interfaces/marker.interface';\nimport { KeyValuePipe } from '@angular/common';\n\n@Component({\n standalone: true,\n selector: 'defs[flowDefs]',\n templateUrl: './defs.component.html',\n styleUrls: ['./defs.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KeyValuePipe],\n})\nexport class DefsComponent {\n public markers = input.required<Map<number, Marker>>();\n\n protected readonly defaultColor = 'rgb(177, 177, 183)';\n}\n","@for (marker of markers() | keyvalue; track marker) {\n <svg:marker\n viewBox=\"-10 -10 20 20\"\n refX=\"0\"\n refY=\"0\"\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 [attr.markerUnits]=\"marker.value.markerUnits ?? 'userSpaceOnUse'\">\n @if (marker.value.type === 'arrow-closed' || !marker.value.type) {\n <polyline\n class=\"marker__arrow_closed\"\n points=\"-5,-4 1,0 -5,4 -5,-4\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\"\n [style.fill]=\"marker.value.color ?? defaultColor\" />\n }\n\n @if (marker.value.type === 'arrow') {\n <polyline\n class=\"marker__arrow_default\"\n points=\"-5,-4 0,0 -5,4\"\n [style.stroke]=\"marker.value.color ?? defaultColor\"\n [style.stroke-width]=\"marker.value.strokeWidth ?? 2\" />\n }\n </svg:marker>\n}\n","import { Directive, ElementRef, NgZone, Signal, computed, inject } from '@angular/core';\nimport { resizable } from '../utils/resizable';\nimport { tap } from 'rxjs';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: 'svg[flowSizeController]',\n host: {\n '[attr.width]': 'flowWidth()',\n '[attr.height]': 'flowHeight()',\n },\n})\nexport class FlowSizeControllerDirective {\n private host = inject<ElementRef<SVGSVGElement>>(ElementRef);\n private flowSettingsService = inject(FlowSettingsService);\n\n public flowWidth: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view();\n\n return view === 'auto' ? '100%' : view[0];\n });\n\n public flowHeight: Signal<string | number> = computed(() => {\n const view = this.flowSettingsService.view();\n\n return view === 'auto' ? '100%' : view[1];\n });\n\n constructor() {\n resizable([this.host.nativeElement], inject(NgZone))\n .pipe(\n tap(([entry]) => {\n this.flowSettingsService.computedFlowWidth.set(entry.contentRect.width);\n this.flowSettingsService.computedFlowHeight.set(entry.contentRect.height);\n }),\n takeUntilDestroyed(),\n )\n .subscribe();\n }\n}\n","import { Directive, HostListener, inject } from '@angular/core';\nimport { FlowStatusService } from '../services/flow-status.service';\n\n// TODO: too general purpose nane\n@Directive({\n standalone: true,\n selector: 'svg[rootSvgContext]',\n})\nexport class RootSvgContextDirective {\n private flowStatusService = inject(FlowStatusService);\n\n // TODO: check for multiple instances on page\n @HostListener('document:mouseup')\n @HostListener('document:touchend')\n @HostListener('contextmenu')\n protected resetConnection() {\n const status = this.flowStatusService.status();\n\n if (status.state === 'connection-start' || status.state === 'reconnection-start') {\n this.flowStatusService.setIdleStatus();\n }\n }\n}\n","import { SpacePoint, Point } from '../interfaces/point.interface';\nimport { NodeModel } from '../models/node.model';\n\n/**\n * @todo handle regular nodes\n *\n * @param point global point in flow coordinates\n * @param groups sorted array of groups\n * @returns\n */\nexport function getSpacePoints(point: Point, groups: NodeModel[]): SpacePoint[] {\n const result: SpacePoint[] = [];\n\n for (const group of groups) {\n const { x, y } = group.globalPoint();\n\n if (point.x >= x && point.x <= x + group.width() && point.y >= y && point.y <= y + group.height()) {\n result.push({\n x: point.x - x,\n y: point.y - y,\n spaceNodeId: group.rawNode.id,\n });\n }\n }\n\n result.reverse();\n\n // TODO: spread does not work, because the point is SVGPoint\n result.push({ spaceNodeId: null, x: point.x, y: point.y });\n\n return result;\n}\n","import { Injectable } from '@angular/core';\nimport { NodeModel } from '../models/node.model';\n\n@Injectable()\nexport abstract class PreviewFlowRenderStrategyService {\n public abstract shouldRenderNode(node: NodeModel): boolean;\n}\n\n@Injectable()\nexport class ViewportPreviewFlowRenderStrategyService extends PreviewFlowRenderStrategyService {\n public shouldRenderNode(node: NodeModel): boolean {\n // Do not render preview node if the real node is visible\n return !node.isVisible();\n }\n}\n","import { NodeModel } from '../../models/node.model';\n\nexport function drawNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n if (Object.keys(node.preview().style).length) {\n drawStyledNode(ctx, node);\n return;\n }\n\n if (node.rawNode.type === 'default') {\n drawDefaultNode(ctx, node);\n return;\n }\n\n if (node.rawNode.type === 'default-group') {\n drawDefaultGroupNode(ctx, node);\n return;\n }\n\n drawUnknownNode(ctx, node);\n}\n\nfunction drawDefaultNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n borderRadius(ctx, node, 5);\n\n // Draw background (background-color: white)\n ctx.fillStyle = 'white';\n ctx.fill();\n\n // Draw border (border: 1.5px solid #1b262c)\n ctx.strokeStyle = '#1b262c';\n ctx.lineWidth = 1.5;\n ctx.stroke();\n\n // Draw centered text (color: black, justify-content: center)\n ctx.fillStyle = 'black';\n // TODO: use as in default node\n ctx.font = '14px Arial';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n const centerX = point.x + width / 2;\n const centerY = point.y + height / 2;\n ctx.fillText(node.text(), centerX, centerY);\n}\n\nfunction drawDefaultGroupNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n ctx.globalAlpha = 0.05;\n ctx.fillStyle = node.color();\n ctx.fillRect(point.x, point.y, width, height);\n ctx.globalAlpha = 1;\n\n ctx.strokeStyle = node.color();\n ctx.lineWidth = 1.5;\n ctx.strokeRect(point.x, point.y, width, height);\n}\n\nfunction drawStyledNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n const style = node.preview().style;\n\n if (style.borderRadius) {\n const radius = parseFloat(style.borderRadius);\n borderRadius(ctx, node, radius);\n } else {\n ctx.beginPath();\n ctx.rect(point.x, point.y, width, height);\n ctx.closePath();\n }\n\n if (style.backgroundColor) {\n ctx.fillStyle = style.backgroundColor;\n }\n\n if (style.borderColor) {\n ctx.strokeStyle = style.borderColor;\n }\n\n if (style.borderWidth) {\n ctx.lineWidth = parseFloat(style.borderWidth);\n }\n\n ctx.fill();\n ctx.stroke();\n}\n\nfunction drawUnknownNode(ctx: CanvasRenderingContext2D, node: NodeModel) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n ctx.fillStyle = 'rgb(0 0 0 / 10%)';\n ctx.fillRect(point.x, point.y, width, height);\n}\n\nfunction borderRadius(ctx: CanvasRenderingContext2D, node: NodeModel, radius: number) {\n const point = node.globalPoint();\n const width = node.width();\n const height = node.height();\n\n // Create rounded rectangle path\n ctx.beginPath();\n ctx.moveTo(point.x + radius, point.y);\n ctx.lineTo(point.x + width - radius, point.y);\n ctx.quadraticCurveTo(point.x + width, point.y, point.x + width, point.y + radius);\n ctx.lineTo(point.x + width, point.y + height - radius);\n ctx.quadraticCurveTo(point.x + width, point.y + height, point.x + width - radius, point.y + height);\n ctx.lineTo(point.x + radius, point.y + height);\n ctx.quadraticCurveTo(point.x, point.y + height, point.x, point.y + height - radius);\n ctx.lineTo(point.x, point.y + radius);\n ctx.quadraticCurveTo(point.x, point.y, point.x + radius, point.y);\n ctx.closePath();\n}\n","import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, input, Renderer2 } from '@angular/core';\nimport { ViewportService } from '../../services/viewport.service';\nimport { PreviewFlowRenderStrategyService } from '../../services/preview-flow-render-strategy.service';\nimport { drawNode } from './draw-node';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\n\n@Component({\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'canvas[previewFlow]',\n template: '',\n})\nexport class PreviewFlowComponent {\n private viewportService = inject(ViewportService);\n private renderStrategy = inject(PreviewFlowRenderStrategyService);\n private nodeRenderingService = inject(NodeRenderingService);\n private renderer2 = inject(Renderer2);\n\n private element = inject<ElementRef<HTMLCanvasElement>>(ElementRef).nativeElement;\n private ctx = this.element.getContext('2d')!;\n\n readonly width = input<number>(0);\n readonly height = input<number>(0);\n\n private readonly dpr = window.devicePixelRatio;\n\n constructor() {\n effect(() => {\n // Set the \"actual\" size of the canvas\n this.renderer2.setProperty(this.element, 'width', this.width() * this.dpr);\n this.renderer2.setProperty(this.element, 'height', this.height() * this.dpr);\n\n // Set the \"drawn\" size of the canvas\n this.renderer2.setStyle(this.element, 'width', `${this.width()}px`);\n this.renderer2.setStyle(this.element, 'height', `${this.height()}px`);\n\n // Scale the context to match device pixel ratio\n this.ctx.scale(this.dpr, this.dpr);\n });\n\n effect(() => {\n const viewport = this.viewportService.readableViewport();\n\n this.ctx.clearRect(0, 0, this.width(), this.height());\n\n // Save the current context state\n this.ctx.save();\n\n // Apply viewport transformations (zoom and pan)\n this.ctx.setTransform(\n viewport.zoom * this.dpr, // horizontal scaling with DPR\n 0, // horizontal skewing\n 0, // vertical skewing\n viewport.zoom * this.dpr, // vertical scaling with DPR\n viewport.x * this.dpr, // horizontal translation with DPR\n viewport.y * this.dpr, // vertical translation with DPR\n );\n\n for (let i = 0; i < this.nodeRenderingService.viewportNodes().length; i++) {\n const node = this.nodeRenderingService.viewportNodes()[i];\n\n if (this.renderStrategy.shouldRenderNode(node)) {\n drawNode(this.ctx, node);\n }\n }\n\n // Restore the context state\n this.ctx.restore();\n });\n }\n}\n","import { inject, Injectable, NgZone, signal } from '@angular/core';\nimport { NodeRenderingService } from './node-rendering.service';\nimport { EdgeRenderingService } from './edge-rendering.service';\nimport { FlowSettingsService } from './flow-settings.service';\nimport { FlowEntitiesService } from './flow-entities.service';\n\n@Injectable()\nexport class FlowRenderingService {\n private readonly nodeRenderingService = inject(NodeRenderingService);\n private readonly edgeRenderingService = inject(EdgeRenderingService);\n private readonly flowEntitiesService = inject(FlowEntitiesService);\n private readonly settingsService = inject(FlowSettingsService);\n\n public flowInitialized = signal(false);\n\n constructor() {\n inject(NgZone).runOutsideAngular(async () => {\n await skipFrames(2);\n\n this.flowInitialized.set(true);\n });\n }\n}\n\n// TODO may break on edge cases\nfunction skipFrames(count: number): Promise<void> {\n return new Promise((resolve) => {\n let frames = 0;\n\n function checkFrame() {\n frames++;\n\n if (frames < count) {\n requestAnimationFrame(checkFrame);\n } else {\n resolve();\n }\n }\n\n requestAnimationFrame(checkFrame);\n });\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Injector,\n Input,\n inject,\n runInInjectionContext,\n contentChild,\n viewChild,\n} from '@angular/core';\nimport { DynamicNode, 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, outputFromObservable } from '@angular/core/rxjs-interop';\nimport { Edge } from '../../interfaces/edge.interface';\nimport { EdgeModel } from '../../models/edge.model';\nimport {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n} from '../../directives/template.directive';\nimport { addNodesToEdges } from '../../utils/add-nodes-to-edges';\nimport { skip } from 'rxjs';\nimport { SpacePoint, Point } from '../../interfaces/point.interface';\nimport { ViewportState } from '../../interfaces/viewport.interface';\nimport { FlowStatusService } from '../../services/flow-status.service';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { ConnectionSettings } from '../../interfaces/connection-settings.interface';\nimport { ConnectionModel } from '../../models/connection.model';\nimport { ReferenceIdentityChecker } from '../../utils/identity-checker/reference-identity-checker';\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';\nimport { NodeRenderingService } from '../../services/node-rendering.service';\nimport { SelectionService } from '../../services/selection.service';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { ComponentEventBusService } from '../../services/component-event-bus.service';\nimport { Background } from '../../types/background.type';\nimport { SpacePointContextDirective } from '../../directives/space-point-context.directive';\nimport { FitViewOptions } from '../../interfaces/fit-view-options.interface';\nimport { Optimization } from '../../interfaces/optimization.interface';\nimport { KeyboardShortcuts } from '../../types/keyboard-action.type';\nimport { KeyboardService } from '../../services/keyboard.service';\nimport { transformBackground } from '../../utils/transform-background';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { EdgeComponent } from '../edge/edge.component';\nimport { NodeComponent } from '../node/node.component';\nimport { ConnectionComponent } from '../connection/connection.component';\nimport { BackgroundComponent } from '../background/background.component';\nimport { DefsComponent } from '../defs/defs.component';\nimport { FlowSizeControllerDirective } from '../../directives/flow-size-controller.directive';\nimport { RootPointerDirective } from '../../directives/root-pointer.directive';\nimport { RootSvgContextDirective } from '../../directives/root-svg-context.directive';\nimport { RootSvgReferenceDirective } from '../../directives/reference.directive';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\nimport { getSpacePoints } from '../../utils/get-space-points';\nimport { getIntesectingNodes } from '../../utils/nodes';\nimport { IntersectingNodesOptions } from '../../interfaces/intersecting-nodes-options.interface';\nimport { PreviewFlowComponent } from '../preview-flow/preview-flow.component';\nimport {\n PreviewFlowRenderStrategyService,\n ViewportPreviewFlowRenderStrategyService,\n} from '../../services/preview-flow-render-strategy.service';\nimport { toLazySignal } from '../../utils/signals/to-lazy-signal';\nimport { FlowRenderingService } from '../../services/flow-rendering.service';\n\nconst changesControllerHostDirective = {\n directive: ChangesControllerDirective,\n outputs: [\n 'onNodesChange',\n 'onNodesChange.position',\n 'onNodesChange.position.single',\n 'onNodesChange.position.many',\n 'onNodesChange.size',\n 'onNodesChange.size.single',\n 'onNodesChange.size.many',\n 'onNodesChange.add',\n 'onNodesChange.add.single',\n 'onNodesChange.add.many',\n 'onNodesChange.remove',\n 'onNodesChange.remove.single',\n 'onNodesChange.remove.many',\n 'onNodesChange.select',\n 'onNodesChange.select.single',\n 'onNodesChange.select.many',\n 'onEdgesChange',\n 'onEdgesChange.detached',\n 'onEdgesChange.detached.single',\n 'onEdgesChange.detached.many',\n 'onEdgesChange.add',\n 'onEdgesChange.add.single',\n 'onEdgesChange.add.many',\n 'onEdgesChange.remove',\n 'onEdgesChange.remove.single',\n 'onEdgesChange.remove.many',\n 'onEdgesChange.select',\n 'onEdgesChange.select.single',\n 'onEdgesChange.select.many',\n ],\n};\n\n@Component({\n standalone: true,\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 NodeRenderingService,\n EdgeRenderingService,\n SelectionService,\n FlowSettingsService,\n ComponentEventBusService,\n KeyboardService,\n OverlaysService,\n { provide: PreviewFlowRenderStrategyService, useClass: ViewportPreviewFlowRenderStrategyService },\n FlowRenderingService,\n ],\n hostDirectives: [changesControllerHostDirective],\n imports: [\n RootSvgReferenceDirective,\n RootSvgContextDirective,\n RootPointerDirective,\n FlowSizeControllerDirective,\n DefsComponent,\n BackgroundComponent,\n MapContextDirective,\n SpacePointContextDirective,\n ConnectionComponent,\n NodeComponent,\n EdgeComponent,\n NgTemplateOutlet,\n PreviewFlowComponent,\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 nodeRenderingService = inject(NodeRenderingService);\n private edgeRenderingService = inject(EdgeRenderingService);\n private flowSettingsService = inject(FlowSettingsService);\n private componentEventBusService = inject(ComponentEventBusService);\n private keyboardService = inject(KeyboardService);\n private injector = inject(Injector);\n private flowRenderingService = inject(FlowRenderingService);\n\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.flowSettingsService.view.set(view);\n }\n\n /**\n * Minimum zoom value\n */\n @Input()\n public set minZoom(value: number) {\n this.flowSettingsService.minZoom.set(value);\n }\n\n /**\n * Maximum zoom value\n */\n @Input()\n public set maxZoom(value: number) {\n this.flowSettingsService.maxZoom.set(value);\n }\n\n /**\n * Background for flow\n */\n @Input()\n public set background(value: Background | string) {\n this.flowSettingsService.background.set(transformBackground(value));\n }\n\n @Input()\n public set optimization(newOptimization: Optimization) {\n this.flowSettingsService.optimization.update((optimization) => ({\n ...optimization,\n ...newOptimization,\n }));\n }\n\n /**\n * Global rule if you can or can't select entities\n */\n @Input()\n public set entitiesSelectable(value: boolean) {\n this.flowSettingsService.entitiesSelectable.set(value);\n }\n\n @Input()\n public set keyboardShortcuts(value: KeyboardShortcuts) {\n this.keyboardService.setShortcuts(value);\n }\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({\n transform: (settings: ConnectionSettings) => new ConnectionModel(settings),\n })\n public set connection(connection: ConnectionModel) {\n this.flowEntitiesService.connection.set(connection);\n }\n\n public get connection() {\n return this.flowEntitiesService.connection();\n }\n\n /**\n * Snap grid for node movement. Passes as [x, y]\n */\n @Input()\n public set snapGrid(value: [number, number]) {\n this.flowSettingsService.snapGrid.set(value);\n }\n\n /**\n * Raizing z-index for selected node\n */\n @Input()\n public set elevateNodesOnSelect(value: boolean) {\n this.flowSettingsService.elevateNodesOnSelect.set(value);\n }\n\n /**\n * Raizing z-index for selected edge\n */\n @Input()\n public set elevateEdgesOnSelect(value: boolean) {\n this.flowSettingsService.elevateEdgesOnSelect.set(value);\n }\n // #endregion\n\n // #region MAIN_INPUTS\n /**\n * Nodes to render\n */\n @Input({ required: true })\n public set nodes(newNodes: Node[] | DynamicNode[]) {\n const models = runInInjectionContext(this.injector, () =>\n ReferenceIdentityChecker.nodes(newNodes, this.flowEntitiesService.nodes()),\n );\n\n // TODO: consider calling only fo new nodes\n // quick and dirty binding nodes to edges\n addNodesToEdges(models, this.flowEntitiesService.edges());\n\n this.flowEntitiesService.nodes.set(models);\n\n models.forEach((model) => this.nodeRenderingService.pullNode(model));\n }\n\n protected nodeModels = this.nodeRenderingService.nodes;\n protected groups = this.nodeRenderingService.groups;\n protected nonGroups = this.nodeRenderingService.nonGroups;\n\n /**\n * Edges to render\n */\n @Input()\n public set edges(newEdges: Edge[]) {\n const newModels = runInInjectionContext(this.injector, () =>\n ReferenceIdentityChecker.edges(newEdges, this.flowEntitiesService.edges()),\n );\n\n // quick and dirty binding nodes to edges\n addNodesToEdges(this.flowEntitiesService.nodes(), newModels);\n\n this.flowEntitiesService.edges.set(newModels);\n }\n\n protected edgeModels = this.edgeRenderingService.edges;\n // #endregion\n\n // #region OUTPUTS\n /**\n * Event that accumulates all custom node events\n *\n * @experimental\n */\n public readonly onComponentNodeEvent = outputFromObservable<any>(this.componentEventBusService.event$); // TODO: research how to remove any\n // #endregion\n\n // #region TEMPLATES\n protected nodeTemplateDirective = contentChild(NodeHtmlTemplateDirective);\n\n protected nodeSvgTemplateDirective = contentChild(NodeSvgTemplateDirective);\n\n protected groupNodeTemplateDirective = contentChild(GroupNodeTemplateDirective);\n\n protected edgeTemplateDirective = contentChild(EdgeTemplateDirective);\n\n protected edgeLabelHtmlDirective = contentChild(EdgeLabelHtmlTemplateDirective);\n\n protected connectionTemplateDirective = contentChild(ConnectionTemplateDirective);\n // #endregion\n\n // #region DIRECTIVES\n protected mapContext = viewChild(MapContextDirective);\n\n protected spacePointContext = viewChild.required(SpacePointContextDirective);\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 = toLazySignal(this.nodesChangeService.changes$, {\n initialValue: [] as NodeChange[],\n });\n\n /**\n * Signal to reading edges change\n */\n public readonly edgesChange = toLazySignal(this.edgesChangeService.changes$, {\n initialValue: [] as EdgeChange[],\n });\n\n public readonly initialized = this.flowRenderingService.flowInitialized.asReadonly();\n // #endregion\n\n // #region RX_API\n /**\n * Observable with viewport change\n */\n public readonly viewportChange$ = toObservable(this.viewportService.readableViewport).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 edges change\n */\n public readonly edgesChange$ = this.edgesChangeService.changes$;\n\n public readonly initialized$ = toObservable(this.flowRenderingService.flowInitialized);\n // #endregion\n\n protected markers = this.flowEntitiesService.markers;\n protected minimap = this.flowEntitiesService.minimap;\n\n protected flowOptimization = this.flowSettingsService.optimization;\n protected flowWidth = this.flowSettingsService.computedFlowWidth;\n protected flowHeight = this.flowSettingsService.computedFlowHeight;\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({\n changeType: 'absolute',\n state: viewport,\n duration: 0,\n });\n }\n\n /**\n * Change zoom\n *\n * @param zoom zoom value\n */\n public zoomTo(zoom: number): void {\n this.viewportService.writableViewport.set({\n changeType: 'absolute',\n state: { zoom },\n duration: 0,\n });\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({\n changeType: 'absolute',\n state: point,\n duration: 0,\n });\n }\n\n public fitView(options?: FitViewOptions) {\n this.viewportService.fitView(options);\n }\n\n /**\n * Get node by id\n *\n * @param id node id\n */\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.flowEntitiesService.getNode<T>(id)?.rawNode;\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\n /**\n * Convert point received from document to point on the flow\n */\n public documentPointToFlowPoint(point: Point): Point;\n public documentPointToFlowPoint(point: Point, options?: { spaces: false }): Point;\n /**\n * Convert point received from document to a stack of space points on the flow\n * Space point has a spaceNodeId, coordinates are relative to this node\n */\n public documentPointToFlowPoint(point: Point, options?: { spaces: true }): SpacePoint[];\n public documentPointToFlowPoint(point: Point, options?: { spaces: boolean }): unknown {\n const transformedPoint = this.spacePointContext().documentPointToFlowPoint(point);\n\n if (options?.spaces) {\n return getSpacePoints(transformedPoint, this.nodeRenderingService.groups());\n }\n\n return transformedPoint;\n }\n\n /**\n * Gets nodes that intersect with the specified node\n *\n * @template T - The type of data associated with the nodes\n * @param nodeId - The ID of the node to check intersections for\n * @param options.partially - If true, returns nodes that partially intersect. If false, only returns fully intersecting nodes\n * @returns An array of nodes that intersect with the specified node\n */\n public getIntesectingNodes<T>(\n nodeId: string,\n options: IntersectingNodesOptions = { partially: true },\n ): Node<T>[] | DynamicNode<T>[] {\n return getIntesectingNodes(nodeId, this.nodeModels(), options).map((n) => n.rawNode) as\n | Node<T>[]\n | DynamicNode<T>[];\n }\n\n /**\n * Converts a node's position to the coordinate space of another node\n *\n * @param nodeId - The ID of the node whose position should be converted\n * @param spaceNodeId - The ID of the node that defines the target coordinate space.\n * If null, returns the position in global coordinates\n * @returns {Point} The converted position. Returns {x: Infinity, y: Infinity} if either node is not found\n */\n public toNodeSpace(nodeId: string, spaceNodeId: string | null): Point {\n const node = this.nodeModels().find((n) => n.rawNode.id === nodeId);\n\n if (!node) return { x: Infinity, y: Infinity };\n\n if (spaceNodeId === null) {\n return node.globalPoint();\n }\n\n const coordinateSpaceNode = this.nodeModels().find((n) => n.rawNode.id === spaceNodeId);\n\n if (!coordinateSpaceNode) return { x: Infinity, y: Infinity };\n\n return getSpacePoints(node.globalPoint(), [coordinateSpaceNode])[0];\n }\n // #endregion\n\n protected trackNodes(idx: number, { rawNode: node }: NodeModel) {\n return node;\n }\n\n protected trackEdges(idx: number, { edge }: EdgeModel) {\n return edge;\n }\n}\n","<svg:svg #flow rootSvgRef rootSvgContext rootPointer flowSizeController class=\"root-svg\">\n <defs flowDefs [markers]=\"markers()\" />\n\n <g background />\n\n <svg:g mapContext spacePointContext>\n <!-- Connection -->\n <svg:g connection [model]=\"connection\" [template]=\"connectionTemplateDirective()?.templateRef\" />\n\n @if (flowOptimization().detachedGroupsLayer) {\n <!-- Groups -->\n @for (model of groups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n <!-- Nodes -->\n @for (model of nonGroups(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n\n @if (!flowOptimization().detachedGroupsLayer) {\n <!-- Edges -->\n @for (model of edgeModels(); track trackEdges($index, model)) {\n <svg:g\n edge\n [model]=\"model\"\n [edgeTemplate]=\"edgeTemplateDirective()?.templateRef\"\n [edgeLabelHtmlTemplate]=\"edgeLabelHtmlDirective()?.templateRef\" />\n }\n\n @for (model of nodeModels(); track trackNodes($index, model)) {\n <svg:g\n node\n [model]=\"model\"\n [nodeTemplate]=\"nodeTemplateDirective()?.templateRef\"\n [nodeSvgTemplate]=\"nodeSvgTemplateDirective()?.templateRef\"\n [groupNodeTemplate]=\"groupNodeTemplateDirective()?.templateRef\"\n [attr.transform]=\"model.pointTransform()\" />\n }\n }\n </svg:g>\n\n <!-- Minimap -->\n @if (minimap(); as minimap) {\n <ng-container [ngTemplateOutlet]=\"minimap.template()\" />\n }\n</svg:svg>\n\n@if (flowOptimization().virtualization) {\n <canvas previewFlow class=\"preview-flow\" [width]=\"flowWidth()\" [height]=\"flowHeight()\"></canvas>\n}\n","import { DestroyRef, Directive, inject } from '@angular/core';\nimport { NodeAccessorService } from '../services/node-accessor.service';\n\n@Directive({\n standalone: true,\n selector: '[dragHandle]',\n host: {\n class: 'vflow-drag-handle',\n },\n})\nexport class DragHandleDirective {\n private nodeAccessor = inject(NodeAccessorService);\n\n private get model() {\n return this.nodeAccessor.model()!;\n }\n\n constructor() {\n this.model.dragHandlesCount.update((count) => count + 1);\n\n inject(DestroyRef).onDestroy(() => {\n this.model.dragHandlesCount.update((count) => count - 1);\n });\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\nimport { SelectionService } from '../services/selection.service';\nimport { EdgeComponent } from '../components/edge/edge.component';\n\nimport { FlowEntity } from '../interfaces/flow-entity.interface';\nimport { NodeComponent } from '../components/node/node.component';\nimport { FlowSettingsService } from '../services/flow-settings.service';\nimport { fromEvent, tap } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Directive({\n standalone: true,\n selector: '[selectable]',\n})\nexport class SelectableDirective {\n private flowSettingsService = inject(FlowSettingsService);\n private selectionService = inject(SelectionService);\n private parentEdge = inject(EdgeComponent, { optional: true });\n private parentNode = inject(NodeComponent, { optional: true });\n\n private host = inject<ElementRef<Element>>(ElementRef);\n\n protected selectOnEvent = this.getEvent$()\n .pipe(\n tap(() => this.select()),\n takeUntilDestroyed(),\n )\n .subscribe();\n\n private select() {\n const entity = this.entity();\n if (entity && this.flowSettingsService.entitiesSelectable()) {\n this.selectionService.select(entity);\n }\n }\n\n private entity(): FlowEntity | null {\n if (this.parentNode) {\n return this.parentNode.model();\n } else if (this.parentEdge) {\n return this.parentEdge.model();\n }\n\n return null;\n }\n\n private getEvent$() {\n return fromEvent(this.host.nativeElement, 'click');\n }\n}\n","import { signal, TemplateRef } from '@angular/core';\n\nexport class MinimapModel {\n public template = signal<TemplateRef<unknown> | null>(null);\n}\n","import {\n Component,\n computed,\n inject,\n Injector,\n OnInit,\n signal,\n TemplateRef,\n input,\n viewChild,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { FlowEntitiesService } from '../../services/flow-entities.service';\nimport { MinimapModel } from '../../models/minimap.model';\nimport { NodeModel } from '../../models/node.model';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { getViewportForBounds } from '../../utils/viewport';\nimport { getNodesBounds } from '../../utils/nodes';\nimport { ViewportService } from '../../services/viewport.service';\nimport { DefaultNodeComponent } from '../../components/default-node/default-node.component';\n\nexport type MiniMapPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n@Component({\n standalone: true,\n selector: 'mini-map',\n templateUrl: './minimap.component.html',\n styleUrls: [`./minimap.component.scss`],\n imports: [DefaultNodeComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MiniMapComponent implements OnInit {\n protected entitiesService = inject(FlowEntitiesService);\n protected flowSettingsService = inject(FlowSettingsService);\n protected viewportService = inject(ViewportService);\n protected injector = inject(Injector);\n\n /**\n * The color outside the viewport (invisible area)\n */\n public maskColor = input(`rgba(215, 215, 215, 0.6)`);\n\n /**\n * The minimap stroke color\n */\n public strokeColor = input(`rgb(200, 200, 200)`);\n\n /**\n * The corner of the flow where to render a mini-map\n */\n public position = input<MiniMapPosition>('bottom-right');\n\n /**\n * Make a minimap bigger on hover\n */\n public scaleOnHover = input(false);\n\n private minimap = viewChild.required<TemplateRef<unknown>>('minimap');\n\n private readonly minimapOffset = 10;\n\n private readonly minimapScale = computed(() => {\n if (this.scaleOnHover()) {\n return this.hovered() ? 0.4 : 0.2;\n }\n\n return 0.2;\n });\n\n protected viewportColor = computed(() => {\n const bg = this.flowSettingsService.background();\n\n if (bg.type === 'dots' || bg.type === 'solid') {\n return bg.color ?? '#fff';\n }\n\n return '#fff';\n });\n\n protected hovered = signal(false);\n\n protected minimapPoint = computed(() => {\n switch (this.position()) {\n case 'top-left':\n return { x: this.minimapOffset, y: this.minimapOffset };\n case 'top-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.minimapOffset,\n };\n case 'bottom-left':\n return {\n x: this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset,\n };\n case 'bottom-right':\n return {\n x: this.flowSettingsService.computedFlowWidth() - this.minimapWidth() - this.minimapOffset,\n y: this.flowSettingsService.computedFlowHeight() - this.minimapHeight() - this.minimapOffset,\n };\n }\n });\n\n protected minimapWidth = computed(() => this.flowSettingsService.computedFlowWidth() * this.minimapScale());\n protected minimapHeight = computed(() => this.flowSettingsService.computedFlowHeight() * this.minimapScale());\n\n protected viewportTransform = computed(() => {\n const viewport = this.viewportService.readableViewport();\n let scale = 1 / viewport.zoom;\n\n let x = -(viewport.x * this.minimapScale()) * scale;\n x /= this.minimapScale();\n\n let y = -(viewport.y * this.minimapScale()) * scale;\n y /= this.minimapScale();\n\n scale /= this.minimapScale();\n\n return `translate(${x}, ${y}) scale(${scale})`;\n });\n\n protected boundsViewport = computed(() => {\n const nodes = this.entitiesService.nodes();\n\n return getViewportForBounds(\n getNodesBounds(nodes),\n this.flowSettingsService.computedFlowWidth(),\n this.flowSettingsService.computedFlowHeight(),\n -Infinity,\n 1.5,\n 0,\n );\n });\n\n protected minimapTransform = computed(() => {\n const vport = this.boundsViewport();\n\n const x = vport.x * this.minimapScale();\n const y = vport.y * this.minimapScale();\n const scale = vport.zoom * this.minimapScale();\n\n return `translate(${x} ${y}) scale(${scale})`;\n });\n\n public ngOnInit(): void {\n const model = new MinimapModel();\n model.template.set(this.minimap());\n\n this.entitiesService.minimap.set(model);\n }\n\n protected trackNodes(idx: number, { rawNode }: NodeModel) {\n return rawNode;\n }\n}\n","<ng-template #minimap>\n <svg:rect\n fill=\"none\"\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n [attr.stroke]=\"strokeColor()\" />\n\n <svg:svg\n [attr.x]=\"minimapPoint().x\"\n [attr.y]=\"minimapPoint().y\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\"\n (mouseover)=\"hovered.set(true)\"\n (mouseleave)=\"hovered.set(false)\">\n <svg:rect [attr.width]=\"minimapWidth()\" [attr.height]=\"minimapHeight()\" [attr.fill]=\"maskColor()\" />\n\n <svg:g [attr.transform]=\"minimapTransform()\">\n <svg:rect\n [attr.fill]=\"viewportColor()\"\n [attr.transform]=\"viewportTransform()\"\n [attr.width]=\"minimapWidth()\"\n [attr.height]=\"minimapHeight()\" />\n\n @for (model of entitiesService.nodes(); track trackNodes($index, model)) {\n <ng-container>\n @if (model.rawNode.type === 'default' || model.rawNode.type === 'html-template' || model.isComponentType) {\n <svg:foreignObject\n [attr.transform]=\"model.pointTransform()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\">\n <default-node\n [selected]=\"model.selected()\"\n [style.width.px]=\"model.size().width\"\n [style.height.px]=\"model.size().height\"\n [style.max-width.px]=\"model.size().width\"\n [style.max-height.px]=\"model.size().height\">\n <div [outerHTML]=\"model.text()\"></div>\n </default-node>\n </svg:foreignObject>\n }\n @if (model.rawNode.type === 'default-group' || model.rawNode.type === 'template-group') {\n <svg:rect\n class=\"default-group-node\"\n rx=\"5\"\n ry=\"5\"\n [attr.transform]=\"model.pointTransform()\"\n [class.default-group-node_selected]=\"model.selected()\"\n [attr.width]=\"model.size().width\"\n [attr.height]=\"model.size().height\"\n [style.stroke]=\"model.color()\"\n [style.fill]=\"model.color()\" />\n }\n </ng-container>\n }\n </svg:g>\n </svg:svg>\n</ng-template>\n","import { computed, signal, TemplateRef } from '@angular/core';\nimport { Position } from '../types/position.type';\nimport { NodeModel } from './node.model';\n\nexport class ToolbarModel {\n public position = signal<Position>('top');\n public template = signal<TemplateRef<unknown> | null>(null);\n\n public offset = signal(10);\n\n public point = computed(() => {\n switch (this.position()) {\n case 'top':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: -this.size().height - this.offset(),\n };\n case 'bottom':\n return {\n x: this.node.size().width / 2 - this.size().width / 2,\n y: this.node.size().height + this.offset(),\n };\n case 'left':\n return {\n x: -this.size().width - this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2,\n };\n case 'right':\n return {\n x: this.node.size().width + this.offset(),\n y: this.node.size().height / 2 - this.size().height / 2,\n };\n }\n });\n\n public transform = computed(() => `translate(${this.point().x}, ${this.point().y})`);\n\n public size = signal({ width: 0, height: 0 });\n\n constructor(public node: NodeModel) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n OnDestroy,\n OnInit,\n TemplateRef,\n input,\n viewChild,\n effect,\n forwardRef,\n NgZone,\n DestroyRef,\n} from '@angular/core';\nimport { Directive } from '@angular/core';\nimport { Position } from '../../types/position.type';\nimport { ToolbarModel } from '../../models/toolbar.model';\nimport { OverlaysService } from '../../services/overlays.service';\nimport { NodeAccessorService } from '../../services/node-accessor.service';\nimport { resizable } from '../../utils/resizable';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { tap } from 'rxjs';\n\n@Component({\n standalone: true,\n selector: 'node-toolbar',\n template: `\n <ng-template #toolbar>\n <div class=\"wrapper\" nodeToolbarWrapper [model]=\"model\">\n <ng-content />\n </div>\n </ng-template>\n `,\n styles: [\n `\n .wrapper {\n width: max-content;\n }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [forwardRef(() => NodeToolbarWrapperDirective)],\n})\nexport class NodeToolbarComponent implements OnInit, OnDestroy {\n private overlaysService = inject(OverlaysService);\n private nodeService = inject(NodeAccessorService);\n\n public position = input<Position>('top');\n\n protected toolbarContentTemplate = viewChild.required<TemplateRef<unknown>>('toolbar');\n\n protected model = new ToolbarModel(this.nodeService.model()!);\n\n constructor() {\n effect(() => this.model.position.set(this.position()), { allowSignalWrites: true });\n }\n\n public ngOnInit(): void {\n this.model.template.set(this.toolbarContentTemplate());\n\n this.overlaysService.addToolbar(this.model);\n }\n\n public ngOnDestroy(): void {\n this.overlaysService.removeToolbar(this.model);\n }\n}\n\n@Directive({\n selector: '[nodeToolbarWrapper]',\n standalone: true,\n})\nexport class NodeToolbarWrapperDirective implements OnInit {\n private element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly zone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n\n public model = input.required<ToolbarModel>();\n\n public ngOnInit(): void {\n resizable([this.element.nativeElement], this.zone)\n .pipe(\n tap(() => this.setSize()),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe();\n }\n\n private setSize() {\n this.model().size.set({\n width: this.element.nativeElement.clientWidth,\n height: this.element.nativeElement.clientHeight,\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { EdgeComponent } from '../../components/edge/edge.component';\nimport { FlowSettingsService } from '../../services/flow-settings.service';\nimport { EdgeRenderingService } from '../../services/edge-rendering.service';\n\n@Component({\n selector: 'g[customTemplateEdge]',\n templateUrl: './custom-template-edge.component.html',\n styleUrls: ['./custom-template-edge.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n host: {\n '(mousedown)': 'pull()',\n '(touchstart)': 'pull()',\n },\n})\nexport class CustomTemplateEdgeComponent {\n private edge = inject(EdgeComponent);\n private flowSettingsService = inject(FlowSettingsService);\n private edgeRenderingService = inject(EdgeRenderingService);\n\n protected model = this.edge.model();\n protected context = this.model.context.$implicit;\n\n protected pull() {\n if (this.flowSettingsService.elevateEdgesOnSelect()) {\n this.edgeRenderingService.pull(this.model);\n }\n }\n}\n","<ng-content />\n\n<svg:path #interactiveEdge class=\"interactive-edge\" [attr.d]=\"context.path()\" />\n","import { VflowComponent } from './components/vflow/vflow.component';\n\nimport { DragHandleDirective } from './directives/drag-handle.directive';\nimport { SelectableDirective } from './directives/selectable.directive';\nimport {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n HandleTemplateDirective,\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n} from './directives/template.directive';\nimport { ConnectionControllerDirective } from './directives/connection-controller.directive';\n\nimport { MiniMapComponent } from './public-components/minimap/minimap.component';\nimport { NodeToolbarComponent } from './public-components/node-toolbar/node-toolbar.component';\nimport { ResizableComponent } from './public-components/resizable/resizable.component';\nimport { HandleComponent } from './public-components/handle/handle.component';\nimport { CustomTemplateEdgeComponent } from './public-components/custom-template-edge/custom-template-edge.component';\n\nexport const Vflow = [\n VflowComponent,\n HandleComponent,\n ResizableComponent,\n SelectableDirective,\n MiniMapComponent,\n NodeToolbarComponent,\n CustomTemplateEdgeComponent,\n DragHandleDirective,\n ConnectionControllerDirective,\n\n NodeHtmlTemplateDirective,\n NodeSvgTemplateDirective,\n GroupNodeTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n ConnectionTemplateDirective,\n HandleTemplateDirective,\n] as const;\n","// Standalone Util\nexport * from './lib/vflow/vflow';\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/marker.interface';\nexport { ViewportState } from './lib/vflow/interfaces/viewport.interface';\nexport * from './lib/vflow/interfaces/component-node-event.interface';\nexport * from './lib/vflow/interfaces/fit-view-options.interface';\nexport * from './lib/vflow/interfaces/optimization.interface';\nexport * from './lib/vflow/interfaces/intersecting-nodes-options.interface';\nexport * from './lib/vflow/interfaces/curve-factory.interface';\nexport * from './lib/vflow/interfaces/node-preview.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';\nexport * from './lib/vflow/types/background.type';\nexport * from './lib/vflow/types/connection-mode.type';\nexport * from './lib/vflow/types/keyboard-action.type';\n\n// Components\nexport * from './lib/vflow/components/vflow/vflow.component';\nexport * from './lib/vflow/public-components/handle/handle.component';\nexport * from './lib/vflow/public-components/custom-node/custom-node.component';\nexport * from './lib/vflow/public-components/custom-dynamic-node/custom-dynamic-node.component';\nexport * from './lib/vflow/public-components/resizable/resizable.component';\nexport * from './lib/vflow/public-components/minimap/minimap.component';\nexport * from './lib/vflow/public-components/node-toolbar/node-toolbar.component';\nexport * from './lib/vflow/public-components/custom-template-edge/custom-template-edge.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';\nexport * from './lib/vflow/directives/selectable.directive';\nexport * from './lib/vflow/directives/drag-handle.directive';\n\n// ! Internals\nexport { ConnectionModel as ɵConnectionModel } from './lib/vflow/models/connection.model';\nexport { HandleModel as ɵHandleModel } from './lib/vflow/models/handle.model';\nexport { NodeModel as ɵNodeModel } from './lib/vflow/models/node.model';\n\nexport { ComponentEventBusService as ɵComponentEventBusService } from './lib/vflow/services/component-event-bus.service';\nexport { HandleService as ɵHandleService } from './lib/vflow/services/handle.service';\nexport { FlowSettingsService as ɵFlowSettingsService } from './lib/vflow/services/flow-settings.service';\nexport { FlowEntitiesService as ɵFlowEntitiesService } from './lib/vflow/services/flow-entities.service';\nexport { NodeAccessorService as ɵNodeAccessorService } from './lib/vflow/services/node-accessor.service';\nexport { ViewportService as ɵViewportService } from './lib/vflow/services/viewport.service';\nexport { SelectionService as ɵSelectionService } from './lib/vflow/services/selection.service';\nexport { NodeRenderingService as ɵNodeRenderingService } from './lib/vflow/services/node-rendering.service';\n\nexport { RootPointerDirective as ɵRootPointerDirective } from './lib/vflow/directives/root-pointer.directive';\nexport { SpacePointContextDirective as ɵSpacePointContextDirective } from './lib/vflow/directives/space-point-context.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ngComputed"],"mappings":"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"}