@memberjunction/ng-flow-editor 6.2.0-edge.0 → 6.2.0-edge.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts +17 -5
  2. package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts.map +1 -1
  3. package/dist/lib/agent-editor/agent-flow-transformer.service.js +70 -12
  4. package/dist/lib/agent-editor/agent-flow-transformer.service.js.map +1 -1
  5. package/dist/lib/agent-editor/agent-properties-panel.component.d.ts +250 -7
  6. package/dist/lib/agent-editor/agent-properties-panel.component.d.ts.map +1 -1
  7. package/dist/lib/agent-editor/agent-properties-panel.component.js +1769 -272
  8. package/dist/lib/agent-editor/agent-properties-panel.component.js.map +1 -1
  9. package/dist/lib/agent-editor/agent-step-list.component.d.ts +2 -0
  10. package/dist/lib/agent-editor/agent-step-list.component.d.ts.map +1 -1
  11. package/dist/lib/agent-editor/agent-step-list.component.js +15 -2
  12. package/dist/lib/agent-editor/agent-step-list.component.js.map +1 -1
  13. package/dist/lib/agent-editor/decision-step-config.d.ts +27 -0
  14. package/dist/lib/agent-editor/decision-step-config.d.ts.map +1 -0
  15. package/dist/lib/agent-editor/decision-step-config.js +70 -0
  16. package/dist/lib/agent-editor/decision-step-config.js.map +1 -0
  17. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts +39 -5
  18. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts.map +1 -1
  19. package/dist/lib/agent-editor/flow-agent-editor.component.js +182 -46
  20. package/dist/lib/agent-editor/flow-agent-editor.component.js.map +1 -1
  21. package/dist/lib/agent-editor/flow-run-check.d.ts +32 -0
  22. package/dist/lib/agent-editor/flow-run-check.d.ts.map +1 -0
  23. package/dist/lib/agent-editor/flow-run-check.js +146 -0
  24. package/dist/lib/agent-editor/flow-run-check.js.map +1 -0
  25. package/dist/lib/components/flow-editor.component.d.ts +2 -0
  26. package/dist/lib/components/flow-editor.component.d.ts.map +1 -1
  27. package/dist/lib/components/flow-editor.component.js +22 -9
  28. package/dist/lib/components/flow-editor.component.js.map +1 -1
  29. package/dist/lib/components/flow-node.component.js.map +1 -1
  30. package/dist/lib/components/flow-palette.component.d.ts +2 -0
  31. package/dist/lib/components/flow-palette.component.d.ts.map +1 -1
  32. package/dist/lib/components/flow-palette.component.js +5 -1
  33. package/dist/lib/components/flow-palette.component.js.map +1 -1
  34. package/dist/lib/flow-editor.module.d.ts +1 -1
  35. package/dist/lib/flow-editor.module.d.ts.map +1 -1
  36. package/dist/lib/flow-editor.module.js +4 -1
  37. package/dist/lib/flow-editor.module.js.map +1 -1
  38. package/dist/lib/interfaces/flow-types.d.ts +5 -0
  39. package/dist/lib/interfaces/flow-types.d.ts.map +1 -1
  40. package/dist/lib/interfaces/flow-types.js +0 -4
  41. package/dist/lib/interfaces/flow-types.js.map +1 -1
  42. package/dist/public-api.d.ts +1 -0
  43. package/dist/public-api.d.ts.map +1 -1
  44. package/dist/public-api.js +1 -0
  45. package/dist/public-api.js.map +1 -1
  46. package/package.json +10 -9
@@ -1 +1 @@
1
- {"version":3,"file":"flow-node.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-node.component.ts","../../../src/lib/components/flow-node.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { FlowNode, FlowNodeTypeConfig } from '../interfaces/flow-types';\n\n/**\n * Renders a single node in the flow canvas.\n * Applied with Foblex's fNode directive in the parent FlowEditorComponent template.\n * Contains input/output ports via Foblex's fNodeInput/fNodeOutput directives.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-node',\n templateUrl: './flow-node.component.html',\n styleUrls: ['./flow-node.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowNodeComponent {\n @Input() Node!: FlowNode;\n @Input() TypeConfig: FlowNodeTypeConfig | null = null;\n @Input() ReadOnly = false;\n @Input() Compact = false;\n\n get headerColor(): string {\n return this.TypeConfig?.Color ?? '#6B7280';\n }\n\n get nodeIcon(): string {\n return this.Node?.Icon ?? this.TypeConfig?.Icon ?? 'fa-circle-nodes';\n }\n\n get logoURL(): string | null {\n return (this.Node?.Data?.['LogoURL'] as string) ?? null;\n }\n\n get statusClass(): string {\n return this.Node?.Status ?? 'default';\n }\n\n get statusIcon(): string {\n switch (this.Node?.Status) {\n case 'success': return 'fa-check-circle';\n case 'error': return 'fa-times-circle';\n case 'warning': return 'fa-exclamation-triangle';\n case 'running': return 'fa-spinner fa-spin';\n case 'disabled': return 'fa-ban';\n case 'pending': return 'fa-clock';\n default: return '';\n }\n }\n\n get hasStatus(): boolean {\n return this.Node?.Status != null && this.Node.Status !== 'default';\n }\n\n /** Debugger chrome: this step is waiting for Continue / Step, not executing. */\n get isAwaitingUser(): boolean {\n return this.Node?.Data?.['AwaitingUser'] === true;\n }\n\n /** Prerequisites are done; the dispatcher has not claimed it yet. */\n get isQueued(): boolean {\n return !this.isAwaitingUser && this.Node?.Data?.['NextToRun'] === true;\n }\n\n get isExecuting(): boolean {\n return !this.isAwaitingUser && this.Node?.Status === 'running';\n }\n\n get inputPort(): { ID: string; Side: string; Multiple: boolean; Disabled: boolean } | null {\n const port = this.Node?.Ports?.find(p => p.Direction === 'input');\n if (!port) return null;\n return {\n ID: port.ID,\n Side: port.Side ?? 'top',\n Multiple: port.Multiple !== false,\n Disabled: port.Disabled === true\n };\n }\n\n get outputPort(): { ID: string; Side: string; Multiple: boolean; Disabled: boolean } | null {\n const port = this.Node?.Ports?.find(p => p.Direction === 'output');\n if (!port) return null;\n return {\n ID: port.ID,\n Side: port.Side ?? 'bottom',\n Multiple: port.Multiple !== false,\n Disabled: port.Disabled === true\n };\n }\n\n // ── Loop Node Properties ───────────────────────────────────\n\n /** Whether this node represents a loop (ForEach or While) */\n get isLoopNode(): boolean {\n return this.Node?.Type === 'ForEach' || this.Node?.Type === 'While';\n }\n\n /** Loop body type label (e.g., 'Action', 'Prompt', 'Sub-Agent') */\n get loopBodyType(): string | null {\n return (this.Node?.Data?.['LoopBodyType'] as string) ?? null;\n }\n\n /** Resolved name of the loop body operation */\n get loopBodyName(): string | null {\n return (this.Node?.Data?.['LoopBodyName'] as string) ?? null;\n }\n\n /** Icon for the loop body type */\n get loopBodyIcon(): string {\n return (this.Node?.Data?.['LoopBodyIcon'] as string) ?? 'fa-circle-nodes';\n }\n\n /** Color for the loop body type */\n get loopBodyColor(): string {\n return (this.Node?.Data?.['LoopBodyColor'] as string) ?? '#6B7280';\n }\n\n /** Short iteration summary (e.g., \"over items\" or \"while condition\") */\n get loopIterationSummary(): string {\n return (this.Node?.Data?.['LoopIterationSummary'] as string) ?? '';\n }\n\n /** Max iterations limit, if configured */\n get loopMaxIterations(): number | null {\n const val = this.Node?.Data?.['MaxIterations'];\n return typeof val === 'number' ? val : null;\n }\n\n /** Loop item variable name */\n get loopItemVariable(): string | null {\n return (this.Node?.Data?.['LoopItemVariable'] as string) ?? null;\n }\n}\n","<!-- Input Port -->\n@if (inputPort) {\n <div\n class=\"mj-flow-node-port mj-flow-node-port--input\"\n [class]=\"'mj-flow-node-port--' + inputPort.Side\"\n fNodeInput\n [fInputId]=\"inputPort.ID\"\n [fInputDisabled]=\"inputPort.Disabled\"\n [fInputMultiple]=\"inputPort.Multiple\">\n </div>\n}\n\n<!-- Node Body -->\n<div class=\"mj-flow-node-body\"\n [class.mj-flow-node-body--start]=\"Node.IsStartNode\"\n [class.mj-flow-node-body--loop]=\"isLoopNode\"\n [class.mj-flow-node-body--disabled]=\"Node.Status === 'disabled'\"\n [class.mj-flow-node-body--pending]=\"Node.Status === 'pending'\"\n [class.mj-flow-node-body--skipped]=\"Node.Status === 'skipped'\"\n [class.mj-flow-node-body--running]=\"isExecuting\"\n [class.mj-flow-node-body--queued]=\"isQueued\"\n [class.mj-flow-node-body--awaiting]=\"isAwaitingUser\"\n [class.mj-flow-node-body--warning]=\"Node.Status === 'warning'\"\n [class.mj-flow-node-body--error]=\"Node.Status === 'error'\"\n [class.mj-flow-node-body--success]=\"Node.Status === 'success'\">\n\n <!-- Color accent bar -->\n <div class=\"mj-flow-node-accent\" [style.backgroundColor]=\"headerColor\"></div>\n\n <!-- Header -->\n <div class=\"mj-flow-node-header\">\n <div class=\"mj-flow-node-header-left\">\n @if (logoURL) {\n <img class=\"mj-flow-node-logo\" [src]=\"logoURL\" [alt]=\"Node.Label\" />\n }\n @if (!logoURL) {\n <i class=\"fa-solid mj-flow-node-icon\" [ngClass]=\"nodeIcon\" [style.color]=\"headerColor\"></i>\n }\n <span class=\"mj-flow-node-label\">{{ Node.Label }}</span>\n </div>\n <div class=\"mj-flow-node-header-right\">\n @if (Node.IsStartNode) {\n <span class=\"mj-flow-node-start-badge\">START</span>\n }\n @if (hasStatus) {\n <i\n class=\"fa-solid mj-flow-node-status\"\n [ngClass]=\"statusIcon\"\n [class]=\"'mj-flow-node-status--' + statusClass\"\n [title]=\"Node.StatusMessage || ''\"></i>\n }\n </div>\n </div>\n\n <!-- Subtitle / Configured Item (hidden for loop nodes — they use the body card instead) -->\n @if (Node.Subtitle && !isLoopNode) {\n <div class=\"mj-flow-node-subtitle\">\n {{ Node.Subtitle }}\n </div>\n }\n\n <!-- Type badge -->\n <div class=\"mj-flow-node-type-badge\" [style.color]=\"headerColor\">\n {{ TypeConfig?.Label || Node.Type }}\n </div>\n\n <!-- ═══ Loop Body Card — shown only for ForEach/While nodes ═══ -->\n @if (isLoopNode) {\n <div class=\"mj-flow-loop-section\">\n <!-- Iteration summary line -->\n @if (loopIterationSummary) {\n <div class=\"mj-flow-loop-iteration\">\n <i class=\"fa-solid fa-repeat mj-flow-loop-iteration-icon\"></i>\n <span>{{ loopIterationSummary }}</span>\n @if (loopMaxIterations != null) {\n <span class=\"mj-flow-loop-max\">(max {{ loopMaxIterations }})</span>\n }\n </div>\n }\n <!-- Body type inner card -->\n <div class=\"mj-flow-loop-body\"\n [class.mj-flow-loop-body--empty]=\"!loopBodyType\">\n @if (loopBodyType) {\n <div class=\"mj-flow-loop-body-inner\">\n <div class=\"mj-flow-loop-body-header\">\n <i class=\"fa-solid\" [ngClass]=\"loopBodyIcon\" [style.color]=\"loopBodyColor\"></i>\n <span class=\"mj-flow-loop-body-type\" [style.color]=\"loopBodyColor\">{{ loopBodyType }}</span>\n </div>\n @if (loopBodyName) {\n <div class=\"mj-flow-loop-body-name\" [title]=\"loopBodyName\">\n {{ loopBodyName }}\n </div>\n }\n @if (!loopBodyName) {\n <div class=\"mj-flow-loop-body-name mj-flow-loop-body-name--empty\">\n Not configured\n </div>\n }\n </div>\n }\n @if (!loopBodyType) {\n <div class=\"mj-flow-loop-body-empty\">\n <i class=\"fa-solid fa-circle-question\"></i>\n <span>No body type selected</span>\n </div>\n }\n </div>\n <!-- Item variable badge -->\n @if (loopItemVariable) {\n <div class=\"mj-flow-loop-variable\">\n <i class=\"fa-solid fa-tag\"></i>\n <span>{{ loopItemVariable }}</span>\n </div>\n }\n </div>\n }\n\n @if (isAwaitingUser) {\n <div class=\"mj-flow-node-awaiting-banner\">\n <i class=\"fa-solid fa-pause\" aria-hidden=\"true\"></i>\n <span>Waiting on you — Continue or Step</span>\n </div>\n } @else if (isExecuting) {\n <div class=\"mj-flow-node-running-banner\">\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n <span>Running</span>\n </div>\n } @else if (isQueued) {\n <div class=\"mj-flow-node-queued-banner\">\n <i class=\"fa-solid fa-hourglass-start\" aria-hidden=\"true\"></i>\n <span>Next — waiting for the engine</span>\n </div>\n }\n\n <!-- Warning banner (shown inline when step is misconfigured) -->\n @if (Node.Status === 'warning' && Node.StatusMessage) {\n <div\n class=\"mj-flow-node-warning-banner\"\n [title]=\"Node.StatusMessage\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ Node.StatusMessage }}</span>\n </div>\n }\n\n <!-- Badges row -->\n @if (Node.Badges && Node.Badges.length > 0) {\n <div class=\"mj-flow-node-badges\">\n @for (badge of Node.Badges; track badge) {\n <span\n class=\"mj-flow-node-badge\"\n [style.borderColor]=\"badge.Color || headerColor\"\n [title]=\"badge.Label\">\n @if (badge.Icon) {\n <i class=\"fa-solid\" [ngClass]=\"badge.Icon\"></i>\n }\n {{ badge.Value }}\n </span>\n }\n </div>\n }\n</div>\n\n<!-- Output Port -->\n@if (outputPort) {\n <div\n class=\"mj-flow-node-port mj-flow-node-port--output\"\n [class]=\"'mj-flow-node-port--' + outputPort.Side\"\n fNodeOutput\n [fOutputId]=\"outputPort.ID\"\n [fOutputDisabled]=\"outputPort.Disabled\"\n [fOutputMultiple]=\"outputPort.Multiple\"\n [isSelfConnectable]=\"false\">\n </div>\n}\n"]}
1
+ {"version":3,"file":"flow-node.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-node.component.ts","../../../src/lib/components/flow-node.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;;;;;ICE3F,0BAOM;;;IALJ,4DAAgD;IAIhD,AADA,AADA,8CAAyB,6CACY,6CACA;;;IAyBjC,yBAAoE;;;IAArB,AAAhB,sDAAe,0BAAmB;;;IAGjE,wBAA2F;;;IAAhC,2CAA2B;IAAhD,yCAAoB;;;IAM1D,+BAAuC;IAAA,qBAAK;IAAA,iBAAO;;;IAGnD,wBAIuC;;;IADrC,2DAA+C;IACjD,AAFE,2CAAsB,0CAEU;;;IAOtC,+BAAmC;IACjC,YACF;IAAA,iBAAM;;;IADJ,cACF;IADE,qDACF;;;IAiBQ,gCAA+B;IAAA,YAA6B;IAAA,iBAAO;;;IAApC,cAA6B;IAA7B,6DAA6B;;;IAJhE,+BAAoC;IAClC,wBAA8D;IAC9D,4BAAM;IAAA,YAA0B;IAAA,iBAAO;IACvC,kHAAiC;IAGnC,iBAAM;;;IAJE,eAA0B;IAA1B,iDAA0B;IAChC,cAEC;IAFD,2DAEC;;;IAaG,+BAA2D;IACzD,YACF;IAAA,iBAAM;;;IAF8B,2CAAsB;IACxD,cACF;IADE,oDACF;;;IAGA,+BAAkE;IAChE,gCACF;IAAA,iBAAM;;;IAZR,AADF,+BAAqC,cACG;IACpC,wBAA+E;IAC/E,gCAAmE;IAAA,YAAkB;IACvF,AADuF,iBAAO,EACxF;IACN,iHAAoB;IAKpB,iHAAqB;IAKvB,iBAAM;;;IAb2C,eAA6B;IAA7B,6CAA6B;IAAtD,6CAAwB;IACP,cAA6B;IAA7B,6CAA6B;IAAC,cAAkB;IAAlB,yCAAkB;IAEvF,cAIC;IAJD,8CAIC;IACD,cAIC;IAJD,+CAIC;;;IAIH,+BAAqC;IACnC,wBAA2C;IAC3C,4BAAM;IAAA,qCAAqB;IAC7B,AAD6B,iBAAO,EAC9B;;;IAKR,+BAAmC;IACjC,wBAA+B;IAC/B,4BAAM;IAAA,YAAsB;IAC9B,AAD8B,iBAAO,EAC/B;;;IADE,eAAsB;IAAtB,6CAAsB;;;IA3ClC,+BAAkC;IAEhC,mGAA4B;IAU5B,+BACmD;IACjD,mGAAoB;IAkBpB,mGAAqB;IAMvB,iBAAM;IAEN,mGAAwB;IAM1B,iBAAM;;;IA5CJ,cAQC;IARD,sDAQC;IAGC,cAAgD;IAAhD,gEAAgD;IAChD,cAiBC;IAjBD,8CAiBC;IACD,cAKC;IALD,+CAKC;IAGH,cAKC;IALD,kDAKC;;;IAKH,+BAA0C;IACxC,wBAAoD;IACpD,4BAAM;IAAA,sDAAiC;IACzC,AADyC,iBAAO,EAC1C;;;IAEN,+BAAyC;IACvC,wBAA8D;IAC9D,4BAAM;IAAA,uBAAO;IACf,AADe,iBAAO,EAChB;;;IAEN,+BAAwC;IACtC,wBAA8D;IAC9D,4BAAM;IAAA,kDAA6B;IACrC,AADqC,iBAAO,EACtC;;;IAKN,+BAE+B;IAC7B,wBAAgD;IAChD,4BAAM;IAAA,YAAwB;IAChC,AADgC,iBAAO,EACjC;;;IAHJ,iDAA4B;IAEtB,eAAwB;IAAxB,+CAAwB;;;IAaxB,wBAA+C;;;IAA3B,uCAAsB;;;IAL9C,gCAGwB;IACtB,uGAAkB;IAGlB,YACF;IAAA,iBAAO;;;;IANL,oEAAgD;IAChD,sCAAqB;IACrB,cAEC;IAFD,wCAEC;IACD,cACF;IADE,+CACF;;;IAVJ,+BAAiC;IAC/B,uHAUC;IACH,iBAAM;;;IAXJ,cAUC;IAVD,iCAUC;;;IAOL,0BAQM;;;IANJ,6DAAiD;IAKjD,AADA,AADA,AADA,gDAA2B,+CACY,+CACA,4BACZ;;ADxK/B;;;;GAIG;AASH,MAAM,OAAO,iBAAiB;IACnB,IAAI,CAAY;IAChB,UAAU,GAA8B,IAAI,CAAC;IAC7C,QAAQ,GAAG,KAAK,CAAC;IACjB,OAAO,GAAG,KAAK,CAAC;IAEzB,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,SAAS,CAAC;IAC7C,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,iBAAiB,CAAC;IACvE,CAAC;IAED,IAAI,OAAO;QACT,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,CAAY,IAAI,IAAI,CAAC;IAC1D,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACZ,QAAQ,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAC1B,KAAK,SAAS,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACzC,KAAK,OAAO,CAAC,CAAC,OAAO,iBAAiB,CAAC;YACvC,KAAK,SAAS,CAAC,CAAC,OAAO,yBAAyB,CAAC;YACjD,KAAK,SAAS,CAAC,CAAC,OAAO,oBAAoB,CAAC;YAC5C,KAAK,UAAU,CAAC,CAAC,OAAO,QAAQ,CAAC;YACjC,KAAK,SAAS,CAAC,CAAC,OAAO,UAAU,CAAC;YAClC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;IACrE,CAAC;IAED,gFAAgF;IAChF,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACpD,CAAC;IAED,qEAAqE;IACrE,IAAI,QAAQ;QACV,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACzE,CAAC;IAED,IAAI,WAAW;QACb,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACjE,CAAC;IAED,IAAI,SAAS;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;SACjC,CAAC;IACJ,CAAC;IAED,IAAI,UAAU;QACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,KAAK;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI;SACjC,CAAC;IACJ,CAAC;IAED,8DAA8D;IAE9D,6DAA6D;IAC7D,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;IACtE,CAAC;IAED,mEAAmE;IACnE,IAAI,YAAY;QACd,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,CAAY,IAAI,IAAI,CAAC;IAC/D,CAAC;IAED,+CAA+C;IAC/C,IAAI,YAAY;QACd,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,CAAY,IAAI,IAAI,CAAC;IAC/D,CAAC;IAED,kCAAkC;IAClC,IAAI,YAAY;QACd,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,cAAc,CAAY,IAAI,iBAAiB,CAAC;IAC5E,CAAC;IAED,mCAAmC;IACnC,IAAI,aAAa;QACf,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,eAAe,CAAY,IAAI,SAAS,CAAC;IACrE,CAAC;IAED,wEAAwE;IACxE,IAAI,oBAAoB;QACtB,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAY,IAAI,EAAE,CAAC;IACrE,CAAC;IAED,0CAA0C;IAC1C,IAAI,iBAAiB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC;QAC/C,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9C,CAAC;IAED,8BAA8B;IAC9B,IAAI,gBAAgB;QAClB,OAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,kBAAkB,CAAY,IAAI,IAAI,CAAC;IACnE,CAAC;2GAnHU,iBAAiB;6DAAjB,iBAAiB;YCf9B,mFAAiB;YAYjB,8BAWiE;YAG/D,yBAA6E;YAI3E,AADF,8BAAiC,aACO;YACpC,mFAAe;YAGf,iFAAgB;YAGhB,+BAAiC;YAAA,YAAgB;YACnD,AADmD,iBAAO,EACpD;YACN,8BAAuC;YACrC,sFAAwB;YAGxB,oFAAiB;YAQrB,AADE,iBAAM,EACF;YAGN,sFAAoC;YAOpC,gCAAiE;YAC/D,aACF;YAAA,iBAAM;YAGN,sFAAkB;YA4DhB,AALA,AALF,sFAAsB,gEAKI,gEAKH;YAQvB,sFAAuD;YAUvD,sFAA6C;YAe/C,iBAAM;YAGN,sFAAkB;;YAlKlB,wCASC;YAIC,cAAmD;YAUnD,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,AADA,gEAAmD,2CACP,+DACoB,6DACF,6DACA,+CACd,2CACJ,mDACQ,6DACU,yDACJ,6DACI;YAG7B,cAAqC;YAArC,mDAAqC;YAKlE,eAEC;YAFD,sCAEC;YACD,cAEC;YAFD,uCAEC;YACgC,eAAgB;YAAhB,oCAAgB;YAGjD,eAEC;YAFD,gDAEC;YACD,cAMC;YAND,yCAMC;YAKL,cAIC;YAJD,gEAIC;YAGoC,cAA2B;YAA3B,wCAA2B;YAC9D,cACF;YADE,wGACF;YAGA,cAgDC;YAhDD,0CAgDC;YAED,cAeC;YAfD,yFAeC;YAGD,eAOC;YAPD,mFAOC;YAGD,cAcC;YAdD,yEAcC;YAIH,cAUC;YAVD,0CAUC;;;iFD7JY,iBAAiB;cAR7B,SAAS;6BACI,KAAK,YACP,cAAc,iBAGT,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;;kBAG9C,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kBACL,KAAK;;kFAJK,iBAAiB","sourcesContent":["import { Component, Input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { FlowNode, FlowNodeTypeConfig } from '../interfaces/flow-types';\n\n/**\n * Renders a single node in the flow canvas.\n * Applied with Foblex's fNode directive in the parent FlowEditorComponent template.\n * Contains input/output ports via Foblex's fNodeInput/fNodeOutput directives.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-node',\n templateUrl: './flow-node.component.html',\n styleUrls: ['./flow-node.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowNodeComponent {\n @Input() Node!: FlowNode;\n @Input() TypeConfig: FlowNodeTypeConfig | null = null;\n @Input() ReadOnly = false;\n @Input() Compact = false;\n\n get headerColor(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.TypeConfig?.Color ?? '#6B7280';\n }\n\n get nodeIcon(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.Node?.Icon ?? this.TypeConfig?.Icon ?? 'fa-circle-nodes';\n }\n\n get logoURL(): string | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LogoURL'] as string) ?? null;\n }\n\n get statusClass(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.Node?.Status ?? 'default';\n }\n\n get statusIcon(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n switch (this.Node?.Status) {\n case 'success': return 'fa-check-circle';\n case 'error': return 'fa-times-circle';\n case 'warning': return 'fa-exclamation-triangle';\n case 'running': return 'fa-spinner fa-spin';\n case 'disabled': return 'fa-ban';\n case 'pending': return 'fa-clock';\n default: return '';\n }\n }\n\n get hasStatus(): boolean { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.Node?.Status != null && this.Node.Status !== 'default';\n }\n\n /** Debugger chrome: this step is waiting for Continue / Step, not executing. */\n get isAwaitingUser(): boolean { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.Node?.Data?.['AwaitingUser'] === true;\n }\n\n /** Prerequisites are done; the dispatcher has not claimed it yet. */\n get isQueued(): boolean { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return !this.isAwaitingUser && this.Node?.Data?.['NextToRun'] === true;\n }\n\n get isExecuting(): boolean { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return !this.isAwaitingUser && this.Node?.Status === 'running';\n }\n\n get inputPort(): { ID: string; Side: string; Multiple: boolean; Disabled: boolean } | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n const port = this.Node?.Ports?.find(p => p.Direction === 'input');\n if (!port) return null;\n return {\n ID: port.ID,\n Side: port.Side ?? 'top',\n Multiple: port.Multiple !== false,\n Disabled: port.Disabled === true\n };\n }\n\n get outputPort(): { ID: string; Side: string; Multiple: boolean; Disabled: boolean } | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n const port = this.Node?.Ports?.find(p => p.Direction === 'output');\n if (!port) return null;\n return {\n ID: port.ID,\n Side: port.Side ?? 'bottom',\n Multiple: port.Multiple !== false,\n Disabled: port.Disabled === true\n };\n }\n\n // ── Loop Node Properties ───────────────────────────────────\n\n /** Whether this node represents a loop (ForEach or While) */\n get isLoopNode(): boolean { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return this.Node?.Type === 'ForEach' || this.Node?.Type === 'While';\n }\n\n /** Loop body type label (e.g., 'Action', 'Prompt', 'Sub-Agent') */\n get loopBodyType(): string | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopBodyType'] as string) ?? null;\n }\n\n /** Resolved name of the loop body operation */\n get loopBodyName(): string | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopBodyName'] as string) ?? null;\n }\n\n /** Icon for the loop body type */\n get loopBodyIcon(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopBodyIcon'] as string) ?? 'fa-circle-nodes';\n }\n\n /** Color for the loop body type */\n get loopBodyColor(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopBodyColor'] as string) ?? '#6B7280';\n }\n\n /** Short iteration summary (e.g., \"over items\" or \"while condition\") */\n get loopIterationSummary(): string { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopIterationSummary'] as string) ?? '';\n }\n\n /** Max iterations limit, if configured */\n get loopMaxIterations(): number | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n const val = this.Node?.Data?.['MaxIterations'];\n return typeof val === 'number' ? val : null;\n }\n\n /** Loop item variable name */\n get loopItemVariable(): string | null { // case-violation-ok-legacy-back-compat: object literals are assigned to this class, so an accessor stub changes what they must supply\n return (this.Node?.Data?.['LoopItemVariable'] as string) ?? null;\n }\n}\n","<!-- Input Port -->\n@if (inputPort) {\n <div\n class=\"mj-flow-node-port mj-flow-node-port--input\"\n [class]=\"'mj-flow-node-port--' + inputPort.Side\"\n fNodeInput\n [fInputId]=\"inputPort.ID\"\n [fInputDisabled]=\"inputPort.Disabled\"\n [fInputMultiple]=\"inputPort.Multiple\">\n </div>\n}\n\n<!-- Node Body -->\n<div class=\"mj-flow-node-body\"\n [class.mj-flow-node-body--start]=\"Node.IsStartNode\"\n [class.mj-flow-node-body--loop]=\"isLoopNode\"\n [class.mj-flow-node-body--disabled]=\"Node.Status === 'disabled'\"\n [class.mj-flow-node-body--pending]=\"Node.Status === 'pending'\"\n [class.mj-flow-node-body--skipped]=\"Node.Status === 'skipped'\"\n [class.mj-flow-node-body--running]=\"isExecuting\"\n [class.mj-flow-node-body--queued]=\"isQueued\"\n [class.mj-flow-node-body--awaiting]=\"isAwaitingUser\"\n [class.mj-flow-node-body--warning]=\"Node.Status === 'warning'\"\n [class.mj-flow-node-body--error]=\"Node.Status === 'error'\"\n [class.mj-flow-node-body--success]=\"Node.Status === 'success'\">\n\n <!-- Color accent bar -->\n <div class=\"mj-flow-node-accent\" [style.backgroundColor]=\"headerColor\"></div>\n\n <!-- Header -->\n <div class=\"mj-flow-node-header\">\n <div class=\"mj-flow-node-header-left\">\n @if (logoURL) {\n <img class=\"mj-flow-node-logo\" [src]=\"logoURL\" [alt]=\"Node.Label\" />\n }\n @if (!logoURL) {\n <i class=\"fa-solid mj-flow-node-icon\" [ngClass]=\"nodeIcon\" [style.color]=\"headerColor\"></i>\n }\n <span class=\"mj-flow-node-label\">{{ Node.Label }}</span>\n </div>\n <div class=\"mj-flow-node-header-right\">\n @if (Node.IsStartNode) {\n <span class=\"mj-flow-node-start-badge\">START</span>\n }\n @if (hasStatus) {\n <i\n class=\"fa-solid mj-flow-node-status\"\n [ngClass]=\"statusIcon\"\n [class]=\"'mj-flow-node-status--' + statusClass\"\n [title]=\"Node.StatusMessage || ''\"></i>\n }\n </div>\n </div>\n\n <!-- Subtitle / Configured Item (hidden for loop nodes — they use the body card instead) -->\n @if (Node.Subtitle && !isLoopNode) {\n <div class=\"mj-flow-node-subtitle\">\n {{ Node.Subtitle }}\n </div>\n }\n\n <!-- Type badge -->\n <div class=\"mj-flow-node-type-badge\" [style.color]=\"headerColor\">\n {{ TypeConfig?.Label || Node.Type }}\n </div>\n\n <!-- ═══ Loop Body Card — shown only for ForEach/While nodes ═══ -->\n @if (isLoopNode) {\n <div class=\"mj-flow-loop-section\">\n <!-- Iteration summary line -->\n @if (loopIterationSummary) {\n <div class=\"mj-flow-loop-iteration\">\n <i class=\"fa-solid fa-repeat mj-flow-loop-iteration-icon\"></i>\n <span>{{ loopIterationSummary }}</span>\n @if (loopMaxIterations != null) {\n <span class=\"mj-flow-loop-max\">(max {{ loopMaxIterations }})</span>\n }\n </div>\n }\n <!-- Body type inner card -->\n <div class=\"mj-flow-loop-body\"\n [class.mj-flow-loop-body--empty]=\"!loopBodyType\">\n @if (loopBodyType) {\n <div class=\"mj-flow-loop-body-inner\">\n <div class=\"mj-flow-loop-body-header\">\n <i class=\"fa-solid\" [ngClass]=\"loopBodyIcon\" [style.color]=\"loopBodyColor\"></i>\n <span class=\"mj-flow-loop-body-type\" [style.color]=\"loopBodyColor\">{{ loopBodyType }}</span>\n </div>\n @if (loopBodyName) {\n <div class=\"mj-flow-loop-body-name\" [title]=\"loopBodyName\">\n {{ loopBodyName }}\n </div>\n }\n @if (!loopBodyName) {\n <div class=\"mj-flow-loop-body-name mj-flow-loop-body-name--empty\">\n Not configured\n </div>\n }\n </div>\n }\n @if (!loopBodyType) {\n <div class=\"mj-flow-loop-body-empty\">\n <i class=\"fa-solid fa-circle-question\"></i>\n <span>No body type selected</span>\n </div>\n }\n </div>\n <!-- Item variable badge -->\n @if (loopItemVariable) {\n <div class=\"mj-flow-loop-variable\">\n <i class=\"fa-solid fa-tag\"></i>\n <span>{{ loopItemVariable }}</span>\n </div>\n }\n </div>\n }\n\n @if (isAwaitingUser) {\n <div class=\"mj-flow-node-awaiting-banner\">\n <i class=\"fa-solid fa-pause\" aria-hidden=\"true\"></i>\n <span>Waiting on you — Continue or Step</span>\n </div>\n } @else if (isExecuting) {\n <div class=\"mj-flow-node-running-banner\">\n <i class=\"fa-solid fa-spinner fa-spin\" aria-hidden=\"true\"></i>\n <span>Running</span>\n </div>\n } @else if (isQueued) {\n <div class=\"mj-flow-node-queued-banner\">\n <i class=\"fa-solid fa-hourglass-start\" aria-hidden=\"true\"></i>\n <span>Next — waiting for the engine</span>\n </div>\n }\n\n <!-- Warning banner (shown inline when step is misconfigured) -->\n @if (Node.Status === 'warning' && Node.StatusMessage) {\n <div\n class=\"mj-flow-node-warning-banner\"\n [title]=\"Node.StatusMessage\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ Node.StatusMessage }}</span>\n </div>\n }\n\n <!-- Badges row -->\n @if (Node.Badges && Node.Badges.length > 0) {\n <div class=\"mj-flow-node-badges\">\n @for (badge of Node.Badges; track badge) {\n <span\n class=\"mj-flow-node-badge\"\n [style.borderColor]=\"badge.Color || headerColor\"\n [title]=\"badge.Label\">\n @if (badge.Icon) {\n <i class=\"fa-solid\" [ngClass]=\"badge.Icon\"></i>\n }\n {{ badge.Value }}\n </span>\n }\n </div>\n }\n</div>\n\n<!-- Output Port -->\n@if (outputPort) {\n <div\n class=\"mj-flow-node-port mj-flow-node-port--output\"\n [class]=\"'mj-flow-node-port--' + outputPort.Side\"\n fNodeOutput\n [fOutputId]=\"outputPort.ID\"\n [fOutputDisabled]=\"outputPort.Disabled\"\n [fOutputMultiple]=\"outputPort.Multiple\"\n [isSelfConnectable]=\"false\">\n </div>\n}\n"]}
@@ -26,6 +26,8 @@ export declare class FlowPaletteComponent {
26
26
  NodeTypeActivated: EventEmitter<FlowNodeTypeConfig>;
27
27
  /** Handler for the click/keyboard activation on a palette entry. */
28
28
  OnNodeTypeActivated(nodeType: FlowNodeTypeConfig): void;
29
+ get Categories(): string[];
30
+ /** @deprecated Use {@link Categories}. */
29
31
  get categories(): string[];
30
32
  GetTypesForCategory(category: string): FlowNodeTypeConfig[];
31
33
  /** Converts a hex color to rgba with the given opacity for background tinting */
@@ -1 +1 @@
1
- {"version":3,"file":"flow-palette.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-palette.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAA6D,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;;AAE9D;;;;;;;;;;;;GAYG;AACH,qBAQa,oBAAoB;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAM;IACrC,SAAS,UAAS;IAE3B;;;;;OAKG;IACO,iBAAiB,mCAA0C;IAErE,oEAAoE;IACpE,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIvD,IAAI,UAAU,IAAI,MAAM,EAAE,CAQzB;IAED,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAM3D,iFAAiF;IACjF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;yCAlCtD,oBAAoB;2CAApB,oBAAoB;CA+ChC"}
1
+ {"version":3,"file":"flow-palette.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/flow-palette.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAA6D,MAAM,eAAe,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;;AAE9D;;;;;;;;;;;;GAYG;AACH,qBAQa,oBAAoB;IACtB,SAAS,EAAE,kBAAkB,EAAE,CAAM;IACrC,SAAS,UAAS;IAE3B;;;;;OAKG;IACO,iBAAiB,mCAA0C;IAErE,oEAAoE;IACpE,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAIvD,IAAI,UAAU,IAAI,MAAM,EAAE,CAQzB;IAED,0CAA0C;IAC1C,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IAED,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAM3D,iFAAiF;IACjF,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;yCAvCtD,oBAAoB;2CAApB,oBAAoB;CAoDhC"}
@@ -78,7 +78,7 @@ export class FlowPaletteComponent {
78
78
  OnNodeTypeActivated(nodeType) {
79
79
  this.NodeTypeActivated.emit(nodeType);
80
80
  }
81
- get categories() {
81
+ get Categories() {
82
82
  const cats = new Set();
83
83
  for (const nt of this.NodeTypes) {
84
84
  if (nt.Draggable !== false) {
@@ -87,6 +87,10 @@ export class FlowPaletteComponent {
87
87
  }
88
88
  return Array.from(cats);
89
89
  }
90
+ /** @deprecated Use {@link Categories}. */
91
+ get categories() {
92
+ return this.Categories;
93
+ }
90
94
  GetTypesForCategory(category) {
91
95
  return this.NodeTypes.filter(nt => nt.Draggable !== false && (nt.Category ?? 'General') === category);
92
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"flow-palette.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-palette.component.ts","../../../src/lib/components/flow-palette.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { FlowNodeTypeConfig } from '../interfaces/flow-types';\n\n/**\n * Palette sidebar for creating new nodes — **click it or drag it**.\n *\n * Foblex's `fExternalItem` directive supplies drag-to-canvas placement, which is the precise\n * gesture when the author cares where the box lands. It is not, however, the only gesture people\n * try: a palette that looks like a list of buttons gets clicked, and for a long time a click here\n * produced *nothing at all* — the item was a bare `<div>` with no click binding, so the interaction\n * never even reached the editor. The entry is now a real `<button>`, which restores the click, the\n * keyboard (Enter/Space), and the focus ring for free, and emits {@link NodeTypeActivated}.\n *\n * Both gestures converge on the same `NodeAdded` event in `FlowEditorComponent` — one code path, so\n * a host that handles the drop automatically handles the click.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-palette',\n templateUrl: './flow-palette.component.html',\n styleUrls: ['./flow-palette.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowPaletteComponent {\n @Input() NodeTypes: FlowNodeTypeConfig[] = [];\n @Input() Collapsed = false;\n\n /**\n * A palette entry was clicked (or activated from the keyboard).\n *\n * Carries the whole config rather than the type string so the host does not have to look it back\n * up — the palette already resolved it, and re-resolving is where a silent mismatch would live.\n */\n @Output() NodeTypeActivated = new EventEmitter<FlowNodeTypeConfig>();\n\n /** Handler for the click/keyboard activation on a palette entry. */\n OnNodeTypeActivated(nodeType: FlowNodeTypeConfig): void {\n this.NodeTypeActivated.emit(nodeType);\n }\n\n get categories(): string[] {\n const cats = new Set<string>();\n for (const nt of this.NodeTypes) {\n if (nt.Draggable !== false) {\n cats.add(nt.Category ?? 'General');\n }\n }\n return Array.from(cats);\n }\n\n GetTypesForCategory(category: string): FlowNodeTypeConfig[] {\n return this.NodeTypes.filter(nt =>\n nt.Draggable !== false && (nt.Category ?? 'General') === category\n );\n }\n\n /** Converts a hex color to rgba with the given opacity for background tinting */\n GetBgColor(hexColor: string | undefined, opacity: number): string {\n if (!hexColor) return 'transparent';\n // Handle standard 6-digit hex colors\n const match = hexColor.match(/^#?([0-9a-fA-F]{6})$/);\n if (match) {\n const r = parseInt(match[1].substring(0, 2), 16);\n const g = parseInt(match[1].substring(2, 4), 16);\n const b = parseInt(match[1].substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n // Fallback: return the color as-is with opacity via CSS\n return hexColor;\n }\n}\n","<div class=\"mj-flow-palette\" [class.mj-flow-palette--collapsed]=\"Collapsed\">\n <div class=\"mj-flow-palette-header\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n @if (!Collapsed) {\n <span>Steps</span>\n }\n </div>\n\n @if (!Collapsed) {\n <div class=\"mj-flow-palette-content\">\n @for (category of categories; track category) {\n <div class=\"mj-flow-palette-category\">\n <div class=\"mj-flow-palette-category-label\">{{ category }}</div>\n @for (nodeType of GetTypesForCategory(category); track nodeType) {\n <!-- A real <button>, not a <div>: clicking a palette entry is the gesture most people\n try first, and it used to do literally nothing. The button also brings keyboard\n activation and a focus ring with it. fExternalItem still supplies drag-to-place. -->\n <button\n type=\"button\"\n class=\"mj-flow-palette-item\"\n fExternalItem\n [fData]=\"nodeType.Type\"\n [title]=\"'Click to add a ' + nodeType.Label + ', or drag it onto the canvas'\"\n (click)=\"OnNodeTypeActivated(nodeType)\">\n <span class=\"mj-flow-palette-item-icon\" [style.backgroundColor]=\"GetBgColor(nodeType.Color, 0.08)\" [style.color]=\"nodeType.Color\">\n <i class=\"fa-solid\" [ngClass]=\"nodeType.Icon\"></i>\n </span>\n <span class=\"mj-flow-palette-item-label\">{{ nodeType.Label }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"flow-palette.component.js","sourceRoot":"","sources":["../../../src/lib/components/flow-palette.component.ts","../../../src/lib/components/flow-palette.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, EventEmitter, Input, Output, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\nimport { FlowNodeTypeConfig } from '../interfaces/flow-types';\n\n/**\n * Palette sidebar for creating new nodes — **click it or drag it**.\n *\n * Foblex's `fExternalItem` directive supplies drag-to-canvas placement, which is the precise\n * gesture when the author cares where the box lands. It is not, however, the only gesture people\n * try: a palette that looks like a list of buttons gets clicked, and for a long time a click here\n * produced *nothing at all* — the item was a bare `<div>` with no click binding, so the interaction\n * never even reached the editor. The entry is now a real `<button>`, which restores the click, the\n * keyboard (Enter/Space), and the focus ring for free, and emits {@link NodeTypeActivated}.\n *\n * Both gestures converge on the same `NodeAdded` event in `FlowEditorComponent` — one code path, so\n * a host that handles the drop automatically handles the click.\n */\n@Component({\n standalone: false,\n selector: 'mj-flow-palette',\n templateUrl: './flow-palette.component.html',\n styleUrls: ['./flow-palette.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowPaletteComponent {\n @Input() NodeTypes: FlowNodeTypeConfig[] = [];\n @Input() Collapsed = false;\n\n /**\n * A palette entry was clicked (or activated from the keyboard).\n *\n * Carries the whole config rather than the type string so the host does not have to look it back\n * up — the palette already resolved it, and re-resolving is where a silent mismatch would live.\n */\n @Output() NodeTypeActivated = new EventEmitter<FlowNodeTypeConfig>();\n\n /** Handler for the click/keyboard activation on a palette entry. */\n OnNodeTypeActivated(nodeType: FlowNodeTypeConfig): void {\n this.NodeTypeActivated.emit(nodeType);\n }\n\n get Categories(): string[] {\n const cats = new Set<string>();\n for (const nt of this.NodeTypes) {\n if (nt.Draggable !== false) {\n cats.add(nt.Category ?? 'General');\n }\n }\n return Array.from(cats);\n }\n\n /** @deprecated Use {@link Categories}. */\n get categories(): string[] {\n return this.Categories;\n }\n\n GetTypesForCategory(category: string): FlowNodeTypeConfig[] {\n return this.NodeTypes.filter(nt =>\n nt.Draggable !== false && (nt.Category ?? 'General') === category\n );\n }\n\n /** Converts a hex color to rgba with the given opacity for background tinting */\n GetBgColor(hexColor: string | undefined, opacity: number): string {\n if (!hexColor) return 'transparent';\n // Handle standard 6-digit hex colors\n const match = hexColor.match(/^#?([0-9a-fA-F]{6})$/);\n if (match) {\n const r = parseInt(match[1].substring(0, 2), 16);\n const g = parseInt(match[1].substring(2, 4), 16);\n const b = parseInt(match[1].substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${opacity})`;\n }\n // Fallback: return the color as-is with opacity via CSS\n return hexColor;\n }\n}\n","<div class=\"mj-flow-palette\" [class.mj-flow-palette--collapsed]=\"Collapsed\">\n <div class=\"mj-flow-palette-header\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n @if (!Collapsed) {\n <span>Steps</span>\n }\n </div>\n\n @if (!Collapsed) {\n <div class=\"mj-flow-palette-content\">\n @for (category of categories; track category) {\n <div class=\"mj-flow-palette-category\">\n <div class=\"mj-flow-palette-category-label\">{{ category }}</div>\n @for (nodeType of GetTypesForCategory(category); track nodeType) {\n <!-- A real <button>, not a <div>: clicking a palette entry is the gesture most people\n try first, and it used to do literally nothing. The button also brings keyboard\n activation and a focus ring with it. fExternalItem still supplies drag-to-place. -->\n <button\n type=\"button\"\n class=\"mj-flow-palette-item\"\n fExternalItem\n [fData]=\"nodeType.Type\"\n [title]=\"'Click to add a ' + nodeType.Label + ', or drag it onto the canvas'\"\n (click)=\"OnNodeTypeActivated(nodeType)\">\n <span class=\"mj-flow-palette-item-icon\" [style.backgroundColor]=\"GetBgColor(nodeType.Color, 0.08)\" [style.color]=\"nodeType.Color\">\n <i class=\"fa-solid\" [ngClass]=\"nodeType.Icon\"></i>\n </span>\n <span class=\"mj-flow-palette-item-label\">{{ nodeType.Label }}</span>\n </button>\n }\n </div>\n }\n </div>\n }\n</div>\n"]}
@@ -15,7 +15,7 @@ import * as i13 from "@memberjunction/ng-code-editor";
15
15
  import * as i14 from "@memberjunction/ng-ui-components";
16
16
  export declare class FlowEditorModule {
17
17
  static ɵfac: i0.ɵɵFactoryDeclaration<FlowEditorModule, never>;
18
- static ɵmod: i0.ɵɵNgModuleDeclaration<FlowEditorModule, [typeof i1.FlowEditorComponent, typeof i2.FlowNodeComponent, typeof i3.FlowPaletteComponent, typeof i4.FlowToolbarComponent, typeof i5.FlowStatusBarComponent, typeof i6.FlowAgentEditorComponent, typeof i7.AgentPropertiesPanelComponent, typeof i8.AgentStepListComponent], [typeof i9.SharedGenericModule, typeof i10.CommonModule, typeof i11.FormsModule, typeof i12.FFlowModule, typeof i13.CodeEditorModule, typeof i14.MJEmptyStateComponent, typeof i14.MJAccordionModule], [typeof i1.FlowEditorComponent, typeof i2.FlowNodeComponent, typeof i3.FlowPaletteComponent, typeof i4.FlowToolbarComponent, typeof i5.FlowStatusBarComponent, typeof i6.FlowAgentEditorComponent, typeof i7.AgentPropertiesPanelComponent, typeof i8.AgentStepListComponent]>;
18
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FlowEditorModule, [typeof i1.FlowEditorComponent, typeof i2.FlowNodeComponent, typeof i3.FlowPaletteComponent, typeof i4.FlowToolbarComponent, typeof i5.FlowStatusBarComponent, typeof i6.FlowAgentEditorComponent, typeof i7.AgentPropertiesPanelComponent, typeof i8.AgentStepListComponent], [typeof i9.SharedGenericModule, typeof i10.CommonModule, typeof i11.FormsModule, typeof i12.FFlowModule, typeof i13.CodeEditorModule, typeof i14.MJEmptyStateComponent, typeof i14.MJAlertComponent, typeof i14.MJAccordionModule], [typeof i1.FlowEditorComponent, typeof i2.FlowNodeComponent, typeof i3.FlowPaletteComponent, typeof i4.FlowToolbarComponent, typeof i5.FlowStatusBarComponent, typeof i6.FlowAgentEditorComponent, typeof i7.AgentPropertiesPanelComponent, typeof i8.AgentStepListComponent]>;
19
19
  static ɵinj: i0.ɵɵInjectorDeclaration<FlowEditorModule>;
20
20
  }
21
21
  //# sourceMappingURL=flow-editor.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-editor.module.d.ts","sourceRoot":"","sources":["../../src/lib/flow-editor.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAoBA,qBAmCa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAI"}
1
+ {"version":3,"file":"flow-editor.module.d.ts","sourceRoot":"","sources":["../../src/lib/flow-editor.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAoBA,qBAoCa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAI"}
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import { FFlowModule } from '@foblex/flow';
5
5
  import { CodeEditorModule } from '@memberjunction/ng-code-editor';
6
- import { MJEmptyStateComponent, MJAccordionModule } from '@memberjunction/ng-ui-components';
6
+ import { MJAlertComponent, MJEmptyStateComponent, MJAccordionModule } from '@memberjunction/ng-ui-components';
7
7
  // Generic components
8
8
  import { FlowEditorComponent } from './components/flow-editor.component';
9
9
  import { FlowNodeComponent } from './components/flow-node.component';
@@ -25,6 +25,7 @@ export class FlowEditorModule {
25
25
  FFlowModule,
26
26
  CodeEditorModule,
27
27
  MJEmptyStateComponent,
28
+ MJAlertComponent,
28
29
  MJAccordionModule] });
29
30
  }
30
31
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FlowEditorModule, [{
@@ -49,6 +50,7 @@ export class FlowEditorModule {
49
50
  FFlowModule,
50
51
  CodeEditorModule,
51
52
  MJEmptyStateComponent,
53
+ MJAlertComponent,
52
54
  MJAccordionModule
53
55
  ],
54
56
  exports: [
@@ -81,6 +83,7 @@ export class FlowEditorModule {
81
83
  FFlowModule,
82
84
  CodeEditorModule,
83
85
  MJEmptyStateComponent,
86
+ MJAlertComponent,
84
87
  MJAccordionModule], exports: [
85
88
  // Generic — for any consumer
86
89
  FlowEditorComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"flow-editor.module.js","sourceRoot":"","sources":["../../src/lib/flow-editor.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE5F,qBAAqB;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,4BAA4B;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;;AAqCxE,MAAM,OAAO,gBAAgB;0GAAhB,gBAAgB;4DAAhB,gBAAgB;gEArBzB,mBAAmB;YACnB,YAAY;YACZ,WAAW;YACX,WAAW;YACX,gBAAgB;YAChB,qBAAqB;YACrB,iBAAiB;;iFAeR,gBAAgB;cAnC5B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,UAAU;oBACV,mBAAmB;oBACnB,iBAAiB;oBACjB,oBAAoB;oBACpB,oBAAoB;oBACpB,sBAAsB;oBACtB,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAA6B;oBAC7B,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,mBAAmB;oBACnB,YAAY;oBACZ,WAAW;oBACX,WAAW;oBACX,gBAAgB;oBAChB,qBAAqB;oBACrB,iBAAiB;iBAClB;gBACD,OAAO,EAAE;oBACP,6BAA6B;oBAC7B,mBAAmB;oBACnB,iBAAiB;oBACjB,oBAAoB;oBACpB,oBAAoB;oBACpB,sBAAsB;oBACtB,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAA6B;oBAC7B,sBAAsB;iBACvB;aACF;;wFACY,gBAAgB;QAjCzB,UAAU;QACV,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,6BAA6B;QAC7B,sBAAsB,aAGtB,mBAAmB;QACnB,YAAY;QACZ,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,qBAAqB;QACrB,iBAAiB;QAGjB,6BAA6B;QAC7B,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,6BAA6B;QAC7B,sBAAsB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FFlowModule } from '@foblex/flow';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\nimport { MJEmptyStateComponent, MJAccordionModule } from '@memberjunction/ng-ui-components';\n\n// Generic components\nimport { FlowEditorComponent } from './components/flow-editor.component';\nimport { FlowNodeComponent } from './components/flow-node.component';\nimport { FlowPaletteComponent } from './components/flow-palette.component';\nimport { FlowToolbarComponent } from './components/flow-toolbar.component';\nimport { FlowStatusBarComponent } from './components/flow-status-bar.component';\n\n// Agent-specific components\nimport { FlowAgentEditorComponent } from './agent-editor/flow-agent-editor.component';\nimport { AgentPropertiesPanelComponent } from './agent-editor/agent-properties-panel.component';\nimport { AgentStepListComponent } from './agent-editor/agent-step-list.component';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\n\n@NgModule({\n declarations: [\n // Generic\n FlowEditorComponent,\n FlowNodeComponent,\n FlowPaletteComponent,\n FlowToolbarComponent,\n FlowStatusBarComponent,\n // Agent-specific\n FlowAgentEditorComponent,\n AgentPropertiesPanelComponent,\n AgentStepListComponent\n ],\n imports: [\n SharedGenericModule,\n CommonModule,\n FormsModule,\n FFlowModule,\n CodeEditorModule,\n MJEmptyStateComponent,\n MJAccordionModule\n ],\n exports: [\n // Generic — for any consumer\n FlowEditorComponent,\n FlowNodeComponent,\n FlowPaletteComponent,\n FlowToolbarComponent,\n FlowStatusBarComponent,\n // Agent-specific\n FlowAgentEditorComponent,\n AgentPropertiesPanelComponent,\n AgentStepListComponent\n ]\n})\nexport class FlowEditorModule { }\n"]}
1
+ {"version":3,"file":"flow-editor.module.js","sourceRoot":"","sources":["../../src/lib/flow-editor.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAE9G,qBAAqB;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,4BAA4B;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AACtF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iDAAiD,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;;AAsCxE,MAAM,OAAO,gBAAgB;0GAAhB,gBAAgB;4DAAhB,gBAAgB;gEAtBzB,mBAAmB;YACnB,YAAY;YACZ,WAAW;YACX,WAAW;YACX,gBAAgB;YAChB,qBAAqB;YACrB,gBAAgB;YAChB,iBAAiB;;iFAeR,gBAAgB;cApC5B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,UAAU;oBACV,mBAAmB;oBACnB,iBAAiB;oBACjB,oBAAoB;oBACpB,oBAAoB;oBACpB,sBAAsB;oBACtB,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAA6B;oBAC7B,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,mBAAmB;oBACnB,YAAY;oBACZ,WAAW;oBACX,WAAW;oBACX,gBAAgB;oBAChB,qBAAqB;oBACrB,gBAAgB;oBAChB,iBAAiB;iBAClB;gBACD,OAAO,EAAE;oBACP,6BAA6B;oBAC7B,mBAAmB;oBACnB,iBAAiB;oBACjB,oBAAoB;oBACpB,oBAAoB;oBACpB,sBAAsB;oBACtB,iBAAiB;oBACjB,wBAAwB;oBACxB,6BAA6B;oBAC7B,sBAAsB;iBACvB;aACF;;wFACY,gBAAgB;QAlCzB,UAAU;QACV,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,6BAA6B;QAC7B,sBAAsB,aAGtB,mBAAmB;QACnB,YAAY;QACZ,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,qBAAqB;QACrB,gBAAgB;QAChB,iBAAiB;QAGjB,6BAA6B;QAC7B,mBAAmB;QACnB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,sBAAsB;QACtB,iBAAiB;QACjB,wBAAwB;QACxB,6BAA6B;QAC7B,sBAAsB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { FFlowModule } from '@foblex/flow';\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\nimport { MJAlertComponent, MJEmptyStateComponent, MJAccordionModule } from '@memberjunction/ng-ui-components';\n\n// Generic components\nimport { FlowEditorComponent } from './components/flow-editor.component';\nimport { FlowNodeComponent } from './components/flow-node.component';\nimport { FlowPaletteComponent } from './components/flow-palette.component';\nimport { FlowToolbarComponent } from './components/flow-toolbar.component';\nimport { FlowStatusBarComponent } from './components/flow-status-bar.component';\n\n// Agent-specific components\nimport { FlowAgentEditorComponent } from './agent-editor/flow-agent-editor.component';\nimport { AgentPropertiesPanelComponent } from './agent-editor/agent-properties-panel.component';\nimport { AgentStepListComponent } from './agent-editor/agent-step-list.component';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\n\n@NgModule({\n declarations: [\n // Generic\n FlowEditorComponent,\n FlowNodeComponent,\n FlowPaletteComponent,\n FlowToolbarComponent,\n FlowStatusBarComponent,\n // Agent-specific\n FlowAgentEditorComponent,\n AgentPropertiesPanelComponent,\n AgentStepListComponent\n ],\n imports: [\n SharedGenericModule,\n CommonModule,\n FormsModule,\n FFlowModule,\n CodeEditorModule,\n MJEmptyStateComponent,\n MJAlertComponent,\n MJAccordionModule\n ],\n exports: [\n // Generic — for any consumer\n FlowEditorComponent,\n FlowNodeComponent,\n FlowPaletteComponent,\n FlowToolbarComponent,\n FlowStatusBarComponent,\n // Agent-specific\n FlowAgentEditorComponent,\n AgentPropertiesPanelComponent,\n AgentStepListComponent\n ]\n})\nexport class FlowEditorModule { }\n"]}
@@ -2,6 +2,11 @@
2
2
  * Core interfaces for the generic flow editor.
3
3
  * These types are entity-agnostic — consumers map their domain data to/from these.
4
4
  */
5
+ import type { MJAIPromptEntity } from '@memberjunction/core-entities';
6
+ /**
7
+ * Prompt option shape for flow editor prompt pickers.
8
+ */
9
+ export type PromptOption = Pick<MJAIPromptEntity, 'ID' | 'Name' | 'AIModelType' | 'AIModelTypeID'>;
5
10
  /** Position on the canvas */
6
11
  export interface FlowPosition {
7
12
  X: number;
@@ -1 +1 @@
1
- {"version":3,"file":"flow-types.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/flow-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow-types.d.ts","sourceRoot":"","sources":["../../../src/lib/interfaces/flow-types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- /**
2
- * Core interfaces for the generic flow editor.
3
- * These types are entity-agnostic — consumers map their domain data to/from these.
4
- */
5
1
  /**
6
2
  * Fired BEFORE the canvas menu opens. Mutate `Items` to replace the default set; `Cancel = true`
7
3
  * suppresses the menu. A `Before*` handler must not be async — the emitter reads `Cancel`/`Items`
@@ -1 +1 @@
1
- {"version":3,"file":"flow-types.js","sourceRoot":"","sources":["../../../src/lib/interfaces/flow-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+LH;;;;GAIG;AACH,MAAM,OAAO,8BAA8B;IAGnB;IACA;IACA;IACA;IACT;IANJ,MAAM,GAAG,KAAK,CAAC;IACtB,YACoB,MAA6B,EAC7B,IAAqB,EACrB,UAAiC,EACjC,UAAsB,EAC/B,KAA4B;QAJnB,WAAM,GAAN,MAAM,CAAuB;QAC7B,SAAI,GAAJ,IAAI,CAAiB;QACrB,eAAU,GAAV,UAAU,CAAuB;QACjC,eAAU,GAAV,UAAU,CAAY;QAC/B,UAAK,GAAL,KAAK,CAAuB;IACpC,CAAC;CACP;AAED,6FAA6F;AAC7F,MAAM,OAAO,mCAAmC;IAExB;IACA;IACA;IACA;IAJpB,YACoB,QAAgB,EAChB,MAA6B,EAC7B,IAAqB,EACrB,UAAiC;QAHjC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAuB;QAC7B,SAAI,GAAJ,IAAI,CAAiB;QACrB,eAAU,GAAV,UAAU,CAAuB;IAClD,CAAC;CACP","sourcesContent":["/**\n * Core interfaces for the generic flow editor.\n * These types are entity-agnostic — consumers map their domain data to/from these.\n */\n\n// ---------------------------------------------------------------------------\n// Node Types\n// ---------------------------------------------------------------------------\n\n/** Position on the canvas */\nexport interface FlowPosition {\n X: number;\n Y: number;\n}\n\n/** Size dimensions */\nexport interface FlowSize {\n Width: number;\n Height: number;\n}\n\n/** A port (connector) on a node */\nexport interface FlowNodePort {\n ID: string;\n Direction: 'input' | 'output';\n Side?: 'left' | 'right' | 'top' | 'bottom' | 'auto';\n Multiple?: boolean;\n Disabled?: boolean;\n Label?: string;\n /** Category string for connection validation (matched against FlowNodePort on targets) */\n Category?: string;\n}\n\n/** A small info badge displayed on a node */\nexport interface FlowNodeBadge {\n Label: string;\n Value: string;\n Icon?: string;\n Color?: string;\n}\n\n/** Visual status of a node */\n/**\n * How a node presents its state.\n *\n * `skipped` is deliberately its own value rather than a shade of `disabled`. Disabled means \"this\n * cannot run\"; skipped means \"the graph chose another route\" — nothing is wrong, and a reader who\n * cannot tell them apart goes looking for a failure that never happened.\n */\nexport type FlowNodeStatus = 'default' | 'success' | 'error' | 'warning' | 'running' | 'disabled' | 'pending' | 'skipped';\n\n/** A node in the flow graph */\nexport interface FlowNode {\n ID: string;\n Type: string;\n Label: string;\n Subtitle?: string;\n Icon?: string;\n IconColor?: string;\n Status: FlowNodeStatus;\n StatusMessage?: string;\n Badges?: FlowNodeBadge[];\n Position: FlowPosition;\n Size?: FlowSize;\n Ports: FlowNodePort[];\n Collapsed?: boolean;\n Selected?: boolean;\n Locked?: boolean;\n IsStartNode?: boolean;\n /** Opaque data payload — consumers store domain-specific data here */\n Data?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Connection Types\n// ---------------------------------------------------------------------------\n\n/** Visual style for a connection line */\nexport type FlowConnectionStyle = 'solid' | 'dashed' | 'dotted';\n\n/** A connection (edge) between two nodes */\nexport interface FlowConnection {\n ID: string;\n SourceNodeID: string;\n SourcePortID: string;\n TargetNodeID: string;\n TargetPortID: string;\n Label?: string;\n LabelDetail?: string;\n /** Font Awesome icon class shown before the label text (e.g., 'fa-check') */\n LabelIcon?: string;\n /** Color for the label icon */\n LabelIconColor?: string;\n Condition?: string;\n Priority?: number;\n Style?: FlowConnectionStyle;\n Color?: string;\n /** Stroke width in px. Active/flowing edges use a thicker value so they read at a glance. */\n StrokeWidth?: number;\n Animated?: boolean;\n Selected?: boolean;\n /** Opaque data payload — consumers store domain-specific data here */\n Data?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Node Type Registration (for palette and rendering)\n// ---------------------------------------------------------------------------\n\n/** Configuration for a node type displayed in the palette */\nexport interface FlowNodeTypeConfig {\n /** Unique type identifier (e.g., 'Action', 'Prompt') */\n Type: string;\n /** Display label */\n Label: string;\n /** Font Awesome icon class (e.g., 'fa-bolt') */\n Icon: string;\n /** Hex color for the node header */\n Color: string;\n /** Default ports created when this node type is added */\n DefaultPorts?: FlowNodePort[];\n /** Palette category for grouping (e.g., 'Steps', 'Loops') */\n Category?: string;\n /** Whether this type can be dragged from the palette (default true) */\n Draggable?: boolean;\n /** Maximum number of instances allowed (0 = unlimited, default 0) */\n MaxInstances?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Event Payloads\n// ---------------------------------------------------------------------------\n\n/** Emitted when a new node is added from the palette */\nexport interface FlowNodeAddedEvent {\n Node: FlowNode;\n DropPosition: FlowPosition;\n}\n\n/** Emitted when a node is moved on the canvas */\nexport interface FlowNodeMovedEvent {\n NodeID: string;\n OldPosition: FlowPosition;\n NewPosition: FlowPosition;\n}\n\n/** Emitted when a new connection is drawn */\nexport interface FlowConnectionCreatedEvent {\n SourceNodeID: string;\n SourcePortID: string;\n TargetNodeID: string;\n TargetPortID: string;\n}\n\n/** Emitted when an existing connection is reassigned (endpoint dragged to a different node) */\nexport interface FlowConnectionReassignedEvent {\n ConnectionID: string;\n OldSourceNodeID: string;\n OldSourcePortID: string;\n OldTargetNodeID: string;\n OldTargetPortID: string;\n NewSourceNodeID: string;\n NewSourcePortID: string;\n NewTargetNodeID: string;\n NewTargetPortID: string;\n}\n\n/** Emitted when the selection state changes */\nexport interface FlowSelectionChangedEvent {\n SelectedNodeIDs: string[];\n SelectedConnectionIDs: string[];\n}\n\n/** Emitted when empty canvas is clicked */\nexport interface FlowCanvasClickEvent {\n Position: FlowPosition;\n}\n\n/** Context menu target type */\nexport type FlowContextMenuTarget = 'node' | 'connection';\n\n/** Built-in design-time actions. Hosts may emit any other `ID` string. */\nexport type FlowContextMenuAction = 'edit' | 'remove' | string;\n\n/** One row in the canvas context menu. The host may replace the default Edit/Remove set. */\nexport type FlowContextMenuItem = {\n ID: string;\n Label: string;\n Icon?: string;\n Danger?: boolean;\n Disabled?: boolean;\n Shortcut?: string;\n};\n\n/**\n * Fired BEFORE the canvas menu opens. Mutate `Items` to replace the default set; `Cancel = true`\n * suppresses the menu. A `Before*` handler must not be async — the emitter reads `Cancel`/`Items`\n * when `emit()` returns.\n */\nexport class FlowBeforeContextMenuEventArgs {\n public Cancel = false;\n constructor(\n public readonly Target: FlowContextMenuTarget,\n public readonly Node: FlowNode | null,\n public readonly Connection: FlowConnection | null,\n public readonly MouseEvent: MouseEvent,\n public Items: FlowContextMenuItem[],\n ) {}\n}\n\n/** Fired AFTER a menu item is chosen. Built-in `edit`/`remove` still run unless ReadOnly. */\nexport class FlowAfterContextMenuActionEventArgs {\n constructor(\n public readonly ActionID: string,\n public readonly Target: FlowContextMenuTarget,\n public readonly Node: FlowNode | null,\n public readonly Connection: FlowConnection | null,\n ) {}\n}\n\n// ---------------------------------------------------------------------------\n// State Types (for undo/redo)\n// ---------------------------------------------------------------------------\n\n/** A complete snapshot of the flow state */\nexport interface FlowSnapshot {\n Nodes: FlowNode[];\n Connections: FlowConnection[];\n}\n\n// ---------------------------------------------------------------------------\n// Layout Types\n// ---------------------------------------------------------------------------\n\n/** Direction for auto-layout */\nexport type FlowLayoutDirection = 'horizontal' | 'vertical';\n\n/**\n * How the canvas toolbar presents itself.\n *\n * `shown` is the full bar. `minimized` is a chip that restores it. `hidden` leaves only a\n * recover tab — otherwise a host that hid the bar would have no way back from the canvas.\n */\nexport type FlowToolbarVisibility = 'shown' | 'hidden' | 'minimized';\n\n/** Horizontal placement of the canvas toolbar (and of its minimized / hidden recover control). */\nexport type FlowToolbarAlign = 'left' | 'center' | 'right';\n\n/** Result of an auto-layout operation */\nexport interface FlowLayoutResult {\n Positions: Map<string, FlowPosition>;\n}\n"]}
1
+ {"version":3,"file":"flow-types.js","sourceRoot":"","sources":["../../../src/lib/interfaces/flow-types.ts"],"names":[],"mappings":"AAwMA;;;;GAIG;AACH,MAAM,OAAO,8BAA8B;IAGnB;IACA;IACA;IACA;IACT;IANJ,MAAM,GAAG,KAAK,CAAC;IACtB,YACoB,MAA6B,EAC7B,IAAqB,EACrB,UAAiC,EACjC,UAAsB,EAC/B,KAA4B;QAJnB,WAAM,GAAN,MAAM,CAAuB;QAC7B,SAAI,GAAJ,IAAI,CAAiB;QACrB,eAAU,GAAV,UAAU,CAAuB;QACjC,eAAU,GAAV,UAAU,CAAY;QAC/B,UAAK,GAAL,KAAK,CAAuB;IACpC,CAAC;CACP;AAED,6FAA6F;AAC7F,MAAM,OAAO,mCAAmC;IAExB;IACA;IACA;IACA;IAJpB,YACoB,QAAgB,EAChB,MAA6B,EAC7B,IAAqB,EACrB,UAAiC;QAHjC,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAuB;QAC7B,SAAI,GAAJ,IAAI,CAAiB;QACrB,eAAU,GAAV,UAAU,CAAuB;IAClD,CAAC;CACP","sourcesContent":["/**\n * Core interfaces for the generic flow editor.\n * These types are entity-agnostic — consumers map their domain data to/from these.\n */\nimport type { MJAIPromptEntity } from '@memberjunction/core-entities';\n\n/**\n * Prompt option shape for flow editor prompt pickers.\n */\nexport type PromptOption = Pick<MJAIPromptEntity, 'ID' | 'Name' | 'AIModelType' | 'AIModelTypeID'>;\n\n// ---------------------------------------------------------------------------\n// Node Types\n// ---------------------------------------------------------------------------\n\n/** Position on the canvas */\nexport interface FlowPosition {\n X: number;\n Y: number;\n}\n\n/** Size dimensions */\nexport interface FlowSize {\n Width: number;\n Height: number;\n}\n\n/** A port (connector) on a node */\nexport interface FlowNodePort {\n ID: string;\n Direction: 'input' | 'output';\n Side?: 'left' | 'right' | 'top' | 'bottom' | 'auto';\n Multiple?: boolean;\n Disabled?: boolean;\n Label?: string;\n /** Category string for connection validation (matched against FlowNodePort on targets) */\n Category?: string;\n}\n\n/** A small info badge displayed on a node */\nexport interface FlowNodeBadge {\n Label: string;\n Value: string;\n Icon?: string;\n Color?: string;\n}\n\n/** Visual status of a node */\n/**\n * How a node presents its state.\n *\n * `skipped` is deliberately its own value rather than a shade of `disabled`. Disabled means \"this\n * cannot run\"; skipped means \"the graph chose another route\" — nothing is wrong, and a reader who\n * cannot tell them apart goes looking for a failure that never happened.\n */\nexport type FlowNodeStatus = 'default' | 'success' | 'error' | 'warning' | 'running' | 'disabled' | 'pending' | 'skipped';\n\n/** A node in the flow graph */\nexport interface FlowNode {\n ID: string;\n Type: string;\n Label: string;\n Subtitle?: string;\n Icon?: string;\n IconColor?: string;\n Status: FlowNodeStatus;\n StatusMessage?: string;\n Badges?: FlowNodeBadge[];\n Position: FlowPosition;\n Size?: FlowSize;\n Ports: FlowNodePort[];\n Collapsed?: boolean;\n Selected?: boolean;\n Locked?: boolean;\n IsStartNode?: boolean;\n /** Opaque data payload — consumers store domain-specific data here */\n Data?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Connection Types\n// ---------------------------------------------------------------------------\n\n/** Visual style for a connection line */\nexport type FlowConnectionStyle = 'solid' | 'dashed' | 'dotted';\n\n/** A connection (edge) between two nodes */\nexport interface FlowConnection {\n ID: string;\n SourceNodeID: string;\n SourcePortID: string;\n TargetNodeID: string;\n TargetPortID: string;\n Label?: string;\n LabelDetail?: string;\n /** Font Awesome icon class shown before the label text (e.g., 'fa-check') */\n LabelIcon?: string;\n /** Color for the label icon */\n LabelIconColor?: string;\n Condition?: string;\n Priority?: number;\n Style?: FlowConnectionStyle;\n Color?: string;\n /** Stroke width in px. Active/flowing edges use a thicker value so they read at a glance. */\n StrokeWidth?: number;\n Animated?: boolean;\n Selected?: boolean;\n /** Opaque data payload — consumers store domain-specific data here */\n Data?: Record<string, unknown>;\n}\n\n// ---------------------------------------------------------------------------\n// Node Type Registration (for palette and rendering)\n// ---------------------------------------------------------------------------\n\n/** Configuration for a node type displayed in the palette */\nexport interface FlowNodeTypeConfig {\n /** Unique type identifier (e.g., 'Action', 'Prompt') */\n Type: string;\n /** Display label */\n Label: string;\n /** Font Awesome icon class (e.g., 'fa-bolt') */\n Icon: string;\n /** Hex color for the node header */\n Color: string;\n /** Default ports created when this node type is added */\n DefaultPorts?: FlowNodePort[];\n /** Palette category for grouping (e.g., 'Steps', 'Loops') */\n Category?: string;\n /** Whether this type can be dragged from the palette (default true) */\n Draggable?: boolean;\n /** Maximum number of instances allowed (0 = unlimited, default 0) */\n MaxInstances?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Event Payloads\n// ---------------------------------------------------------------------------\n\n/** Emitted when a new node is added from the palette */\nexport interface FlowNodeAddedEvent {\n Node: FlowNode;\n DropPosition: FlowPosition;\n}\n\n/** Emitted when a node is moved on the canvas */\nexport interface FlowNodeMovedEvent {\n NodeID: string;\n OldPosition: FlowPosition;\n NewPosition: FlowPosition;\n}\n\n/** Emitted when a new connection is drawn */\nexport interface FlowConnectionCreatedEvent {\n SourceNodeID: string;\n SourcePortID: string;\n TargetNodeID: string;\n TargetPortID: string;\n}\n\n/** Emitted when an existing connection is reassigned (endpoint dragged to a different node) */\nexport interface FlowConnectionReassignedEvent {\n ConnectionID: string;\n OldSourceNodeID: string;\n OldSourcePortID: string;\n OldTargetNodeID: string;\n OldTargetPortID: string;\n NewSourceNodeID: string;\n NewSourcePortID: string;\n NewTargetNodeID: string;\n NewTargetPortID: string;\n}\n\n/** Emitted when the selection state changes */\nexport interface FlowSelectionChangedEvent {\n SelectedNodeIDs: string[];\n SelectedConnectionIDs: string[];\n}\n\n/** Emitted when empty canvas is clicked */\nexport interface FlowCanvasClickEvent {\n Position: FlowPosition;\n}\n\n/** Context menu target type */\nexport type FlowContextMenuTarget = 'node' | 'connection';\n\n/** Built-in design-time actions. Hosts may emit any other `ID` string. */\nexport type FlowContextMenuAction = 'edit' | 'remove' | string;\n\n/** One row in the canvas context menu. The host may replace the default Edit/Remove set. */\nexport type FlowContextMenuItem = {\n ID: string;\n Label: string;\n Icon?: string;\n Danger?: boolean;\n Disabled?: boolean;\n Shortcut?: string;\n};\n\n/**\n * Fired BEFORE the canvas menu opens. Mutate `Items` to replace the default set; `Cancel = true`\n * suppresses the menu. A `Before*` handler must not be async — the emitter reads `Cancel`/`Items`\n * when `emit()` returns.\n */\nexport class FlowBeforeContextMenuEventArgs {\n public Cancel = false;\n constructor(\n public readonly Target: FlowContextMenuTarget,\n public readonly Node: FlowNode | null,\n public readonly Connection: FlowConnection | null,\n public readonly MouseEvent: MouseEvent,\n public Items: FlowContextMenuItem[],\n ) {}\n}\n\n/** Fired AFTER a menu item is chosen. Built-in `edit`/`remove` still run unless ReadOnly. */\nexport class FlowAfterContextMenuActionEventArgs {\n constructor(\n public readonly ActionID: string,\n public readonly Target: FlowContextMenuTarget,\n public readonly Node: FlowNode | null,\n public readonly Connection: FlowConnection | null,\n ) {}\n}\n\n// ---------------------------------------------------------------------------\n// State Types (for undo/redo)\n// ---------------------------------------------------------------------------\n\n/** A complete snapshot of the flow state */\nexport interface FlowSnapshot {\n Nodes: FlowNode[];\n Connections: FlowConnection[];\n}\n\n// ---------------------------------------------------------------------------\n// Layout Types\n// ---------------------------------------------------------------------------\n\n/** Direction for auto-layout */\nexport type FlowLayoutDirection = 'horizontal' | 'vertical';\n\n/**\n * How the canvas toolbar presents itself.\n *\n * `shown` is the full bar. `minimized` is a chip that restores it. `hidden` leaves only a\n * recover tab — otherwise a host that hid the bar would have no way back from the canvas.\n */\nexport type FlowToolbarVisibility = 'shown' | 'hidden' | 'minimized';\n\n/** Horizontal placement of the canvas toolbar (and of its minimized / hidden recover control). */\nexport type FlowToolbarAlign = 'left' | 'center' | 'right';\n\n/** Result of an auto-layout operation */\nexport interface FlowLayoutResult {\n Positions: Map<string, FlowPosition>;\n}\n"]}
@@ -11,4 +11,5 @@ export * from './lib/agent-editor/flow-agent-editor.component';
11
11
  export * from './lib/agent-editor/agent-properties-panel.component';
12
12
  export * from './lib/agent-editor/agent-step-list.component';
13
13
  export * from './lib/agent-editor/agent-flow-transformer.service';
14
+ export * from './lib/agent-editor/flow-run-check';
14
15
  //# sourceMappingURL=public-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,0BAA0B,CAAC;AAGzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAG3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC"}
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAKA,cAAc,0BAA0B,CAAC;AAGzC,cAAc,6BAA6B,CAAC;AAG5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAG3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mCAAmC,CAAC"}
@@ -19,4 +19,5 @@ export * from './lib/agent-editor/flow-agent-editor.component';
19
19
  export * from './lib/agent-editor/agent-properties-panel.component';
20
20
  export * from './lib/agent-editor/agent-step-list.component';
21
21
  export * from './lib/agent-editor/agent-flow-transformer.service';
22
+ export * from './lib/agent-editor/flow-run-check';
22
23
  //# sourceMappingURL=public-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,0BAA0B,CAAC;AAEzC,aAAa;AACb,cAAc,6BAA6B,CAAC;AAE5C,WAAW;AACX,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AAEnD,qBAAqB;AACrB,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAE3D,0BAA0B;AAC1B,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-flow-editor\n */\n\n// Module\nexport * from './lib/flow-editor.module';\n\n// Interfaces\nexport * from './lib/interfaces/flow-types';\n\n// Services\nexport * from './lib/services/flow-state.service';\nexport * from './lib/services/flow-layout.service';\n\n// Generic Components\nexport * from './lib/components/flow-editor.component';\nexport * from './lib/components/flow-node.component';\nexport * from './lib/components/flow-palette.component';\nexport * from './lib/components/flow-toolbar.component';\nexport * from './lib/components/flow-status-bar.component';\n\n// Agent Editor Components\nexport * from './lib/agent-editor/flow-agent-editor.component';\nexport * from './lib/agent-editor/agent-properties-panel.component';\nexport * from './lib/agent-editor/agent-step-list.component';\nexport * from './lib/agent-editor/agent-flow-transformer.service';\n"]}
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS;AACT,cAAc,0BAA0B,CAAC;AAEzC,aAAa;AACb,cAAc,6BAA6B,CAAC;AAE5C,WAAW;AACX,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AAEnD,qBAAqB;AACrB,cAAc,wCAAwC,CAAC;AACvD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AACxD,cAAc,4CAA4C,CAAC;AAE3D,0BAA0B;AAC1B,cAAc,gDAAgD,CAAC;AAC/D,cAAc,qDAAqD,CAAC;AACpE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,mDAAmD,CAAC;AAClE,cAAc,mCAAmC,CAAC","sourcesContent":["/*\n * Public API Surface of @memberjunction/ng-flow-editor\n */\n\n// Module\nexport * from './lib/flow-editor.module';\n\n// Interfaces\nexport * from './lib/interfaces/flow-types';\n\n// Services\nexport * from './lib/services/flow-state.service';\nexport * from './lib/services/flow-layout.service';\n\n// Generic Components\nexport * from './lib/components/flow-editor.component';\nexport * from './lib/components/flow-node.component';\nexport * from './lib/components/flow-palette.component';\nexport * from './lib/components/flow-toolbar.component';\nexport * from './lib/components/flow-status-bar.component';\n\n// Agent Editor Components\nexport * from './lib/agent-editor/flow-agent-editor.component';\nexport * from './lib/agent-editor/agent-properties-panel.component';\nexport * from './lib/agent-editor/agent-step-list.component';\nexport * from './lib/agent-editor/agent-flow-transformer.service';\nexport * from './lib/agent-editor/flow-run-check';\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-flow-editor",
3
- "version": "6.2.0-edge.0",
3
+ "version": "6.2.0-edge.2",
4
4
  "description": "MemberJunction: Generic visual flow editor component powered by Foblex Flow, with an agent-specific Flow Agent Editor",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -21,7 +21,7 @@
21
21
  "devDependencies": {
22
22
  "@angular/compiler": "21.2.22",
23
23
  "@angular/compiler-cli": "21.2.22",
24
- "@memberjunction/ng-test-utils": "6.2.0-edge.0",
24
+ "@memberjunction/ng-test-utils": "6.2.0-edge.2",
25
25
  "sass": "^1.97.3",
26
26
  "vitest": "^4.0.18"
27
27
  },
@@ -38,13 +38,14 @@
38
38
  "@foblex/mediator": "1.1.3",
39
39
  "@foblex/platform": "1.0.4",
40
40
  "@foblex/utils": "1.1.1",
41
- "@memberjunction/core": "6.2.0-edge.0",
42
- "@memberjunction/core-entities": "6.2.0-edge.0",
43
- "@memberjunction/global": "6.2.0-edge.0",
44
- "@memberjunction/ng-base-types": "6.2.0-edge.0",
45
- "@memberjunction/ng-code-editor": "6.2.0-edge.0",
46
- "@memberjunction/ng-shared-generic": "6.2.0-edge.0",
47
- "@memberjunction/ng-ui-components": "6.2.0-edge.0",
41
+ "@memberjunction/ai-core-plus": "6.2.0-edge.2",
42
+ "@memberjunction/core": "6.2.0-edge.2",
43
+ "@memberjunction/core-entities": "6.2.0-edge.2",
44
+ "@memberjunction/global": "6.2.0-edge.2",
45
+ "@memberjunction/ng-base-types": "6.2.0-edge.2",
46
+ "@memberjunction/ng-code-editor": "6.2.0-edge.2",
47
+ "@memberjunction/ng-shared-generic": "6.2.0-edge.2",
48
+ "@memberjunction/ng-ui-components": "6.2.0-edge.2",
48
49
  "rxjs": "^7.8.2",
49
50
  "tslib": "^2.8.1"
50
51
  },