@masterteam/structure-builder 0.0.41 → 0.0.42
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":"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, OnInit, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DrawerController } from '@masterteam/components/dynamic-drawer';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\nexport interface NodeFormData {\r\n id?: string;\r\n label?: string;\r\n description?: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface NodeDialogFooterConfig {\r\n showSaveButton?: () => boolean;\r\n disableSaveButton?: () => boolean;\r\n}\r\n\r\ninterface NodeFormDialogInputData {\r\n node?: NodeFormData;\r\n formSchema?: unknown;\r\n template?: unknown;\r\n footerConfig?: NodeDialogFooterConfig | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-node-form-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n DynamicForm,\r\n Button,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './node-form-dialog.html',\r\n styleUrls: ['./node-form-dialog.scss'],\r\n})\r\nexport class NodeFormDialogComponent implements AfterViewInit, OnInit {\r\n readonly modalService: ModalService = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n // DrawerController is optional - only available when opened as drawer\r\n readonly drawerController = inject(DrawerController, { optional: true });\r\n dynamicFormControl = new FormControl();\r\n nodeData: NodeFormData = {};\r\n formSchema: any;\r\n data = input<NodeFormDialogInputData | null>(null);\r\n\r\n ngOnInit() {\r\n this.nodeData = this.data()?.node ?? {};\r\n this.formSchema = this.data()?.formSchema ?? [];\r\n }\r\n ngAfterViewInit(): void {\r\n this.dynamicFormControl.setValue(this.nodeData);\r\n }\r\n get templateContext() {\r\n return {\r\n node: this.nodeData,\r\n save: (item: any = {}) => this.onSave(item),\r\n cancel: () => this.onCancel(),\r\n close: () => this.onCancel(),\r\n drawerController: this.drawerController,\r\n };\r\n }\r\n\r\n showSaveButton(): boolean {\r\n return this.data()?.footerConfig?.showSaveButton?.() ?? true;\r\n }\r\n\r\n disableSaveButton(): boolean {\r\n return (\r\n this.data()?.footerConfig?.disableSaveButton?.() ??\r\n !this.dynamicFormControl.valid\r\n );\r\n }\r\n\r\n onSave(item: any = {}) {\r\n const updatedNode = {\r\n ...this.nodeData,\r\n ...this.dynamicFormControl.value,\r\n ...item,\r\n };\r\n this.ref.close(updatedNode);\r\n }\r\n\r\n onCancel() {\r\n this.ref.close();\r\n }\r\n}\r\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\r\n @if (this.data()?.template) {\r\n <ng-container\r\n *ngTemplateOutlet=\"data().template; context: templateContext\"\r\n ></ng-container>\r\n } @else {\r\n @if (nodeData) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formSchema\"\r\n [formControl]=\"dynamicFormControl\"\r\n ></mt-dynamic-form>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'structureBuilder.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n @if (showSaveButton()) {\r\n <mt-button\r\n [disabled]=\"disableSaveButton()\"\r\n [label]=\"'structureBuilder.saveChanges' | transloco\"\r\n severity=\"primary\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n }\r\n</div>\r\n","import { ModalService } from '@masterteam/components/modal';\r\nimport { Component, inject, AfterViewInit, input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderUiConfig,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\n\r\ninterface ConnectionFormDialogData {\r\n connection?: Record<string, unknown>;\r\n formSchema?: unknown;\r\n formulaSchemaId?: number;\r\n formulaConfig?: FormulaBuilderUiConfig | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-connection-form-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Card,\r\n DynamicForm,\r\n FormulaBuilder,\r\n Button,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './connection-form-dialog.html',\r\n styleUrls: ['./connection-form-dialog.scss'],\r\n})\r\nexport class ConnectionFormDialogComponent implements AfterViewInit, OnInit {\r\n readonly modalService: ModalService = inject(ModalService);\r\n private ref: ModalRef = inject(ModalRef);\r\n data = input<ConnectionFormDialogData | null>(null);\r\n readonly defaultToolbarTabs = [\r\n 'functions',\r\n 'properties',\r\n 'operators',\r\n ] as const;\r\n dynamicFormControl = new FormControl();\r\n formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n connectionData: any;\r\n formSchema: any;\r\n formulaSchemaId?: number;\r\n formulaConfig: FormulaBuilderUiConfig = {};\r\n\r\n ngOnInit() {\r\n this.connectionData = this.data()?.connection || {};\r\n this.formSchema = this.data()?.formSchema || [];\r\n this.formulaSchemaId = this.data()?.formulaSchemaId;\r\n this.formulaConfig = this.data()?.formulaConfig ?? {};\r\n }\r\n ngAfterViewInit(): void {\r\n this.dynamicFormControl.setValue(this.connectionData);\r\n this.formulaControl.setValue(\r\n (this.connectionData?.formula as FormulaBuilderValue | null) ?? null,\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n }\r\n\r\n onSave(): void {\r\n if (this.dynamicFormControl.valid) {\r\n this.ref.close({\r\n ...this.connectionData,\r\n ...this.dynamicFormControl.value,\r\n formula: this.formulaControl.value,\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<div\r\n [class]=\"\r\n modalService.contentClass +\r\n ' max-h-[80vh] overflow-x-hidden overflow-y-auto p-4'\r\n \"\r\n>\r\n <div class=\"space-y-6\">\r\n @if (formSchema?.sections?.length > 0) {\r\n <mt-dynamic-form\r\n class=\"block\"\r\n [formConfig]=\"formSchema\"\r\n [formControl]=\"dynamicFormControl\"\r\n ></mt-dynamic-form>\r\n }\r\n\r\n @if (formulaSchemaId) {\r\n <mt-card [title]=\"'structureBuilder.formula' | transloco\">\r\n <mt-formula-builder\r\n [formControl]=\"formulaControl\"\r\n [levelSchemaId]=\"formulaSchemaId\"\r\n [toolbarTabs]=\"formulaConfig.toolbarTabs ?? defaultToolbarTabs\"\r\n [codeOnly]=\"formulaConfig.codeOnly ?? false\"\r\n [hideToolbar]=\"formulaConfig.hideToolbar ?? false\"\r\n [hideStatusBar]=\"formulaConfig.hideStatusBar ?? false\"\r\n [isProcessBuilder]=\"formulaConfig.isProcessBuilder ?? false\"\r\n />\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'structureBuilder.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!dynamicFormControl.valid\"\r\n [label]=\"'structureBuilder.saveChanges' | transloco\"\r\n severity=\"primary\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ButtonGroup } from '@masterteam/components/button-group';\r\nimport { PointExtensions } from '@foblex/2d';\r\nimport { StructureBuilder } from '../structure-builder';\r\n\r\n@Component({\r\n selector: 'mt-toolbar',\r\n imports: [Button, ButtonGroup],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './toolbar.html',\r\n styleUrl: './toolbar.css',\r\n})\r\nexport class Toolbar {\r\n readonly size = input<'small' | 'large' | undefined>();\r\n\r\n private builderComponent = inject(StructureBuilder);\r\n\r\n public onZoomIn(): void {\r\n this.builderComponent.fZoomDirective()?.zoomIn();\r\n }\r\n\r\n public onZoomOut(): void {\r\n this.builderComponent.fZoomDirective()?.zoomOut();\r\n }\r\n\r\n public onFitToScreen(): void {\r\n this.builderComponent\r\n .fCanvasComponent()\r\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\r\n }\r\n\r\n public onOneToOne(): void {\r\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\r\n }\r\n public autoLayout(): void {\r\n this.builderComponent.maybeAutoLayout();\r\n }\r\n}\r\n","<mt-button\r\n (onClick)=\"autoLayout()\"\r\n class=\"bg-content rounded-(--p-button-border-radius)\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"arrow.refresh-cw-05\"\r\n></mt-button>\r\n\r\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\r\n <mt-button\r\n (onClick)=\"onZoomOut()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"general.minus\"\r\n ></mt-button>\r\n <mt-button\r\n (onClick)=\"onZoomIn()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"general.plus\"\r\n ></mt-button>\r\n <mt-button\r\n (onClick)=\"onFitToScreen()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"layout.grid-02\"\r\n ></mt-button>\r\n</mt-buttongroup>\r\n","import {\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n computed,\r\n inject,\r\n contentChild,\r\n TemplateRef,\r\n viewChild,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DialogService } from '@masterteam/components/dialog';\r\nimport { DrawerService } from '@masterteam/components/dynamic-drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport {\r\n EFMarkerType,\r\n FCanvasComponent,\r\n FCreateConnectionEvent,\r\n FCreateNodeEvent,\r\n FFlowComponent,\r\n FFlowModule,\r\n FZoomDirective,\r\n} from '@foblex/flow';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\r\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Toolbar } from './toolbar/toolbar';\r\nimport type { FormulaBuilderUiConfig } from '@masterteam/formula-builder';\r\n\r\n// 🔁 dagre & helpers – same approach as lib sample\r\nimport * as dagre from 'dagre';\r\nimport { graphlib } from 'dagre';\r\nimport Graph = graphlib.Graph;\r\nimport { IPoint, PointExtensions } from '@foblex/2d';\r\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\r\n\r\nexport interface Node {\r\n configuration?: {\r\n x?: number;\r\n y?: number;\r\n };\r\n [key: string]: any;\r\n loading?: boolean;\r\n}\r\n\r\nexport interface NodeFieldsMapping {\r\n id?: string;\r\n name?: string;\r\n icon?: string;\r\n color?: string;\r\n}\r\n\r\nexport interface AvailableNode {\r\n id: string;\r\n label: string;\r\n icon: string;\r\n color: string;\r\n tab: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Connection {\r\n id: string;\r\n from: string;\r\n to: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Actions {\r\n key: string;\r\n icon: string;\r\n variant: string;\r\n size: string;\r\n severity?: string;\r\n tooltip?: string;\r\n /**\r\n * Optional condition function to determine if action should be shown\r\n * @param node - The node object to evaluate\r\n * @returns true to show the action, false to hide it\r\n * @example\r\n * // Show delete only if node is not initial\r\n * condition: (node) => !node.isInitial\r\n *\r\n * // Show edit only if node has specific status\r\n * condition: (node) => node.status === 'draft'\r\n */\r\n condition?: (node: any) => boolean;\r\n}\r\n\r\nexport interface NodeActionEvent {\r\n action: Actions;\r\n node: AvailableNode;\r\n}\r\n\r\nexport interface NodeDialogFooterConfig {\r\n showSaveButton?: () => boolean;\r\n disableSaveButton?: () => boolean;\r\n}\r\n\r\nexport type LayoutDirection = 'TB' | 'LR';\r\n\r\nexport type SBActionType =\r\n | 'createNode'\r\n | 'updateNode'\r\n | 'deleteNode'\r\n | 'createConnection'\r\n | 'updateConnection'\r\n | 'deleteConnection'\r\n | 'startCreating'\r\n | 'startUpdating';\r\n\r\nexport interface SBAction {\r\n action: SBActionType;\r\n data?: any;\r\n}\r\n\r\n// ✨ Direction & config — mirrors lib sample\r\nenum Direction {\r\n LEFT_TO_RIGHT = 'LR',\r\n RIGHT_TO_LEFT = 'RL',\r\n TOP_TO_BOTTOM = 'TB',\r\n}\r\n\r\nconst CONFIGURATION = {\r\n [Direction.LEFT_TO_RIGHT]: {\r\n outputSide: 'right',\r\n inputSide: 'left',\r\n },\r\n [Direction.RIGHT_TO_LEFT]: {\r\n outputSide: 'left',\r\n inputSide: 'right',\r\n },\r\n [Direction.TOP_TO_BOTTOM]: {\r\n outputSide: 'bottom',\r\n inputSide: 'top',\r\n },\r\n} as const;\r\n\r\n@Component({\r\n selector: 'mt-structure-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n FFlowModule,\r\n TabsModule,\r\n Button,\r\n Icon,\r\n Card,\r\n Toolbar,\r\n Skeleton,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './structure-builder.html',\r\n styleUrl: './structure-builder.scss',\r\n providers: [DialogService],\r\n host: {\r\n class:\r\n 'flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden',\r\n },\r\n})\r\nexport class StructureBuilder {\r\n readonly dialogService = inject(DialogService);\r\n readonly drawerService = inject(DrawerService);\r\n readonly modal: ModalService = inject(ModalService);\r\n private transloco = inject(TranslocoService);\r\n private dir = inject(Directionality, { optional: true });\r\n nodeActionsEvent = output<NodeActionEvent>();\r\n action = output<SBAction>();\r\n availableNodes = input<AvailableNode[]>([]);\r\n protected fCanvas = viewChild(FCanvasComponent);\r\n public fFlowComponent = viewChild(FFlowComponent);\r\n public fCanvasComponent = viewChild(FCanvasComponent);\r\n public fZoomDirective = viewChild(FZoomDirective);\r\n nodeForm = input<DynamicFormConfig>({ sections: [] });\r\n nodeDialogFooterConfig = input<NodeDialogFooterConfig | null>(null);\r\n connectionForm = input<DynamicFormConfig>({ sections: [] });\r\n connectionFormulaSchemaId = input<number | undefined>(undefined);\r\n connectionFormulaConfig = input<FormulaBuilderUiConfig | null>(null);\r\n nodeActions = input<Actions[]>([]);\r\n nodeFields = input<NodeFieldsMapping>({\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n });\r\n\r\n isAutoLayout = input<boolean>(true);\r\n readonly = input<boolean>(false);\r\n addModalType = input<'drawer' | 'dialog'>('dialog');\r\n updateModalType = input<'drawer' | 'dialog'>('drawer');\r\n addModalStyleClass = input<string>('!w-[35rem]');\r\n updateModalStyleClass = input<string>('!w-[35rem]');\r\n addModalHeader = input<string>('');\r\n updateModalHeader = input<string>('');\r\n appendTo = input<string>('');\r\n availableTabsClass = input<string>('');\r\n layoutDirection = input<LayoutDirection>(Direction.TOP_TO_BOTTOM);\r\n nodes = model<Node[]>([]);\r\n connections = model<Connection[]>([]);\r\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\r\n nodeTemplate = input<TemplateRef<any> | null>(null);\r\n nodeTemplateContent = contentChild<TemplateRef<any>>('nodeTemplate');\r\n protected readonly effectiveNodeTemplate = computed(\r\n () => this.nodeTemplate() || this.nodeTemplateContent() || null,\r\n );\r\n protected readonly contentDirection = computed(\r\n () => this.dir?.value ?? 'ltr',\r\n );\r\n private collapsedConnectionIds = signal<Set<string>>(new Set());\r\n\r\n activeTab = signal('0');\r\n protected readonly eMarkerType = EFMarkerType;\r\n\r\n protected readonly effectiveDirection = computed(() =>\r\n this.resolveDirection(this.layoutDirection()),\r\n );\r\n protected readonly configuration = computed(\r\n () => CONFIGURATION[this.effectiveDirection()],\r\n );\r\n protected readonly nodeActionHandler = (action: Actions, node: any): void => {\r\n this.buttonAction(action, node);\r\n };\r\n protected readonly getFilteredNodeActions = (\r\n node: AvailableNode,\r\n ): Actions[] =>\r\n this.readonly()\r\n ? []\r\n : this.nodeActions().filter(\r\n (action) => !action.condition || action.condition(node),\r\n );\r\n private positions = signal<Record<string, IPoint>>({});\r\n private dialogRef: any;\r\n protected fields = computed(() => {\r\n const inputFields = this.nodeFields();\r\n return {\r\n id: inputFields.id || 'id',\r\n name: inputFields.name || 'name',\r\n icon: inputFields.icon || 'icon',\r\n color: inputFields.color || 'color',\r\n } as any;\r\n });\r\n\r\n availableTabs = computed(() => {\r\n const tabsSet = new Set<string>();\r\n this.availableNodes().forEach((node) => {\r\n if (node.tab && Array.isArray(node.tab)) {\r\n node.tab.forEach((tab) => tabsSet.add(tab));\r\n }\r\n });\r\n return Array.from(tabsSet).sort();\r\n });\r\n\r\n currentTabNodes = computed(() => {\r\n const tabs = this.availableTabs();\r\n const currentTabIndex = parseInt(this.activeTab());\r\n if (currentTabIndex >= tabs.length) return [];\r\n const currentTab = tabs[currentTabIndex];\r\n return this.availableNodes().filter((node) =>\r\n node.tab.includes(currentTab),\r\n );\r\n });\r\n\r\n nodesWithComputedProps = computed(() => {\r\n const fields = this.fields();\r\n const pos = this.positions();\r\n return this.nodes().map((node) => {\r\n const _computedId = String(this.getNestedValue(node, fields.id));\r\n const _computedName = this.getNestedValue(node, fields.name);\r\n const _computedIcon = this.getNestedValue(node, fields.icon);\r\n const _computedColor = this.getNestedValue(node, fields.color);\r\n const configuration = {\r\n ...(node.configuration ?? {}),\r\n ...(pos[_computedId] ?? {}),\r\n };\r\n return {\r\n ...node,\r\n _computedId,\r\n _computedName,\r\n _computedIcon,\r\n _computedColor,\r\n configuration,\r\n };\r\n });\r\n });\r\n connectionsComputed = computed(() =>\r\n this.connections()?.map((c) => ({\r\n ...c,\r\n from: String(c.from),\r\n to: String(c.to),\r\n })),\r\n );\r\n coreFields = computed(() => {\r\n const fields = this.fields();\r\n return new Set([\r\n ...Object.values(fields),\r\n 'configuration',\r\n '_computedId',\r\n '_computedName',\r\n '_computedIcon',\r\n '_computedColor',\r\n ]);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const direction = this.effectiveDirection();\r\n this.getData(new dagre.graphlib.Graph(), direction);\r\n });\r\n effect(() => {\r\n const connectionIds = new Set(\r\n this.connectionsComputed().map((connection) => connection.id),\r\n );\r\n this.collapsedConnectionIds.update((current) => {\r\n if (current.size === 0) return current;\r\n let changed = false;\r\n const next = new Set<string>();\r\n current.forEach((id) => {\r\n if (connectionIds.has(id)) {\r\n next.add(id);\r\n } else {\r\n changed = true;\r\n }\r\n });\r\n return changed ? next : current;\r\n });\r\n });\r\n }\r\n\r\n protected onLoaded(): void {\r\n this.fitToScreen();\r\n }\r\n\r\n onCreateNode(event: FCreateNodeEvent): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const nodeData = event.data as AvailableNode;\r\n if (!nodeData) return;\r\n\r\n const newNode: Node = {\r\n ...nodeData,\r\n configuration: {\r\n x: event.rect.x,\r\n y: event.rect.y,\r\n },\r\n };\r\n\r\n if (this.nodeForm()?.sections.length > 0 || this.nodeDialogTemplate()) {\r\n this.openNodeDialog(newNode, true);\r\n } else {\r\n this.action.emit({ action: 'createNode', data: newNode });\r\n }\r\n }\r\n\r\n onNodePositionChange(event: any, nodeId: string): void {\r\n const position = event;\r\n if (nodeId && position) {\r\n this.positions.update((p) => ({\r\n ...p,\r\n [nodeId]: { x: position.x, y: position.y },\r\n }));\r\n }\r\n }\r\n\r\n onCreateConnection(event: FCreateConnectionEvent): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const newConnection: Connection = {\r\n id: this.generateConnectionId(),\r\n from: event.fOutputId!,\r\n to: event.fInputId!,\r\n };\r\n if (!event.fInputId! || !event.fOutputId!) {\r\n return;\r\n }\r\n const exists = this.connectionsComputed().some(\r\n (conn) =>\r\n conn.from === newConnection.from && conn.to === newConnection.to,\r\n );\r\n\r\n if (!exists) {\r\n if (\r\n this.connectionForm()?.sections.length > 0 ||\r\n this.connectionFormulaSchemaId()\r\n ) {\r\n this.openConnectionDialog(newConnection, true);\r\n } else {\r\n this.action.emit({ action: 'createConnection', data: newConnection });\r\n }\r\n }\r\n }\r\n\r\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n const modalType = isNewNode ? this.addModalType() : this.updateModalType();\r\n this.action.emit({\r\n action: isNewNode ? 'startCreating' : 'startUpdating',\r\n data: node,\r\n });\r\n\r\n const styleClass = isNewNode\r\n ? this.addModalStyleClass()\r\n : this.updateModalStyleClass();\r\n const header = isNewNode\r\n ? this.addModalHeader() ||\r\n this.transloco.translate('structureBuilder.addNode')\r\n : this.updateModalHeader() ||\r\n this.transloco.translate('structureBuilder.editNodeProperties');\r\n\r\n const config = {\r\n header: header,\r\n styleClass: styleClass,\r\n focusOnShow: this.nodeDialogTemplate() ? false : true,\r\n appendTo: this.appendTo(),\r\n position: modalType === 'drawer' ? 'end' : undefined,\r\n dismissible: true,\r\n modal: true,\r\n\r\n inputValues: {\r\n data: {\r\n node: node,\r\n formSchema: this.nodeForm(),\r\n template: this.nodeDialogTemplate(),\r\n footerConfig: this.nodeDialogFooterConfig(),\r\n },\r\n },\r\n };\r\n this.dialogRef = this.modal.openModal(\r\n NodeFormDialogComponent,\r\n modalType,\r\n config,\r\n );\r\n\r\n this.dialogRef.onClose.subscribe((result: any) => {\r\n if (result) {\r\n if (isNewNode) {\r\n const newNodeWithFormData = { ...node, ...result };\r\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\r\n } else {\r\n this.onNodeFormSubmit(result);\r\n }\r\n }\r\n });\r\n }\r\n\r\n openConnectionDialog(connection: Connection, isNew: boolean = false): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const ref = this.modal.openModal(ConnectionFormDialogComponent, 'dialog', {\r\n header: this.transloco.translate(\r\n isNew\r\n ? 'structureBuilder.addConnectionProperties'\r\n : 'structureBuilder.editConnectionProperties',\r\n ),\r\n width: this.connectionFormulaSchemaId() ? '960px' : '600px',\r\n\r\n inputValues: {\r\n data: {\r\n connection: connection,\r\n formSchema: this.connectionForm(),\r\n formulaSchemaId: this.connectionFormulaSchemaId(),\r\n formulaConfig: this.connectionFormulaConfig(),\r\n },\r\n },\r\n });\r\n\r\n ref.onClose.subscribe((result: any) => {\r\n if (result) {\r\n this.onConnectionFormSubmit(result, isNew);\r\n }\r\n });\r\n }\r\n\r\n onNodeFormSubmit(formData: any): void {\r\n const nodeId = formData[this.fields().id];\r\n if (nodeId) {\r\n this.action.emit({ action: 'updateNode', data: formData });\r\n }\r\n }\r\n\r\n onConnectionFormSubmit(formData: any, isNew: boolean = false): void {\r\n if (isNew) {\r\n this.action.emit({ action: 'createConnection', data: formData });\r\n return;\r\n }\r\n\r\n const connectionId = formData.id;\r\n if (connectionId) {\r\n this.action.emit({ action: 'updateConnection', data: formData });\r\n }\r\n }\r\n\r\n removeNode(node: any): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.action.emit({ action: 'deleteNode', data: node });\r\n }\r\n\r\n removeConnection(connection: any): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.action.emit({ action: 'deleteConnection', data: connection });\r\n }\r\n\r\n buttonAction(action: any, node: any) {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.nodeActionsEvent.emit({ action, node });\r\n if (action.key === 'edit') {\r\n this.openNodeDialog(node);\r\n } else if (action.key === 'delete') {\r\n this.removeNode(node);\r\n }\r\n }\r\n\r\n toggleConnectionCollapse(connection: Connection): void {\r\n this.collapsedConnectionIds.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(connection.id)) {\r\n next.delete(connection.id);\r\n } else {\r\n next.add(connection.id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n protected fitToScreen(): void {\r\n const area = this.nodes()?.length * 70;\r\n this.fCanvasComponent()?.fitToScreen(\r\n PointExtensions.initialize(area, area),\r\n false,\r\n );\r\n }\r\n\r\n private getData(graph: Graph, direction: Direction): void {\r\n if (this.isAutoLayout()) {\r\n this.fFlowComponent()?.reset();\r\n }\r\n this.updateGraph(graph, direction);\r\n this.applyGraphPositions(graph);\r\n }\r\n\r\n private updateGraph(graph: Graph, direction: Direction): void {\r\n graph.setGraph({ rankdir: direction });\r\n\r\n const SIZE = { width: 300, height: 200 };\r\n const nodeIds = this.nodes()\r\n .map((node) => this.getNestedValue(node, this.fields().id))\r\n .filter(\r\n (nodeId): nodeId is string | number =>\r\n nodeId !== null && nodeId !== undefined && `${nodeId}` !== '',\r\n )\r\n .map(String);\r\n\r\n nodeIds.forEach((nodeId) => {\r\n graph.setNode(nodeId, {\r\n width: SIZE.width,\r\n height: SIZE.height,\r\n });\r\n });\r\n\r\n const validConnections = this.connectionsComputed().filter(\r\n (connection) =>\r\n !!connection.from &&\r\n !!connection.to &&\r\n connection.from !== connection.to,\r\n );\r\n\r\n if (validConnections.length > 0) {\r\n validConnections.forEach((connection) => {\r\n graph.setEdge(connection.from, connection.to, {});\r\n });\r\n } else if (nodeIds.length > 1) {\r\n // Dagre stacks disconnected nodes vertically for LR and horizontally for TB.\r\n // Add a temporary chain so empty flows still follow the requested direction.\r\n for (let index = 0; index < nodeIds.length - 1; index++) {\r\n graph.setEdge(nodeIds[index], nodeIds[index + 1], {});\r\n }\r\n }\r\n\r\n dagre.layout(graph);\r\n }\r\n\r\n private applyGraphPositions(graph: Graph): void {\r\n const positionsById: Record<string, IPoint> = {};\r\n graph.nodes().forEach((key) => {\r\n const gNode = graph.node(key);\r\n positionsById[key] = { x: gNode.x, y: gNode.y };\r\n });\r\n this.positions.update((old) => ({ ...old, ...positionsById }));\r\n }\r\n\r\n private getNestedValue(obj: unknown, path?: string | null): unknown {\r\n if (!path) return undefined;\r\n const keys = path\r\n .replace(/\\[(\\w+)\\]/g, '.$1')\r\n .replace(/^\\./, '')\r\n .split('.')\r\n .filter(Boolean);\r\n\r\n return keys.reduce<unknown>(\r\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\r\n obj,\r\n );\r\n }\r\n\r\n maybeAutoLayout(): void {\r\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\r\n this.getData(new dagre.graphlib.Graph(), this.effectiveDirection());\r\n }\r\n\r\n private generateConnectionId(): string {\r\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n\r\n private extractNodeId(connectionEndId: string): string {\r\n return (connectionEndId || '').replace(/-(in|out)$/, '');\r\n }\r\n\r\n private resolveDirection(layoutDirection: LayoutDirection): Direction {\r\n if (layoutDirection === Direction.LEFT_TO_RIGHT) {\r\n return this.dir?.value === 'rtl'\r\n ? Direction.RIGHT_TO_LEFT\r\n : Direction.LEFT_TO_RIGHT;\r\n }\r\n return Direction.TOP_TO_BOTTOM;\r\n }\r\n\r\n private buildAdjacency(connections: Connection[]): Map<string, string[]> {\r\n const adjacency = new Map<string, string[]>();\r\n connections.forEach((connection) => {\r\n if (!connection.from || !connection.to) return;\r\n const children = adjacency.get(connection.from) ?? [];\r\n children.push(connection.to);\r\n adjacency.set(connection.from, children);\r\n });\r\n return adjacency;\r\n }\r\n\r\n private getDescendants(\r\n startId: string,\r\n adjacency: Map<string, string[]>,\r\n ): Set<string> {\r\n const visited = new Set<string>();\r\n const stack = [startId];\r\n while (stack.length > 0) {\r\n const current = stack.pop();\r\n if (!current || visited.has(current)) {\r\n continue;\r\n }\r\n visited.add(current);\r\n const children = adjacency.get(current);\r\n if (children) {\r\n children.forEach((child) => stack.push(child));\r\n }\r\n }\r\n return visited;\r\n }\r\n}\r\n","<!-- structure-builder.html -->\r\n@if (!readonly() && availableTabs().length > 0) {\r\n <mt-card\r\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\r\n >\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <div class=\"flex items-center justify-between px-4 pt-5\">\r\n <h3 class=\"text-xl font-semibold\">\r\n {{ \"structureBuilder.levelTemplates\" | transloco }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs \"\r\n class=\"h-full overflow-hidden\"\r\n >\r\n <p-tablist>\r\n @for (tab of availableTabs(); track tab; let i = $index) {\r\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\r\n @for (tab of availableTabs(); track tab; let i = $index) {\r\n <p-tabpanel [value]=\"i.toString()\">\r\n <p class=\"text-xs text-muted py-3 px-4\">\r\n {{ \"structureBuilder.dragToAdd\" | transloco }}\r\n </p>\r\n\r\n <!-- Node List -->\r\n <div class=\"space-y-1 px-4\">\r\n @for (node of currentTabNodes(); track node.id) {\r\n <div\r\n fExternalItem\r\n [fData]=\"node\"\r\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\"\r\n >\r\n <!-- Node Icon with color -->\r\n <div class=\"text-primary text-lg\">\r\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\r\n </div>\r\n\r\n <!-- Node Name -->\r\n <span class=\"text-base font-medium flex-1\">{{\r\n node.label\r\n }}</span>\r\n <mt-icon class=\"text-lg\" icon=\"general.menu-05\"></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (currentTabNodes().length === 0) {\r\n <div class=\"text-center py-8 text-gray-400\">\r\n <p class=\"text-sm\">\r\n {{\r\n \"structureBuilder.allItemsInUse\"\r\n | transloco: { tab: tab }\r\n }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n </ng-template>\r\n </mt-card>\r\n} @else if (!readonly() && availableNodes().length > 0) {\r\n <div [ngClass]=\"availableTabsClass() || 'absolute top-4 start-4 z-1 w-64'\">\r\n <mt-card [title]=\"'structureBuilder.steps' | transloco\">\r\n <div class=\"flex flex-col gap-2\">\r\n @for (node of availableNodes(); track node.id) {\r\n <div\r\n fExternalItem\r\n [fData]=\"node\"\r\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 bg-content\"\r\n >\r\n <!-- Node Icon with color -->\r\n <div class=\"text-primary text-lg\">\r\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\r\n </div>\r\n\r\n <!-- Node Name -->\r\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n </div>\r\n}\r\n<!-- Left Sidebar -->\r\n\r\n<!-- Main Canvas Area -->\r\n<div class=\"flex-1 z-0 relative\">\r\n <ng-content select=\"[flowContent]\"></ng-content>\r\n\r\n <f-flow\r\n fDraggable\r\n dir=\"ltr\"\r\n (fLoaded)=\"onLoaded()\"\r\n (fCreateNode)=\"onCreateNode($event)\"\r\n (fCreateConnection)=\"onCreateConnection($event)\"\r\n class=\"size-full\"\r\n >\r\n <f-background>\r\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\r\n </f-background>\r\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\r\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n </f-connection-for-create>\r\n <f-snap-connection\r\n fBehavior=\"fixed\"\r\n fType=\"segment\"\r\n class=\"z-1\"\r\n [fSnapThreshold]=\"100\"\r\n >\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n </f-snap-connection>\r\n\r\n <f-connection-for-create></f-connection-for-create>\r\n\r\n <!-- Enhanced Connections with Edit Button -->\r\n @for (connection of connectionsComputed(); track connection.id) {\r\n <f-connection\r\n [fReassignDisabled]=\"true\"\r\n [fOutputId]=\"connection.from\"\r\n [fInputId]=\"connection.to\"\r\n fBehavior=\"fixed\"\r\n fType=\"segment\"\r\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\r\n >\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.SELECTED_START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.SELECTED_END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n @if (!readonly()) {\r\n <div\r\n fConnectionCenter\r\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\r\n >\r\n @if (!connection.loading) {\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n [icon]=\"'general.edit-05'\"\r\n (click)=\"openConnectionDialog(connection)\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n severity=\"danger\"\r\n [icon]=\"'general.trash-01'\"\r\n (click)=\"removeConnection(connection)\"\r\n >\r\n </mt-button>\r\n } @else {\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n [icon]=\"'general.loading-01'\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n }\r\n </f-connection>\r\n }\r\n\r\n <!-- Enhanced Nodes with Edit Button -->\r\n @for (node of nodesWithComputedProps(); track node._computedId) {\r\n <mt-card\r\n fNode\r\n fDragHandle\r\n [fNodePosition]=\"{\r\n x: node.configuration?.x || 200,\r\n y: node.configuration?.y || 100,\r\n }\"\r\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\r\n [style.--node-data-border-color]=\"node._computedColor\"\r\n >\r\n <ng-template #headless>\r\n @if (!node.loading) {\r\n <div [attr.dir]=\"contentDirection()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"\r\n effectiveNodeTemplate() || defaultNodeTemplate\r\n \"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node,\r\n node: node,\r\n actions: getFilteredNodeActions(node),\r\n onAction: nodeActionHandler,\r\n dir: contentDirection(),\r\n }\"\r\n >\r\n </ng-container>\r\n </div>\r\n <div\r\n fNodeInput\r\n [fInputId]=\"node._computedId\"\r\n [fInputConnectableSide]=\"configuration().inputSide\"\r\n [fInputMultiple]=\"true\"\r\n [ngClass]=\"configuration().inputSide\"\r\n ></div>\r\n\r\n <div\r\n fNodeOutput\r\n [fOutputId]=\"node._computedId\"\r\n [fOutputConnectableSide]=\"configuration().outputSide\"\r\n [isSelfConnectable]=\"false\"\r\n [fOutputMultiple]=\"true\"\r\n [ngClass]=\"configuration().outputSide\"\r\n class=\"bg-surface-50 dark:bg-surface-900\"\r\n ></div>\r\n } @else {\r\n <p-skeleton height=\"10rem\" width=\"15rem\" />\r\n }\r\n\r\n <!-- Node Header with Edit Button -->\r\n </ng-template>\r\n </mt-card>\r\n }\r\n\r\n <ng-template\r\n #defaultNodeTemplate\r\n let-node\r\n let-actions=\"actions\"\r\n let-onAction=\"onAction\"\r\n >\r\n <div\r\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)\"\r\n >\r\n @if (node._computedIcon) {\r\n <mt-icon\r\n class=\"text-2xl text-primary\"\r\n [icon]=\"node._computedIcon\"\r\n />\r\n }\r\n <div>{{ node._computedName }}</div>\r\n </div>\r\n <div\r\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\r\n >\r\n @for (action of actions; track action.key) {\r\n <mt-button\r\n [size]=\"action?.size || 'small'\"\r\n [variant]=\"action?.variant\"\r\n [icon]=\"action?.icon\"\r\n [tooltip]=\"action?.tooltip\"\r\n [severity]=\"action?.severity\"\r\n (onClick)=\"onAction(action, node)\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n </ng-template>\r\n </f-canvas>\r\n </f-flow>\r\n</div>\r\n@if (!readonly()) {\r\n <mt-toolbar />\r\n}\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/structure-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4"],"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, OnInit, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DrawerController } from '@masterteam/components/dynamic-drawer';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\nexport interface NodeFormData {\r\n id?: string;\r\n label?: string;\r\n description?: string;\r\n [key: string]: any;\r\n}\r\n\r\ninterface NodeDialogFooterConfig {\r\n showSaveButton?: () => boolean;\r\n disableSaveButton?: () => boolean;\r\n}\r\n\r\ninterface NodeFormDialogInputData {\r\n node?: NodeFormData;\r\n formSchema?: unknown;\r\n template?: unknown;\r\n footerConfig?: NodeDialogFooterConfig | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-node-form-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n DynamicForm,\r\n Button,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './node-form-dialog.html',\r\n styleUrls: ['./node-form-dialog.scss'],\r\n})\r\nexport class NodeFormDialogComponent implements AfterViewInit, OnInit {\r\n readonly modalService: ModalService = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n // DrawerController is optional - only available when opened as drawer\r\n readonly drawerController = inject(DrawerController, { optional: true });\r\n dynamicFormControl = new FormControl();\r\n nodeData: NodeFormData = {};\r\n formSchema: any;\r\n data = input<NodeFormDialogInputData | null>(null);\r\n\r\n ngOnInit() {\r\n this.nodeData = this.data()?.node ?? {};\r\n this.formSchema = this.data()?.formSchema ?? [];\r\n }\r\n ngAfterViewInit(): void {\r\n this.dynamicFormControl.setValue(this.nodeData);\r\n }\r\n get templateContext() {\r\n return {\r\n node: this.nodeData,\r\n save: (item: any = {}) => this.onSave(item),\r\n cancel: () => this.onCancel(),\r\n close: () => this.onCancel(),\r\n drawerController: this.drawerController,\r\n };\r\n }\r\n\r\n showSaveButton(): boolean {\r\n return this.data()?.footerConfig?.showSaveButton?.() ?? true;\r\n }\r\n\r\n disableSaveButton(): boolean {\r\n return (\r\n this.data()?.footerConfig?.disableSaveButton?.() ??\r\n !this.dynamicFormControl.valid\r\n );\r\n }\r\n\r\n onSave(item: any = {}) {\r\n const updatedNode = {\r\n ...this.nodeData,\r\n ...this.dynamicFormControl.value,\r\n ...item,\r\n };\r\n this.ref.close(updatedNode);\r\n }\r\n\r\n onCancel() {\r\n this.ref.close();\r\n }\r\n}\r\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\r\n @if (this.data()?.template) {\r\n <ng-container\r\n *ngTemplateOutlet=\"data().template; context: templateContext\"\r\n ></ng-container>\r\n } @else {\r\n @if (nodeData) {\r\n <mt-dynamic-form\r\n [formConfig]=\"formSchema\"\r\n [formControl]=\"dynamicFormControl\"\r\n ></mt-dynamic-form>\r\n }\r\n }\r\n</div>\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'structureBuilder.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n @if (showSaveButton()) {\r\n <mt-button\r\n [disabled]=\"disableSaveButton()\"\r\n [label]=\"'structureBuilder.saveChanges' | transloco\"\r\n severity=\"primary\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n }\r\n</div>\r\n","import { ModalService } from '@masterteam/components/modal';\r\nimport { Component, inject, AfterViewInit, input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Card } from '@masterteam/components/card';\r\nimport {\r\n FormulaBuilder,\r\n type FormulaBuilderUiConfig,\r\n type FormulaBuilderValue,\r\n} from '@masterteam/formula-builder';\r\n\r\ninterface ConnectionFormDialogData {\r\n connection?: Record<string, unknown>;\r\n formSchema?: unknown;\r\n formulaSchemaId?: number;\r\n formulaConfig?: FormulaBuilderUiConfig | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-connection-form-dialog',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Card,\r\n DynamicForm,\r\n FormulaBuilder,\r\n Button,\r\n ReactiveFormsModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './connection-form-dialog.html',\r\n styleUrls: ['./connection-form-dialog.scss'],\r\n})\r\nexport class ConnectionFormDialogComponent implements AfterViewInit, OnInit {\r\n readonly modalService: ModalService = inject(ModalService);\r\n private ref: ModalRef = inject(ModalRef);\r\n data = input<ConnectionFormDialogData | null>(null);\r\n readonly defaultToolbarTabs = [\r\n 'functions',\r\n 'properties',\r\n 'operators',\r\n ] as const;\r\n dynamicFormControl = new FormControl();\r\n formulaControl = new FormControl<FormulaBuilderValue | null>(null);\r\n connectionData: any;\r\n formSchema: any;\r\n formulaSchemaId?: number;\r\n formulaConfig: FormulaBuilderUiConfig = {};\r\n\r\n ngOnInit() {\r\n this.connectionData = this.data()?.connection || {};\r\n this.formSchema = this.data()?.formSchema || [];\r\n this.formulaSchemaId = this.data()?.formulaSchemaId;\r\n this.formulaConfig = this.data()?.formulaConfig ?? {};\r\n }\r\n ngAfterViewInit(): void {\r\n this.dynamicFormControl.setValue(this.connectionData);\r\n this.formulaControl.setValue(\r\n (this.connectionData?.formula as FormulaBuilderValue | null) ?? null,\r\n {\r\n emitEvent: false,\r\n },\r\n );\r\n }\r\n\r\n onSave(): void {\r\n if (this.dynamicFormControl.valid) {\r\n this.ref.close({\r\n ...this.connectionData,\r\n ...this.dynamicFormControl.value,\r\n formula: this.formulaControl.value,\r\n });\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.ref.close();\r\n }\r\n}\r\n","<div\r\n [class]=\"\r\n modalService.contentClass +\r\n ' max-h-[80vh] overflow-x-hidden overflow-y-auto p-4'\r\n \"\r\n>\r\n <div class=\"space-y-6\">\r\n @if (formSchema?.sections?.length > 0) {\r\n <mt-dynamic-form\r\n class=\"block\"\r\n [formConfig]=\"formSchema\"\r\n [formControl]=\"dynamicFormControl\"\r\n ></mt-dynamic-form>\r\n }\r\n\r\n @if (formulaSchemaId) {\r\n <mt-card [title]=\"'structureBuilder.formula' | transloco\">\r\n <mt-formula-builder\r\n [formControl]=\"formulaControl\"\r\n [levelSchemaId]=\"formulaSchemaId\"\r\n [toolbarTabs]=\"formulaConfig.toolbarTabs ?? defaultToolbarTabs\"\r\n [codeOnly]=\"formulaConfig.codeOnly ?? false\"\r\n [hideToolbar]=\"formulaConfig.hideToolbar ?? false\"\r\n [hideStatusBar]=\"formulaConfig.hideStatusBar ?? false\"\r\n [isProcessBuilder]=\"formulaConfig.isProcessBuilder ?? false\"\r\n />\r\n </mt-card>\r\n }\r\n </div>\r\n</div>\r\n\r\n<div [class]=\"modalService.footerClass\">\r\n <mt-button\r\n [label]=\"'structureBuilder.cancel' | transloco\"\r\n severity=\"secondary\"\r\n (onClick)=\"onCancel()\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n [disabled]=\"!dynamicFormControl.valid\"\r\n [label]=\"'structureBuilder.saveChanges' | transloco\"\r\n severity=\"primary\"\r\n (onClick)=\"onSave()\"\r\n >\r\n </mt-button>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ButtonGroup } from '@masterteam/components/button-group';\r\nimport { PointExtensions } from '@foblex/2d';\r\nimport { StructureBuilder } from '../structure-builder';\r\n\r\n@Component({\r\n selector: 'mt-toolbar',\r\n imports: [Button, ButtonGroup],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './toolbar.html',\r\n styleUrl: './toolbar.css',\r\n})\r\nexport class Toolbar {\r\n readonly size = input<'small' | 'large' | undefined>();\r\n\r\n private builderComponent = inject(StructureBuilder);\r\n\r\n public onZoomIn(): void {\r\n this.builderComponent.fZoomDirective()?.zoomIn();\r\n }\r\n\r\n public onZoomOut(): void {\r\n this.builderComponent.fZoomDirective()?.zoomOut();\r\n }\r\n\r\n public onFitToScreen(): void {\r\n this.builderComponent\r\n .fCanvasComponent()\r\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\r\n }\r\n\r\n public onOneToOne(): void {\r\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\r\n }\r\n public autoLayout(): void {\r\n this.builderComponent.maybeAutoLayout();\r\n }\r\n}\r\n","<mt-button\r\n (onClick)=\"autoLayout()\"\r\n class=\"bg-content rounded-(--p-button-border-radius)\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"arrow.refresh-cw-05\"\r\n></mt-button>\r\n\r\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\r\n <mt-button\r\n (onClick)=\"onZoomOut()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"general.minus\"\r\n ></mt-button>\r\n <mt-button\r\n (onClick)=\"onZoomIn()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"general.plus\"\r\n ></mt-button>\r\n <mt-button\r\n (onClick)=\"onFitToScreen()\"\r\n size=\"size()\"\r\n variant=\"outlined\"\r\n severity=\"secondary\"\r\n icon=\"layout.grid-02\"\r\n ></mt-button>\r\n</mt-buttongroup>\r\n","import {\r\n Component,\r\n input,\r\n model,\r\n signal,\r\n computed,\r\n inject,\r\n contentChild,\r\n TemplateRef,\r\n viewChild,\r\n output,\r\n effect,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { DialogService } from '@masterteam/components/dialog';\r\nimport { DrawerService } from '@masterteam/components/dynamic-drawer';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Directionality } from '@angular/cdk/bidi';\r\nimport { TabsModule } from 'primeng/tabs';\r\nimport {\r\n EFMarkerType,\r\n FCanvasComponent,\r\n FCreateConnectionEvent,\r\n FCreateNodeEvent,\r\n FFlowComponent,\r\n FFlowModule,\r\n FZoomDirective,\r\n} from '@foblex/flow';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\r\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Toolbar } from './toolbar/toolbar';\r\nimport type { FormulaBuilderUiConfig } from '@masterteam/formula-builder';\r\n\r\n// 🔁 dagre & helpers – same approach as lib sample\r\nimport * as dagre from 'dagre';\r\nimport { graphlib } from 'dagre';\r\nimport Graph = graphlib.Graph;\r\nimport { IPoint, PointExtensions } from '@foblex/2d';\r\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\r\n\r\nexport interface Node {\r\n configuration?: {\r\n x?: number;\r\n y?: number;\r\n };\r\n [key: string]: any;\r\n loading?: boolean;\r\n}\r\n\r\nexport interface NodeFieldsMapping {\r\n id?: string;\r\n name?: string;\r\n icon?: string;\r\n color?: string;\r\n}\r\n\r\nexport interface AvailableNode {\r\n id: string;\r\n label: string;\r\n icon: string;\r\n color: string;\r\n tab: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Connection {\r\n id: string;\r\n from: string;\r\n to: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface Actions {\r\n key: string;\r\n icon: string;\r\n variant: string;\r\n size: string;\r\n severity?: string;\r\n tooltip?: string;\r\n /**\r\n * Optional condition function to determine if action should be shown\r\n * @param node - The node object to evaluate\r\n * @returns true to show the action, false to hide it\r\n * @example\r\n * // Show delete only if node is not initial\r\n * condition: (node) => !node.isInitial\r\n *\r\n * // Show edit only if node has specific status\r\n * condition: (node) => node.status === 'draft'\r\n */\r\n condition?: (node: any) => boolean;\r\n}\r\n\r\nexport interface NodeActionEvent {\r\n action: Actions;\r\n node: AvailableNode;\r\n}\r\n\r\nexport interface NodeDialogFooterConfig {\r\n showSaveButton?: () => boolean;\r\n disableSaveButton?: () => boolean;\r\n}\r\n\r\nexport type LayoutDirection = 'TB' | 'LR';\r\ntype ConnectorSide = 'top' | 'bottom' | 'left' | 'right';\r\ntype ConnectorRole = 'input' | 'output';\r\n\r\ninterface RenderedConnection extends Connection {\r\n _inputConnectorId: string;\r\n _inputSide: ConnectorSide;\r\n _outputConnectorId: string;\r\n _outputSide: ConnectorSide;\r\n}\r\n\r\nexport type SBActionType =\r\n | 'createNode'\r\n | 'updateNode'\r\n | 'deleteNode'\r\n | 'createConnection'\r\n | 'updateConnection'\r\n | 'deleteConnection'\r\n | 'startCreating'\r\n | 'startUpdating';\r\n\r\nexport interface SBAction {\r\n action: SBActionType;\r\n data?: any;\r\n}\r\n\r\n// ✨ Direction & config — mirrors lib sample\r\nenum Direction {\r\n LEFT_TO_RIGHT = 'LR',\r\n RIGHT_TO_LEFT = 'RL',\r\n TOP_TO_BOTTOM = 'TB',\r\n}\r\n\r\nconst CONFIGURATION = {\r\n [Direction.LEFT_TO_RIGHT]: {\r\n outputSide: 'right',\r\n inputSide: 'left',\r\n },\r\n [Direction.RIGHT_TO_LEFT]: {\r\n outputSide: 'left',\r\n inputSide: 'right',\r\n },\r\n [Direction.TOP_TO_BOTTOM]: {\r\n outputSide: 'bottom',\r\n inputSide: 'top',\r\n },\r\n} as const;\r\n\r\nconst VERTICAL_CONNECTOR_SIDES: readonly ConnectorSide[] = ['top', 'bottom'];\r\nconst HORIZONTAL_CONNECTOR_SIDES: readonly ConnectorSide[] = ['left', 'right'];\r\nconst CONNECTOR_ID_SEPARATOR = '__sb-connector__';\r\nconst STRUCTURE_BUILDER_CONNECTOR_SUFFIX =\r\n /__sb-connector__(input|output)__(top|bottom|left|right)$/;\r\n\r\n@Component({\r\n selector: 'mt-structure-builder',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n FFlowModule,\r\n TabsModule,\r\n Button,\r\n Icon,\r\n Card,\r\n Toolbar,\r\n Skeleton,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './structure-builder.html',\r\n styleUrl: './structure-builder.scss',\r\n providers: [DialogService],\r\n host: {\r\n class:\r\n 'flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden',\r\n },\r\n})\r\nexport class StructureBuilder {\r\n readonly dialogService = inject(DialogService);\r\n readonly drawerService = inject(DrawerService);\r\n readonly modal: ModalService = inject(ModalService);\r\n private transloco = inject(TranslocoService);\r\n private dir = inject(Directionality, { optional: true });\r\n nodeActionsEvent = output<NodeActionEvent>();\r\n action = output<SBAction>();\r\n availableNodes = input<AvailableNode[]>([]);\r\n protected fCanvas = viewChild(FCanvasComponent);\r\n public fFlowComponent = viewChild(FFlowComponent);\r\n public fCanvasComponent = viewChild(FCanvasComponent);\r\n public fZoomDirective = viewChild(FZoomDirective);\r\n nodeForm = input<DynamicFormConfig>({ sections: [] });\r\n nodeDialogFooterConfig = input<NodeDialogFooterConfig | null>(null);\r\n connectionForm = input<DynamicFormConfig>({ sections: [] });\r\n connectionFormulaSchemaId = input<number | undefined>(undefined);\r\n connectionFormulaConfig = input<FormulaBuilderUiConfig | null>(null);\r\n nodeActions = input<Actions[]>([]);\r\n nodeFields = input<NodeFieldsMapping>({\r\n id: 'id',\r\n name: 'name',\r\n icon: 'icon',\r\n color: 'color',\r\n });\r\n\r\n isAutoLayout = input<boolean>(true);\r\n readonly = input<boolean>(false);\r\n addModalType = input<'drawer' | 'dialog'>('dialog');\r\n updateModalType = input<'drawer' | 'dialog'>('drawer');\r\n addModalStyleClass = input<string>('!w-[35rem]');\r\n updateModalStyleClass = input<string>('!w-[35rem]');\r\n addModalHeader = input<string>('');\r\n updateModalHeader = input<string>('');\r\n appendTo = input<string>('');\r\n availableTabsClass = input<string>('');\r\n layoutDirection = input<LayoutDirection>(Direction.TOP_TO_BOTTOM);\r\n nodes = model<Node[]>([]);\r\n connections = model<Connection[]>([]);\r\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\r\n nodeTemplate = input<TemplateRef<any> | null>(null);\r\n nodeTemplateContent = contentChild<TemplateRef<any>>('nodeTemplate');\r\n protected readonly effectiveNodeTemplate = computed(\r\n () => this.nodeTemplate() || this.nodeTemplateContent() || null,\r\n );\r\n protected readonly contentDirection = computed(\r\n () => this.dir?.value ?? 'ltr',\r\n );\r\n private collapsedConnectionIds = signal<Set<string>>(new Set());\r\n\r\n activeTab = signal('0');\r\n protected readonly eMarkerType = EFMarkerType;\r\n\r\n protected readonly effectiveDirection = computed(() =>\r\n this.resolveDirection(this.layoutDirection()),\r\n );\r\n protected readonly configuration = computed(\r\n () => CONFIGURATION[this.effectiveDirection()],\r\n );\r\n protected readonly nodeConnectorSides = computed<readonly ConnectorSide[]>(\r\n () =>\r\n this.effectiveDirection() === Direction.TOP_TO_BOTTOM\r\n ? VERTICAL_CONNECTOR_SIDES\r\n : HORIZONTAL_CONNECTOR_SIDES,\r\n );\r\n protected readonly nodeActionHandler = (action: Actions, node: any): void => {\r\n this.buttonAction(action, node);\r\n };\r\n protected readonly getFilteredNodeActions = (\r\n node: AvailableNode,\r\n ): Actions[] =>\r\n this.readonly()\r\n ? []\r\n : this.nodeActions().filter(\r\n (action) => !action.condition || action.condition(node),\r\n );\r\n private positions = signal<Record<string, IPoint>>({});\r\n private dialogRef: any;\r\n protected fields = computed(() => {\r\n const inputFields = this.nodeFields();\r\n return {\r\n id: inputFields.id || 'id',\r\n name: inputFields.name || 'name',\r\n icon: inputFields.icon || 'icon',\r\n color: inputFields.color || 'color',\r\n } as any;\r\n });\r\n\r\n availableTabs = computed(() => {\r\n const tabsSet = new Set<string>();\r\n this.availableNodes().forEach((node) => {\r\n if (node.tab && Array.isArray(node.tab)) {\r\n node.tab.forEach((tab) => tabsSet.add(tab));\r\n }\r\n });\r\n return Array.from(tabsSet).sort();\r\n });\r\n\r\n currentTabNodes = computed(() => {\r\n const tabs = this.availableTabs();\r\n const currentTabIndex = parseInt(this.activeTab());\r\n if (currentTabIndex >= tabs.length) return [];\r\n const currentTab = tabs[currentTabIndex];\r\n return this.availableNodes().filter((node) =>\r\n node.tab.includes(currentTab),\r\n );\r\n });\r\n\r\n nodesWithComputedProps = computed(() => {\r\n const fields = this.fields();\r\n const pos = this.positions();\r\n return this.nodes().map((node) => {\r\n const _computedId = String(this.getNestedValue(node, fields.id));\r\n const _computedName = this.getNestedValue(node, fields.name);\r\n const _computedIcon = this.getNestedValue(node, fields.icon);\r\n const _computedColor = this.getNestedValue(node, fields.color);\r\n const configuration = {\r\n ...(node.configuration ?? {}),\r\n ...(pos[_computedId] ?? {}),\r\n };\r\n return {\r\n ...node,\r\n _computedId,\r\n _computedName,\r\n _computedIcon,\r\n _computedColor,\r\n configuration,\r\n };\r\n });\r\n });\r\n private readonly nodePositionsById = computed<Record<string, IPoint>>(() =>\r\n this.nodesWithComputedProps().reduce<Record<string, IPoint>>(\r\n (positions, node) => {\r\n positions[node._computedId] = {\r\n x: node.configuration?.x ?? 0,\r\n y: node.configuration?.y ?? 0,\r\n };\r\n return positions;\r\n },\r\n {},\r\n ),\r\n );\r\n connectionsComputed = computed(() =>\r\n this.connections()?.map((c) => ({\r\n ...c,\r\n from: this.extractNodeId(String(c.from)),\r\n to: this.extractNodeId(String(c.to)),\r\n })),\r\n );\r\n protected readonly renderedConnections = computed<RenderedConnection[]>(() =>\r\n this.connectionsComputed().map((connection) => {\r\n const { inputSide, outputSide } =\r\n this.resolveConnectionConnectorSides(connection);\r\n return {\r\n ...connection,\r\n _inputConnectorId: this.createConnectorId(\r\n connection.to,\r\n 'input',\r\n inputSide,\r\n ),\r\n _inputSide: inputSide,\r\n _outputConnectorId: this.createConnectorId(\r\n connection.from,\r\n 'output',\r\n outputSide,\r\n ),\r\n _outputSide: outputSide,\r\n };\r\n }),\r\n );\r\n coreFields = computed(() => {\r\n const fields = this.fields();\r\n return new Set([\r\n ...Object.values(fields),\r\n 'configuration',\r\n '_computedId',\r\n '_computedName',\r\n '_computedIcon',\r\n '_computedColor',\r\n ]);\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const direction = this.effectiveDirection();\r\n this.getData(new dagre.graphlib.Graph(), direction);\r\n });\r\n effect(() => {\r\n const connectionIds = new Set(\r\n this.connectionsComputed().map((connection) => connection.id),\r\n );\r\n this.collapsedConnectionIds.update((current) => {\r\n if (current.size === 0) return current;\r\n let changed = false;\r\n const next = new Set<string>();\r\n current.forEach((id) => {\r\n if (connectionIds.has(id)) {\r\n next.add(id);\r\n } else {\r\n changed = true;\r\n }\r\n });\r\n return changed ? next : current;\r\n });\r\n });\r\n }\r\n\r\n protected onLoaded(): void {\r\n this.fitToScreen();\r\n }\r\n\r\n onCreateNode(event: FCreateNodeEvent): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const nodeData = event.data as AvailableNode;\r\n if (!nodeData) return;\r\n\r\n const newNode: Node = {\r\n ...nodeData,\r\n configuration: {\r\n x: event.rect.x,\r\n y: event.rect.y,\r\n },\r\n };\r\n\r\n if (this.nodeForm()?.sections.length > 0 || this.nodeDialogTemplate()) {\r\n this.openNodeDialog(newNode, true);\r\n } else {\r\n this.action.emit({ action: 'createNode', data: newNode });\r\n }\r\n }\r\n\r\n onNodePositionChange(event: any, nodeId: string): void {\r\n const position = event;\r\n if (nodeId && position) {\r\n this.positions.update((p) => ({\r\n ...p,\r\n [nodeId]: { x: position.x, y: position.y },\r\n }));\r\n }\r\n }\r\n\r\n onCreateConnection(event: FCreateConnectionEvent): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const sourceId = this.extractNodeId(\r\n event.sourceId ?? event.fOutputId ?? '',\r\n );\r\n const targetId = this.extractNodeId(event.targetId ?? event.fInputId ?? '');\r\n\r\n if (!sourceId || !targetId) {\r\n return;\r\n }\r\n\r\n const newConnection: Connection = {\r\n id: this.generateConnectionId(),\r\n from: sourceId,\r\n to: targetId,\r\n };\r\n const exists = this.connectionsComputed().some(\r\n (conn) =>\r\n conn.from === newConnection.from && conn.to === newConnection.to,\r\n );\r\n\r\n if (!exists) {\r\n if (\r\n this.connectionForm()?.sections.length > 0 ||\r\n this.connectionFormulaSchemaId()\r\n ) {\r\n this.openConnectionDialog(newConnection, true);\r\n } else {\r\n this.action.emit({ action: 'createConnection', data: newConnection });\r\n }\r\n }\r\n }\r\n\r\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n if (this.dialogRef) {\r\n this.dialogRef.close();\r\n }\r\n const modalType = isNewNode ? this.addModalType() : this.updateModalType();\r\n this.action.emit({\r\n action: isNewNode ? 'startCreating' : 'startUpdating',\r\n data: node,\r\n });\r\n\r\n const styleClass = isNewNode\r\n ? this.addModalStyleClass()\r\n : this.updateModalStyleClass();\r\n const header = isNewNode\r\n ? this.addModalHeader() ||\r\n this.transloco.translate('structureBuilder.addNode')\r\n : this.updateModalHeader() ||\r\n this.transloco.translate('structureBuilder.editNodeProperties');\r\n\r\n const config = {\r\n header: header,\r\n styleClass: styleClass,\r\n focusOnShow: this.nodeDialogTemplate() ? false : true,\r\n appendTo: this.appendTo(),\r\n position: modalType === 'drawer' ? 'end' : undefined,\r\n dismissible: true,\r\n modal: true,\r\n\r\n inputValues: {\r\n data: {\r\n node: node,\r\n formSchema: this.nodeForm(),\r\n template: this.nodeDialogTemplate(),\r\n footerConfig: this.nodeDialogFooterConfig(),\r\n },\r\n },\r\n };\r\n this.dialogRef = this.modal.openModal(\r\n NodeFormDialogComponent,\r\n modalType,\r\n config,\r\n );\r\n\r\n this.dialogRef.onClose.subscribe((result: any) => {\r\n if (result) {\r\n if (isNewNode) {\r\n const newNodeWithFormData = { ...node, ...result };\r\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\r\n } else {\r\n this.onNodeFormSubmit(result);\r\n }\r\n }\r\n });\r\n }\r\n\r\n openConnectionDialog(connection: Connection, isNew: boolean = false): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n const ref = this.modal.openModal(ConnectionFormDialogComponent, 'dialog', {\r\n header: this.transloco.translate(\r\n isNew\r\n ? 'structureBuilder.addConnectionProperties'\r\n : 'structureBuilder.editConnectionProperties',\r\n ),\r\n width: this.connectionFormulaSchemaId() ? '960px' : '600px',\r\n\r\n inputValues: {\r\n data: {\r\n connection: connection,\r\n formSchema: this.connectionForm(),\r\n formulaSchemaId: this.connectionFormulaSchemaId(),\r\n formulaConfig: this.connectionFormulaConfig(),\r\n },\r\n },\r\n });\r\n\r\n ref.onClose.subscribe((result: any) => {\r\n if (result) {\r\n this.onConnectionFormSubmit(result, isNew);\r\n }\r\n });\r\n }\r\n\r\n onNodeFormSubmit(formData: any): void {\r\n const nodeId = formData[this.fields().id];\r\n if (nodeId) {\r\n this.action.emit({ action: 'updateNode', data: formData });\r\n }\r\n }\r\n\r\n onConnectionFormSubmit(formData: any, isNew: boolean = false): void {\r\n if (isNew) {\r\n this.action.emit({ action: 'createConnection', data: formData });\r\n return;\r\n }\r\n\r\n const connectionId = formData.id;\r\n if (connectionId) {\r\n this.action.emit({ action: 'updateConnection', data: formData });\r\n }\r\n }\r\n\r\n removeNode(node: any): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.action.emit({ action: 'deleteNode', data: node });\r\n }\r\n\r\n removeConnection(connection: any): void {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.action.emit({ action: 'deleteConnection', data: connection });\r\n }\r\n\r\n buttonAction(action: any, node: any) {\r\n if (this.readonly()) {\r\n return;\r\n }\r\n\r\n this.nodeActionsEvent.emit({ action, node });\r\n if (action.key === 'edit') {\r\n this.openNodeDialog(node);\r\n } else if (action.key === 'delete') {\r\n this.removeNode(node);\r\n }\r\n }\r\n\r\n toggleConnectionCollapse(connection: Connection): void {\r\n this.collapsedConnectionIds.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(connection.id)) {\r\n next.delete(connection.id);\r\n } else {\r\n next.add(connection.id);\r\n }\r\n return next;\r\n });\r\n }\r\n\r\n protected fitToScreen(): void {\r\n const area = this.nodes()?.length * 70;\r\n this.fCanvasComponent()?.fitToScreen(\r\n PointExtensions.initialize(area, area),\r\n false,\r\n );\r\n }\r\n\r\n private getData(graph: Graph, direction: Direction): void {\r\n if (this.isAutoLayout()) {\r\n this.fFlowComponent()?.reset();\r\n }\r\n this.updateGraph(graph, direction);\r\n this.applyGraphPositions(graph);\r\n }\r\n\r\n private updateGraph(graph: Graph, direction: Direction): void {\r\n graph.setGraph({ rankdir: direction });\r\n\r\n const SIZE = { width: 300, height: 200 };\r\n const nodePositions = untracked(this.nodePositionsById);\r\n const nodeIds = this.nodes()\r\n .map((node) => this.getNestedValue(node, this.fields().id))\r\n .filter(\r\n (nodeId): nodeId is string | number =>\r\n nodeId !== null && nodeId !== undefined && `${nodeId}` !== '',\r\n )\r\n .map(String);\r\n\r\n nodeIds.forEach((nodeId) => {\r\n graph.setNode(nodeId, {\r\n width: SIZE.width,\r\n height: SIZE.height,\r\n });\r\n });\r\n\r\n const validConnections = this.connectionsComputed().filter(\r\n (connection) =>\r\n !!connection.from &&\r\n !!connection.to &&\r\n connection.from !== connection.to,\r\n );\r\n\r\n if (validConnections.length > 0) {\r\n validConnections.forEach((connection) => {\r\n const [layoutSourceId, layoutTargetId] = this.resolveLayoutEdge(\r\n connection,\r\n direction,\r\n nodePositions,\r\n );\r\n graph.setEdge(layoutSourceId, layoutTargetId, {});\r\n });\r\n } else if (nodeIds.length > 1) {\r\n // Dagre stacks disconnected nodes vertically for LR and horizontally for TB.\r\n // Add a temporary chain so empty flows still follow the requested direction.\r\n for (let index = 0; index < nodeIds.length - 1; index++) {\r\n graph.setEdge(nodeIds[index], nodeIds[index + 1], {});\r\n }\r\n }\r\n\r\n dagre.layout(graph);\r\n }\r\n\r\n private applyGraphPositions(graph: Graph): void {\r\n const positionsById: Record<string, IPoint> = {};\r\n graph.nodes().forEach((key) => {\r\n const gNode = graph.node(key);\r\n positionsById[key] = { x: gNode.x, y: gNode.y };\r\n });\r\n this.positions.update((old) => ({ ...old, ...positionsById }));\r\n }\r\n\r\n private getNestedValue(obj: unknown, path?: string | null): unknown {\r\n if (!path) return undefined;\r\n const keys = path\r\n .replace(/\\[(\\w+)\\]/g, '.$1')\r\n .replace(/^\\./, '')\r\n .split('.')\r\n .filter(Boolean);\r\n\r\n return keys.reduce<unknown>(\r\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\r\n obj,\r\n );\r\n }\r\n\r\n maybeAutoLayout(): void {\r\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\r\n this.getData(new dagre.graphlib.Graph(), this.effectiveDirection());\r\n }\r\n\r\n private generateConnectionId(): string {\r\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\r\n }\r\n\r\n protected createConnectorId(\r\n nodeId: string,\r\n role: ConnectorRole,\r\n side: ConnectorSide,\r\n ): string {\r\n return `${nodeId}${CONNECTOR_ID_SEPARATOR}${role}__${side}`;\r\n }\r\n\r\n private resolveDirection(layoutDirection: LayoutDirection): Direction {\r\n if (layoutDirection === Direction.LEFT_TO_RIGHT) {\r\n return this.dir?.value === 'rtl'\r\n ? Direction.RIGHT_TO_LEFT\r\n : Direction.LEFT_TO_RIGHT;\r\n }\r\n return Direction.TOP_TO_BOTTOM;\r\n }\r\n\r\n private buildAdjacency(connections: Connection[]): Map<string, string[]> {\r\n const adjacency = new Map<string, string[]>();\r\n connections.forEach((connection) => {\r\n if (!connection.from || !connection.to) return;\r\n const children = adjacency.get(connection.from) ?? [];\r\n children.push(connection.to);\r\n adjacency.set(connection.from, children);\r\n });\r\n return adjacency;\r\n }\r\n\r\n private getDescendants(\r\n startId: string,\r\n adjacency: Map<string, string[]>,\r\n ): Set<string> {\r\n const visited = new Set<string>();\r\n const stack = [startId];\r\n while (stack.length > 0) {\r\n const current = stack.pop();\r\n if (!current || visited.has(current)) {\r\n continue;\r\n }\r\n visited.add(current);\r\n const children = adjacency.get(current);\r\n if (children) {\r\n children.forEach((child) => stack.push(child));\r\n }\r\n }\r\n return visited;\r\n }\r\n\r\n private extractNodeId(connectionEndId: string): string {\r\n return (connectionEndId || '')\r\n .replace(STRUCTURE_BUILDER_CONNECTOR_SUFFIX, '')\r\n .replace(/-(in|out)$/, '');\r\n }\r\n\r\n private resolveConnectionConnectorSides(connection: Connection): {\r\n inputSide: ConnectorSide;\r\n outputSide: ConnectorSide;\r\n } {\r\n const sourcePosition = this.nodePositionsById()[connection.from];\r\n const targetPosition = this.nodePositionsById()[connection.to];\r\n const direction = this.effectiveDirection();\r\n\r\n if (!sourcePosition || !targetPosition) {\r\n return {\r\n inputSide: this.configuration().inputSide,\r\n outputSide: this.configuration().outputSide,\r\n };\r\n }\r\n\r\n if (direction === Direction.TOP_TO_BOTTOM) {\r\n return sourcePosition.y <= targetPosition.y\r\n ? { inputSide: 'top', outputSide: 'bottom' }\r\n : { inputSide: 'bottom', outputSide: 'top' };\r\n }\r\n\r\n return sourcePosition.x >= targetPosition.x\r\n ? { inputSide: 'right', outputSide: 'left' }\r\n : { inputSide: 'left', outputSide: 'right' };\r\n }\r\n\r\n private resolveLayoutEdge(\r\n connection: Connection,\r\n direction: Direction,\r\n nodePositions: Record<string, IPoint>,\r\n ): [string, string] {\r\n const sourcePosition = nodePositions[connection.from];\r\n const targetPosition = nodePositions[connection.to];\r\n\r\n if (!sourcePosition || !targetPosition) {\r\n return [connection.from, connection.to];\r\n }\r\n\r\n if (direction === Direction.TOP_TO_BOTTOM) {\r\n return sourcePosition.y <= targetPosition.y\r\n ? [connection.from, connection.to]\r\n : [connection.to, connection.from];\r\n }\r\n\r\n if (direction === Direction.RIGHT_TO_LEFT) {\r\n return sourcePosition.x >= targetPosition.x\r\n ? [connection.from, connection.to]\r\n : [connection.to, connection.from];\r\n }\r\n\r\n return sourcePosition.x <= targetPosition.x\r\n ? [connection.from, connection.to]\r\n : [connection.to, connection.from];\r\n }\r\n}\r\n","<!-- structure-builder.html -->\r\n@if (!readonly() && availableTabs().length > 0) {\r\n <mt-card\r\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\r\n >\r\n <ng-template #headless>\r\n <!-- Header -->\r\n <div class=\"flex items-center justify-between px-4 pt-5\">\r\n <h3 class=\"text-xl font-semibold\">\r\n {{ \"structureBuilder.levelTemplates\" | transloco }}\r\n </h3>\r\n </div>\r\n\r\n <!-- Tabs using PrimeNG -->\r\n <p-tabs\r\n [(value)]=\"activeTab\"\r\n styleClass=\"structure-tabs \"\r\n class=\"h-full overflow-hidden\"\r\n >\r\n <p-tablist>\r\n @for (tab of availableTabs(); track tab; let i = $index) {\r\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\r\n }\r\n </p-tablist>\r\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\r\n @for (tab of availableTabs(); track tab; let i = $index) {\r\n <p-tabpanel [value]=\"i.toString()\">\r\n <p class=\"text-xs text-muted py-3 px-4\">\r\n {{ \"structureBuilder.dragToAdd\" | transloco }}\r\n </p>\r\n\r\n <!-- Node List -->\r\n <div class=\"space-y-1 px-4\">\r\n @for (node of currentTabNodes(); track node.id) {\r\n <div\r\n fExternalItem\r\n [fData]=\"node\"\r\n style=\"display: flex\"\r\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\"\r\n >\r\n <!-- Node Icon with color -->\r\n <div class=\"text-primary text-lg\">\r\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\r\n </div>\r\n\r\n <!-- Node Name -->\r\n <span class=\"text-base font-medium flex-1\">{{\r\n node.label\r\n }}</span>\r\n <mt-icon class=\"text-lg\" icon=\"general.menu-05\"></mt-icon>\r\n </div>\r\n }\r\n\r\n @if (currentTabNodes().length === 0) {\r\n <div class=\"text-center py-8 text-gray-400\">\r\n <p class=\"text-sm\">\r\n {{\r\n \"structureBuilder.allItemsInUse\"\r\n | transloco: { tab: tab }\r\n }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </p-tabpanel>\r\n }\r\n </p-tabpanels>\r\n </p-tabs>\r\n </ng-template>\r\n </mt-card>\r\n} @else if (!readonly() && availableNodes().length > 0) {\r\n <div [ngClass]=\"availableTabsClass() || 'absolute top-4 start-4 z-1 w-64'\">\r\n <mt-card [title]=\"'structureBuilder.steps' | transloco\">\r\n <div class=\"flex flex-col gap-2\">\r\n @for (node of availableNodes(); track node.id) {\r\n <div\r\n fExternalItem\r\n [fData]=\"node\"\r\n style=\"display: flex\"\r\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 bg-content\"\r\n >\r\n <!-- Node Icon with color -->\r\n <div class=\"text-primary text-lg\">\r\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\r\n </div>\r\n\r\n <!-- Node Name -->\r\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\r\n </div>\r\n }\r\n </div>\r\n </mt-card>\r\n </div>\r\n}\r\n<!-- Left Sidebar -->\r\n\r\n<!-- Main Canvas Area -->\r\n<div class=\"flex-1 z-0 relative\">\r\n <ng-content select=\"[flowContent]\"></ng-content>\r\n\r\n <f-flow\r\n fDraggable\r\n dir=\"ltr\"\r\n (fLoaded)=\"onLoaded()\"\r\n (fCreateNode)=\"onCreateNode($event)\"\r\n (fCreateConnection)=\"onCreateConnection($event)\"\r\n class=\"size-full\"\r\n >\r\n <f-background>\r\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\r\n </f-background>\r\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\r\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n </f-connection-for-create>\r\n <f-snap-connection\r\n fBehavior=\"fixed\"\r\n fType=\"segment\"\r\n class=\"z-1\"\r\n [fSnapThreshold]=\"100\"\r\n >\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n </f-snap-connection>\r\n\r\n <f-connection-for-create></f-connection-for-create>\r\n\r\n <!-- Enhanced Connections with Edit Button -->\r\n @for (connection of renderedConnections(); track connection.id) {\r\n <f-connection\r\n [fReassignDisabled]=\"true\"\r\n [fOutputId]=\"connection._outputConnectorId\"\r\n [fInputId]=\"connection._inputConnectorId\"\r\n [fOutputSide]=\"connection._outputSide\"\r\n [fInputSide]=\"connection._inputSide\"\r\n fBehavior=\"fixed\"\r\n fType=\"segment\"\r\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\r\n >\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.SELECTED_START\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n <svg\r\n viewBox=\"0 0 12 12\"\r\n fMarker\r\n [type]=\"eMarkerType.SELECTED_END\"\r\n [height]=\"12\"\r\n [width]=\"12\"\r\n [refX]=\"6\"\r\n [refY]=\"6\"\r\n >\r\n <circle\r\n cx=\"6\"\r\n cy=\"6\"\r\n r=\"3\"\r\n stroke=\"none\"\r\n fill=\"currentColor\"\r\n ></circle>\r\n </svg>\r\n @if (!readonly()) {\r\n <div\r\n fConnectionContent\r\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\r\n >\r\n @if (!connection.loading) {\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n [icon]=\"'general.edit-05'\"\r\n (click)=\"openConnectionDialog(connection)\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n severity=\"danger\"\r\n [icon]=\"'general.trash-01'\"\r\n (click)=\"removeConnection(connection)\"\r\n >\r\n </mt-button>\r\n } @else {\r\n <mt-button\r\n size=\"small\"\r\n variant=\"text\"\r\n [icon]=\"'general.loading-01'\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n }\r\n </f-connection>\r\n }\r\n\r\n <!-- Enhanced Nodes with Edit Button -->\r\n @for (node of nodesWithComputedProps(); track node._computedId) {\r\n <mt-card\r\n fNode\r\n fDragHandle\r\n [fNodePosition]=\"{\r\n x: node.configuration?.x || 200,\r\n y: node.configuration?.y || 100,\r\n }\"\r\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\r\n [style.--node-data-border-color]=\"node._computedColor\"\r\n >\r\n <ng-template #headless>\r\n @if (!node.loading) {\r\n <div [attr.dir]=\"contentDirection()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"\r\n effectiveNodeTemplate() || defaultNodeTemplate\r\n \"\r\n [ngTemplateOutletContext]=\"{\r\n $implicit: node,\r\n node: node,\r\n actions: getFilteredNodeActions(node),\r\n onAction: nodeActionHandler,\r\n dir: contentDirection(),\r\n }\"\r\n >\r\n </ng-container>\r\n </div>\r\n @for (side of nodeConnectorSides(); track side) {\r\n <div\r\n fNodeInput\r\n [fInputId]=\"\r\n createConnectorId(node._computedId, 'input', side)\r\n \"\r\n [fInputConnectableSide]=\"side\"\r\n [fInputMultiple]=\"true\"\r\n class=\"sb-connector sb-connector-input\"\r\n [class.top]=\"side === 'top'\"\r\n [class.bottom]=\"side === 'bottom'\"\r\n [class.left]=\"side === 'left'\"\r\n [class.right]=\"side === 'right'\"\r\n ></div>\r\n\r\n <div\r\n fNodeOutput\r\n [fOutputId]=\"\r\n createConnectorId(node._computedId, 'output', side)\r\n \"\r\n [fOutputConnectableSide]=\"side\"\r\n [isSelfConnectable]=\"false\"\r\n [fOutputMultiple]=\"true\"\r\n class=\"sb-connector sb-connector-output bg-surface-50 dark:bg-surface-900\"\r\n [class.top]=\"side === 'top'\"\r\n [class.bottom]=\"side === 'bottom'\"\r\n [class.left]=\"side === 'left'\"\r\n [class.right]=\"side === 'right'\"\r\n ></div>\r\n }\r\n } @else {\r\n <p-skeleton height=\"10rem\" width=\"15rem\" />\r\n }\r\n\r\n <!-- Node Header with Edit Button -->\r\n </ng-template>\r\n </mt-card>\r\n }\r\n\r\n <ng-template\r\n #defaultNodeTemplate\r\n let-node\r\n let-actions=\"actions\"\r\n let-onAction=\"onAction\"\r\n >\r\n <div\r\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)\"\r\n >\r\n @if (node._computedIcon) {\r\n <mt-icon\r\n class=\"text-2xl text-primary\"\r\n [icon]=\"node._computedIcon\"\r\n />\r\n }\r\n <div>{{ node._computedName }}</div>\r\n </div>\r\n <div\r\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\r\n >\r\n @for (action of actions; track action.key) {\r\n <mt-button\r\n [size]=\"action?.size || 'small'\"\r\n [variant]=\"action?.variant\"\r\n [icon]=\"action?.icon\"\r\n [tooltip]=\"action?.tooltip\"\r\n [severity]=\"action?.severity\"\r\n (onClick)=\"onAction(action, node)\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n </ng-template>\r\n </f-canvas>\r\n </f-flow>\r\n</div>\r\n@if (!readonly()) {\r\n <mt-toolbar />\r\n}\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/structure-builder';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i4"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/structure-builder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/structure-builder",
|
|
6
6
|
"linkDirectory": false,
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@angular/common": "^21.
|
|
11
|
-
"@angular/core": "^21.
|
|
12
|
-
"@angular/forms": "^21.
|
|
13
|
-
"@foblex/
|
|
14
|
-
"@
|
|
15
|
-
"@
|
|
16
|
-
"@
|
|
17
|
-
"
|
|
18
|
-
"
|
|
10
|
+
"@angular/common": "^21.2.8",
|
|
11
|
+
"@angular/core": "^21.2.8",
|
|
12
|
+
"@angular/forms": "^21.2.8",
|
|
13
|
+
"@foblex/2d": "^1.2.2",
|
|
14
|
+
"@foblex/flow": "^18.4.0",
|
|
15
|
+
"@primeuix/themes": "^2.0.3",
|
|
16
|
+
"@tailwindcss/postcss": "^4.2.2",
|
|
17
|
+
"@jsverse/transloco": "^8.3.0",
|
|
18
|
+
"postcss": "^8.5.9",
|
|
19
|
+
"primeng": "21.1.5",
|
|
19
20
|
"rxjs": "^7.8.2",
|
|
20
|
-
"tailwindcss": "^4.
|
|
21
|
+
"tailwindcss": "^4.2.2",
|
|
21
22
|
"tailwindcss-primeui": "^0.6.1",
|
|
22
23
|
"dagre": "^0.8.5",
|
|
23
|
-
"@masterteam/components": "^0.0.
|
|
24
|
-
"@masterteam/
|
|
25
|
-
"@masterteam/
|
|
24
|
+
"@masterteam/components": "^0.0.137",
|
|
25
|
+
"@masterteam/forms": "^0.0.64",
|
|
26
|
+
"@masterteam/icons": "^0.0.14"
|
|
26
27
|
},
|
|
27
28
|
"sideEffects": false,
|
|
28
29
|
"exports": {
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
},
|
|
40
41
|
"module": "fesm2022/masterteam-structure-builder.mjs",
|
|
41
42
|
"typings": "types/masterteam-structure-builder.d.ts",
|
|
43
|
+
"type": "module",
|
|
42
44
|
"dependencies": {
|
|
43
45
|
"tslib": "^2.8.1"
|
|
44
46
|
}
|
|
@@ -65,6 +65,14 @@ interface NodeDialogFooterConfig {
|
|
|
65
65
|
disableSaveButton?: () => boolean;
|
|
66
66
|
}
|
|
67
67
|
type LayoutDirection = 'TB' | 'LR';
|
|
68
|
+
type ConnectorSide = 'top' | 'bottom' | 'left' | 'right';
|
|
69
|
+
type ConnectorRole = 'input' | 'output';
|
|
70
|
+
interface RenderedConnection extends Connection {
|
|
71
|
+
_inputConnectorId: string;
|
|
72
|
+
_inputSide: ConnectorSide;
|
|
73
|
+
_outputConnectorId: string;
|
|
74
|
+
_outputSide: ConnectorSide;
|
|
75
|
+
}
|
|
68
76
|
type SBActionType = 'createNode' | 'updateNode' | 'deleteNode' | 'createConnection' | 'updateConnection' | 'deleteConnection' | 'startCreating' | 'startUpdating';
|
|
69
77
|
interface SBAction {
|
|
70
78
|
action: SBActionType;
|
|
@@ -127,6 +135,7 @@ declare class StructureBuilder {
|
|
|
127
135
|
readonly outputSide: "bottom";
|
|
128
136
|
readonly inputSide: "top";
|
|
129
137
|
}>;
|
|
138
|
+
protected readonly nodeConnectorSides: _angular_core.Signal<readonly ConnectorSide[]>;
|
|
130
139
|
protected readonly nodeActionHandler: (action: Actions, node: any) => void;
|
|
131
140
|
protected readonly getFilteredNodeActions: (node: AvailableNode) => Actions[];
|
|
132
141
|
private positions;
|
|
@@ -145,11 +154,13 @@ declare class StructureBuilder {
|
|
|
145
154
|
};
|
|
146
155
|
loading?: boolean;
|
|
147
156
|
}[]>;
|
|
157
|
+
private readonly nodePositionsById;
|
|
148
158
|
connectionsComputed: _angular_core.Signal<{
|
|
149
159
|
from: string;
|
|
150
160
|
to: string;
|
|
151
161
|
id: string;
|
|
152
162
|
}[]>;
|
|
163
|
+
protected readonly renderedConnections: _angular_core.Signal<RenderedConnection[]>;
|
|
153
164
|
coreFields: _angular_core.Signal<Set<unknown>>;
|
|
154
165
|
constructor();
|
|
155
166
|
protected onLoaded(): void;
|
|
@@ -171,10 +182,13 @@ declare class StructureBuilder {
|
|
|
171
182
|
private getNestedValue;
|
|
172
183
|
maybeAutoLayout(): void;
|
|
173
184
|
private generateConnectionId;
|
|
174
|
-
|
|
185
|
+
protected createConnectorId(nodeId: string, role: ConnectorRole, side: ConnectorSide): string;
|
|
175
186
|
private resolveDirection;
|
|
176
187
|
private buildAdjacency;
|
|
177
188
|
private getDescendants;
|
|
189
|
+
private extractNodeId;
|
|
190
|
+
private resolveConnectionConnectorSides;
|
|
191
|
+
private resolveLayoutEdge;
|
|
178
192
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StructureBuilder, never>;
|
|
179
193
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StructureBuilder, "mt-structure-builder", never, { "availableNodes": { "alias": "availableNodes"; "required": false; "isSignal": true; }; "nodeForm": { "alias": "nodeForm"; "required": false; "isSignal": true; }; "nodeDialogFooterConfig": { "alias": "nodeDialogFooterConfig"; "required": false; "isSignal": true; }; "connectionForm": { "alias": "connectionForm"; "required": false; "isSignal": true; }; "connectionFormulaSchemaId": { "alias": "connectionFormulaSchemaId"; "required": false; "isSignal": true; }; "connectionFormulaConfig": { "alias": "connectionFormulaConfig"; "required": false; "isSignal": true; }; "nodeActions": { "alias": "nodeActions"; "required": false; "isSignal": true; }; "nodeFields": { "alias": "nodeFields"; "required": false; "isSignal": true; }; "isAutoLayout": { "alias": "isAutoLayout"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "addModalType": { "alias": "addModalType"; "required": false; "isSignal": true; }; "updateModalType": { "alias": "updateModalType"; "required": false; "isSignal": true; }; "addModalStyleClass": { "alias": "addModalStyleClass"; "required": false; "isSignal": true; }; "updateModalStyleClass": { "alias": "updateModalStyleClass"; "required": false; "isSignal": true; }; "addModalHeader": { "alias": "addModalHeader"; "required": false; "isSignal": true; }; "updateModalHeader": { "alias": "updateModalHeader"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "availableTabsClass": { "alias": "availableTabsClass"; "required": false; "isSignal": true; }; "layoutDirection": { "alias": "layoutDirection"; "required": false; "isSignal": true; }; "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "connections": { "alias": "connections"; "required": false; "isSignal": true; }; "nodeTemplate": { "alias": "nodeTemplate"; "required": false; "isSignal": true; }; }, { "nodeActionsEvent": "nodeActionsEvent"; "action": "action"; "nodes": "nodesChange"; "connections": "connectionsChange"; }, ["nodeDialogTemplate", "nodeTemplateContent"], ["[flowContent]"], true, never>;
|
|
180
194
|
}
|