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

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 (36) 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 +216 -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 +1679 -250
  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.map +1 -1
  10. package/dist/lib/agent-editor/agent-step-list.component.js +10 -1
  11. package/dist/lib/agent-editor/agent-step-list.component.js.map +1 -1
  12. package/dist/lib/agent-editor/decision-step-config.d.ts +27 -0
  13. package/dist/lib/agent-editor/decision-step-config.d.ts.map +1 -0
  14. package/dist/lib/agent-editor/decision-step-config.js +70 -0
  15. package/dist/lib/agent-editor/decision-step-config.js.map +1 -0
  16. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts +37 -5
  17. package/dist/lib/agent-editor/flow-agent-editor.component.d.ts.map +1 -1
  18. package/dist/lib/agent-editor/flow-agent-editor.component.js +177 -45
  19. package/dist/lib/agent-editor/flow-agent-editor.component.js.map +1 -1
  20. package/dist/lib/agent-editor/flow-run-check.d.ts +32 -0
  21. package/dist/lib/agent-editor/flow-run-check.d.ts.map +1 -0
  22. package/dist/lib/agent-editor/flow-run-check.js +146 -0
  23. package/dist/lib/agent-editor/flow-run-check.js.map +1 -0
  24. package/dist/lib/flow-editor.module.d.ts +1 -1
  25. package/dist/lib/flow-editor.module.d.ts.map +1 -1
  26. package/dist/lib/flow-editor.module.js +4 -1
  27. package/dist/lib/flow-editor.module.js.map +1 -1
  28. package/dist/lib/interfaces/flow-types.d.ts +5 -0
  29. package/dist/lib/interfaces/flow-types.d.ts.map +1 -1
  30. package/dist/lib/interfaces/flow-types.js +0 -4
  31. package/dist/lib/interfaces/flow-types.js.map +1 -1
  32. package/dist/public-api.d.ts +1 -0
  33. package/dist/public-api.d.ts.map +1 -1
  34. package/dist/public-api.js +1 -0
  35. package/dist/public-api.js.map +1 -1
  36. package/package.json +10 -9
@@ -1,10 +1,16 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { UUIDsEqual } from '@memberjunction/global';
3
+ import { FlowDecisionKeyProblem, ReadFlowDecisionStepConfiguration, RewriteDecisionReferences, RewriteDecisionQuestionReferences, RewriteDecisionChoiceValues, DecisionChoiceTestOf, DecisionConditionLiteral, DecisionReferenceText, IsDecisionPrompt } from '@memberjunction/ai-core-plus';
4
+ import { DECISION_QUESTION_KEY_PATTERN, ReadDecisionStepKey, ReadEditableDecisionConfig } from './decision-step-config';
5
+ import { PathRunProblems, StepRunProblems } from './flow-run-check';
3
6
  import * as i0 from "@angular/core";
4
7
  import * as i1 from "@angular/common";
5
8
  import * as i2 from "@angular/forms";
6
9
  import * as i3 from "@memberjunction/ng-code-editor";
7
10
  import * as i4 from "@memberjunction/ng-ui-components";
11
+ const _forTrack0 = ($index, $item) => $item.key;
12
+ const _forTrack1 = ($index, $item) => $item.ID;
13
+ const _forTrack2 = ($index, $item) => $item.value;
8
14
  function AgentPropertiesPanelComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
9
15
  i0.ɵɵelement(0, "mj-empty-state", 1);
10
16
  } }
@@ -13,22 +19,40 @@ function AgentPropertiesPanelComponent_Conditional_2_Conditional_18_Template(rf,
13
19
  i0.ɵɵtext(1, "Start");
14
20
  i0.ɵɵelementEnd();
15
21
  } }
16
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_21_Template(rf, ctx) { if (rf & 1) {
22
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_20_For_3_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "li");
24
+ i0.ɵɵtext(1);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const message_r3 = ctx.$implicit;
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵtextInterpolate(message_r3);
30
+ } }
31
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "mj-alert", 18)(1, "ul", 24);
33
+ i0.ɵɵrepeaterCreate(2, AgentPropertiesPanelComponent_Conditional_2_Conditional_20_For_3_Template, 2, 1, "li", null, i0.ɵɵrepeaterTrackByIndex);
34
+ i0.ɵɵelementEnd()();
35
+ } if (rf & 2) {
36
+ const ctx_r1 = i0.ɵɵnextContext(2);
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵrepeater(ctx_r1.StepRunProblemMessages);
39
+ } }
40
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Template(rf, ctx) { if (rf & 1) {
17
41
  i0.ɵɵelementStart(0, "span");
18
42
  i0.ɵɵtext(1, "General");
19
43
  i0.ɵɵelementEnd();
20
44
  } }
21
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_4_Template(rf, ctx) { if (rf & 1) {
22
- const _r3 = i0.ɵɵgetCurrentView();
23
- i0.ɵɵelementStart(0, "input", 30);
24
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnNameChange(ctx_r1.InputValue($event))); });
45
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
46
+ const _r4 = i0.ɵɵgetCurrentView();
47
+ i0.ɵɵelementStart(0, "input", 32);
48
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnNameChange(ctx_r1.InputValue($event))); });
25
49
  i0.ɵɵelementEnd();
26
50
  } if (rf & 2) {
27
51
  const ctx_r1 = i0.ɵɵnextContext(3);
28
52
  i0.ɵɵproperty("value", ctx_r1.Step.Name);
29
53
  } }
30
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_5_Template(rf, ctx) { if (rf & 1) {
31
- i0.ɵɵelementStart(0, "div", 26);
54
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 28);
32
56
  i0.ɵɵtext(1);
33
57
  i0.ɵɵelementEnd();
34
58
  } if (rf & 2) {
@@ -36,17 +60,17 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_
36
60
  i0.ɵɵadvance();
37
61
  i0.ɵɵtextInterpolate(ctx_r1.Step.Name);
38
62
  } }
39
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_9_Template(rf, ctx) { if (rf & 1) {
40
- const _r4 = i0.ɵɵgetCurrentView();
41
- i0.ɵɵelementStart(0, "textarea", 31);
42
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_9_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDescriptionChange(ctx_r1.InputValue($event))); });
63
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_9_Template(rf, ctx) { if (rf & 1) {
64
+ const _r5 = i0.ɵɵgetCurrentView();
65
+ i0.ɵɵelementStart(0, "textarea", 33);
66
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_9_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnDescriptionChange(ctx_r1.InputValue($event))); });
43
67
  i0.ɵɵelementEnd();
44
68
  } if (rf & 2) {
45
69
  const ctx_r1 = i0.ɵɵnextContext(3);
46
70
  i0.ɵɵproperty("value", ctx_r1.Step.Description || "");
47
71
  } }
48
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_10_Template(rf, ctx) { if (rf & 1) {
49
- i0.ɵɵelementStart(0, "div", 26);
72
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_10_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementStart(0, "div", 28);
50
74
  i0.ɵɵtext(1);
51
75
  i0.ɵɵelementEnd();
52
76
  } if (rf & 2) {
@@ -54,25 +78,25 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_
54
78
  i0.ɵɵadvance();
55
79
  i0.ɵɵtextInterpolate1(" ", ctx_r1.Step.Description || "\u2014", " ");
56
80
  } }
57
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_14_Template(rf, ctx) { if (rf & 1) {
58
- const _r5 = i0.ɵɵgetCurrentView();
59
- i0.ɵɵelementStart(0, "select", 32);
60
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_14_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnStatusChange(ctx_r1.InputValue($event))); });
61
- i0.ɵɵelementStart(1, "option", 33);
81
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_14_Template(rf, ctx) { if (rf & 1) {
82
+ const _r6 = i0.ɵɵgetCurrentView();
83
+ i0.ɵɵelementStart(0, "select", 34);
84
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_14_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnStatusChange(ctx_r1.InputValue($event))); });
85
+ i0.ɵɵelementStart(1, "option", 35);
62
86
  i0.ɵɵtext(2, "Active");
63
87
  i0.ɵɵelementEnd();
64
- i0.ɵɵelementStart(3, "option", 34);
88
+ i0.ɵɵelementStart(3, "option", 36);
65
89
  i0.ɵɵtext(4, "Disabled");
66
90
  i0.ɵɵelementEnd();
67
- i0.ɵɵelementStart(5, "option", 35);
91
+ i0.ɵɵelementStart(5, "option", 37);
68
92
  i0.ɵɵtext(6, "Pending");
69
93
  i0.ɵɵelementEnd()();
70
94
  } if (rf & 2) {
71
95
  const ctx_r1 = i0.ɵɵnextContext(3);
72
96
  i0.ɵɵproperty("value", ctx_r1.Step.Status);
73
97
  } }
74
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_15_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "div", 26);
98
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_15_Template(rf, ctx) { if (rf & 1) {
99
+ i0.ɵɵelementStart(0, "div", 28);
76
100
  i0.ɵɵelement(1, "span", 14);
77
101
  i0.ɵɵtext(2);
78
102
  i0.ɵɵelementEnd();
@@ -83,10 +107,10 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_
83
107
  i0.ɵɵadvance();
84
108
  i0.ɵɵtextInterpolate1(" ", ctx_r1.Step.Status, " ");
85
109
  } }
86
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_16_Template(rf, ctx) { if (rf & 1) {
87
- const _r6 = i0.ɵɵgetCurrentView();
88
- i0.ɵɵelementStart(0, "div", 29)(1, "label", 36)(2, "input", 37);
89
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_16_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnStartingStepChange(ctx_r1.CheckedValue($event))); });
110
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_16_Template(rf, ctx) { if (rf & 1) {
111
+ const _r7 = i0.ɵɵgetCurrentView();
112
+ i0.ɵɵelementStart(0, "div", 31)(1, "label", 38)(2, "input", 39);
113
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_16_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnStartingStepChange(ctx_r1.CheckedValue($event))); });
90
114
  i0.ɵɵelementEnd();
91
115
  i0.ɵɵtext(3, " Starting Step ");
92
116
  i0.ɵɵelementEnd()();
@@ -95,35 +119,35 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_
95
119
  i0.ɵɵadvance(2);
96
120
  i0.ɵɵproperty("checked", ctx_r1.Step.StartingStep);
97
121
  } }
98
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_17_Template(rf, ctx) { if (rf & 1) {
99
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
122
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_17_Template(rf, ctx) { if (rf & 1) {
123
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
100
124
  i0.ɵɵtext(2, "Starting Step");
101
125
  i0.ɵɵelementEnd();
102
- i0.ɵɵelementStart(3, "div", 26)(4, "span", 16);
126
+ i0.ɵɵelementStart(3, "div", 28)(4, "span", 16);
103
127
  i0.ɵɵtext(5, "Yes \u2014 this is the entry point");
104
128
  i0.ɵɵelementEnd()()();
105
129
  } }
106
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Template(rf, ctx) { if (rf & 1) {
107
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "label");
130
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Template(rf, ctx) { if (rf & 1) {
131
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "label");
108
132
  i0.ɵɵtext(3, "Name");
109
133
  i0.ɵɵelementEnd();
110
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_4_Template, 1, 1, "input", 25);
111
- i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_5_Template, 2, 1, "div", 26);
134
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_4_Template, 1, 1, "input", 27);
135
+ i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_5_Template, 2, 1, "div", 28);
112
136
  i0.ɵɵelementEnd();
113
- i0.ɵɵelementStart(6, "div", 24)(7, "label");
137
+ i0.ɵɵelementStart(6, "div", 26)(7, "label");
114
138
  i0.ɵɵtext(8, "Description");
115
139
  i0.ɵɵelementEnd();
116
- i0.ɵɵconditionalCreate(9, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_9_Template, 1, 1, "textarea", 27);
117
- i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_10_Template, 2, 1, "div", 26);
140
+ i0.ɵɵconditionalCreate(9, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_9_Template, 1, 1, "textarea", 29);
141
+ i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_10_Template, 2, 1, "div", 28);
118
142
  i0.ɵɵelementEnd();
119
- i0.ɵɵelementStart(11, "div", 24)(12, "label");
143
+ i0.ɵɵelementStart(11, "div", 26)(12, "label");
120
144
  i0.ɵɵtext(13, "Status");
121
145
  i0.ɵɵelementEnd();
122
- i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_14_Template, 7, 1, "select", 28);
123
- i0.ɵɵconditionalCreate(15, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_15_Template, 3, 3, "div", 26);
146
+ i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_14_Template, 7, 1, "select", 30);
147
+ i0.ɵɵconditionalCreate(15, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_15_Template, 3, 3, "div", 28);
124
148
  i0.ɵɵelementEnd();
125
- i0.ɵɵconditionalCreate(16, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_16_Template, 4, 1, "div", 29);
126
- i0.ɵɵconditionalCreate(17, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Conditional_17_Template, 6, 0, "div", 24);
149
+ i0.ɵɵconditionalCreate(16, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_16_Template, 4, 1, "div", 31);
150
+ i0.ɵɵconditionalCreate(17, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Conditional_17_Template, 6, 0, "div", 26);
127
151
  i0.ɵɵelementEnd();
128
152
  } if (rf & 2) {
129
153
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -144,30 +168,30 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Template(rf,
144
168
  i0.ɵɵadvance();
145
169
  i0.ɵɵconditional(ctx_r1.ReadOnly && ctx_r1.Step.StartingStep ? 17 : -1);
146
170
  } }
147
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_24_Template(rf, ctx) { if (rf & 1) {
171
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Template(rf, ctx) { if (rf & 1) {
148
172
  i0.ɵɵelementStart(0, "span");
149
173
  i0.ɵɵtext(1, "Configuration");
150
174
  i0.ɵɵelementEnd();
151
175
  } }
152
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
153
- const _r7 = i0.ɵɵgetCurrentView();
154
- i0.ɵɵelementStart(0, "select", 32);
155
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnLoopBodyTypeChange(ctx_r1.InputValue($event))); });
156
- i0.ɵɵelementStart(1, "option", 38);
176
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
177
+ const _r8 = i0.ɵɵgetCurrentView();
178
+ i0.ɵɵelementStart(0, "select", 34);
179
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnLoopBodyTypeChange(ctx_r1.InputValue($event))); });
180
+ i0.ɵɵelementStart(1, "option", 40);
157
181
  i0.ɵɵtext(2, "Action");
158
182
  i0.ɵɵelementEnd();
159
- i0.ɵɵelementStart(3, "option", 39);
183
+ i0.ɵɵelementStart(3, "option", 41);
160
184
  i0.ɵɵtext(4, "Prompt");
161
185
  i0.ɵɵelementEnd();
162
- i0.ɵɵelementStart(5, "option", 40);
186
+ i0.ɵɵelementStart(5, "option", 42);
163
187
  i0.ɵɵtext(6, "Sub-Agent");
164
188
  i0.ɵɵelementEnd()();
165
189
  } if (rf & 2) {
166
190
  const ctx_r1 = i0.ɵɵnextContext(4);
167
191
  i0.ɵɵproperty("value", ctx_r1.Step.LoopBodyType || "Action");
168
192
  } }
169
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
170
- i0.ɵɵelementStart(0, "div", 26);
193
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
194
+ i0.ɵɵelementStart(0, "div", 28);
171
195
  i0.ɵɵtext(1);
172
196
  i0.ɵɵelementEnd();
173
197
  } if (rf & 2) {
@@ -175,12 +199,12 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
175
199
  i0.ɵɵadvance();
176
200
  i0.ɵɵtextInterpolate1(" ", ctx_r1.Step.LoopBodyType || "Action", " ");
177
201
  } }
178
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
179
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
202
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
203
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
180
204
  i0.ɵɵtext(2, "Loop Body Type");
181
205
  i0.ɵɵelementEnd();
182
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Conditional_3_Template, 7, 1, "select", 28);
183
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Conditional_4_Template, 2, 1, "div", 26);
206
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Conditional_3_Template, 7, 1, "select", 30);
207
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Conditional_4_Template, 2, 1, "div", 28);
184
208
  i0.ɵɵelementEnd();
185
209
  } if (rf & 2) {
186
210
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -189,24 +213,24 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
189
213
  i0.ɵɵadvance();
190
214
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 4 : -1);
191
215
  } }
192
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
193
- i0.ɵɵelementStart(0, "option", 42);
216
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
217
+ i0.ɵɵelementStart(0, "option", 44);
194
218
  i0.ɵɵtext(1);
195
219
  i0.ɵɵelementEnd();
196
220
  } if (rf & 2) {
197
- const action_r9 = ctx.$implicit;
198
- i0.ɵɵproperty("value", action_r9.ID);
221
+ const action_r10 = ctx.$implicit;
222
+ i0.ɵɵproperty("value", action_r10.ID);
199
223
  i0.ɵɵadvance();
200
- i0.ɵɵtextInterpolate(action_r9.Name);
224
+ i0.ɵɵtextInterpolate(action_r10.Name);
201
225
  } }
202
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
203
- const _r8 = i0.ɵɵgetCurrentView();
204
- i0.ɵɵelementStart(0, "select", 32);
205
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnActionChange(ctx_r1.InputValue($event))); });
206
- i0.ɵɵelementStart(1, "option", 41);
226
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
227
+ const _r9 = i0.ɵɵgetCurrentView();
228
+ i0.ɵɵelementStart(0, "select", 34);
229
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnActionChange(ctx_r1.InputValue($event))); });
230
+ i0.ɵɵelementStart(1, "option", 43);
207
231
  i0.ɵɵtext(2, "-- Select Action --");
208
232
  i0.ɵɵelementEnd();
209
- i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_3_For_4_Template, 2, 2, "option", 42, i0.ɵɵrepeaterTrackByIdentity);
233
+ i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_3_For_4_Template, 2, 2, "option", 44, i0.ɵɵrepeaterTrackByIdentity);
210
234
  i0.ɵɵelementEnd();
211
235
  } if (rf & 2) {
212
236
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -214,8 +238,8 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
214
238
  i0.ɵɵadvance(3);
215
239
  i0.ɵɵrepeater(ctx_r1.Actions);
216
240
  } }
217
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
218
- i0.ɵɵelementStart(0, "div", 26);
241
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
242
+ i0.ɵɵelementStart(0, "div", 28);
219
243
  i0.ɵɵtext(1);
220
244
  i0.ɵɵelementEnd();
221
245
  } if (rf & 2) {
@@ -223,12 +247,12 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
223
247
  i0.ɵɵadvance();
224
248
  i0.ɵɵtextInterpolate(ctx_r1.selectedActionName);
225
249
  } }
226
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
227
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
250
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
251
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
228
252
  i0.ɵɵtext(2, "Action");
229
253
  i0.ɵɵelementEnd();
230
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_3_Template, 5, 1, "select", 28);
231
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Conditional_4_Template, 2, 1, "div", 26);
254
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_3_Template, 5, 1, "select", 30);
255
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Conditional_4_Template, 2, 1, "div", 28);
232
256
  i0.ɵɵelementEnd();
233
257
  } if (rf & 2) {
234
258
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -237,24 +261,24 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
237
261
  i0.ɵɵadvance();
238
262
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 4 : -1);
239
263
  } }
240
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelementStart(0, "option", 42);
264
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
265
+ i0.ɵɵelementStart(0, "option", 44);
242
266
  i0.ɵɵtext(1);
243
267
  i0.ɵɵelementEnd();
244
268
  } if (rf & 2) {
245
- const prompt_r11 = ctx.$implicit;
246
- i0.ɵɵproperty("value", prompt_r11.ID);
269
+ const prompt_r12 = ctx.$implicit;
270
+ i0.ɵɵproperty("value", prompt_r12.ID);
247
271
  i0.ɵɵadvance();
248
- i0.ɵɵtextInterpolate(prompt_r11.Name);
272
+ i0.ɵɵtextInterpolate(prompt_r12.Name);
249
273
  } }
250
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
251
- const _r10 = i0.ɵɵgetCurrentView();
252
- i0.ɵɵelementStart(0, "select", 32);
253
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnPromptChange(ctx_r1.InputValue($event))); });
254
- i0.ɵɵelementStart(1, "option", 41);
274
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
275
+ const _r11 = i0.ɵɵgetCurrentView();
276
+ i0.ɵɵelementStart(0, "select", 34);
277
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnPromptChange(ctx_r1.InputValue($event))); });
278
+ i0.ɵɵelementStart(1, "option", 43);
255
279
  i0.ɵɵtext(2, "-- Select Prompt --");
256
280
  i0.ɵɵelementEnd();
257
- i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_3_For_4_Template, 2, 2, "option", 42, i0.ɵɵrepeaterTrackByIdentity);
281
+ i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_3_For_4_Template, 2, 2, "option", 44, i0.ɵɵrepeaterTrackByIdentity);
258
282
  i0.ɵɵelementEnd();
259
283
  } if (rf & 2) {
260
284
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -262,8 +286,8 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
262
286
  i0.ɵɵadvance(3);
263
287
  i0.ɵɵrepeater(ctx_r1.Prompts);
264
288
  } }
265
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
266
- i0.ɵɵelementStart(0, "div", 26);
289
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_4_Template(rf, ctx) { if (rf & 1) {
290
+ i0.ɵɵelementStart(0, "div", 28);
267
291
  i0.ɵɵtext(1);
268
292
  i0.ɵɵelementEnd();
269
293
  } if (rf & 2) {
@@ -271,12 +295,12 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
271
295
  i0.ɵɵadvance();
272
296
  i0.ɵɵtextInterpolate(ctx_r1.selectedPromptName);
273
297
  } }
274
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
298
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Template(rf, ctx) { if (rf & 1) {
299
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
276
300
  i0.ɵɵtext(2, "Prompt");
277
301
  i0.ɵɵelementEnd();
278
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_3_Template, 5, 1, "select", 28);
279
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Conditional_4_Template, 2, 1, "div", 26);
302
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_3_Template, 5, 1, "select", 30);
303
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Conditional_4_Template, 2, 1, "div", 28);
280
304
  i0.ɵɵelementEnd();
281
305
  } if (rf & 2) {
282
306
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -285,24 +309,24 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
285
309
  i0.ɵɵadvance();
286
310
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 4 : -1);
287
311
  } }
288
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵelementStart(0, "option", 42);
312
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_3_For_4_Template(rf, ctx) { if (rf & 1) {
313
+ i0.ɵɵelementStart(0, "option", 44);
290
314
  i0.ɵɵtext(1);
291
315
  i0.ɵɵelementEnd();
292
316
  } if (rf & 2) {
293
- const agent_r13 = ctx.$implicit;
294
- i0.ɵɵproperty("value", agent_r13.ID);
317
+ const agent_r14 = ctx.$implicit;
318
+ i0.ɵɵproperty("value", agent_r14.ID);
295
319
  i0.ɵɵadvance();
296
- i0.ɵɵtextInterpolate(agent_r13.Name);
320
+ i0.ɵɵtextInterpolate(agent_r14.Name);
297
321
  } }
298
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
299
- const _r12 = i0.ɵɵgetCurrentView();
300
- i0.ɵɵelementStart(0, "select", 32);
301
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSubAgentChange(ctx_r1.InputValue($event))); });
302
- i0.ɵɵelementStart(1, "option", 41);
322
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
323
+ const _r13 = i0.ɵɵgetCurrentView();
324
+ i0.ɵɵelementStart(0, "select", 34);
325
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_3_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnSubAgentChange(ctx_r1.InputValue($event))); });
326
+ i0.ɵɵelementStart(1, "option", 43);
303
327
  i0.ɵɵtext(2, "-- Select Agent --");
304
328
  i0.ɵɵelementEnd();
305
- i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_3_For_4_Template, 2, 2, "option", 42, i0.ɵɵrepeaterTrackByIdentity);
329
+ i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_3_For_4_Template, 2, 2, "option", 44, i0.ɵɵrepeaterTrackByIdentity);
306
330
  i0.ɵɵelementEnd();
307
331
  } if (rf & 2) {
308
332
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -310,8 +334,8 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
310
334
  i0.ɵɵadvance(3);
311
335
  i0.ɵɵrepeater(ctx_r1.Agents);
312
336
  } }
313
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
314
- i0.ɵɵelementStart(0, "div", 26);
337
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_4_Template(rf, ctx) { if (rf & 1) {
338
+ i0.ɵɵelementStart(0, "div", 28);
315
339
  i0.ɵɵtext(1);
316
340
  i0.ɵɵelementEnd();
317
341
  } if (rf & 2) {
@@ -319,12 +343,12 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
319
343
  i0.ɵɵadvance();
320
344
  i0.ɵɵtextInterpolate(ctx_r1.selectedAgentName);
321
345
  } }
322
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Template(rf, ctx) { if (rf & 1) {
323
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
346
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Template(rf, ctx) { if (rf & 1) {
347
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
324
348
  i0.ɵɵtext(2, "Sub-Agent");
325
349
  i0.ɵɵelementEnd();
326
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_3_Template, 5, 1, "select", 28);
327
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Conditional_4_Template, 2, 1, "div", 26);
350
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_3_Template, 5, 1, "select", 30);
351
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Conditional_4_Template, 2, 1, "div", 28);
328
352
  i0.ɵɵelementEnd();
329
353
  } if (rf & 2) {
330
354
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -333,26 +357,493 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_
333
357
  i0.ɵɵadvance();
334
358
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 4 : -1);
335
359
  } }
336
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_5_Template(rf, ctx) { if (rf & 1) {
337
- const _r14 = i0.ɵɵgetCurrentView();
338
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
360
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_5_Template(rf, ctx) { if (rf & 1) {
361
+ const _r15 = i0.ɵɵgetCurrentView();
362
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
339
363
  i0.ɵɵtext(2, "Loop Configuration");
340
364
  i0.ɵɵelementEnd();
341
- i0.ɵɵelementStart(3, "mj-code-editor", 43);
342
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_5_Template_mj_code_editor_change_3_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigurationChange($event)); });
365
+ i0.ɵɵelementStart(3, "mj-code-editor", 45);
366
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_5_Template_mj_code_editor_change_3_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnConfigurationChange($event)); });
343
367
  i0.ɵɵelementEnd()();
344
368
  } if (rf & 2) {
345
369
  const ctx_r1 = i0.ɵɵnextContext(3);
346
370
  i0.ɵɵadvance(3);
347
371
  i0.ɵɵproperty("value", ctx_r1.FormatJsonDisplay(ctx_r1.Step.Configuration))("readonly", ctx_r1.ReadOnly)("lineWrapping", true);
348
372
  } }
349
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Template(rf, ctx) { if (rf & 1) {
350
- i0.ɵɵelementStart(0, "div", 23);
351
- i0.ɵɵconditionalCreate(1, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_1_Template, 5, 2, "div", 24);
352
- i0.ɵɵconditionalCreate(2, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_2_Template, 5, 2, "div", 24);
353
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_3_Template, 5, 2, "div", 24);
354
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_4_Template, 5, 2, "div", 24);
355
- i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Conditional_5_Template, 4, 3, "div", 24);
373
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
374
+ const _r16 = i0.ɵɵgetCurrentView();
375
+ i0.ɵɵelementStart(0, "input", 57);
376
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_5_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionKeyChange(ctx_r1.InputValue($event))); })("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_5_Template_input_change_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionKeyCommit()); })("keydown.enter", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_5_Template_input_keydown_enter_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionKeyCommit()); });
377
+ i0.ɵɵelementEnd();
378
+ } if (rf & 2) {
379
+ const ctx_r1 = i0.ɵɵnextContext(4);
380
+ i0.ɵɵclassProp("mj-agent-props-input--error", !!ctx_r1.DecisionKeyError);
381
+ i0.ɵɵproperty("value", ctx_r1.DecisionKeyText);
382
+ } }
383
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
384
+ i0.ɵɵelementStart(0, "div", 28);
385
+ i0.ɵɵtext(1);
386
+ i0.ɵɵelementEnd();
387
+ } if (rf & 2) {
388
+ const ctx_r1 = i0.ɵɵnextContext(4);
389
+ i0.ɵɵadvance();
390
+ i0.ɵɵtextInterpolate(ctx_r1.DecisionConfig.key);
391
+ } }
392
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
393
+ i0.ɵɵelementStart(0, "span", 48);
394
+ i0.ɵɵtext(1);
395
+ i0.ɵɵelementEnd();
396
+ } if (rf & 2) {
397
+ const ctx_r1 = i0.ɵɵnextContext(4);
398
+ i0.ɵɵadvance();
399
+ i0.ɵɵtextInterpolate(ctx_r1.DecisionKeyError);
400
+ } }
401
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_13_For_4_Template(rf, ctx) { if (rf & 1) {
402
+ i0.ɵɵelementStart(0, "option", 44);
403
+ i0.ɵɵtext(1);
404
+ i0.ɵɵelementEnd();
405
+ } if (rf & 2) {
406
+ const prompt_r18 = ctx.$implicit;
407
+ i0.ɵɵproperty("value", prompt_r18.ID);
408
+ i0.ɵɵadvance();
409
+ i0.ɵɵtextInterpolate(prompt_r18.Name);
410
+ } }
411
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_13_Template(rf, ctx) { if (rf & 1) {
412
+ const _r17 = i0.ɵɵgetCurrentView();
413
+ i0.ɵɵelementStart(0, "select", 34);
414
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_13_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionPromptChange(ctx_r1.InputValue($event))); });
415
+ i0.ɵɵelementStart(1, "option", 43);
416
+ i0.ɵɵtext(2, "Default Decision (system default)");
417
+ i0.ɵɵelementEnd();
418
+ i0.ɵɵrepeaterCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_13_For_4_Template, 2, 2, "option", 44, _forTrack1);
419
+ i0.ɵɵelementEnd();
420
+ } if (rf & 2) {
421
+ const ctx_r1 = i0.ɵɵnextContext(4);
422
+ i0.ɵɵproperty("value", ctx_r1.Step.PromptID || "");
423
+ i0.ɵɵadvance(3);
424
+ i0.ɵɵrepeater(ctx_r1.DecisionPrompts);
425
+ } }
426
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_14_Template(rf, ctx) { if (rf & 1) {
427
+ i0.ɵɵelementStart(0, "div", 28);
428
+ i0.ɵɵtext(1);
429
+ i0.ɵɵelementEnd();
430
+ } if (rf & 2) {
431
+ const ctx_r1 = i0.ɵɵnextContext(4);
432
+ i0.ɵɵadvance();
433
+ i0.ɵɵtextInterpolate(ctx_r1.SelectedDecisionPromptName);
434
+ } }
435
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_20_Template(rf, ctx) { if (rf & 1) {
436
+ const _r19 = i0.ɵɵgetCurrentView();
437
+ i0.ɵɵelementStart(0, "input", 58);
438
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_20_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionStateChange(ctx_r1.InputValue($event))); });
439
+ i0.ɵɵelementEnd();
440
+ } if (rf & 2) {
441
+ const ctx_r1 = i0.ɵɵnextContext(4);
442
+ i0.ɵɵproperty("value", ctx_r1.DecisionConfig.state ?? "");
443
+ } }
444
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_21_Template(rf, ctx) { if (rf & 1) {
445
+ i0.ɵɵelementStart(0, "div", 28);
446
+ i0.ɵɵtext(1);
447
+ i0.ɵɵelementEnd();
448
+ } if (rf & 2) {
449
+ const ctx_r1 = i0.ɵɵnextContext(4);
450
+ i0.ɵɵadvance();
451
+ i0.ɵɵtextInterpolate(ctx_r1.DecisionConfig.state || "payload");
452
+ } }
453
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_27_Template(rf, ctx) { if (rf & 1) {
454
+ const _r20 = i0.ɵɵgetCurrentView();
455
+ i0.ɵɵelementStart(0, "button", 59);
456
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_27_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnAddDecisionQuestion()); });
457
+ i0.ɵɵelement(1, "i", 60);
458
+ i0.ɵɵtext(2, " Add Question ");
459
+ i0.ɵɵelementEnd();
460
+ } }
461
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_8_Template(rf, ctx) { if (rf & 1) {
462
+ const _r21 = i0.ɵɵgetCurrentView();
463
+ i0.ɵɵelementStart(0, "button", 72);
464
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r21); const item_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRemoveDecisionQuestion(item_r22.key)); });
465
+ i0.ɵɵelement(1, "i", 73);
466
+ i0.ɵɵelementEnd();
467
+ } }
468
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_13_Template(rf, ctx) { if (rf & 1) {
469
+ const _r23 = i0.ɵɵgetCurrentView();
470
+ i0.ɵɵelementStart(0, "input", 74);
471
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_13_Template_input_change_0_listener($event) { i0.ɵɵrestoreView(_r23); const item_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionQuestionKeyChange(item_r22.key, ctx_r1.InputValue($event))); })("keydown.enter", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_13_Template_input_keydown_enter_0_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.BlurTarget($event)); });
472
+ i0.ɵɵelementEnd();
473
+ } if (rf & 2) {
474
+ const item_r22 = i0.ɵɵnextContext().$implicit;
475
+ const ctx_r1 = i0.ɵɵnextContext(4);
476
+ i0.ɵɵclassProp("mj-agent-props-input--error", !!ctx_r1.QuestionKeyError(item_r22.key));
477
+ i0.ɵɵproperty("value", item_r22.key);
478
+ } }
479
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_14_Template(rf, ctx) { if (rf & 1) {
480
+ i0.ɵɵelementStart(0, "div", 28);
481
+ i0.ɵɵtext(1);
482
+ i0.ɵɵelementEnd();
483
+ } if (rf & 2) {
484
+ const item_r22 = i0.ɵɵnextContext().$implicit;
485
+ i0.ɵɵadvance();
486
+ i0.ɵɵtextInterpolate(item_r22.key);
487
+ } }
488
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_15_Template(rf, ctx) { if (rf & 1) {
489
+ i0.ɵɵelementStart(0, "span", 48);
490
+ i0.ɵɵtext(1);
491
+ i0.ɵɵelementEnd();
492
+ } if (rf & 2) {
493
+ i0.ɵɵadvance();
494
+ i0.ɵɵtextInterpolate(ctx);
495
+ } }
496
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_19_Template(rf, ctx) { if (rf & 1) {
497
+ const _r24 = i0.ɵɵgetCurrentView();
498
+ i0.ɵɵelementStart(0, "select", 34);
499
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_19_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r24); const item_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionQuestionKindSelect(item_r22.key, ctx_r1.InputValue($event))); });
500
+ i0.ɵɵelementStart(1, "option", 75);
501
+ i0.ɵɵtext(2, "Likelihood (yes/no probability)");
502
+ i0.ɵɵelementEnd();
503
+ i0.ɵɵelementStart(3, "option", 76);
504
+ i0.ɵɵtext(4, "Choice (pick one option)");
505
+ i0.ɵɵelementEnd();
506
+ i0.ɵɵelementStart(5, "option", 77);
507
+ i0.ɵɵtext(6, "Score (ordered rubric)");
508
+ i0.ɵɵelementEnd()();
509
+ } if (rf & 2) {
510
+ const item_r22 = i0.ɵɵnextContext().$implicit;
511
+ i0.ɵɵproperty("value", item_r22.question.kind);
512
+ } }
513
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_20_Template(rf, ctx) { if (rf & 1) {
514
+ i0.ɵɵelementStart(0, "div", 28);
515
+ i0.ɵɵtext(1);
516
+ i0.ɵɵelementEnd();
517
+ } if (rf & 2) {
518
+ const item_r22 = i0.ɵɵnextContext().$implicit;
519
+ i0.ɵɵadvance();
520
+ i0.ɵɵtextInterpolate(item_r22.question.kind);
521
+ } }
522
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_26_Template(rf, ctx) { if (rf & 1) {
523
+ const _r25 = i0.ɵɵgetCurrentView();
524
+ i0.ɵɵelementStart(0, "textarea", 78);
525
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_26_Template_textarea_input_0_listener($event) { i0.ɵɵrestoreView(_r25); const item_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionQuestionInstructionsChange(item_r22.key, ctx_r1.InputValue($event))); });
526
+ i0.ɵɵelementEnd();
527
+ } if (rf & 2) {
528
+ const item_r22 = i0.ɵɵnextContext().$implicit;
529
+ i0.ɵɵproperty("value", item_r22.question.instructions || "");
530
+ } }
531
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_27_Template(rf, ctx) { if (rf & 1) {
532
+ i0.ɵɵelementStart(0, "div", 28);
533
+ i0.ɵɵtext(1);
534
+ i0.ɵɵelementEnd();
535
+ } if (rf & 2) {
536
+ const item_r22 = i0.ɵɵnextContext().$implicit;
537
+ i0.ɵɵadvance();
538
+ i0.ɵɵtextInterpolate(item_r22.question.instructions || "\u2014");
539
+ } }
540
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_31_Template(rf, ctx) { if (rf & 1) {
541
+ const _r26 = i0.ɵɵgetCurrentView();
542
+ i0.ɵɵelementStart(0, "input", 79);
543
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_31_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r26); const item_r22 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnDecisionQuestionMinConfidenceChange(item_r22.key, ctx_r1.InputValue($event))); });
544
+ i0.ɵɵelementEnd();
545
+ } if (rf & 2) {
546
+ const item_r22 = i0.ɵɵnextContext().$implicit;
547
+ i0.ɵɵproperty("value", item_r22.question.minConfidence ?? "");
548
+ } }
549
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_32_Template(rf, ctx) { if (rf & 1) {
550
+ i0.ɵɵelementStart(0, "div", 28);
551
+ i0.ɵɵtext(1);
552
+ i0.ɵɵelementEnd();
553
+ } if (rf & 2) {
554
+ const item_r22 = i0.ɵɵnextContext().$implicit;
555
+ i0.ɵɵadvance();
556
+ i0.ɵɵtextInterpolate(item_r22.question.minConfidence ?? "None");
557
+ } }
558
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_Conditional_4_Template(rf, ctx) { if (rf & 1) {
559
+ const _r27 = i0.ɵɵgetCurrentView();
560
+ i0.ɵɵelementStart(0, "button", 84);
561
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnAddChoiceOption(item_r22.key)); });
562
+ i0.ɵɵelement(1, "i", 60);
563
+ i0.ɵɵtext(2, " Add Option ");
564
+ i0.ɵɵelementEnd();
565
+ } }
566
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
567
+ const _r30 = i0.ɵɵgetCurrentView();
568
+ i0.ɵɵelementStart(0, "button", 89);
569
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r30); const $index_r29 = i0.ɵɵnextContext().$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRemoveChoiceOption(item_r22.key, $index_r29)); });
570
+ i0.ɵɵelement(1, "i", 6);
571
+ i0.ɵɵelementEnd();
572
+ } }
573
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
574
+ i0.ɵɵelementStart(0, "span", 48);
575
+ i0.ɵɵtext(1);
576
+ i0.ɵɵelementEnd();
577
+ } if (rf & 2) {
578
+ i0.ɵɵadvance();
579
+ i0.ɵɵtextInterpolate(ctx);
580
+ } }
581
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Template(rf, ctx) { if (rf & 1) {
582
+ const _r28 = i0.ɵɵgetCurrentView();
583
+ i0.ɵɵelementStart(0, "div", 85)(1, "input", 86);
584
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Template_input_change_1_listener($event) { const $index_r29 = i0.ɵɵrestoreView(_r28).$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChoiceOptionValueChange(item_r22.key, $index_r29, ctx_r1.InputValue($event))); })("keydown.enter", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Template_input_keydown_enter_1_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.BlurTarget($event)); });
585
+ i0.ɵɵelementEnd();
586
+ i0.ɵɵelementStart(2, "input", 87);
587
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Template_input_input_2_listener($event) { const $index_r29 = i0.ɵɵrestoreView(_r28).$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChoiceOptionChange(item_r22.key, $index_r29, "description", ctx_r1.InputValue($event))); });
588
+ i0.ɵɵelementEnd();
589
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Conditional_3_Template, 2, 0, "button", 88);
590
+ i0.ɵɵelementEnd();
591
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Conditional_4_Template, 2, 1, "span", 48);
592
+ } if (rf & 2) {
593
+ let tmp_30_0;
594
+ const opt_r31 = ctx.$implicit;
595
+ const $index_r29 = ctx.$index;
596
+ const item_r22 = i0.ɵɵnextContext(2).$implicit;
597
+ const ctx_r1 = i0.ɵɵnextContext(4);
598
+ i0.ɵɵadvance();
599
+ i0.ɵɵclassProp("mj-agent-props-input--error", !!ctx_r1.OptionValueError(item_r22.key, $index_r29));
600
+ i0.ɵɵproperty("value", opt_r31.value)("readonly", ctx_r1.ReadOnly);
601
+ i0.ɵɵadvance();
602
+ i0.ɵɵproperty("value", opt_r31.description)("readonly", ctx_r1.ReadOnly);
603
+ i0.ɵɵadvance();
604
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 3 : -1);
605
+ i0.ɵɵadvance();
606
+ i0.ɵɵconditional((tmp_30_0 = ctx_r1.OptionValueError(item_r22.key, $index_r29)) ? 4 : -1, tmp_30_0);
607
+ } }
608
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_Template(rf, ctx) { if (rf & 1) {
609
+ i0.ɵɵelementStart(0, "div", 70)(1, "div", 80)(2, "label");
610
+ i0.ɵɵtext(3, "Options (2..255)");
611
+ i0.ɵɵelementEnd();
612
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_Conditional_4_Template, 3, 0, "button", 81);
613
+ i0.ɵɵelementEnd();
614
+ i0.ɵɵrepeaterCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_For_6_Template, 5, 8, null, null, i0.ɵɵrepeaterTrackByIndex);
615
+ i0.ɵɵelementStart(7, "div", 82);
616
+ i0.ɵɵelement(8, "i", 83);
617
+ i0.ɵɵelementStart(9, "span");
618
+ i0.ɵɵtext(10);
619
+ i0.ɵɵelementEnd()()();
620
+ } if (rf & 2) {
621
+ const item_r22 = i0.ɵɵnextContext().$implicit;
622
+ const ctx_r1 = i0.ɵɵnextContext(4);
623
+ i0.ɵɵadvance(4);
624
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 4 : -1);
625
+ i0.ɵɵadvance();
626
+ i0.ɵɵrepeater(ctx_r1.ChoiceOptionsOf(item_r22.question));
627
+ i0.ɵɵadvance(5);
628
+ i0.ɵɵtextInterpolate(ctx_r1.GetChoiceCoverageHint(item_r22.key, ctx_r1.ChoiceOptionsOf(item_r22.question)));
629
+ } }
630
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
631
+ const _r32 = i0.ɵɵgetCurrentView();
632
+ i0.ɵɵelementStart(0, "button", 84);
633
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r32); const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnAddScoreLevel(item_r22.key)); });
634
+ i0.ɵɵelement(1, "i", 60);
635
+ i0.ɵɵtext(2, " Add Level ");
636
+ i0.ɵɵelementEnd();
637
+ } }
638
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
639
+ const _r35 = i0.ɵɵgetCurrentView();
640
+ i0.ɵɵelementStart(0, "button", 93);
641
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r35); const $index_r34 = i0.ɵɵnextContext().$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnMoveScoreLevel(item_r22.key, $index_r34, "up")); });
642
+ i0.ɵɵelement(1, "i", 94);
643
+ i0.ɵɵelementEnd();
644
+ i0.ɵɵelementStart(2, "button", 95);
645
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Conditional_4_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r35); const $index_r34 = i0.ɵɵnextContext().$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnMoveScoreLevel(item_r22.key, $index_r34, "down")); });
646
+ i0.ɵɵelement(3, "i", 96);
647
+ i0.ɵɵelementEnd();
648
+ i0.ɵɵelementStart(4, "button", 97);
649
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Conditional_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r35); const $index_r34 = i0.ɵɵnextContext().$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRemoveScoreLevel(item_r22.key, $index_r34)); });
650
+ i0.ɵɵelement(5, "i", 6);
651
+ i0.ɵɵelementEnd();
652
+ } if (rf & 2) {
653
+ const ctx_r35 = i0.ɵɵnextContext();
654
+ const ɵ$index_442_r37 = ctx_r35.$index;
655
+ const ɵ$count_442_r38 = ctx_r35.$count;
656
+ i0.ɵɵproperty("disabled", ɵ$index_442_r37 === 0);
657
+ i0.ɵɵadvance(2);
658
+ i0.ɵɵproperty("disabled", ɵ$index_442_r37 === ɵ$count_442_r38 - 1);
659
+ } }
660
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Template(rf, ctx) { if (rf & 1) {
661
+ const _r33 = i0.ɵɵgetCurrentView();
662
+ i0.ɵɵelementStart(0, "div", 90)(1, "span", 91);
663
+ i0.ɵɵtext(2);
664
+ i0.ɵɵelementEnd();
665
+ i0.ɵɵelementStart(3, "input", 92);
666
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Template_input_input_3_listener($event) { const $index_r34 = i0.ɵɵrestoreView(_r33).$index; const item_r22 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnScoreLevelChange(item_r22.key, $index_r34, ctx_r1.InputValue($event))); });
667
+ i0.ɵɵelementEnd();
668
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Conditional_4_Template, 6, 2);
669
+ i0.ɵɵelementEnd();
670
+ } if (rf & 2) {
671
+ const level_r39 = ctx.$implicit;
672
+ const $index_r34 = ctx.$index;
673
+ const ctx_r1 = i0.ɵɵnextContext(6);
674
+ i0.ɵɵadvance(2);
675
+ i0.ɵɵtextInterpolate($index_r34);
676
+ i0.ɵɵadvance();
677
+ i0.ɵɵproperty("value", level_r39)("readonly", ctx_r1.ReadOnly);
678
+ i0.ɵɵadvance();
679
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 4 : -1);
680
+ } }
681
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_Template(rf, ctx) { if (rf & 1) {
682
+ i0.ɵɵelementStart(0, "div", 71)(1, "div", 80)(2, "label");
683
+ i0.ɵɵtext(3, "Levels (2..10, lowest first)");
684
+ i0.ɵɵelementEnd();
685
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_Conditional_4_Template, 3, 0, "button", 81);
686
+ i0.ɵɵelementEnd();
687
+ i0.ɵɵrepeaterCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_For_6_Template, 5, 4, "div", 90, i0.ɵɵrepeaterTrackByIndex);
688
+ i0.ɵɵelementEnd();
689
+ } if (rf & 2) {
690
+ const item_r22 = i0.ɵɵnextContext().$implicit;
691
+ const ctx_r1 = i0.ɵɵnextContext(4);
692
+ i0.ɵɵadvance(4);
693
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 4 : -1);
694
+ i0.ɵɵadvance();
695
+ i0.ɵɵrepeater(ctx_r1.ScoreLevelsOf(item_r22.question));
696
+ } }
697
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Template(rf, ctx) { if (rf & 1) {
698
+ i0.ɵɵelementStart(0, "div", 55)(1, "div", 61)(2, "span", 62);
699
+ i0.ɵɵelement(3, "i", 63);
700
+ i0.ɵɵelementStart(4, "code");
701
+ i0.ɵɵtext(5);
702
+ i0.ɵɵelementEnd()();
703
+ i0.ɵɵelementStart(6, "span", 64);
704
+ i0.ɵɵtext(7);
705
+ i0.ɵɵelementEnd();
706
+ i0.ɵɵconditionalCreate(8, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_8_Template, 2, 0, "button", 65);
707
+ i0.ɵɵelementEnd();
708
+ i0.ɵɵelementStart(9, "div", 66)(10, "div", 26)(11, "label");
709
+ i0.ɵɵtext(12, "Question Key");
710
+ i0.ɵɵelementEnd();
711
+ i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_13_Template, 1, 3, "input", 67);
712
+ i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_14_Template, 2, 1, "div", 28);
713
+ i0.ɵɵconditionalCreate(15, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_15_Template, 2, 1, "span", 48);
714
+ i0.ɵɵelementEnd();
715
+ i0.ɵɵelementStart(16, "div", 26)(17, "label");
716
+ i0.ɵɵtext(18, "Kind");
717
+ i0.ɵɵelementEnd();
718
+ i0.ɵɵconditionalCreate(19, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_19_Template, 7, 1, "select", 30);
719
+ i0.ɵɵconditionalCreate(20, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_20_Template, 2, 1, "div", 28);
720
+ i0.ɵɵelementEnd();
721
+ i0.ɵɵelementStart(21, "div", 26)(22, "label");
722
+ i0.ɵɵtext(23, "Instructions ");
723
+ i0.ɵɵelementStart(24, "span", 46);
724
+ i0.ɵɵtext(25, "*");
725
+ i0.ɵɵelementEnd()();
726
+ i0.ɵɵconditionalCreate(26, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_26_Template, 1, 1, "textarea", 68);
727
+ i0.ɵɵconditionalCreate(27, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_27_Template, 2, 1, "div", 28);
728
+ i0.ɵɵelementEnd();
729
+ i0.ɵɵelementStart(28, "div", 26)(29, "label");
730
+ i0.ɵɵtext(30, "Min Confidence (optional, 0..1)");
731
+ i0.ɵɵelementEnd();
732
+ i0.ɵɵconditionalCreate(31, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_31_Template, 1, 1, "input", 69);
733
+ i0.ɵɵconditionalCreate(32, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_32_Template, 2, 1, "div", 28);
734
+ i0.ɵɵelementEnd();
735
+ i0.ɵɵconditionalCreate(33, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_33_Template, 11, 2, "div", 70);
736
+ i0.ɵɵconditionalCreate(34, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Conditional_34_Template, 7, 1, "div", 71);
737
+ i0.ɵɵelementEnd()();
738
+ } if (rf & 2) {
739
+ let tmp_18_0;
740
+ const item_r22 = ctx.$implicit;
741
+ const ctx_r1 = i0.ɵɵnextContext(4);
742
+ i0.ɵɵadvance(5);
743
+ i0.ɵɵtextInterpolate(item_r22.key);
744
+ i0.ɵɵadvance(2);
745
+ i0.ɵɵtextInterpolate(item_r22.question.kind);
746
+ i0.ɵɵadvance();
747
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 8 : -1);
748
+ i0.ɵɵadvance(5);
749
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 13 : -1);
750
+ i0.ɵɵadvance();
751
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 14 : -1);
752
+ i0.ɵɵadvance();
753
+ i0.ɵɵconditional((tmp_18_0 = ctx_r1.QuestionKeyError(item_r22.key)) ? 15 : -1, tmp_18_0);
754
+ i0.ɵɵadvance(4);
755
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 19 : -1);
756
+ i0.ɵɵadvance();
757
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 20 : -1);
758
+ i0.ɵɵadvance(6);
759
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 26 : -1);
760
+ i0.ɵɵadvance();
761
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 27 : -1);
762
+ i0.ɵɵadvance(4);
763
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 31 : -1);
764
+ i0.ɵɵadvance();
765
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 32 : -1);
766
+ i0.ɵɵadvance();
767
+ i0.ɵɵconditional(item_r22.question.kind === "Choice" ? 33 : -1);
768
+ i0.ɵɵadvance();
769
+ i0.ɵɵconditional(item_r22.question.kind === "Score" ? 34 : -1);
770
+ } }
771
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_31_Template(rf, ctx) { if (rf & 1) {
772
+ i0.ɵɵelement(0, "mj-alert", 56);
773
+ } if (rf & 2) {
774
+ const ctx_r1 = i0.ɵɵnextContext(4);
775
+ i0.ɵɵproperty("Message", ctx_r1.DecisionValidationError);
776
+ } }
777
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
778
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
779
+ i0.ɵɵtext(2, "Key ");
780
+ i0.ɵɵelementStart(3, "span", 46);
781
+ i0.ɵɵtext(4, "*");
782
+ i0.ɵɵelementEnd()();
783
+ i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_5_Template, 1, 3, "input", 47);
784
+ i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_6_Template, 2, 1, "div", 28);
785
+ i0.ɵɵconditionalCreate(7, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_7_Template, 2, 1, "span", 48);
786
+ i0.ɵɵelementStart(8, "span", 49);
787
+ i0.ɵɵtext(9, "Names the step in path conditions: decisions.<key>.<question>");
788
+ i0.ɵɵelementEnd()();
789
+ i0.ɵɵelementStart(10, "div", 26)(11, "label");
790
+ i0.ɵɵtext(12, "Decision Prompt");
791
+ i0.ɵɵelementEnd();
792
+ i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_13_Template, 5, 1, "select", 30);
793
+ i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_14_Template, 2, 1, "div", 28);
794
+ i0.ɵɵelementStart(15, "span", 49);
795
+ i0.ɵɵtext(16, "Optional prompt bound to the Decision model type.");
796
+ i0.ɵɵelementEnd()();
797
+ i0.ɵɵelementStart(17, "div", 26)(18, "label");
798
+ i0.ɵɵtext(19, "State");
799
+ i0.ɵɵelementEnd();
800
+ i0.ɵɵconditionalCreate(20, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_20_Template, 1, 1, "input", 50);
801
+ i0.ɵɵconditionalCreate(21, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_21_Template, 2, 1, "div", 28);
802
+ i0.ɵɵelementStart(22, "span", 49);
803
+ i0.ɵɵtext(23, "What the questions are about: \"payload\" (default) or \"payload.<path>\"");
804
+ i0.ɵɵelementEnd()();
805
+ i0.ɵɵelementStart(24, "div", 51)(25, "label", 52);
806
+ i0.ɵɵtext(26);
807
+ i0.ɵɵelementEnd();
808
+ i0.ɵɵconditionalCreate(27, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_27_Template, 3, 0, "button", 53);
809
+ i0.ɵɵelementEnd();
810
+ i0.ɵɵelementStart(28, "div", 54);
811
+ i0.ɵɵrepeaterCreate(29, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_For_30_Template, 35, 14, "div", 55, _forTrack0);
812
+ i0.ɵɵelementEnd();
813
+ i0.ɵɵconditionalCreate(31, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Conditional_31_Template, 1, 1, "mj-alert", 56);
814
+ } if (rf & 2) {
815
+ const ctx_r1 = i0.ɵɵnextContext(3);
816
+ i0.ɵɵadvance(5);
817
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 5 : -1);
818
+ i0.ɵɵadvance();
819
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 6 : -1);
820
+ i0.ɵɵadvance();
821
+ i0.ɵɵconditional(ctx_r1.DecisionKeyError ? 7 : -1);
822
+ i0.ɵɵadvance(6);
823
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 13 : -1);
824
+ i0.ɵɵadvance();
825
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 14 : -1);
826
+ i0.ɵɵadvance(6);
827
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 20 : -1);
828
+ i0.ɵɵadvance();
829
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 21 : -1);
830
+ i0.ɵɵadvance(5);
831
+ i0.ɵɵtextInterpolate1(" Questions (", ctx_r1.DecisionQuestionsList.length, ") ");
832
+ i0.ɵɵadvance();
833
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 27 : -1);
834
+ i0.ɵɵadvance(2);
835
+ i0.ɵɵrepeater(ctx_r1.DecisionQuestionsList);
836
+ i0.ɵɵadvance(2);
837
+ i0.ɵɵconditional(ctx_r1.DecisionValidationError ? 31 : -1);
838
+ } }
839
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Template(rf, ctx) { if (rf & 1) {
840
+ i0.ɵɵelementStart(0, "div", 25);
841
+ i0.ɵɵconditionalCreate(1, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_1_Template, 5, 2, "div", 26);
842
+ i0.ɵɵconditionalCreate(2, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_2_Template, 5, 2, "div", 26);
843
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_3_Template, 5, 2, "div", 26);
844
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_4_Template, 5, 2, "div", 26);
845
+ i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_5_Template, 4, 3, "div", 26);
846
+ i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Conditional_6_Template, 32, 10);
356
847
  i0.ɵɵelementEnd();
357
848
  } if (rf & 2) {
358
849
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -366,25 +857,27 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Template(rf,
366
857
  i0.ɵɵconditional(ctx_r1.showAgentPicker ? 4 : -1);
367
858
  i0.ɵɵadvance();
368
859
  i0.ɵɵconditional(ctx_r1.showLoopConfig ? 5 : -1);
860
+ i0.ɵɵadvance();
861
+ i0.ɵɵconditional(ctx_r1.ShowDecisionConfig ? 6 : -1);
369
862
  } }
370
- function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_1_Template(rf, ctx) { if (rf & 1) {
863
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_1_Template(rf, ctx) { if (rf & 1) {
371
864
  i0.ɵɵelementStart(0, "span");
372
865
  i0.ɵɵtext(1, "Data Mapping");
373
866
  i0.ɵɵelementEnd();
374
867
  } }
375
- function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_2_Template(rf, ctx) { if (rf & 1) {
376
- const _r16 = i0.ɵɵgetCurrentView();
377
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "label");
868
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_2_Template(rf, ctx) { if (rf & 1) {
869
+ const _r41 = i0.ɵɵgetCurrentView();
870
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "label");
378
871
  i0.ɵɵtext(3, "Input Mapping");
379
872
  i0.ɵɵelementEnd();
380
- i0.ɵɵelementStart(4, "mj-code-editor", 44);
381
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_2_Template_mj_code_editor_change_4_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnInputMappingChange($event)); });
873
+ i0.ɵɵelementStart(4, "mj-code-editor", 98);
874
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_2_Template_mj_code_editor_change_4_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnInputMappingChange($event)); });
382
875
  i0.ɵɵelementEnd()();
383
- i0.ɵɵelementStart(5, "div", 24)(6, "label");
876
+ i0.ɵɵelementStart(5, "div", 26)(6, "label");
384
877
  i0.ɵɵtext(7, "Output Mapping");
385
878
  i0.ɵɵelementEnd();
386
- i0.ɵɵelementStart(8, "mj-code-editor", 45);
387
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_2_Template_mj_code_editor_change_8_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnOutputMappingChange($event)); });
879
+ i0.ɵɵelementStart(8, "mj-code-editor", 99);
880
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_2_Template_mj_code_editor_change_8_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnOutputMappingChange($event)); });
388
881
  i0.ɵɵelementEnd()()();
389
882
  } if (rf & 2) {
390
883
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -393,40 +886,40 @@ function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_
393
886
  i0.ɵɵadvance(4);
394
887
  i0.ɵɵproperty("value", ctx_r1.FormatJsonDisplay(ctx_r1.Step.ActionOutputMapping))("readonly", ctx_r1.ReadOnly)("lineWrapping", true);
395
888
  } }
396
- function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
397
- const _r15 = i0.ɵɵgetCurrentView();
398
- i0.ɵɵelementStart(0, "mj-accordion-panel", 18);
399
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Conditional_26_Template_mj_accordion_panel_ExpandedChange_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleSection("mapping")); });
400
- i0.ɵɵtemplate(1, AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_1_Template, 2, 0, "ng-template", 19)(2, AgentPropertiesPanelComponent_Conditional_2_Conditional_26_ng_template_2_Template, 9, 6, "ng-template", 20);
889
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
890
+ const _r40 = i0.ɵɵgetCurrentView();
891
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 19);
892
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Conditional_27_Template_mj_accordion_panel_ExpandedChange_0_listener() { i0.ɵɵrestoreView(_r40); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleSection("mapping")); });
893
+ i0.ɵɵtemplate(1, AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_1_Template, 2, 0, "ng-template", 20)(2, AgentPropertiesPanelComponent_Conditional_2_Conditional_27_ng_template_2_Template, 9, 6, "ng-template", 21);
401
894
  i0.ɵɵelementEnd();
402
895
  } if (rf & 2) {
403
896
  const ctx_r1 = i0.ɵɵnextContext(2);
404
897
  i0.ɵɵproperty("FlushBody", true)("Expanded", !ctx_r1.IsSectionCollapsed("mapping"));
405
898
  } }
406
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_28_Template(rf, ctx) { if (rf & 1) {
899
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Template(rf, ctx) { if (rf & 1) {
407
900
  i0.ɵɵelementStart(0, "span");
408
901
  i0.ɵɵtext(1, "Error Handling");
409
902
  i0.ɵɵelementEnd();
410
903
  } }
411
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_4_Template(rf, ctx) { if (rf & 1) {
412
- const _r17 = i0.ɵɵgetCurrentView();
413
- i0.ɵɵelementStart(0, "select", 32);
414
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_4_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnErrorBehaviorChange(ctx_r1.InputValue($event))); });
415
- i0.ɵɵelementStart(1, "option", 47);
904
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_4_Template(rf, ctx) { if (rf & 1) {
905
+ const _r42 = i0.ɵɵgetCurrentView();
906
+ i0.ɵɵelementStart(0, "select", 34);
907
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_4_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnErrorBehaviorChange(ctx_r1.InputValue($event))); });
908
+ i0.ɵɵelementStart(1, "option", 101);
416
909
  i0.ɵɵtext(2, "Fail (stop flow)");
417
910
  i0.ɵɵelementEnd();
418
- i0.ɵɵelementStart(3, "option", 48);
911
+ i0.ɵɵelementStart(3, "option", 102);
419
912
  i0.ɵɵtext(4, "Continue (ignore error)");
420
913
  i0.ɵɵelementEnd();
421
- i0.ɵɵelementStart(5, "option", 49);
914
+ i0.ɵɵelementStart(5, "option", 103);
422
915
  i0.ɵɵtext(6, "Retry");
423
916
  i0.ɵɵelementEnd()();
424
917
  } if (rf & 2) {
425
918
  const ctx_r1 = i0.ɵɵnextContext(3);
426
919
  i0.ɵɵproperty("value", ctx_r1.Step.OnErrorBehavior);
427
920
  } }
428
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_5_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelementStart(0, "div", 26);
921
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_5_Template(rf, ctx) { if (rf & 1) {
922
+ i0.ɵɵelementStart(0, "div", 28);
430
923
  i0.ɵɵtext(1);
431
924
  i0.ɵɵelementEnd();
432
925
  } if (rf & 2) {
@@ -434,17 +927,17 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_
434
927
  i0.ɵɵadvance();
435
928
  i0.ɵɵtextInterpolate1(" ", ctx_r1.Step.OnErrorBehavior === "fail" ? "Fail (stop flow)" : ctx_r1.Step.OnErrorBehavior === "continue" ? "Continue (ignore error)" : "Retry", " ");
436
929
  } }
437
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
438
- const _r18 = i0.ɵɵgetCurrentView();
439
- i0.ɵɵelementStart(0, "input", 51);
440
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Conditional_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRetryCountChange(ctx_r1.NumericValue($event))); });
930
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Conditional_3_Template(rf, ctx) { if (rf & 1) {
931
+ const _r43 = i0.ɵɵgetCurrentView();
932
+ i0.ɵɵelementStart(0, "input", 105);
933
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Conditional_3_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRetryCountChange(ctx_r1.NumericValue($event))); });
441
934
  i0.ɵɵelementEnd();
442
935
  } if (rf & 2) {
443
936
  const ctx_r1 = i0.ɵɵnextContext(4);
444
937
  i0.ɵɵproperty("value", ctx_r1.Step.RetryCount);
445
938
  } }
446
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
447
- i0.ɵɵelementStart(0, "div", 26);
939
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
940
+ i0.ɵɵelementStart(0, "div", 28);
448
941
  i0.ɵɵtext(1);
449
942
  i0.ɵɵelementEnd();
450
943
  } if (rf & 2) {
@@ -452,12 +945,12 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_
452
945
  i0.ɵɵadvance();
453
946
  i0.ɵɵtextInterpolate(ctx_r1.Step.RetryCount);
454
947
  } }
455
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Template(rf, ctx) { if (rf & 1) {
456
- i0.ɵɵelementStart(0, "div", 24)(1, "label");
948
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Template(rf, ctx) { if (rf & 1) {
949
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
457
950
  i0.ɵɵtext(2, "Retry Count");
458
951
  i0.ɵɵelementEnd();
459
- i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Conditional_3_Template, 1, 1, "input", 50);
460
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Conditional_4_Template, 2, 1, "div", 26);
952
+ i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Conditional_3_Template, 1, 1, "input", 104);
953
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Conditional_4_Template, 2, 1, "div", 28);
461
954
  i0.ɵɵelementEnd();
462
955
  } if (rf & 2) {
463
956
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -466,17 +959,17 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_
466
959
  i0.ɵɵadvance();
467
960
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 4 : -1);
468
961
  } }
469
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_10_Template(rf, ctx) { if (rf & 1) {
470
- const _r19 = i0.ɵɵgetCurrentView();
471
- i0.ɵɵelementStart(0, "input", 52);
472
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_10_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnTimeoutChange(ctx_r1.NumericValue($event))); });
962
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_10_Template(rf, ctx) { if (rf & 1) {
963
+ const _r44 = i0.ɵɵgetCurrentView();
964
+ i0.ɵɵelementStart(0, "input", 106);
965
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_10_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r44); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnTimeoutChange(ctx_r1.NumericValue($event))); });
473
966
  i0.ɵɵelementEnd();
474
967
  } if (rf & 2) {
475
968
  const ctx_r1 = i0.ɵɵnextContext(3);
476
969
  i0.ɵɵproperty("value", ctx_r1.Step.TimeoutSeconds);
477
970
  } }
478
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_11_Template(rf, ctx) { if (rf & 1) {
479
- i0.ɵɵelementStart(0, "div", 26);
971
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_11_Template(rf, ctx) { if (rf & 1) {
972
+ i0.ɵɵelementStart(0, "div", 28);
480
973
  i0.ɵɵtext(1);
481
974
  i0.ɵɵelementEnd();
482
975
  } if (rf & 2) {
@@ -484,19 +977,19 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_
484
977
  i0.ɵɵadvance();
485
978
  i0.ɵɵtextInterpolate1("", ctx_r1.Step.TimeoutSeconds, "s");
486
979
  } }
487
- function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Template(rf, ctx) { if (rf & 1) {
488
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "label");
980
+ function AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Template(rf, ctx) { if (rf & 1) {
981
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "label");
489
982
  i0.ɵɵtext(3, "On Error");
490
983
  i0.ɵɵelementEnd();
491
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_4_Template, 7, 1, "select", 28);
492
- i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_5_Template, 2, 1, "div", 26);
984
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_4_Template, 7, 1, "select", 30);
985
+ i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_5_Template, 2, 1, "div", 28);
493
986
  i0.ɵɵelementEnd();
494
- i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_6_Template, 5, 2, "div", 24);
495
- i0.ɵɵelementStart(7, "div", 24)(8, "label");
987
+ i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_6_Template, 5, 2, "div", 26);
988
+ i0.ɵɵelementStart(7, "div", 26)(8, "label");
496
989
  i0.ɵɵtext(9, "Timeout (seconds)");
497
990
  i0.ɵɵelementEnd();
498
- i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_10_Template, 1, 1, "input", 46);
499
- i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Conditional_11_Template, 2, 1, "div", 26);
991
+ i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_10_Template, 1, 1, "input", 100);
992
+ i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Conditional_11_Template, 2, 1, "div", 28);
500
993
  i0.ɵɵelementEnd()();
501
994
  } if (rf & 2) {
502
995
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -511,11 +1004,11 @@ function AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Template(rf,
511
1004
  i0.ɵɵadvance();
512
1005
  i0.ɵɵconditional(ctx_r1.ReadOnly ? 11 : -1);
513
1006
  } }
514
- function AgentPropertiesPanelComponent_Conditional_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
515
- const _r20 = i0.ɵɵgetCurrentView();
516
- i0.ɵɵelementStart(0, "div", 22)(1, "button", 53);
517
- i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_Conditional_30_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDeleteStep()); });
518
- i0.ɵɵelement(2, "i", 54);
1007
+ function AgentPropertiesPanelComponent_Conditional_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
1008
+ const _r45 = i0.ɵɵgetCurrentView();
1009
+ i0.ɵɵelementStart(0, "div", 23)(1, "button", 107);
1010
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_2_Conditional_31_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r45); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDeleteStep()); });
1011
+ i0.ɵɵelement(2, "i", 108);
519
1012
  i0.ɵɵtext(3, " Delete Step ");
520
1013
  i0.ɵɵelementEnd()();
521
1014
  } }
@@ -543,20 +1036,22 @@ function AgentPropertiesPanelComponent_Conditional_2_Template(rf, ctx) { if (rf
543
1036
  i0.ɵɵelementEnd();
544
1037
  i0.ɵɵconditionalCreate(18, AgentPropertiesPanelComponent_Conditional_2_Conditional_18_Template, 2, 0, "span", 16);
545
1038
  i0.ɵɵelementEnd()()()();
546
- i0.ɵɵelementStart(19, "div", 17)(20, "mj-accordion-panel", 18);
547
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("general")); });
548
- i0.ɵɵtemplate(21, AgentPropertiesPanelComponent_Conditional_2_ng_template_21_Template, 2, 0, "ng-template", 19)(22, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Template, 18, 8, "ng-template", 20);
1039
+ i0.ɵɵelementStart(19, "div", 17);
1040
+ i0.ɵɵconditionalCreate(20, AgentPropertiesPanelComponent_Conditional_2_Conditional_20_Template, 4, 0, "mj-alert", 18);
1041
+ i0.ɵɵelementStart(21, "mj-accordion-panel", 19);
1042
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_21_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("general")); });
1043
+ i0.ɵɵtemplate(22, AgentPropertiesPanelComponent_Conditional_2_ng_template_22_Template, 2, 0, "ng-template", 20)(23, AgentPropertiesPanelComponent_Conditional_2_ng_template_23_Template, 18, 8, "ng-template", 21);
549
1044
  i0.ɵɵelementEnd();
550
- i0.ɵɵelementStart(23, "mj-accordion-panel", 18);
551
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_23_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("config")); });
552
- i0.ɵɵtemplate(24, AgentPropertiesPanelComponent_Conditional_2_ng_template_24_Template, 2, 0, "ng-template", 19)(25, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Template, 6, 5, "ng-template", 20);
1045
+ i0.ɵɵelementStart(24, "mj-accordion-panel", 19);
1046
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_24_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("config")); });
1047
+ i0.ɵɵtemplate(25, AgentPropertiesPanelComponent_Conditional_2_ng_template_25_Template, 2, 0, "ng-template", 20)(26, AgentPropertiesPanelComponent_Conditional_2_ng_template_26_Template, 7, 6, "ng-template", 21);
553
1048
  i0.ɵɵelementEnd();
554
- i0.ɵɵconditionalCreate(26, AgentPropertiesPanelComponent_Conditional_2_Conditional_26_Template, 3, 2, "mj-accordion-panel", 21);
555
- i0.ɵɵelementStart(27, "mj-accordion-panel", 18);
556
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_27_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("errors")); });
557
- i0.ɵɵtemplate(28, AgentPropertiesPanelComponent_Conditional_2_ng_template_28_Template, 2, 0, "ng-template", 19)(29, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Template, 12, 5, "ng-template", 20);
1049
+ i0.ɵɵconditionalCreate(27, AgentPropertiesPanelComponent_Conditional_2_Conditional_27_Template, 3, 2, "mj-accordion-panel", 22);
1050
+ i0.ɵɵelementStart(28, "mj-accordion-panel", 19);
1051
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_2_Template_mj_accordion_panel_ExpandedChange_28_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("errors")); });
1052
+ i0.ɵɵtemplate(29, AgentPropertiesPanelComponent_Conditional_2_ng_template_29_Template, 2, 0, "ng-template", 20)(30, AgentPropertiesPanelComponent_Conditional_2_ng_template_30_Template, 12, 5, "ng-template", 21);
558
1053
  i0.ɵɵelementEnd();
559
- i0.ɵɵconditionalCreate(30, AgentPropertiesPanelComponent_Conditional_2_Conditional_30_Template, 4, 0, "div", 22);
1054
+ i0.ɵɵconditionalCreate(31, AgentPropertiesPanelComponent_Conditional_2_Conditional_31_Template, 4, 0, "div", 23);
560
1055
  i0.ɵɵelementEnd();
561
1056
  } if (rf & 2) {
562
1057
  const ctx_r1 = i0.ɵɵnextContext();
@@ -578,18 +1073,20 @@ function AgentPropertiesPanelComponent_Conditional_2_Template(rf, ctx) { if (rf
578
1073
  i0.ɵɵadvance();
579
1074
  i0.ɵɵconditional(ctx_r1.Step.StartingStep ? 18 : -1);
580
1075
  i0.ɵɵadvance(2);
1076
+ i0.ɵɵconditional(ctx_r1.StepRunProblemMessages.length > 0 ? 20 : -1);
1077
+ i0.ɵɵadvance();
581
1078
  i0.ɵɵproperty("FlushBody", true)("Expanded", !ctx_r1.IsSectionCollapsed("general"));
582
1079
  i0.ɵɵadvance(3);
583
1080
  i0.ɵɵproperty("FlushBody", true)("Expanded", !ctx_r1.IsSectionCollapsed("config"));
584
1081
  i0.ɵɵadvance(3);
585
- i0.ɵɵconditional(ctx_r1.Step.StepType === "Action" || ctx_r1.showActionPicker ? 26 : -1);
1082
+ i0.ɵɵconditional(ctx_r1.Step.StepType === "Action" || ctx_r1.showActionPicker ? 27 : -1);
586
1083
  i0.ɵɵadvance();
587
1084
  i0.ɵɵproperty("FlushBody", true)("Expanded", !ctx_r1.IsSectionCollapsed("errors"));
588
1085
  i0.ɵɵadvance(3);
589
- i0.ɵɵconditional(!ctx_r1.ReadOnly ? 30 : -1);
1086
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 31 : -1);
590
1087
  } }
591
1088
  function AgentPropertiesPanelComponent_Conditional_3_Conditional_19_Template(rf, ctx) { if (rf & 1) {
592
- i0.ɵɵelementStart(0, "span", 61);
1089
+ i0.ɵɵelementStart(0, "span", 115);
593
1090
  i0.ɵɵtext(1);
594
1091
  i0.ɵɵelementEnd();
595
1092
  } if (rf & 2) {
@@ -603,19 +1100,19 @@ function AgentPropertiesPanelComponent_Conditional_3_ng_template_22_Template(rf,
603
1100
  i0.ɵɵelementEnd();
604
1101
  } }
605
1102
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_23_Template(rf, ctx) { if (rf & 1) {
606
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "label");
1103
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "label");
607
1104
  i0.ɵɵtext(3, "From");
608
1105
  i0.ɵɵelementEnd();
609
- i0.ɵɵelementStart(4, "div", 62);
1106
+ i0.ɵɵelementStart(4, "div", 116);
610
1107
  i0.ɵɵtext(5);
611
1108
  i0.ɵɵelementEnd()();
612
- i0.ɵɵelementStart(6, "div", 24)(7, "label");
1109
+ i0.ɵɵelementStart(6, "div", 26)(7, "label");
613
1110
  i0.ɵɵtext(8, "To");
614
1111
  i0.ɵɵelementEnd();
615
- i0.ɵɵelementStart(9, "div", 62);
1112
+ i0.ɵɵelementStart(9, "div", 116);
616
1113
  i0.ɵɵtext(10);
617
1114
  i0.ɵɵelementEnd()();
618
- i0.ɵɵelementStart(11, "span", 63);
1115
+ i0.ɵɵelementStart(11, "span", 49);
619
1116
  i0.ɵɵtext(12, "To change the route, rewire the connection on the canvas.");
620
1117
  i0.ɵɵelementEnd()();
621
1118
  } if (rf & 2) {
@@ -631,16 +1128,16 @@ function AgentPropertiesPanelComponent_Conditional_3_ng_template_25_Template(rf,
631
1128
  i0.ɵɵelementEnd();
632
1129
  } }
633
1130
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template(rf, ctx) { if (rf & 1) {
634
- const _r22 = i0.ɵɵgetCurrentView();
635
- i0.ɵɵelementStart(0, "input", 68);
636
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathDescriptionChange(ctx_r1.InputValue($event))); });
1131
+ const _r47 = i0.ɵɵgetCurrentView();
1132
+ i0.ɵɵelementStart(0, "input", 123);
1133
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathDescriptionChange(ctx_r1.InputValue($event))); });
637
1134
  i0.ɵɵelementEnd();
638
1135
  } if (rf & 2) {
639
1136
  const ctx_r1 = i0.ɵɵnextContext(3);
640
1137
  i0.ɵɵproperty("value", ctx_r1.PathEntity.Description || "");
641
1138
  } }
642
1139
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_5_Template(rf, ctx) { if (rf & 1) {
643
- i0.ɵɵelementStart(0, "div", 26);
1140
+ i0.ɵɵelementStart(0, "div", 28);
644
1141
  i0.ɵɵtext(1);
645
1142
  i0.ɵɵelementEnd();
646
1143
  } if (rf & 2) {
@@ -649,46 +1146,214 @@ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_
649
1146
  i0.ɵɵtextInterpolate1(" ", ctx_r1.PathEntity.Description || "\u2014", " ");
650
1147
  } }
651
1148
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
652
- i0.ɵɵelementStart(0, "span", 63);
1149
+ i0.ɵɵelementStart(0, "span", 49);
653
1150
  i0.ɵɵtext(1, "Displayed as a label on the connection line");
654
1151
  i0.ɵɵelementEnd();
655
1152
  } }
656
1153
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template(rf, ctx) { if (rf & 1) {
657
- const _r23 = i0.ɵɵgetCurrentView();
658
- i0.ɵɵelementStart(0, "mj-code-editor", 69);
659
- i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template_mj_code_editor_change_0_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathConditionChange($event)); });
1154
+ const _r48 = i0.ɵɵgetCurrentView();
1155
+ i0.ɵɵelementStart(0, "mj-code-editor", 124);
1156
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template_mj_code_editor_change_0_listener($event) { i0.ɵɵrestoreView(_r48); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathConditionChange($event)); });
660
1157
  i0.ɵɵelementEnd();
661
1158
  } if (rf & 2) {
662
1159
  const ctx_r1 = i0.ɵɵnextContext(3);
663
1160
  i0.ɵɵproperty("value", ctx_r1.PathEntity.Condition || "")("readonly", false)("lineWrapping", true);
664
1161
  } }
665
1162
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_11_Template(rf, ctx) { if (rf & 1) {
666
- i0.ɵɵelement(0, "mj-code-editor", 66);
1163
+ i0.ɵɵelement(0, "mj-code-editor", 119);
667
1164
  } if (rf & 2) {
668
1165
  const ctx_r1 = i0.ɵɵnextContext(3);
669
1166
  i0.ɵɵproperty("value", ctx_r1.PathEntity.Condition)("readonly", true)("lineWrapping", true);
670
1167
  } }
671
1168
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_12_Template(rf, ctx) { if (rf & 1) {
672
- i0.ɵɵelementStart(0, "div", 62);
1169
+ i0.ɵɵelementStart(0, "div", 116);
673
1170
  i0.ɵɵtext(1, " No condition (always taken) ");
674
1171
  i0.ɵɵelementEnd();
675
1172
  } }
676
1173
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_13_Template(rf, ctx) { if (rf & 1) {
677
- i0.ɵɵelementStart(0, "span", 63);
1174
+ i0.ɵɵelementStart(0, "span", 49);
678
1175
  i0.ɵɵtext(1, " JavaScript expression evaluated at runtime. Leave empty for unconditional. ");
679
1176
  i0.ɵɵelementEnd();
680
1177
  } }
681
- function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_17_Template(rf, ctx) { if (rf & 1) {
682
- const _r24 = i0.ɵɵgetCurrentView();
683
- i0.ɵɵelementStart(0, "input", 70);
684
- i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_17_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathPriorityChange(ctx_r1.NumericValue($event))); });
1178
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_14_For_3_Template(rf, ctx) { if (rf & 1) {
1179
+ i0.ɵɵelementStart(0, "li");
1180
+ i0.ɵɵtext(1);
1181
+ i0.ɵɵelementEnd();
1182
+ } if (rf & 2) {
1183
+ const message_r49 = ctx.$implicit;
1184
+ i0.ɵɵadvance();
1185
+ i0.ɵɵtextInterpolate(message_r49);
1186
+ } }
1187
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1188
+ i0.ɵɵelementStart(0, "mj-alert", 120)(1, "ul", 24);
1189
+ i0.ɵɵrepeaterCreate(2, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_14_For_3_Template, 2, 1, "li", null, i0.ɵɵrepeaterTrackByIndex);
1190
+ i0.ɵɵelementEnd()();
1191
+ } if (rf & 2) {
1192
+ const ctx_r1 = i0.ɵɵnextContext(3);
1193
+ i0.ɵɵadvance(2);
1194
+ i0.ɵɵrepeater(ctx_r1.PathRunProblemMessages);
1195
+ } }
1196
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_For_10_Template(rf, ctx) { if (rf & 1) {
1197
+ i0.ɵɵelementStart(0, "option", 44);
1198
+ i0.ɵɵtext(1);
1199
+ i0.ɵɵelementEnd();
1200
+ } if (rf & 2) {
1201
+ const q_r51 = ctx.$implicit;
1202
+ i0.ɵɵproperty("value", q_r51.key);
1203
+ i0.ɵɵadvance();
1204
+ i0.ɵɵtextInterpolate2("", q_r51.key, " (", q_r51.question.kind, ")");
1205
+ } }
1206
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_For_5_Template(rf, ctx) { if (rf & 1) {
1207
+ i0.ɵɵelementStart(0, "option", 44);
1208
+ i0.ɵɵtext(1);
1209
+ i0.ɵɵelementEnd();
1210
+ } if (rf & 2) {
1211
+ const opt_r53 = ctx.$implicit;
1212
+ i0.ɵɵproperty("value", opt_r53.value);
1213
+ i0.ɵɵadvance();
1214
+ i0.ɵɵtextInterpolate2("", opt_r53.value, " \u2014 ", opt_r53.description);
1215
+ } }
1216
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
1217
+ i0.ɵɵelementStart(0, "div", 82);
1218
+ i0.ɵɵelement(1, "i", 83);
1219
+ i0.ɵɵelementStart(2, "span");
1220
+ i0.ɵɵtext(3);
1221
+ i0.ɵɵelementEnd()();
1222
+ } if (rf & 2) {
1223
+ const ctx_r1 = i0.ɵɵnextContext(5);
1224
+ i0.ɵɵadvance(3);
1225
+ i0.ɵɵtextInterpolate(ctx_r1.RouteChoiceCoverageHint);
1226
+ } }
1227
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_Template(rf, ctx) { if (rf & 1) {
1228
+ const _r52 = i0.ɵɵgetCurrentView();
1229
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
1230
+ i0.ɵɵtext(2, "Choice Option");
1231
+ i0.ɵɵelementEnd();
1232
+ i0.ɵɵelementStart(3, "select", 34);
1233
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRouteChoiceOptionChange(ctx_r1.InputValue($event))); });
1234
+ i0.ɵɵrepeaterCreate(4, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_For_5_Template, 2, 3, "option", 44, _forTrack2);
1235
+ i0.ɵɵelementEnd()();
1236
+ i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_Conditional_6_Template, 4, 1, "div", 82);
1237
+ } if (rf & 2) {
1238
+ const ctx_r1 = i0.ɵɵnextContext(4);
1239
+ i0.ɵɵadvance(3);
1240
+ i0.ɵɵproperty("value", ctx_r1.SelectedRouteChoiceOption);
1241
+ i0.ɵɵadvance();
1242
+ i0.ɵɵrepeater(ctx_r1.RouteChoiceOptions);
1243
+ i0.ɵɵadvance(2);
1244
+ i0.ɵɵconditional(ctx_r1.RouteChoiceCoverageHint ? 6 : -1);
1245
+ } }
1246
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_12_Template(rf, ctx) { if (rf & 1) {
1247
+ const _r54 = i0.ɵɵgetCurrentView();
1248
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
1249
+ i0.ɵɵtext(2, "Probability Threshold (0..1)");
1250
+ i0.ɵɵelementEnd();
1251
+ i0.ɵɵelementStart(3, "input", 129);
1252
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_12_Template_input_input_3_listener($event) { i0.ɵɵrestoreView(_r54); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRouteLikelihoodThresholdChange(ctx_r1.InputValue($event))); });
1253
+ i0.ɵɵelementEnd();
1254
+ i0.ɵɵelementStart(4, "span", 49);
1255
+ i0.ɵɵtext(5, "Route taken when probability >= threshold");
1256
+ i0.ɵɵelementEnd()();
1257
+ } if (rf & 2) {
1258
+ const ctx_r1 = i0.ɵɵnextContext(4);
1259
+ i0.ɵɵadvance(3);
1260
+ i0.ɵɵclassProp("mj-agent-props-input--error", ctx_r1.RouteLikelihoodThreshold === null);
1261
+ i0.ɵɵproperty("value", ctx_r1.RouteThresholdText);
1262
+ } }
1263
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_13_For_5_Template(rf, ctx) { if (rf & 1) {
1264
+ i0.ɵɵelementStart(0, "option", 44);
1265
+ i0.ɵɵtext(1);
1266
+ i0.ɵɵelementEnd();
1267
+ } if (rf & 2) {
1268
+ const level_r56 = ctx.$implicit;
1269
+ const $index_r57 = ctx.$index;
1270
+ i0.ɵɵproperty("value", $index_r57);
1271
+ i0.ɵɵadvance();
1272
+ i0.ɵɵtextInterpolate2("Level ", $index_r57, ": ", level_r56);
1273
+ } }
1274
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_13_Template(rf, ctx) { if (rf & 1) {
1275
+ const _r55 = i0.ɵɵgetCurrentView();
1276
+ i0.ɵɵelementStart(0, "div", 26)(1, "label");
1277
+ i0.ɵɵtext(2, "Minimum Level (Score >= Index)");
1278
+ i0.ɵɵelementEnd();
1279
+ i0.ɵɵelementStart(3, "select", 34);
1280
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_13_Template_select_change_3_listener($event) { i0.ɵɵrestoreView(_r55); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnRouteScoreLevelChange(ctx_r1.NumericValue($event))); });
1281
+ i0.ɵɵrepeaterCreate(4, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_13_For_5_Template, 2, 3, "option", 44, i0.ɵɵrepeaterTrackByIndex);
1282
+ i0.ɵɵelementEnd()();
1283
+ } if (rf & 2) {
1284
+ const ctx_r1 = i0.ɵɵnextContext(4);
1285
+ i0.ɵɵadvance(3);
1286
+ i0.ɵɵproperty("value", ctx_r1.RouteScoreLevelIndex);
1287
+ i0.ɵɵadvance();
1288
+ i0.ɵɵrepeater(ctx_r1.RouteScoreLevels);
1289
+ } }
1290
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_14_Template(rf, ctx) { if (rf & 1) {
1291
+ i0.ɵɵelementStart(0, "span", 48);
1292
+ i0.ɵɵtext(1);
1293
+ i0.ɵɵelementEnd();
1294
+ } if (rf & 2) {
1295
+ i0.ɵɵadvance();
1296
+ i0.ɵɵtextInterpolate(ctx);
1297
+ } }
1298
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1299
+ const _r58 = i0.ɵɵgetCurrentView();
1300
+ i0.ɵɵelementStart(0, "button", 130);
1301
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_15_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r58); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ApplyRouteCondition()); });
1302
+ i0.ɵɵelement(1, "i", 131);
1303
+ i0.ɵɵtext(2, " Apply to Condition ");
1304
+ i0.ɵɵelementEnd();
1305
+ } if (rf & 2) {
1306
+ const ctx_r1 = i0.ɵɵnextContext(4);
1307
+ i0.ɵɵproperty("disabled", !ctx_r1.GetGeneratedRouteCondition());
1308
+ } }
1309
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Template(rf, ctx) { if (rf & 1) {
1310
+ const _r50 = i0.ɵɵgetCurrentView();
1311
+ i0.ɵɵelementStart(0, "div", 121)(1, "div", 125)(2, "span", 126);
1312
+ i0.ɵɵelement(3, "i", 127);
1313
+ i0.ɵɵtext(4, " Route on Answer ");
1314
+ i0.ɵɵelementEnd()();
1315
+ i0.ɵɵelementStart(5, "div", 26)(6, "label");
1316
+ i0.ɵɵtext(7, "Decision Question");
1317
+ i0.ɵɵelementEnd();
1318
+ i0.ɵɵelementStart(8, "select", 34);
1319
+ i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Template_select_change_8_listener($event) { i0.ɵɵrestoreView(_r50); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnRouteQuestionChange(ctx_r1.InputValue($event))); });
1320
+ i0.ɵɵrepeaterCreate(9, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_For_10_Template, 2, 3, "option", 44, _forTrack0);
1321
+ i0.ɵɵelementEnd()();
1322
+ i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_11_Template, 7, 2);
1323
+ i0.ɵɵconditionalCreate(12, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_12_Template, 6, 3, "div", 26);
1324
+ i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_13_Template, 6, 1, "div", 26);
1325
+ i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_14_Template, 2, 1, "span", 48);
1326
+ i0.ɵɵconditionalCreate(15, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Conditional_15_Template, 3, 1, "button", 128);
1327
+ i0.ɵɵelementEnd();
1328
+ } if (rf & 2) {
1329
+ let tmp_8_0;
1330
+ const ctx_r1 = i0.ɵɵnextContext(3);
1331
+ i0.ɵɵadvance(8);
1332
+ i0.ɵɵproperty("value", ctx_r1.SelectedRouteQuestionKey);
1333
+ i0.ɵɵadvance();
1334
+ i0.ɵɵrepeater(ctx_r1.OriginDecisionQuestions);
1335
+ i0.ɵɵadvance(2);
1336
+ i0.ɵɵconditional((ctx_r1.RouteSelectedQuestion == null ? null : ctx_r1.RouteSelectedQuestion.kind) === "Choice" ? 11 : -1);
1337
+ i0.ɵɵadvance();
1338
+ i0.ɵɵconditional((ctx_r1.RouteSelectedQuestion == null ? null : ctx_r1.RouteSelectedQuestion.kind) === "Likelihood" ? 12 : -1);
1339
+ i0.ɵɵadvance();
1340
+ i0.ɵɵconditional((ctx_r1.RouteSelectedQuestion == null ? null : ctx_r1.RouteSelectedQuestion.kind) === "Score" ? 13 : -1);
1341
+ i0.ɵɵadvance();
1342
+ i0.ɵɵconditional((tmp_8_0 = ctx_r1.RouteConditionProblem) ? 14 : -1, tmp_8_0);
1343
+ i0.ɵɵadvance();
1344
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 15 : -1);
1345
+ } }
1346
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_19_Template(rf, ctx) { if (rf & 1) {
1347
+ const _r59 = i0.ɵɵgetCurrentView();
1348
+ i0.ɵɵelementStart(0, "input", 132);
1349
+ i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_19_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(_r59); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnPathPriorityChange(ctx_r1.NumericValue($event))); });
685
1350
  i0.ɵɵelementEnd();
686
1351
  } if (rf & 2) {
687
1352
  const ctx_r1 = i0.ɵɵnextContext(3);
688
1353
  i0.ɵɵproperty("value", ctx_r1.PathEntity.Priority);
689
1354
  } }
690
- function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_18_Template(rf, ctx) { if (rf & 1) {
691
- i0.ɵɵelementStart(0, "div", 26);
1355
+ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_20_Template(rf, ctx) { if (rf & 1) {
1356
+ i0.ɵɵelementStart(0, "div", 28);
692
1357
  i0.ɵɵtext(1);
693
1358
  i0.ɵɵelementEnd();
694
1359
  } if (rf & 2) {
@@ -697,28 +1362,30 @@ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_
697
1362
  i0.ɵɵtextInterpolate(ctx_r1.PathEntity.Priority);
698
1363
  } }
699
1364
  function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Template(rf, ctx) { if (rf & 1) {
700
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 24)(2, "label");
1365
+ i0.ɵɵelementStart(0, "div", 25)(1, "div", 26)(2, "label");
701
1366
  i0.ɵɵtext(3, "Description");
702
1367
  i0.ɵɵelementEnd();
703
- i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template, 1, 1, "input", 64);
704
- i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_5_Template, 2, 1, "div", 26);
705
- i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_6_Template, 2, 0, "span", 63);
1368
+ i0.ɵɵconditionalCreate(4, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template, 1, 1, "input", 117);
1369
+ i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_5_Template, 2, 1, "div", 28);
1370
+ i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_6_Template, 2, 0, "span", 49);
706
1371
  i0.ɵɵelementEnd();
707
- i0.ɵɵelementStart(7, "div", 24)(8, "label");
1372
+ i0.ɵɵelementStart(7, "div", 26)(8, "label");
708
1373
  i0.ɵɵtext(9, "Condition");
709
1374
  i0.ɵɵelementEnd();
710
- i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template, 1, 3, "mj-code-editor", 65);
711
- i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_11_Template, 1, 3, "mj-code-editor", 66);
712
- i0.ɵɵconditionalCreate(12, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_12_Template, 2, 0, "div", 62);
713
- i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_13_Template, 2, 0, "span", 63);
1375
+ i0.ɵɵconditionalCreate(10, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template, 1, 3, "mj-code-editor", 118);
1376
+ i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_11_Template, 1, 3, "mj-code-editor", 119);
1377
+ i0.ɵɵconditionalCreate(12, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_12_Template, 2, 0, "div", 116);
1378
+ i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_13_Template, 2, 0, "span", 49);
1379
+ i0.ɵɵconditionalCreate(14, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_14_Template, 4, 0, "mj-alert", 120);
714
1380
  i0.ɵɵelementEnd();
715
- i0.ɵɵelementStart(14, "div", 24)(15, "label");
716
- i0.ɵɵtext(16, "Priority");
1381
+ i0.ɵɵconditionalCreate(15, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_15_Template, 16, 6, "div", 121);
1382
+ i0.ɵɵelementStart(16, "div", 26)(17, "label");
1383
+ i0.ɵɵtext(18, "Priority");
717
1384
  i0.ɵɵelementEnd();
718
- i0.ɵɵconditionalCreate(17, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_17_Template, 1, 1, "input", 67);
719
- i0.ɵɵconditionalCreate(18, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_18_Template, 2, 1, "div", 26);
720
- i0.ɵɵelementStart(19, "span", 63);
721
- i0.ɵɵtext(20, "Higher priority paths are evaluated first when multiple paths leave a step.");
1385
+ i0.ɵɵconditionalCreate(19, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_19_Template, 1, 1, "input", 122);
1386
+ i0.ɵɵconditionalCreate(20, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_20_Template, 2, 1, "div", 28);
1387
+ i0.ɵɵelementStart(21, "span", 49);
1388
+ i0.ɵɵtext(22, "Higher priority paths are evaluated first when multiple paths leave a step.");
722
1389
  i0.ɵɵelementEnd()()();
723
1390
  } if (rf & 2) {
724
1391
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -736,52 +1403,56 @@ function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Template(rf,
736
1403
  i0.ɵɵconditional(ctx_r1.ReadOnly && !ctx_r1.PathEntity.Condition ? 12 : -1);
737
1404
  i0.ɵɵadvance();
738
1405
  i0.ɵɵconditional(!ctx_r1.ReadOnly ? 13 : -1);
1406
+ i0.ɵɵadvance();
1407
+ i0.ɵɵconditional(ctx_r1.PathRunProblemMessages.length > 0 ? 14 : -1);
1408
+ i0.ɵɵadvance();
1409
+ i0.ɵɵconditional(ctx_r1.OriginDecisionStep && ctx_r1.OriginDecisionConfig ? 15 : -1);
739
1410
  i0.ɵɵadvance(4);
740
- i0.ɵɵconditional(!ctx_r1.ReadOnly ? 17 : -1);
1411
+ i0.ɵɵconditional(!ctx_r1.ReadOnly ? 19 : -1);
741
1412
  i0.ɵɵadvance();
742
- i0.ɵɵconditional(ctx_r1.ReadOnly ? 18 : -1);
1413
+ i0.ɵɵconditional(ctx_r1.ReadOnly ? 20 : -1);
743
1414
  } }
744
1415
  function AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template(rf, ctx) { if (rf & 1) {
745
- const _r25 = i0.ɵɵgetCurrentView();
746
- i0.ɵɵelementStart(0, "div", 22)(1, "button", 53);
747
- i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDeletePath()); });
748
- i0.ɵɵelement(2, "i", 54);
1416
+ const _r60 = i0.ɵɵgetCurrentView();
1417
+ i0.ɵɵelementStart(0, "div", 23)(1, "button", 107);
1418
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r60); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDeletePath()); });
1419
+ i0.ɵɵelement(2, "i", 108);
749
1420
  i0.ɵɵtext(3, " Delete Path ");
750
1421
  i0.ɵɵelementEnd()();
751
1422
  } }
752
1423
  function AgentPropertiesPanelComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
753
- const _r21 = i0.ɵɵgetCurrentView();
754
- i0.ɵɵelementStart(0, "div", 55)(1, "div", 3)(2, "span", 4);
1424
+ const _r46 = i0.ɵɵgetCurrentView();
1425
+ i0.ɵɵelementStart(0, "div", 109)(1, "div", 3)(2, "span", 4);
755
1426
  i0.ɵɵtext(3, "PATH");
756
1427
  i0.ɵɵelementEnd();
757
1428
  i0.ɵɵelementStart(4, "button", 5);
758
- i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseRequested.emit()); });
1429
+ i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseRequested.emit()); });
759
1430
  i0.ɵɵelement(5, "i", 6);
760
1431
  i0.ɵɵelementEnd()();
761
- i0.ɵɵelementStart(6, "div", 7)(7, "div", 56);
762
- i0.ɵɵelement(8, "i", 57);
1432
+ i0.ɵɵelementStart(6, "div", 7)(7, "div", 110);
1433
+ i0.ɵɵelement(8, "i", 111);
763
1434
  i0.ɵɵelementEnd();
764
- i0.ɵɵelementStart(9, "div", 10)(10, "span", 58)(11, "span", 59);
1435
+ i0.ɵɵelementStart(9, "div", 10)(10, "span", 112)(11, "span", 113);
765
1436
  i0.ɵɵtext(12);
766
1437
  i0.ɵɵelementEnd();
767
- i0.ɵɵelement(13, "i", 60);
768
- i0.ɵɵelementStart(14, "span", 59);
1438
+ i0.ɵɵelement(13, "i", 114);
1439
+ i0.ɵɵelementStart(14, "span", 113);
769
1440
  i0.ɵɵtext(15);
770
1441
  i0.ɵɵelementEnd()();
771
1442
  i0.ɵɵelementStart(16, "span", 12)(17, "span", 13);
772
1443
  i0.ɵɵtext(18);
773
1444
  i0.ɵɵelementEnd();
774
- i0.ɵɵconditionalCreate(19, AgentPropertiesPanelComponent_Conditional_3_Conditional_19_Template, 2, 1, "span", 61);
1445
+ i0.ɵɵconditionalCreate(19, AgentPropertiesPanelComponent_Conditional_3_Conditional_19_Template, 2, 1, "span", 115);
775
1446
  i0.ɵɵelementEnd()()()();
776
- i0.ɵɵelementStart(20, "div", 17)(21, "mj-accordion-panel", 18);
777
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_21_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("path-overview")); });
778
- i0.ɵɵtemplate(22, AgentPropertiesPanelComponent_Conditional_3_ng_template_22_Template, 2, 0, "ng-template", 19)(23, AgentPropertiesPanelComponent_Conditional_3_ng_template_23_Template, 13, 2, "ng-template", 20);
1447
+ i0.ɵɵelementStart(20, "div", 17)(21, "mj-accordion-panel", 19);
1448
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_21_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("path-overview")); });
1449
+ i0.ɵɵtemplate(22, AgentPropertiesPanelComponent_Conditional_3_ng_template_22_Template, 2, 0, "ng-template", 20)(23, AgentPropertiesPanelComponent_Conditional_3_ng_template_23_Template, 13, 2, "ng-template", 21);
779
1450
  i0.ɵɵelementEnd();
780
- i0.ɵɵelementStart(24, "mj-accordion-panel", 18);
781
- i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_24_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("path-settings")); });
782
- i0.ɵɵtemplate(25, AgentPropertiesPanelComponent_Conditional_3_ng_template_25_Template, 2, 0, "ng-template", 19)(26, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Template, 21, 9, "ng-template", 20);
1451
+ i0.ɵɵelementStart(24, "mj-accordion-panel", 19);
1452
+ i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_24_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleSection("path-settings")); });
1453
+ i0.ɵɵtemplate(25, AgentPropertiesPanelComponent_Conditional_3_ng_template_25_Template, 2, 0, "ng-template", 20)(26, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Template, 23, 11, "ng-template", 21);
783
1454
  i0.ɵɵelementEnd();
784
- i0.ɵɵconditionalCreate(27, AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template, 4, 0, "div", 22);
1455
+ i0.ɵɵconditionalCreate(27, AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template, 4, 0, "div", 23);
785
1456
  i0.ɵɵelementEnd();
786
1457
  } if (rf & 2) {
787
1458
  const ctx_r1 = i0.ɵɵnextContext();
@@ -809,6 +1480,7 @@ function AgentPropertiesPanelComponent_Conditional_3_Template(rf, ctx) { if (rf
809
1480
  const STEP_TYPE_COLORS = {
810
1481
  Action: '#3b82f6',
811
1482
  Prompt: '#8b5cf6',
1483
+ Decision: '#0891b2',
812
1484
  'Sub-Agent': '#10b981',
813
1485
  ForEach: '#f59e0b',
814
1486
  While: '#f59e0b'
@@ -817,24 +1489,49 @@ const STEP_TYPE_COLORS = {
817
1489
  const STEP_TYPE_ICONS = {
818
1490
  Action: 'fa-bolt',
819
1491
  Prompt: 'fa-comment-dots',
1492
+ Decision: 'fa-scale-balanced',
820
1493
  'Sub-Agent': 'fa-robot',
821
1494
  ForEach: 'fa-arrows-spin',
822
1495
  While: 'fa-rotate'
823
1496
  };
1497
+ /** The kinds the question editor offers, in the order it lists them. */
1498
+ const DECISION_QUESTION_KINDS = ['Likelihood', 'Choice', 'Score'];
1499
+ /** The key an option's refused value is kept under: the question and the option's position. */
1500
+ function optionErrorKey(questionKey, index) {
1501
+ return `${questionKey}\u0000${index}`;
1502
+ }
1503
+ /** A runtime problem phrase ("its key ... cannot be named ...") as a sentence on its own. */
1504
+ function capitalize(phrase) {
1505
+ return phrase.charAt(0).toUpperCase() + phrase.slice(1);
1506
+ }
824
1507
  /**
825
1508
  * Properties panel for editing AI Agent step and path configurations.
826
1509
  * Shows context-aware sections based on the selected step type.
827
1510
  */
828
1511
  export class AgentPropertiesPanelComponent {
829
1512
  // ── Inputs ──────────────────────────────────────────────────
830
- Step = null;
1513
+ /** The selected step. Selecting a different one drops whatever was typed but not committed for the last. */
1514
+ set Step(value) {
1515
+ if (!UUIDsEqual(value?.ID, this._step?.ID)) {
1516
+ this.clearDecisionDrafts();
1517
+ }
1518
+ this._step = value;
1519
+ }
1520
+ get Step() {
1521
+ return this._step;
1522
+ }
1523
+ _step = null;
831
1524
  SelectedConnection = null;
832
1525
  PathEntity = null;
833
1526
  ReadOnly = false;
834
1527
  Actions = [];
835
1528
  Prompts = [];
1529
+ DecisionModelTypeID = null;
836
1530
  Agents = [];
837
1531
  AllSteps = [];
1532
+ AllPaths = [];
1533
+ /** The flow editor's run check: why the flow would not run as it stands, by step and path. */
1534
+ RunProblems = [];
838
1535
  // ── Outputs ─────────────────────────────────────────────────
839
1536
  StepChanged = new EventEmitter();
840
1537
  PathChanged = new EventEmitter();
@@ -893,6 +1590,7 @@ export class AgentPropertiesPanelComponent {
893
1590
  switch (this.Step?.StepType) {
894
1591
  case 'Action': return 'Action';
895
1592
  case 'Prompt': return 'Prompt';
1593
+ case 'Decision': return 'Decision';
896
1594
  case 'Sub-Agent': return 'Sub-Agent';
897
1595
  case 'ForEach': return 'For Each Loop';
898
1596
  case 'While': return 'While Loop';
@@ -997,6 +1695,727 @@ export class AgentPropertiesPanelComponent {
997
1695
  get selectedAgentName() {
998
1696
  return this.SelectedAgentName;
999
1697
  }
1698
+ // ── Decision Step Properties & Getters ────────────────────
1699
+ get ShowDecisionConfig() {
1700
+ return this.Step?.StepType === 'Decision';
1701
+ }
1702
+ get DecisionPrompts() {
1703
+ return this.Prompts.filter(p => IsDecisionPrompt(p, this.DecisionModelTypeID));
1704
+ }
1705
+ get SelectedDecisionPromptName() {
1706
+ if (!this.Step?.PromptID)
1707
+ return 'Default Decision (system default)';
1708
+ return this.Prompts.find(p => UUIDsEqual(p.ID, this.Step.PromptID))?.Name ?? 'Unknown Prompt';
1709
+ }
1710
+ /**
1711
+ * The step's configuration as the runtime reads it or, while the runtime still refuses it, the parts
1712
+ * that parse — so an unfinished step can be shown and finished. Whether it can run is
1713
+ * {@link DecisionValidationError}'s answer, which is the runtime's.
1714
+ */
1715
+ get DecisionConfig() {
1716
+ return ReadEditableDecisionConfig(this.Step?.Configuration) ?? { key: '', questions: {} };
1717
+ }
1718
+ get DecisionValidationError() {
1719
+ if (this.Step?.StepType !== 'Decision')
1720
+ return null;
1721
+ const read = ReadFlowDecisionStepConfiguration(this.Step?.Configuration);
1722
+ return 'Error' in read ? read.Error : null;
1723
+ }
1724
+ /** The key field's text: what the author is typing, until it is committed; the stored key otherwise. */
1725
+ get DecisionKeyText() {
1726
+ return this.keyDraftFor(this.Step) ?? this.DecisionConfig.key;
1727
+ }
1728
+ /**
1729
+ * Why the key in the field cannot be committed, or `null`. Judged as it is typed, so the author sees
1730
+ * the problem before committing, with the runtime's own wording for a key a condition cannot name.
1731
+ */
1732
+ get DecisionKeyError() {
1733
+ if (!this.ShowDecisionConfig)
1734
+ return null;
1735
+ return this.decisionKeyProblem(this.DecisionKeyText.trim());
1736
+ }
1737
+ /** The run check's problems on the selected step, less what the step's own warnings already say. */
1738
+ get StepRunProblemMessages() {
1739
+ return StepRunProblems(this.RunProblems, this.Step?.ID).map(p => p.Message);
1740
+ }
1741
+ /** The run check's problems with the selected path's condition. */
1742
+ get PathRunProblemMessages() {
1743
+ return PathRunProblems(this.RunProblems, this.PathEntity?.ID).map(p => p.Message);
1744
+ }
1745
+ get DecisionQuestionsList() {
1746
+ const questions = this.DecisionConfig.questions || {};
1747
+ return Object.entries(questions).map(([key, question]) => ({ key, question }));
1748
+ }
1749
+ /** A Choice question's options; empty for any other kind, or a Choice stored without them. */
1750
+ ChoiceOptionsOf(question) {
1751
+ return question.kind === 'Choice' && Array.isArray(question.options) ? question.options : [];
1752
+ }
1753
+ /** A Score question's levels, lowest first; empty for any other kind, or a Score stored without them. */
1754
+ ScoreLevelsOf(question) {
1755
+ return question.kind === 'Score' && Array.isArray(question.levels) ? question.levels : [];
1756
+ }
1757
+ /**
1758
+ * What is wrong with question `questionKey`'s key: why the last rename of it was refused, or — for a
1759
+ * key stored before the editor held keys to a shape — that a condition cannot name it with dots.
1760
+ */
1761
+ QuestionKeyError(questionKey) {
1762
+ const refused = this.questionKeyErrors.get(questionKey);
1763
+ if (refused)
1764
+ return refused;
1765
+ return DECISION_QUESTION_KEY_PATTERN.test(questionKey)
1766
+ ? null
1767
+ : `Question key "${questionKey}" cannot be named in a path condition with dots; rename it using letters, digits and underscores, not starting with a digit`;
1768
+ }
1769
+ // ── Decision Step Mutators ────────────────────────────────
1770
+ /**
1771
+ * The key field's `input` event: records what the author typed, and nothing else.
1772
+ *
1773
+ * The key is not stored, and no path condition is touched, until the author commits it
1774
+ * ({@link OnDecisionKeyCommit}). Renaming on every keystroke passed each in-between value through
1775
+ * the flow's conditions: typing through another step's key merged the two steps' references, and
1776
+ * clearing the field on the way to a new key stranded them on a fragment of the old one.
1777
+ */
1778
+ OnDecisionKeyChange(value) {
1779
+ if (!this.Step || this.ReadOnly)
1780
+ return;
1781
+ this.keyDraft = { StepID: this.Step.ID, Value: value };
1782
+ }
1783
+ /** The key field's `change` event and Enter: commits what was typed. Refused keys stay in the field with their error. */
1784
+ OnDecisionKeyCommit() {
1785
+ const typed = this.keyDraftFor(this.Step);
1786
+ if (typed !== null) {
1787
+ this.RenameDecisionKey(typed);
1788
+ }
1789
+ }
1790
+ /**
1791
+ * Renames this Decision step's key and, in the same change, every path condition that names the step
1792
+ * by it.
1793
+ *
1794
+ * Refused — nothing stored, nothing rewritten — when the key is one a condition cannot name or another
1795
+ * Decision step already uses. Conditions follow only a key that named this step alone: when another
1796
+ * step shares the old key, nothing says which of the two a condition meant, so they are left for the
1797
+ * flow check to report rather than guessed at.
1798
+ *
1799
+ * @param newKey the key to give the step; surrounding whitespace is dropped
1800
+ * @returns why the key was refused, or `null` when it was stored (or unchanged)
1801
+ */
1802
+ RenameDecisionKey(newKey) {
1803
+ if (!this.Step || this.ReadOnly || !this.ShowDecisionConfig)
1804
+ return null;
1805
+ const key = newKey.trim();
1806
+ const config = this.DecisionConfig;
1807
+ const previous = config.key;
1808
+ if (key === previous) {
1809
+ this.keyDraft = null;
1810
+ return null;
1811
+ }
1812
+ const problem = this.decisionKeyProblem(key);
1813
+ if (problem) {
1814
+ this.keyDraft = { StepID: this.Step.ID, Value: newKey };
1815
+ return problem;
1816
+ }
1817
+ this.keyDraft = null;
1818
+ this.updateDecisionConfig({ ...config, key });
1819
+ if (this.conditionsFollowKey(previous)) {
1820
+ this.rewritePathConditions(condition => RewriteDecisionReferences(condition, k => (k === previous ? key : undefined)).Expression);
1821
+ }
1822
+ return null;
1823
+ }
1824
+ OnDecisionPromptChange(promptId) {
1825
+ if (!this.Step || this.ReadOnly)
1826
+ return;
1827
+ this.Step.PromptID = promptId ? promptId : null;
1828
+ this.StepChanged.emit(this.Step);
1829
+ }
1830
+ /**
1831
+ * The state field's `input` event. An empty field stores no state, which the runtime reads as the
1832
+ * whole payload; whether a state it can resolve was typed is the runtime reader's to say
1833
+ * ({@link DecisionValidationError}).
1834
+ */
1835
+ OnDecisionStateChange(newState) {
1836
+ if (!this.Step || this.ReadOnly)
1837
+ return;
1838
+ const config = { ...this.DecisionConfig };
1839
+ const state = newState.trim();
1840
+ if (state) {
1841
+ config.state = state;
1842
+ }
1843
+ else {
1844
+ delete config.state;
1845
+ }
1846
+ this.updateDecisionConfig(config);
1847
+ }
1848
+ OnAddDecisionQuestion() {
1849
+ if (!this.Step || this.ReadOnly)
1850
+ return;
1851
+ const currentConfig = this.DecisionConfig;
1852
+ const questions = { ...currentConfig.questions };
1853
+ let counter = 1;
1854
+ while (questions[`question_${counter}`]) {
1855
+ counter++;
1856
+ }
1857
+ const newKey = `question_${counter}`;
1858
+ questions[newKey] = {
1859
+ kind: 'Likelihood',
1860
+ instructions: ''
1861
+ };
1862
+ this.updateDecisionConfig({ ...currentConfig, questions });
1863
+ }
1864
+ OnRemoveDecisionQuestion(key) {
1865
+ if (!this.Step || this.ReadOnly)
1866
+ return;
1867
+ const currentConfig = this.DecisionConfig;
1868
+ const questions = { ...currentConfig.questions };
1869
+ delete questions[key];
1870
+ this.questionKeyErrors.delete(key);
1871
+ this.clearOptionValueErrors(key);
1872
+ this.updateDecisionConfig({ ...currentConfig, questions });
1873
+ }
1874
+ /**
1875
+ * The question key field's `change` event: renames the question, keeping its place in the list, and
1876
+ * every path condition that reads it.
1877
+ *
1878
+ * Refused — nothing stored, nothing rewritten — when the key is empty, is not the identifier shape a
1879
+ * step key has, or is another question's key. A refused key stays in the field with
1880
+ * {@link QuestionKeyError} beneath it.
1881
+ *
1882
+ * @returns why the key was refused, or `null`
1883
+ */
1884
+ OnDecisionQuestionKeyChange(oldKey, newKey) {
1885
+ if (!this.Step || this.ReadOnly)
1886
+ return null;
1887
+ const config = this.DecisionConfig;
1888
+ if (!Object.prototype.hasOwnProperty.call(config.questions, oldKey))
1889
+ return null;
1890
+ const key = newKey.trim();
1891
+ const problem = key === oldKey ? null : this.questionKeyProblem(key, config);
1892
+ if (problem) {
1893
+ this.questionKeyErrors.set(oldKey, problem);
1894
+ return problem;
1895
+ }
1896
+ this.questionKeyErrors.delete(oldKey);
1897
+ if (key === oldKey)
1898
+ return null;
1899
+ const questions = Object.fromEntries(Object.entries(config.questions).map(([k, question]) => [k === oldKey ? key : k, question]));
1900
+ this.updateDecisionConfig({ ...config, questions });
1901
+ this.moveOptionValueErrors(oldKey, key);
1902
+ const stepKey = this.conditionsFollowKey(config.key);
1903
+ if (stepKey) {
1904
+ this.rewritePathConditions(condition => RewriteDecisionQuestionReferences(condition, stepKey, q => (q === oldKey ? key : undefined)));
1905
+ }
1906
+ return null;
1907
+ }
1908
+ /** The kind select's `change` event. A value the editor does not offer is ignored. */
1909
+ OnDecisionQuestionKindSelect(key, value) {
1910
+ const kind = DECISION_QUESTION_KINDS.find(k => k === value);
1911
+ if (kind) {
1912
+ this.OnDecisionQuestionKindChange(key, kind);
1913
+ }
1914
+ }
1915
+ OnDecisionQuestionKindChange(key, kind) {
1916
+ if (!this.Step || this.ReadOnly)
1917
+ return;
1918
+ const currentConfig = this.DecisionConfig;
1919
+ const questions = { ...currentConfig.questions };
1920
+ const existing = questions[key];
1921
+ if (!existing)
1922
+ return;
1923
+ if (kind === 'Likelihood') {
1924
+ questions[key] = {
1925
+ kind: 'Likelihood',
1926
+ instructions: existing.instructions,
1927
+ ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})
1928
+ };
1929
+ }
1930
+ else if (kind === 'Choice') {
1931
+ questions[key] = {
1932
+ kind: 'Choice',
1933
+ instructions: existing.instructions,
1934
+ options: [
1935
+ { value: 'option_1', description: 'First option' },
1936
+ { value: 'option_2', description: 'Second option' }
1937
+ ],
1938
+ ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})
1939
+ };
1940
+ }
1941
+ else if (kind === 'Score') {
1942
+ questions[key] = {
1943
+ kind: 'Score',
1944
+ instructions: existing.instructions,
1945
+ levels: ['Lowest / poor', 'Highest / good'],
1946
+ ...(existing.minConfidence !== undefined ? { minConfidence: existing.minConfidence } : {})
1947
+ };
1948
+ }
1949
+ this.updateDecisionConfig({ ...currentConfig, questions });
1950
+ }
1951
+ OnDecisionQuestionInstructionsChange(key, instructions) {
1952
+ if (!this.Step || this.ReadOnly)
1953
+ return;
1954
+ const currentConfig = this.DecisionConfig;
1955
+ const questions = { ...currentConfig.questions };
1956
+ if (!questions[key])
1957
+ return;
1958
+ questions[key] = { ...questions[key], instructions };
1959
+ this.updateDecisionConfig({ ...currentConfig, questions });
1960
+ }
1961
+ OnDecisionQuestionMinConfidenceChange(key, value) {
1962
+ if (!this.Step || this.ReadOnly)
1963
+ return;
1964
+ const currentConfig = this.DecisionConfig;
1965
+ const questions = { ...currentConfig.questions };
1966
+ if (!questions[key])
1967
+ return;
1968
+ const trimmed = value.trim();
1969
+ if (trimmed === '') {
1970
+ const q = { ...questions[key] };
1971
+ delete q.minConfidence;
1972
+ questions[key] = q;
1973
+ }
1974
+ else {
1975
+ const num = parseFloat(trimmed);
1976
+ if (!isNaN(num)) {
1977
+ questions[key] = { ...questions[key], minConfidence: num };
1978
+ }
1979
+ }
1980
+ this.updateDecisionConfig({ ...currentConfig, questions });
1981
+ }
1982
+ OnAddChoiceOption(questionKey) {
1983
+ if (!this.Step || this.ReadOnly)
1984
+ return;
1985
+ const currentConfig = this.DecisionConfig;
1986
+ const questions = { ...currentConfig.questions };
1987
+ const q = questions[questionKey];
1988
+ if (!q || q.kind !== 'Choice')
1989
+ return;
1990
+ const options = [...(q.options || [])];
1991
+ let newIdx = options.length + 1;
1992
+ while (options.some(o => o.value === `option_${newIdx}`)) {
1993
+ newIdx++;
1994
+ }
1995
+ options.push({ value: `option_${newIdx}`, description: '' });
1996
+ questions[questionKey] = { ...q, options };
1997
+ this.updateDecisionConfig({ ...currentConfig, questions });
1998
+ }
1999
+ OnRemoveChoiceOption(questionKey, index) {
2000
+ if (!this.Step || this.ReadOnly)
2001
+ return;
2002
+ const currentConfig = this.DecisionConfig;
2003
+ const questions = { ...currentConfig.questions };
2004
+ const q = questions[questionKey];
2005
+ if (!q || q.kind !== 'Choice')
2006
+ return;
2007
+ const options = q.options.filter((_, i) => i !== index);
2008
+ questions[questionKey] = { ...q, options };
2009
+ this.clearOptionValueErrors(questionKey);
2010
+ this.updateDecisionConfig({ ...currentConfig, questions });
2011
+ }
2012
+ /**
2013
+ * Edits one option of a Choice question. A description is stored as typed; a value is committed
2014
+ * through {@link OnChoiceOptionValueChange}, since path conditions read it.
2015
+ */
2016
+ OnChoiceOptionChange(questionKey, index, field, val) {
2017
+ if (field === 'value') {
2018
+ this.OnChoiceOptionValueChange(questionKey, index, val);
2019
+ return;
2020
+ }
2021
+ if (!this.Step || this.ReadOnly)
2022
+ return;
2023
+ const currentConfig = this.DecisionConfig;
2024
+ const questions = { ...currentConfig.questions };
2025
+ const q = questions[questionKey];
2026
+ if (!q || q.kind !== 'Choice')
2027
+ return;
2028
+ const options = q.options.map((opt, i) => i === index ? { ...opt, description: val } : opt);
2029
+ questions[questionKey] = { ...q, options };
2030
+ this.updateDecisionConfig({ ...currentConfig, questions });
2031
+ }
2032
+ /**
2033
+ * An option value field's `change` event: renames the option and every path condition that compares
2034
+ * the question's answer with it.
2035
+ *
2036
+ * Refused — nothing stored, nothing rewritten — when the value is empty, is another option's value,
2037
+ * or holds characters no condition literal can carry verbatim (a backslash, a line break, or both
2038
+ * kinds of quote). A refused value stays in the field with {@link OptionValueError} beneath it.
2039
+ *
2040
+ * @returns why the value was refused, or `null`
2041
+ */
2042
+ OnChoiceOptionValueChange(questionKey, index, newValue) {
2043
+ if (!this.Step || this.ReadOnly)
2044
+ return null;
2045
+ const config = this.DecisionConfig;
2046
+ const q = config.questions[questionKey];
2047
+ if (!q || q.kind !== 'Choice' || !q.options?.[index])
2048
+ return null;
2049
+ const previous = q.options[index].value;
2050
+ const value = newValue.trim();
2051
+ const errorKey = optionErrorKey(questionKey, index);
2052
+ const problem = value === previous ? null : this.optionValueProblem(value, q.options, index);
2053
+ if (problem) {
2054
+ this.optionValueErrors.set(errorKey, problem);
2055
+ return problem;
2056
+ }
2057
+ this.optionValueErrors.delete(errorKey);
2058
+ if (value === previous)
2059
+ return null;
2060
+ const options = q.options.map((opt, i) => (i === index ? { ...opt, value } : opt));
2061
+ this.updateDecisionConfig({ ...config, questions: { ...config.questions, [questionKey]: { ...q, options } } });
2062
+ const stepKey = this.conditionsFollowKey(config.key);
2063
+ const sharedValue = q.options.some((opt, i) => i !== index && opt.value === previous);
2064
+ if (stepKey && previous && !sharedValue) {
2065
+ this.rewritePathConditions(condition => RewriteDecisionChoiceValues(condition, stepKey, questionKey, v => (v === previous ? value : undefined)));
2066
+ }
2067
+ return null;
2068
+ }
2069
+ /** Why the last change to option `index` of question `questionKey` was refused, or `null`. */
2070
+ OptionValueError(questionKey, index) {
2071
+ return this.optionValueErrors.get(optionErrorKey(questionKey, index)) ?? null;
2072
+ }
2073
+ GetChoiceCoverageHint(questionKey, options) {
2074
+ if (!this.Step)
2075
+ return '';
2076
+ return this.computeChoiceCoverageHint(this.Step.ID, this.DecisionConfig.key, questionKey, options);
2077
+ }
2078
+ OnAddScoreLevel(questionKey) {
2079
+ if (!this.Step || this.ReadOnly)
2080
+ return;
2081
+ const currentConfig = this.DecisionConfig;
2082
+ const questions = { ...currentConfig.questions };
2083
+ const q = questions[questionKey];
2084
+ if (!q || q.kind !== 'Score')
2085
+ return;
2086
+ const levels = [...(q.levels || [])];
2087
+ levels.push('');
2088
+ questions[questionKey] = { ...q, levels };
2089
+ this.updateDecisionConfig({ ...currentConfig, questions });
2090
+ }
2091
+ OnRemoveScoreLevel(questionKey, index) {
2092
+ if (!this.Step || this.ReadOnly)
2093
+ return;
2094
+ const currentConfig = this.DecisionConfig;
2095
+ const questions = { ...currentConfig.questions };
2096
+ const q = questions[questionKey];
2097
+ if (!q || q.kind !== 'Score')
2098
+ return;
2099
+ const levels = q.levels.filter((_, i) => i !== index);
2100
+ questions[questionKey] = { ...q, levels };
2101
+ this.updateDecisionConfig({ ...currentConfig, questions });
2102
+ }
2103
+ OnScoreLevelChange(questionKey, index, desc) {
2104
+ if (!this.Step || this.ReadOnly)
2105
+ return;
2106
+ const currentConfig = this.DecisionConfig;
2107
+ const questions = { ...currentConfig.questions };
2108
+ const q = questions[questionKey];
2109
+ if (!q || q.kind !== 'Score')
2110
+ return;
2111
+ const levels = q.levels.map((lvl, i) => i === index ? desc : lvl);
2112
+ questions[questionKey] = { ...q, levels };
2113
+ this.updateDecisionConfig({ ...currentConfig, questions });
2114
+ }
2115
+ OnMoveScoreLevel(questionKey, index, direction) {
2116
+ if (!this.Step || this.ReadOnly)
2117
+ return;
2118
+ const currentConfig = this.DecisionConfig;
2119
+ const questions = { ...currentConfig.questions };
2120
+ const q = questions[questionKey];
2121
+ if (!q || q.kind !== 'Score')
2122
+ return;
2123
+ const targetIndex = direction === 'up' ? index - 1 : index + 1;
2124
+ if (targetIndex < 0 || targetIndex >= q.levels.length)
2125
+ return;
2126
+ const levels = [...q.levels];
2127
+ const temp = levels[index];
2128
+ levels[index] = levels[targetIndex];
2129
+ levels[targetIndex] = temp;
2130
+ questions[questionKey] = { ...q, levels };
2131
+ this.updateDecisionConfig({ ...currentConfig, questions });
2132
+ }
2133
+ updateDecisionConfig(config) {
2134
+ if (!this.Step)
2135
+ return;
2136
+ this.Step.Configuration = JSON.stringify(config, null, 2);
2137
+ this.StepChanged.emit(this.Step);
2138
+ }
2139
+ // ── Decision step: uncommitted edits and the flow's conditions ───────
2140
+ /** The key the author is typing into a Decision step's key field, before it is committed. */
2141
+ keyDraft = null;
2142
+ /** The typed, uncommitted key for `step`, or `null` when nothing is being typed for it. */
2143
+ keyDraftFor(step) {
2144
+ return step && this.keyDraft && UUIDsEqual(this.keyDraft.StepID, step.ID) ? this.keyDraft.Value : null;
2145
+ }
2146
+ /** Why the last rename of each question was refused, by the question's current key. */
2147
+ questionKeyErrors = new Map();
2148
+ /** Why the last change to each option value was refused, by {@link optionErrorKey}. */
2149
+ optionValueErrors = new Map();
2150
+ /** Forgets everything typed but not committed. */
2151
+ clearDecisionDrafts() {
2152
+ this.keyDraft = null;
2153
+ this.questionKeyErrors.clear();
2154
+ this.optionValueErrors.clear();
2155
+ }
2156
+ /** Forgets the refused option values of one question, whose options have moved. */
2157
+ clearOptionValueErrors(questionKey) {
2158
+ for (const key of [...this.optionValueErrors.keys()]) {
2159
+ if (key.startsWith(optionErrorKey(questionKey, '')))
2160
+ this.optionValueErrors.delete(key);
2161
+ }
2162
+ }
2163
+ /** Carries a renamed question's refused option values over to its new key. */
2164
+ moveOptionValueErrors(oldKey, newKey) {
2165
+ const prefix = optionErrorKey(oldKey, '');
2166
+ for (const [key, error] of [...this.optionValueErrors]) {
2167
+ if (!key.startsWith(prefix))
2168
+ continue;
2169
+ this.optionValueErrors.delete(key);
2170
+ this.optionValueErrors.set(optionErrorKey(newKey, key.slice(prefix.length)), error);
2171
+ }
2172
+ }
2173
+ /** Why `value` cannot be the value of option `index`, or `null`. */
2174
+ optionValueProblem(value, options, index) {
2175
+ if (!value) {
2176
+ return 'An option needs a value; the decision answers with it, and paths compare against it';
2177
+ }
2178
+ if (options.some((opt, i) => i !== index && opt.value === value)) {
2179
+ return `This question already offers "${value}"`;
2180
+ }
2181
+ return DecisionConditionLiteral(value) === null
2182
+ ? 'An option value cannot hold a backslash, a line break, or both kinds of quote; a path condition could not name it'
2183
+ : null;
2184
+ }
2185
+ /**
2186
+ * The key path conditions name this step by, when they can be followed through a rename: the step has
2187
+ * a key, and no other Decision step shares it. With a shared key, which step a condition meant cannot
2188
+ * be told, so nothing is rewritten and the flow check reports the clash instead.
2189
+ */
2190
+ conditionsFollowKey(stepKey) {
2191
+ return stepKey && !this.decisionStepUsingKey(stepKey) ? stepKey : null;
2192
+ }
2193
+ /** Why `key` cannot be a question key on this step, or `null`. */
2194
+ questionKeyProblem(key, config) {
2195
+ if (!key) {
2196
+ return 'A question needs a key; path conditions read its answer by it';
2197
+ }
2198
+ if (!DECISION_QUESTION_KEY_PATTERN.test(key)) {
2199
+ return `Question key "${key}" cannot be named in a path condition; use letters, digits and underscores, not starting with a digit`;
2200
+ }
2201
+ return Object.prototype.hasOwnProperty.call(config.questions, key)
2202
+ ? `This step already asks a question keyed "${key}"`
2203
+ : null;
2204
+ }
2205
+ /** Why `key` cannot be this step's key, or `null`. The shape is the runtime's rule and wording. */
2206
+ decisionKeyProblem(key) {
2207
+ const problem = FlowDecisionKeyProblem(key);
2208
+ if (problem)
2209
+ return capitalize(problem);
2210
+ const owner = this.decisionStepUsingKey(key);
2211
+ return owner
2212
+ ? `Decision step "${owner.Name}" already uses the key "${key}"; each Decision step needs its own, so a path condition can say which one it reads`
2213
+ : null;
2214
+ }
2215
+ /**
2216
+ * Another Decision step whose configuration stores `key`, whether or not the runtime can read the rest
2217
+ * of it — a step still being written keeps its key, and sharing it would merge the two steps'
2218
+ * conditions once both run.
2219
+ */
2220
+ decisionStepUsingKey(key) {
2221
+ return this.AllSteps.find(s => s.StepType === 'Decision' && !UUIDsEqual(s.ID, this.Step?.ID) && ReadDecisionStepKey(s.Configuration) === key) ?? null;
2222
+ }
2223
+ /** Applies `rewrite` to every path condition in the flow, and reports each path it changes. */
2224
+ rewritePathConditions(rewrite) {
2225
+ for (const path of this.AllPaths) {
2226
+ if (!path.Condition)
2227
+ continue;
2228
+ const rewritten = rewrite(path.Condition);
2229
+ if (rewritten !== path.Condition) {
2230
+ path.Condition = rewritten;
2231
+ this.PathChanged.emit(path);
2232
+ }
2233
+ }
2234
+ }
2235
+ // ── Route on Answer (Path Helper) ─────────────────────────
2236
+ routeQuestionKey = '';
2237
+ routeChoiceOption = '';
2238
+ routeThresholdText = '0.8';
2239
+ routeScoreLevelIndex = 0;
2240
+ get OriginDecisionStep() {
2241
+ if (!this.PathEntity?.OriginStepID)
2242
+ return null;
2243
+ const step = this.AllSteps.find(s => UUIDsEqual(s.ID, this.PathEntity.OriginStepID));
2244
+ return step?.StepType === 'Decision' ? step : null;
2245
+ }
2246
+ get OriginDecisionConfig() {
2247
+ return ReadEditableDecisionConfig(this.OriginDecisionStep?.Configuration);
2248
+ }
2249
+ get OriginDecisionQuestions() {
2250
+ const config = this.OriginDecisionConfig;
2251
+ if (!config?.questions)
2252
+ return [];
2253
+ return Object.entries(config.questions).map(([key, question]) => ({ key, question }));
2254
+ }
2255
+ get SelectedRouteQuestionKey() {
2256
+ const list = this.OriginDecisionQuestions;
2257
+ if (list.length === 0)
2258
+ return '';
2259
+ if (this.routeQuestionKey && list.some(q => q.key === this.routeQuestionKey)) {
2260
+ return this.routeQuestionKey;
2261
+ }
2262
+ return list[0].key;
2263
+ }
2264
+ get RouteSelectedQuestion() {
2265
+ const key = this.SelectedRouteQuestionKey;
2266
+ if (!key)
2267
+ return null;
2268
+ const config = this.OriginDecisionConfig;
2269
+ return config?.questions?.[key] ?? null;
2270
+ }
2271
+ get RouteChoiceOptions() {
2272
+ const q = this.RouteSelectedQuestion;
2273
+ return q ? this.ChoiceOptionsOf(q) : [];
2274
+ }
2275
+ get SelectedRouteChoiceOption() {
2276
+ const options = this.RouteChoiceOptions;
2277
+ if (options.length === 0)
2278
+ return '';
2279
+ if (this.routeChoiceOption && options.some(o => o.value === this.routeChoiceOption)) {
2280
+ return this.routeChoiceOption;
2281
+ }
2282
+ return options[0].value;
2283
+ }
2284
+ get RouteScoreLevels() {
2285
+ const q = this.RouteSelectedQuestion;
2286
+ return q ? this.ScoreLevelsOf(q) : [];
2287
+ }
2288
+ /** The threshold field's text, as typed — kept as text so an unfinished entry is not rewritten under the author. */
2289
+ get RouteThresholdText() {
2290
+ return this.routeThresholdText;
2291
+ }
2292
+ /** The chosen minimum Score level. */
2293
+ get RouteScoreLevelIndex() {
2294
+ return this.routeScoreLevelIndex;
2295
+ }
2296
+ /**
2297
+ * The Likelihood threshold typed, or `null` when there is none to use: an empty field is no threshold,
2298
+ * not zero (`probability >= 0` would take the path on every answer), and a probability outside 0..1
2299
+ * could never, or would always, be met.
2300
+ */
2301
+ get RouteLikelihoodThreshold() {
2302
+ const text = this.routeThresholdText.trim();
2303
+ const threshold = text === '' ? NaN : Number(text);
2304
+ return Number.isFinite(threshold) && threshold >= 0 && threshold <= 1 ? threshold : null;
2305
+ }
2306
+ get RouteChoiceCoverageHint() {
2307
+ const origin = this.OriginDecisionStep;
2308
+ const config = this.OriginDecisionConfig;
2309
+ const qKey = this.SelectedRouteQuestionKey;
2310
+ const q = this.RouteSelectedQuestion;
2311
+ if (!origin || !config || !qKey || !q || q.kind !== 'Choice')
2312
+ return '';
2313
+ return this.computeChoiceCoverageHint(origin.ID, config.key, qKey, q.options || []);
2314
+ }
2315
+ /**
2316
+ * Why the helper cannot write a condition for the current choices, or `null` when it can (or there is
2317
+ * nothing to route on yet).
2318
+ */
2319
+ get RouteConditionProblem() {
2320
+ return this.buildRouteCondition().Problem;
2321
+ }
2322
+ OnRouteQuestionChange(key) {
2323
+ this.routeQuestionKey = key;
2324
+ this.routeChoiceOption = '';
2325
+ this.routeScoreLevelIndex = 0;
2326
+ }
2327
+ OnRouteChoiceOptionChange(option) {
2328
+ this.routeChoiceOption = option;
2329
+ }
2330
+ /** The threshold field's `input` event, with the text as typed. */
2331
+ OnRouteLikelihoodThresholdChange(text) {
2332
+ this.routeThresholdText = text;
2333
+ }
2334
+ OnRouteScoreLevelChange(index) {
2335
+ this.routeScoreLevelIndex = index;
2336
+ }
2337
+ /** The condition the helper would write, or `''` when it cannot write one ({@link RouteConditionProblem} says why). */
2338
+ GetGeneratedRouteCondition() {
2339
+ return this.buildRouteCondition().Condition;
2340
+ }
2341
+ ApplyRouteCondition() {
2342
+ if (!this.PathEntity || this.ReadOnly)
2343
+ return;
2344
+ const cond = this.GetGeneratedRouteCondition();
2345
+ if (cond) {
2346
+ this.PathEntity.Condition = cond;
2347
+ this.PathChanged.emit(this.PathEntity);
2348
+ }
2349
+ }
2350
+ /**
2351
+ * The condition for the current choices, written with the runtime's own writers so the runtime reads
2352
+ * back exactly the step, question and option chosen: a name that cannot follow a dot is bracketed,
2353
+ * and an option is quoted with a quote it does not contain.
2354
+ */
2355
+ buildRouteCondition() {
2356
+ const none = (problem = null) => ({ Condition: '', Problem: problem });
2357
+ const config = this.OriginDecisionConfig;
2358
+ const qKey = this.SelectedRouteQuestionKey;
2359
+ const q = this.RouteSelectedQuestion;
2360
+ if (!config || !qKey || !q)
2361
+ return none();
2362
+ if (!config.key)
2363
+ return none('This Decision step has no key yet; give it one before routing on its answers');
2364
+ const field = q.kind === 'Likelihood' ? 'probability' : 'value';
2365
+ const reference = DecisionReferenceText(config.key, qKey, field);
2366
+ if (!reference) {
2367
+ return none(`The key "${config.key}" or question "${qKey}" cannot be written in a condition; rename it using letters, digits and underscores`);
2368
+ }
2369
+ switch (q.kind) {
2370
+ case 'Choice': return this.choiceRouteCondition(reference);
2371
+ case 'Likelihood': {
2372
+ const threshold = this.RouteLikelihoodThreshold;
2373
+ return threshold === null
2374
+ ? none('Enter a probability threshold from 0 to 1')
2375
+ : { Condition: `${reference} >= ${threshold}`, Problem: null };
2376
+ }
2377
+ case 'Score': {
2378
+ const index = this.routeScoreLevelIndex;
2379
+ return index >= 0 && index < this.RouteScoreLevels.length
2380
+ ? { Condition: `${reference} >= ${index}`, Problem: null }
2381
+ : none('Choose the lowest level this path takes');
2382
+ }
2383
+ default:
2384
+ return none();
2385
+ }
2386
+ }
2387
+ choiceRouteCondition(reference) {
2388
+ const option = this.SelectedRouteChoiceOption;
2389
+ if (!option)
2390
+ return { Condition: '', Problem: 'This question has no options to route on yet' };
2391
+ const literal = DecisionConditionLiteral(option);
2392
+ return literal
2393
+ ? { Condition: `${reference} === ${literal}`, Problem: null }
2394
+ : { Condition: '', Problem: `The option "${option}" cannot be written in a condition: it holds a backslash, a line break, or both kinds of quote. Rename the option to route on it` };
2395
+ }
2396
+ computeChoiceCoverageHint(stepId, stepKey, questionKey, options) {
2397
+ if (!options || options.length === 0)
2398
+ return '';
2399
+ const outgoingPaths = this.AllPaths.filter(p => UUIDsEqual(p.OriginStepID, stepId));
2400
+ const coveredValues = new Set();
2401
+ for (const p of outgoingPaths) {
2402
+ if (!p.Condition)
2403
+ continue;
2404
+ const test = DecisionChoiceTestOf(p.Condition);
2405
+ if (test && test.NodeId === stepKey && test.QuestionKey === questionKey) {
2406
+ for (const v of test.Values) {
2407
+ coveredValues.add(v);
2408
+ }
2409
+ }
2410
+ }
2411
+ const allValues = options.map(o => o.value);
2412
+ const missing = allValues.filter(v => !coveredValues.has(v));
2413
+ const coveredCount = allValues.length - missing.length;
2414
+ if (missing.length === 0) {
2415
+ return `Paths cover all ${allValues.length} options`;
2416
+ }
2417
+ return `Paths cover ${coveredCount} of ${allValues.length} options (missing: ${missing.join(', ')})`;
2418
+ }
1000
2419
  // ── Section Collapse ──────────────────────────────────────
1001
2420
  ToggleSection(sectionId) {
1002
2421
  this.collapsedSections[sectionId] = !this.collapsedSections[sectionId];
@@ -1127,6 +2546,10 @@ export class AgentPropertiesPanelComponent {
1127
2546
  CheckedValue(event) {
1128
2547
  return event.target.checked;
1129
2548
  }
2549
+ /** Blurs the event's target, so Enter commits a field the way leaving it does. */
2550
+ BlurTarget(event) {
2551
+ event.target.blur();
2552
+ }
1130
2553
  /** Safely extract numeric value from a number input event */
1131
2554
  NumericValue(event) {
1132
2555
  return +event.target.value;
@@ -1143,10 +2566,10 @@ export class AgentPropertiesPanelComponent {
1143
2566
  }
1144
2567
  }
1145
2568
  static ɵfac = function AgentPropertiesPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || AgentPropertiesPanelComponent)(); };
1146
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentPropertiesPanelComponent, selectors: [["mj-agent-properties-panel"]], inputs: { Step: "Step", SelectedConnection: "SelectedConnection", PathEntity: "PathEntity", ReadOnly: "ReadOnly", Actions: "Actions", Prompts: "Prompts", Agents: "Agents", AllSteps: "AllSteps" }, outputs: { StepChanged: "StepChanged", PathChanged: "PathChanged", DeleteStepRequested: "DeleteStepRequested", DeletePathRequested: "DeletePathRequested", CloseRequested: "CloseRequested" }, standalone: false, decls: 4, vars: 3, consts: [[1, "mj-agent-props"], ["Icon", "fa-solid fa-arrow-pointer", "Title", "No selection", "Message", "Select a step or connection to view its properties", 1, "mj-agent-props-empty"], [1, "mj-agent-props-header", "mj-agent-props-header--step"], [1, "mj-agent-props-header-top"], [1, "mj-agent-props-header-label"], ["title", "Close", 1, "mj-agent-props-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "mj-agent-props-identity"], [1, "mj-agent-props-identity-icon"], [1, "fa-solid", 3, "ngClass"], [1, "mj-agent-props-identity-info"], [1, "mj-agent-props-identity-name"], [1, "mj-agent-props-identity-meta"], [1, "mj-agent-props-type-pill"], [1, "mj-agent-props-status-dot"], [1, "mj-agent-props-status-label"], [1, "mj-agent-props-start-badge"], [1, "mj-agent-props-content"], ["Size", "sm", 1, "mj-agent-props-accordion", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], ["Size", "sm", 1, "mj-agent-props-accordion", 3, "FlushBody", "Expanded"], [1, "mj-agent-props-section", "mj-agent-props-danger"], [1, "mj-agent-props-section-body"], [1, "mj-agent-props-field"], ["type", "text", "placeholder", "Step name...", 1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-readonly-value"], ["placeholder", "Optional description...", "rows", "2", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "value"], [1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-field", "mj-agent-props-field--row"], ["type", "text", "placeholder", "Step name...", 1, "mj-agent-props-input", 3, "input", "value"], ["placeholder", "Optional description...", "rows", "2", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "input", "value"], [1, "mj-agent-props-input", 3, "change", "value"], ["value", "Active"], ["value", "Disabled"], ["value", "Pending"], [1, "mj-agent-props-checkbox-label"], ["type", "checkbox", 3, "change", "checked"], ["value", "Action"], ["value", "Prompt"], ["value", "Sub-Agent"], ["value", ""], [3, "value"], ["language", "json", "setup", "minimal", 3, "change", "value", "readonly", "lineWrapping"], ["language", "json", "setup", "minimal", "placeholder", "Enter JSON input mapping...", 3, "change", "value", "readonly", "lineWrapping"], ["language", "json", "setup", "minimal", "placeholder", "Enter JSON output mapping...", 3, "change", "value", "readonly", "lineWrapping"], ["type", "number", "min", "1", 1, "mj-agent-props-input", 3, "value"], ["value", "fail"], ["value", "continue"], ["value", "retry"], ["type", "number", "min", "0", "max", "10", 1, "mj-agent-props-input", 3, "value"], ["type", "number", "min", "0", "max", "10", 1, "mj-agent-props-input", 3, "input", "value"], ["type", "number", "min", "1", 1, "mj-agent-props-input", 3, "input", "value"], [1, "mj-agent-props-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "mj-agent-props-header", "mj-agent-props-header--path"], [1, "mj-agent-props-identity-icon", "mj-agent-props-identity-icon--path"], [1, "fa-solid", "fa-arrow-right"], [1, "mj-agent-props-path-route"], [1, "mj-agent-props-path-step-name"], [1, "fa-solid", "fa-arrow-right", "mj-agent-props-path-arrow"], [1, "mj-agent-props-priority-badge"], [1, "mj-agent-props-readonly-value", "mj-agent-props-readonly-value--muted"], [1, "mj-agent-props-hint"], ["type", "text", "placeholder", "Path label...", 1, "mj-agent-props-input", 3, "value"], ["language", "javascript", "setup", "minimal", "placeholder", "e.g. payload.status === 'active'", 3, "value", "readonly", "lineWrapping"], ["language", "javascript", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], ["type", "number", "min", "-100", "max", "100", 1, "mj-agent-props-input", 3, "value"], ["type", "text", "placeholder", "Path label...", 1, "mj-agent-props-input", 3, "input", "value"], ["language", "javascript", "setup", "minimal", "placeholder", "e.g. payload.status === 'active'", 3, "change", "value", "readonly", "lineWrapping"], ["type", "number", "min", "-100", "max", "100", 1, "mj-agent-props-input", 3, "input", "value"]], template: function AgentPropertiesPanelComponent_Template(rf, ctx) { if (rf & 1) {
2569
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AgentPropertiesPanelComponent, selectors: [["mj-agent-properties-panel"]], inputs: { Step: "Step", SelectedConnection: "SelectedConnection", PathEntity: "PathEntity", ReadOnly: "ReadOnly", Actions: "Actions", Prompts: "Prompts", DecisionModelTypeID: "DecisionModelTypeID", Agents: "Agents", AllSteps: "AllSteps", AllPaths: "AllPaths", RunProblems: "RunProblems" }, outputs: { StepChanged: "StepChanged", PathChanged: "PathChanged", DeleteStepRequested: "DeleteStepRequested", DeletePathRequested: "DeletePathRequested", CloseRequested: "CloseRequested" }, standalone: false, decls: 4, vars: 3, consts: [[1, "mj-agent-props"], ["Icon", "fa-solid fa-arrow-pointer", "Title", "No selection", "Message", "Select a step or connection to view its properties", 1, "mj-agent-props-empty"], [1, "mj-agent-props-header", "mj-agent-props-header--step"], [1, "mj-agent-props-header-top"], [1, "mj-agent-props-header-label"], ["title", "Close", 1, "mj-agent-props-close", 3, "click"], [1, "fa-solid", "fa-times"], [1, "mj-agent-props-identity"], [1, "mj-agent-props-identity-icon"], [1, "fa-solid", 3, "ngClass"], [1, "mj-agent-props-identity-info"], [1, "mj-agent-props-identity-name"], [1, "mj-agent-props-identity-meta"], [1, "mj-agent-props-type-pill"], [1, "mj-agent-props-status-dot"], [1, "mj-agent-props-status-label"], [1, "mj-agent-props-start-badge"], [1, "mj-agent-props-content"], ["Variant", "warning", "Size", "sm", "Title", "This flow would not run", 1, "mj-agent-props-run-problems"], ["Size", "sm", 1, "mj-agent-props-accordion", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], ["Size", "sm", 1, "mj-agent-props-accordion", 3, "FlushBody", "Expanded"], [1, "mj-agent-props-section", "mj-agent-props-danger"], [1, "mj-agent-props-run-problems-list"], [1, "mj-agent-props-section-body"], [1, "mj-agent-props-field"], ["type", "text", "placeholder", "Step name...", 1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-readonly-value"], ["placeholder", "Optional description...", "rows", "2", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "value"], [1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-field", "mj-agent-props-field--row"], ["type", "text", "placeholder", "Step name...", 1, "mj-agent-props-input", 3, "input", "value"], ["placeholder", "Optional description...", "rows", "2", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "input", "value"], [1, "mj-agent-props-input", 3, "change", "value"], ["value", "Active"], ["value", "Disabled"], ["value", "Pending"], [1, "mj-agent-props-checkbox-label"], ["type", "checkbox", 3, "change", "checked"], ["value", "Action"], ["value", "Prompt"], ["value", "Sub-Agent"], ["value", ""], [3, "value"], ["language", "json", "setup", "minimal", 3, "change", "value", "readonly", "lineWrapping"], [1, "mj-agent-props-required"], ["type", "text", "placeholder", "e.g. triage", 1, "mj-agent-props-input", 3, "value", "mj-agent-props-input--error"], [1, "mj-agent-props-error"], [1, "mj-agent-props-hint"], ["type", "text", "placeholder", "payload", 1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-questions-header"], [1, "mj-agent-props-questions-label"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--sm"], [1, "mj-agent-props-questions-list"], [1, "mj-agent-props-question-card"], ["Variant", "error", "Size", "sm", "Title", "This step cannot run", 1, "mj-agent-props-run-problems", 3, "Message"], ["type", "text", "placeholder", "e.g. triage", 1, "mj-agent-props-input", 3, "input", "change", "keydown.enter", "value"], ["type", "text", "placeholder", "payload", 1, "mj-agent-props-input", 3, "input", "value"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "mj-agent-props-question-card-header"], [1, "mj-agent-props-question-card-title"], [1, "fa-solid", "fa-question-circle"], [1, "mj-agent-props-question-kind-badge"], ["type", "button", "title", "Remove Question", 1, "mj-agent-props-icon-btn", "mj-agent-props-icon-btn--danger"], [1, "mj-agent-props-question-card-body"], ["type", "text", 1, "mj-agent-props-input", 3, "value", "mj-agent-props-input--error"], ["rows", "2", "placeholder", "Full sentence instructions for the model...", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "value"], ["type", "number", "min", "0", "max", "1", "step", "0.05", "placeholder", "e.g. 0.8", 1, "mj-agent-props-input", 3, "value"], [1, "mj-agent-props-options-section"], [1, "mj-agent-props-levels-section"], ["type", "button", "title", "Remove Question", 1, "mj-agent-props-icon-btn", "mj-agent-props-icon-btn--danger", 3, "click"], [1, "fa-solid", "fa-trash"], ["type", "text", 1, "mj-agent-props-input", 3, "change", "keydown.enter", "value"], ["value", "Likelihood"], ["value", "Choice"], ["value", "Score"], ["rows", "2", "placeholder", "Full sentence instructions for the model...", 1, "mj-agent-props-input", "mj-agent-props-textarea", 3, "input", "value"], ["type", "number", "min", "0", "max", "1", "step", "0.05", "placeholder", "e.g. 0.8", 1, "mj-agent-props-input", 3, "input", "value"], [1, "mj-agent-props-options-header"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--xs"], [1, "mj-agent-props-coverage-hint"], [1, "fa-solid", "fa-code-fork"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--xs", 3, "click"], [1, "mj-agent-props-option-row"], ["type", "text", "placeholder", "Value (e.g. billing)", 1, "mj-agent-props-input", "mj-agent-props-input--sm", 3, "change", "keydown.enter", "value", "readonly"], ["type", "text", "placeholder", "Description for model...", 1, "mj-agent-props-input", "mj-agent-props-input--sm", 3, "input", "value", "readonly"], ["type", "button", "title", "Remove Option", 1, "mj-agent-props-icon-btn", "mj-agent-props-icon-btn--danger"], ["type", "button", "title", "Remove Option", 1, "mj-agent-props-icon-btn", "mj-agent-props-icon-btn--danger", 3, "click"], [1, "mj-agent-props-level-row"], [1, "mj-agent-props-level-badge"], ["type", "text", "placeholder", "Description for level...", 1, "mj-agent-props-input", "mj-agent-props-input--sm", 3, "input", "value", "readonly"], ["type", "button", "title", "Move Up", 1, "mj-agent-props-icon-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-arrow-up"], ["type", "button", "title", "Move Down", 1, "mj-agent-props-icon-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-arrow-down"], ["type", "button", "title", "Remove Level", 1, "mj-agent-props-icon-btn", "mj-agent-props-icon-btn--danger", 3, "click"], ["language", "json", "setup", "minimal", "placeholder", "Enter JSON input mapping...", 3, "change", "value", "readonly", "lineWrapping"], ["language", "json", "setup", "minimal", "placeholder", "Enter JSON output mapping...", 3, "change", "value", "readonly", "lineWrapping"], ["type", "number", "min", "1", 1, "mj-agent-props-input", 3, "value"], ["value", "fail"], ["value", "continue"], ["value", "retry"], ["type", "number", "min", "0", "max", "10", 1, "mj-agent-props-input", 3, "value"], ["type", "number", "min", "0", "max", "10", 1, "mj-agent-props-input", 3, "input", "value"], ["type", "number", "min", "1", 1, "mj-agent-props-input", 3, "input", "value"], [1, "mj-agent-props-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "mj-agent-props-header", "mj-agent-props-header--path"], [1, "mj-agent-props-identity-icon", "mj-agent-props-identity-icon--path"], [1, "fa-solid", "fa-arrow-right"], [1, "mj-agent-props-path-route"], [1, "mj-agent-props-path-step-name"], [1, "fa-solid", "fa-arrow-right", "mj-agent-props-path-arrow"], [1, "mj-agent-props-priority-badge"], [1, "mj-agent-props-readonly-value", "mj-agent-props-readonly-value--muted"], ["type", "text", "placeholder", "Path label...", 1, "mj-agent-props-input", 3, "value"], ["language", "javascript", "setup", "minimal", "placeholder", "e.g. payload.status === 'active'", 3, "value", "readonly", "lineWrapping"], ["language", "javascript", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], ["Variant", "warning", "Size", "sm", "Title", "This condition would stop the flow", 1, "mj-agent-props-run-problems"], [1, "mj-agent-props-route-helper"], ["type", "number", "min", "-100", "max", "100", 1, "mj-agent-props-input", 3, "value"], ["type", "text", "placeholder", "Path label...", 1, "mj-agent-props-input", 3, "input", "value"], ["language", "javascript", "setup", "minimal", "placeholder", "e.g. payload.status === 'active'", 3, "change", "value", "readonly", "lineWrapping"], [1, "mj-agent-props-route-helper-header"], [1, "mj-agent-props-route-helper-title"], [1, "fa-solid", "fa-wand-magic-sparkles"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--secondary", 3, "disabled"], ["type", "number", "min", "0", "max", "1", "step", "0.05", 1, "mj-agent-props-input", 3, "input", "value"], ["type", "button", 1, "mj-agent-props-btn", "mj-agent-props-btn--secondary", 3, "click", "disabled"], [1, "fa-solid", "fa-code"], ["type", "number", "min", "-100", "max", "100", 1, "mj-agent-props-input", 3, "input", "value"]], template: function AgentPropertiesPanelComponent_Template(rf, ctx) { if (rf & 1) {
1147
2570
  i0.ɵɵelementStart(0, "div", 0);
1148
2571
  i0.ɵɵconditionalCreate(1, AgentPropertiesPanelComponent_Conditional_1_Template, 1, 0, "mj-empty-state", 1);
1149
- i0.ɵɵconditionalCreate(2, AgentPropertiesPanelComponent_Conditional_2_Template, 31, 23);
2572
+ i0.ɵɵconditionalCreate(2, AgentPropertiesPanelComponent_Conditional_2_Template, 32, 24);
1150
2573
  i0.ɵɵconditionalCreate(3, AgentPropertiesPanelComponent_Conditional_3_Template, 28, 17);
1151
2574
  i0.ɵɵelementEnd();
1152
2575
  } if (rf & 2) {
@@ -1156,11 +2579,11 @@ export class AgentPropertiesPanelComponent {
1156
2579
  i0.ɵɵconditional(ctx.isStepSelected ? 2 : -1);
1157
2580
  i0.ɵɵadvance();
1158
2581
  i0.ɵɵconditional(ctx.isConnectionSelected ? 3 : -1);
1159
- } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.CodeEditorComponent, i4.MJEmptyStateComponent, i4.MJAccordionPanelComponent, i4.MJAccordionTitleDirective, i4.MJAccordionBodyDirective], styles: ["/* ============================================================\n Agent Properties Panel \u2014 Step/Connection configuration\n ============================================================ */\n\n.mj-agent-props {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.mj-agent-props *,\n.mj-agent-props *::before,\n.mj-agent-props *::after {\n box-sizing: border-box;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-header {\n flex-shrink: 0;\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n border-left: 3px solid transparent;\n}\n\n.mj-agent-props-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.mj-agent-props-header-label {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-close:hover { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n\n/* \u2500\u2500 Identity Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-identity {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.mj-agent-props-identity-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--mj-radius-md);\n color: white;\n font-size: var(--mj-text-sm);\n flex-shrink: 0;\n}\n\n.mj-agent-props-identity-icon--path {\n border-radius: var(--mj-radius-full);\n width: 28px;\n height: 28px;\n min-width: 28px;\n font-size: 11px;\n}\n\n.mj-agent-props-identity-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.mj-agent-props-identity-name {\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n word-break: break-word;\n}\n\n.mj-agent-props-identity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-type-pill {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: var(--mj-radius-sm);\n line-height: 1.6;\n}\n\n.mj-agent-props-status-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: var(--mj-radius-full);\n flex-shrink: 0;\n}\n\n.mj-agent-props-status-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-agent-props-start-badge {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 600;\n color: #059669;\n background: #ecfdf5;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm);\n letter-spacing: 0.2px;\n}\n\n.mj-agent-props-priority-badge {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2500\u2500 Path Route Display \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-path-route {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-path-step-name {\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-agent-props-path-arrow {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n flex: 1;\n}\n\n.mj-agent-props-empty i { font-size: 28px; color: var(--mj-border-strong); margin-bottom: 12px; }\n.mj-agent-props-empty p { font-size: var(--mj-text-sm); color: var(--mj-text-disabled); margin: 0; }\n\n/* \u2500\u2500 Scrollable Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-content {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 16px;\n}\n\n/* \u2500\u2500 Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-section {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-section:last-child { border-bottom: none; }\n\n/* Section headers are now <mj-accordion-panel>; the bespoke section-header /\n section-title chrome was removed so the accordion owns the title styling. */\n.mj-agent-props-section-body {\n padding: 12px 14px;\n}\n\n/* \u2500\u2500 Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field {\n margin-bottom: 12px;\n}\n\n.mj-agent-props-field label {\n display: block;\n font-size: var(--mj-text-xs);\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n.mj-agent-props-field--row {\n display: flex;\n align-items: center;\n}\n\n.mj-agent-props-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.15s ease;\n outline: none;\n font-family: inherit;\n}\n\n.mj-agent-props-input:focus { border-color: var(--mj-brand-primary); }\n.mj-agent-props-input:focus-visible { box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); }\n\n/* Select dropdown with consistent cross-browser styling */\nselect.mj-agent-props-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n cursor: pointer;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 48px;\n}\n\n.mj-agent-props-checkbox-label {\n display: flex !important;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.mj-agent-props-checkbox-label input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n/* \u2500\u2500 Read-only Values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-readonly-value {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n padding: 6px 10px;\n min-height: 34px;\n word-break: break-word;\n}\n\n.mj-agent-props-readonly-value--muted {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* \u2500\u2500 Code Editor in Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field mj-code-editor {\n display: block;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n min-height: 60px;\n max-height: 200px;\n}\n\n.mj-agent-props-field mj-code-editor .cm-editor {\n font-size: var(--mj-text-xs);\n}\n\n/* \u2500\u2500 Hints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-hint {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 3px;\n}\n\n/* \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-danger {\n padding: 12px 14px;\n}\n\n.mj-agent-props-delete-btn {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #fecaca;\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-error-subtle);\n color: var(--mj-status-error);\n font-size: var(--mj-text-sm);\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-delete-btn:hover { background: var(--mj-status-error-subtle); border-color: #fca5a5; }\n\n.mj-agent-props-delete-btn i { font-size: var(--mj-text-xs); }\n"], encapsulation: 2 });
2582
+ } }, dependencies: [i1.NgClass, i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i3.CodeEditorComponent, i4.MJEmptyStateComponent, i4.MJAlertComponent, i4.MJAccordionPanelComponent, i4.MJAccordionTitleDirective, i4.MJAccordionBodyDirective], styles: ["/* ============================================================\n Agent Properties Panel \u2014 Step/Connection configuration\n ============================================================ */\n\n.mj-agent-props {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.mj-agent-props *,\n.mj-agent-props *::before,\n.mj-agent-props *::after {\n box-sizing: border-box;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-header {\n flex-shrink: 0;\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n border-left: 3px solid transparent;\n}\n\n.mj-agent-props-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.mj-agent-props-header-label {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-close:hover { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n\n/* \u2500\u2500 Identity Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-identity {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.mj-agent-props-identity-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--mj-radius-md);\n color: white;\n font-size: var(--mj-text-sm);\n flex-shrink: 0;\n}\n\n.mj-agent-props-identity-icon--path {\n border-radius: var(--mj-radius-full);\n width: 28px;\n height: 28px;\n min-width: 28px;\n font-size: 11px;\n}\n\n.mj-agent-props-identity-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.mj-agent-props-identity-name {\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n word-break: break-word;\n}\n\n.mj-agent-props-identity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-type-pill {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: var(--mj-radius-sm);\n line-height: 1.6;\n}\n\n.mj-agent-props-status-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: var(--mj-radius-full);\n flex-shrink: 0;\n}\n\n.mj-agent-props-status-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-agent-props-start-badge {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 600;\n color: #059669;\n background: #ecfdf5;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm);\n letter-spacing: 0.2px;\n}\n\n.mj-agent-props-priority-badge {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2500\u2500 Path Route Display \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-path-route {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-path-step-name {\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-agent-props-path-arrow {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n flex: 1;\n}\n\n.mj-agent-props-empty i { font-size: 28px; color: var(--mj-border-strong); margin-bottom: 12px; }\n.mj-agent-props-empty p { font-size: var(--mj-text-sm); color: var(--mj-text-disabled); margin: 0; }\n\n/* \u2500\u2500 Scrollable Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-content {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 16px;\n}\n\n/* \u2500\u2500 Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-section {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-section:last-child { border-bottom: none; }\n\n/* Section headers are now <mj-accordion-panel>; the bespoke section-header /\n section-title chrome was removed so the accordion owns the title styling. */\n.mj-agent-props-section-body {\n padding: 12px 14px;\n}\n\n/* \u2500\u2500 Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field {\n margin-bottom: 12px;\n}\n\n.mj-agent-props-field label {\n display: block;\n font-size: var(--mj-text-xs);\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n.mj-agent-props-field--row {\n display: flex;\n align-items: center;\n}\n\n.mj-agent-props-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.15s ease;\n outline: none;\n font-family: inherit;\n}\n\n.mj-agent-props-input:focus { border-color: var(--mj-brand-primary); }\n.mj-agent-props-input:focus-visible { box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); }\n\n/* Select dropdown with consistent cross-browser styling */\nselect.mj-agent-props-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n cursor: pointer;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 48px;\n}\n\n.mj-agent-props-checkbox-label {\n display: flex !important;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.mj-agent-props-checkbox-label input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n/* \u2500\u2500 Read-only Values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-readonly-value {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n padding: 6px 10px;\n min-height: 34px;\n word-break: break-word;\n}\n\n.mj-agent-props-readonly-value--muted {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* \u2500\u2500 Code Editor in Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field mj-code-editor {\n display: block;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n min-height: 60px;\n max-height: 200px;\n}\n\n.mj-agent-props-field mj-code-editor .cm-editor {\n font-size: var(--mj-text-xs);\n}\n\n/* \u2500\u2500 Hints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-hint {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 3px;\n}\n\n/* \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-danger {\n padding: 12px 14px;\n}\n\n.mj-agent-props-delete-btn {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n font-size: var(--mj-text-sm);\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n}\n\n.mj-agent-props-delete-btn i { font-size: var(--mj-text-xs); }\n\n/* \u2500\u2500 Decision Step & Route Helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-required {\n color: var(--mj-status-error);\n}\n\n.mj-agent-props-input--error {\n border-color: var(--mj-status-error);\n}\n\n.mj-agent-props-error {\n display: block;\n font-size: 11px;\n color: var(--mj-status-error);\n margin-top: 3px;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 52px;\n font-family: inherit;\n line-height: 1.4;\n}\n\n.mj-agent-props-questions-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 14px;\n margin-bottom: 8px;\n}\n\n.mj-agent-props-questions-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.mj-agent-props-questions-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.mj-agent-props-question-card {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.mj-agent-props-question-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-card-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n}\n\n.mj-agent-props-question-card-title code {\n font-size: 11px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-kind-badge {\n font-size: 10px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-card-body {\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-agent-props-options-section,\n.mj-agent-props-levels-section {\n border-top: 1px solid var(--mj-border-subtle);\n padding-top: 8px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.mj-agent-props-options-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.mj-agent-props-option-row,\n.mj-agent-props-level-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-agent-props-level-badge {\n font-size: 11px;\n font-weight: 700;\n width: 18px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n.mj-agent-props-input--sm {\n height: 28px;\n font-size: var(--mj-text-xs);\n padding: 4px 8px;\n}\n\n.mj-agent-props-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n border-radius: var(--mj-radius-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.mj-agent-props-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-agent-props-btn--sm {\n height: 26px;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-agent-props-btn--xs {\n height: 22px;\n padding: 1px 6px;\n font-size: 11px;\n}\n\n.mj-agent-props-btn--secondary {\n background: var(--mj-bg-surface);\n border-color: var(--mj-border-default);\n font-size: var(--mj-text-xs);\n padding: 6px 12px;\n width: 100%;\n margin-top: 4px;\n}\n\n.mj-agent-props-btn--secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.mj-agent-props-icon-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.mj-agent-props-icon-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.mj-agent-props-icon-btn--danger {\n color: var(--mj-status-error);\n}\n\n.mj-agent-props-icon-btn--danger:hover:not(:disabled) {\n background: var(--mj-status-error-bg);\n}\n\n.mj-agent-props-coverage-hint {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n padding: 4px 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin-top: 2px;\n}\n\n.mj-agent-props-coverage-hint i {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-run-problems {\n display: flex;\n margin: 10px 0 0;\n}\n\n.mj-agent-props-content > .mj-agent-props-run-problems {\n margin: 10px 14px;\n}\n\n.mj-agent-props-run-problems-list {\n margin: 4px 0 0;\n padding-inline-start: 1.1rem;\n word-break: break-word;\n}\n\n.mj-agent-props-route-helper {\n margin-top: 10px;\n padding: 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-sunken);\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-agent-props-route-helper-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.mj-agent-props-route-helper-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n"], encapsulation: 2 });
1160
2583
  }
1161
2584
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AgentPropertiesPanelComponent, [{
1162
2585
  type: Component,
1163
- args: [{ standalone: false, selector: 'mj-agent-properties-panel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<div class=\"mj-agent-props\">\n\n <!-- Empty State -->\n @if (!isStepSelected && !isConnectionSelected) {\n <mj-empty-state class=\"mj-agent-props-empty\"\n Icon=\"fa-solid fa-arrow-pointer\"\n Title=\"No selection\"\n Message=\"Select a step or connection to view its properties\" />\n }\n\n <!-- ============================================ -->\n <!-- STEP PROPERTIES -->\n <!-- ============================================ -->\n @if (isStepSelected) {\n <!-- Step Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--step\"\n [style.border-left-color]=\"stepTypeColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">STEP</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon\" [style.background]=\"stepTypeColor\">\n <i class=\"fa-solid\" [ngClass]=\"stepTypeIcon\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-identity-name\">{{ Step!.Name }}</span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\" [style.color]=\"stepTypeColor\"\n [style.background]=\"stepTypeColor + '18'\">{{ stepTypeLabel }}</span>\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n <span class=\"mj-agent-props-status-label\">{{ Step!.Status }}</span>\n @if (Step!.StartingStep) {\n <span class=\"mj-agent-props-start-badge\">Start</span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- \u2500\u2500 General Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('general')\" (ExpandedChange)=\"ToggleSection('general')\">\n <ng-template mjAccordionTitle><span>General</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Name</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"Step!.Name\"\n (input)=\"OnNameChange(InputValue($event))\"\n placeholder=\"Step name...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.Name }}</div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <textarea [value]=\"Step!.Description || ''\"\n (input)=\"OnDescriptionChange(InputValue($event))\"\n placeholder=\"Optional description...\" rows=\"2\"\n class=\"mj-agent-props-input mj-agent-props-textarea\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.Description || '\u2014' }}\n </div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Status</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.Status\"\n (change)=\"OnStatusChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Active\">Active</option>\n <option value=\"Disabled\">Disabled</option>\n <option value=\"Pending\">Pending</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n {{ Step!.Status }}\n </div>\n }\n </div>\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-field mj-agent-props-field--row\">\n <label class=\"mj-agent-props-checkbox-label\">\n <input type=\"checkbox\" [checked]=\"Step!.StartingStep\"\n (change)=\"OnStartingStepChange(CheckedValue($event))\">\n Starting Step\n </label>\n </div>\n }\n @if (ReadOnly && Step!.StartingStep) {\n <div class=\"mj-agent-props-field\">\n <label>Starting Step</label>\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-start-badge\">Yes \u2014 this is the entry point</span>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Configuration Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('config')\" (ExpandedChange)=\"ToggleSection('config')\">\n <ng-template mjAccordionTitle><span>Configuration</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <!-- Loop Body Type (ForEach / While) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Body Type</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.LoopBodyType || 'Action'\"\n (change)=\"OnLoopBodyTypeChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Action\">Action</option>\n <option value=\"Prompt\">Prompt</option>\n <option value=\"Sub-Agent\">Sub-Agent</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.LoopBodyType || 'Action' }}\n </div>\n }\n </div>\n }\n <!-- Action Picker -->\n @if (showActionPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Action</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.ActionID || ''\"\n (change)=\"OnActionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Action --</option>\n @for (action of Actions; track action) {\n <option [value]=\"action.ID\">{{ action.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedActionName }}</div>\n }\n </div>\n }\n <!-- Prompt Picker -->\n @if (showPromptPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Prompt --</option>\n @for (prompt of Prompts; track prompt) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedPromptName }}</div>\n }\n </div>\n }\n <!-- Sub-Agent Picker -->\n @if (showAgentPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Sub-Agent</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.SubAgentID || ''\"\n (change)=\"OnSubAgentChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Agent --</option>\n @for (agent of Agents; track agent) {\n <option [value]=\"agent.ID\">{{ agent.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedAgentName }}</div>\n }\n </div>\n }\n <!-- Loop Configuration (JSON) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Configuration</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.Configuration)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n (change)=\"OnConfigurationChange($any($event))\">\n </mj-code-editor>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Data Mapping Section (Action steps) \u2500\u2500\u2500 -->\n @if (Step!.StepType === 'Action' || showActionPicker) {\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('mapping')\" (ExpandedChange)=\"ToggleSection('mapping')\">\n <ng-template mjAccordionTitle><span>Data Mapping</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Input Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionInputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON input mapping...\"\n (change)=\"OnInputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Output Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionOutputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON output mapping...\"\n (change)=\"OnOutputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n <!-- \u2500\u2500 Error Handling Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('errors')\" (ExpandedChange)=\"ToggleSection('errors')\">\n <ng-template mjAccordionTitle><span>Error Handling</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>On Error</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.OnErrorBehavior\"\n (change)=\"OnErrorBehaviorChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"fail\">Fail (stop flow)</option>\n <option value=\"continue\">Continue (ignore error)</option>\n <option value=\"retry\">Retry</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.OnErrorBehavior === 'fail' ? 'Fail (stop flow)' :\n Step!.OnErrorBehavior === 'continue' ? 'Continue (ignore error)' : 'Retry' }}\n </div>\n }\n </div>\n @if (Step!.OnErrorBehavior === 'retry') {\n <div class=\"mj-agent-props-field\">\n <label>Retry Count</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.RetryCount\" min=\"0\" max=\"10\"\n (input)=\"OnRetryCountChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.RetryCount }}</div>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Timeout (seconds)</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.TimeoutSeconds\" min=\"1\"\n (input)=\"OnTimeoutChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.TimeoutSeconds }}s</div>\n }\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeleteStep()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Step\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ============================================ -->\n <!-- PATH PROPERTIES -->\n <!-- ============================================ -->\n @if (isConnectionSelected) {\n <!-- Path Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--path\"\n [style.border-left-color]=\"pathAccentColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">PATH</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Path identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon mj-agent-props-identity-icon--path\"\n [style.background]=\"pathAccentColor\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-path-route\">\n <span class=\"mj-agent-props-path-step-name\">{{ originStepName }}</span>\n <i class=\"fa-solid fa-arrow-right mj-agent-props-path-arrow\"></i>\n <span class=\"mj-agent-props-path-step-name\">{{ destinationStepName }}</span>\n </span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\"\n [style.color]=\"pathAccentColor\"\n [style.background]=\"pathAccentColor + '18'\">\n {{ isConditionalPath ? 'Conditional' : 'Always' }}\n </span>\n @if (PathEntity!.Priority !== 0) {\n <span class=\"mj-agent-props-priority-badge\">\n Priority: {{ PathEntity!.Priority }}\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- \u2500\u2500 Overview Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-overview')\" (ExpandedChange)=\"ToggleSection('path-overview')\">\n <ng-template mjAccordionTitle><span>Route</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>From</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ originStepName }}\n </div>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>To</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ destinationStepName }}\n </div>\n </div>\n <span class=\"mj-agent-props-hint\">To change the route, rewire the connection on the canvas.</span>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Path Settings Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-settings')\" (ExpandedChange)=\"ToggleSection('path-settings')\">\n <ng-template mjAccordionTitle><span>Settings</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"PathEntity!.Description || ''\"\n (input)=\"OnPathDescriptionChange(InputValue($event))\"\n placeholder=\"Path label...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ PathEntity!.Description || '\u2014' }}\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">Displayed as a label on the connection line</span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Condition</label>\n @if (!ReadOnly) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition || ''\"\n language=\"javascript\"\n [readonly]=\"false\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"e.g. payload.status === 'active'\"\n (change)=\"OnPathConditionChange($any($event))\">\n </mj-code-editor>\n }\n @if (ReadOnly && PathEntity!.Condition) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition\"\n language=\"javascript\"\n [readonly]=\"true\"\n setup=\"minimal\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n }\n @if (ReadOnly && !PathEntity!.Condition) {\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n No condition (always taken)\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">\n JavaScript expression evaluated at runtime. Leave empty for unconditional.\n </span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Priority</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"PathEntity!.Priority\" min=\"-100\" max=\"100\"\n (input)=\"OnPathPriorityChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ PathEntity!.Priority }}</div>\n }\n <span class=\"mj-agent-props-hint\">Higher priority paths are evaluated first when multiple paths leave a step.</span>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeletePath()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Path\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["/* ============================================================\n Agent Properties Panel \u2014 Step/Connection configuration\n ============================================================ */\n\n.mj-agent-props {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.mj-agent-props *,\n.mj-agent-props *::before,\n.mj-agent-props *::after {\n box-sizing: border-box;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-header {\n flex-shrink: 0;\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n border-left: 3px solid transparent;\n}\n\n.mj-agent-props-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.mj-agent-props-header-label {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-close:hover { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n\n/* \u2500\u2500 Identity Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-identity {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.mj-agent-props-identity-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--mj-radius-md);\n color: white;\n font-size: var(--mj-text-sm);\n flex-shrink: 0;\n}\n\n.mj-agent-props-identity-icon--path {\n border-radius: var(--mj-radius-full);\n width: 28px;\n height: 28px;\n min-width: 28px;\n font-size: 11px;\n}\n\n.mj-agent-props-identity-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.mj-agent-props-identity-name {\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n word-break: break-word;\n}\n\n.mj-agent-props-identity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-type-pill {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: var(--mj-radius-sm);\n line-height: 1.6;\n}\n\n.mj-agent-props-status-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: var(--mj-radius-full);\n flex-shrink: 0;\n}\n\n.mj-agent-props-status-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-agent-props-start-badge {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 600;\n color: #059669;\n background: #ecfdf5;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm);\n letter-spacing: 0.2px;\n}\n\n.mj-agent-props-priority-badge {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2500\u2500 Path Route Display \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-path-route {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-path-step-name {\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-agent-props-path-arrow {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n flex: 1;\n}\n\n.mj-agent-props-empty i { font-size: 28px; color: var(--mj-border-strong); margin-bottom: 12px; }\n.mj-agent-props-empty p { font-size: var(--mj-text-sm); color: var(--mj-text-disabled); margin: 0; }\n\n/* \u2500\u2500 Scrollable Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-content {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 16px;\n}\n\n/* \u2500\u2500 Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-section {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-section:last-child { border-bottom: none; }\n\n/* Section headers are now <mj-accordion-panel>; the bespoke section-header /\n section-title chrome was removed so the accordion owns the title styling. */\n.mj-agent-props-section-body {\n padding: 12px 14px;\n}\n\n/* \u2500\u2500 Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field {\n margin-bottom: 12px;\n}\n\n.mj-agent-props-field label {\n display: block;\n font-size: var(--mj-text-xs);\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n.mj-agent-props-field--row {\n display: flex;\n align-items: center;\n}\n\n.mj-agent-props-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.15s ease;\n outline: none;\n font-family: inherit;\n}\n\n.mj-agent-props-input:focus { border-color: var(--mj-brand-primary); }\n.mj-agent-props-input:focus-visible { box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); }\n\n/* Select dropdown with consistent cross-browser styling */\nselect.mj-agent-props-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n cursor: pointer;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 48px;\n}\n\n.mj-agent-props-checkbox-label {\n display: flex !important;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.mj-agent-props-checkbox-label input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n/* \u2500\u2500 Read-only Values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-readonly-value {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n padding: 6px 10px;\n min-height: 34px;\n word-break: break-word;\n}\n\n.mj-agent-props-readonly-value--muted {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* \u2500\u2500 Code Editor in Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field mj-code-editor {\n display: block;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n min-height: 60px;\n max-height: 200px;\n}\n\n.mj-agent-props-field mj-code-editor .cm-editor {\n font-size: var(--mj-text-xs);\n}\n\n/* \u2500\u2500 Hints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-hint {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 3px;\n}\n\n/* \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-danger {\n padding: 12px 14px;\n}\n\n.mj-agent-props-delete-btn {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid #fecaca;\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-error-subtle);\n color: var(--mj-status-error);\n font-size: var(--mj-text-sm);\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-delete-btn:hover { background: var(--mj-status-error-subtle); border-color: #fca5a5; }\n\n.mj-agent-props-delete-btn i { font-size: var(--mj-text-xs); }\n"] }]
2586
+ args: [{ standalone: false, selector: 'mj-agent-properties-panel', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.Default, template: "<div class=\"mj-agent-props\">\n\n <!-- Empty State -->\n @if (!isStepSelected && !isConnectionSelected) {\n <mj-empty-state class=\"mj-agent-props-empty\"\n Icon=\"fa-solid fa-arrow-pointer\"\n Title=\"No selection\"\n Message=\"Select a step or connection to view its properties\" />\n }\n\n <!-- ============================================ -->\n <!-- STEP PROPERTIES -->\n <!-- ============================================ -->\n @if (isStepSelected) {\n <!-- Step Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--step\"\n [style.border-left-color]=\"stepTypeColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">STEP</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon\" [style.background]=\"stepTypeColor\">\n <i class=\"fa-solid\" [ngClass]=\"stepTypeIcon\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-identity-name\">{{ Step!.Name }}</span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\" [style.color]=\"stepTypeColor\"\n [style.background]=\"stepTypeColor + '18'\">{{ stepTypeLabel }}</span>\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n <span class=\"mj-agent-props-status-label\">{{ Step!.Status }}</span>\n @if (Step!.StartingStep) {\n <span class=\"mj-agent-props-start-badge\">Start</span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- The flow run check's problems on this step (the runtime compiler's and validator's). -->\n @if (StepRunProblemMessages.length > 0) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"warning\" Size=\"sm\" Title=\"This flow would not run\">\n <ul class=\"mj-agent-props-run-problems-list\">\n @for (message of StepRunProblemMessages; track $index) {\n <li>{{ message }}</li>\n }\n </ul>\n </mj-alert>\n }\n <!-- \u2500\u2500 General Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('general')\" (ExpandedChange)=\"ToggleSection('general')\">\n <ng-template mjAccordionTitle><span>General</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Name</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"Step!.Name\"\n (input)=\"OnNameChange(InputValue($event))\"\n placeholder=\"Step name...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.Name }}</div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <textarea [value]=\"Step!.Description || ''\"\n (input)=\"OnDescriptionChange(InputValue($event))\"\n placeholder=\"Optional description...\" rows=\"2\"\n class=\"mj-agent-props-input mj-agent-props-textarea\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.Description || '\u2014' }}\n </div>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Status</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.Status\"\n (change)=\"OnStatusChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Active\">Active</option>\n <option value=\"Disabled\">Disabled</option>\n <option value=\"Pending\">Pending</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-status-dot\" [style.background]=\"statusColor\"></span>\n {{ Step!.Status }}\n </div>\n }\n </div>\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-field mj-agent-props-field--row\">\n <label class=\"mj-agent-props-checkbox-label\">\n <input type=\"checkbox\" [checked]=\"Step!.StartingStep\"\n (change)=\"OnStartingStepChange(CheckedValue($event))\">\n Starting Step\n </label>\n </div>\n }\n @if (ReadOnly && Step!.StartingStep) {\n <div class=\"mj-agent-props-field\">\n <label>Starting Step</label>\n <div class=\"mj-agent-props-readonly-value\">\n <span class=\"mj-agent-props-start-badge\">Yes \u2014 this is the entry point</span>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Configuration Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('config')\" (ExpandedChange)=\"ToggleSection('config')\">\n <ng-template mjAccordionTitle><span>Configuration</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <!-- Loop Body Type (ForEach / While) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Body Type</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.LoopBodyType || 'Action'\"\n (change)=\"OnLoopBodyTypeChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Action\">Action</option>\n <option value=\"Prompt\">Prompt</option>\n <option value=\"Sub-Agent\">Sub-Agent</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.LoopBodyType || 'Action' }}\n </div>\n }\n </div>\n }\n <!-- Action Picker -->\n @if (showActionPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Action</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.ActionID || ''\"\n (change)=\"OnActionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Action --</option>\n @for (action of Actions; track action) {\n <option [value]=\"action.ID\">{{ action.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedActionName }}</div>\n }\n </div>\n }\n <!-- Prompt Picker -->\n @if (showPromptPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Prompt --</option>\n @for (prompt of Prompts; track prompt) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedPromptName }}</div>\n }\n </div>\n }\n <!-- Sub-Agent Picker -->\n @if (showAgentPicker) {\n <div class=\"mj-agent-props-field\">\n <label>Sub-Agent</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.SubAgentID || ''\"\n (change)=\"OnSubAgentChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">-- Select Agent --</option>\n @for (agent of Agents; track agent) {\n <option [value]=\"agent.ID\">{{ agent.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ selectedAgentName }}</div>\n }\n </div>\n }\n <!-- Loop Configuration (JSON) -->\n @if (showLoopConfig) {\n <div class=\"mj-agent-props-field\">\n <label>Loop Configuration</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.Configuration)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n (change)=\"OnConfigurationChange($any($event))\">\n </mj-code-editor>\n </div>\n }\n <!-- Decision Step Properties -->\n @if (ShowDecisionConfig) {\n <!-- Key -->\n <div class=\"mj-agent-props-field\">\n <label>Key <span class=\"mj-agent-props-required\">*</span></label>\n @if (!ReadOnly) {\n <!-- Typing only records the key; it is stored, and the paths that read it follow, on\n commit (blur or Enter). -->\n <input type=\"text\" [value]=\"DecisionKeyText\"\n (input)=\"OnDecisionKeyChange(InputValue($event))\"\n (change)=\"OnDecisionKeyCommit()\"\n (keydown.enter)=\"OnDecisionKeyCommit()\"\n placeholder=\"e.g. triage\" class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"!!DecisionKeyError\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ DecisionConfig.key }}</div>\n }\n @if (DecisionKeyError) {\n <span class=\"mj-agent-props-error\">{{ DecisionKeyError }}</span>\n }\n <span class=\"mj-agent-props-hint\">Names the step in path conditions: decisions.&lt;key&gt;.&lt;question&gt;</span>\n </div>\n\n <!-- Decision Prompt -->\n <div class=\"mj-agent-props-field\">\n <label>Decision Prompt</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.PromptID || ''\"\n (change)=\"OnDecisionPromptChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"\">Default Decision (system default)</option>\n @for (prompt of DecisionPrompts; track prompt.ID) {\n <option [value]=\"prompt.ID\">{{ prompt.Name }}</option>\n }\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ SelectedDecisionPromptName }}</div>\n }\n <span class=\"mj-agent-props-hint\">Optional prompt bound to the Decision model type.</span>\n </div>\n\n <!-- State -->\n <div class=\"mj-agent-props-field\">\n <label>State</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"DecisionConfig.state ?? ''\"\n (input)=\"OnDecisionStateChange(InputValue($event))\"\n placeholder=\"payload\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ DecisionConfig.state || 'payload' }}</div>\n }\n <span class=\"mj-agent-props-hint\">What the questions are about: \"payload\" (default) or \"payload.&lt;path&gt;\"</span>\n </div>\n\n <!-- Questions List Header & Add Button -->\n <div class=\"mj-agent-props-questions-header\">\n <label class=\"mj-agent-props-questions-label\">\n Questions ({{ DecisionQuestionsList.length }})\n </label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--sm\"\n (click)=\"OnAddDecisionQuestion()\">\n <i class=\"fa-solid fa-plus\"></i> Add Question\n </button>\n }\n </div>\n\n <!-- Questions List -->\n <div class=\"mj-agent-props-questions-list\">\n @for (item of DecisionQuestionsList; track item.key) {\n <div class=\"mj-agent-props-question-card\">\n <div class=\"mj-agent-props-question-card-header\">\n <span class=\"mj-agent-props-question-card-title\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <code>{{ item.key }}</code>\n </span>\n <span class=\"mj-agent-props-question-kind-badge\">{{ item.question.kind }}</span>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Question\"\n (click)=\"OnRemoveDecisionQuestion(item.key)\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n }\n </div>\n\n <div class=\"mj-agent-props-question-card-body\">\n <!-- Question Key -->\n <div class=\"mj-agent-props-field\">\n <label>Question Key</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"item.key\"\n (change)=\"OnDecisionQuestionKeyChange(item.key, InputValue($event))\"\n (keydown.enter)=\"BlurTarget($event)\"\n class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"!!QuestionKeyError(item.key)\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.key }}</div>\n }\n @if (QuestionKeyError(item.key); as keyError) {\n <span class=\"mj-agent-props-error\">{{ keyError }}</span>\n }\n </div>\n\n <!-- Question Kind -->\n <div class=\"mj-agent-props-field\">\n <label>Kind</label>\n @if (!ReadOnly) {\n <select [value]=\"item.question.kind\"\n (change)=\"OnDecisionQuestionKindSelect(item.key, InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"Likelihood\">Likelihood (yes/no probability)</option>\n <option value=\"Choice\">Choice (pick one option)</option>\n <option value=\"Score\">Score (ordered rubric)</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.kind }}</div>\n }\n </div>\n\n <!-- Instructions -->\n <div class=\"mj-agent-props-field\">\n <label>Instructions <span class=\"mj-agent-props-required\">*</span></label>\n @if (!ReadOnly) {\n <textarea [value]=\"item.question.instructions || ''\"\n (input)=\"OnDecisionQuestionInstructionsChange(item.key, InputValue($event))\"\n rows=\"2\" class=\"mj-agent-props-input mj-agent-props-textarea\"\n placeholder=\"Full sentence instructions for the model...\"></textarea>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.instructions || '\u2014' }}</div>\n }\n </div>\n\n <!-- Min Confidence -->\n <div class=\"mj-agent-props-field\">\n <label>Min Confidence (optional, 0..1)</label>\n @if (!ReadOnly) {\n <input type=\"number\" min=\"0\" max=\"1\" step=\"0.05\"\n [value]=\"item.question.minConfidence ?? ''\"\n (input)=\"OnDecisionQuestionMinConfidenceChange(item.key, InputValue($event))\"\n placeholder=\"e.g. 0.8\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ item.question.minConfidence ?? 'None' }}</div>\n }\n </div>\n\n <!-- Choice Options -->\n @if (item.question.kind === 'Choice') {\n <div class=\"mj-agent-props-options-section\">\n <div class=\"mj-agent-props-options-header\">\n <label>Options (2..255)</label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--xs\"\n (click)=\"OnAddChoiceOption(item.key)\">\n <i class=\"fa-solid fa-plus\"></i> Add Option\n </button>\n }\n </div>\n @for (opt of ChoiceOptionsOf(item.question); track $index) {\n <div class=\"mj-agent-props-option-row\">\n <!-- Committed on change: paths compare against the value, and follow it when it is renamed. -->\n <input type=\"text\" [value]=\"opt.value\"\n [readonly]=\"ReadOnly\"\n (change)=\"OnChoiceOptionValueChange(item.key, $index, InputValue($event))\"\n (keydown.enter)=\"BlurTarget($event)\"\n placeholder=\"Value (e.g. billing)\" class=\"mj-agent-props-input mj-agent-props-input--sm\"\n [class.mj-agent-props-input--error]=\"!!OptionValueError(item.key, $index)\">\n <input type=\"text\" [value]=\"opt.description\"\n [readonly]=\"ReadOnly\"\n (input)=\"OnChoiceOptionChange(item.key, $index, 'description', InputValue($event))\"\n placeholder=\"Description for model...\" class=\"mj-agent-props-input mj-agent-props-input--sm\">\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Option\"\n (click)=\"OnRemoveChoiceOption(item.key, $index)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n @if (OptionValueError(item.key, $index); as valueError) {\n <span class=\"mj-agent-props-error\">{{ valueError }}</span>\n }\n }\n <!-- Choice Coverage Hint -->\n <div class=\"mj-agent-props-coverage-hint\">\n <i class=\"fa-solid fa-code-fork\"></i>\n <span>{{ GetChoiceCoverageHint(item.key, ChoiceOptionsOf(item.question)) }}</span>\n </div>\n </div>\n }\n\n <!-- Score Levels -->\n @if (item.question.kind === 'Score') {\n <div class=\"mj-agent-props-levels-section\">\n <div class=\"mj-agent-props-options-header\">\n <label>Levels (2..10, lowest first)</label>\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--xs\"\n (click)=\"OnAddScoreLevel(item.key)\">\n <i class=\"fa-solid fa-plus\"></i> Add Level\n </button>\n }\n </div>\n @for (level of ScoreLevelsOf(item.question); track $index) {\n <div class=\"mj-agent-props-level-row\">\n <span class=\"mj-agent-props-level-badge\">{{ $index }}</span>\n <input type=\"text\" [value]=\"level\"\n [readonly]=\"ReadOnly\"\n (input)=\"OnScoreLevelChange(item.key, $index, InputValue($event))\"\n placeholder=\"Description for level...\" class=\"mj-agent-props-input mj-agent-props-input--sm\">\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-icon-btn\"\n [disabled]=\"$first\"\n title=\"Move Up\"\n (click)=\"OnMoveScoreLevel(item.key, $index, 'up')\">\n <i class=\"fa-solid fa-arrow-up\"></i>\n </button>\n <button type=\"button\" class=\"mj-agent-props-icon-btn\"\n [disabled]=\"$last\"\n title=\"Move Down\"\n (click)=\"OnMoveScoreLevel(item.key, $index, 'down')\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n </button>\n <button type=\"button\" class=\"mj-agent-props-icon-btn mj-agent-props-icon-btn--danger\"\n title=\"Remove Level\"\n (click)=\"OnRemoveScoreLevel(item.key, $index)\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Why the runtime would refuse this step, in the runtime reader's own words -->\n @if (DecisionValidationError) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"error\" Size=\"sm\"\n Title=\"This step cannot run\" [Message]=\"DecisionValidationError\"></mj-alert>\n }\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Data Mapping Section (Action steps) \u2500\u2500\u2500 -->\n @if (Step!.StepType === 'Action' || showActionPicker) {\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('mapping')\" (ExpandedChange)=\"ToggleSection('mapping')\">\n <ng-template mjAccordionTitle><span>Data Mapping</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Input Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionInputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON input mapping...\"\n (change)=\"OnInputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Output Mapping</label>\n <mj-code-editor\n [value]=\"FormatJsonDisplay(Step!.ActionOutputMapping)\"\n language=\"json\"\n [readonly]=\"ReadOnly\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"Enter JSON output mapping...\"\n (change)=\"OnOutputMappingChange($any($event))\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n <!-- \u2500\u2500 Error Handling Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('errors')\" (ExpandedChange)=\"ToggleSection('errors')\">\n <ng-template mjAccordionTitle><span>Error Handling</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>On Error</label>\n @if (!ReadOnly) {\n <select [value]=\"Step!.OnErrorBehavior\"\n (change)=\"OnErrorBehaviorChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n <option value=\"fail\">Fail (stop flow)</option>\n <option value=\"continue\">Continue (ignore error)</option>\n <option value=\"retry\">Retry</option>\n </select>\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ Step!.OnErrorBehavior === 'fail' ? 'Fail (stop flow)' :\n Step!.OnErrorBehavior === 'continue' ? 'Continue (ignore error)' : 'Retry' }}\n </div>\n }\n </div>\n @if (Step!.OnErrorBehavior === 'retry') {\n <div class=\"mj-agent-props-field\">\n <label>Retry Count</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.RetryCount\" min=\"0\" max=\"10\"\n (input)=\"OnRetryCountChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.RetryCount }}</div>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Timeout (seconds)</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"Step!.TimeoutSeconds\" min=\"1\"\n (input)=\"OnTimeoutChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ Step!.TimeoutSeconds }}s</div>\n }\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeleteStep()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Step\n </button>\n </div>\n }\n </div>\n }\n\n <!-- ============================================ -->\n <!-- PATH PROPERTIES -->\n <!-- ============================================ -->\n @if (isConnectionSelected) {\n <!-- Path Header -->\n <div class=\"mj-agent-props-header mj-agent-props-header--path\"\n [style.border-left-color]=\"pathAccentColor\">\n <div class=\"mj-agent-props-header-top\">\n <span class=\"mj-agent-props-header-label\">PATH</span>\n <button class=\"mj-agent-props-close\" (click)=\"CloseRequested.emit()\" title=\"Close\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n <!-- Path identity card -->\n <div class=\"mj-agent-props-identity\">\n <div class=\"mj-agent-props-identity-icon mj-agent-props-identity-icon--path\"\n [style.background]=\"pathAccentColor\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"mj-agent-props-identity-info\">\n <span class=\"mj-agent-props-path-route\">\n <span class=\"mj-agent-props-path-step-name\">{{ originStepName }}</span>\n <i class=\"fa-solid fa-arrow-right mj-agent-props-path-arrow\"></i>\n <span class=\"mj-agent-props-path-step-name\">{{ destinationStepName }}</span>\n </span>\n <span class=\"mj-agent-props-identity-meta\">\n <span class=\"mj-agent-props-type-pill\"\n [style.color]=\"pathAccentColor\"\n [style.background]=\"pathAccentColor + '18'\">\n {{ isConditionalPath ? 'Conditional' : 'Always' }}\n </span>\n @if (PathEntity!.Priority !== 0) {\n <span class=\"mj-agent-props-priority-badge\">\n Priority: {{ PathEntity!.Priority }}\n </span>\n }\n </span>\n </div>\n </div>\n </div>\n <div class=\"mj-agent-props-content\">\n <!-- \u2500\u2500 Overview Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-overview')\" (ExpandedChange)=\"ToggleSection('path-overview')\">\n <ng-template mjAccordionTitle><span>Route</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>From</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ originStepName }}\n </div>\n </div>\n <div class=\"mj-agent-props-field\">\n <label>To</label>\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n {{ destinationStepName }}\n </div>\n </div>\n <span class=\"mj-agent-props-hint\">To change the route, rewire the connection on the canvas.</span>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Path Settings Section \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <mj-accordion-panel class=\"mj-agent-props-accordion\" Size=\"sm\" [FlushBody]=\"true\" [Expanded]=\"!IsSectionCollapsed('path-settings')\" (ExpandedChange)=\"ToggleSection('path-settings')\">\n <ng-template mjAccordionTitle><span>Settings</span></ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-agent-props-section-body\">\n <div class=\"mj-agent-props-field\">\n <label>Description</label>\n @if (!ReadOnly) {\n <input type=\"text\" [value]=\"PathEntity!.Description || ''\"\n (input)=\"OnPathDescriptionChange(InputValue($event))\"\n placeholder=\"Path label...\" class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">\n {{ PathEntity!.Description || '\u2014' }}\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">Displayed as a label on the connection line</span>\n }\n </div>\n <div class=\"mj-agent-props-field\">\n <label>Condition</label>\n @if (!ReadOnly) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition || ''\"\n language=\"javascript\"\n [readonly]=\"false\"\n setup=\"minimal\"\n [lineWrapping]=\"true\"\n placeholder=\"e.g. payload.status === 'active'\"\n (change)=\"OnPathConditionChange($any($event))\">\n </mj-code-editor>\n }\n @if (ReadOnly && PathEntity!.Condition) {\n <mj-code-editor\n [value]=\"PathEntity!.Condition\"\n language=\"javascript\"\n [readonly]=\"true\"\n setup=\"minimal\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n }\n @if (ReadOnly && !PathEntity!.Condition) {\n <div class=\"mj-agent-props-readonly-value mj-agent-props-readonly-value--muted\">\n No condition (always taken)\n </div>\n }\n @if (!ReadOnly) {\n <span class=\"mj-agent-props-hint\">\n JavaScript expression evaluated at runtime. Leave empty for unconditional.\n </span>\n }\n <!-- The flow run check's problems with this condition (the runtime validator's). -->\n @if (PathRunProblemMessages.length > 0) {\n <mj-alert class=\"mj-agent-props-run-problems\" Variant=\"warning\" Size=\"sm\" Title=\"This condition would stop the flow\">\n <ul class=\"mj-agent-props-run-problems-list\">\n @for (message of PathRunProblemMessages; track $index) {\n <li>{{ message }}</li>\n }\n </ul>\n </mj-alert>\n }\n </div>\n <!-- Route on Answer Helper (when origin step is a Decision step) -->\n @if (OriginDecisionStep && OriginDecisionConfig) {\n <div class=\"mj-agent-props-route-helper\">\n <div class=\"mj-agent-props-route-helper-header\">\n <span class=\"mj-agent-props-route-helper-title\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Route on Answer\n </span>\n </div>\n\n <div class=\"mj-agent-props-field\">\n <label>Decision Question</label>\n <select [value]=\"SelectedRouteQuestionKey\"\n (change)=\"OnRouteQuestionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n @for (q of OriginDecisionQuestions; track q.key) {\n <option [value]=\"q.key\">{{ q.key }} ({{ q.question.kind }})</option>\n }\n </select>\n </div>\n\n @if (RouteSelectedQuestion?.kind === 'Choice') {\n <div class=\"mj-agent-props-field\">\n <label>Choice Option</label>\n <select [value]=\"SelectedRouteChoiceOption\"\n (change)=\"OnRouteChoiceOptionChange(InputValue($event))\"\n class=\"mj-agent-props-input\">\n @for (opt of RouteChoiceOptions; track opt.value) {\n <option [value]=\"opt.value\">{{ opt.value }} \u2014 {{ opt.description }}</option>\n }\n </select>\n </div>\n @if (RouteChoiceCoverageHint) {\n <div class=\"mj-agent-props-coverage-hint\">\n <i class=\"fa-solid fa-code-fork\"></i>\n <span>{{ RouteChoiceCoverageHint }}</span>\n </div>\n }\n }\n\n @if (RouteSelectedQuestion?.kind === 'Likelihood') {\n <div class=\"mj-agent-props-field\">\n <label>Probability Threshold (0..1)</label>\n <input type=\"number\" min=\"0\" max=\"1\" step=\"0.05\"\n [value]=\"RouteThresholdText\"\n (input)=\"OnRouteLikelihoodThresholdChange(InputValue($event))\"\n class=\"mj-agent-props-input\"\n [class.mj-agent-props-input--error]=\"RouteLikelihoodThreshold === null\">\n <span class=\"mj-agent-props-hint\">Route taken when probability &gt;= threshold</span>\n </div>\n }\n\n @if (RouteSelectedQuestion?.kind === 'Score') {\n <div class=\"mj-agent-props-field\">\n <label>Minimum Level (Score &gt;= Index)</label>\n <select [value]=\"RouteScoreLevelIndex\"\n (change)=\"OnRouteScoreLevelChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n @for (level of RouteScoreLevels; track $index) {\n <option [value]=\"$index\">Level {{ $index }}: {{ level }}</option>\n }\n </select>\n </div>\n }\n\n @if (RouteConditionProblem; as routeProblem) {\n <span class=\"mj-agent-props-error\">{{ routeProblem }}</span>\n }\n\n @if (!ReadOnly) {\n <button type=\"button\" class=\"mj-agent-props-btn mj-agent-props-btn--secondary\"\n [disabled]=\"!GetGeneratedRouteCondition()\"\n (click)=\"ApplyRouteCondition()\">\n <i class=\"fa-solid fa-code\"></i> Apply to Condition\n </button>\n }\n </div>\n }\n <div class=\"mj-agent-props-field\">\n <label>Priority</label>\n @if (!ReadOnly) {\n <input type=\"number\" [value]=\"PathEntity!.Priority\" min=\"-100\" max=\"100\"\n (input)=\"OnPathPriorityChange(NumericValue($event))\"\n class=\"mj-agent-props-input\">\n }\n @if (ReadOnly) {\n <div class=\"mj-agent-props-readonly-value\">{{ PathEntity!.Priority }}</div>\n }\n <span class=\"mj-agent-props-hint\">Higher priority paths are evaluated first when multiple paths leave a step.</span>\n </div>\n </div>\n </ng-template>\n </mj-accordion-panel>\n <!-- \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!ReadOnly) {\n <div class=\"mj-agent-props-section mj-agent-props-danger\">\n <button class=\"mj-agent-props-delete-btn\" (click)=\"OnDeletePath()\">\n <i class=\"fa-solid fa-trash-can\"></i> Delete Path\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: ["/* ============================================================\n Agent Properties Panel \u2014 Step/Connection configuration\n ============================================================ */\n\n.mj-agent-props {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface);\n overflow: hidden;\n box-sizing: border-box;\n}\n\n.mj-agent-props *,\n.mj-agent-props *::before,\n.mj-agent-props *::after {\n box-sizing: border-box;\n}\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-header {\n flex-shrink: 0;\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n border-left: 3px solid transparent;\n}\n\n.mj-agent-props-header-top {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 10px;\n}\n\n.mj-agent-props-header-label {\n font-size: 10px;\n font-weight: 700;\n letter-spacing: 1.2px;\n text-transform: uppercase;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n border: none;\n border-radius: var(--mj-radius-md);\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: var(--mj-text-xs);\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-close:hover { background: var(--mj-bg-surface-sunken); color: var(--mj-text-secondary); }\n\n/* \u2500\u2500 Identity Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-identity {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n}\n\n.mj-agent-props-identity-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n min-width: 32px;\n border-radius: var(--mj-radius-md);\n color: white;\n font-size: var(--mj-text-sm);\n flex-shrink: 0;\n}\n\n.mj-agent-props-identity-icon--path {\n border-radius: var(--mj-radius-full);\n width: 28px;\n height: 28px;\n min-width: 28px;\n font-size: 11px;\n}\n\n.mj-agent-props-identity-info {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n}\n\n.mj-agent-props-identity-name {\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n word-break: break-word;\n}\n\n.mj-agent-props-identity-meta {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-type-pill {\n display: inline-flex;\n align-items: center;\n font-size: 11px;\n font-weight: 600;\n padding: 1px 7px;\n border-radius: var(--mj-radius-sm);\n line-height: 1.6;\n}\n\n.mj-agent-props-status-dot {\n display: inline-block;\n width: 7px;\n height: 7px;\n border-radius: var(--mj-radius-full);\n flex-shrink: 0;\n}\n\n.mj-agent-props-status-label {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n\n.mj-agent-props-start-badge {\n display: inline-flex;\n align-items: center;\n font-size: 10px;\n font-weight: 600;\n color: #059669;\n background: #ecfdf5;\n padding: 1px 6px;\n border-radius: var(--mj-radius-sm);\n letter-spacing: 0.2px;\n}\n\n.mj-agent-props-priority-badge {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n/* \u2500\u2500 Path Route Display \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-path-route {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n font-weight: 600;\n color: var(--mj-text-primary);\n line-height: 1.3;\n flex-wrap: wrap;\n}\n\n.mj-agent-props-path-step-name {\n max-width: 100px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.mj-agent-props-path-arrow {\n font-size: 10px;\n color: var(--mj-text-disabled);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Empty State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n text-align: center;\n flex: 1;\n}\n\n.mj-agent-props-empty i { font-size: 28px; color: var(--mj-border-strong); margin-bottom: 12px; }\n.mj-agent-props-empty p { font-size: var(--mj-text-sm); color: var(--mj-text-disabled); margin: 0; }\n\n/* \u2500\u2500 Scrollable Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-content {\n flex: 1;\n overflow-y: auto;\n padding-bottom: 16px;\n}\n\n/* \u2500\u2500 Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-section {\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-section:last-child { border-bottom: none; }\n\n/* Section headers are now <mj-accordion-panel>; the bespoke section-header /\n section-title chrome was removed so the accordion owns the title styling. */\n.mj-agent-props-section-body {\n padding: 12px 14px;\n}\n\n/* \u2500\u2500 Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field {\n margin-bottom: 12px;\n}\n\n.mj-agent-props-field label {\n display: block;\n font-size: var(--mj-text-xs);\n font-weight: 500;\n color: var(--mj-text-secondary);\n margin-bottom: 4px;\n}\n\n.mj-agent-props-field--row {\n display: flex;\n align-items: center;\n}\n\n.mj-agent-props-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.15s ease;\n outline: none;\n font-family: inherit;\n}\n\n.mj-agent-props-input:focus { border-color: var(--mj-brand-primary); }\n.mj-agent-props-input:focus-visible { box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15); }\n\n/* Select dropdown with consistent cross-browser styling */\nselect.mj-agent-props-input {\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n padding-right: 28px;\n cursor: pointer;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 48px;\n}\n\n.mj-agent-props-checkbox-label {\n display: flex !important;\n align-items: center;\n gap: 8px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n\n.mj-agent-props-checkbox-label input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n/* \u2500\u2500 Read-only Values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-readonly-value {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-md);\n padding: 6px 10px;\n min-height: 34px;\n word-break: break-word;\n}\n\n.mj-agent-props-readonly-value--muted {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n/* \u2500\u2500 Code Editor in Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-field mj-code-editor {\n display: block;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n min-height: 60px;\n max-height: 200px;\n}\n\n.mj-agent-props-field mj-code-editor .cm-editor {\n font-size: var(--mj-text-xs);\n}\n\n/* \u2500\u2500 Hints \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-hint {\n display: block;\n font-size: 11px;\n color: var(--mj-text-disabled);\n margin-top: 3px;\n}\n\n/* \u2500\u2500 Danger Zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-danger {\n padding: 12px 14px;\n}\n\n.mj-agent-props-delete-btn {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n border-radius: var(--mj-radius-md);\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n font-size: var(--mj-text-sm);\n font-weight: 500;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.15s ease;\n}\n\n.mj-agent-props-delete-btn:hover {\n background: color-mix(in srgb, var(--mj-status-error) 16%, var(--mj-bg-surface));\n border-color: var(--mj-status-error-border);\n}\n\n.mj-agent-props-delete-btn i { font-size: var(--mj-text-xs); }\n\n/* \u2500\u2500 Decision Step & Route Helper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-agent-props-required {\n color: var(--mj-status-error);\n}\n\n.mj-agent-props-input--error {\n border-color: var(--mj-status-error);\n}\n\n.mj-agent-props-error {\n display: block;\n font-size: 11px;\n color: var(--mj-status-error);\n margin-top: 3px;\n}\n\n.mj-agent-props-textarea {\n resize: vertical;\n min-height: 52px;\n font-family: inherit;\n line-height: 1.4;\n}\n\n.mj-agent-props-questions-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 14px;\n margin-bottom: 8px;\n}\n\n.mj-agent-props-questions-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.mj-agent-props-questions-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 12px;\n}\n\n.mj-agent-props-question-card {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.mj-agent-props-question-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n background: var(--mj-bg-surface-sunken);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-card-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n min-width: 0;\n}\n\n.mj-agent-props-question-card-title code {\n font-size: 11px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-kind-badge {\n font-size: 10px;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: var(--mj-radius-sm);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\n.mj-agent-props-question-card-body {\n padding: 10px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-agent-props-options-section,\n.mj-agent-props-levels-section {\n border-top: 1px solid var(--mj-border-subtle);\n padding-top: 8px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.mj-agent-props-options-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.mj-agent-props-option-row,\n.mj-agent-props-level-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.mj-agent-props-level-badge {\n font-size: 11px;\n font-weight: 700;\n width: 18px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n.mj-agent-props-input--sm {\n height: 28px;\n font-size: var(--mj-text-xs);\n padding: 4px 8px;\n}\n\n.mj-agent-props-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n border-radius: var(--mj-radius-md);\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.mj-agent-props-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.mj-agent-props-btn--sm {\n height: 26px;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n}\n\n.mj-agent-props-btn--xs {\n height: 22px;\n padding: 1px 6px;\n font-size: 11px;\n}\n\n.mj-agent-props-btn--secondary {\n background: var(--mj-bg-surface);\n border-color: var(--mj-border-default);\n font-size: var(--mj-text-xs);\n padding: 6px 12px;\n width: 100%;\n margin-top: 4px;\n}\n\n.mj-agent-props-btn--secondary:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n}\n\n.mj-agent-props-icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border: 1px solid var(--mj-border-subtle);\n border-radius: var(--mj-radius-sm);\n background: transparent;\n color: var(--mj-text-secondary);\n cursor: pointer;\n flex-shrink: 0;\n}\n\n.mj-agent-props-icon-btn:hover:not(:disabled) {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-primary);\n}\n\n.mj-agent-props-icon-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n.mj-agent-props-icon-btn--danger {\n color: var(--mj-status-error);\n}\n\n.mj-agent-props-icon-btn--danger:hover:not(:disabled) {\n background: var(--mj-status-error-bg);\n}\n\n.mj-agent-props-coverage-hint {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n color: var(--mj-text-secondary);\n padding: 4px 6px;\n background: var(--mj-bg-surface-sunken);\n border-radius: var(--mj-radius-sm);\n margin-top: 2px;\n}\n\n.mj-agent-props-coverage-hint i {\n font-size: 11px;\n color: var(--mj-text-disabled);\n}\n\n.mj-agent-props-run-problems {\n display: flex;\n margin: 10px 0 0;\n}\n\n.mj-agent-props-content > .mj-agent-props-run-problems {\n margin: 10px 14px;\n}\n\n.mj-agent-props-run-problems-list {\n margin: 4px 0 0;\n padding-inline-start: 1.1rem;\n word-break: break-word;\n}\n\n.mj-agent-props-route-helper {\n margin-top: 10px;\n padding: 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface-sunken);\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.mj-agent-props-route-helper-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n\n.mj-agent-props-route-helper-title {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-primary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n"] }]
1164
2587
  }], null, { Step: [{
1165
2588
  type: Input
1166
2589
  }], SelectedConnection: [{
@@ -1173,10 +2596,16 @@ export class AgentPropertiesPanelComponent {
1173
2596
  type: Input
1174
2597
  }], Prompts: [{
1175
2598
  type: Input
2599
+ }], DecisionModelTypeID: [{
2600
+ type: Input
1176
2601
  }], Agents: [{
1177
2602
  type: Input
1178
2603
  }], AllSteps: [{
1179
2604
  type: Input
2605
+ }], AllPaths: [{
2606
+ type: Input
2607
+ }], RunProblems: [{
2608
+ type: Input
1180
2609
  }], StepChanged: [{
1181
2610
  type: Output
1182
2611
  }], PathChanged: [{
@@ -1188,5 +2617,5 @@ export class AgentPropertiesPanelComponent {
1188
2617
  }], CloseRequested: [{
1189
2618
  type: Output
1190
2619
  }] }); })();
1191
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentPropertiesPanelComponent, { className: "AgentPropertiesPanelComponent", filePath: "src/lib/agent-editor/agent-properties-panel.component.ts", lineNumber: 36 }); })();
2620
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AgentPropertiesPanelComponent, { className: "AgentPropertiesPanelComponent", filePath: "src/lib/agent-editor/agent-properties-panel.component.ts", lineNumber: 72 }); })();
1192
2621
  //# sourceMappingURL=agent-properties-panel.component.js.map