import { Directive, Input, TemplateRef } from '@angular/core'; import { Subject } from 'rxjs'; import { EdgeTemplateContext } from './models/edge-template-context.model'; import { InputEdge } from './models/input-edge.model'; import { InputNode } from './models/input-node.model'; import { NodeTemplateContext } from './models/node-template-context.model'; @Directive({ selector: '[defsTemplate]', }) export class DefsTemplateDirective { constructor(public template: TemplateRef) {} } @Directive({ selector: '[nodeTemplate]', }) export class NodeTemplateDirective { /** Subject that emits when input nodes are mutated. */ readonly _onNodeChanges$: Subject = new Subject(); /** The array of nodes to display in the graph. */ @Input('nodeTemplateNodes') get inputNodes(): InputNode[] { return this._inputNodes; } set inputNodes(value: InputNode[]) { this._inputNodes = value; this._onNodeChanges$.next(); } _inputNodes: InputNode[] = []; static ngTemplateContextGuard( _dir: NodeTemplateDirective, _ctx: unknown, ): _ctx is NodeTemplateContext { return true; } constructor(public template: TemplateRef) {} } @Directive({ selector: '[edgeTemplate]', }) export class EdgeTemplateDirective { /** Subject that emits when input edges are mutated. */ readonly _onEdgeChanges$: Subject = new Subject(); /** The array of edges to display in the graph. */ @Input('edgeTemplateEdges') get inputEdges(): InputEdge[] { return this._inputEdges; } set inputEdges(value: InputEdge[]) { this._inputEdges = value; this._onEdgeChanges$.next(); } _inputEdges: InputEdge[] = []; static ngTemplateContextGuard( _dir: EdgeTemplateDirective, _ctx: unknown, ): _ctx is EdgeTemplateContext { return true; } constructor(public template: TemplateRef) {} }