ngx-vflow 1.13.1 → 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-vflow-testing.mjs","sources":["../../../projects/ngx-vflow-lib/testing/src/provide-custom-node-mocks.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/template-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/vflow-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/handle-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/resizable-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/minimap-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/node-toolbar-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/connection-controller-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/drag-handle-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/selectable-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/custom-template-edge-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/vflow-mocks.ts","../../../projects/ngx-vflow-lib/testing/src/public-api.ts","../../../projects/ngx-vflow-lib/testing/src/ngx-vflow-testing.ts"],"sourcesContent":["import { Provider, signal } from '@angular/core';\nimport {\n ɵNodeModel as NodeModel,\n ɵComponentEventBusService as ComponentEventBusService,\n ɵHandleService as HandleService,\n ɵFlowSettingsService as FlowSettingsService,\n ɵFlowEntitiesService as FlowEntitiesService,\n ɵNodeAccessorService as NodeAccessorService,\n ɵRootPointerDirective as RootPointerDirective,\n ɵSpacePointContextDirective as SpacePointContextDirective,\n ɵViewportService as ViewportService,\n ɵSelectionService as SelectionService,\n Point,\n} from 'ngx-vflow';\nimport { of } from 'rxjs';\n\nconst mockModel = () => new NodeModel({ id: 'mock', type: 'default', point: { x: 0, y: 0 } });\n\nexport function provideCustomNodeMocks(): Provider[] {\n return [\n {\n provide: ComponentEventBusService,\n useValue: {\n pushEvent: () => {},\n },\n },\n {\n provide: NodeAccessorService,\n useFactory: () => ({\n model: signal(mockModel()),\n }),\n },\n FlowEntitiesService,\n\n // TODO: mocks below should be removed after the major release\n {\n provide: HandleService,\n useFactory: () => ({\n node: signal(mockModel()),\n createHandle: () => {},\n destroyHandle: () => {},\n }),\n },\n {\n provide: RootPointerDirective,\n useValue: {\n pointerMovement$: of({\n x: 0,\n y: 0,\n movementX: 0,\n movementY: 0,\n target: null,\n originalEvent: null,\n }),\n documentPointerEnd$: of(null),\n },\n },\n {\n provide: SpacePointContextDirective,\n useValue: {\n documentPointToFlowPoint: (point: Point) => point,\n },\n },\n {\n provide: SelectionService,\n useValue: {\n select: () => {},\n },\n },\n FlowSettingsService,\n ViewportService,\n ];\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n HandleTemplateDirective,\n NodeHtmlTemplateDirective,\n} from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edge]',\n})\nexport class EdgeTemplateMockDirective implements AsInterface<EdgeTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[connection]',\n})\nexport class ConnectionTemplateMockDirective implements AsInterface<ConnectionTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edgeLabelHtml]',\n})\nexport class EdgeLabelHtmlTemplateMockDirective implements AsInterface<EdgeLabelHtmlTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeHtml]',\n})\nexport class NodeHtmlTemplateMockDirective implements AsInterface<NodeHtmlTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeSvg]',\n})\nexport class NodeSvgTemplateMockDirective implements AsInterface<NodeSvgTemplateMockDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[groupNode]',\n})\nexport class GroupNodeTemplateMockDirective implements AsInterface<GroupNodeTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[handle]',\n})\nexport class HandleTemplateMockDirective implements AsInterface<HandleTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n Input,\n output,\n signal,\n WritableSignal,\n OnInit,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Node,\n DynamicNode,\n Edge,\n SpacePoint,\n Point,\n Background,\n KeyboardShortcuts,\n ConnectionSettings,\n ViewportState,\n NodeChange,\n EdgeChange,\n FitViewOptions,\n VflowComponent,\n IntersectingNodesOptions,\n ɵConnectionModel as ConnectionModel,\n DEFAULT_OPTIMIZATION,\n} from 'ngx-vflow';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n ConnectionTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n NodeHtmlTemplateMockDirective,\n} from '../directive-mocks/template-mock.directive';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'vflow',\n template: `\n <ng-content />\n\n @for (node of nodes; track $index) {\n @if (node.type === 'html-template') {\n <ng-component\n [ngTemplateOutlet]=\"nodeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n node: node,\n selected: createSignal(false),\n },\n }\" />\n }\n\n @if (node.type === 'template-group') {\n <ng-component\n [ngTemplateOutlet]=\"groupNodeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n node: node,\n selected: createSignal(false),\n width: createSignal(node.width),\n height: createSignal(node.height),\n },\n }\" />\n }\n }\n\n @for (edge of edges; track $index) {\n @if (edge.type === 'template') {\n <ng-component\n [ngTemplateOutlet]=\"edgeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n selected: createSignal(false),\n path: createSignal(''),\n markerStart: createSignal(''),\n markerEnd: createSignal(''),\n },\n }\" />\n\n @if (edge.edgeLabels?.start) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n },\n }\" />\n }\n\n @if (edge.edgeLabels?.center) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n label: edge.edgeLabels?.center,\n },\n }\" />\n }\n\n @if (edge.edgeLabels?.end) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n label: edge.edgeLabels?.end,\n },\n }\" />\n }\n }\n }\n\n @if (connection.type === 'template') {\n <ng-component\n [ngTemplateOutlet]=\"connectionTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n path: createSignal(''),\n marker: createSignal(''),\n },\n }\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgTemplateOutlet],\n})\nexport class VflowMockComponent implements AsInterface<VflowComponent>, OnInit {\n @Input({ required: true })\n public readonly nodes!: Node[] | DynamicNode[];\n\n @Input()\n public readonly edges!: Edge[];\n\n @Input()\n public readonly view: [number, number] | 'auto' = [400, 400];\n\n @Input()\n public readonly minZoom = 0.5;\n\n @Input()\n public readonly maxZoom = 3;\n\n @Input()\n public readonly background: Background | string = '#fff';\n\n @Input()\n public readonly optimization = DEFAULT_OPTIMIZATION;\n\n @Input()\n public readonly entitiesSelectable = true;\n\n @Input()\n public readonly keyboardShortcuts: KeyboardShortcuts = {\n multiSelection: null,\n };\n\n @Input({\n transform: (settings: ConnectionSettings) => new ConnectionModel(settings),\n })\n public readonly connection: ConnectionModel = new ConnectionModel({});\n\n @Input()\n public readonly snapGrid!: [number, number];\n\n @Input()\n public elevateNodesOnSelect!: boolean;\n\n @Input()\n public elevateEdgesOnSelect!: boolean;\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onComponentNodeEvent = output<any>();\n\n protected nodeTemplateDirective = contentChild(NodeHtmlTemplateMockDirective);\n\n protected groupNodeTemplateDirective = contentChild(GroupNodeTemplateMockDirective);\n\n protected edgeTemplateDirective = contentChild(EdgeTemplateMockDirective);\n\n protected edgeLabelHtmlDirective = contentChild(EdgeLabelHtmlTemplateMockDirective);\n\n protected connectionTemplateDirective = contentChild(ConnectionTemplateMockDirective);\n\n public viewport = signal<ViewportState>({\n x: 0,\n y: 0,\n zoom: 1,\n });\n\n public nodesChange = signal<NodeChange[]>([]);\n public edgesChange = signal<EdgeChange[]>([]);\n\n public viewportChange$ = toObservable(this.viewport);\n\n public nodesChange$ = toObservable(this.nodesChange);\n public edgesChange$ = toObservable(this.edgesChange);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n public viewportTo(viewport: ViewportState): void {\n this.viewport.set(viewport);\n }\n\n public zoomTo(zoom: number): void {\n this.viewport.update((prev) => ({ ...prev, zoom }));\n }\n\n public panTo(point: Point): void {\n this.viewport.update((prev) => ({ ...prev, x: point.x, y: point.y }));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public fitView(options?: FitViewOptions): void {}\n\n public documentPointToFlowPoint(point: Point, options?: { spaces: false }): Point;\n public documentPointToFlowPoint(point: Point, options: { spaces: true }): SpacePoint[];\n public documentPointToFlowPoint(point: Point, options?: { spaces: boolean }): unknown {\n if (options?.spaces) {\n return [\n {\n nodeId: null,\n x: point.x,\n y: point.y,\n },\n ];\n }\n\n return point;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getIntesectingNodes(nodeId: string, options?: IntersectingNodesOptions): Node[] | DynamicNode[] {\n return [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public toNodeSpace(nodeId: string, spaceNodeId: string): Point {\n return { x: 0, y: 0 };\n }\n\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n public getDetachedEdges(): Edge[] {\n return [];\n }\n\n protected createSignal<T>(value: T): WritableSignal<T> {\n return signal(value);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, TemplateRef, OnInit } from '@angular/core';\nimport type { HandleComponent, Position } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'handle',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class HandleMockComponent implements AsInterface<HandleComponent>, OnInit {\n public position = input.required<Position>();\n public type = input.required<'source' | 'target'>();\n public id = input<string>();\n public template = input<TemplateRef<any> | null>();\n public offsetX = input<number>(0);\n public offsetY = input<number>(0);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit(): void {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit, AfterViewInit } from '@angular/core';\nimport type { ResizableComponent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: '[resizable]',\n template: '<ng-content />',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizableMockComponent implements AsInterface<ResizableComponent>, OnInit, AfterViewInit {\n public resizable = input<boolean | ''>();\n public resizerColor = input('#2e414c');\n public gap = input(1.5);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngAfterViewInit() {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit } from '@angular/core';\nimport type { MiniMapComponent, MiniMapPosition } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'mini-map',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MiniMapMockComponent implements AsInterface<MiniMapComponent>, OnInit {\n public maskColor = input(`rgba(215, 215, 215, 0.6)`);\n\n public strokeColor = input(`rgb(200, 200, 200)`);\n\n public position = input<MiniMapPosition>('bottom-right');\n\n public scaleOnHover = input(false);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit, OnDestroy } from '@angular/core';\nimport type { Position, NodeToolbarComponent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'node-toolbar',\n template: '<ng-content />',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NodeToolbarMockComponent implements AsInterface<NodeToolbarComponent>, OnInit, OnDestroy {\n public position = input<Position>('top');\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnDestroy() {}\n}\n","import { Directive, output } from '@angular/core';\nimport { Connection, ReconnectionEvent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\nimport type { ConnectionControllerDirective, ɵHandleModel as HandleModel } from 'ngx-vflow';\n\n@Directive({ selector: '[onConnect]', standalone: true })\nexport class ConnectionControllerMockDirective implements AsInterface<ConnectionControllerDirective> {\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onConnect = output<Connection>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onReconnect = output<ReconnectionEvent>();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public startConnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public startReconnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public validateConnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public resetValidateConnection(targetHandle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public endConnection(): void {}\n}\n","import { Directive } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { DragHandleDirective } from 'ngx-vflow';\n\n@Directive({ selector: '[dragHandle]', standalone: true })\nexport class DragHandleMockDirective implements AsInterface<DragHandleDirective> {}\n","import { Directive } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { SelectableDirective } from 'ngx-vflow';\n\n@Directive({\n selector: '[selectable]',\n standalone: true,\n})\nexport class SelectableMockDirective implements AsInterface<SelectableDirective> {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { CustomTemplateEdgeComponent } from 'ngx-vflow';\n\n@Component({\n selector: 'g[customTemplateEdge]',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class CustomTemplateEdgeMockComponent implements AsInterface<CustomTemplateEdgeComponent> {}\n","import { CustomTemplateEdgeMockComponent } from './component-mocks/custom-template-edge-mock.component';\nimport { HandleMockComponent } from './component-mocks/handle-mock.component';\nimport { MiniMapMockComponent } from './component-mocks/minimap-mock.component';\nimport { NodeToolbarMockComponent } from './component-mocks/node-toolbar-mock.component';\nimport { ResizableMockComponent } from './component-mocks/resizable-mock.component';\nimport { VflowMockComponent } from './component-mocks/vflow-mock.component';\nimport { ConnectionControllerMockDirective } from './directive-mocks/connection-controller-mock.directive';\nimport { DragHandleMockDirective } from './directive-mocks/drag-handle-mock.directive';\nimport { SelectableMockDirective } from './directive-mocks/selectable-mock.directive';\nimport {\n ConnectionTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n HandleTemplateMockDirective,\n NodeHtmlTemplateMockDirective,\n} from './directive-mocks/template-mock.directive';\n\nexport const VflowMocks = [\n VflowMockComponent,\n HandleMockComponent,\n ResizableMockComponent,\n SelectableMockDirective,\n MiniMapMockComponent,\n NodeToolbarMockComponent,\n DragHandleMockDirective,\n ConnectionControllerMockDirective,\n CustomTemplateEdgeMockComponent,\n\n NodeHtmlTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n ConnectionTemplateMockDirective,\n HandleTemplateMockDirective,\n] as const;\n","// Testing\nexport * from './provide-custom-node-mocks';\nexport * from './component-mocks/vflow-mock.component';\nexport * from './component-mocks/handle-mock.component';\nexport * from './component-mocks/resizable-mock.component';\nexport * from './component-mocks/minimap-mock.component';\nexport * from './component-mocks/node-toolbar-mock.component';\nexport * from './directive-mocks/connection-controller-mock.directive';\nexport * from './directive-mocks/drag-handle-mock.directive';\nexport * from './directive-mocks/selectable-mock.directive';\nexport * from './directive-mocks/template-mock.directive';\nexport * from './vflow-mocks';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NodeModel","ComponentEventBusService","NodeAccessorService","FlowEntitiesService","HandleService","RootPointerDirective","SpacePointContextDirective","SelectionService","FlowSettingsService","ViewportService","ConnectionModel"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-vflow-testing.mjs","sources":["../../../projects/ngx-vflow-lib/testing/src/provide-custom-node-mocks.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/template-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/vflow-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/handle-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/resizable-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/minimap-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/node-toolbar-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/connection-controller-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/drag-handle-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/directive-mocks/selectable-mock.directive.ts","../../../projects/ngx-vflow-lib/testing/src/component-mocks/custom-template-edge-mock.component.ts","../../../projects/ngx-vflow-lib/testing/src/vflow-mocks.ts","../../../projects/ngx-vflow-lib/testing/src/public-api.ts","../../../projects/ngx-vflow-lib/testing/src/ngx-vflow-testing.ts"],"sourcesContent":["import { Provider, signal } from '@angular/core';\nimport {\n ɵNodeModel as NodeModel,\n ɵComponentEventBusService as ComponentEventBusService,\n ɵHandleService as HandleService,\n ɵFlowSettingsService as FlowSettingsService,\n ɵFlowEntitiesService as FlowEntitiesService,\n ɵNodeAccessorService as NodeAccessorService,\n ɵRootPointerDirective as RootPointerDirective,\n ɵSpacePointContextDirective as SpacePointContextDirective,\n ɵViewportService as ViewportService,\n ɵSelectionService as SelectionService,\n Point,\n} from 'ngx-vflow';\nimport { of } from 'rxjs';\n\nconst mockModel = () => new NodeModel({ id: 'mock', type: 'default', point: { x: 0, y: 0 } });\n\nexport function provideCustomNodeMocks(): Provider[] {\n return [\n {\n provide: ComponentEventBusService,\n useValue: {\n pushEvent: () => {},\n },\n },\n {\n provide: NodeAccessorService,\n useFactory: () => ({\n model: signal(mockModel()),\n }),\n },\n FlowEntitiesService,\n\n // TODO: mocks below should be removed after the major release\n {\n provide: HandleService,\n useFactory: () => ({\n node: signal(mockModel()),\n createHandle: () => {},\n destroyHandle: () => {},\n }),\n },\n {\n provide: RootPointerDirective,\n useValue: {\n pointerMovement$: of({\n x: 0,\n y: 0,\n movementX: 0,\n movementY: 0,\n target: null,\n originalEvent: null,\n }),\n documentPointerEnd$: of(null),\n },\n },\n {\n provide: SpacePointContextDirective,\n useValue: {\n documentPointToFlowPoint: (point: Point) => point,\n },\n },\n {\n provide: SelectionService,\n useValue: {\n select: () => {},\n },\n },\n FlowSettingsService,\n ViewportService,\n ];\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type {\n ConnectionTemplateDirective,\n EdgeLabelHtmlTemplateDirective,\n EdgeTemplateDirective,\n GroupNodeTemplateDirective,\n HandleTemplateDirective,\n NodeHtmlTemplateDirective,\n} from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edge]',\n})\nexport class EdgeTemplateMockDirective implements AsInterface<EdgeTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[connection]',\n})\nexport class ConnectionTemplateMockDirective implements AsInterface<ConnectionTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[edgeLabelHtml]',\n})\nexport class EdgeLabelHtmlTemplateMockDirective implements AsInterface<EdgeLabelHtmlTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeHtml]',\n})\nexport class NodeHtmlTemplateMockDirective implements AsInterface<NodeHtmlTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[nodeSvg]',\n})\nexport class NodeSvgTemplateMockDirective implements AsInterface<NodeSvgTemplateMockDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[groupNode]',\n})\nexport class GroupNodeTemplateMockDirective implements AsInterface<GroupNodeTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n\n@Directive({\n standalone: true,\n selector: 'ng-template[handle]',\n})\nexport class HandleTemplateMockDirective implements AsInterface<HandleTemplateDirective> {\n public templateRef = inject(TemplateRef);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChild,\n Input,\n output,\n signal,\n WritableSignal,\n OnInit,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n Node,\n DynamicNode,\n Edge,\n SpacePoint,\n Point,\n Background,\n KeyboardShortcuts,\n ConnectionSettings,\n ViewportState,\n NodeChange,\n EdgeChange,\n FitViewOptions,\n VflowComponent,\n IntersectingNodesOptions,\n ɵConnectionModel as ConnectionModel,\n DEFAULT_OPTIMIZATION,\n} from 'ngx-vflow';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n ConnectionTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n NodeHtmlTemplateMockDirective,\n} from '../directive-mocks/template-mock.directive';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'vflow',\n template: `\n <ng-content />\n\n @for (node of nodes; track $index) {\n @if (node.type === 'html-template') {\n <ng-component\n [ngTemplateOutlet]=\"nodeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n node: node,\n selected: createSignal(false),\n },\n }\" />\n }\n\n @if (node.type === 'template-group') {\n <ng-component\n [ngTemplateOutlet]=\"groupNodeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n node: node,\n selected: createSignal(false),\n width: createSignal(node.width),\n height: createSignal(node.height),\n },\n }\" />\n }\n }\n\n @for (edge of edges; track $index) {\n @if (edge.type === 'template') {\n <ng-component\n [ngTemplateOutlet]=\"edgeTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n selected: createSignal(false),\n path: createSignal(''),\n markerStart: createSignal(''),\n markerEnd: createSignal(''),\n },\n }\" />\n\n @if (edge.edgeLabels?.start) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n },\n }\" />\n }\n\n @if (edge.edgeLabels?.center) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n label: edge.edgeLabels?.center,\n },\n }\" />\n }\n\n @if (edge.edgeLabels?.end) {\n <ng-component\n [ngTemplateOutlet]=\"edgeLabelHtmlDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n edge: edge,\n label: edge.edgeLabels?.end,\n },\n }\" />\n }\n }\n }\n\n @if (connection.type === 'template') {\n <ng-component\n [ngTemplateOutlet]=\"connectionTemplateDirective()?.templateRef ?? null\"\n [ngTemplateOutletContext]=\"{\n $implicit: {\n path: createSignal(''),\n marker: createSignal(''),\n },\n }\" />\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [NgTemplateOutlet],\n})\nexport class VflowMockComponent implements AsInterface<VflowComponent>, OnInit {\n @Input({ required: true })\n public readonly nodes!: Node[] | DynamicNode[];\n\n @Input()\n public readonly edges!: Edge[];\n\n @Input()\n public readonly view: [number, number] | 'auto' = [400, 400];\n\n @Input()\n public readonly minZoom = 0.5;\n\n @Input()\n public readonly maxZoom = 3;\n\n @Input()\n public readonly background: Background | string = '#fff';\n\n @Input()\n public readonly optimization = DEFAULT_OPTIMIZATION;\n\n @Input()\n public readonly entitiesSelectable = true;\n\n @Input()\n public readonly keyboardShortcuts: KeyboardShortcuts = {\n multiSelection: null,\n };\n\n @Input({\n transform: (settings: ConnectionSettings) => new ConnectionModel(settings),\n })\n public readonly connection: ConnectionModel = new ConnectionModel({});\n\n @Input()\n public readonly snapGrid!: [number, number];\n\n @Input()\n public elevateNodesOnSelect!: boolean;\n\n @Input()\n public elevateEdgesOnSelect!: boolean;\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onComponentNodeEvent = output<any>();\n\n protected nodeTemplateDirective = contentChild(NodeHtmlTemplateMockDirective);\n\n protected groupNodeTemplateDirective = contentChild(GroupNodeTemplateMockDirective);\n\n protected edgeTemplateDirective = contentChild(EdgeTemplateMockDirective);\n\n protected edgeLabelHtmlDirective = contentChild(EdgeLabelHtmlTemplateMockDirective);\n\n protected connectionTemplateDirective = contentChild(ConnectionTemplateMockDirective);\n\n public viewport = signal<ViewportState>({\n x: 0,\n y: 0,\n zoom: 1,\n });\n\n public nodesChange = signal<NodeChange[]>([]);\n public edgesChange = signal<EdgeChange[]>([]);\n\n public viewportChange$ = toObservable(this.viewport);\n\n public nodesChange$ = toObservable(this.nodesChange);\n public edgesChange$ = toObservable(this.edgesChange);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n public viewportTo(viewport: ViewportState): void {\n this.viewport.set(viewport);\n }\n\n public zoomTo(zoom: number): void {\n this.viewport.update((prev) => ({ ...prev, zoom }));\n }\n\n public panTo(point: Point): void {\n this.viewport.update((prev) => ({ ...prev, x: point.x, y: point.y }));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public fitView(options?: FitViewOptions): void {}\n\n public documentPointToFlowPoint(point: Point, options?: { spaces: false }): Point;\n public documentPointToFlowPoint(point: Point, options: { spaces: true }): SpacePoint[];\n public documentPointToFlowPoint(point: Point, options?: { spaces: boolean }): unknown {\n if (options?.spaces) {\n return [\n {\n nodeId: null,\n x: point.x,\n y: point.y,\n },\n ];\n }\n\n return point;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public getIntesectingNodes(nodeId: string, options?: IntersectingNodesOptions): Node[] | DynamicNode[] {\n return [];\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public toNodeSpace(nodeId: string, spaceNodeId: string): Point {\n return { x: 0, y: 0 };\n }\n\n public getNode<T = unknown>(id: string): Node<T> | DynamicNode<T> | undefined {\n return this.nodes.find((node) => node.id === id);\n }\n\n public getDetachedEdges(): Edge[] {\n return [];\n }\n\n protected createSignal<T>(value: T): WritableSignal<T> {\n return signal(value);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, TemplateRef, OnInit } from '@angular/core';\nimport type { HandleComponent, Position } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'handle',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class HandleMockComponent implements AsInterface<HandleComponent>, OnInit {\n public position = input.required<Position>();\n public type = input.required<'source' | 'target'>();\n public id = input<string>();\n public template = input<TemplateRef<any> | null>();\n public offsetX = input<number>(0);\n public offsetY = input<number>(0);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit(): void {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit, AfterViewInit, OnDestroy } from '@angular/core';\nimport type { ResizableComponent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: '[resizable]',\n template: '<ng-content />',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ResizableMockComponent implements AsInterface<ResizableComponent>, OnInit, OnDestroy, AfterViewInit {\n public resizable = input<boolean | ''>();\n public resizerColor = input('#2e414c');\n public gap = input(1.5);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnDestroy() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngAfterViewInit() {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit } from '@angular/core';\nimport type { MiniMapComponent, MiniMapPosition } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'mini-map',\n template: '',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MiniMapMockComponent implements AsInterface<MiniMapComponent>, OnInit {\n public maskColor = input(`rgba(215, 215, 215, 0.6)`);\n\n public strokeColor = input(`rgb(200, 200, 200)`);\n\n public position = input<MiniMapPosition>('bottom-right');\n\n public scaleOnHover = input(false);\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n}\n","import { ChangeDetectionStrategy, Component, input, OnInit, OnDestroy } from '@angular/core';\nimport type { Position, NodeToolbarComponent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\n\n@Component({\n selector: 'node-toolbar',\n template: '<ng-content />',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NodeToolbarMockComponent implements AsInterface<NodeToolbarComponent>, OnInit, OnDestroy {\n public position = input<Position>('top');\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnInit() {}\n\n // eslint-disable-next-line @angular-eslint/no-empty-lifecycle-method\n public ngOnDestroy() {}\n}\n","import { Directive, output } from '@angular/core';\nimport { Connection, ReconnectionEvent } from 'ngx-vflow';\nimport { AsInterface } from '../types';\nimport type { ConnectionControllerDirective, ɵHandleModel as HandleModel } from 'ngx-vflow';\n\n@Directive({ selector: '[onConnect]', standalone: true })\nexport class ConnectionControllerMockDirective implements AsInterface<ConnectionControllerDirective> {\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onConnect = output<Connection>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n public readonly onReconnect = output<ReconnectionEvent>();\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public startConnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public startReconnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public validateConnection(handle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public resetValidateConnection(targetHandle: HandleModel): void {}\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public endConnection(): void {}\n}\n","import { Directive } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { DragHandleDirective } from 'ngx-vflow';\n\n@Directive({ selector: '[dragHandle]', standalone: true })\nexport class DragHandleMockDirective implements AsInterface<DragHandleDirective> {}\n","import { Directive } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { SelectableDirective } from 'ngx-vflow';\n\n@Directive({\n selector: '[selectable]',\n standalone: true,\n})\nexport class SelectableMockDirective implements AsInterface<SelectableDirective> {}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { AsInterface } from '../types';\nimport type { CustomTemplateEdgeComponent } from 'ngx-vflow';\n\n@Component({\n selector: 'g[customTemplateEdge]',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n})\nexport class CustomTemplateEdgeMockComponent implements AsInterface<CustomTemplateEdgeComponent> {}\n","import { CustomTemplateEdgeMockComponent } from './component-mocks/custom-template-edge-mock.component';\nimport { HandleMockComponent } from './component-mocks/handle-mock.component';\nimport { MiniMapMockComponent } from './component-mocks/minimap-mock.component';\nimport { NodeToolbarMockComponent } from './component-mocks/node-toolbar-mock.component';\nimport { ResizableMockComponent } from './component-mocks/resizable-mock.component';\nimport { VflowMockComponent } from './component-mocks/vflow-mock.component';\nimport { ConnectionControllerMockDirective } from './directive-mocks/connection-controller-mock.directive';\nimport { DragHandleMockDirective } from './directive-mocks/drag-handle-mock.directive';\nimport { SelectableMockDirective } from './directive-mocks/selectable-mock.directive';\nimport {\n ConnectionTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n HandleTemplateMockDirective,\n NodeHtmlTemplateMockDirective,\n} from './directive-mocks/template-mock.directive';\n\nexport const VflowMocks = [\n VflowMockComponent,\n HandleMockComponent,\n ResizableMockComponent,\n SelectableMockDirective,\n MiniMapMockComponent,\n NodeToolbarMockComponent,\n DragHandleMockDirective,\n ConnectionControllerMockDirective,\n CustomTemplateEdgeMockComponent,\n\n NodeHtmlTemplateMockDirective,\n GroupNodeTemplateMockDirective,\n EdgeLabelHtmlTemplateMockDirective,\n EdgeTemplateMockDirective,\n ConnectionTemplateMockDirective,\n HandleTemplateMockDirective,\n] as const;\n","// Testing\nexport * from './provide-custom-node-mocks';\nexport * from './component-mocks/vflow-mock.component';\nexport * from './component-mocks/handle-mock.component';\nexport * from './component-mocks/resizable-mock.component';\nexport * from './component-mocks/minimap-mock.component';\nexport * from './component-mocks/node-toolbar-mock.component';\nexport * from './directive-mocks/connection-controller-mock.directive';\nexport * from './directive-mocks/drag-handle-mock.directive';\nexport * from './directive-mocks/selectable-mock.directive';\nexport * from './directive-mocks/template-mock.directive';\nexport * from './vflow-mocks';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["NodeModel","ComponentEventBusService","NodeAccessorService","FlowEntitiesService","HandleService","RootPointerDirective","SpacePointContextDirective","SelectionService","FlowSettingsService","ViewportService","ConnectionModel"],"mappings":"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"}
@@ -1033,8 +1033,12 @@ class NodeModel {
1033
1033
  * @deprecated use width or height signals
1034
1034
  */
1035
1035
  this.size = computed(() => ({ width: this.width(), height: this.height() }));
1036
- this.styleWidth = computed(() => `${this.width()}px`);
1037
- this.styleHeight = computed(() => `${this.height()}px`);
1036
+ /**
1037
+ * If resizer is used, the node size fully depends on the resizer
1038
+ * Otherwise it calculates the size based on the content
1039
+ */
1040
+ this.styleWidth = computed(() => (this.controlledByResizer() ? `${this.width()}px` : '100%'));
1041
+ this.styleHeight = computed(() => (this.controlledByResizer() ? `${this.height()}px` : '100%'));
1038
1042
  this.foWidth = computed(() => this.width() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);
1039
1043
  this.foHeight = computed(() => this.height() + MAGIC_NUMBER_TO_FIX_GLITCH_IN_CHROME);
1040
1044
  this.renderOrder = signal(0);
@@ -1068,6 +1072,7 @@ class NodeModel {
1068
1072
  this.parent = computed(() => this.entitiesService.nodes().find((n) => n.rawNode.id === this.parentId()) ?? null);
1069
1073
  this.children = computed(() => this.entitiesService.nodes().filter((n) => n.parentId() === this.rawNode.id));
1070
1074
  this.color = signal(NodeModel.defaultColor);
1075
+ this.controlledByResizer = signal(false);
1071
1076
  this.resizable = signal(false);
1072
1077
  this.resizing = signal(false);
1073
1078
  this.resizerTemplate = signal(null);
@@ -2717,8 +2722,12 @@ class ResizableComponent {
2717
2722
  }, { allowSignalWrites: true });
2718
2723
  }
2719
2724
  ngOnInit() {
2725
+ this.model.controlledByResizer.set(true);
2720
2726
  this.model.resizerTemplate.set(this.resizer());
2721
2727
  }
2728
+ ngOnDestroy() {
2729
+ this.model.controlledByResizer.set(false);
2730
+ }
2722
2731
  ngAfterViewInit() {
2723
2732
  this.minWidth = +getComputedStyle(this.hostRef.nativeElement).minWidth.replace('px', '') || 0;
2724
2733
  this.minHeight = +getComputedStyle(this.hostRef.nativeElement).minHeight.replace('px', '') || 0;
@@ -3112,12 +3121,11 @@ class NodeResizeControllerDirective {
3112
3121
  }
3113
3122
  ngOnInit() {
3114
3123
  const model = this.nodeAccessor.model();
3115
- resizable([this.hostElementRef.nativeElement], this.zone)
3124
+ const host = this.hostElementRef.nativeElement;
3125
+ merge(resizable([host], this.zone))
3116
3126
  .pipe(startWith(null), filter(() => !model.resizing()), tap(() => {
3117
- const width = this.hostElementRef.nativeElement.clientWidth;
3118
- const height = this.hostElementRef.nativeElement.clientHeight;
3119
- model.width.set(width);
3120
- model.height.set(height);
3127
+ model.width.set(host.clientWidth);
3128
+ model.height.set(host.clientHeight);
3121
3129
  }), takeUntilDestroyed(this.destroyRef))
3122
3130
  .subscribe();
3123
3131
  }
@@ -3198,7 +3206,7 @@ class NodeComponent {
3198
3206
  }
3199
3207
  }
3200
3208
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3201
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NodeComponent, isStandalone: true, selector: "g[node]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null }, nodeSvgTemplate: { classPropertyName: "nodeSvgTemplate", publicName: "nodeSvgTemplate", isSignal: true, isRequired: false, transformFunction: null }, groupNodeTemplate: { classPropertyName: "groupNodeTemplate", publicName: "groupNodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "vflow-node" }, providers: [HandleService, NodeAccessorService], ngImport: i0, template: "<!-- 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 nodeHandlesController nodeResizeController class=\"wrapper\" [style.width]=\"model().styleWidth()\">\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 nodeHandlesController nodeResizeController class=\"wrapper\" [style.width]=\"model().styleWidth()\">\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", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }, { kind: "component", type: DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }, { kind: "component", type: HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template", "offsetX", "offsetY"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ResizableComponent, selector: "[resizable]", inputs: ["resizable", "resizerColor", "gap"] }, { kind: "directive", type: HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: NodeHandlesControllerDirective, selector: "[nodeHandlesController]" }, { kind: "directive", type: NodeResizeControllerDirective, selector: "[nodeResizeController]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: NodeComponent, isStandalone: true, selector: "g[node]", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null }, nodeTemplate: { classPropertyName: "nodeTemplate", publicName: "nodeTemplate", isSignal: true, isRequired: false, transformFunction: null }, nodeSvgTemplate: { classPropertyName: "nodeSvgTemplate", publicName: "nodeSvgTemplate", isSignal: true, isRequired: false, transformFunction: null }, groupNodeTemplate: { classPropertyName: "groupNodeTemplate", publicName: "groupNodeTemplate", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "vflow-node" }, providers: [HandleService, NodeAccessorService], ngImport: i0, template: "<!-- 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", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"], dependencies: [{ kind: "directive", type: PointerDirective, selector: "[pointerStart], [pointerEnd], [pointerOver], [pointerOut]", outputs: ["pointerOver", "pointerOut", "pointerStart", "pointerEnd"] }, { kind: "component", type: DefaultNodeComponent, selector: "default-node", inputs: ["selected"] }, { kind: "component", type: HandleComponent, selector: "handle", inputs: ["position", "type", "id", "template", "offsetX", "offsetY"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ResizableComponent, selector: "[resizable]", inputs: ["resizable", "resizerColor", "gap"] }, { kind: "directive", type: HandleSizeControllerDirective, selector: "[handleSizeController]", inputs: ["handleSizeController"] }, { kind: "directive", type: NodeHandlesControllerDirective, selector: "[nodeHandlesController]" }, { kind: "directive", type: NodeResizeControllerDirective, selector: "[nodeResizeController]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3202
3210
  }
3203
3211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: NodeComponent, decorators: [{
3204
3212
  type: Component,
@@ -3214,7 +3222,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3214
3222
  HandleSizeControllerDirective,
3215
3223
  NodeHandlesControllerDirective,
3216
3224
  NodeResizeControllerDirective,
3217
- ], template: "<!-- 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 nodeHandlesController nodeResizeController class=\"wrapper\" [style.width]=\"model().styleWidth()\">\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 nodeHandlesController nodeResizeController class=\"wrapper\" [style.width]=\"model().styleWidth()\">\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", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
3225
+ ], template: "<!-- 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", styles: [".magnet{opacity:0}.wrapper{display:table-cell}.default-group-node{stroke-width:1.5px;fill-opacity:.05}.default-group-node_selected{stroke-width:2px}.default-handle{stroke:#fff;fill:#1b262c}\n"] }]
3218
3226
  }] });
3219
3227
 
3220
3228
  class ConnectionComponent {