@masterteam/structure-builder 0.0.15 β 0.0.16
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,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Component, input, ChangeDetectionStrategy, output, viewChild, model, contentChild, signal, computed
|
|
2
|
+
import { inject, Component, input, ChangeDetectionStrategy, output, viewChild, model, contentChild, signal, computed } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i2 from '@angular/forms';
|
|
@@ -189,8 +189,8 @@ class StructureBuilder {
|
|
|
189
189
|
const _computedColor = this.getNestedValue(node, fields.color);
|
|
190
190
|
const id = _computedId;
|
|
191
191
|
const configuration = {
|
|
192
|
-
...(pos[id] ?? {}),
|
|
193
192
|
...(node.configuration ?? {}),
|
|
193
|
+
...(pos[id] ?? {}),
|
|
194
194
|
};
|
|
195
195
|
return {
|
|
196
196
|
...node,
|
|
@@ -218,30 +218,7 @@ class StructureBuilder {
|
|
|
218
218
|
'_computedColor',
|
|
219
219
|
]);
|
|
220
220
|
}, ...(ngDevMode ? [{ debugName: "coreFields" }] : []));
|
|
221
|
-
constructor() {
|
|
222
|
-
effect(() => {
|
|
223
|
-
const list = this.nodesWithComputedProps();
|
|
224
|
-
const next = untracked(() => this.positions());
|
|
225
|
-
const liveIds = new Set();
|
|
226
|
-
for (const n of list) {
|
|
227
|
-
const id = n._computedId;
|
|
228
|
-
if (!id || n?.loading)
|
|
229
|
-
continue;
|
|
230
|
-
liveIds.add(id);
|
|
231
|
-
if (next[id] == null) {
|
|
232
|
-
const c = n.configuration;
|
|
233
|
-
if (c?.x != null && c?.y != null) {
|
|
234
|
-
next[id] = { x: c.x, y: c.y };
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
for (const k of Object.keys(next)) {
|
|
239
|
-
if (!liveIds.has(k))
|
|
240
|
-
delete next[k];
|
|
241
|
-
}
|
|
242
|
-
this.positions.set(next);
|
|
243
|
-
});
|
|
244
|
-
}
|
|
221
|
+
constructor() { }
|
|
245
222
|
ngOnInit() {
|
|
246
223
|
this.getData(new dagre.graphlib.Graph(), this.direction());
|
|
247
224
|
}
|
|
@@ -274,11 +251,6 @@ class StructureBuilder {
|
|
|
274
251
|
const nodeId = event.nodeId || event.detail?.nodeId;
|
|
275
252
|
const position = event.position || event.detail?.position || event.rect;
|
|
276
253
|
if (nodeId && position) {
|
|
277
|
-
this.nodes.update((nodes) => nodes.map((node) => {
|
|
278
|
-
return node[this.fields().id] === nodeId
|
|
279
|
-
? { ...node, configuration: { x: position.x, y: position.y } }
|
|
280
|
-
: node;
|
|
281
|
-
}));
|
|
282
254
|
this.positions.update((p) => ({
|
|
283
255
|
...p,
|
|
284
256
|
[nodeId]: { x: position.x, y: position.y },
|
|
@@ -401,18 +373,7 @@ class StructureBuilder {
|
|
|
401
373
|
const gNode = graph.node(key);
|
|
402
374
|
positionsById[key] = { x: gNode.x, y: gNode.y };
|
|
403
375
|
});
|
|
404
|
-
this.
|
|
405
|
-
const pos = positionsById[node[this.fields().id]];
|
|
406
|
-
if (!pos)
|
|
407
|
-
return node;
|
|
408
|
-
return {
|
|
409
|
-
...node,
|
|
410
|
-
configuration: {
|
|
411
|
-
x: pos.x,
|
|
412
|
-
y: pos.y,
|
|
413
|
-
},
|
|
414
|
-
};
|
|
415
|
-
}));
|
|
376
|
+
this.positions.update((old) => ({ ...old, ...positionsById }));
|
|
416
377
|
}
|
|
417
378
|
getNestedValue(obj, path) {
|
|
418
379
|
if (!path)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-structure-builder.mjs","sources":["../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.ts","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.html","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.html","../../../../packages/masterteam/structure-builder/src/public-api.ts","../../../../packages/masterteam/structure-builder/src/masterteam-structure-builder.ts"],"sourcesContent":["import { Component, inject, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\nexport interface NodeFormData {\n id: string;\n label: string;\n description?: string;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-node-form-dialog',\n standalone: true,\n imports: [CommonModule, DynamicForm, Button, ReactiveFormsModule],\n templateUrl: './node-form-dialog.html',\n styleUrls: ['./node-form-dialog.scss'],\n})\nexport class NodeFormDialogComponent implements AfterViewInit {\n private ref = inject(DynamicDialogRef);\n private config = inject(DynamicDialogConfig);\n dynamicFormControl = new FormControl();\n\n nodeData: NodeFormData = this.config.data?.node || {};\n data = this.config.data || {};\n\n formSchema = this.config.data?.formSchema || [];\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.nodeData);\n }\n get templateContext() {\n return {\n node: this.nodeData,\n save: (item: any = {}) => this.onSave(item),\n cancel: () => this.onCancel(),\n close: () => this.onCancel(),\n };\n }\n onSave(item: any = {}) {\n const updatedNode = {\n ...this.nodeData,\n ...this.dynamicFormControl.value,\n ...item,\n };\n this.ref.close(updatedNode);\n }\n\n onCancel() {\n this.ref.close();\n }\n}\n","@if (this.data?.template) {\n <ng-container\n *ngTemplateOutlet=\"data.template; context: templateContext\"\n ></ng-container>\n} @else {\n @if (nodeData) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n\n <div\n class=\"flex justify-end gap-3 mt-6 pt-4 border-t border-(--p-content-border-color)\"\n >\n <mt-button [label]=\"'Cancel'\" severity=\"secondary\" (onClick)=\"onCancel()\">\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'Save Changes'\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n </div>\n}\n","import { Component, inject, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'mt-connection-form-dialog',\n standalone: true,\n imports: [CommonModule, DynamicForm, Button, ReactiveFormsModule],\n templateUrl: './connection-form-dialog.html',\n styleUrls: ['./connection-form-dialog.scss'],\n})\nexport class ConnectionFormDialogComponent implements AfterViewInit {\n private config = inject(DynamicDialogConfig);\n private ref = inject(DynamicDialogRef);\n dynamicFormControl = new FormControl();\n\n connectionData = this.config.data?.connection || {};\n formSchema = this.config.data?.formSchema || [];\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.connectionData);\n }\n\n onSave(): void {\n if (this.dynamicFormControl.valid) {\n this.ref.close({\n ...this.connectionData,\n ...this.dynamicFormControl.value,\n });\n }\n }\n\n onCancel(): void {\n this.ref.close();\n }\n}\n","@if (connectionData && formSchema?.sections.length > 0) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n}\n\n<div\n class=\"flex justify-end gap-3 mt-6 pt-4 border-t border-(--p-content-border-color)\"\n>\n <mt-button [label]=\"'Cancel'\" severity=\"secondary\" (onClick)=\"onCancel()\">\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'Save Changes'\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { ButtonGroup } from '@masterteam/components/button-group';\nimport { PointExtensions } from '@foblex/2d';\nimport { StructureBuilder } from '../structure-builder';\n\n@Component({\n selector: 'mt-toolbar',\n imports: [Button, ButtonGroup],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.css',\n})\nexport class Toolbar {\n readonly size = input<'small' | 'large' | undefined>();\n\n private builderComponent = inject(StructureBuilder);\n\n public onZoomIn(): void {\n this.builderComponent.fZoomDirective()?.zoomIn();\n }\n\n public onZoomOut(): void {\n this.builderComponent.fZoomDirective()?.zoomOut();\n }\n\n public onFitToScreen(): void {\n this.builderComponent\n .fCanvasComponent()\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\n }\n\n public onOneToOne(): void {\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\n }\n public autoLayout(): void {\n this.builderComponent.maybeAutoLayout();\n }\n}\n","<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n","import {\n Component,\n input,\n model,\n signal,\n computed,\n inject,\n contentChild,\n TemplateRef,\n viewChild,\n output,\n OnInit,\n effect,\n untracked,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DynamicDialogModule, DialogService } from 'primeng/dynamicdialog';\nimport { TabsModule } from 'primeng/tabs';\nimport {\n EFMarkerType,\n FCanvasComponent,\n FCreateConnectionEvent,\n FCreateNodeEvent,\n FFlowComponent,\n FFlowModule,\n FZoomDirective,\n} from '@foblex/flow';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport { Icon } from '@masterteam/icons';\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\nimport { DynamicFormConfig } from '@masterteam/components';\nimport { Toolbar } from './toolbar/toolbar';\n\n// π dagre & helpers β same approach as lib sample\nimport * as dagre from 'dagre';\nimport { graphlib } from 'dagre';\nimport Graph = graphlib.Graph;\nimport { IPoint, PointExtensions } from '@foblex/2d';\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\n\nexport interface Node {\n configuration?: {\n x?: number;\n y?: number;\n };\n [key: string]: any;\n loading?: boolean;\n}\n\nexport interface NodeFieldsMapping {\n id?: string;\n name?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AvailableNode {\n id: string;\n name: string;\n icon: string;\n color: string;\n tab: string[];\n [key: string]: any;\n}\n\nexport interface Connection {\n id: string;\n from: string;\n to: string;\n [key: string]: any;\n}\n\nexport interface Actions {\n key: string;\n icon: string;\n variant: string;\n size: string;\n severity?: string;\n tooltip?: string;\n}\n\nexport interface NodeActionEvent {\n action: Actions;\n node: AvailableNode;\n}\n\nexport type SBActionType =\n | 'createNode'\n | 'updateNode'\n | 'deleteNode'\n | 'createConnection'\n | 'updateConnection'\n | 'deleteConnection';\n\nexport interface SBAction {\n action: SBActionType;\n data?: any;\n}\n\n// β¨ Direction & config β mirrors lib sample\nenum Direction {\n LEFT_TO_RIGHT = 'LR',\n TOP_TO_BOTTOM = 'TB',\n}\n\nconst CONFIGURATION = {\n [Direction.LEFT_TO_RIGHT]: {\n // kept for parity; sides arenβt directly used here but available if needed\n outputSide: 'RIGHT',\n inputSide: 'LEFT',\n },\n [Direction.TOP_TO_BOTTOM]: {\n outputSide: 'BOTTOM',\n inputSide: 'TOP',\n },\n} as const;\n\n@Component({\n selector: 'mt-structure-builder',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n FFlowModule,\n DynamicDialogModule,\n TabsModule,\n Button,\n Icon,\n Card,\n Toolbar,\n Skeleton,\n ],\n templateUrl: './structure-builder.html',\n styleUrl: './structure-builder.scss',\n providers: [DialogService],\n host: {\n class:\n 'flex h-full bg-surface-100 dark:bg-surface-700 relative rounded-2xl',\n },\n})\nexport class StructureBuilder implements OnInit {\n public dialogService = inject(DialogService);\n nodeActionsEvent = output<NodeActionEvent>();\n action = output<SBAction>();\n availableNodes = input<AvailableNode[]>([]);\n protected fCanvas = viewChild(FCanvasComponent);\n public fFlowComponent = viewChild(FFlowComponent);\n public fCanvasComponent = viewChild(FCanvasComponent);\n public fZoomDirective = viewChild(FZoomDirective);\n nodeForm = input<DynamicFormConfig>({ sections: [] });\n connectionForm = input<DynamicFormConfig>({ sections: [] });\n nodeActions = input<Actions[]>([]);\n nodeFields = input<NodeFieldsMapping>({\n id: 'id',\n name: 'name',\n icon: 'icon',\n color: 'color',\n });\n\n protected isAutoLayout = input<boolean>(true);\n nodes = model<Node[]>([]);\n connections = model<Connection[]>([]);\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\n\n activeTab = signal('0');\n protected readonly eMarkerType = EFMarkerType;\n\n protected configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n protected direction = signal<Direction>(Direction.TOP_TO_BOTTOM);\n\n private positions = signal<Record<string, IPoint>>({});\n\n protected fields = computed(() => {\n const inputFields = this.nodeFields();\n return {\n id: inputFields.id || 'id',\n name: inputFields.name || 'name',\n icon: inputFields.icon || 'icon',\n color: inputFields.color || 'color',\n } as any;\n });\n\n availableTabs = computed(() => {\n const tabsSet = new Set<string>();\n this.availableNodes().forEach((node) => {\n node.tab.forEach((tab) => tabsSet.add(tab));\n });\n return Array.from(tabsSet).sort();\n });\n\n currentTabNodes = computed(() => {\n const tabs = this.availableTabs();\n const currentTabIndex = parseInt(this.activeTab());\n if (currentTabIndex >= tabs.length) return [];\n const currentTab = tabs[currentTabIndex];\n return this.availableNodes().filter((node) =>\n node.tab.includes(currentTab),\n );\n });\n\n nodesWithComputedProps = computed(() => {\n const fields = this.fields();\n const pos = this.positions();\n return this.nodes().map((node) => {\n const _computedId = String(this.getNestedValue(node, fields.id));\n const _computedName = this.getNestedValue(node, fields.name);\n const _computedIcon = this.getNestedValue(node, fields.icon);\n const _computedColor = this.getNestedValue(node, fields.color);\n const id = _computedId;\n const configuration = {\n ...(pos[id] ?? {}),\n ...(node.configuration ?? {}),\n };\n return {\n ...node,\n _computedId,\n _computedName,\n _computedIcon,\n _computedColor,\n configuration,\n };\n });\n });\n connectionsComputed = computed(() =>\n this.connections()?.map((c) => ({\n ...c,\n from: String(c.from),\n to: String(c.to),\n })),\n );\n coreFields = computed(() => {\n const fields = this.fields();\n return new Set([\n ...Object.values(fields),\n 'configuration',\n '_computedId',\n '_computedName',\n '_computedIcon',\n '_computedColor',\n ]);\n });\n\n constructor() {\n effect(() => {\n const list = this.nodesWithComputedProps();\n const next: Record<string, IPoint> = untracked(() => this.positions());\n const liveIds = new Set<string>();\n for (const n of list) {\n const id = n._computedId;\n if (!id || n?.loading) continue;\n liveIds.add(id);\n if (next[id] == null) {\n const c = n.configuration;\n if (c?.x != null && c?.y != null) {\n next[id] = { x: c.x, y: c.y };\n }\n }\n }\n for (const k of Object.keys(next)) {\n if (!liveIds.has(k)) delete next[k];\n }\n this.positions.set(next);\n });\n }\n\n public ngOnInit(): void {\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n protected onLoaded(): void {\n this.fitToScreen();\n }\n\n onCreateNode(event: FCreateNodeEvent): void {\n const nodeData = event.data as AvailableNode;\n if (!nodeData) return;\n\n const fields = this.fields();\n const newNode: Node = {\n [fields.id]: nodeData.id,\n [fields.name]: nodeData.name,\n [fields.icon]: nodeData.icon,\n [fields.color]: nodeData.color,\n configuration: {\n x: event.rect.x,\n y: event.rect.y,\n },\n };\n\n if (this.nodeForm()?.sections.length > 0) {\n this.openNodeDialog(newNode, true);\n } else {\n this.action.emit({ action: 'createNode', data: newNode });\n }\n }\n\n onNodePositionChange(event: any): void {\n const nodeId = event.nodeId || event.detail?.nodeId;\n const position = event.position || event.detail?.position || event.rect;\n\n if (nodeId && position) {\n this.nodes.update((nodes) =>\n nodes.map((node) => {\n return node[this.fields().id] === nodeId\n ? { ...node, configuration: { x: position.x, y: position.y } }\n : node;\n }),\n );\n this.positions.update((p) => ({\n ...p,\n [nodeId]: { x: position.x, y: position.y },\n }));\n }\n }\n\n onCreateConnection(event: FCreateConnectionEvent): void {\n const newConnection: Connection = {\n id: this.generateConnectionId(),\n from: event.fOutputId!,\n to: event.fInputId!,\n };\n if (!event.fInputId! || !event.fOutputId!) {\n return;\n }\n const exists = this.connectionsComputed().some(\n (conn) =>\n conn.from === newConnection.from && conn.to === newConnection.to,\n );\n\n if (!exists) {\n this.action.emit({ action: 'createConnection', data: newConnection });\n }\n }\n\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\n const ref = this.dialogService.open(NodeFormDialogComponent, {\n header: 'Edit Node Properties',\n width: '600px',\n focusOnShow: this.nodeDialogTemplate() ? false : true,\n data: {\n node: node,\n formSchema: this.nodeForm(),\n template: this.nodeDialogTemplate(),\n },\n });\n\n ref.onClose.subscribe((result) => {\n if (result) {\n if (isNewNode) {\n const newNodeWithFormData = { ...node, ...result };\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\n } else {\n this.onNodeFormSubmit(result);\n }\n }\n });\n }\n\n openConnectionDialog(connection: Connection): void {\n const ref = this.dialogService.open(ConnectionFormDialogComponent, {\n header: 'Edit Connection Properties',\n width: '600px',\n data: {\n connection: connection,\n formSchema: this.connectionForm(),\n },\n });\n\n ref.onClose.subscribe((result) => {\n if (result) {\n this.onConnectionFormSubmit(result);\n }\n });\n }\n\n onNodeFormSubmit(formData: any): void {\n const nodeId = formData[this.fields().id];\n if (nodeId) {\n this.action.emit({ action: 'updateNode', data: formData });\n }\n }\n\n onConnectionFormSubmit(formData: any): void {\n const connectionId = formData.id;\n if (connectionId) {\n this.action.emit({ action: 'updateConnection', data: formData });\n }\n }\n\n removeNode(node: any): void {\n this.action.emit({ action: 'deleteNode', data: node });\n }\n\n removeConnection(connection: any): void {\n this.action.emit({ action: 'deleteConnection', data: connection });\n }\n\n buttonAction(action: any, node: any) {\n this.nodeActionsEvent.emit({ action, node });\n if (action.key === 'edit') {\n this.openNodeDialog(node);\n } else if (action.key === 'delete') {\n this.removeNode(node);\n }\n }\n\n protected fitToScreen(): void {\n const area = this.nodes()?.length * 70;\n this.fCanvasComponent()?.fitToScreen(\n PointExtensions.initialize(area, area),\n false,\n );\n }\n\n private getData(graph: Graph, direction: Direction): void {\n this.direction.set(direction);\n if (this.isAutoLayout()) {\n this.fFlowComponent()?.reset();\n }\n this.updateGraph(graph, direction);\n this.applyGraphPositions(graph);\n }\n\n private updateGraph(graph: Graph, direction: Direction): void {\n this.configuration.set(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n graph.setGraph({ rankdir: direction });\n\n const SIZE = { width: 300, height: 200 };\n this.nodes().forEach((n) => {\n graph.setNode(n[this.fields().id], {\n width: SIZE.width,\n height: SIZE.height,\n });\n });\n\n this.connectionsComputed().forEach((c) => {\n const fromId = c.from;\n const toId = c.to;\n if (fromId && toId && fromId !== toId) {\n graph.setEdge(fromId, toId, {});\n }\n });\n\n dagre.layout(graph);\n }\n\n private applyGraphPositions(graph: Graph): void {\n const positionsById: Record<string, IPoint> = {};\n graph.nodes().forEach((key) => {\n const gNode = graph.node(key);\n positionsById[key] = { x: gNode.x, y: gNode.y };\n });\n this.nodes.update((nodes) =>\n nodes.map((node) => {\n const pos = positionsById[node[this.fields().id]];\n if (!pos) return node;\n return {\n ...node,\n configuration: {\n x: pos.x,\n y: pos.y,\n },\n };\n }),\n );\n }\n\n private getNestedValue(obj: unknown, path?: string | null): unknown {\n if (!path) return undefined;\n const keys = path\n .replace(/\\[(\\w+)\\]/g, '.$1')\n .replace(/^\\./, '')\n .split('.')\n .filter(Boolean);\n\n return keys.reduce<unknown>(\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\n obj,\n );\n }\n\n maybeAutoLayout(): void {\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n private generateConnectionId(): string {\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private extractNodeId(connectionEndId: string): string {\n return (connectionEndId || '').replace(/-(in|out)$/, '');\n }\n}\n","<!-- structure-builder.html -->\n<mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n>\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">Level templates</h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs [(value)]=\"activeTab\" styleClass=\"structure-tabs\">\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0!\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n Drag to add item to your Structure:\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.name\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">All {{ tab }} items are in use</p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n</mt-card>\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (action of nodeActions(); track action.key) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n","/*\n * Public API Surface of structure-builder\n */\n\nexport * from './lib/structure-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-structure-builder.mjs","sources":["../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.ts","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.html","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.html","../../../../packages/masterteam/structure-builder/src/public-api.ts","../../../../packages/masterteam/structure-builder/src/masterteam-structure-builder.ts"],"sourcesContent":["import { Component, inject, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicDialogRef, DynamicDialogConfig } from 'primeng/dynamicdialog';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\nexport interface NodeFormData {\n id: string;\n label: string;\n description?: string;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-node-form-dialog',\n standalone: true,\n imports: [CommonModule, DynamicForm, Button, ReactiveFormsModule],\n templateUrl: './node-form-dialog.html',\n styleUrls: ['./node-form-dialog.scss'],\n})\nexport class NodeFormDialogComponent implements AfterViewInit {\n private ref = inject(DynamicDialogRef);\n private config = inject(DynamicDialogConfig);\n dynamicFormControl = new FormControl();\n\n nodeData: NodeFormData = this.config.data?.node || {};\n data = this.config.data || {};\n\n formSchema = this.config.data?.formSchema || [];\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.nodeData);\n }\n get templateContext() {\n return {\n node: this.nodeData,\n save: (item: any = {}) => this.onSave(item),\n cancel: () => this.onCancel(),\n close: () => this.onCancel(),\n };\n }\n onSave(item: any = {}) {\n const updatedNode = {\n ...this.nodeData,\n ...this.dynamicFormControl.value,\n ...item,\n };\n this.ref.close(updatedNode);\n }\n\n onCancel() {\n this.ref.close();\n }\n}\n","@if (this.data?.template) {\n <ng-container\n *ngTemplateOutlet=\"data.template; context: templateContext\"\n ></ng-container>\n} @else {\n @if (nodeData) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n\n <div\n class=\"flex justify-end gap-3 mt-6 pt-4 border-t border-(--p-content-border-color)\"\n >\n <mt-button [label]=\"'Cancel'\" severity=\"secondary\" (onClick)=\"onCancel()\">\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'Save Changes'\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n </div>\n}\n","import { Component, inject, AfterViewInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicDialogConfig, DynamicDialogRef } from 'primeng/dynamicdialog';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n selector: 'mt-connection-form-dialog',\n standalone: true,\n imports: [CommonModule, DynamicForm, Button, ReactiveFormsModule],\n templateUrl: './connection-form-dialog.html',\n styleUrls: ['./connection-form-dialog.scss'],\n})\nexport class ConnectionFormDialogComponent implements AfterViewInit {\n private config = inject(DynamicDialogConfig);\n private ref = inject(DynamicDialogRef);\n dynamicFormControl = new FormControl();\n\n connectionData = this.config.data?.connection || {};\n formSchema = this.config.data?.formSchema || [];\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.connectionData);\n }\n\n onSave(): void {\n if (this.dynamicFormControl.valid) {\n this.ref.close({\n ...this.connectionData,\n ...this.dynamicFormControl.value,\n });\n }\n }\n\n onCancel(): void {\n this.ref.close();\n }\n}\n","@if (connectionData && formSchema?.sections.length > 0) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n}\n\n<div\n class=\"flex justify-end gap-3 mt-6 pt-4 border-t border-(--p-content-border-color)\"\n>\n <mt-button [label]=\"'Cancel'\" severity=\"secondary\" (onClick)=\"onCancel()\">\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'Save Changes'\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { ButtonGroup } from '@masterteam/components/button-group';\nimport { PointExtensions } from '@foblex/2d';\nimport { StructureBuilder } from '../structure-builder';\n\n@Component({\n selector: 'mt-toolbar',\n imports: [Button, ButtonGroup],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.css',\n})\nexport class Toolbar {\n readonly size = input<'small' | 'large' | undefined>();\n\n private builderComponent = inject(StructureBuilder);\n\n public onZoomIn(): void {\n this.builderComponent.fZoomDirective()?.zoomIn();\n }\n\n public onZoomOut(): void {\n this.builderComponent.fZoomDirective()?.zoomOut();\n }\n\n public onFitToScreen(): void {\n this.builderComponent\n .fCanvasComponent()\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\n }\n\n public onOneToOne(): void {\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\n }\n public autoLayout(): void {\n this.builderComponent.maybeAutoLayout();\n }\n}\n","<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n","import {\n Component,\n input,\n model,\n signal,\n computed,\n inject,\n contentChild,\n TemplateRef,\n viewChild,\n output,\n OnInit,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DynamicDialogModule, DialogService } from 'primeng/dynamicdialog';\nimport { TabsModule } from 'primeng/tabs';\nimport {\n EFMarkerType,\n FCanvasComponent,\n FCreateConnectionEvent,\n FCreateNodeEvent,\n FFlowComponent,\n FFlowModule,\n FZoomDirective,\n} from '@foblex/flow';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport { Icon } from '@masterteam/icons';\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\nimport { DynamicFormConfig } from '@masterteam/components';\nimport { Toolbar } from './toolbar/toolbar';\n\n// π dagre & helpers β same approach as lib sample\nimport * as dagre from 'dagre';\nimport { graphlib } from 'dagre';\nimport Graph = graphlib.Graph;\nimport { IPoint, PointExtensions } from '@foblex/2d';\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\n\nexport interface Node {\n configuration?: {\n x?: number;\n y?: number;\n };\n [key: string]: any;\n loading?: boolean;\n}\n\nexport interface NodeFieldsMapping {\n id?: string;\n name?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AvailableNode {\n id: string;\n name: string;\n icon: string;\n color: string;\n tab: string[];\n [key: string]: any;\n}\n\nexport interface Connection {\n id: string;\n from: string;\n to: string;\n [key: string]: any;\n}\n\nexport interface Actions {\n key: string;\n icon: string;\n variant: string;\n size: string;\n severity?: string;\n tooltip?: string;\n}\n\nexport interface NodeActionEvent {\n action: Actions;\n node: AvailableNode;\n}\n\nexport type SBActionType =\n | 'createNode'\n | 'updateNode'\n | 'deleteNode'\n | 'createConnection'\n | 'updateConnection'\n | 'deleteConnection';\n\nexport interface SBAction {\n action: SBActionType;\n data?: any;\n}\n\n// β¨ Direction & config β mirrors lib sample\nenum Direction {\n LEFT_TO_RIGHT = 'LR',\n TOP_TO_BOTTOM = 'TB',\n}\n\nconst CONFIGURATION = {\n [Direction.LEFT_TO_RIGHT]: {\n // kept for parity; sides arenβt directly used here but available if needed\n outputSide: 'RIGHT',\n inputSide: 'LEFT',\n },\n [Direction.TOP_TO_BOTTOM]: {\n outputSide: 'BOTTOM',\n inputSide: 'TOP',\n },\n} as const;\n\n@Component({\n selector: 'mt-structure-builder',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n FFlowModule,\n DynamicDialogModule,\n TabsModule,\n Button,\n Icon,\n Card,\n Toolbar,\n Skeleton,\n ],\n templateUrl: './structure-builder.html',\n styleUrl: './structure-builder.scss',\n providers: [DialogService],\n host: {\n class:\n 'flex h-full bg-surface-100 dark:bg-surface-700 relative rounded-2xl',\n },\n})\nexport class StructureBuilder implements OnInit {\n public dialogService = inject(DialogService);\n nodeActionsEvent = output<NodeActionEvent>();\n action = output<SBAction>();\n availableNodes = input<AvailableNode[]>([]);\n protected fCanvas = viewChild(FCanvasComponent);\n public fFlowComponent = viewChild(FFlowComponent);\n public fCanvasComponent = viewChild(FCanvasComponent);\n public fZoomDirective = viewChild(FZoomDirective);\n nodeForm = input<DynamicFormConfig>({ sections: [] });\n connectionForm = input<DynamicFormConfig>({ sections: [] });\n nodeActions = input<Actions[]>([]);\n nodeFields = input<NodeFieldsMapping>({\n id: 'id',\n name: 'name',\n icon: 'icon',\n color: 'color',\n });\n\n protected isAutoLayout = input<boolean>(true);\n nodes = model<Node[]>([]);\n connections = model<Connection[]>([]);\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\n\n activeTab = signal('0');\n protected readonly eMarkerType = EFMarkerType;\n\n protected configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n protected direction = signal<Direction>(Direction.TOP_TO_BOTTOM);\n\n private positions = signal<Record<string, IPoint>>({});\n\n protected fields = computed(() => {\n const inputFields = this.nodeFields();\n return {\n id: inputFields.id || 'id',\n name: inputFields.name || 'name',\n icon: inputFields.icon || 'icon',\n color: inputFields.color || 'color',\n } as any;\n });\n\n availableTabs = computed(() => {\n const tabsSet = new Set<string>();\n this.availableNodes().forEach((node) => {\n node.tab.forEach((tab) => tabsSet.add(tab));\n });\n return Array.from(tabsSet).sort();\n });\n\n currentTabNodes = computed(() => {\n const tabs = this.availableTabs();\n const currentTabIndex = parseInt(this.activeTab());\n if (currentTabIndex >= tabs.length) return [];\n const currentTab = tabs[currentTabIndex];\n return this.availableNodes().filter((node) =>\n node.tab.includes(currentTab),\n );\n });\n\n nodesWithComputedProps = computed(() => {\n const fields = this.fields();\n const pos = this.positions();\n return this.nodes().map((node) => {\n const _computedId = String(this.getNestedValue(node, fields.id));\n const _computedName = this.getNestedValue(node, fields.name);\n const _computedIcon = this.getNestedValue(node, fields.icon);\n const _computedColor = this.getNestedValue(node, fields.color);\n const id = _computedId;\n const configuration = {\n ...(node.configuration ?? {}),\n ...(pos[id] ?? {}),\n };\n return {\n ...node,\n _computedId,\n _computedName,\n _computedIcon,\n _computedColor,\n configuration,\n };\n });\n });\n connectionsComputed = computed(() =>\n this.connections()?.map((c) => ({\n ...c,\n from: String(c.from),\n to: String(c.to),\n })),\n );\n coreFields = computed(() => {\n const fields = this.fields();\n return new Set([\n ...Object.values(fields),\n 'configuration',\n '_computedId',\n '_computedName',\n '_computedIcon',\n '_computedColor',\n ]);\n });\n\n constructor() {}\n\n public ngOnInit(): void {\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n protected onLoaded(): void {\n this.fitToScreen();\n }\n\n onCreateNode(event: FCreateNodeEvent): void {\n const nodeData = event.data as AvailableNode;\n if (!nodeData) return;\n\n const fields = this.fields();\n const newNode: Node = {\n [fields.id]: nodeData.id,\n [fields.name]: nodeData.name,\n [fields.icon]: nodeData.icon,\n [fields.color]: nodeData.color,\n configuration: {\n x: event.rect.x,\n y: event.rect.y,\n },\n };\n\n if (this.nodeForm()?.sections.length > 0) {\n this.openNodeDialog(newNode, true);\n } else {\n this.action.emit({ action: 'createNode', data: newNode });\n }\n }\n\n onNodePositionChange(event: any): void {\n const nodeId = event.nodeId || event.detail?.nodeId;\n const position = event.position || event.detail?.position || event.rect;\n\n if (nodeId && position) {\n this.positions.update((p) => ({\n ...p,\n [nodeId]: { x: position.x, y: position.y },\n }));\n }\n }\n\n onCreateConnection(event: FCreateConnectionEvent): void {\n const newConnection: Connection = {\n id: this.generateConnectionId(),\n from: event.fOutputId!,\n to: event.fInputId!,\n };\n if (!event.fInputId! || !event.fOutputId!) {\n return;\n }\n const exists = this.connectionsComputed().some(\n (conn) =>\n conn.from === newConnection.from && conn.to === newConnection.to,\n );\n\n if (!exists) {\n this.action.emit({ action: 'createConnection', data: newConnection });\n }\n }\n\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\n const ref = this.dialogService.open(NodeFormDialogComponent, {\n header: 'Edit Node Properties',\n width: '600px',\n focusOnShow: this.nodeDialogTemplate() ? false : true,\n data: {\n node: node,\n formSchema: this.nodeForm(),\n template: this.nodeDialogTemplate(),\n },\n });\n\n ref.onClose.subscribe((result) => {\n if (result) {\n if (isNewNode) {\n const newNodeWithFormData = { ...node, ...result };\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\n } else {\n this.onNodeFormSubmit(result);\n }\n }\n });\n }\n\n openConnectionDialog(connection: Connection): void {\n const ref = this.dialogService.open(ConnectionFormDialogComponent, {\n header: 'Edit Connection Properties',\n width: '600px',\n data: {\n connection: connection,\n formSchema: this.connectionForm(),\n },\n });\n\n ref.onClose.subscribe((result) => {\n if (result) {\n this.onConnectionFormSubmit(result);\n }\n });\n }\n\n onNodeFormSubmit(formData: any): void {\n const nodeId = formData[this.fields().id];\n if (nodeId) {\n this.action.emit({ action: 'updateNode', data: formData });\n }\n }\n\n onConnectionFormSubmit(formData: any): void {\n const connectionId = formData.id;\n if (connectionId) {\n this.action.emit({ action: 'updateConnection', data: formData });\n }\n }\n\n removeNode(node: any): void {\n this.action.emit({ action: 'deleteNode', data: node });\n }\n\n removeConnection(connection: any): void {\n this.action.emit({ action: 'deleteConnection', data: connection });\n }\n\n buttonAction(action: any, node: any) {\n this.nodeActionsEvent.emit({ action, node });\n if (action.key === 'edit') {\n this.openNodeDialog(node);\n } else if (action.key === 'delete') {\n this.removeNode(node);\n }\n }\n\n protected fitToScreen(): void {\n const area = this.nodes()?.length * 70;\n this.fCanvasComponent()?.fitToScreen(\n PointExtensions.initialize(area, area),\n false,\n );\n }\n\n private getData(graph: Graph, direction: Direction): void {\n this.direction.set(direction);\n if (this.isAutoLayout()) {\n this.fFlowComponent()?.reset();\n }\n this.updateGraph(graph, direction);\n this.applyGraphPositions(graph);\n }\n\n private updateGraph(graph: Graph, direction: Direction): void {\n this.configuration.set(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n graph.setGraph({ rankdir: direction });\n\n const SIZE = { width: 300, height: 200 };\n this.nodes().forEach((n) => {\n graph.setNode(n[this.fields().id], {\n width: SIZE.width,\n height: SIZE.height,\n });\n });\n\n this.connectionsComputed().forEach((c) => {\n const fromId = c.from;\n const toId = c.to;\n if (fromId && toId && fromId !== toId) {\n graph.setEdge(fromId, toId, {});\n }\n });\n\n dagre.layout(graph);\n }\n\n private applyGraphPositions(graph: Graph): void {\n const positionsById: Record<string, IPoint> = {};\n graph.nodes().forEach((key) => {\n const gNode = graph.node(key);\n positionsById[key] = { x: gNode.x, y: gNode.y };\n });\n this.positions.update((old) => ({ ...old, ...positionsById }));\n }\n\n private getNestedValue(obj: unknown, path?: string | null): unknown {\n if (!path) return undefined;\n const keys = path\n .replace(/\\[(\\w+)\\]/g, '.$1')\n .replace(/^\\./, '')\n .split('.')\n .filter(Boolean);\n\n return keys.reduce<unknown>(\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\n obj,\n );\n }\n\n maybeAutoLayout(): void {\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n private generateConnectionId(): string {\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private extractNodeId(connectionEndId: string): string {\n return (connectionEndId || '').replace(/-(in|out)$/, '');\n }\n}\n","<!-- structure-builder.html -->\n<mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n>\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">Level templates</h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs [(value)]=\"activeTab\" styleClass=\"structure-tabs\">\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0!\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n Drag to add item to your Structure:\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.name\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">All {{ tab }} items are in use</p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n</mt-card>\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (action of nodeActions(); track action.key) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n","/*\n * Public API Surface of structure-builder\n */\n\nexport * from './lib/structure-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|