@memberjunction/ng-flow-editor 6.1.4 → 6.2.0-edge.1

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":"agent-step-list.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Tabular list view of agent steps and paths.\n * Alternative to the visual flow canvas — useful for quick overview and bulk editing.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-step-list',\n template: `\n <div class=\"mj-step-list\">\n <!-- Steps Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-circle-nodes\"></i> Steps ({{ Steps.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Steps.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Status</th>\n <th>Start</th>\n <th>Configured</th>\n </tr>\n </thead>\n <tbody>\n @for (step of Steps; track step) {\n <tr\n [class.mj-step-list-row--selected]=\"IsStepSelected(step)\"\n (click)=\"StepClicked.emit(step)\">\n <td class=\"mj-step-list-name\">{{ step.Name }}</td>\n <td>\n <span class=\"mj-step-list-type-badge\" [attr.data-type]=\"step.StepType\">\n {{ step.StepType }}\n </span>\n </td>\n <td>\n <span class=\"mj-step-list-status\" [attr.data-status]=\"step.Status\">\n {{ step.Status }}\n </span>\n </td>\n <td>\n @if (step.StartingStep) {\n <i class=\"fa-solid fa-check mj-step-list-check\"></i>\n }\n </td>\n <td class=\"mj-step-list-configured\">{{ getConfiguredItem(step) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Steps.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No steps defined\" />\n }\n </div>\n </div>\n \n <!-- Paths Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-link\"></i> Paths ({{ Paths.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Paths.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>From</th>\n <th>To</th>\n <th>Condition</th>\n <th>Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (path of Paths; track path) {\n <tr>\n <td>{{ path.OriginStep }}</td>\n <td>{{ path.DestinationStep }}</td>\n <td class=\"mj-step-list-condition\">{{ path.Condition || '(always)' }}</td>\n <td>{{ path.Priority }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Paths.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No paths defined\" />\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n .mj-step-list {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n }\n\n .mj-step-list-section {\n margin-bottom: 24px;\n }\n\n .mj-step-list-section-header h4 {\n font-size: 14px;\n font-weight: 600;\n color: #334155;\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n i { font-size: 13px; color: #64748b; }\n }\n\n .mj-step-list-table-wrap {\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .mj-step-list-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n\n th {\n background: #f8fafc;\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: #64748b;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid #e2e8f0;\n }\n\n td {\n padding: 8px 12px;\n color: #334155;\n border-bottom: 1px solid #f1f5f9;\n }\n\n tbody tr {\n cursor: pointer;\n transition: background-color 0.1s ease;\n &:hover { background: #f8fafc; }\n &:last-child td { border-bottom: none; }\n }\n }\n\n .mj-step-list-row--selected {\n background: #eff6ff !important;\n }\n\n .mj-step-list-name { font-weight: 500; }\n\n .mj-step-list-type-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n background: #f1f5f9;\n color: #475569;\n }\n\n .mj-step-list-status {\n font-size: 11px;\n font-weight: 500;\n &[data-status=\"Active\"] { color: #10b981; }\n &[data-status=\"Disabled\"] { color: #94a3b8; }\n &[data-status=\"Pending\"] { color: #f59e0b; }\n }\n\n .mj-step-list-check { color: #10b981; font-size: 12px; }\n\n .mj-step-list-configured {\n color: #64748b;\n font-size: 12px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-condition {\n font-family: 'SF Mono', monospace;\n font-size: 11px;\n color: #64748b;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-empty {\n padding: 24px;\n text-align: center;\n color: #94a3b8;\n font-size: 13px;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AgentStepListComponent {\n @Input() Steps: MJAIAgentStepEntity[] = [];\n @Input() Paths: MJAIAgentStepPathEntity[] = [];\n @Input() SelectedStepID: string | null = null;\n\n @Output() StepClicked = new EventEmitter<MJAIAgentStepEntity>();\n\n IsStepSelected(step: MJAIAgentStepEntity): boolean {\n return UUIDsEqual(this.SelectedStepID, step.ID);\n }\n\n getConfiguredItem(step: MJAIAgentStepEntity): string {\n switch (step.StepType) {\n case 'Action': return step.Action || '—';\n case 'Prompt': return step.Prompt || '—';\n case 'Sub-Agent': return step.SubAgent || '—';\n case 'ForEach':\n case 'While': return `${step.LoopBodyType ?? 'Action'} loop`;\n default: return '—';\n }\n }\n}\n"]}
1
+ {"version":3,"file":"agent-step-list.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/agent-step-list.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity } from '@memberjunction/core-entities';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Tabular list view of agent steps and paths.\n * Alternative to the visual flow canvas — useful for quick overview and bulk editing.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-step-list',\n template: `\n <div class=\"mj-step-list\">\n <!-- Steps Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-circle-nodes\"></i> Steps ({{ Steps.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Steps.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Type</th>\n <th>Status</th>\n <th>Start</th>\n <th>Configured</th>\n </tr>\n </thead>\n <tbody>\n @for (step of Steps; track step) {\n <tr\n [class.mj-step-list-row--selected]=\"IsStepSelected(step)\"\n (click)=\"StepClicked.emit(step)\">\n <td class=\"mj-step-list-name\">{{ step.Name }}</td>\n <td>\n <span class=\"mj-step-list-type-badge\" [attr.data-type]=\"step.StepType\">\n {{ step.StepType }}\n </span>\n </td>\n <td>\n <span class=\"mj-step-list-status\" [attr.data-status]=\"step.Status\">\n {{ step.Status }}\n </span>\n </td>\n <td>\n @if (step.StartingStep) {\n <i class=\"fa-solid fa-check mj-step-list-check\"></i>\n }\n </td>\n <td class=\"mj-step-list-configured\">{{ getConfiguredItem(step) }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Steps.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No steps defined\" />\n }\n </div>\n </div>\n \n <!-- Paths Section -->\n <div class=\"mj-step-list-section\">\n <div class=\"mj-step-list-section-header\">\n <h4><i class=\"fa-solid fa-link\"></i> Paths ({{ Paths.length }})</h4>\n </div>\n <div class=\"mj-step-list-table-wrap\">\n @if (Paths.length > 0) {\n <table class=\"mj-step-list-table\">\n <thead>\n <tr>\n <th>From</th>\n <th>To</th>\n <th>Condition</th>\n <th>Priority</th>\n </tr>\n </thead>\n <tbody>\n @for (path of Paths; track path) {\n <tr>\n <td>{{ path.OriginStep }}</td>\n <td>{{ path.DestinationStep }}</td>\n <td class=\"mj-step-list-condition\">{{ path.Condition || '(always)' }}</td>\n <td>{{ path.Priority }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n @if (Paths.length === 0) {\n <mj-empty-state class=\"mj-step-list-empty\" Size=\"compact\" Icon=\"\" Title=\"No paths defined\" />\n }\n </div>\n </div>\n </div>\n `,\n styles: [`\n .mj-step-list {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n }\n\n .mj-step-list-section {\n margin-bottom: 24px;\n }\n\n .mj-step-list-section-header h4 {\n font-size: 14px;\n font-weight: 600;\n color: #334155;\n margin: 0 0 10px;\n display: flex;\n align-items: center;\n gap: 8px;\n i { font-size: 13px; color: #64748b; }\n }\n\n .mj-step-list-table-wrap {\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .mj-step-list-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n\n th {\n background: #f8fafc;\n padding: 8px 12px;\n text-align: left;\n font-weight: 600;\n color: #64748b;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n border-bottom: 1px solid #e2e8f0;\n }\n\n td {\n padding: 8px 12px;\n color: #334155;\n border-bottom: 1px solid #f1f5f9;\n }\n\n tbody tr {\n cursor: pointer;\n transition: background-color 0.1s ease;\n &:hover { background: #f8fafc; }\n &:last-child td { border-bottom: none; }\n }\n }\n\n .mj-step-list-row--selected {\n background: #eff6ff !important;\n }\n\n .mj-step-list-name { font-weight: 500; }\n\n .mj-step-list-type-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 4px;\n background: #f1f5f9;\n color: #475569;\n }\n\n .mj-step-list-status {\n font-size: 11px;\n font-weight: 500;\n &[data-status=\"Active\"] { color: #10b981; }\n &[data-status=\"Disabled\"] { color: #94a3b8; }\n &[data-status=\"Pending\"] { color: #f59e0b; }\n }\n\n .mj-step-list-check { color: #10b981; font-size: 12px; }\n\n .mj-step-list-configured {\n color: #64748b;\n font-size: 12px;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-condition {\n font-family: 'SF Mono', monospace;\n font-size: 11px;\n color: #64748b;\n max-width: 200px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .mj-step-list-empty {\n padding: 24px;\n text-align: center;\n color: #94a3b8;\n font-size: 13px;\n }\n `],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AgentStepListComponent {\n @Input() Steps: MJAIAgentStepEntity[] = [];\n @Input() Paths: MJAIAgentStepPathEntity[] = [];\n @Input() SelectedStepID: string | null = null;\n\n @Output() StepClicked = new EventEmitter<MJAIAgentStepEntity>();\n\n IsStepSelected(step: MJAIAgentStepEntity): boolean {\n return UUIDsEqual(this.SelectedStepID, step.ID);\n }\n\n GetConfiguredItem(step: MJAIAgentStepEntity): string {\n switch (step.StepType) {\n case 'Action': return step.Action || '—';\n case 'Prompt': return step.Prompt || '—';\n case 'Sub-Agent': return step.SubAgent || '—';\n case 'ForEach':\n case 'While': return `${step.LoopBodyType ?? 'Action'} loop`;\n default: return '—';\n }\n }\n\n /** @deprecated Use {@link GetConfiguredItem}. */\n getConfiguredItem(step: MJAIAgentStepEntity): string {\n return this.GetConfiguredItem(step);\n }\n}\n"]}
@@ -155,6 +155,8 @@ export declare class FlowAgentEditorComponent extends BaseAngularComponent imple
155
155
  protected onCloseProperties(): void;
156
156
  protected toggleViewMode(): void;
157
157
  /** Whether editing is currently allowed — combines parent EditMode + fullscreen self-contained edit */
158
+ get IsEditingActive(): boolean;
159
+ /** @deprecated Use {@link IsEditingActive}. */
158
160
  get isEditingActive(): boolean;
159
161
  protected toggleFullscreenEditMode(): void;
160
162
  protected cancelFullscreenEdit(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"flow-agent-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/agent-editor/flow-agent-editor.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-agent-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/agent-editor/flow-agent-editor.component.ts"],"names":[],"mappings":"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"}
@@ -788,9 +788,13 @@ export class FlowAgentEditorComponent extends BaseAngularComponent {
788
788
  this.cdr.detectChanges();
789
789
  }
790
790
  /** Whether editing is currently allowed — combines parent EditMode + fullscreen self-contained edit */
791
- get isEditingActive() {
791
+ get IsEditingActive() {
792
792
  return this.EditMode || this.fullscreenEditMode;
793
793
  }
794
+ /** @deprecated Use {@link IsEditingActive}. */
795
+ get isEditingActive() {
796
+ return this.IsEditingActive;
797
+ }
794
798
  toggleFullscreenEditMode() {
795
799
  this.fullscreenEditMode = !this.fullscreenEditMode;
796
800
  this.cdr.detectChanges();
@@ -1 +1 @@
1
- {"version":3,"file":"flow-agent-editor.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/flow-agent-editor.component.ts","../../../src/lib/agent-editor/flow-agent-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter, ViewChild, OnInit, OnChanges, OnDestroy,\n SimpleChanges, ChangeDetectorRef, ViewEncapsulation, HostListener, HostBinding,\n ElementRef, Renderer2\n} from '@angular/core';\nimport { RunView, CompositeKey, TransactionGroupBase } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { FlowNode, FlowConnection, FlowNodeAddedEvent, FlowConnectionCreatedEvent, FlowConnectionReassignedEvent, FlowNodeTypeConfig } from '../interfaces/flow-types';\nimport { FlowEditorComponent } from '../components/flow-editor.component';\nimport { AgentFlowTransformerService, AGENT_STEP_TYPE_CONFIGS } from './agent-flow-transformer.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/** View mode for the agent editor */\nexport type AgentEditorViewMode = 'diagram' | 'list';\n\n/**\n * Flow Agent Editor — wraps the generic FlowEditorComponent with\n * MJ agent-specific CRUD, properties panel, and data transformation.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-agent-editor',\n templateUrl: './flow-agent-editor.component.html',\n styleUrls: ['./flow-agent-editor.component.css'],\n encapsulation: ViewEncapsulation.None,\n providers: [AgentFlowTransformerService]\n})\nexport class FlowAgentEditorComponent extends BaseAngularComponent implements OnInit, OnChanges, OnDestroy {\n // ── Host Bindings ─────────────────────────────────────────────\n @HostBinding('class.mj-flow-agent-editor--fullscreen') get HostFullScreen(): boolean { return this.FullScreen; }\n\n // ── Inputs ──────────────────────────────────────────────────\n @Input() AgentID: string | null = null;\n @Input() EditMode = true;\n @Input() FullScreen = false;\n\n /**\n * Whether this editor shows its own Save / Edit / Cancel controls.\n *\n * **Off by default, and that default is the safe one.** When a host form owns the record's save —\n * which is the normal case, since the flow is one part of an agent — a Save button here is a\n * second save button for the same record. The user then has two, they disagree about what \"saved\"\n * means, and the unsaved indicator on one says nothing about the other.\n *\n * A host that turns this ON is declaring that this editor owns its own persistence (the standalone\n * or fullscreen self-contained case). A host that leaves it off MUST call\n * {@link FlowAgentEditorComponent.QueueSaveInto} from its own save, or flow edits will have no way\n * to reach the database at all.\n */\n @Input() ShowSaveControls = false;\n\n /**\n * The title shown in the centre of the toolbar. `null` hides it.\n *\n * Hidden by hosts whose own page chrome already names the record — repeating it inside the canvas\n * is a second, smaller title competing with the real one.\n */\n @Input() CanvasTitle: string | null = 'Flow Configuration';\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() FlowSaved = new EventEmitter<void>();\n @Output() FlowChanged = new EventEmitter<boolean>();\n @Output() FullScreenToggled = new EventEmitter<boolean>();\n @Output() StepSelected = new EventEmitter<MJAIAgentStepEntity | null>();\n\n // ── View Children ───────────────────────────────────────────\n @ViewChild('flowEditor') protected flowEditor: FlowEditorComponent | undefined;\n\n // ── State ───────────────────────────────────────────────────\n protected nodes: FlowNode[] = [];\n protected connections: FlowConnection[] = [];\n protected nodeTypes: FlowNodeTypeConfig[] = AGENT_STEP_TYPE_CONFIGS;\n protected viewMode: AgentEditorViewMode = 'diagram';\n protected isLoading = true;\n protected isSaving = false;\n protected hasUnsavedChanges = false;\n protected lastSaved: Date | null = null;\n\n // Fullscreen self-contained edit mode\n protected fullscreenEditMode = false;\n protected showUnsavedDialog = false;\n\n // Entity data\n protected steps: MJAIAgentStepEntity[] = [];\n protected paths: MJAIAgentStepPathEntity[] = [];\n protected deletedStepIDs: string[] = [];\n protected deletedPathIDs: string[] = [];\n\n // Selected items\n protected selectedStep: MJAIAgentStepEntity | null = null;\n protected selectedConnection: FlowConnection | null = null;\n protected selectedPathEntity: MJAIAgentStepPathEntity | null = null;\n protected showPropertiesPanel = false;\n\n // Picker data (includes icon fields for node rendering)\n protected availableActions: Array<{ ID: string; Name: string; IconClass?: string | null }> = [];\n protected availablePrompts: Array<{ ID: string; Name: string }> = [];\n protected availableAgents: Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }> = [];\n\n // Permission state — cached once on init\n protected userCanUpdate = false;\n\n // User view preferences (persisted via UserInfoEngine)\n protected prefShowGrid = true;\n protected prefShowMinimap = true;\n protected prefShowLegend = true;\n\n private static readonly PREF_KEY = 'flow-editor/view-prefs';\n\n // Initial zoom state\n private needsInitialZoom = false;\n private resizeObserver: ResizeObserver | null = null;\n\n // Fullscreen DOM relocation state\n private originalParent: HTMLElement | null = null;\n private originalNextSibling: Node | null = null;\n private backdropElement: HTMLElement | null = null;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private transformer: AgentFlowTransformerService,\n private elRef: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {\n super();\n }\n\n // ── Lifecycle ───────────────────────────────────────────────\n\n ngOnInit(): void {\n this.loadViewPreferences();\n this.checkUpdatePermission();\n if (this.AgentID) {\n this.loadAll();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['AgentID'] && !changes['AgentID'].firstChange && this.AgentID) {\n this.loadAll();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownResizeObserver();\n // Restore element to original parent if still in fullscreen\n if (this.FullScreen) {\n this.restoreFromFullscreen();\n }\n }\n\n // ── Data Loading ────────────────────────────────────────────\n\n private async loadAll(): Promise<void> {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n await Promise.all([\n this.loadStepsAndPaths(),\n this.loadPickerData()\n ]);\n this.rebuildFlowModel();\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n\n // Flag that we need an initial zoom; it will fire when the host element\n // first becomes visible (e.g. Kendo PanelBar expands)\n this.setupInitialZoomObserver();\n }\n }\n\n private async loadStepsAndPaths(): Promise<void> {\n if (!this.AgentID) return;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [stepsResult, pathsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Steps',\n ExtraFilter: `AgentID='${this.AgentID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: AI Agent Step Paths',\n ExtraFilter: `OriginStepID IN (SELECT ID FROM [__mj].[vwAIAgentSteps] WHERE AgentID='${this.AgentID}')`,\n OrderBy: 'Priority DESC',\n ResultType: 'entity_object'\n }\n ]);\n\n this.steps = stepsResult.Success ? (stepsResult.Results as MJAIAgentStepEntity[]) : [];\n this.paths = pathsResult.Success ? (pathsResult.Results as MJAIAgentStepPathEntity[]) : [];\n this.deletedStepIDs = [];\n this.deletedPathIDs = [];\n }\n\n private async loadPickerData(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [actionsResult, promptsResult, agentsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n Fields: ['ID', 'Name', 'IconClass'],\n ExtraFilter: `Status='Active'`,\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompts',\n Fields: ['ID', 'Name'],\n ExtraFilter: '',\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name', 'IconClass', 'LogoURL'],\n ExtraFilter: this.AgentID ? `ID <> '${this.AgentID}'` : '',\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n }\n ]);\n\n this.availableActions = actionsResult.Success\n ? (actionsResult.Results as Array<{ ID: string; Name: string; IconClass?: string | null }>)\n : [];\n this.availablePrompts = promptsResult.Success\n ? (promptsResult.Results as Array<{ ID: string; Name: string }>)\n : [];\n this.availableAgents = agentsResult.Success\n ? (agentsResult.Results as Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }>)\n : [];\n }\n\n private rebuildFlowModel(): void {\n this.nodes = this.transformer.StepsToNodes(this.steps, this.availableActions, this.availableAgents);\n this.connections = this.transformer.PathsToConnections(this.paths);\n }\n\n /**\n * Observe the host element's size. When it transitions from zero to non-zero height\n * (i.e. the collapsed Kendo panel expands), trigger the initial auto-arrange or zoom-to-fit.\n */\n private setupInitialZoomObserver(): void {\n if (this.nodes.length === 0) return;\n\n this.needsInitialZoom = true;\n this.teardownResizeObserver();\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const height = entry.contentRect.height;\n if (height > 0 && this.needsInitialZoom) {\n this.needsInitialZoom = false;\n this.teardownResizeObserver();\n // Short delay for Foblex canvas to finish its own init after becoming visible\n setTimeout(() => this.applyInitialZoom(), 100);\n }\n }\n });\n\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n\n private applyInitialZoom(): void {\n if (!this.flowEditor || this.nodes.length === 0) return;\n const allAtOrigin = this.nodes.every(n => n.Position.X === 0 && n.Position.Y === 0);\n if (allAtOrigin) {\n this.flowEditor.AutoArrange();\n } else {\n this.flowEditor.ZoomToFit();\n }\n }\n\n private teardownResizeObserver(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n // ── Save ────────────────────────────────────────────────────\n\n /**\n * Saves the flow on its own — creates a transaction, queues everything into it, submits.\n *\n * Used when this editor owns the save (the standalone / fullscreen self-contained mode). A host\n * that owns the record's save should call {@link QueueSaveInto} instead so the flow lands in the\n * same transaction as the rest of the record.\n */\n async Save(): Promise<void> {\n if (this.isSaving || !this.AgentID) return;\n this.isSaving = true;\n this.cdr.detectChanges();\n\n try {\n const p = this.ProviderToUse;\n const tg = await p.CreateTransactionGroup();\n await this.QueueSaveInto(tg);\n\n if (!await tg.Submit()) {\n console.error('Failed to save flow — all changes have been rolled back');\n return;\n }\n\n this.MarkSaved();\n // Exit self-contained fullscreen edit mode after successful save\n if (this.fullscreenEditMode) {\n this.fullscreenEditMode = false;\n }\n this.FlowSaved.emit();\n } catch (err) {\n console.error('Error saving flow:', err);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Queues every step and path change onto a transaction the CALLER owns and will submit.\n *\n * Split out of {@link Save} so a host form can make the flow part of the record's own atomic save\n * rather than a second, separate one. Two independent saves is how a record ends up looking saved\n * while the user's step edits are gone — the form succeeds, the flow fails, and nothing says so.\n *\n * Deliberately does NOT submit and does NOT clear dirty state: the caller decides whether the\n * transaction commits, and only the caller knows whether it did. Call {@link MarkSaved} after a\n * successful submit.\n */\n public async QueueSaveInto(tg: TransactionGroupBase): Promise<void> {\n // Positions live on the canvas until asked for, so pull them onto the entities first — otherwise\n // a drag made just before saving is the one change that does not persist.\n this.syncPositionsFromCanvas();\n\n await this.queueRemovedEntitiesForDelete(tg);\n\n for (const step of this.steps) {\n step.TransactionGroup = tg;\n await step.Save();\n }\n\n for (const path of this.paths) {\n path.TransactionGroup = tg;\n await path.Save();\n }\n }\n\n /** Clears dirty state after the owning transaction actually committed. */\n public MarkSaved(): void {\n this.deletedPathIDs = [];\n this.deletedStepIDs = [];\n this.hasUnsavedChanges = false;\n this.lastSaved = new Date();\n this.cdr.detectChanges();\n }\n\n /** Whether the flow holds edits that have not been written yet. Read by a host that owns the save. */\n public get HasUnsavedChanges(): boolean {\n return this.hasUnsavedChanges;\n }\n\n private syncPositionsFromCanvas(): void {\n this.syncPositionsToEntities();\n }\n\n /** Write current FlowNode positions back to the underlying step entities.\n * Called on every node move so that rebuildFlowModel() never loses drag changes. */\n private syncPositionsToEntities(): void {\n for (const node of this.nodes) {\n const step = this.steps.find(s => UUIDsEqual(s.ID, node.ID));\n if (step) {\n this.transformer.ApplyNodePosition(step, node);\n }\n }\n }\n\n private async queueRemovedEntitiesForDelete(tg: TransactionGroupBase): Promise<void> {\n const p = this.ProviderToUse;\n\n for (const pathId of this.deletedPathIDs) {\n const pathEntity = await p.GetEntityObject<MJAIAgentStepPathEntity>('MJ: AI Agent Step Paths', p.CurrentUser);\n await pathEntity.InnerLoad(CompositeKey.FromID(pathId));\n pathEntity.TransactionGroup = tg;\n await pathEntity.Delete();\n }\n\n for (const stepId of this.deletedStepIDs) {\n const stepEntity = await p.GetEntityObject<MJAIAgentStepEntity>('MJ: AI Agent Steps', p.CurrentUser);\n await stepEntity.InnerLoad(CompositeKey.FromID(stepId));\n stepEntity.TransactionGroup = tg;\n await stepEntity.Delete();\n }\n }\n\n // ── Flow Editor Event Handlers ──────────────────────────────\n\n protected async onNodeAdded(event: FlowNodeAddedEvent): Promise<void> {\n if (!this.AgentID) return;\n\n const p = this.ProviderToUse;\n const step = await p.GetEntityObject<MJAIAgentStepEntity>('MJ: AI Agent Steps', p.CurrentUser);\n step.NewRecord(); // This generates a UUID immediately - available before Save()\n step.AgentID = this.AgentID;\n step.Name = event.Node.Label;\n step.StepType = event.Node.Type as 'Action' | 'Prompt' | 'Sub-Agent' | 'ForEach' | 'While';\n step.Status = 'Active';\n step.StartingStep = this.steps.length === 0; // First step is starting step\n step.PositionX = Math.round(event.DropPosition.X);\n step.PositionY = Math.round(event.DropPosition.Y);\n step.OnErrorBehavior = 'fail';\n step.RetryCount = 0;\n step.TimeoutSeconds = 600;\n\n // Add the unsaved step to the array - it already has a UUID from NewRecord()\n // This allows connections to be drawn immediately without waiting for a database save\n this.steps.push(step);\n\n // Build a FlowNode using the entity's pre-generated ID so Foblex can track it\n const newNode = this.transformer.StepToNode(step, this.availableActions, this.availableAgents);\n this.nodes.push(newNode);\n this.markDirty();\n\n // Select the new node\n setTimeout(() => {\n this.flowEditor?.SelectNode(step.ID);\n this.onNodeSelected(newNode);\n }, 100);\n\n this.cdr.detectChanges();\n }\n\n protected async onConnectionCreated(event: FlowConnectionCreatedEvent): Promise<void> {\n if (!this.AgentID) return;\n\n // Prevent duplicate\n const exists = this.paths.some(\n p => UUIDsEqual(p.OriginStepID, event.SourceNodeID) && UUIDsEqual(p.DestinationStepID, event.TargetNodeID)\n );\n if (exists) return;\n\n const p = this.ProviderToUse;\n const path = await p.GetEntityObject<MJAIAgentStepPathEntity>('MJ: AI Agent Step Paths', p.CurrentUser);\n path.NewRecord(); // Generates UUID immediately - available before Save()\n path.OriginStepID = event.SourceNodeID;\n path.DestinationStepID = event.TargetNodeID;\n path.Priority = 0;\n\n // Add unsaved path to the array - save will happen on main Save() button\n this.paths.push(path);\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onNodeSelected(node: FlowNode | null): void {\n if (node) {\n this.selectedStep = this.steps.find(s => UUIDsEqual(s.ID, node.ID)) ?? null;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.showPropertiesPanel = true;\n this.StepSelected.emit(this.selectedStep);\n } else {\n this.selectedStep = null;\n // Only hide the panel if no connection is currently selected.\n // When the user clicks a connection, Foblex fires NodeSelected(null) AND\n // ConnectionSelected(conn) — we must not let the null-node event hide\n // the panel that the connection event just opened.\n if (!this.selectedConnection) {\n this.showPropertiesPanel = false;\n }\n this.StepSelected.emit(null);\n }\n this.cdr.detectChanges();\n }\n\n protected onConnectionSelected(conn: FlowConnection | null): void {\n if (conn) {\n this.selectedConnection = conn;\n this.selectedPathEntity = this.paths.find(p => UUIDsEqual(p.ID, conn.ID)) ?? null;\n this.selectedStep = null;\n this.showPropertiesPanel = true;\n } else {\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n }\n this.cdr.detectChanges();\n }\n\n protected onNodeRemoved(node: FlowNode): void {\n const step = this.steps.find(s => UUIDsEqual(s.ID, node.ID));\n if (step) {\n // Track for deletion on save (only if it was previously saved)\n if (step.IsSaved) {\n this.deletedStepIDs.push(step.ID);\n // Also mark paths connected to this step for deletion\n const connectedPaths = this.paths.filter(\n p => UUIDsEqual(p.OriginStepID, step.ID) || UUIDsEqual(p.DestinationStepID, step.ID)\n );\n for (const path of connectedPaths) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n }\n }\n this.steps = this.steps.filter(s => !UUIDsEqual(s.ID, node.ID));\n this.paths = this.paths.filter(\n p => !UUIDsEqual(p.OriginStepID, node.ID) && !UUIDsEqual(p.DestinationStepID, node.ID)\n );\n this.markDirty();\n }\n }\n\n protected onConnectionRemoved(conn: FlowConnection): void {\n const path = this.paths.find(p => UUIDsEqual(p.ID, conn.ID));\n if (path) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n this.paths = this.paths.filter(p => !UUIDsEqual(p.ID, conn.ID));\n this.markDirty();\n }\n }\n\n protected onConnectionReassigned(event: FlowConnectionReassignedEvent): void {\n const path = this.paths.find(p => UUIDsEqual(p.ID, event.ConnectionID));\n if (!path) return;\n\n // Update the entity's origin/destination to match the new visual endpoints\n path.OriginStepID = event.NewSourceNodeID;\n path.DestinationStepID = event.NewTargetNodeID;\n\n // Rebuild all connections so sibling-based visual logic recalculates\n // (e.g., Default vs Duplicate Default labels depend on sibling analysis)\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onNodesChanged(nodes: FlowNode[]): void {\n this.nodes = nodes;\n // Sync canvas positions back to entities immediately so that\n // any subsequent rebuildFlowModel() preserves drag changes.\n this.syncPositionsToEntities();\n this.markDirty(); \n }\n\n protected onConnectionsChanged(connections: FlowConnection[]): void {\n this.connections = connections;\n this.markDirty();\n }\n\n // ── Properties Panel Events ─────────────────────────────────\n\n protected onStepChanged(step: MJAIAgentStepEntity): void {\n // Update the corresponding flow node in-place and push to generic editor\n const node = this.nodes.find(n => UUIDsEqual(n.ID, step.ID));\n if (node) {\n const newLabel = step.Name;\n const newSubtitle = this.transformer.BuildStepSubtitle(step);\n const baseStatus = this.transformer.MapStepStatus(step.Status);\n const warningMessage = (baseStatus !== 'disabled') ? this.transformer.BuildConfigWarningMessage(step) : null;\n const newStatus = warningMessage ? 'warning' : baseStatus;\n const newIsStart = step.StartingStep === true;\n\n node.Label = newLabel;\n node.Subtitle = newSubtitle;\n node.Status = newStatus;\n node.StatusMessage = warningMessage ?? undefined;\n node.IsStartNode = newIsStart;\n\n // Update input port disabled state for starting steps\n const inputPort = node.Ports.find(p => p.Direction === 'input');\n if (inputPort) {\n inputPort.Disabled = newIsStart;\n }\n\n // Re-resolve icon from picker data (handles action/agent assignment changes)\n const resolved = this.transformer.ResolveStepIcon(step, this.availableActions, this.availableAgents);\n node.Icon = resolved.Icon;\n if (!node.Data) node.Data = {};\n node.Data['LogoURL'] = resolved.LogoURL ?? null;\n\n // For loop nodes, rebuild the loop-specific Data properties so the\n // inner body card updates immediately when the user changes body type / config\n if (step.StepType === 'ForEach' || step.StepType === 'While') {\n this.updateLoopNodeData(step, node);\n }\n\n // Push visual update to the generic flow editor (creates new object ref for OnPush)\n this.flowEditor?.UpdateNode(step.ID, {\n Label: newLabel,\n Subtitle: newSubtitle,\n Status: newStatus,\n StatusMessage: warningMessage ?? undefined,\n IsStartNode: newIsStart,\n Icon: resolved.Icon,\n Data: node.Data\n });\n }\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n /** Update loop-specific data fields on a FlowNode from the step entity */\n private updateLoopNodeData(step: MJAIAgentStepEntity, node: FlowNode): void {\n if (!node.Data) node.Data = {};\n // Delegate to the transformer's public methods for consistency\n const bodyType = step.LoopBodyType;\n node.Data['LoopBodyType'] = bodyType ?? null;\n node.Data['LoopBodyName'] = this.resolveLoopBodyNameFromStep(step);\n node.Data['LoopBodyIcon'] = this.getBodyTypeIcon(bodyType);\n node.Data['LoopBodyColor'] = this.getBodyTypeColor(bodyType);\n node.Data['LoopIterationSummary'] = this.transformer.BuildLoopIterationSummary(step);\n }\n\n private resolveLoopBodyNameFromStep(step: MJAIAgentStepEntity): string | null {\n switch (step.LoopBodyType) {\n case 'Action': return step.Action ?? null;\n case 'Prompt': return step.Prompt ?? null;\n case 'Sub-Agent': return step.SubAgent ?? null;\n default: return null;\n }\n }\n\n private getBodyTypeIcon(bodyType: string | null): string {\n switch (bodyType) {\n case 'Action': return 'fa-bolt';\n case 'Prompt': return 'fa-comment-dots';\n case 'Sub-Agent': return 'fa-robot';\n default: return 'fa-circle-nodes';\n }\n }\n\n private getBodyTypeColor(bodyType: string | null): string {\n switch (bodyType) {\n case 'Action': return '#3B82F6';\n case 'Prompt': return '#8B5CF6';\n case 'Sub-Agent': return '#10B981';\n default: return '#6B7280';\n }\n }\n\n protected onPathChanged(path: MJAIAgentStepPathEntity): void {\n // Rebuild all connections from the same origin since always/conditional logic\n // depends on sibling paths (e.g., \"Default\" label only appears when siblings exist)\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onDeleteStepRequested(step: MJAIAgentStepEntity): void {\n const node = this.nodes.find(n => UUIDsEqual(n.ID, step.ID));\n if (node) {\n this.flowEditor?.SelectNode(step.ID);\n this.flowEditor?.DeleteSelected();\n }\n this.showPropertiesPanel = false;\n this.selectedStep = null;\n this.cdr.detectChanges();\n }\n\n protected onDeletePathRequested(path: MJAIAgentStepPathEntity): void {\n const conn = this.connections.find(c => UUIDsEqual(c.ID, path.ID));\n if (conn) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n this.paths = this.paths.filter(p => !UUIDsEqual(p.ID, path.ID));\n this.rebuildFlowModel();\n this.markDirty();\n }\n this.showPropertiesPanel = false;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.cdr.detectChanges();\n }\n\n protected onCloseProperties(): void {\n this.showPropertiesPanel = false;\n this.flowEditor?.ClearSelection();\n }\n\n // ── View & UI Controls ──────────────────────────────────────\n\n protected toggleViewMode(): void {\n this.viewMode = this.viewMode === 'diagram' ? 'list' : 'diagram';\n this.cdr.detectChanges();\n }\n\n /** Whether editing is currently allowed — combines parent EditMode + fullscreen self-contained edit */\n get isEditingActive(): boolean {\n return this.EditMode || this.fullscreenEditMode;\n }\n\n protected toggleFullscreenEditMode(): void {\n this.fullscreenEditMode = !this.fullscreenEditMode;\n this.cdr.detectChanges();\n }\n\n protected cancelFullscreenEdit(): void {\n if (this.hasUnsavedChanges) {\n // Reload to discard changes\n this.fullscreenEditMode = false;\n this.hasUnsavedChanges = false;\n this.loadAll();\n } else {\n this.fullscreenEditMode = false;\n this.cdr.detectChanges();\n }\n }\n\n protected toggleFullScreen(): void {\n if (this.FullScreen && this.hasUnsavedChanges) {\n this.showUnsavedDialog = true;\n this.cdr.detectChanges();\n return;\n }\n this.performFullscreenToggle();\n }\n\n protected onUnsavedDialogSave(): void {\n this.showUnsavedDialog = false;\n this.Save().then(() => this.performFullscreenToggle());\n }\n\n protected onUnsavedDialogDiscard(): void {\n this.showUnsavedDialog = false;\n this.hasUnsavedChanges = false;\n this.fullscreenEditMode = false;\n this.performFullscreenToggle();\n // Reload original data\n this.loadAll();\n }\n\n protected onUnsavedDialogCancel(): void {\n this.showUnsavedDialog = false;\n this.cdr.detectChanges();\n }\n\n private performFullscreenToggle(): void {\n this.FullScreen = !this.FullScreen;\n\n if (this.FullScreen) {\n this.moveToBodyForFullscreen();\n } else {\n this.fullscreenEditMode = false;\n this.restoreFromFullscreen();\n }\n\n this.FullScreenToggled.emit(this.FullScreen);\n this.cdr.detectChanges();\n // Re-fit after layout change\n setTimeout(() => this.flowEditor?.ZoomToFit(), 200);\n }\n\n private moveToBodyForFullscreen(): void {\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentElement;\n this.originalNextSibling = hostEl.nextSibling;\n\n // Create backdrop as a separate body-level element so it covers everything\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'mj-agent-editor-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.toggleFullScreen());\n this.renderer.appendChild(document.body, this.backdropElement);\n\n // Move the host element to body — @HostBinding applies the fixed-position class\n this.renderer.appendChild(document.body, hostEl);\n }\n\n private restoreFromFullscreen(): void {\n // Remove backdrop\n if (this.backdropElement) {\n this.renderer.removeChild(document.body, this.backdropElement);\n this.backdropElement = null;\n }\n\n // Restore host element to original position\n if (!this.originalParent) return;\n const hostEl = this.elRef.nativeElement;\n if (this.originalNextSibling) {\n this.renderer.insertBefore(this.originalParent, hostEl, this.originalNextSibling);\n } else {\n this.renderer.appendChild(this.originalParent, hostEl);\n }\n this.originalParent = null;\n this.originalNextSibling = null;\n }\n\n protected onStepClickedInList(step: MJAIAgentStepEntity): void {\n this.selectedStep = step;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.showPropertiesPanel = true;\n this.StepSelected.emit(step);\n this.cdr.detectChanges();\n }\n\n // ── Keyboard Shortcuts ─────────────────────────────────────\n\n @HostListener('document:keydown.escape')\n protected onEscapeKey(): void {\n if (this.showUnsavedDialog) {\n this.onUnsavedDialogCancel();\n } else if (this.FullScreen) {\n this.toggleFullScreen();\n }\n }\n\n // ── Permission Check ────────────────────────────────────────\n\n private checkUpdatePermission(): void {\n const p = this.ProviderToUse;\n const entity = p.EntityByName('MJ: AI Agents');\n if (entity) {\n const perms = entity.GetUserPermisions(p.CurrentUser);\n this.userCanUpdate = perms?.CanUpdate === true;\n }\n }\n\n // ── View Preference Persistence ─────────────────────────────\n\n private loadViewPreferences(): void {\n const raw = UserInfoEngine.Instance.GetSetting(FlowAgentEditorComponent.PREF_KEY);\n if (raw) {\n try {\n const prefs = JSON.parse(raw) as { grid?: boolean; minimap?: boolean; legend?: boolean };\n if (prefs.grid != null) this.prefShowGrid = prefs.grid;\n if (prefs.minimap != null) this.prefShowMinimap = prefs.minimap;\n if (prefs.legend != null) this.prefShowLegend = prefs.legend;\n } catch {\n // Ignore malformed preference data\n }\n }\n }\n\n private saveViewPreferences(): void {\n const prefs = JSON.stringify({\n grid: this.prefShowGrid,\n minimap: this.prefShowMinimap,\n legend: this.prefShowLegend\n });\n // Fire-and-forget — preference save errors are non-critical\n UserInfoEngine.Instance.SetSetting(FlowAgentEditorComponent.PREF_KEY, prefs);\n }\n\n protected onGridPrefChanged(show: boolean): void {\n this.prefShowGrid = show;\n this.saveViewPreferences();\n }\n\n protected onMinimapPrefChanged(show: boolean): void {\n this.prefShowMinimap = show;\n this.saveViewPreferences();\n }\n\n protected onLegendPrefChanged(show: boolean): void {\n this.prefShowLegend = show;\n this.saveViewPreferences();\n }\n\n // ── Helpers ─────────────────────────────────────────────────\n\n private markDirty(): void {\n if (!this.hasUnsavedChanges) {\n this.hasUnsavedChanges = true;\n this.FlowChanged.emit(true);\n }\n }\n}\n","<div class=\"mj-agent-editor\">\n\n <!-- ── Toolbar ─────────────────────────────────────────────── -->\n <div class=\"mj-agent-editor-toolbar\" [class.mj-agent-editor-toolbar--editing]=\"isEditingActive\">\n <div class=\"mj-agent-editor-toolbar-left\">\n <!-- Undo / Redo (edit mode only) -->\n @if (isEditingActive) {\n <button class=\"mj-agent-editor-btn\"\n [disabled]=\"!flowEditor?.CanUndo\" (click)=\"flowEditor?.Undo()\" title=\"Undo (Ctrl+Z)\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n </button>\n }\n @if (isEditingActive) {\n <button class=\"mj-agent-editor-btn\"\n [disabled]=\"!flowEditor?.CanRedo\" (click)=\"flowEditor?.Redo()\" title=\"Redo (Ctrl+Y)\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n </button>\n }\n </div>\n\n <div class=\"mj-agent-editor-toolbar-center\">\n <!-- Fullscreen title -->\n @if (CanvasTitle) {\n <span class=\"mj-agent-editor-title\">\n <i class=\"fa-solid fa-diagram-project\"></i> {{ CanvasTitle }}\n </span>\n }\n\n <!-- View Mode Toggle -->\n <div class=\"mj-agent-editor-view-toggle\">\n <button class=\"mj-agent-editor-view-btn\"\n [class.mj-agent-editor-view-btn--active]=\"viewMode === 'diagram'\"\n (click)=\"viewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i> Diagram\n </button>\n <button class=\"mj-agent-editor-view-btn\"\n [class.mj-agent-editor-view-btn--active]=\"viewMode === 'list'\"\n (click)=\"viewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i> List\n </button>\n </div>\n\n <!-- Mode indicator badge -->\n @if (isEditingActive) {\n <span class=\"mj-agent-editor-mode-badge mj-agent-editor-mode-badge--editing\">\n <i class=\"fa-solid fa-pen\"></i> Editing\n </span>\n }\n @if (!isEditingActive) {\n <span class=\"mj-agent-editor-mode-badge mj-agent-editor-mode-badge--readonly\">\n <i class=\"fa-solid fa-lock\"></i> Read Only\n </span>\n }\n </div>\n\n <div class=\"mj-agent-editor-toolbar-right\">\n <!-- Status indicators -->\n @if (ShowSaveControls && hasUnsavedChanges) {\n <span class=\"mj-agent-editor-status mj-agent-editor-status--unsaved\">\n <i class=\"fa-solid fa-circle\"></i> Unsaved\n </span>\n }\n @if (ShowSaveControls && lastSaved) {\n <span class=\"mj-agent-editor-status\">\n Saved {{ lastSaved | date:'shortTime' }}\n </span>\n }\n\n <!-- Save + Cancel — only when this editor owns persistence. When a host form owns the\n record's save, a Save button here is a SECOND save button for the same record. -->\n @if (ShowSaveControls && isEditingActive) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--primary\"\n [disabled]=\"isSaving || !hasUnsavedChanges\" (click)=\"Save()\">\n <i class=\"fa-solid\" [ngClass]=\"isSaving ? 'fa-spinner fa-spin' : 'fa-floppy-disk'\"></i>\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n }\n @if (ShowSaveControls && fullscreenEditMode && !EditMode) {\n <button\n class=\"mj-agent-editor-btn\"\n (click)=\"cancelFullscreenEdit()\" title=\"Cancel editing\">\n <i class=\"fa-solid fa-xmark\"></i> Cancel\n </button>\n }\n\n @if (ShowSaveControls && isEditingActive) {\n <div class=\"mj-agent-editor-btn-divider\"></div>\n }\n\n <!-- Fullscreen edit toggle (only when parent is NOT in edit mode) -->\n @if (ShowSaveControls && !EditMode && !fullscreenEditMode && userCanUpdate) {\n <button\n class=\"mj-agent-editor-btn mj-agent-editor-btn--edit\"\n (click)=\"toggleFullscreenEditMode()\" title=\"Edit flow\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n }\n\n <!-- Expand / Close fullscreen -->\n @if (!FullScreen) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--expand\"\n (click)=\"toggleFullScreen()\" title=\"Expand to full screen\">\n <i class=\"fa-solid fa-up-right-and-down-left-from-center\"></i> Expand\n </button>\n }\n @if (FullScreen) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--close\"\n (click)=\"toggleFullScreen()\" title=\"Close full screen (Esc)\">\n <i class=\"fa-solid fa-xmark\"></i> Close\n </button>\n }\n </div>\n </div>\n\n <!-- ── Loading State ─────────────────────────────────────── -->\n @if (isLoading) {\n <div class=\"mj-agent-editor-loading\">\n <!-- MJ's shared indicator, not a hand-rolled fa-spinner: one loading affordance across the\n product means a slow canvas looks like every other slow thing, not like a different bug. -->\n <mj-loading text=\"Loading flow...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- ── Main Content ──────────────────────────────────────── -->\n @if (!isLoading) {\n <div class=\"mj-agent-editor-body\">\n <!-- Diagram View -->\n @if (viewMode === 'diagram') {\n <div class=\"mj-agent-editor-diagram\">\n <mj-flow-editor #flowEditor\n [Nodes]=\"nodes\"\n [Connections]=\"connections\"\n [NodeTypes]=\"nodeTypes\"\n [ReadOnly]=\"!isEditingActive\"\n [ShowMinimap]=\"prefShowMinimap\"\n [ShowPalette]=\"isEditingActive\"\n [ShowGrid]=\"prefShowGrid\"\n [ShowLegend]=\"prefShowLegend\"\n [ShowStatusBar]=\"true\"\n [ShowToolbar]=\"true\"\n [AutoLayoutDirection]=\"'vertical'\"\n (NodeSelected)=\"onNodeSelected($event)\"\n (NodeAdded)=\"onNodeAdded($event)\"\n (NodeRemoved)=\"onNodeRemoved($event)\"\n (ConnectionCreated)=\"onConnectionCreated($event)\"\n (ConnectionRemoved)=\"onConnectionRemoved($event)\"\n (ConnectionReassigned)=\"onConnectionReassigned($event)\"\n (ConnectionSelected)=\"onConnectionSelected($event)\"\n (NodesChanged)=\"onNodesChanged($event)\"\n (ConnectionsChanged)=\"onConnectionsChanged($event)\"\n (GridToggled)=\"onGridPrefChanged($event)\"\n (MinimapToggled)=\"onMinimapPrefChanged($event)\"\n (LegendToggled)=\"onLegendPrefChanged($event)\">\n </mj-flow-editor>\n <!-- Properties Panel -->\n <div class=\"mj-agent-editor-properties\"\n [class.mj-agent-editor-properties--visible]=\"showPropertiesPanel\">\n <mj-agent-properties-panel\n [Step]=\"selectedStep\"\n [SelectedConnection]=\"selectedConnection\"\n [PathEntity]=\"selectedPathEntity\"\n [ReadOnly]=\"!isEditingActive\"\n [Actions]=\"availableActions\"\n [Prompts]=\"availablePrompts\"\n [Agents]=\"availableAgents\"\n [AllSteps]=\"steps\"\n (StepChanged)=\"onStepChanged($event)\"\n (PathChanged)=\"onPathChanged($event)\"\n (DeleteStepRequested)=\"onDeleteStepRequested($event)\"\n (DeletePathRequested)=\"onDeletePathRequested($event)\"\n (CloseRequested)=\"onCloseProperties()\">\n </mj-agent-properties-panel>\n </div>\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"mj-agent-editor-list\">\n <mj-agent-step-list\n [Steps]=\"steps\"\n [Paths]=\"paths\"\n [SelectedStepID]=\"selectedStep?.ID || null\"\n (StepClicked)=\"onStepClickedInList($event)\">\n </mj-agent-step-list>\n <!-- Properties Panel in list mode too -->\n <div class=\"mj-agent-editor-properties\"\n [class.mj-agent-editor-properties--visible]=\"showPropertiesPanel\">\n <mj-agent-properties-panel\n [Step]=\"selectedStep\"\n [SelectedConnection]=\"selectedConnection\"\n [PathEntity]=\"selectedPathEntity\"\n [ReadOnly]=\"!isEditingActive\"\n [Actions]=\"availableActions\"\n [Prompts]=\"availablePrompts\"\n [Agents]=\"availableAgents\"\n [AllSteps]=\"steps\"\n (StepChanged)=\"onStepChanged($event)\"\n (PathChanged)=\"onPathChanged($event)\"\n (DeleteStepRequested)=\"onDeleteStepRequested($event)\"\n (DeletePathRequested)=\"onDeletePathRequested($event)\"\n (CloseRequested)=\"onCloseProperties()\">\n </mj-agent-properties-panel>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- ── Unsaved Changes Dialog ──────────────────────────── -->\n @if (showUnsavedDialog) {\n <div class=\"mj-agent-editor-dialog-overlay\">\n <div class=\"mj-agent-editor-dialog\">\n <div class=\"mj-agent-editor-dialog-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <h3 class=\"mj-agent-editor-dialog-title\">Unsaved Changes</h3>\n <p class=\"mj-agent-editor-dialog-message\">\n You have unsaved changes to this flow. What would you like to do?\n </p>\n <div class=\"mj-agent-editor-dialog-actions\">\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--primary\" (click)=\"onUnsavedDialogSave()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save & Close\n </button>\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--danger-outline\" (click)=\"onUnsavedDialogDiscard()\">\n Discard Changes\n </button>\n <button class=\"mj-agent-editor-btn\" (click)=\"onUnsavedDialogCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"flow-agent-editor.component.js","sourceRoot":"","sources":["../../../src/lib/agent-editor/flow-agent-editor.component.ts","../../../src/lib/agent-editor/flow-agent-editor.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, Input, Output, EventEmitter, ViewChild, OnInit, OnChanges, OnDestroy,\n SimpleChanges, ChangeDetectorRef, ViewEncapsulation, HostListener, HostBinding,\n ElementRef, Renderer2\n} from '@angular/core';\nimport { RunView, CompositeKey, TransactionGroupBase } from '@memberjunction/core';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { MJAIAgentStepEntity, MJAIAgentStepPathEntity, UserInfoEngine } from '@memberjunction/core-entities';\nimport { FlowNode, FlowConnection, FlowNodeAddedEvent, FlowConnectionCreatedEvent, FlowConnectionReassignedEvent, FlowNodeTypeConfig } from '../interfaces/flow-types';\nimport { FlowEditorComponent } from '../components/flow-editor.component';\nimport { AgentFlowTransformerService, AGENT_STEP_TYPE_CONFIGS } from './agent-flow-transformer.service';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/** View mode for the agent editor */\nexport type AgentEditorViewMode = 'diagram' | 'list';\n\n/**\n * Flow Agent Editor — wraps the generic FlowEditorComponent with\n * MJ agent-specific CRUD, properties panel, and data transformation.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-agent-editor',\n templateUrl: './flow-agent-editor.component.html',\n styleUrls: ['./flow-agent-editor.component.css'],\n encapsulation: ViewEncapsulation.None,\n providers: [AgentFlowTransformerService]\n})\nexport class FlowAgentEditorComponent extends BaseAngularComponent implements OnInit, OnChanges, OnDestroy {\n // ── Host Bindings ─────────────────────────────────────────────\n @HostBinding('class.mj-flow-agent-editor--fullscreen') get HostFullScreen(): boolean { return this.FullScreen; }\n\n // ── Inputs ──────────────────────────────────────────────────\n @Input() AgentID: string | null = null;\n @Input() EditMode = true;\n @Input() FullScreen = false;\n\n /**\n * Whether this editor shows its own Save / Edit / Cancel controls.\n *\n * **Off by default, and that default is the safe one.** When a host form owns the record's save —\n * which is the normal case, since the flow is one part of an agent — a Save button here is a\n * second save button for the same record. The user then has two, they disagree about what \"saved\"\n * means, and the unsaved indicator on one says nothing about the other.\n *\n * A host that turns this ON is declaring that this editor owns its own persistence (the standalone\n * or fullscreen self-contained case). A host that leaves it off MUST call\n * {@link FlowAgentEditorComponent.QueueSaveInto} from its own save, or flow edits will have no way\n * to reach the database at all.\n */\n @Input() ShowSaveControls = false;\n\n /**\n * The title shown in the centre of the toolbar. `null` hides it.\n *\n * Hidden by hosts whose own page chrome already names the record — repeating it inside the canvas\n * is a second, smaller title competing with the real one.\n */\n @Input() CanvasTitle: string | null = 'Flow Configuration';\n\n // ── Outputs ─────────────────────────────────────────────────\n @Output() FlowSaved = new EventEmitter<void>();\n @Output() FlowChanged = new EventEmitter<boolean>();\n @Output() FullScreenToggled = new EventEmitter<boolean>();\n @Output() StepSelected = new EventEmitter<MJAIAgentStepEntity | null>();\n\n // ── View Children ───────────────────────────────────────────\n @ViewChild('flowEditor') protected flowEditor: FlowEditorComponent | undefined;\n\n // ── State ───────────────────────────────────────────────────\n protected nodes: FlowNode[] = [];\n protected connections: FlowConnection[] = [];\n protected nodeTypes: FlowNodeTypeConfig[] = AGENT_STEP_TYPE_CONFIGS;\n protected viewMode: AgentEditorViewMode = 'diagram';\n protected isLoading = true;\n protected isSaving = false;\n protected hasUnsavedChanges = false;\n protected lastSaved: Date | null = null;\n\n // Fullscreen self-contained edit mode\n protected fullscreenEditMode = false;\n protected showUnsavedDialog = false;\n\n // Entity data\n protected steps: MJAIAgentStepEntity[] = [];\n protected paths: MJAIAgentStepPathEntity[] = [];\n protected deletedStepIDs: string[] = [];\n protected deletedPathIDs: string[] = [];\n\n // Selected items\n protected selectedStep: MJAIAgentStepEntity | null = null;\n protected selectedConnection: FlowConnection | null = null;\n protected selectedPathEntity: MJAIAgentStepPathEntity | null = null;\n protected showPropertiesPanel = false;\n\n // Picker data (includes icon fields for node rendering)\n protected availableActions: Array<{ ID: string; Name: string; IconClass?: string | null }> = [];\n protected availablePrompts: Array<{ ID: string; Name: string }> = [];\n protected availableAgents: Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }> = [];\n\n // Permission state — cached once on init\n protected userCanUpdate = false;\n\n // User view preferences (persisted via UserInfoEngine)\n protected prefShowGrid = true;\n protected prefShowMinimap = true;\n protected prefShowLegend = true;\n\n private static readonly PREF_KEY = 'flow-editor/view-prefs';\n\n // Initial zoom state\n private needsInitialZoom = false;\n private resizeObserver: ResizeObserver | null = null;\n\n // Fullscreen DOM relocation state\n private originalParent: HTMLElement | null = null;\n private originalNextSibling: Node | null = null;\n private backdropElement: HTMLElement | null = null;\n\n constructor(\n private cdr: ChangeDetectorRef,\n private transformer: AgentFlowTransformerService,\n private elRef: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {\n super();\n }\n\n // ── Lifecycle ───────────────────────────────────────────────\n\n ngOnInit(): void {\n this.loadViewPreferences();\n this.checkUpdatePermission();\n if (this.AgentID) {\n this.loadAll();\n }\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['AgentID'] && !changes['AgentID'].firstChange && this.AgentID) {\n this.loadAll();\n }\n }\n\n ngOnDestroy(): void {\n this.teardownResizeObserver();\n // Restore element to original parent if still in fullscreen\n if (this.FullScreen) {\n this.restoreFromFullscreen();\n }\n }\n\n // ── Data Loading ────────────────────────────────────────────\n\n private async loadAll(): Promise<void> {\n this.isLoading = true;\n this.cdr.detectChanges();\n\n try {\n await Promise.all([\n this.loadStepsAndPaths(),\n this.loadPickerData()\n ]);\n this.rebuildFlowModel();\n } finally {\n this.isLoading = false;\n this.cdr.detectChanges();\n\n // Flag that we need an initial zoom; it will fire when the host element\n // first becomes visible (e.g. Kendo PanelBar expands)\n this.setupInitialZoomObserver();\n }\n }\n\n private async loadStepsAndPaths(): Promise<void> {\n if (!this.AgentID) return;\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [stepsResult, pathsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: AI Agent Steps',\n ExtraFilter: `AgentID='${this.AgentID}'`,\n OrderBy: 'Name ASC',\n ResultType: 'entity_object'\n },\n {\n EntityName: 'MJ: AI Agent Step Paths',\n ExtraFilter: `OriginStepID IN (SELECT ID FROM [__mj].[vwAIAgentSteps] WHERE AgentID='${this.AgentID}')`,\n OrderBy: 'Priority DESC',\n ResultType: 'entity_object'\n }\n ]);\n\n this.steps = stepsResult.Success ? (stepsResult.Results as MJAIAgentStepEntity[]) : [];\n this.paths = pathsResult.Success ? (pathsResult.Results as MJAIAgentStepPathEntity[]) : [];\n this.deletedStepIDs = [];\n this.deletedPathIDs = [];\n }\n\n private async loadPickerData(): Promise<void> {\n const rv = RunView.FromMetadataProvider(this.ProviderToUse);\n const [actionsResult, promptsResult, agentsResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n Fields: ['ID', 'Name', 'IconClass'],\n ExtraFilter: `Status='Active'`,\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Prompts',\n Fields: ['ID', 'Name'],\n ExtraFilter: '',\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n },\n {\n EntityName: 'MJ: AI Agents',\n Fields: ['ID', 'Name', 'IconClass', 'LogoURL'],\n ExtraFilter: this.AgentID ? `ID <> '${this.AgentID}'` : '',\n OrderBy: 'Name ASC',\n ResultType: 'simple'\n }\n ]);\n\n this.availableActions = actionsResult.Success\n ? (actionsResult.Results as Array<{ ID: string; Name: string; IconClass?: string | null }>)\n : [];\n this.availablePrompts = promptsResult.Success\n ? (promptsResult.Results as Array<{ ID: string; Name: string }>)\n : [];\n this.availableAgents = agentsResult.Success\n ? (agentsResult.Results as Array<{ ID: string; Name: string; IconClass?: string | null; LogoURL?: string | null }>)\n : [];\n }\n\n private rebuildFlowModel(): void {\n this.nodes = this.transformer.StepsToNodes(this.steps, this.availableActions, this.availableAgents);\n this.connections = this.transformer.PathsToConnections(this.paths);\n }\n\n /**\n * Observe the host element's size. When it transitions from zero to non-zero height\n * (i.e. the collapsed Kendo panel expands), trigger the initial auto-arrange or zoom-to-fit.\n */\n private setupInitialZoomObserver(): void {\n if (this.nodes.length === 0) return;\n\n this.needsInitialZoom = true;\n this.teardownResizeObserver();\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const height = entry.contentRect.height;\n if (height > 0 && this.needsInitialZoom) {\n this.needsInitialZoom = false;\n this.teardownResizeObserver();\n // Short delay for Foblex canvas to finish its own init after becoming visible\n setTimeout(() => this.applyInitialZoom(), 100);\n }\n }\n });\n\n this.resizeObserver.observe(this.elRef.nativeElement);\n }\n\n private applyInitialZoom(): void {\n if (!this.flowEditor || this.nodes.length === 0) return;\n const allAtOrigin = this.nodes.every(n => n.Position.X === 0 && n.Position.Y === 0);\n if (allAtOrigin) {\n this.flowEditor.AutoArrange();\n } else {\n this.flowEditor.ZoomToFit();\n }\n }\n\n private teardownResizeObserver(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n // ── Save ────────────────────────────────────────────────────\n\n /**\n * Saves the flow on its own — creates a transaction, queues everything into it, submits.\n *\n * Used when this editor owns the save (the standalone / fullscreen self-contained mode). A host\n * that owns the record's save should call {@link QueueSaveInto} instead so the flow lands in the\n * same transaction as the rest of the record.\n */\n async Save(): Promise<void> {\n if (this.isSaving || !this.AgentID) return;\n this.isSaving = true;\n this.cdr.detectChanges();\n\n try {\n const p = this.ProviderToUse;\n const tg = await p.CreateTransactionGroup();\n await this.QueueSaveInto(tg);\n\n if (!await tg.Submit()) {\n console.error('Failed to save flow — all changes have been rolled back');\n return;\n }\n\n this.MarkSaved();\n // Exit self-contained fullscreen edit mode after successful save\n if (this.fullscreenEditMode) {\n this.fullscreenEditMode = false;\n }\n this.FlowSaved.emit();\n } catch (err) {\n console.error('Error saving flow:', err);\n } finally {\n this.isSaving = false;\n this.cdr.detectChanges();\n }\n }\n\n /**\n * Queues every step and path change onto a transaction the CALLER owns and will submit.\n *\n * Split out of {@link Save} so a host form can make the flow part of the record's own atomic save\n * rather than a second, separate one. Two independent saves is how a record ends up looking saved\n * while the user's step edits are gone — the form succeeds, the flow fails, and nothing says so.\n *\n * Deliberately does NOT submit and does NOT clear dirty state: the caller decides whether the\n * transaction commits, and only the caller knows whether it did. Call {@link MarkSaved} after a\n * successful submit.\n */\n public async QueueSaveInto(tg: TransactionGroupBase): Promise<void> {\n // Positions live on the canvas until asked for, so pull them onto the entities first — otherwise\n // a drag made just before saving is the one change that does not persist.\n this.syncPositionsFromCanvas();\n\n await this.queueRemovedEntitiesForDelete(tg);\n\n for (const step of this.steps) {\n step.TransactionGroup = tg;\n await step.Save();\n }\n\n for (const path of this.paths) {\n path.TransactionGroup = tg;\n await path.Save();\n }\n }\n\n /** Clears dirty state after the owning transaction actually committed. */\n public MarkSaved(): void {\n this.deletedPathIDs = [];\n this.deletedStepIDs = [];\n this.hasUnsavedChanges = false;\n this.lastSaved = new Date();\n this.cdr.detectChanges();\n }\n\n /** Whether the flow holds edits that have not been written yet. Read by a host that owns the save. */\n public get HasUnsavedChanges(): boolean {\n return this.hasUnsavedChanges;\n }\n\n private syncPositionsFromCanvas(): void {\n this.syncPositionsToEntities();\n }\n\n /** Write current FlowNode positions back to the underlying step entities.\n * Called on every node move so that rebuildFlowModel() never loses drag changes. */\n private syncPositionsToEntities(): void {\n for (const node of this.nodes) {\n const step = this.steps.find(s => UUIDsEqual(s.ID, node.ID));\n if (step) {\n this.transformer.ApplyNodePosition(step, node);\n }\n }\n }\n\n private async queueRemovedEntitiesForDelete(tg: TransactionGroupBase): Promise<void> {\n const p = this.ProviderToUse;\n\n for (const pathId of this.deletedPathIDs) {\n const pathEntity = await p.GetEntityObject<MJAIAgentStepPathEntity>('MJ: AI Agent Step Paths', p.CurrentUser);\n await pathEntity.InnerLoad(CompositeKey.FromID(pathId));\n pathEntity.TransactionGroup = tg;\n await pathEntity.Delete();\n }\n\n for (const stepId of this.deletedStepIDs) {\n const stepEntity = await p.GetEntityObject<MJAIAgentStepEntity>('MJ: AI Agent Steps', p.CurrentUser);\n await stepEntity.InnerLoad(CompositeKey.FromID(stepId));\n stepEntity.TransactionGroup = tg;\n await stepEntity.Delete();\n }\n }\n\n // ── Flow Editor Event Handlers ──────────────────────────────\n\n protected async onNodeAdded(event: FlowNodeAddedEvent): Promise<void> {\n if (!this.AgentID) return;\n\n const p = this.ProviderToUse;\n const step = await p.GetEntityObject<MJAIAgentStepEntity>('MJ: AI Agent Steps', p.CurrentUser);\n step.NewRecord(); // This generates a UUID immediately - available before Save()\n step.AgentID = this.AgentID;\n step.Name = event.Node.Label;\n step.StepType = event.Node.Type as 'Action' | 'Prompt' | 'Sub-Agent' | 'ForEach' | 'While';\n step.Status = 'Active';\n step.StartingStep = this.steps.length === 0; // First step is starting step\n step.PositionX = Math.round(event.DropPosition.X);\n step.PositionY = Math.round(event.DropPosition.Y);\n step.OnErrorBehavior = 'fail';\n step.RetryCount = 0;\n step.TimeoutSeconds = 600;\n\n // Add the unsaved step to the array - it already has a UUID from NewRecord()\n // This allows connections to be drawn immediately without waiting for a database save\n this.steps.push(step);\n\n // Build a FlowNode using the entity's pre-generated ID so Foblex can track it\n const newNode = this.transformer.StepToNode(step, this.availableActions, this.availableAgents);\n this.nodes.push(newNode);\n this.markDirty();\n\n // Select the new node\n setTimeout(() => {\n this.flowEditor?.SelectNode(step.ID);\n this.onNodeSelected(newNode);\n }, 100);\n\n this.cdr.detectChanges();\n }\n\n protected async onConnectionCreated(event: FlowConnectionCreatedEvent): Promise<void> {\n if (!this.AgentID) return;\n\n // Prevent duplicate\n const exists = this.paths.some(\n p => UUIDsEqual(p.OriginStepID, event.SourceNodeID) && UUIDsEqual(p.DestinationStepID, event.TargetNodeID)\n );\n if (exists) return;\n\n const p = this.ProviderToUse;\n const path = await p.GetEntityObject<MJAIAgentStepPathEntity>('MJ: AI Agent Step Paths', p.CurrentUser);\n path.NewRecord(); // Generates UUID immediately - available before Save()\n path.OriginStepID = event.SourceNodeID;\n path.DestinationStepID = event.TargetNodeID;\n path.Priority = 0;\n\n // Add unsaved path to the array - save will happen on main Save() button\n this.paths.push(path);\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onNodeSelected(node: FlowNode | null): void {\n if (node) {\n this.selectedStep = this.steps.find(s => UUIDsEqual(s.ID, node.ID)) ?? null;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.showPropertiesPanel = true;\n this.StepSelected.emit(this.selectedStep);\n } else {\n this.selectedStep = null;\n // Only hide the panel if no connection is currently selected.\n // When the user clicks a connection, Foblex fires NodeSelected(null) AND\n // ConnectionSelected(conn) — we must not let the null-node event hide\n // the panel that the connection event just opened.\n if (!this.selectedConnection) {\n this.showPropertiesPanel = false;\n }\n this.StepSelected.emit(null);\n }\n this.cdr.detectChanges();\n }\n\n protected onConnectionSelected(conn: FlowConnection | null): void {\n if (conn) {\n this.selectedConnection = conn;\n this.selectedPathEntity = this.paths.find(p => UUIDsEqual(p.ID, conn.ID)) ?? null;\n this.selectedStep = null;\n this.showPropertiesPanel = true;\n } else {\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n }\n this.cdr.detectChanges();\n }\n\n protected onNodeRemoved(node: FlowNode): void {\n const step = this.steps.find(s => UUIDsEqual(s.ID, node.ID));\n if (step) {\n // Track for deletion on save (only if it was previously saved)\n if (step.IsSaved) {\n this.deletedStepIDs.push(step.ID);\n // Also mark paths connected to this step for deletion\n const connectedPaths = this.paths.filter(\n p => UUIDsEqual(p.OriginStepID, step.ID) || UUIDsEqual(p.DestinationStepID, step.ID)\n );\n for (const path of connectedPaths) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n }\n }\n this.steps = this.steps.filter(s => !UUIDsEqual(s.ID, node.ID));\n this.paths = this.paths.filter(\n p => !UUIDsEqual(p.OriginStepID, node.ID) && !UUIDsEqual(p.DestinationStepID, node.ID)\n );\n this.markDirty();\n }\n }\n\n protected onConnectionRemoved(conn: FlowConnection): void {\n const path = this.paths.find(p => UUIDsEqual(p.ID, conn.ID));\n if (path) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n this.paths = this.paths.filter(p => !UUIDsEqual(p.ID, conn.ID));\n this.markDirty();\n }\n }\n\n protected onConnectionReassigned(event: FlowConnectionReassignedEvent): void {\n const path = this.paths.find(p => UUIDsEqual(p.ID, event.ConnectionID));\n if (!path) return;\n\n // Update the entity's origin/destination to match the new visual endpoints\n path.OriginStepID = event.NewSourceNodeID;\n path.DestinationStepID = event.NewTargetNodeID;\n\n // Rebuild all connections so sibling-based visual logic recalculates\n // (e.g., Default vs Duplicate Default labels depend on sibling analysis)\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onNodesChanged(nodes: FlowNode[]): void {\n this.nodes = nodes;\n // Sync canvas positions back to entities immediately so that\n // any subsequent rebuildFlowModel() preserves drag changes.\n this.syncPositionsToEntities();\n this.markDirty(); \n }\n\n protected onConnectionsChanged(connections: FlowConnection[]): void {\n this.connections = connections;\n this.markDirty();\n }\n\n // ── Properties Panel Events ─────────────────────────────────\n\n protected onStepChanged(step: MJAIAgentStepEntity): void {\n // Update the corresponding flow node in-place and push to generic editor\n const node = this.nodes.find(n => UUIDsEqual(n.ID, step.ID));\n if (node) {\n const newLabel = step.Name;\n const newSubtitle = this.transformer.BuildStepSubtitle(step);\n const baseStatus = this.transformer.MapStepStatus(step.Status);\n const warningMessage = (baseStatus !== 'disabled') ? this.transformer.BuildConfigWarningMessage(step) : null;\n const newStatus = warningMessage ? 'warning' : baseStatus;\n const newIsStart = step.StartingStep === true;\n\n node.Label = newLabel;\n node.Subtitle = newSubtitle;\n node.Status = newStatus;\n node.StatusMessage = warningMessage ?? undefined;\n node.IsStartNode = newIsStart;\n\n // Update input port disabled state for starting steps\n const inputPort = node.Ports.find(p => p.Direction === 'input');\n if (inputPort) {\n inputPort.Disabled = newIsStart;\n }\n\n // Re-resolve icon from picker data (handles action/agent assignment changes)\n const resolved = this.transformer.ResolveStepIcon(step, this.availableActions, this.availableAgents);\n node.Icon = resolved.Icon;\n if (!node.Data) node.Data = {};\n node.Data['LogoURL'] = resolved.LogoURL ?? null;\n\n // For loop nodes, rebuild the loop-specific Data properties so the\n // inner body card updates immediately when the user changes body type / config\n if (step.StepType === 'ForEach' || step.StepType === 'While') {\n this.updateLoopNodeData(step, node);\n }\n\n // Push visual update to the generic flow editor (creates new object ref for OnPush)\n this.flowEditor?.UpdateNode(step.ID, {\n Label: newLabel,\n Subtitle: newSubtitle,\n Status: newStatus,\n StatusMessage: warningMessage ?? undefined,\n IsStartNode: newIsStart,\n Icon: resolved.Icon,\n Data: node.Data\n });\n }\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n /** Update loop-specific data fields on a FlowNode from the step entity */\n private updateLoopNodeData(step: MJAIAgentStepEntity, node: FlowNode): void {\n if (!node.Data) node.Data = {};\n // Delegate to the transformer's public methods for consistency\n const bodyType = step.LoopBodyType;\n node.Data['LoopBodyType'] = bodyType ?? null;\n node.Data['LoopBodyName'] = this.resolveLoopBodyNameFromStep(step);\n node.Data['LoopBodyIcon'] = this.getBodyTypeIcon(bodyType);\n node.Data['LoopBodyColor'] = this.getBodyTypeColor(bodyType);\n node.Data['LoopIterationSummary'] = this.transformer.BuildLoopIterationSummary(step);\n }\n\n private resolveLoopBodyNameFromStep(step: MJAIAgentStepEntity): string | null {\n switch (step.LoopBodyType) {\n case 'Action': return step.Action ?? null;\n case 'Prompt': return step.Prompt ?? null;\n case 'Sub-Agent': return step.SubAgent ?? null;\n default: return null;\n }\n }\n\n private getBodyTypeIcon(bodyType: string | null): string {\n switch (bodyType) {\n case 'Action': return 'fa-bolt';\n case 'Prompt': return 'fa-comment-dots';\n case 'Sub-Agent': return 'fa-robot';\n default: return 'fa-circle-nodes';\n }\n }\n\n private getBodyTypeColor(bodyType: string | null): string {\n switch (bodyType) {\n case 'Action': return '#3B82F6';\n case 'Prompt': return '#8B5CF6';\n case 'Sub-Agent': return '#10B981';\n default: return '#6B7280';\n }\n }\n\n protected onPathChanged(path: MJAIAgentStepPathEntity): void {\n // Rebuild all connections from the same origin since always/conditional logic\n // depends on sibling paths (e.g., \"Default\" label only appears when siblings exist)\n this.rebuildFlowModel();\n this.markDirty();\n this.cdr.detectChanges();\n }\n\n protected onDeleteStepRequested(step: MJAIAgentStepEntity): void {\n const node = this.nodes.find(n => UUIDsEqual(n.ID, step.ID));\n if (node) {\n this.flowEditor?.SelectNode(step.ID);\n this.flowEditor?.DeleteSelected();\n }\n this.showPropertiesPanel = false;\n this.selectedStep = null;\n this.cdr.detectChanges();\n }\n\n protected onDeletePathRequested(path: MJAIAgentStepPathEntity): void {\n const conn = this.connections.find(c => UUIDsEqual(c.ID, path.ID));\n if (conn) {\n if (path.IsSaved) {\n this.deletedPathIDs.push(path.ID);\n }\n this.paths = this.paths.filter(p => !UUIDsEqual(p.ID, path.ID));\n this.rebuildFlowModel();\n this.markDirty();\n }\n this.showPropertiesPanel = false;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.cdr.detectChanges();\n }\n\n protected onCloseProperties(): void {\n this.showPropertiesPanel = false;\n this.flowEditor?.ClearSelection();\n }\n\n // ── View & UI Controls ──────────────────────────────────────\n\n protected toggleViewMode(): void {\n this.viewMode = this.viewMode === 'diagram' ? 'list' : 'diagram';\n this.cdr.detectChanges();\n }\n\n /** Whether editing is currently allowed — combines parent EditMode + fullscreen self-contained edit */\n get IsEditingActive(): boolean {\n return this.EditMode || this.fullscreenEditMode;\n }\n\n /** @deprecated Use {@link IsEditingActive}. */\n get isEditingActive(): boolean {\n return this.IsEditingActive;\n }\n\n protected toggleFullscreenEditMode(): void {\n this.fullscreenEditMode = !this.fullscreenEditMode;\n this.cdr.detectChanges();\n }\n\n protected cancelFullscreenEdit(): void {\n if (this.hasUnsavedChanges) {\n // Reload to discard changes\n this.fullscreenEditMode = false;\n this.hasUnsavedChanges = false;\n this.loadAll();\n } else {\n this.fullscreenEditMode = false;\n this.cdr.detectChanges();\n }\n }\n\n protected toggleFullScreen(): void {\n if (this.FullScreen && this.hasUnsavedChanges) {\n this.showUnsavedDialog = true;\n this.cdr.detectChanges();\n return;\n }\n this.performFullscreenToggle();\n }\n\n protected onUnsavedDialogSave(): void {\n this.showUnsavedDialog = false;\n this.Save().then(() => this.performFullscreenToggle());\n }\n\n protected onUnsavedDialogDiscard(): void {\n this.showUnsavedDialog = false;\n this.hasUnsavedChanges = false;\n this.fullscreenEditMode = false;\n this.performFullscreenToggle();\n // Reload original data\n this.loadAll();\n }\n\n protected onUnsavedDialogCancel(): void {\n this.showUnsavedDialog = false;\n this.cdr.detectChanges();\n }\n\n private performFullscreenToggle(): void {\n this.FullScreen = !this.FullScreen;\n\n if (this.FullScreen) {\n this.moveToBodyForFullscreen();\n } else {\n this.fullscreenEditMode = false;\n this.restoreFromFullscreen();\n }\n\n this.FullScreenToggled.emit(this.FullScreen);\n this.cdr.detectChanges();\n // Re-fit after layout change\n setTimeout(() => this.flowEditor?.ZoomToFit(), 200);\n }\n\n private moveToBodyForFullscreen(): void {\n const hostEl = this.elRef.nativeElement;\n this.originalParent = hostEl.parentElement;\n this.originalNextSibling = hostEl.nextSibling;\n\n // Create backdrop as a separate body-level element so it covers everything\n this.backdropElement = this.renderer.createElement('div');\n this.renderer.addClass(this.backdropElement, 'mj-agent-editor-backdrop');\n this.renderer.listen(this.backdropElement, 'click', () => this.toggleFullScreen());\n this.renderer.appendChild(document.body, this.backdropElement);\n\n // Move the host element to body — @HostBinding applies the fixed-position class\n this.renderer.appendChild(document.body, hostEl);\n }\n\n private restoreFromFullscreen(): void {\n // Remove backdrop\n if (this.backdropElement) {\n this.renderer.removeChild(document.body, this.backdropElement);\n this.backdropElement = null;\n }\n\n // Restore host element to original position\n if (!this.originalParent) return;\n const hostEl = this.elRef.nativeElement;\n if (this.originalNextSibling) {\n this.renderer.insertBefore(this.originalParent, hostEl, this.originalNextSibling);\n } else {\n this.renderer.appendChild(this.originalParent, hostEl);\n }\n this.originalParent = null;\n this.originalNextSibling = null;\n }\n\n protected onStepClickedInList(step: MJAIAgentStepEntity): void {\n this.selectedStep = step;\n this.selectedConnection = null;\n this.selectedPathEntity = null;\n this.showPropertiesPanel = true;\n this.StepSelected.emit(step);\n this.cdr.detectChanges();\n }\n\n // ── Keyboard Shortcuts ─────────────────────────────────────\n\n @HostListener('document:keydown.escape')\n protected onEscapeKey(): void {\n if (this.showUnsavedDialog) {\n this.onUnsavedDialogCancel();\n } else if (this.FullScreen) {\n this.toggleFullScreen();\n }\n }\n\n // ── Permission Check ────────────────────────────────────────\n\n private checkUpdatePermission(): void {\n const p = this.ProviderToUse;\n const entity = p.EntityByName('MJ: AI Agents');\n if (entity) {\n const perms = entity.GetUserPermisions(p.CurrentUser);\n this.userCanUpdate = perms?.CanUpdate === true;\n }\n }\n\n // ── View Preference Persistence ─────────────────────────────\n\n private loadViewPreferences(): void {\n const raw = UserInfoEngine.Instance.GetSetting(FlowAgentEditorComponent.PREF_KEY);\n if (raw) {\n try {\n const prefs = JSON.parse(raw) as { grid?: boolean; minimap?: boolean; legend?: boolean };\n if (prefs.grid != null) this.prefShowGrid = prefs.grid;\n if (prefs.minimap != null) this.prefShowMinimap = prefs.minimap;\n if (prefs.legend != null) this.prefShowLegend = prefs.legend;\n } catch {\n // Ignore malformed preference data\n }\n }\n }\n\n private saveViewPreferences(): void {\n const prefs = JSON.stringify({\n grid: this.prefShowGrid,\n minimap: this.prefShowMinimap,\n legend: this.prefShowLegend\n });\n // Fire-and-forget — preference save errors are non-critical\n UserInfoEngine.Instance.SetSetting(FlowAgentEditorComponent.PREF_KEY, prefs);\n }\n\n protected onGridPrefChanged(show: boolean): void {\n this.prefShowGrid = show;\n this.saveViewPreferences();\n }\n\n protected onMinimapPrefChanged(show: boolean): void {\n this.prefShowMinimap = show;\n this.saveViewPreferences();\n }\n\n protected onLegendPrefChanged(show: boolean): void {\n this.prefShowLegend = show;\n this.saveViewPreferences();\n }\n\n // ── Helpers ─────────────────────────────────────────────────\n\n private markDirty(): void {\n if (!this.hasUnsavedChanges) {\n this.hasUnsavedChanges = true;\n this.FlowChanged.emit(true);\n }\n }\n}\n","<div class=\"mj-agent-editor\">\n\n <!-- ── Toolbar ─────────────────────────────────────────────── -->\n <div class=\"mj-agent-editor-toolbar\" [class.mj-agent-editor-toolbar--editing]=\"isEditingActive\">\n <div class=\"mj-agent-editor-toolbar-left\">\n <!-- Undo / Redo (edit mode only) -->\n @if (isEditingActive) {\n <button class=\"mj-agent-editor-btn\"\n [disabled]=\"!flowEditor?.CanUndo\" (click)=\"flowEditor?.Undo()\" title=\"Undo (Ctrl+Z)\">\n <i class=\"fa-solid fa-rotate-left\"></i>\n </button>\n }\n @if (isEditingActive) {\n <button class=\"mj-agent-editor-btn\"\n [disabled]=\"!flowEditor?.CanRedo\" (click)=\"flowEditor?.Redo()\" title=\"Redo (Ctrl+Y)\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n </button>\n }\n </div>\n\n <div class=\"mj-agent-editor-toolbar-center\">\n <!-- Fullscreen title -->\n @if (CanvasTitle) {\n <span class=\"mj-agent-editor-title\">\n <i class=\"fa-solid fa-diagram-project\"></i> {{ CanvasTitle }}\n </span>\n }\n\n <!-- View Mode Toggle -->\n <div class=\"mj-agent-editor-view-toggle\">\n <button class=\"mj-agent-editor-view-btn\"\n [class.mj-agent-editor-view-btn--active]=\"viewMode === 'diagram'\"\n (click)=\"viewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i> Diagram\n </button>\n <button class=\"mj-agent-editor-view-btn\"\n [class.mj-agent-editor-view-btn--active]=\"viewMode === 'list'\"\n (click)=\"viewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i> List\n </button>\n </div>\n\n <!-- Mode indicator badge -->\n @if (isEditingActive) {\n <span class=\"mj-agent-editor-mode-badge mj-agent-editor-mode-badge--editing\">\n <i class=\"fa-solid fa-pen\"></i> Editing\n </span>\n }\n @if (!isEditingActive) {\n <span class=\"mj-agent-editor-mode-badge mj-agent-editor-mode-badge--readonly\">\n <i class=\"fa-solid fa-lock\"></i> Read Only\n </span>\n }\n </div>\n\n <div class=\"mj-agent-editor-toolbar-right\">\n <!-- Status indicators -->\n @if (ShowSaveControls && hasUnsavedChanges) {\n <span class=\"mj-agent-editor-status mj-agent-editor-status--unsaved\">\n <i class=\"fa-solid fa-circle\"></i> Unsaved\n </span>\n }\n @if (ShowSaveControls && lastSaved) {\n <span class=\"mj-agent-editor-status\">\n Saved {{ lastSaved | date:'shortTime' }}\n </span>\n }\n\n <!-- Save + Cancel — only when this editor owns persistence. When a host form owns the\n record's save, a Save button here is a SECOND save button for the same record. -->\n @if (ShowSaveControls && isEditingActive) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--primary\"\n [disabled]=\"isSaving || !hasUnsavedChanges\" (click)=\"Save()\">\n <i class=\"fa-solid\" [ngClass]=\"isSaving ? 'fa-spinner fa-spin' : 'fa-floppy-disk'\"></i>\n {{ isSaving ? 'Saving...' : 'Save' }}\n </button>\n }\n @if (ShowSaveControls && fullscreenEditMode && !EditMode) {\n <button\n class=\"mj-agent-editor-btn\"\n (click)=\"cancelFullscreenEdit()\" title=\"Cancel editing\">\n <i class=\"fa-solid fa-xmark\"></i> Cancel\n </button>\n }\n\n @if (ShowSaveControls && isEditingActive) {\n <div class=\"mj-agent-editor-btn-divider\"></div>\n }\n\n <!-- Fullscreen edit toggle (only when parent is NOT in edit mode) -->\n @if (ShowSaveControls && !EditMode && !fullscreenEditMode && userCanUpdate) {\n <button\n class=\"mj-agent-editor-btn mj-agent-editor-btn--edit\"\n (click)=\"toggleFullscreenEditMode()\" title=\"Edit flow\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n }\n\n <!-- Expand / Close fullscreen -->\n @if (!FullScreen) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--expand\"\n (click)=\"toggleFullScreen()\" title=\"Expand to full screen\">\n <i class=\"fa-solid fa-up-right-and-down-left-from-center\"></i> Expand\n </button>\n }\n @if (FullScreen) {\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--close\"\n (click)=\"toggleFullScreen()\" title=\"Close full screen (Esc)\">\n <i class=\"fa-solid fa-xmark\"></i> Close\n </button>\n }\n </div>\n </div>\n\n <!-- ── Loading State ─────────────────────────────────────── -->\n @if (isLoading) {\n <div class=\"mj-agent-editor-loading\">\n <!-- MJ's shared indicator, not a hand-rolled fa-spinner: one loading affordance across the\n product means a slow canvas looks like every other slow thing, not like a different bug. -->\n <mj-loading text=\"Loading flow...\" size=\"medium\"></mj-loading>\n </div>\n }\n\n <!-- ── Main Content ──────────────────────────────────────── -->\n @if (!isLoading) {\n <div class=\"mj-agent-editor-body\">\n <!-- Diagram View -->\n @if (viewMode === 'diagram') {\n <div class=\"mj-agent-editor-diagram\">\n <mj-flow-editor #flowEditor\n [Nodes]=\"nodes\"\n [Connections]=\"connections\"\n [NodeTypes]=\"nodeTypes\"\n [ReadOnly]=\"!isEditingActive\"\n [ShowMinimap]=\"prefShowMinimap\"\n [ShowPalette]=\"isEditingActive\"\n [ShowGrid]=\"prefShowGrid\"\n [ShowLegend]=\"prefShowLegend\"\n [ShowStatusBar]=\"true\"\n [ShowToolbar]=\"true\"\n [AutoLayoutDirection]=\"'vertical'\"\n (NodeSelected)=\"onNodeSelected($event)\"\n (NodeAdded)=\"onNodeAdded($event)\"\n (NodeRemoved)=\"onNodeRemoved($event)\"\n (ConnectionCreated)=\"onConnectionCreated($event)\"\n (ConnectionRemoved)=\"onConnectionRemoved($event)\"\n (ConnectionReassigned)=\"onConnectionReassigned($event)\"\n (ConnectionSelected)=\"onConnectionSelected($event)\"\n (NodesChanged)=\"onNodesChanged($event)\"\n (ConnectionsChanged)=\"onConnectionsChanged($event)\"\n (GridToggled)=\"onGridPrefChanged($event)\"\n (MinimapToggled)=\"onMinimapPrefChanged($event)\"\n (LegendToggled)=\"onLegendPrefChanged($event)\">\n </mj-flow-editor>\n <!-- Properties Panel -->\n <div class=\"mj-agent-editor-properties\"\n [class.mj-agent-editor-properties--visible]=\"showPropertiesPanel\">\n <mj-agent-properties-panel\n [Step]=\"selectedStep\"\n [SelectedConnection]=\"selectedConnection\"\n [PathEntity]=\"selectedPathEntity\"\n [ReadOnly]=\"!isEditingActive\"\n [Actions]=\"availableActions\"\n [Prompts]=\"availablePrompts\"\n [Agents]=\"availableAgents\"\n [AllSteps]=\"steps\"\n (StepChanged)=\"onStepChanged($event)\"\n (PathChanged)=\"onPathChanged($event)\"\n (DeleteStepRequested)=\"onDeleteStepRequested($event)\"\n (DeletePathRequested)=\"onDeletePathRequested($event)\"\n (CloseRequested)=\"onCloseProperties()\">\n </mj-agent-properties-panel>\n </div>\n </div>\n }\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"mj-agent-editor-list\">\n <mj-agent-step-list\n [Steps]=\"steps\"\n [Paths]=\"paths\"\n [SelectedStepID]=\"selectedStep?.ID || null\"\n (StepClicked)=\"onStepClickedInList($event)\">\n </mj-agent-step-list>\n <!-- Properties Panel in list mode too -->\n <div class=\"mj-agent-editor-properties\"\n [class.mj-agent-editor-properties--visible]=\"showPropertiesPanel\">\n <mj-agent-properties-panel\n [Step]=\"selectedStep\"\n [SelectedConnection]=\"selectedConnection\"\n [PathEntity]=\"selectedPathEntity\"\n [ReadOnly]=\"!isEditingActive\"\n [Actions]=\"availableActions\"\n [Prompts]=\"availablePrompts\"\n [Agents]=\"availableAgents\"\n [AllSteps]=\"steps\"\n (StepChanged)=\"onStepChanged($event)\"\n (PathChanged)=\"onPathChanged($event)\"\n (DeleteStepRequested)=\"onDeleteStepRequested($event)\"\n (DeletePathRequested)=\"onDeletePathRequested($event)\"\n (CloseRequested)=\"onCloseProperties()\">\n </mj-agent-properties-panel>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- ── Unsaved Changes Dialog ──────────────────────────── -->\n @if (showUnsavedDialog) {\n <div class=\"mj-agent-editor-dialog-overlay\">\n <div class=\"mj-agent-editor-dialog\">\n <div class=\"mj-agent-editor-dialog-icon\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n </div>\n <h3 class=\"mj-agent-editor-dialog-title\">Unsaved Changes</h3>\n <p class=\"mj-agent-editor-dialog-message\">\n You have unsaved changes to this flow. What would you like to do?\n </p>\n <div class=\"mj-agent-editor-dialog-actions\">\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--primary\" (click)=\"onUnsavedDialogSave()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save & Close\n </button>\n <button class=\"mj-agent-editor-btn mj-agent-editor-btn--danger-outline\" (click)=\"onUnsavedDialogDiscard()\">\n Discard Changes\n </button>\n <button class=\"mj-agent-editor-btn\" (click)=\"onUnsavedDialogCancel()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n</div>\n"]}
@@ -201,6 +201,8 @@ export declare class FlowEditorComponent implements OnInit, OnDestroy {
201
201
  GetTypeConfig(type: string): FlowNodeTypeConfig | null;
202
202
  /** Get the connectable side string for Foblex based on port side */
203
203
  GetConnectableSide(side: string | undefined): string;
204
+ get SelectedCount(): number;
205
+ /** @deprecated Use {@link SelectedCount}. */
204
206
  get selectedCount(): number;
205
207
  private pushUndoState;
206
208
  private updateZoomLevel;
@@ -1 +1 @@
1
- {"version":3,"file":"flow-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-editor.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-editor.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-editor.component.ts"],"names":[],"mappings":"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"}
@@ -549,15 +549,23 @@ export class FlowEditorComponent {
549
549
  }
550
550
  /** Highlight a sequence of nodes (e.g., execution path) */
551
551
  HighlightPath(nodeIds) {
552
+ // First index of each normalized ID (same answer as findIndex), built once so the node and
553
+ // connection passes are linear rather than nodes x path and connections x path.
554
+ const pathIndex = new Map();
555
+ nodeIds.forEach((id, i) => {
556
+ const key = NormalizeUUID(id);
557
+ if (!pathIndex.has(key))
558
+ pathIndex.set(key, i);
559
+ });
552
560
  for (const node of this.Nodes) {
553
- if (nodeIds.some(id => UUIDsEqual(id, node.ID))) {
561
+ if (pathIndex.has(NormalizeUUID(node.ID))) {
554
562
  node.Status = 'running';
555
563
  }
556
564
  }
557
565
  // Highlight connections along the path
558
566
  for (const conn of this.Connections) {
559
- const srcIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.SourceNodeID));
560
- const tgtIdx = nodeIds.findIndex(id => UUIDsEqual(id, conn.TargetNodeID));
567
+ const srcIdx = pathIndex.get(NormalizeUUID(conn.SourceNodeID)) ?? -1;
568
+ const tgtIdx = pathIndex.get(NormalizeUUID(conn.TargetNodeID)) ?? -1;
561
569
  if (srcIdx >= 0 && tgtIdx >= 0 && tgtIdx === srcIdx + 1) {
562
570
  conn.Animated = true;
563
571
  }
@@ -992,9 +1000,13 @@ export class FlowEditorComponent {
992
1000
  default: return 'auto';
993
1001
  }
994
1002
  }
995
- get selectedCount() {
1003
+ get SelectedCount() {
996
1004
  return this.selectedNodeIDs.length + this.selectedConnectionIDs.length;
997
1005
  }
1006
+ /** @deprecated Use {@link SelectedCount}. */
1007
+ get selectedCount() {
1008
+ return this.SelectedCount;
1009
+ }
998
1010
  pushUndoState() {
999
1011
  this.stateService.PushState(this.Nodes, this.Connections);
1000
1012
  }
@@ -1055,16 +1067,17 @@ export class FlowEditorComponent {
1055
1067
  }
1056
1068
  removeSelectedItems() {
1057
1069
  // Remove selected connections
1058
- const removedConnections = this.Connections.filter(c => this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));
1059
- this.Connections = this.Connections.filter(c => !this.selectedConnectionIDs.some(id => UUIDsEqual(id, c.ID)));
1070
+ const selectedConnections = new Set(this.selectedConnectionIDs.map(id => NormalizeUUID(id)));
1071
+ const removedConnections = this.Connections.filter(c => selectedConnections.has(NormalizeUUID(c.ID)));
1072
+ this.Connections = this.Connections.filter(c => !selectedConnections.has(NormalizeUUID(c.ID)));
1060
1073
  for (const conn of removedConnections) {
1061
1074
  this.ConnectionRemoved.emit(conn);
1062
1075
  }
1063
1076
  // Remove selected nodes and their connections
1064
- const removedNodes = this.Nodes.filter(n => this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));
1065
- this.Nodes = this.Nodes.filter(n => !this.selectedNodeIDs.some(id => UUIDsEqual(id, n.ID)));
1066
- // Also remove connections attached to deleted nodes
1067
1077
  const deletedNodeIDs = new Set(this.selectedNodeIDs.map(id => NormalizeUUID(id)));
1078
+ const removedNodes = this.Nodes.filter(n => deletedNodeIDs.has(NormalizeUUID(n.ID)));
1079
+ this.Nodes = this.Nodes.filter(n => !deletedNodeIDs.has(NormalizeUUID(n.ID)));
1080
+ // Also remove connections attached to deleted nodes
1068
1081
  const orphanedConnections = this.Connections.filter(c => deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) || deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID)));
1069
1082
  this.Connections = this.Connections.filter(c => !deletedNodeIDs.has(NormalizeUUID(c.SourceNodeID)) && !deletedNodeIDs.has(NormalizeUUID(c.TargetNodeID)));
1070
1083
  for (const conn of orphanedConnections) {