@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.
- package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts +17 -5
- package/dist/lib/agent-editor/agent-flow-transformer.service.d.ts.map +1 -1
- package/dist/lib/agent-editor/agent-flow-transformer.service.js +70 -12
- package/dist/lib/agent-editor/agent-flow-transformer.service.js.map +1 -1
- package/dist/lib/agent-editor/agent-properties-panel.component.d.ts +216 -7
- package/dist/lib/agent-editor/agent-properties-panel.component.d.ts.map +1 -1
- package/dist/lib/agent-editor/agent-properties-panel.component.js +1679 -250
- package/dist/lib/agent-editor/agent-properties-panel.component.js.map +1 -1
- package/dist/lib/agent-editor/agent-step-list.component.d.ts.map +1 -1
- package/dist/lib/agent-editor/agent-step-list.component.js +10 -1
- package/dist/lib/agent-editor/agent-step-list.component.js.map +1 -1
- package/dist/lib/agent-editor/decision-step-config.d.ts +27 -0
- package/dist/lib/agent-editor/decision-step-config.d.ts.map +1 -0
- package/dist/lib/agent-editor/decision-step-config.js +70 -0
- package/dist/lib/agent-editor/decision-step-config.js.map +1 -0
- package/dist/lib/agent-editor/flow-agent-editor.component.d.ts +37 -5
- package/dist/lib/agent-editor/flow-agent-editor.component.d.ts.map +1 -1
- package/dist/lib/agent-editor/flow-agent-editor.component.js +177 -45
- package/dist/lib/agent-editor/flow-agent-editor.component.js.map +1 -1
- package/dist/lib/agent-editor/flow-run-check.d.ts +32 -0
- package/dist/lib/agent-editor/flow-run-check.d.ts.map +1 -0
- package/dist/lib/agent-editor/flow-run-check.js +146 -0
- package/dist/lib/agent-editor/flow-run-check.js.map +1 -0
- package/dist/lib/flow-editor.module.d.ts +1 -1
- package/dist/lib/flow-editor.module.d.ts.map +1 -1
- package/dist/lib/flow-editor.module.js +4 -1
- package/dist/lib/flow-editor.module.js.map +1 -1
- package/dist/lib/interfaces/flow-types.d.ts +5 -0
- package/dist/lib/interfaces/flow-types.d.ts.map +1 -1
- package/dist/lib/interfaces/flow-types.js +0 -4
- package/dist/lib/interfaces/flow-types.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- 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
|
|
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
|
|
22
|
-
const
|
|
23
|
-
i0.ɵɵelementStart(0, "input",
|
|
24
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
31
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
40
|
-
const
|
|
41
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
42
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
49
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
58
|
-
const
|
|
59
|
-
i0.ɵɵelementStart(0, "select",
|
|
60
|
-
i0.ɵɵlistener("change", function
|
|
61
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
88
|
+
i0.ɵɵelementStart(3, "option", 36);
|
|
65
89
|
i0.ɵɵtext(4, "Disabled");
|
|
66
90
|
i0.ɵɵelementEnd();
|
|
67
|
-
i0.ɵɵelementStart(5, "option",
|
|
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
|
|
75
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
87
|
-
const
|
|
88
|
-
i0.ɵɵelementStart(0, "div",
|
|
89
|
-
i0.ɵɵlistener("change", function
|
|
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
|
|
99
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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
|
|
107
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
111
|
-
i0.ɵɵconditionalCreate(5,
|
|
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",
|
|
137
|
+
i0.ɵɵelementStart(6, "div", 26)(7, "label");
|
|
114
138
|
i0.ɵɵtext(8, "Description");
|
|
115
139
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵconditionalCreate(9,
|
|
117
|
-
i0.ɵɵconditionalCreate(10,
|
|
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",
|
|
143
|
+
i0.ɵɵelementStart(11, "div", 26)(12, "label");
|
|
120
144
|
i0.ɵɵtext(13, "Status");
|
|
121
145
|
i0.ɵɵelementEnd();
|
|
122
|
-
i0.ɵɵconditionalCreate(14,
|
|
123
|
-
i0.ɵɵconditionalCreate(15,
|
|
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,
|
|
126
|
-
i0.ɵɵconditionalCreate(17,
|
|
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
|
|
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
|
|
153
|
-
const
|
|
154
|
-
i0.ɵɵelementStart(0, "select",
|
|
155
|
-
i0.ɵɵlistener("change", function
|
|
156
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
183
|
+
i0.ɵɵelementStart(3, "option", 41);
|
|
160
184
|
i0.ɵɵtext(4, "Prompt");
|
|
161
185
|
i0.ɵɵelementEnd();
|
|
162
|
-
i0.ɵɵelementStart(5, "option",
|
|
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
|
|
170
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
179
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
183
|
-
i0.ɵɵconditionalCreate(4,
|
|
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
|
|
193
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
198
|
-
i0.ɵɵproperty("value",
|
|
221
|
+
const action_r10 = ctx.$implicit;
|
|
222
|
+
i0.ɵɵproperty("value", action_r10.ID);
|
|
199
223
|
i0.ɵɵadvance();
|
|
200
|
-
i0.ɵɵtextInterpolate(
|
|
224
|
+
i0.ɵɵtextInterpolate(action_r10.Name);
|
|
201
225
|
} }
|
|
202
|
-
function
|
|
203
|
-
const
|
|
204
|
-
i0.ɵɵelementStart(0, "select",
|
|
205
|
-
i0.ɵɵlistener("change", function
|
|
206
|
-
i0.ɵɵelementStart(1, "option",
|
|
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,
|
|
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
|
|
218
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
227
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
231
|
-
i0.ɵɵconditionalCreate(4,
|
|
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
|
|
241
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
246
|
-
i0.ɵɵproperty("value",
|
|
269
|
+
const prompt_r12 = ctx.$implicit;
|
|
270
|
+
i0.ɵɵproperty("value", prompt_r12.ID);
|
|
247
271
|
i0.ɵɵadvance();
|
|
248
|
-
i0.ɵɵtextInterpolate(
|
|
272
|
+
i0.ɵɵtextInterpolate(prompt_r12.Name);
|
|
249
273
|
} }
|
|
250
|
-
function
|
|
251
|
-
const
|
|
252
|
-
i0.ɵɵelementStart(0, "select",
|
|
253
|
-
i0.ɵɵlistener("change", function
|
|
254
|
-
i0.ɵɵelementStart(1, "option",
|
|
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,
|
|
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
|
|
266
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
275
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
279
|
-
i0.ɵɵconditionalCreate(4,
|
|
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
|
|
289
|
-
i0.ɵɵelementStart(0, "option",
|
|
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
|
|
294
|
-
i0.ɵɵproperty("value",
|
|
317
|
+
const agent_r14 = ctx.$implicit;
|
|
318
|
+
i0.ɵɵproperty("value", agent_r14.ID);
|
|
295
319
|
i0.ɵɵadvance();
|
|
296
|
-
i0.ɵɵtextInterpolate(
|
|
320
|
+
i0.ɵɵtextInterpolate(agent_r14.Name);
|
|
297
321
|
} }
|
|
298
|
-
function
|
|
299
|
-
const
|
|
300
|
-
i0.ɵɵelementStart(0, "select",
|
|
301
|
-
i0.ɵɵlistener("change", function
|
|
302
|
-
i0.ɵɵelementStart(1, "option",
|
|
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,
|
|
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
|
|
314
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
323
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
327
|
-
i0.ɵɵconditionalCreate(4,
|
|
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
|
|
337
|
-
const
|
|
338
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
342
|
-
i0.ɵɵlistener("change", function
|
|
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
|
|
350
|
-
i0.ɵɵ
|
|
351
|
-
i0.ɵɵ
|
|
352
|
-
i0.ɵɵ
|
|
353
|
-
i0.ɵɵ
|
|
354
|
-
|
|
355
|
-
i0.ɵɵ
|
|
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
|
|
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
|
|
376
|
-
const
|
|
377
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
381
|
-
i0.ɵɵlistener("change", function
|
|
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",
|
|
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",
|
|
387
|
-
i0.ɵɵlistener("change", function
|
|
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
|
|
397
|
-
const
|
|
398
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
399
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
400
|
-
i0.ɵɵtemplate(1,
|
|
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
|
|
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
|
|
412
|
-
const
|
|
413
|
-
i0.ɵɵelementStart(0, "select",
|
|
414
|
-
i0.ɵɵlistener("change", function
|
|
415
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
911
|
+
i0.ɵɵelementStart(3, "option", 102);
|
|
419
912
|
i0.ɵɵtext(4, "Continue (ignore error)");
|
|
420
913
|
i0.ɵɵelementEnd();
|
|
421
|
-
i0.ɵɵelementStart(5, "option",
|
|
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
|
|
429
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
438
|
-
const
|
|
439
|
-
i0.ɵɵelementStart(0, "input",
|
|
440
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
447
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
456
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
460
|
-
i0.ɵɵconditionalCreate(4,
|
|
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
|
|
470
|
-
const
|
|
471
|
-
i0.ɵɵelementStart(0, "input",
|
|
472
|
-
i0.ɵɵlistener("input", function
|
|
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
|
|
479
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
488
|
-
i0.ɵɵelementStart(0, "div",
|
|
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,
|
|
492
|
-
i0.ɵɵconditionalCreate(5,
|
|
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,
|
|
495
|
-
i0.ɵɵelementStart(7, "div",
|
|
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,
|
|
499
|
-
i0.ɵɵconditionalCreate(11,
|
|
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
|
|
515
|
-
const
|
|
516
|
-
i0.ɵɵelementStart(0, "div",
|
|
517
|
-
i0.ɵɵlistener("click", function
|
|
518
|
-
i0.ɵɵelement(2, "i",
|
|
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)
|
|
547
|
-
i0.ɵɵ
|
|
548
|
-
i0.ɵɵ
|
|
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(
|
|
551
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
552
|
-
i0.ɵɵtemplate(
|
|
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(
|
|
555
|
-
i0.ɵɵelementStart(
|
|
556
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
557
|
-
i0.ɵɵtemplate(
|
|
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(
|
|
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 ?
|
|
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 ?
|
|
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",
|
|
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",
|
|
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",
|
|
1106
|
+
i0.ɵɵelementStart(4, "div", 116);
|
|
610
1107
|
i0.ɵɵtext(5);
|
|
611
1108
|
i0.ɵɵelementEnd()();
|
|
612
|
-
i0.ɵɵelementStart(6, "div",
|
|
1109
|
+
i0.ɵɵelementStart(6, "div", 26)(7, "label");
|
|
613
1110
|
i0.ɵɵtext(8, "To");
|
|
614
1111
|
i0.ɵɵelementEnd();
|
|
615
|
-
i0.ɵɵelementStart(9, "div",
|
|
1112
|
+
i0.ɵɵelementStart(9, "div", 116);
|
|
616
1113
|
i0.ɵɵtext(10);
|
|
617
1114
|
i0.ɵɵelementEnd()();
|
|
618
|
-
i0.ɵɵelementStart(11, "span",
|
|
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
|
|
635
|
-
i0.ɵɵelementStart(0, "input",
|
|
636
|
-
i0.ɵɵlistener("input", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_4_Template_input_input_0_listener($event) { i0.ɵɵrestoreView(
|
|
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",
|
|
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",
|
|
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
|
|
658
|
-
i0.ɵɵelementStart(0, "mj-code-editor",
|
|
659
|
-
i0.ɵɵlistener("change", function AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_10_Template_mj_code_editor_change_0_listener($event) { i0.ɵɵrestoreView(
|
|
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",
|
|
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",
|
|
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",
|
|
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
|
|
682
|
-
|
|
683
|
-
i0.ɵɵ
|
|
684
|
-
i0.ɵɵ
|
|
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
|
|
691
|
-
i0.ɵɵelementStart(0, "div",
|
|
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",
|
|
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",
|
|
704
|
-
i0.ɵɵconditionalCreate(5, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_5_Template, 2, 1, "div",
|
|
705
|
-
i0.ɵɵconditionalCreate(6, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_6_Template, 2, 0, "span",
|
|
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",
|
|
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",
|
|
711
|
-
i0.ɵɵconditionalCreate(11, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_11_Template, 1, 3, "mj-code-editor",
|
|
712
|
-
i0.ɵɵconditionalCreate(12, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_12_Template, 2, 0, "div",
|
|
713
|
-
i0.ɵɵconditionalCreate(13, AgentPropertiesPanelComponent_Conditional_3_ng_template_26_Conditional_13_Template, 2, 0, "span",
|
|
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.ɵɵ
|
|
716
|
-
i0.ɵɵ
|
|
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(
|
|
719
|
-
i0.ɵɵconditionalCreate(
|
|
720
|
-
i0.ɵɵelementStart(
|
|
721
|
-
i0.ɵɵtext(
|
|
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 ?
|
|
1411
|
+
i0.ɵɵconditional(!ctx_r1.ReadOnly ? 19 : -1);
|
|
741
1412
|
i0.ɵɵadvance();
|
|
742
|
-
i0.ɵɵconditional(ctx_r1.ReadOnly ?
|
|
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
|
|
746
|
-
i0.ɵɵelementStart(0, "div",
|
|
747
|
-
i0.ɵɵlistener("click", function AgentPropertiesPanelComponent_Conditional_3_Conditional_27_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
748
|
-
i0.ɵɵelement(2, "i",
|
|
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
|
|
754
|
-
i0.ɵɵelementStart(0, "div",
|
|
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(
|
|
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",
|
|
762
|
-
i0.ɵɵelement(8, "i",
|
|
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",
|
|
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",
|
|
768
|
-
i0.ɵɵelementStart(14, "span",
|
|
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",
|
|
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",
|
|
777
|
-
i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_21_listener() { i0.ɵɵrestoreView(
|
|
778
|
-
i0.ɵɵtemplate(22, AgentPropertiesPanelComponent_Conditional_3_ng_template_22_Template, 2, 0, "ng-template",
|
|
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",
|
|
781
|
-
i0.ɵɵlistener("ExpandedChange", function AgentPropertiesPanelComponent_Conditional_3_Template_mj_accordion_panel_ExpandedChange_24_listener() { i0.ɵɵrestoreView(
|
|
782
|
-
i0.ɵɵtemplate(25, AgentPropertiesPanelComponent_Conditional_3_ng_template_25_Template, 2, 0, "ng-template",
|
|
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",
|
|
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
|
-
|
|
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"], [
|
|
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,
|
|
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.<key>.<question></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.<path>\"</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 >= threshold</span>\n </div>\n }\n\n @if (RouteSelectedQuestion?.kind === 'Score') {\n <div class=\"mj-agent-props-field\">\n <label>Minimum Level (Score >= 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:
|
|
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
|