@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  4. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +1 -0
  10. package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-form-tabs.js +2 -0
  12. package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -1
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
  14. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
  16. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
  18. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1322 -783
  20. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
  22. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
  24. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
  26. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
  28. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
  30. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
  32. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
  34. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
  36. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
  38. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
  40. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  41. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
  42. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  43. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
  44. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  45. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
  46. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
  48. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  49. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
  50. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  51. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
  52. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  53. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
  54. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
  56. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  57. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
  58. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
  60. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  61. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
  62. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  63. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +694 -252
  64. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  65. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
  66. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  67. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
  68. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  69. package/dist/lib/custom/AIPrompts/pending-records.d.ts +11 -0
  70. package/dist/lib/custom/AIPrompts/pending-records.d.ts.map +1 -0
  71. package/dist/lib/custom/AIPrompts/pending-records.js +21 -0
  72. package/dist/lib/custom/AIPrompts/pending-records.js.map +1 -0
  73. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
  74. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  75. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
  76. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
  78. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
  80. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  81. package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
  82. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Actions/action-form.component.js +387 -107
  84. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  85. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
  86. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
  87. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
  88. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
  89. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
  90. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
  91. package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
  92. package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
  93. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  94. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
  95. package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
  96. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  97. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
  98. package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
  99. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  100. package/dist/lib/custom/Entities/entity-form.component.d.ts +217 -29
  101. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  102. package/dist/lib/custom/Entities/entity-form.component.js +734 -285
  103. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  104. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
  105. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  106. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
  107. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  108. package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
  109. package/dist/lib/custom/Files/file-form.component.js +2 -2
  110. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  111. package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
  112. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  113. package/dist/lib/custom/Lists/list-form.component.js +664 -208
  114. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  115. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
  116. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  117. package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
  118. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  119. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
  120. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  121. package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
  122. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  123. package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
  124. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  125. package/dist/lib/custom/Queries/query-form.component.js +429 -109
  126. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  127. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
  128. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  129. package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
  130. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  131. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +129 -4
  132. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  133. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +904 -90
  134. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  135. package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts +37 -0
  136. package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts.map +1 -0
  137. package/dist/lib/custom/Rubrics/evaluation-form.component.js +399 -0
  138. package/dist/lib/custom/Rubrics/evaluation-form.component.js.map +1 -0
  139. package/dist/lib/custom/Rubrics/record-forms.component.d.ts +69 -0
  140. package/dist/lib/custom/Rubrics/record-forms.component.d.ts.map +1 -0
  141. package/dist/lib/custom/Rubrics/record-forms.component.js +587 -0
  142. package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -0
  143. package/dist/lib/custom/Rubrics/rubric-form.component.d.ts +67 -0
  144. package/dist/lib/custom/Rubrics/rubric-form.component.d.ts.map +1 -0
  145. package/dist/lib/custom/Rubrics/rubric-form.component.js +534 -0
  146. package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -0
  147. package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts +25 -0
  148. package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts.map +1 -0
  149. package/dist/lib/custom/Rubrics/rubric-form.panels.js +299 -0
  150. package/dist/lib/custom/Rubrics/rubric-form.panels.js.map +1 -0
  151. package/dist/lib/custom/Rubrics/scale-form.component.d.ts +31 -0
  152. package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -0
  153. package/dist/lib/custom/Rubrics/scale-form.component.js +395 -0
  154. package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -0
  155. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
  156. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
  157. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  158. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
  159. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
  160. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  161. package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
  162. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  163. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
  164. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  165. package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
  166. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  167. package/dist/lib/custom/Templates/templates-form.component.d.ts +153 -19
  168. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  169. package/dist/lib/custom/Templates/templates-form.component.js +434 -217
  170. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  171. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
  172. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  173. package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
  174. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  175. package/dist/lib/custom/Tests/test-form.component.d.ts +223 -27
  176. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  177. package/dist/lib/custom/Tests/test-form.component.js +951 -530
  178. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  179. package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
  180. package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
  181. package/dist/lib/custom/Tests/test-run-checks.js +5 -1
  182. package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
  183. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
  184. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
  185. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
  186. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  187. package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
  188. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  189. package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
  190. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  191. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +395 -47
  192. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  193. package/dist/lib/custom/Tests/test-suite-form.component.js +1719 -1007
  194. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  195. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
  196. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  197. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
  198. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  199. package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
  200. package/dist/lib/custom/Users/user-overview.panel.js +3 -3
  201. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  202. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
  203. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  204. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
  205. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  206. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
  207. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  208. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
  209. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  210. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
  211. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  212. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
  213. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  214. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
  215. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  216. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
  217. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  218. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
  219. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  220. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
  221. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  222. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
  223. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  224. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
  225. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  226. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
  227. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  228. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
  229. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  230. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
  231. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  232. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
  233. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  234. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
  235. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  236. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
  237. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  238. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
  239. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
  240. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
  241. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
  242. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
  243. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
  244. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
  245. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
  246. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
  247. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
  248. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
  249. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
  250. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
  251. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
  252. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
  253. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
  254. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
  255. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
  256. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
  257. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
  258. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
  259. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
  260. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
  261. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
  262. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
  263. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
  264. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
  265. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
  266. package/dist/lib/custom/custom-forms.module.d.ts +56 -48
  267. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  268. package/dist/lib/custom/custom-forms.module.js +60 -0
  269. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  270. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
  271. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  272. package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
  273. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  274. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  275. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +61 -43
  276. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  277. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts +10 -0
  278. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts.map +1 -0
  279. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js +74 -0
  280. package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js.map +1 -0
  281. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  282. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +37 -19
  283. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  284. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  285. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +78 -52
  286. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  287. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
  288. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  290. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +156 -84
  291. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts +10 -0
  293. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts.map +1 -0
  294. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js +62 -0
  295. package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js.map +1 -0
  296. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
  297. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +24 -6
  298. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  299. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
  300. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  301. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.d.ts.map +1 -1
  302. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +24 -16
  303. package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
  304. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts +10 -0
  305. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts.map +1 -0
  306. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js +107 -0
  307. package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js.map +1 -0
  308. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts +10 -0
  309. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts.map +1 -0
  310. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js +74 -0
  311. package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js.map +1 -0
  312. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts +10 -0
  313. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts.map +1 -0
  314. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js +135 -0
  315. package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js.map +1 -0
  316. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts +10 -0
  317. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts.map +1 -0
  318. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js +87 -0
  319. package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js.map +1 -0
  320. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts +10 -0
  321. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts.map +1 -0
  322. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js +107 -0
  323. package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js.map +1 -0
  324. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts +10 -0
  325. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts.map +1 -0
  326. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js +155 -0
  327. package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js.map +1 -0
  328. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts +10 -0
  329. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts.map +1 -0
  330. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js +62 -0
  331. package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js.map +1 -0
  332. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts +10 -0
  333. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts.map +1 -0
  334. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js +183 -0
  335. package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js.map +1 -0
  336. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts +10 -0
  337. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts.map +1 -0
  338. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js +120 -0
  339. package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js.map +1 -0
  340. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts +10 -0
  341. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts.map +1 -0
  342. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js +107 -0
  343. package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js.map +1 -0
  344. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts +10 -0
  345. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts.map +1 -0
  346. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js +103 -0
  347. package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js.map +1 -0
  348. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts +10 -0
  349. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts.map +1 -0
  350. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js +171 -0
  351. package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js.map +1 -0
  352. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
  353. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -16
  354. package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
  355. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +27 -25
  356. package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
  357. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.d.ts.map +1 -1
  358. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +19 -11
  359. package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
  360. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  361. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +209 -119
  362. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  363. package/dist/lib/generated/generated-forms.module.d.ts +436 -422
  364. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  365. package/dist/lib/generated/generated-forms.module.js +44 -2
  366. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  367. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
  368. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
  369. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
  370. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  371. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
  372. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
  373. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
  374. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  375. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
  376. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
  377. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  378. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
  379. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  380. package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
  381. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  382. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
  383. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  384. package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
  385. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  386. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts +116 -0
  387. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts.map +1 -0
  388. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js +820 -0
  389. package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js.map +1 -0
  390. package/dist/lib/shared/components/template-editor.component.d.ts +158 -15
  391. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  392. package/dist/lib/shared/components/template-editor.component.js +389 -127
  393. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  394. package/dist/public-api.d.ts +5 -0
  395. package/dist/public-api.d.ts.map +1 -1
  396. package/dist/public-api.js +5 -0
  397. package/dist/public-api.js.map +1 -1
  398. package/package.json +47 -42
@@ -4,17 +4,22 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component } from '@angular/core';
8
- import { RegisterClass, RegisterClassEx } from '@memberjunction/global';
9
- import { BaseFormComponent, BaseFormPolicy } from '@memberjunction/ng-base-forms';
7
+ import { Component, ViewChild } from '@angular/core';
8
+ import { RegisterClass, RegisterClassEx, SafeJSONParse, EscapeSQLString, ValidationErrorInfo, ValidationErrorType } from '@memberjunction/global';
9
+ import { BaseFormComponent, BaseFormPolicy, DETAILS_SECTION_KEY } from '@memberjunction/ng-base-forms';
10
+ import { FeaturePipelineBuilderComponent } from '@memberjunction/ng-record-process-studio';
10
11
  import { MJRecordProcessFormComponent } from '../../generated/Entities/MJRecordProcess/mjrecordprocess.form.component';
12
+ import { RunView, LogError } from '@memberjunction/core';
13
+ import { validateSpec } from '@memberjunction/feature-pipelines';
11
14
  import * as i0 from "@angular/core";
12
15
  import * as i1 from "@angular/common";
13
16
  import * as i2 from "@memberjunction/ng-base-forms";
14
17
  import * as i3 from "@memberjunction/ng-record-process-studio";
18
+ const _forTrack0 = ($index, $item) => $item.Param;
19
+ const _forTrack1 = ($index, $item) => $item.Name;
15
20
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
16
21
  i0.ɵɵelementStart(0, "span", 18);
17
- i0.ɵɵelement(1, "i", 78);
22
+ i0.ɵɵelement(1, "i", 64);
18
23
  i0.ɵɵelementStart(2, "span");
19
24
  i0.ɵɵtext(3, "Feature Pipeline");
20
25
  i0.ɵɵelementEnd()();
@@ -64,17 +69,17 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_48_Templat
64
69
  } }
65
70
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
66
71
  const _r3 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder", 79);
72
+ i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder", 65);
68
73
  i0.ɵɵlistener("SpecChange", function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template_mj_feature_pipeline_builder_SpecChange_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPipelineSpecChange()); })("ValidChange", function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template_mj_feature_pipeline_builder_ValidChange_1_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnPipelineValidChange($event)); });
69
74
  i0.ɵɵelementEnd()();
70
75
  } if (rf & 2) {
71
76
  const ctx_r1 = i0.ɵɵnextContext(2);
72
77
  i0.ɵɵadvance();
73
- i0.ɵɵproperty("Record", ctx_r1.record)("EntityID", ctx_r1.record.EntityID);
78
+ i0.ɵɵproperty("Record", ctx_r1.record)("EntityID", ctx_r1.record.EntityID)("Provider", ctx_r1.ProviderToUse);
74
79
  } }
75
80
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
76
81
  i0.ɵɵelementStart(0, "div", 32);
77
- i0.ɵɵelement(1, "mj-record-process-editor", 80);
82
+ i0.ɵɵelement(1, "mj-record-process-editor", 66);
78
83
  i0.ɵɵelementEnd();
79
84
  } if (rf & 2) {
80
85
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -83,7 +88,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Templat
83
88
  } }
84
89
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Template(rf, ctx) { if (rf & 1) {
85
90
  i0.ɵɵelementStart(0, "div", 33)(1, "div", 36);
86
- i0.ɵɵelement(2, "i", 81);
91
+ i0.ɵɵelement(2, "i", 67);
87
92
  i0.ɵɵelementStart(3, "div")(4, "strong");
88
93
  i0.ɵɵtext(5);
89
94
  i0.ɵɵelementEnd();
@@ -105,7 +110,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Templat
105
110
  } }
106
111
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
107
112
  i0.ɵɵelementStart(0, "div", 35);
108
- i0.ɵɵelement(1, "mj-record-process-history", 82);
113
+ i0.ɵɵelement(1, "mj-record-process-history", 68);
109
114
  i0.ɵɵelementEnd();
110
115
  } if (rf & 2) {
111
116
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -114,45 +119,498 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Templat
114
119
  } }
115
120
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
116
121
  i0.ɵɵelementStart(0, "div", 36);
117
- i0.ɵɵelement(1, "i", 81);
122
+ i0.ɵɵelement(1, "i", 67);
118
123
  i0.ɵɵelementStart(2, "span");
119
124
  i0.ɵɵtext(3, "Save this record process to view execution history and per-record audit logs.");
120
125
  i0.ɵɵelementEnd()();
121
126
  } }
122
- function RecordProcessFormComponentExtended_Conditional_0_Conditional_109_Template(rf, ctx) { if (rf & 1) {
127
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template(rf, ctx) { if (rf & 1) {
128
+ i0.ɵɵelementStart(0, "span", 79);
129
+ i0.ɵɵtext(1);
130
+ i0.ɵɵelementEnd();
131
+ } if (rf & 2) {
132
+ const ctx_r1 = i0.ɵɵnextContext(3);
133
+ i0.ɵɵadvance();
134
+ i0.ɵɵtextInterpolate1("ID: ", ctx_r1.record.PromptID.substring(0, 8), "...");
135
+ } }
136
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template(rf, ctx) { if (rf & 1) {
137
+ i0.ɵɵelementStart(0, "div", 81);
138
+ i0.ɵɵelement(1, "mj-form-field", 96);
139
+ i0.ɵɵelementEnd();
140
+ } if (rf & 2) {
141
+ const ctx_r1 = i0.ɵɵnextContext(3);
142
+ i0.ɵɵadvance();
143
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
144
+ } }
145
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template(rf, ctx) { if (rf & 1) {
146
+ i0.ɵɵelementStart(0, "div", 97)(1, "span", 98);
147
+ i0.ɵɵtext(2);
148
+ i0.ɵɵelementEnd();
149
+ i0.ɵɵelementStart(3, "span");
150
+ i0.ɵɵelement(4, "i", 99);
151
+ i0.ɵɵelementStart(5, "span");
152
+ i0.ɵɵtext(6, "Column: ");
153
+ i0.ɵɵelementStart(7, "code");
154
+ i0.ɵɵtext(8);
155
+ i0.ɵɵelementEnd()()()();
156
+ } if (rf & 2) {
157
+ const item_r5 = ctx.$implicit;
158
+ i0.ɵɵadvance(2);
159
+ i0.ɵɵtextInterpolate(item_r5.Param);
160
+ i0.ɵɵadvance(6);
161
+ i0.ɵɵtextInterpolate(item_r5.Field);
162
+ } }
163
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_Template(rf, ctx) { if (rf & 1) {
164
+ i0.ɵɵelementStart(0, "div", 82);
165
+ i0.ɵɵrepeaterCreate(1, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template, 9, 2, "div", 97, _forTrack0);
166
+ i0.ɵɵelementEnd();
167
+ } if (rf & 2) {
168
+ const ctx_r1 = i0.ɵɵnextContext(3);
169
+ i0.ɵɵadvance();
170
+ i0.ɵɵrepeater(ctx_r1.ParameterMappings);
171
+ } }
172
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_35_Template(rf, ctx) { if (rf & 1) {
173
+ i0.ɵɵelementStart(0, "div", 83);
174
+ i0.ɵɵtext(1, " No parameter bindings configured. Entire row context will be passed to prompt. ");
175
+ i0.ɵɵelementEnd();
176
+ } }
177
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵelementStart(0, "span", 79);
179
+ i0.ɵɵelement(1, "i", 106);
180
+ i0.ɵɵtext(2, " Captured");
181
+ i0.ɵɵelementEnd();
182
+ } }
183
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵelementStart(0, "span", 105);
185
+ i0.ɵɵtext(1, "None");
186
+ i0.ɵɵelementEnd();
187
+ } }
188
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template(rf, ctx) { if (rf & 1) {
189
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 100);
190
+ i0.ɵɵelement(3, "i");
191
+ i0.ɵɵelementStart(4, "span");
192
+ i0.ɵɵtext(5);
193
+ i0.ɵɵelementEnd()()();
194
+ i0.ɵɵelementStart(6, "td")(7, "span", 101);
195
+ i0.ɵɵtext(8);
196
+ i0.ɵɵelementEnd()();
197
+ i0.ɵɵelementStart(9, "td")(10, "span", 102);
198
+ i0.ɵɵelement(11, "i", 103);
199
+ i0.ɵɵtext(12);
200
+ i0.ɵɵelementEnd()();
201
+ i0.ɵɵelementStart(13, "td")(14, "div", 104);
202
+ i0.ɵɵelement(15, "i");
203
+ i0.ɵɵelementStart(16, "span");
204
+ i0.ɵɵtext(17);
205
+ i0.ɵɵelementStart(18, "strong");
206
+ i0.ɵɵtext(19);
207
+ i0.ɵɵelementEnd()();
208
+ i0.ɵɵelementStart(20, "span", 105);
209
+ i0.ɵɵtext(21);
210
+ i0.ɵɵelementEnd()()();
211
+ i0.ɵɵelementStart(22, "td");
212
+ i0.ɵɵconditionalCreate(23, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_23_Template, 3, 0, "span", 79)(24, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_24_Template, 2, 0, "span", 105);
213
+ i0.ɵɵelementEnd()();
214
+ } if (rf & 2) {
215
+ const out_r6 = ctx.$implicit;
216
+ const ctx_r1 = i0.ɵɵnextContext(4);
217
+ i0.ɵɵadvance(3);
218
+ i0.ɵɵclassMap(out_r6.FeatureKind === "numeric" ? "fa-solid fa-chart-line" : "fa-solid fa-tags");
219
+ i0.ɵɵstyleProp("color", out_r6.FeatureKind === "numeric" ? "#f59e0b" : "#8b5cf6");
220
+ i0.ɵɵadvance(2);
221
+ i0.ɵɵtextInterpolate(out_r6.Name);
222
+ i0.ɵɵadvance(2);
223
+ i0.ɵɵclassProp("rpf-type-numeric", out_r6.FeatureKind === "numeric")("rpf-type-categorical", out_r6.FeatureKind === "categorical")("rpf-type-default", out_r6.FeatureKind !== "numeric" && out_r6.FeatureKind !== "categorical");
224
+ i0.ɵɵadvance();
225
+ i0.ɵɵtextInterpolate1(" ", out_r6.FeatureKind, " ");
226
+ i0.ɵɵadvance(2);
227
+ i0.ɵɵproperty("title", "Violation policy: " + out_r6.ViolationPolicy);
228
+ i0.ɵɵadvance(2);
229
+ i0.ɵɵtextInterpolate1(" ", out_r6.ConstraintSummary, " ");
230
+ i0.ɵɵadvance(3);
231
+ i0.ɵɵclassMap(out_r6.TargetFieldExists ? "fa-solid fa-check-circle rpf-binding-valid" : "fa-solid fa-triangle-exclamation rpf-binding-invalid");
232
+ i0.ɵɵadvance(2);
233
+ i0.ɵɵtextInterpolate1("", ctx_r1.TargetEntityName, ".");
234
+ i0.ɵɵadvance(2);
235
+ i0.ɵɵtextInterpolate(out_r6.TargetField);
236
+ i0.ɵɵadvance(2);
237
+ i0.ɵɵtextInterpolate1("(", out_r6.TargetFieldType, ")");
238
+ i0.ɵɵadvance(2);
239
+ i0.ɵɵconditional(out_r6.ReasoningTarget === "Enabled" ? 23 : 24);
240
+ } }
241
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_Template(rf, ctx) { if (rf & 1) {
242
+ i0.ɵɵrepeaterCreate(0, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template, 25, 20, "tr", null, _forTrack1);
243
+ } if (rf & 2) {
244
+ const ctx_r1 = i0.ɵɵnextContext(3);
245
+ i0.ɵɵrepeater(ctx_r1.FeatureOutputs);
246
+ } }
247
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_59_Template(rf, ctx) { if (rf & 1) {
248
+ i0.ɵɵelementStart(0, "tr")(1, "td", 107);
249
+ i0.ɵɵtext(2, " No output features defined yet. Use the ");
250
+ i0.ɵɵelementStart(3, "em");
251
+ i0.ɵɵtext(4, "Pipeline Configuration");
252
+ i0.ɵɵelementEnd();
253
+ i0.ɵɵtext(5, " builder tab to add output features. ");
254
+ i0.ɵɵelementEnd()();
255
+ } }
256
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template(rf, ctx) { if (rf & 1) {
257
+ i0.ɵɵelementStart(0, "div", 94)(1, "pre")(2, "code");
258
+ i0.ɵɵtext(3);
259
+ i0.ɵɵelementEnd()()();
260
+ } if (rf & 2) {
261
+ const ctx_r1 = i0.ɵɵnextContext(3);
262
+ i0.ɵɵadvance(3);
263
+ i0.ɵɵtextInterpolate(ctx_r1.FormattedRawJson);
264
+ } }
265
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 95);
267
+ i0.ɵɵelement(1, "mj-form-field", 108)(2, "mj-form-field", 109)(3, "mj-form-field", 110);
268
+ i0.ɵɵelementEnd();
269
+ } if (rf & 2) {
270
+ const ctx_r1 = i0.ɵɵnextContext(3);
271
+ i0.ɵɵadvance();
272
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
273
+ i0.ɵɵadvance();
274
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
275
+ i0.ɵɵadvance();
276
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
277
+ } }
278
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
123
279
  const _r4 = i0.ɵɵgetCurrentView();
124
- i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 83);
125
- i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_109_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_109_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJRecordProcessWatermarks", $event.totalRowCount)); });
280
+ i0.ɵɵelementStart(0, "div", 69)(1, "div", 70)(2, "div", 71);
281
+ i0.ɵɵelement(3, "i");
282
+ i0.ɵɵelementStart(4, "span");
283
+ i0.ɵɵtext(5);
284
+ i0.ɵɵelementEnd()();
285
+ i0.ɵɵelementStart(6, "div", 71);
286
+ i0.ɵɵelement(7, "i", 72);
287
+ i0.ɵɵelementStart(8, "span");
288
+ i0.ɵɵtext(9);
289
+ i0.ɵɵelementEnd()();
290
+ i0.ɵɵelementStart(10, "div", 71);
291
+ i0.ɵɵelement(11, "i", 16);
292
+ i0.ɵɵelementStart(12, "span");
293
+ i0.ɵɵtext(13);
294
+ i0.ɵɵelementEnd()()()();
295
+ i0.ɵɵelementStart(14, "div", 73)(15, "div", 74)(16, "div", 75);
296
+ i0.ɵɵtext(17, "Bound AI Prompt");
297
+ i0.ɵɵelementEnd();
298
+ i0.ɵɵelementStart(18, "div", 76);
299
+ i0.ɵɵelement(19, "i", 77);
300
+ i0.ɵɵelementStart(20, "span");
301
+ i0.ɵɵtext(21);
302
+ i0.ɵɵelementEnd()();
303
+ i0.ɵɵelementStart(22, "div", 78);
304
+ i0.ɵɵconditionalCreate(23, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template, 2, 1, "span", 79);
305
+ i0.ɵɵelementStart(24, "span", 80);
306
+ i0.ɵɵelement(25, "i", 64);
307
+ i0.ɵɵtext(26, " Feature Infer Engine");
308
+ i0.ɵɵelementEnd();
309
+ i0.ɵɵelementStart(27, "span", 80);
310
+ i0.ɵɵelement(28, "i", 29);
311
+ i0.ɵɵtext(29, " LLM Output Parser");
312
+ i0.ɵɵelementEnd()();
313
+ i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template, 2, 4, "div", 81);
314
+ i0.ɵɵelementEnd();
315
+ i0.ɵɵelementStart(31, "div", 74)(32, "div", 75);
316
+ i0.ɵɵtext(33, "Prompt Parameter Resolution");
317
+ i0.ɵɵelementEnd();
318
+ i0.ɵɵconditionalCreate(34, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_Template, 3, 0, "div", 82)(35, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_35_Template, 2, 0, "div", 83);
319
+ i0.ɵɵelementEnd()();
320
+ i0.ɵɵelementStart(36, "div", 84)(37, "div", 85);
321
+ i0.ɵɵelement(38, "i", 86);
322
+ i0.ɵɵtext(39, " Context Retrieval Query ");
323
+ i0.ɵɵelementEnd();
324
+ i0.ɵɵelementStart(40, "div", 87)(41, "code");
325
+ i0.ɵɵtext(42);
326
+ i0.ɵɵelementEnd()()();
327
+ i0.ɵɵelementStart(43, "div", 88)(44, "table", 89)(45, "thead")(46, "tr")(47, "th");
328
+ i0.ɵɵtext(48, "Feature Name");
329
+ i0.ɵɵelementEnd();
330
+ i0.ɵɵelementStart(49, "th");
331
+ i0.ɵɵtext(50, "Kind / Type");
332
+ i0.ɵɵelementEnd();
333
+ i0.ɵɵelementStart(51, "th");
334
+ i0.ɵɵtext(52, "Validation Constraints");
335
+ i0.ɵɵelementEnd();
336
+ i0.ɵɵelementStart(53, "th");
337
+ i0.ɵɵtext(54, "Target Field Binding");
338
+ i0.ɵɵelementEnd();
339
+ i0.ɵɵelementStart(55, "th");
340
+ i0.ɵɵtext(56, "Reasoning");
341
+ i0.ɵɵelementEnd()()();
342
+ i0.ɵɵelementStart(57, "tbody");
343
+ i0.ɵɵconditionalCreate(58, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_Template, 2, 0)(59, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_59_Template, 6, 0, "tr");
344
+ i0.ɵɵelementEnd()()();
345
+ i0.ɵɵelementStart(60, "div", 90)(61, "div", 91);
346
+ i0.ɵɵlistener("click", function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template_div_click_61_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleRawJson()); });
347
+ i0.ɵɵelementStart(62, "div", 92);
348
+ i0.ɵɵelement(63, "i")(64, "i", 86);
349
+ i0.ɵɵelementStart(65, "span");
350
+ i0.ɵɵtext(66, "Power User Escape Hatch: View Raw Pipeline Configuration JSON");
351
+ i0.ɵɵelementEnd()();
352
+ i0.ɵɵelementStart(67, "button", 93);
353
+ i0.ɵɵlistener("click", function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template_button_click_67_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); $event.stopPropagation(); return i0.ɵɵresetView(ctx_r1.CopyRawJson()); });
354
+ i0.ɵɵelement(68, "i");
355
+ i0.ɵɵelementStart(69, "span");
356
+ i0.ɵɵtext(70);
357
+ i0.ɵɵelementEnd()()();
358
+ i0.ɵɵconditionalCreate(71, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template, 4, 1, "div", 94);
359
+ i0.ɵɵelementEnd();
360
+ i0.ɵɵconditionalCreate(72, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template, 4, 12, "div", 95);
361
+ } if (rf & 2) {
362
+ const ctx_r1 = i0.ɵɵnextContext(2);
363
+ i0.ɵɵclassProp("rpf-audit-bar-warning", !ctx_r1.IsSpecValid);
364
+ i0.ɵɵadvance(2);
365
+ i0.ɵɵclassProp("rpf-audit-chip-valid", ctx_r1.IsSpecValid)("rpf-audit-chip-warning", !ctx_r1.IsSpecValid);
366
+ i0.ɵɵadvance();
367
+ i0.ɵɵclassMap(ctx_r1.IsSpecValid ? "fa-solid fa-shield-check" : "fa-solid fa-triangle-exclamation");
368
+ i0.ɵɵadvance(2);
369
+ i0.ɵɵtextInterpolate(ctx_r1.IsSpecValid ? "Configuration Valid" : "Configuration Issues Found");
370
+ i0.ɵɵadvance(4);
371
+ i0.ɵɵtextInterpolate2("", ctx_r1.BoundFeaturesCount, " of ", ctx_r1.TotalFeaturesCount, " Features Bound to Target");
372
+ i0.ɵɵadvance(4);
373
+ i0.ɵɵtextInterpolate1("Context: ", ctx_r1.ContextModeText);
374
+ i0.ɵɵadvance(8);
375
+ i0.ɵɵtextInterpolate(ctx_r1.record.PromptID ? "Prompt Configured" : "No Prompt Selected");
376
+ i0.ɵɵadvance(2);
377
+ i0.ɵɵconditional(ctx_r1.record.PromptID ? 23 : -1);
378
+ i0.ɵɵadvance(7);
379
+ i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
380
+ i0.ɵɵadvance(4);
381
+ i0.ɵɵconditional(ctx_r1.ParameterMappings.length > 0 ? 34 : 35);
382
+ i0.ɵɵadvance(8);
383
+ i0.ɵɵtextInterpolate(ctx_r1.ContextQueryDisplay);
384
+ i0.ɵɵadvance(16);
385
+ i0.ɵɵconditional(ctx_r1.FeatureOutputs.length > 0 ? 58 : 59);
386
+ i0.ɵɵadvance(5);
387
+ i0.ɵɵclassMap(ctx_r1.RawJsonExpanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
388
+ i0.ɵɵadvance(5);
389
+ i0.ɵɵclassMap(ctx_r1.RawJsonCopied ? "fa-solid fa-check" : "fa-regular fa-copy");
390
+ i0.ɵɵadvance(2);
391
+ i0.ɵɵtextInterpolate(ctx_r1.RawJsonCopied ? "Copied!" : "Copy JSON");
392
+ i0.ɵɵadvance();
393
+ i0.ɵɵconditional(ctx_r1.RawJsonExpanded ? 71 : -1);
394
+ i0.ɵɵadvance();
395
+ i0.ɵɵconditional(ctx_r1.EditMode ? 72 : -1);
396
+ } }
397
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
398
+ i0.ɵɵelement(0, "mj-form-field", 108)(1, "mj-form-field", 111)(2, "mj-form-field", 112)(3, "mj-form-field", 96)(4, "mj-form-field", 113)(5, "mj-form-field", 110)(6, "mj-form-field", 109);
399
+ } if (rf & 2) {
400
+ const ctx_r1 = i0.ɵɵnextContext(2);
401
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
402
+ i0.ɵɵadvance();
403
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
404
+ i0.ɵɵadvance();
405
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
406
+ i0.ɵɵadvance();
407
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
408
+ i0.ɵɵadvance();
409
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
410
+ i0.ɵɵadvance();
411
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
412
+ i0.ɵɵadvance();
413
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
414
+ } }
415
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template(rf, ctx) { if (rf & 1) {
416
+ i0.ɵɵelementStart(0, "span", 117);
417
+ i0.ɵɵelement(1, "i", 118);
418
+ i0.ɵɵelementStart(2, "span");
419
+ i0.ɵɵtext(3, "Filter Active");
420
+ i0.ɵɵelementEnd()();
421
+ } }
422
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_10_Template(rf, ctx) { if (rf & 1) {
423
+ i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
424
+ i0.ɵɵelement(2, "i", 16);
425
+ i0.ɵɵtext(3, " SQL Scope Filter (WHERE clause) ");
426
+ i0.ɵɵelementEnd();
427
+ i0.ɵɵelementStart(4, "div", 87)(5, "code");
428
+ i0.ɵɵtext(6);
429
+ i0.ɵɵelementEnd()()();
430
+ } if (rf & 2) {
431
+ const ctx_r1 = i0.ɵɵnextContext(3);
432
+ i0.ɵɵadvance(6);
433
+ i0.ɵɵtextInterpolate(ctx_r1.FormattedScopeFilter);
434
+ } }
435
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_11_Template(rf, ctx) { if (rf & 1) {
436
+ i0.ɵɵelementStart(0, "div", 36);
437
+ i0.ɵɵelement(1, "i", 67);
438
+ i0.ɵɵelementStart(2, "span");
439
+ i0.ɵɵtext(3, "No scope filter applied. All records in ");
440
+ i0.ɵɵelementStart(4, "strong");
441
+ i0.ɵɵtext(5);
442
+ i0.ɵɵelementEnd();
443
+ i0.ɵɵtext(6, " will be evaluated.");
444
+ i0.ɵɵelementEnd()();
445
+ } if (rf & 2) {
446
+ const ctx_r1 = i0.ɵɵnextContext(3);
447
+ i0.ɵɵadvance(5);
448
+ i0.ɵɵtextInterpolate(ctx_r1.TargetEntityName);
449
+ } }
450
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template(rf, ctx) { if (rf & 1) {
451
+ i0.ɵɵelementStart(0, "div", 95);
452
+ i0.ɵɵelement(1, "mj-form-field", 119)(2, "mj-form-field", 120);
453
+ i0.ɵɵelementEnd();
454
+ } if (rf & 2) {
455
+ const ctx_r1 = i0.ɵɵnextContext(3);
456
+ i0.ɵɵadvance();
457
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
458
+ i0.ɵɵadvance();
459
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
460
+ } }
461
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
462
+ i0.ɵɵelementStart(0, "div", 45)(1, "div", 114)(2, "div", 115)(3, "span", 116);
463
+ i0.ɵɵelement(4, "i", 22);
464
+ i0.ɵɵelementStart(5, "span");
465
+ i0.ɵɵtext(6, "Scope Type: ");
466
+ i0.ɵɵelementStart(7, "strong");
467
+ i0.ɵɵtext(8);
468
+ i0.ɵɵelementEnd()()();
469
+ i0.ɵɵconditionalCreate(9, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template, 4, 0, "span", 117);
470
+ i0.ɵɵelementEnd()();
471
+ i0.ɵɵconditionalCreate(10, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_10_Template, 7, 1, "div", 84)(11, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_11_Template, 7, 1, "div", 36);
472
+ i0.ɵɵconditionalCreate(12, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template, 3, 8, "div", 95);
473
+ i0.ɵɵelementEnd();
474
+ } if (rf & 2) {
475
+ const ctx_r1 = i0.ɵɵnextContext(2);
476
+ i0.ɵɵadvance(8);
477
+ i0.ɵɵtextInterpolate(ctx_r1.record.ScopeType || "Filter");
478
+ i0.ɵɵadvance();
479
+ i0.ɵɵconditional(ctx_r1.record.ScopeFilter ? 9 : -1);
480
+ i0.ɵɵadvance();
481
+ i0.ɵɵconditional(ctx_r1.FormattedScopeFilter ? 10 : 11);
482
+ i0.ɵɵadvance(2);
483
+ i0.ɵɵconditional(ctx_r1.EditMode ? 12 : -1);
484
+ } }
485
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
486
+ i0.ɵɵelement(0, "mj-form-field", 119)(1, "mj-form-field", 121)(2, "mj-form-field", 122)(3, "mj-form-field", 120);
487
+ } if (rf & 2) {
488
+ const ctx_r1 = i0.ɵɵnextContext(2);
489
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
490
+ i0.ɵɵadvance();
491
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
492
+ i0.ɵɵadvance();
493
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
494
+ i0.ɵɵadvance();
495
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
496
+ } }
497
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template(rf, ctx) { if (rf & 1) {
498
+ i0.ɵɵelementStart(0, "div", 95);
499
+ i0.ɵɵelement(1, "mj-form-field", 128)(2, "mj-form-field", 129)(3, "mj-form-field", 130)(4, "mj-form-field", 131);
500
+ i0.ɵɵelementEnd();
501
+ } if (rf & 2) {
502
+ const ctx_r1 = i0.ɵɵnextContext(3);
503
+ i0.ɵɵadvance();
504
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
505
+ i0.ɵɵadvance();
506
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
507
+ i0.ɵɵadvance();
508
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
509
+ i0.ɵɵadvance();
510
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
511
+ } }
512
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
513
+ i0.ɵɵelementStart(0, "div", 123)(1, "div", 124)(2, "div", 125);
514
+ i0.ɵɵtext(3, "Delta Watermark");
515
+ i0.ɵɵelementEnd();
516
+ i0.ɵɵelementStart(4, "div", 126);
517
+ i0.ɵɵtext(5);
518
+ i0.ɵɵelementEnd();
519
+ i0.ɵɵelementStart(6, "div", 127);
520
+ i0.ɵɵtext(7, "Evaluates row state changes");
521
+ i0.ɵɵelementEnd()();
522
+ i0.ɵɵelementStart(8, "div", 124)(9, "div", 125);
523
+ i0.ɵɵtext(10, "Batch Processing");
524
+ i0.ɵɵelementEnd();
525
+ i0.ɵɵelementStart(11, "div", 126);
526
+ i0.ɵɵtext(12);
527
+ i0.ɵɵelementEnd();
528
+ i0.ɵɵelementStart(13, "div", 127);
529
+ i0.ɵɵtext(14, "Per inference chunk");
530
+ i0.ɵɵelementEnd()();
531
+ i0.ɵɵelementStart(15, "div", 124)(16, "div", 125);
532
+ i0.ɵɵtext(17, "Concurrency");
533
+ i0.ɵɵelementEnd();
534
+ i0.ɵɵelementStart(18, "div", 126);
535
+ i0.ɵɵtext(19);
536
+ i0.ɵɵelementEnd();
537
+ i0.ɵɵelementStart(20, "div", 127);
538
+ i0.ɵɵtext(21, "Concurrent worker threads");
539
+ i0.ɵɵelementEnd()();
540
+ i0.ɵɵelementStart(22, "div", 124)(23, "div", 125);
541
+ i0.ɵɵtext(24, "Skip Unchanged");
542
+ i0.ɵɵelementEnd();
543
+ i0.ɵɵelementStart(25, "div", 126);
544
+ i0.ɵɵelement(26, "i");
545
+ i0.ɵɵtext(27);
546
+ i0.ɵɵelementEnd();
547
+ i0.ɵɵelementStart(28, "div", 127);
548
+ i0.ɵɵtext(29, "Skips re-evaluating unchanged rows");
549
+ i0.ɵɵelementEnd()()();
550
+ i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template, 5, 16, "div", 95);
551
+ } if (rf & 2) {
552
+ const ctx_r1 = i0.ɵɵnextContext(2);
553
+ i0.ɵɵadvance(5);
554
+ i0.ɵɵtextInterpolate(ctx_r1.record.WatermarkStrategy || "Checksum");
555
+ i0.ɵɵadvance(7);
556
+ i0.ɵɵtextInterpolate1("", ctx_r1.record.BatchSize || 100, " records");
557
+ i0.ɵɵadvance(7);
558
+ i0.ɵɵtextInterpolate1("", ctx_r1.record.MaxConcurrency || 1, " Parallel");
559
+ i0.ɵɵadvance(6);
560
+ i0.ɵɵclassProp("rpf-text-success", ctx_r1.record.SkipUnchanged);
561
+ i0.ɵɵadvance();
562
+ i0.ɵɵclassMap(ctx_r1.record.SkipUnchanged ? "fa-solid fa-check" : "fa-solid fa-minus");
563
+ i0.ɵɵadvance();
564
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.SkipUnchanged ? "Enabled" : "Disabled", " ");
565
+ i0.ɵɵadvance(3);
566
+ i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
567
+ } }
568
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
569
+ i0.ɵɵelement(0, "mj-form-field", 128)(1, "mj-form-field", 129)(2, "mj-form-field", 130)(3, "mj-form-field", 131);
570
+ } if (rf & 2) {
571
+ const ctx_r1 = i0.ɵɵnextContext(2);
572
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
573
+ i0.ɵɵadvance();
574
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
575
+ i0.ɵɵadvance();
576
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
577
+ i0.ɵɵadvance();
578
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
579
+ } }
580
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template(rf, ctx) { if (rf & 1) {
581
+ const _r7 = i0.ɵɵgetCurrentView();
582
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
583
+ i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJRecordProcessWatermarks", $event.totalRowCount)); });
126
584
  i0.ɵɵelementEnd()();
127
585
  } if (rf & 2) {
128
586
  const ctx_r1 = i0.ɵɵnextContext(2);
129
587
  i0.ɵɵadvance();
130
588
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Record Process Watermarks", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Record Process Watermarks", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJRecordProcessWatermarks"))("ShowToolbar", true);
131
589
  } }
132
- function RecordProcessFormComponentExtended_Conditional_0_Conditional_111_Template(rf, ctx) { if (rf & 1) {
133
- const _r5 = i0.ɵɵgetCurrentView();
134
- i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 83);
135
- i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_111_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_111_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJMLModelScoringBindings", $event.totalRowCount)); });
590
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template(rf, ctx) { if (rf & 1) {
591
+ const _r8 = i0.ɵɵgetCurrentView();
592
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
593
+ i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJMLModelScoringBindings", $event.totalRowCount)); });
136
594
  i0.ɵɵelementEnd()();
137
595
  } if (rf & 2) {
138
596
  const ctx_r1 = i0.ɵɵnextContext(2);
139
597
  i0.ɵɵadvance();
140
598
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: ML Model Scoring Bindings", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: ML Model Scoring Bindings", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJMLModelScoringBindings"))("ShowToolbar", true);
141
599
  } }
142
- function RecordProcessFormComponentExtended_Conditional_0_Conditional_113_Template(rf, ctx) { if (rf & 1) {
143
- const _r6 = i0.ɵɵgetCurrentView();
144
- i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 83);
145
- i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_113_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_113_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValues", $event.totalRowCount)); });
600
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template(rf, ctx) { if (rf & 1) {
601
+ const _r9 = i0.ɵɵgetCurrentView();
602
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
603
+ i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValues", $event.totalRowCount)); });
146
604
  i0.ɵɵelementEnd()();
147
605
  } if (rf & 2) {
148
606
  const ctx_r1 = i0.ɵɵnextContext(2);
149
607
  i0.ɵɵadvance();
150
608
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Feature Values", "RecordProcessID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Feature Values", "RecordProcessID"))("AllowLoad", ctx_r1.IsSectionExpanded("mJFeatureValues"))("ShowToolbar", true);
151
609
  } }
152
- function RecordProcessFormComponentExtended_Conditional_0_Conditional_115_Template(rf, ctx) { if (rf & 1) {
153
- const _r7 = i0.ɵɵgetCurrentView();
154
- i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 83);
155
- i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_115_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_115_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValueCaches", $event.totalRowCount)); });
610
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template(rf, ctx) { if (rf & 1) {
611
+ const _r10 = i0.ɵɵgetCurrentView();
612
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
613
+ i0.ɵɵlistener("Navigate", function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template_mj_explorer_entity_data_grid_Navigate_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnFormNavigate($event)); })("AfterDataLoad", function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template_mj_explorer_entity_data_grid_AfterDataLoad_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SetSectionRowCount("mJFeatureValueCaches", $event.totalRowCount)); });
156
614
  i0.ɵɵelementEnd()();
157
615
  } if (rf & 2) {
158
616
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -230,7 +688,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
230
688
  i0.ɵɵtext(64);
231
689
  i0.ɵɵelementEnd()()()()();
232
690
  i0.ɵɵelementStart(65, "mj-collapsible-panel", 30);
233
- i0.ɵɵconditionalCreate(66, RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template, 2, 2, "div", 31)(67, RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Template, 2, 3, "div", 32)(68, RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Template, 14, 1, "div", 33);
691
+ i0.ɵɵconditionalCreate(66, RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template, 2, 3, "div", 31)(67, RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Template, 2, 3, "div", 32)(68, RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Template, 14, 1, "div", 33);
234
692
  i0.ɵɵelementEnd();
235
693
  i0.ɵɵelementStart(69, "mj-collapsible-panel", 34);
236
694
  i0.ɵɵconditionalCreate(70, RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Template, 2, 1, "div", 35)(71, RecordProcessFormComponentExtended_Conditional_0_Conditional_71_Template, 4, 0, "div", 36);
@@ -239,34 +697,34 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
239
697
  i0.ɵɵelement(73, "mj-form-field", 38)(74, "mj-form-field", 39)(75, "mj-form-field", 40)(76, "mj-form-field", 41)(77, "mj-form-field", 42);
240
698
  i0.ɵɵelementEnd();
241
699
  i0.ɵɵelementStart(78, "mj-collapsible-panel", 43);
242
- i0.ɵɵelement(79, "mj-form-field", 44)(80, "mj-form-field", 45)(81, "mj-form-field", 46)(82, "mj-form-field", 47)(83, "mj-form-field", 48)(84, "mj-form-field", 49)(85, "mj-form-field", 50);
700
+ i0.ɵɵconditionalCreate(79, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template, 73, 25)(80, RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template, 7, 28);
243
701
  i0.ɵɵelementEnd();
244
- i0.ɵɵelementStart(86, "mj-collapsible-panel", 51);
245
- i0.ɵɵelement(87, "mj-form-field", 52)(88, "mj-form-field", 53)(89, "mj-form-field", 54)(90, "mj-form-field", 55);
702
+ i0.ɵɵelementStart(81, "mj-collapsible-panel", 44);
703
+ i0.ɵɵconditionalCreate(82, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template, 13, 4, "div", 45)(83, RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template, 4, 16);
246
704
  i0.ɵɵelementEnd();
247
- i0.ɵɵelementStart(91, "mj-collapsible-panel", 56);
248
- i0.ɵɵelement(92, "mj-form-field", 57)(93, "mj-form-field", 58)(94, "mj-form-field", 59)(95, "mj-form-field", 60)(96, "mj-form-field", 61)(97, "mj-form-field", 62)(98, "mj-form-field", 63);
705
+ i0.ɵɵelementStart(84, "mj-collapsible-panel", 46);
706
+ i0.ɵɵelement(85, "mj-form-field", 47)(86, "mj-form-field", 48)(87, "mj-form-field", 49)(88, "mj-form-field", 50)(89, "mj-form-field", 51)(90, "mj-form-field", 52)(91, "mj-form-field", 53);
249
707
  i0.ɵɵelementEnd();
250
- i0.ɵɵelementStart(99, "mj-collapsible-panel", 64);
251
- i0.ɵɵelement(100, "mj-form-field", 65)(101, "mj-form-field", 66)(102, "mj-form-field", 67)(103, "mj-form-field", 68);
708
+ i0.ɵɵelementStart(92, "mj-collapsible-panel", 54);
709
+ i0.ɵɵconditionalCreate(93, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template, 31, 9)(94, RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template, 4, 16);
252
710
  i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(104, "mj-collapsible-panel", 69);
254
- i0.ɵɵelement(105, "mj-form-field", 70)(106, "mj-form-field", 71);
711
+ i0.ɵɵelementStart(95, "mj-collapsible-panel", 55);
712
+ i0.ɵɵelement(96, "mj-form-field", 56)(97, "mj-form-field", 57);
255
713
  i0.ɵɵelementEnd();
256
- i0.ɵɵelement(107, "mj-form-panel-slot", 72);
257
- i0.ɵɵelementStart(108, "mj-collapsible-panel", 73);
258
- i0.ɵɵconditionalCreate(109, RecordProcessFormComponentExtended_Conditional_0_Conditional_109_Template, 2, 4, "div");
714
+ i0.ɵɵelement(98, "mj-form-panel-slot", 58);
715
+ i0.ɵɵelementStart(99, "mj-collapsible-panel", 59);
716
+ i0.ɵɵconditionalCreate(100, RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template, 2, 4, "div");
259
717
  i0.ɵɵelementEnd();
260
- i0.ɵɵelementStart(110, "mj-collapsible-panel", 74);
261
- i0.ɵɵconditionalCreate(111, RecordProcessFormComponentExtended_Conditional_0_Conditional_111_Template, 2, 4, "div");
718
+ i0.ɵɵelementStart(101, "mj-collapsible-panel", 60);
719
+ i0.ɵɵconditionalCreate(102, RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template, 2, 4, "div");
262
720
  i0.ɵɵelementEnd();
263
- i0.ɵɵelementStart(112, "mj-collapsible-panel", 75);
264
- i0.ɵɵconditionalCreate(113, RecordProcessFormComponentExtended_Conditional_0_Conditional_113_Template, 2, 4, "div");
721
+ i0.ɵɵelementStart(103, "mj-collapsible-panel", 61);
722
+ i0.ɵɵconditionalCreate(104, RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template, 2, 4, "div");
265
723
  i0.ɵɵelementEnd();
266
- i0.ɵɵelementStart(114, "mj-collapsible-panel", 76);
267
- i0.ɵɵconditionalCreate(115, RecordProcessFormComponentExtended_Conditional_0_Conditional_115_Template, 2, 4, "div");
724
+ i0.ɵɵelementStart(105, "mj-collapsible-panel", 62);
725
+ i0.ɵɵconditionalCreate(106, RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template, 2, 4, "div");
268
726
  i0.ɵɵelementEnd();
269
- i0.ɵɵelement(116, "mj-form-panel-slot", 77);
727
+ i0.ɵɵelement(107, "mj-form-panel-slot", 63);
270
728
  i0.ɵɵelementEnd();
271
729
  } if (rf & 2) {
272
730
  const ctx_r1 = i0.ɵɵnextContext();
@@ -334,30 +792,12 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
334
792
  i0.ɵɵadvance();
335
793
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
336
794
  i0.ɵɵadvance();
337
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
338
- i0.ɵɵadvance();
339
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
340
- i0.ɵɵadvance();
341
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
342
- i0.ɵɵadvance();
343
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
344
- i0.ɵɵadvance();
345
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
346
- i0.ɵɵadvance();
347
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
348
- i0.ɵɵadvance();
349
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
350
- i0.ɵɵadvance();
795
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 79 : 80);
796
+ i0.ɵɵadvance(2);
351
797
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
352
798
  i0.ɵɵadvance();
353
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
354
- i0.ɵɵadvance();
355
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
356
- i0.ɵɵadvance();
357
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
358
- i0.ɵɵadvance();
359
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
360
- i0.ɵɵadvance();
799
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 82 : 83);
800
+ i0.ɵɵadvance(2);
361
801
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
362
802
  i0.ɵɵadvance();
363
803
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
@@ -376,14 +816,8 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
376
816
  i0.ɵɵadvance();
377
817
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
378
818
  i0.ɵɵadvance();
379
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
380
- i0.ɵɵadvance();
381
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
382
- i0.ɵɵadvance();
383
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
384
- i0.ɵɵadvance();
385
- i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
386
- i0.ɵɵadvance();
819
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 93 : 94);
820
+ i0.ɵɵadvance(2);
387
821
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
388
822
  i0.ɵɵadvance();
389
823
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
@@ -394,22 +828,205 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
394
828
  i0.ɵɵadvance();
395
829
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJRecordProcessWatermarks"))("DefaultExpanded", false);
396
830
  i0.ɵɵadvance();
397
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 109 : -1);
831
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 100 : -1);
398
832
  i0.ɵɵadvance();
399
833
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJMLModelScoringBindings"))("DefaultExpanded", false);
400
834
  i0.ɵɵadvance();
401
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 111 : -1);
835
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 102 : -1);
402
836
  i0.ɵɵadvance();
403
837
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValues"))("DefaultExpanded", false);
404
838
  i0.ɵɵadvance();
405
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 113 : -1);
839
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 104 : -1);
406
840
  i0.ɵɵadvance();
407
841
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValueCaches"))("DefaultExpanded", false);
408
842
  i0.ɵɵadvance();
409
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 115 : -1);
843
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 106 : -1);
410
844
  i0.ɵɵadvance();
411
845
  i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
412
846
  } }
847
+ /**
848
+ * Pure helper function to format raw JSON.
849
+ */
850
+ export function FormatRawPipelineJson(configuration) {
851
+ if (!configuration)
852
+ return '';
853
+ const parsed = SafeJSONParse(configuration);
854
+ return parsed ? JSON.stringify(parsed, null, 2) : configuration;
855
+ }
856
+ /** @deprecated Use {@link FormatRawPipelineJson}. */
857
+ export function formatRawPipelineJson(configuration) {
858
+ return FormatRawPipelineJson(configuration);
859
+ }
860
+ /**
861
+ * Pure helper function to parse DataFeatureSpec safely.
862
+ */
863
+ export function ParsePipelineSpec(configuration) {
864
+ if (!configuration)
865
+ return null;
866
+ return SafeJSONParse(configuration);
867
+ }
868
+ /** @deprecated Use {@link ParsePipelineSpec}. */
869
+ export function parsePipelineSpec(configuration) {
870
+ return ParsePipelineSpec(configuration);
871
+ }
872
+ /**
873
+ * Pure helper function to validate pipeline spec against entity stub.
874
+ */
875
+ export function ValidatePipelineSpec(spec, entityStub) {
876
+ if (!spec)
877
+ return [];
878
+ return validateSpec(spec, entityStub);
879
+ }
880
+ /** @deprecated Use {@link ValidatePipelineSpec}. */
881
+ export function validatePipelineSpec(spec, entityStub) {
882
+ return ValidatePipelineSpec(spec, entityStub);
883
+ }
884
+ /**
885
+ * Pure helper to build feature output view-models from spec or output mapping.
886
+ */
887
+ export function BuildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
888
+ const outputs = [];
889
+ if (spec?.Outputs && spec.Outputs.length > 0) {
890
+ for (const out of spec.Outputs) {
891
+ let targetFieldName = '';
892
+ const targetMode = out.Target?.Mode;
893
+ if (out.Target?.Mode === 'field') {
894
+ targetFieldName = out.Target.EntityFieldName;
895
+ }
896
+ else if (out.Target?.Mode === 'child') {
897
+ targetFieldName = `Child: ${out.Target.EntityName}`;
898
+ }
899
+ else if (out.Target?.Mode === 'tags') {
900
+ targetFieldName = `Tags (${out.Target.Growth || 'taxonomy'})`;
901
+ }
902
+ let constraintText = 'None';
903
+ let violationPolicy = 'error';
904
+ const c = out.Constraint;
905
+ if (c) {
906
+ if (c.OnViolation) {
907
+ violationPolicy = c.OnViolation;
908
+ }
909
+ switch (c.Type) {
910
+ case 'numeric':
911
+ case 'money': {
912
+ const min = c.Min != null ? String(c.Min) : '-∞';
913
+ const max = c.Max != null ? String(c.Max) : '+∞';
914
+ constraintText = `[${min}, ${max}]`;
915
+ break;
916
+ }
917
+ case 'enum': {
918
+ if (c.Values && c.Values.length > 0) {
919
+ constraintText = `Allowed: ${c.Values.slice(0, 3).join(', ')}${c.Values.length > 3 ? '...' : ''}`;
920
+ }
921
+ else if (c.FromFieldMetadata) {
922
+ constraintText = 'From Field Metadata';
923
+ }
924
+ break;
925
+ }
926
+ case 'lookup': {
927
+ constraintText = `Lookup: ${c.Entity || ''}.${c.MatchField || ''}`;
928
+ break;
929
+ }
930
+ case 'date': {
931
+ constraintText = `Date: [${c.Min || '-∞'}, ${c.Max || '+∞'}]`;
932
+ break;
933
+ }
934
+ case 'boolean': {
935
+ constraintText = 'Boolean';
936
+ break;
937
+ }
938
+ case 'freetext': {
939
+ constraintText = c.MaxLength != null ? `Max: ${c.MaxLength} chars` : 'Freetext';
940
+ break;
941
+ }
942
+ }
943
+ }
944
+ const isFieldMode = targetMode === 'field';
945
+ const field = isFieldMode && targetFieldName && entityInfo?.Fields
946
+ ? entityInfo.Fields.find((f) => f.Name.toLowerCase() === targetFieldName.toLowerCase())
947
+ : undefined;
948
+ outputs.push({
949
+ Name: out.Name || out.Ref || 'Unnamed',
950
+ Ref: out.Ref || '',
951
+ FeatureKind: out.FeatureKind || (c?.Type === 'numeric' ? 'numeric' : 'categorical'),
952
+ TargetField: targetFieldName || '—',
953
+ TargetFieldExists: isFieldMode ? !!field : true,
954
+ TargetFieldType: isFieldMode ? (field?.TSType || field?.Type || 'unbound') : (targetMode || 'custom'),
955
+ ConstraintSummary: constraintText,
956
+ ViolationPolicy: violationPolicy,
957
+ ReasoningTarget: spec.CaptureReasoning ? 'Enabled' : 'None',
958
+ });
959
+ }
960
+ }
961
+ else if (outputMapping) {
962
+ const mapping = SafeJSONParse(outputMapping);
963
+ const fieldsObj = (mapping && 'fields' in mapping && mapping.fields) ? mapping.fields : mapping;
964
+ if (fieldsObj && typeof fieldsObj === 'object') {
965
+ for (const [key, val] of Object.entries(fieldsObj)) {
966
+ const field = entityInfo?.Fields?.find((f) => f.Name.toLowerCase() === key.toLowerCase());
967
+ outputs.push({
968
+ Name: String(val),
969
+ Ref: String(val),
970
+ FeatureKind: 'field',
971
+ TargetField: key,
972
+ TargetFieldExists: !!field,
973
+ TargetFieldType: field?.TSType || field?.Type || 'unbound',
974
+ ConstraintSummary: 'Standard',
975
+ ViolationPolicy: 'null',
976
+ ReasoningTarget: 'None',
977
+ });
978
+ }
979
+ }
980
+ }
981
+ return outputs;
982
+ }
983
+ /** @deprecated Use {@link BuildFeatureOutputViewModels}. */
984
+ export function buildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
985
+ return BuildFeatureOutputViewModels(spec, entityInfo, outputMapping);
986
+ }
987
+ /**
988
+ * Pure helper to build prompt parameter resolution mappings.
989
+ */
990
+ export function BuildPromptParamViewModels(spec, inputMapping) {
991
+ const mappings = [];
992
+ if (spec?.Context?.QueryParams) {
993
+ for (const [param, field] of Object.entries(spec.Context.QueryParams)) {
994
+ mappings.push({ Param: `@${param}`, Field: String(field) });
995
+ }
996
+ }
997
+ else if (spec?.Context?.InputMapping) {
998
+ for (const [param, field] of Object.entries(spec.Context.InputMapping)) {
999
+ mappings.push({ Param: `@${param}`, Field: String(field) });
1000
+ }
1001
+ }
1002
+ else if (inputMapping) {
1003
+ const raw = SafeJSONParse(inputMapping);
1004
+ if (raw) {
1005
+ for (const [param, field] of Object.entries(raw)) {
1006
+ mappings.push({ Param: `@${param}`, Field: String(field) });
1007
+ }
1008
+ }
1009
+ }
1010
+ return mappings;
1011
+ }
1012
+ /** @deprecated Use {@link BuildPromptParamViewModels}. */
1013
+ export function buildPromptParamViewModels(spec, inputMapping) {
1014
+ return BuildPromptParamViewModels(spec, inputMapping);
1015
+ }
1016
+ /** The message the form refuses a save with when the builder flagged the pipeline without listing why. */
1017
+ export const PIPELINE_BUILDER_INVALID_MESSAGE = 'The pipeline configuration has errors. Fix them under Pipeline Configuration before saving.';
1018
+ /**
1019
+ * Why the record form refuses to save an Infer pipeline the builder reports invalid: the builder's error
1020
+ * messages, once each, or {@link PIPELINE_BUILDER_INVALID_MESSAGE} when they are not available. Empty for
1021
+ * any other work type (the builder only edits Infer pipelines), and while the builder reports it valid.
1022
+ */
1023
+ export function GetPipelineBuilderSaveErrors(workType, pipelineValid, builderIssues) {
1024
+ if (workType !== 'Infer' || pipelineValid) {
1025
+ return [];
1026
+ }
1027
+ const messages = (builderIssues ?? []).filter((issue) => issue.Severity === 'error').map((issue) => issue.Message);
1028
+ return messages.length > 0 ? Array.from(new Set(messages)) : [PIPELINE_BUILDER_INVALID_MESSAGE];
1029
+ }
413
1030
  /**
414
1031
  * Custom form override for `MJ: Record Processes` (priority 100).
415
1032
  * Presents the Record Process / Feature Pipeline in a first-class MJ form with:
@@ -417,19 +1034,58 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
417
1034
  * - Builder panel: "Pipeline Configuration" embedding the visual <mj-feature-pipeline-builder> for Infer / Feature Pipelines,
418
1035
  * or the <mj-record-process-editor> for Field Rules.
419
1036
  * - History panel: "Prior Runs" embedding <mj-record-process-history> with run status, metrics, and per-record diff drill-down.
420
- * - Standard field sections: Process Definition, Execution Logic, Scope Configuration, Triggers, Performance & Optimization.
1037
+ * - Details panel (Option A Structured Cards): First-class semantic cards for Infer pipelines, replacing raw JSON
1038
+ * with configuration health diagnostics, prompt context binding, feature output schema & column validation,
1039
+ * scope preview, and a collapsible raw JSON drawer.
421
1040
  * - Related entity sections: Watermarks, ML Model Scoring Bindings, Feature Values, Feature Value Caches.
422
1041
  * - System Metadata panel.
423
1042
  */
424
1043
  let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtended extends MJRecordProcessFormComponent {
425
1044
  constructor() {
426
1045
  super(...arguments);
427
- this.pipelineValid = true;
1046
+ /** Whether the Feature Pipeline builder last reported the pipeline valid. The form refuses to save while it is false. */
1047
+ this.PipelineValid = true;
1048
+ this.RawJsonExpanded = false;
1049
+ this.RawJsonCopied = false;
1050
+ this.LoadedQuery = null;
1051
+ }
1052
+ /** @deprecated Use {@link PipelineValid}. */
1053
+ get pipelineValid() {
1054
+ return this.PipelineValid;
1055
+ }
1056
+ /** @deprecated Use {@link PipelineValid}. */
1057
+ set pipelineValid(value) {
1058
+ this.PipelineValid = value;
1059
+ }
1060
+ /** @deprecated Use {@link RawJsonExpanded}. */
1061
+ get rawJsonExpanded() {
1062
+ return this.RawJsonExpanded;
1063
+ }
1064
+ /** @deprecated Use {@link RawJsonExpanded}. */
1065
+ set rawJsonExpanded(value) {
1066
+ this.RawJsonExpanded = value;
1067
+ }
1068
+ /** @deprecated Use {@link RawJsonCopied}. */
1069
+ get rawJsonCopied() {
1070
+ return this.RawJsonCopied;
1071
+ }
1072
+ /** @deprecated Use {@link RawJsonCopied}. */
1073
+ set rawJsonCopied(value) {
1074
+ this.RawJsonCopied = value;
1075
+ }
1076
+ /** @deprecated Use {@link LoadedQuery}. */
1077
+ get loadedQuery() {
1078
+ return this.LoadedQuery;
1079
+ }
1080
+ /** @deprecated Use {@link LoadedQuery}. */
1081
+ set loadedQuery(value) {
1082
+ this.LoadedQuery = value;
428
1083
  }
429
1084
  async ngOnInit() {
430
1085
  await super.ngOnInit();
431
1086
  this.initSections([
432
1087
  { sectionKey: 'processOverview', sectionName: 'Overview & Status', isExpanded: true },
1088
+ { sectionKey: 'inferConfig', sectionName: 'Infer Configuration', isExpanded: true },
433
1089
  { sectionKey: 'pipelineConfiguration', sectionName: 'Pipeline Configuration', isExpanded: true },
434
1090
  { sectionKey: 'processRuns', sectionName: 'Prior Runs', isExpanded: true },
435
1091
  { sectionKey: 'processDefinition', sectionName: 'Process Definition', isExpanded: true },
@@ -443,6 +1099,31 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
443
1099
  { sectionKey: 'mJFeatureValueCaches', sectionName: 'Feature Value Caches', isExpanded: false },
444
1100
  { sectionKey: 'systemMetadata', sectionName: 'System Metadata', isExpanded: false },
445
1101
  ]);
1102
+ await this.loadContextQuery();
1103
+ }
1104
+ async loadContextQuery() {
1105
+ const queryId = this.ParsedSpec?.Context?.QueryID;
1106
+ if (!queryId)
1107
+ return;
1108
+ try {
1109
+ const rv = new RunView();
1110
+ const res = await rv.RunView({
1111
+ EntityName: 'MJ: Queries',
1112
+ ExtraFilter: `ID = '${EscapeSQLString(queryId)}'`,
1113
+ Fields: ['ID', 'Name', 'SQL'],
1114
+ ResultType: 'simple',
1115
+ });
1116
+ if (res.Success && res.Results && res.Results.length > 0) {
1117
+ this.LoadedQuery = res.Results[0];
1118
+ this.cdr.markForCheck();
1119
+ }
1120
+ else if (!res.Success) {
1121
+ LogError(`[RecordProcessForm] Failed to load context query ${queryId}: ${res.ErrorMessage}`);
1122
+ }
1123
+ }
1124
+ catch (e) {
1125
+ LogError(`[RecordProcessForm] Exception loading context query ${queryId}`, undefined, e);
1126
+ }
446
1127
  }
447
1128
  get TargetEntityName() {
448
1129
  if (!this.record?.EntityID)
@@ -450,6 +1131,11 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
450
1131
  const entity = this.ProviderToUse.EntityByID(this.record.EntityID);
451
1132
  return entity?.DisplayName || entity?.Name || this.record.EntityID;
452
1133
  }
1134
+ get TargetEntityInfo() {
1135
+ if (!this.record?.EntityID)
1136
+ return undefined;
1137
+ return this.ProviderToUse.EntityByID(this.record.EntityID);
1138
+ }
453
1139
  get WorkTypeIcon() {
454
1140
  switch (this.record?.WorkType) {
455
1141
  case 'Infer':
@@ -482,15 +1168,134 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
482
1168
  this.cdr.markForCheck();
483
1169
  }
484
1170
  OnPipelineValidChange(valid) {
485
- this.pipelineValid = valid;
1171
+ this.PipelineValid = valid;
486
1172
  this.cdr.markForCheck();
487
1173
  }
1174
+ /**
1175
+ * The record's validation (which includes the shared Feature Pipeline save check), plus the builder's
1176
+ * verdict: while the builder reports an Infer pipeline invalid, the save is refused and its errors are
1177
+ * listed on Configuration.
1178
+ */
1179
+ Validate() {
1180
+ const result = super.Validate();
1181
+ const builderErrors = GetPipelineBuilderSaveErrors(this.record?.WorkType, this.PipelineValid, this.pipelineBuilder?.ValidationErrors);
1182
+ for (const message of builderErrors) {
1183
+ if (!result.Errors.some((error) => error.Message === message)) {
1184
+ result.Errors.push(new ValidationErrorInfo('Configuration', message, this.record?.Configuration, ValidationErrorType.Failure));
1185
+ }
1186
+ }
1187
+ if (builderErrors.length > 0) {
1188
+ result.Success = false;
1189
+ }
1190
+ return result;
1191
+ }
1192
+ ToggleRawJson() {
1193
+ this.RawJsonExpanded = !this.RawJsonExpanded;
1194
+ this.cdr.markForCheck();
1195
+ }
1196
+ /** @deprecated Use {@link ToggleRawJson}. */
1197
+ toggleRawJson() {
1198
+ return this.ToggleRawJson();
1199
+ }
1200
+ async CopyRawJson() {
1201
+ try {
1202
+ if (navigator?.clipboard && this.FormattedRawJson) {
1203
+ await navigator.clipboard.writeText(this.FormattedRawJson);
1204
+ this.RawJsonCopied = true;
1205
+ this.cdr.markForCheck();
1206
+ setTimeout(() => {
1207
+ this.RawJsonCopied = false;
1208
+ this.cdr.markForCheck();
1209
+ }, 2000);
1210
+ }
1211
+ }
1212
+ catch (e) {
1213
+ LogError('[RecordProcessForm] Failed to copy raw JSON to clipboard', undefined, e);
1214
+ }
1215
+ }
1216
+ /** @deprecated Use {@link CopyRawJson}. */
1217
+ async copyRawJson() {
1218
+ return this.CopyRawJson();
1219
+ }
1220
+ get FormattedRawJson() {
1221
+ return FormatRawPipelineJson(this.record?.Configuration);
1222
+ }
1223
+ get ParsedSpec() {
1224
+ return ParsePipelineSpec(this.record?.Configuration);
1225
+ }
1226
+ get EntityStub() {
1227
+ const entity = this.TargetEntityInfo;
1228
+ if (!entity)
1229
+ return undefined;
1230
+ return {
1231
+ Name: entity.Name,
1232
+ Fields: (entity.Fields ?? []).map((f) => ({
1233
+ Name: f.Name,
1234
+ TSType: f.TSType,
1235
+ IsVirtual: f.IsVirtual,
1236
+ AllowsNull: f.AllowsNull,
1237
+ RelatedEntity: f.RelatedEntity,
1238
+ RelatedEntityID: f.RelatedEntityID,
1239
+ EntityFieldValues: f.EntityFieldValues
1240
+ ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code }))
1241
+ : undefined,
1242
+ })),
1243
+ };
1244
+ }
1245
+ get SpecIssues() {
1246
+ return ValidatePipelineSpec(this.ParsedSpec, this.EntityStub);
1247
+ }
1248
+ get IsSpecValid() {
1249
+ return this.SpecIssues.filter((i) => i.Severity === 'error').length === 0;
1250
+ }
1251
+ get FeatureOutputs() {
1252
+ return BuildFeatureOutputViewModels(this.ParsedSpec, this.TargetEntityInfo, this.record?.OutputMapping);
1253
+ }
1254
+ get TotalFeaturesCount() {
1255
+ return this.FeatureOutputs.length;
1256
+ }
1257
+ get BoundFeaturesCount() {
1258
+ return this.FeatureOutputs.filter((f) => f.TargetFieldExists).length;
1259
+ }
1260
+ get ParameterMappings() {
1261
+ return BuildPromptParamViewModels(this.ParsedSpec, this.record?.InputMapping);
1262
+ }
1263
+ get ContextModeText() {
1264
+ const spec = this.ParsedSpec;
1265
+ if (spec?.Context?.EntityDocumentID)
1266
+ return 'Entity Document Template';
1267
+ if (spec?.Context?.QueryID) {
1268
+ return this.LoadedQuery?.Name ? `Query: ${this.LoadedQuery.Name}` : `Saved Query (${spec.Context.QueryID.substring(0, 8)}...)`;
1269
+ }
1270
+ if (spec?.Context?.Fields && spec.Context.Fields.length > 0)
1271
+ return `Fields (${spec.Context.Fields.join(', ')})`;
1272
+ return 'Record Fields (Automatic)';
1273
+ }
1274
+ get ContextQueryDisplay() {
1275
+ const spec = this.ParsedSpec;
1276
+ if (spec?.Context?.QueryID) {
1277
+ if (this.LoadedQuery?.SQL) {
1278
+ return `-- Saved Query: ${this.LoadedQuery.Name}\n${this.LoadedQuery.SQL}`;
1279
+ }
1280
+ const paramName = spec.Context.QueryParams ? Object.keys(spec.Context.QueryParams)[0] || 'RecordID' : 'RecordID';
1281
+ return `-- Saved Query: ${spec.Context.QueryID}\nSELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @${paramName}`;
1282
+ }
1283
+ return `SELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @RecordID`;
1284
+ }
1285
+ get FormattedScopeFilter() {
1286
+ return this.record?.ScopeFilter?.trim() || '';
1287
+ }
488
1288
  static { this.ɵfac = /*@__PURE__*/ (() => { let ɵRecordProcessFormComponentExtended_BaseFactory; return function RecordProcessFormComponentExtended_Factory(__ngFactoryType__) { return (ɵRecordProcessFormComponentExtended_BaseFactory || (ɵRecordProcessFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(RecordProcessFormComponentExtended)))(__ngFactoryType__ || RecordProcessFormComponentExtended); }; })(); }
489
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RecordProcessFormComponentExtended, selectors: [["mj-record-process-form-extended"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["Slot", "before-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "processOverview", "SectionName", "Overview & Status", "Icon", "fa-solid fa-gauge-high", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-overview-container"], [1, "rpf-hero-card"], [1, "rpf-hero-main"], [1, "rpf-hero-icon-wrap"], [1, "rpf-hero-info"], [1, "rpf-hero-title-row"], [1, "rpf-hero-title"], [1, "rpf-badge", 3, "ngClass"], [1, "rpf-badge-dot"], [1, "rpf-hero-desc"], [1, "rpf-hero-pills"], ["title", "Target Entity", 1, "rpf-pill"], [1, "fa-solid", "fa-database"], ["title", "Work Type", 1, "rpf-pill"], ["title", "Feature Pipeline", 1, "rpf-pill", "rpf-pill-feature"], [1, "rpf-kpi-grid"], [1, "rpf-kpi-card"], [1, "rpf-kpi-label"], [1, "fa-solid", "fa-filter"], [1, "rpf-kpi-value"], [1, "rpf-kpi-sub", 3, "title"], [1, "fa-solid", "fa-bolt"], [1, "muted"], [1, "rpf-kpi-sub"], [1, "fa-solid", "fa-water"], [1, "fa-solid", "fa-microchip"], ["SectionKey", "pipelineConfiguration", "SectionName", "Pipeline Configuration", "Icon", "fa-solid fa-wand-magic-sparkles", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-pipeline-builder-wrap"], [1, "rpf-editor-wrap"], [1, "rpf-generic-config-wrap"], ["SectionKey", "processRuns", "SectionName", "Prior Runs", "Icon", "fa-solid fa-clock-rotate-left", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-history-wrap"], [1, "rpf-notice-card"], ["SectionKey", "processDefinition", "SectionName", "Process Definition", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "Name", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Description", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CategoryID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "EntityID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Status", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "executionLogic", "SectionName", "Execution Logic", "Icon", "fa fa-play", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "WorkType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ActionID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "AgentID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "PromptID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "InputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OutputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Configuration", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "scopeConfiguration", "SectionName", "Scope Configuration", "Icon", "fa fa-filter", 3, "Form", "FormContext"], ["FieldName", "ScopeType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeViewID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeListID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "triggers", "SectionName", "Triggers", "Icon", "fa fa-bolt", 3, "Form", "FormContext"], ["FieldName", "OnChangeEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeInvocationType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScheduleEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CronExpression", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Timezone", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnDemandEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "performanceAndOptimization", "SectionName", "Performance and Optimization", "Icon", "fa fa-tachometer-alt", 3, "Form", "FormContext"], ["FieldName", "SkipUnchanged", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "WatermarkStrategy", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "BatchSize", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "MaxConcurrency", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "systemMetadata", "SectionName", "System Metadata", "Icon", "fa fa-database", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["Slot", "after-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "mJRecordProcessWatermarks", "SectionName", "Record Process Watermarks", "Icon", "fa fa-water", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJMLModelScoringBindings", "SectionName", "ML Model Scoring Bindings", "Icon", "fa fa-project-diagram", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValues", "SectionName", "Feature Values", "Icon", "fa fa-history", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValueCaches", "SectionName", "Feature Value Caches", "Icon", "fa fa-database", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["Slot", "after-related", 3, "Entity", "Record", "FormComponent", "FormContext"], [1, "fa-solid", "fa-sparkles"], [3, "SpecChange", "ValidChange", "Record", "EntityID"], [3, "Record", "ShowToolbar", "Provider"], [1, "fa-solid", "fa-circle-info"], [3, "RecordProcessID"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function RecordProcessFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
490
- i0.ɵɵconditionalCreate(0, RecordProcessFormComponentExtended_Conditional_0_Template, 117, 199, "mj-record-form-container", 0);
1289
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: RecordProcessFormComponentExtended, selectors: [["mj-record-process-form-extended"]], viewQuery: function RecordProcessFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
1290
+ i0.ɵɵviewQuery(FeaturePipelineBuilderComponent, 5);
1291
+ } if (rf & 2) {
1292
+ let _t;
1293
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pipelineBuilder = _t.first);
1294
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Record", "FormComponent"], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent"], ["Slot", "before-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "processOverview", "SectionName", "Overview & Status", "Icon", "fa-solid fa-gauge-high", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-overview-container"], [1, "rpf-hero-card"], [1, "rpf-hero-main"], [1, "rpf-hero-icon-wrap"], [1, "rpf-hero-info"], [1, "rpf-hero-title-row"], [1, "rpf-hero-title"], [1, "rpf-badge", 3, "ngClass"], [1, "rpf-badge-dot"], [1, "rpf-hero-desc"], [1, "rpf-hero-pills"], ["title", "Target Entity", 1, "rpf-pill"], [1, "fa-solid", "fa-database"], ["title", "Work Type", 1, "rpf-pill"], ["title", "Feature Pipeline", 1, "rpf-pill", "rpf-pill-feature"], [1, "rpf-kpi-grid"], [1, "rpf-kpi-card"], [1, "rpf-kpi-label"], [1, "fa-solid", "fa-filter"], [1, "rpf-kpi-value"], [1, "rpf-kpi-sub", 3, "title"], [1, "fa-solid", "fa-bolt"], [1, "muted"], [1, "rpf-kpi-sub"], [1, "fa-solid", "fa-water"], [1, "fa-solid", "fa-microchip"], ["SectionKey", "pipelineConfiguration", "SectionName", "Pipeline Configuration", "Icon", "fa-solid fa-wand-magic-sparkles", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-pipeline-builder-wrap"], [1, "rpf-editor-wrap"], [1, "rpf-generic-config-wrap"], ["SectionKey", "processRuns", "SectionName", "Prior Runs", "Icon", "fa-solid fa-clock-rotate-left", "Variant", "related-entity", 3, "Form", "FormContext", "DefaultExpanded"], [1, "rpf-history-wrap"], [1, "rpf-notice-card"], ["SectionKey", "processDefinition", "SectionName", "Process Definition", "Icon", "fa fa-info-circle", 3, "Form", "FormContext"], ["FieldName", "Name", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Description", "Type", "textarea", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CategoryID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "EntityID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Status", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "executionLogic", "SectionName", "Execution Logic", "Icon", "fa fa-play", 3, "Form", "FormContext", "DefaultExpanded"], ["SectionKey", "scopeConfiguration", "SectionName", "Scope Configuration", "Icon", "fa fa-filter", 3, "Form", "FormContext"], [1, "rpf-scope-infer-wrap"], ["SectionKey", "triggers", "SectionName", "Triggers", "Icon", "fa fa-bolt", 3, "Form", "FormContext"], ["FieldName", "OnChangeEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeInvocationType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnChangeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScheduleEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "CronExpression", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Timezone", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OnDemandEnabled", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["SectionKey", "performanceAndOptimization", "SectionName", "Performance and Optimization", "Icon", "fa fa-tachometer-alt", 3, "Form", "FormContext"], ["SectionKey", "systemMetadata", "SectionName", "System Metadata", "Icon", "fa fa-database", 3, "Form", "FormContext", "DefaultExpanded"], ["FieldName", "__mj_CreatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "__mj_UpdatedAt", "Type", "textbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["Slot", "after-fields", 3, "Entity", "Record", "FormComponent", "FormContext"], ["SectionKey", "mJRecordProcessWatermarks", "SectionName", "Record Process Watermarks", "Icon", "fa fa-water", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJMLModelScoringBindings", "SectionName", "ML Model Scoring Bindings", "Icon", "fa fa-project-diagram", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValues", "SectionName", "Feature Values", "Icon", "fa fa-history", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["SectionKey", "mJFeatureValueCaches", "SectionName", "Feature Value Caches", "Icon", "fa fa-database", "Variant", "related-entity", 3, "Form", "FormContext", "BadgeCount", "DefaultExpanded"], ["Slot", "after-related", 3, "Entity", "Record", "FormComponent", "FormContext"], [1, "fa-solid", "fa-sparkles"], [3, "SpecChange", "ValidChange", "Record", "EntityID", "Provider"], [3, "Record", "ShowToolbar", "Provider"], [1, "fa-solid", "fa-circle-info"], [3, "RecordProcessID"], [1, "rpf-audit-bar"], [1, "rpf-audit-badges"], [1, "rpf-audit-chip"], [1, "fa-solid", "fa-check-circle", 2, "color", "var(--mj-status-success)"], [1, "rpf-prompt-grid"], [1, "rpf-card-box"], [1, "rpf-box-eyebrow"], [1, "rpf-prompt-title"], [1, "fa-solid", "fa-message-code"], [1, "rpf-chip-wrap"], [1, "rpf-sm-chip", "rpf-sm-chip-brand"], [1, "rpf-sm-chip"], [2, "margin-top", "10px"], [1, "rpf-param-list"], [2, "font-size", "12px", "color", "var(--mj-text-muted)"], [1, "rpf-sql-preview-box"], [1, "rpf-sql-preview-label"], [1, "fa-solid", "fa-code"], [1, "rpf-sql-preview-code"], [1, "rpf-table-wrap"], [1, "rpf-feature-table"], [1, "rpf-raw-json-drawer"], [1, "rpf-raw-json-header", 3, "click"], [1, "rpf-raw-json-title"], ["type", "button", 1, "rpf-sm-chip", 3, "click"], [1, "rpf-raw-json-body"], [1, "rpf-edit-fields-divider"], ["FieldName", "PromptID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-param-row"], [1, "rpf-param-name"], [1, "fa-solid", "fa-arrow-left", "rpf-param-arrow"], [1, "rpf-feature-name-cell"], [1, "rpf-type-tag"], [1, "rpf-sm-chip", 3, "title"], [1, "fa-solid", "fa-shield"], [1, "rpf-binding-pill"], [2, "color", "var(--mj-text-muted)", "font-size", "11px"], [1, "fa-solid", "fa-brain"], ["colspan", "5", 2, "text-align", "center", "color", "var(--mj-text-muted)", "padding", "20px"], ["FieldName", "WorkType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "Configuration", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "OutputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ActionID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "AgentID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "InputMapping", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-scope-summary-row"], [1, "rpf-scope-badge-group"], [1, "rpf-scope-chip"], [1, "rpf-scope-chip", "rpf-scope-chip-brand"], [1, "fa-solid", "fa-calculator"], ["FieldName", "ScopeType", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeFilter", "Type", "code", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeViewID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "ScopeListID", "Type", "textbox", "LinkType", "Record", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [1, "rpf-opt-grid"], [1, "rpf-opt-card"], [1, "rpf-opt-label"], [1, "rpf-opt-value"], [1, "rpf-opt-sub"], ["FieldName", "SkipUnchanged", "Type", "checkbox", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "WatermarkStrategy", "Type", "select", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "BatchSize", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], ["FieldName", "MaxConcurrency", "Type", "number", 3, "Record", "ShowLabel", "EditMode", "FormContext"], [3, "Navigate", "AfterDataLoad", "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"]], template: function RecordProcessFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1295
+ i0.ɵɵconditionalCreate(0, RecordProcessFormComponentExtended_Conditional_0_Template, 108, 142, "mj-record-form-container", 0);
491
1296
  } if (rf & 2) {
492
1297
  i0.ɵɵconditional(ctx.record ? 0 : -1);
493
- } }, dependencies: [i1.NgClass, i2.MjFormFieldComponent, i2.MjCollapsiblePanelComponent, i2.MjRecordFormContainerComponent, i2.ExplorerEntityDataGridComponent, i2.FormPanelSlotComponent, i3.RecordProcessEditorComponent, i3.FeaturePipelineBuilderComponent, i3.RecordProcessHistoryComponent], styles: ["\n\n\n\n\n.rpf-overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n\n.rpf-hero-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n\n.rpf-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-secondary, #64748b);\n}\n\n\n.rpf-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n\n.rpf-pipeline-builder-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-history-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}"] }); }
1298
+ } }, dependencies: [i1.NgClass, i2.MjFormFieldComponent, i2.MjCollapsiblePanelComponent, i2.MjRecordFormContainerComponent, i2.ExplorerEntityDataGridComponent, i2.FormPanelSlotComponent, i3.RecordProcessEditorComponent, i3.FeaturePipelineBuilderComponent, i3.RecordProcessHistoryComponent], styles: ["\n\n\n\n\n.rpf-overview-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n\n.rpf-hero-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n\n.rpf-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default[_ngcontent-%COMP%] .rpf-badge-dot[_ngcontent-%COMP%] {\n background: var(--mj-text-secondary, #64748b);\n}\n\n\n.rpf-kpi-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n\n.rpf-pipeline-builder-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-history-wrap[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n\n\n\n.rpf-audit-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-left: 4px solid var(--mj-status-success, #22c55e);\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.rpf-audit-bar-warning[_ngcontent-%COMP%] {\n border-left-color: var(--mj-status-warning, #f59e0b);\n}\n\n.rpf-audit-badges[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.rpf-audit-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary, #475569);\n font-weight: 500;\n}\n\n.rpf-audit-chip-valid[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text, #15803d);\n font-weight: 600;\n}\n\n.rpf-audit-chip-warning[_ngcontent-%COMP%] {\n color: var(--mj-status-warning-text, #b45309);\n font-weight: 600;\n}\n\n\n.rpf-prompt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 16px;\n}\n\n@media (max-width: 768px) {\n .rpf-prompt-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}\n\n.rpf-card-box[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-box-eyebrow[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n}\n\n.rpf-prompt-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-brand-primary, #0076b6);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-chip-wrap[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n}\n\n.rpf-sm-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: var(--mj-bg-surface, #ffffff);\n color: var(--mj-text-secondary, #475569);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n}\n\n.rpf-sm-chip-brand[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-param-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpf-param-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.rpf-param-name[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n color: var(--mj-text-secondary, #475569);\n font-weight: 600;\n}\n\n.rpf-param-arrow[_ngcontent-%COMP%] {\n color: var(--mj-text-muted, #94a3b8);\n font-size: 10px;\n margin: 0 4px;\n}\n\n\n.rpf-sql-preview-box[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-bottom: 16px;\n}\n\n.rpf-sql-preview-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-sql-preview-code[_ngcontent-%COMP%] {\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.6;\n overflow-x: auto;\n}\n\n\n.rpf-table-wrap[_ngcontent-%COMP%] {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface, #ffffff);\n margin-bottom: 16px;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border-bottom: 2px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle, #f1f5f9);\n vertical-align: middle;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%] {\n border-bottom: none;\n}\n\n.rpf-feature-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover td[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover, #f8fafc);\n}\n\n.rpf-feature-name-cell[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-type-tag[_ngcontent-%COMP%] {\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.rpf-type-numeric[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.rpf-type-categorical[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.rpf-type-default[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-binding-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-binding-valid[_ngcontent-%COMP%] {\n color: var(--mj-status-success, #22c55e);\n}\n\n.rpf-binding-invalid[_ngcontent-%COMP%] {\n color: var(--mj-status-warning, #f59e0b);\n}\n\n\n.rpf-opt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n}\n\n@media (max-width: 900px) {\n .rpf-opt-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n.rpf-opt-card[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-opt-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.rpf-opt-value[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-opt-sub[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-secondary, #64748b);\n margin-top: 2px;\n}\n\n.rpf-text-success[_ngcontent-%COMP%] {\n color: var(--mj-status-success-text, #15803d) !important;\n}\n\n\n.rpf-raw-json-drawer[_ngcontent-%COMP%] {\n border: 1px dashed var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-top: 20px;\n padding: 14px 16px;\n}\n\n.rpf-raw-json-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n}\n\n.rpf-raw-json-title[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary, #475569);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-raw-json-body[_ngcontent-%COMP%] {\n margin-top: 12px;\n}\n\n.rpf-raw-json-body[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px;\n background: var(--mj-bg-surface, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.5;\n max-height: 350px;\n overflow-y: auto;\n}\n\n.rpf-scope-infer-wrap[_ngcontent-%COMP%] {\n padding: 4px 0;\n}\n\n.rpf-scope-summary-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.rpf-scope-badge-group[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-scope-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 6px;\n font-size: 12px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-scope-chip-brand[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-edit-fields-divider[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px dashed var(--mj-border-default, #e2e8f0);\n}"] }); }
494
1299
  };
495
1300
  RecordProcessFormComponentExtended = __decorate([
496
1301
  RegisterClass(BaseFormComponent, 'MJ: Record Processes', 100)
@@ -498,15 +1303,24 @@ RecordProcessFormComponentExtended = __decorate([
498
1303
  export { RecordProcessFormComponentExtended };
499
1304
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RecordProcessFormComponentExtended, [{
500
1305
  type: Component,
501
- args: [{ standalone: false, selector: 'mj-record-process-form-extended', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n OVERVIEW & STATUS (Lead Panel)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processOverview\"\n SectionName=\"Overview & Status\"\n Icon=\"fa-solid fa-gauge-high\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n <div class=\"rpf-overview-container\">\n <!-- Hero Header Card -->\n <div class=\"rpf-hero-card\">\n <div class=\"rpf-hero-main\">\n <div class=\"rpf-hero-icon-wrap\">\n <i [class]=\"WorkTypeIcon\"></i>\n </div>\n <div class=\"rpf-hero-info\">\n <div class=\"rpf-hero-title-row\">\n <h2 class=\"rpf-hero-title\">{{ record.Name || 'Untitled Process' }}</h2>\n <span class=\"rpf-badge\" [ngClass]=\"StatusBadgeClass\">\n <span class=\"rpf-badge-dot\"></span>\n {{ record.Status || 'Draft' }}\n </span>\n </div>\n <p class=\"rpf-hero-desc\">{{ record.Description || 'No description provided for this process.' }}</p>\n <div class=\"rpf-hero-pills\">\n <span class=\"rpf-pill\" title=\"Target Entity\">\n <i class=\"fa-solid fa-database\"></i>\n <span>{{ TargetEntityName }}</span>\n </span>\n <span class=\"rpf-pill\" title=\"Work Type\">\n <i [class]=\"WorkTypeIcon\"></i>\n <span>{{ record.WorkType || 'Not set' }}</span>\n </span>\n @if (record.WorkType === 'Infer') {\n <span class=\"rpf-pill rpf-pill-feature\" title=\"Feature Pipeline\">\n <i class=\"fa-solid fa-sparkles\"></i>\n <span>Feature Pipeline</span>\n </span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- KPI Summary Grid -->\n <div class=\"rpf-kpi-grid\">\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-filter\"></i> Target Scope</div>\n <div class=\"rpf-kpi-value\">{{ record.ScopeType || 'Filter' }}</div>\n <div class=\"rpf-kpi-sub\" [title]=\"record.ScopeFilter || 'All records in scope'\">\n {{ record.ScopeFilter ? record.ScopeFilter : 'No filter applied (all records)' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-bolt\"></i> Triggers</div>\n <div class=\"rpf-kpi-value\">\n @if (record.ScheduleEnabled) {\n <span>Scheduled</span>\n } @else if (record.OnChangeEnabled) {\n <span>On Change</span>\n } @else if (record.OnDemandEnabled) {\n <span>On Demand</span>\n } @else {\n <span class=\"muted\">Manual</span>\n }\n </div>\n <div class=\"rpf-kpi-sub\">\n @if (record.ScheduleEnabled && record.CronExpression) {\n <code>{{ record.CronExpression }}</code>\n } @else if (record.OnChangeEnabled) {\n <span>Mode: {{ record.OnChangeInvocationType || 'Immediate' }}</span>\n } @else {\n <span>On demand execution</span>\n }\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-water\"></i> Optimization</div>\n <div class=\"rpf-kpi-value\">{{ record.WatermarkStrategy || 'None' }}</div>\n <div class=\"rpf-kpi-sub\">\n Batch: {{ record.BatchSize || 'default' }} | Concurrency: {{ record.MaxConcurrency || '1' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-microchip\"></i> Skip Unchanged</div>\n <div class=\"rpf-kpi-value\">{{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}</div>\n <div class=\"rpf-kpi-sub\">\n {{ record.SkipUnchanged ? 'Skips re-evaluating unchanged rows' : 'Processes all matching rows' }}\n </div>\n </div>\n </div>\n </div>\n </mj-collapsible-panel>\n\n <!-- ========================================\n PIPELINE CONFIGURATION (Visual Builder)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"pipelineConfiguration\"\n SectionName=\"Pipeline Configuration\"\n Icon=\"fa-solid fa-wand-magic-sparkles\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-pipeline-builder-wrap\">\n <mj-feature-pipeline-builder\n [Record]=\"record\"\n [EntityID]=\"record.EntityID\"\n (SpecChange)=\"OnPipelineSpecChange()\"\n (ValidChange)=\"OnPipelineValidChange($event)\">\n </mj-feature-pipeline-builder>\n </div>\n } @else if (record.WorkType === 'FieldRules') {\n <div class=\"rpf-editor-wrap\">\n <mj-record-process-editor\n [Record]=\"record\"\n [ShowToolbar]=\"false\"\n [Provider]=\"ProviderToUse\">\n </mj-record-process-editor>\n </div>\n } @else {\n <div class=\"rpf-generic-config-wrap\">\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>{{ record.WorkType || 'Custom' }} Execution Logic</strong>\n <p>Configure actions, prompts, and mappings in the <em>Process Definition</em> and <em>Execution Logic</em> sections below.</p>\n </div>\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n PRIOR RUNS & AUDIT (Embedded History)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processRuns\"\n SectionName=\"Prior Runs\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.IsSaved) {\n <div class=\"rpf-history-wrap\">\n <mj-record-process-history\n [RecordProcessID]=\"record.ID\">\n </mj-record-process-history>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Save this record process to view execution history and per-record audit logs.</span>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n FIELD PANELS (Fold into Details rail)\n ======================================== -->\n\n <!-- Process Definition Section -->\n <mj-collapsible-panel\n SectionKey=\"processDefinition\"\n SectionName=\"Process Definition\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textarea\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CategoryID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"EntityID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Execution Logic Section -->\n <mj-collapsible-panel\n SectionKey=\"executionLogic\"\n SectionName=\"Execution Logic\"\n Icon=\"fa fa-play\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ActionID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"AgentID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"InputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Scope Configuration Section -->\n <mj-collapsible-panel\n SectionKey=\"scopeConfiguration\"\n SectionName=\"Scope Configuration\"\n Icon=\"fa fa-filter\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeViewID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeListID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Triggers Section -->\n <mj-collapsible-panel\n SectionKey=\"triggers\"\n SectionName=\"Triggers\"\n Icon=\"fa fa-bolt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeInvocationType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScheduleEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CronExpression\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Timezone\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnDemandEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Performance and Optimization Section -->\n <mj-collapsible-panel\n SectionKey=\"performanceAndOptimization\"\n SectionName=\"Performance and Optimization\"\n Icon=\"fa fa-tachometer-alt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- System Metadata Section -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n\n <!-- Record Process Watermarks Section -->\n <mj-collapsible-panel\n SectionKey=\"mJRecordProcessWatermarks\"\n SectionName=\"Record Process Watermarks\"\n Icon=\"fa fa-water\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJRecordProcessWatermarks')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Record Process Watermarks','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Record Process Watermarks','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJRecordProcessWatermarks')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJRecordProcessWatermarks', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ML Model Scoring Bindings Section -->\n <mj-collapsible-panel\n SectionKey=\"mJMLModelScoringBindings\"\n SectionName=\"ML Model Scoring Bindings\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJMLModelScoringBindings')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJMLModelScoringBindings')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJMLModelScoringBindings', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Values Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValues\"\n SectionName=\"Feature Values\"\n Icon=\"fa fa-history\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValues')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Values','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Values','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValues')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValues', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Value Caches Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValueCaches\"\n SectionName=\"Feature Value Caches\"\n Icon=\"fa fa-database\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValueCaches')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Value Caches','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Value Caches','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValueCaches')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValueCaches', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n", styles: ["/* ==========================================================================\n Record Process / Feature Pipeline Custom Form Styles\n Uses standard MemberJunction design tokens for full light & dark mode support.\n ========================================================================== */\n\n.rpf-overview-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n/* Hero Header Card */\n.rpf-hero-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n/* Status Badges */\n.rpf-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active .rpf-badge-dot {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft .rpf-badge-dot {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled .rpf-badge-dot {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default .rpf-badge-dot {\n background: var(--mj-text-secondary, #64748b);\n}\n\n/* KPI Grid */\n.rpf-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n/* Wrappers for child components */\n.rpf-pipeline-builder-wrap {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap {\n padding: 8px 0;\n}\n\n.rpf-history-wrap {\n padding: 8px 0;\n}\n\n.rpf-notice-card {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card i {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card strong {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card p {\n margin: 0;\n}\n"] }]
502
- }], null, null); })();
503
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber: 24 }); })();
1306
+ args: [{ standalone: false, selector: 'mj-record-process-form-extended', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"before-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n OVERVIEW & STATUS (Lead Panel)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processOverview\"\n SectionName=\"Overview & Status\"\n Icon=\"fa-solid fa-gauge-high\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n <div class=\"rpf-overview-container\">\n <!-- Hero Header Card -->\n <div class=\"rpf-hero-card\">\n <div class=\"rpf-hero-main\">\n <div class=\"rpf-hero-icon-wrap\">\n <i [class]=\"WorkTypeIcon\"></i>\n </div>\n <div class=\"rpf-hero-info\">\n <div class=\"rpf-hero-title-row\">\n <h2 class=\"rpf-hero-title\">{{ record.Name || 'Untitled Process' }}</h2>\n <span class=\"rpf-badge\" [ngClass]=\"StatusBadgeClass\">\n <span class=\"rpf-badge-dot\"></span>\n {{ record.Status || 'Draft' }}\n </span>\n </div>\n <p class=\"rpf-hero-desc\">{{ record.Description || 'No description provided for this process.' }}</p>\n <div class=\"rpf-hero-pills\">\n <span class=\"rpf-pill\" title=\"Target Entity\">\n <i class=\"fa-solid fa-database\"></i>\n <span>{{ TargetEntityName }}</span>\n </span>\n <span class=\"rpf-pill\" title=\"Work Type\">\n <i [class]=\"WorkTypeIcon\"></i>\n <span>{{ record.WorkType || 'Not set' }}</span>\n </span>\n @if (record.WorkType === 'Infer') {\n <span class=\"rpf-pill rpf-pill-feature\" title=\"Feature Pipeline\">\n <i class=\"fa-solid fa-sparkles\"></i>\n <span>Feature Pipeline</span>\n </span>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- KPI Summary Grid -->\n <div class=\"rpf-kpi-grid\">\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-filter\"></i> Target Scope</div>\n <div class=\"rpf-kpi-value\">{{ record.ScopeType || 'Filter' }}</div>\n <div class=\"rpf-kpi-sub\" [title]=\"record.ScopeFilter || 'All records in scope'\">\n {{ record.ScopeFilter ? record.ScopeFilter : 'No filter applied (all records)' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-bolt\"></i> Triggers</div>\n <div class=\"rpf-kpi-value\">\n @if (record.ScheduleEnabled) {\n <span>Scheduled</span>\n } @else if (record.OnChangeEnabled) {\n <span>On Change</span>\n } @else if (record.OnDemandEnabled) {\n <span>On Demand</span>\n } @else {\n <span class=\"muted\">Manual</span>\n }\n </div>\n <div class=\"rpf-kpi-sub\">\n @if (record.ScheduleEnabled && record.CronExpression) {\n <code>{{ record.CronExpression }}</code>\n } @else if (record.OnChangeEnabled) {\n <span>Mode: {{ record.OnChangeInvocationType || 'Immediate' }}</span>\n } @else {\n <span>On demand execution</span>\n }\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-water\"></i> Optimization</div>\n <div class=\"rpf-kpi-value\">{{ record.WatermarkStrategy || 'None' }}</div>\n <div class=\"rpf-kpi-sub\">\n Batch: {{ record.BatchSize || 'default' }} | Concurrency: {{ record.MaxConcurrency || '1' }}\n </div>\n </div>\n\n <div class=\"rpf-kpi-card\">\n <div class=\"rpf-kpi-label\"><i class=\"fa-solid fa-microchip\"></i> Skip Unchanged</div>\n <div class=\"rpf-kpi-value\">{{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}</div>\n <div class=\"rpf-kpi-sub\">\n {{ record.SkipUnchanged ? 'Skips re-evaluating unchanged rows' : 'Processes all matching rows' }}\n </div>\n </div>\n </div>\n </div>\n </mj-collapsible-panel>\n\n <!-- ========================================\n PIPELINE CONFIGURATION (Visual Builder)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"pipelineConfiguration\"\n SectionName=\"Pipeline Configuration\"\n Icon=\"fa-solid fa-wand-magic-sparkles\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-pipeline-builder-wrap\">\n <mj-feature-pipeline-builder\n [Record]=\"record\"\n [EntityID]=\"record.EntityID\"\n [Provider]=\"ProviderToUse\"\n (SpecChange)=\"OnPipelineSpecChange()\"\n (ValidChange)=\"OnPipelineValidChange($event)\">\n </mj-feature-pipeline-builder>\n </div>\n } @else if (record.WorkType === 'FieldRules') {\n <div class=\"rpf-editor-wrap\">\n <mj-record-process-editor\n [Record]=\"record\"\n [ShowToolbar]=\"false\"\n [Provider]=\"ProviderToUse\">\n </mj-record-process-editor>\n </div>\n } @else {\n <div class=\"rpf-generic-config-wrap\">\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>{{ record.WorkType || 'Custom' }} Execution Logic</strong>\n <p>Configure actions, prompts, and mappings in the <em>Process Definition</em> and <em>Execution Logic</em> sections below.</p>\n </div>\n </div>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n PRIOR RUNS & AUDIT (Embedded History)\n ======================================== -->\n <mj-collapsible-panel\n SectionKey=\"processRuns\"\n SectionName=\"Prior Runs\"\n Icon=\"fa-solid fa-clock-rotate-left\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"true\">\n @if (record.IsSaved) {\n <div class=\"rpf-history-wrap\">\n <mj-record-process-history\n [RecordProcessID]=\"record.ID\">\n </mj-record-process-history>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>Save this record process to view execution history and per-record audit logs.</span>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ========================================\n FIELD PANELS (Fold into Details rail)\n ======================================== -->\n\n <!-- Process Definition Section -->\n <mj-collapsible-panel\n SectionKey=\"processDefinition\"\n SectionName=\"Process Definition\"\n Icon=\"fa fa-info-circle\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Name\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Description\" Type=\"textarea\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CategoryID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"EntityID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Status\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Execution Logic Section -->\n <mj-collapsible-panel\n SectionKey=\"executionLogic\"\n SectionName=\"Execution Logic\"\n Icon=\"fa fa-play\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n @if (record.WorkType === 'Infer') {\n <!-- Health & Schema Audit Bar -->\n <div class=\"rpf-audit-bar\" [class.rpf-audit-bar-warning]=\"!IsSpecValid\">\n <div class=\"rpf-audit-badges\">\n <div class=\"rpf-audit-chip\" [class.rpf-audit-chip-valid]=\"IsSpecValid\" [class.rpf-audit-chip-warning]=\"!IsSpecValid\">\n <i [class]=\"IsSpecValid ? 'fa-solid fa-shield-check' : 'fa-solid fa-triangle-exclamation'\"></i>\n <span>{{ IsSpecValid ? 'Configuration Valid' : 'Configuration Issues Found' }}</span>\n </div>\n <div class=\"rpf-audit-chip\">\n <i class=\"fa-solid fa-check-circle\" style=\"color: var(--mj-status-success);\"></i>\n <span>{{ BoundFeaturesCount }} of {{ TotalFeaturesCount }} Features Bound to Target</span>\n </div>\n <div class=\"rpf-audit-chip\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Context: {{ ContextModeText }}</span>\n </div>\n </div>\n </div>\n\n <!-- AI Model & Context Query Section -->\n <div class=\"rpf-prompt-grid\">\n <!-- Prompt Card -->\n <div class=\"rpf-card-box\">\n <div class=\"rpf-box-eyebrow\">Bound AI Prompt</div>\n <div class=\"rpf-prompt-title\">\n <i class=\"fa-solid fa-message-code\"></i>\n <span>{{ record.PromptID ? 'Prompt Configured' : 'No Prompt Selected' }}</span>\n </div>\n <div class=\"rpf-chip-wrap\">\n @if (record.PromptID) {\n <span class=\"rpf-sm-chip rpf-sm-chip-brand\">ID: {{ record.PromptID.substring(0, 8) }}...</span>\n }\n <span class=\"rpf-sm-chip\"><i class=\"fa-solid fa-sparkles\"></i> Feature Infer Engine</span>\n <span class=\"rpf-sm-chip\"><i class=\"fa-solid fa-microchip\"></i> LLM Output Parser</span>\n </div>\n @if (EditMode) {\n <div style=\"margin-top: 10px;\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n </div>\n }\n </div>\n\n <!-- Parameters Resolution Card -->\n <div class=\"rpf-card-box\">\n <div class=\"rpf-box-eyebrow\">Prompt Parameter Resolution</div>\n @if (ParameterMappings.length > 0) {\n <div class=\"rpf-param-list\">\n @for (item of ParameterMappings; track item.Param) {\n <div class=\"rpf-param-row\">\n <span class=\"rpf-param-name\">{{ item.Param }}</span>\n <span>\n <i class=\"fa-solid fa-arrow-left rpf-param-arrow\"></i>\n <span>Column: <code>{{ item.Field }}</code></span>\n </span>\n </div>\n }\n </div>\n } @else {\n <div style=\"font-size: 12px; color: var(--mj-text-muted);\">\n No parameter bindings configured. Entire row context will be passed to prompt.\n </div>\n }\n </div>\n </div>\n\n <!-- Context Query Display -->\n <div class=\"rpf-sql-preview-box\">\n <div class=\"rpf-sql-preview-label\">\n <i class=\"fa-solid fa-code\"></i> Context Retrieval Query\n </div>\n <div class=\"rpf-sql-preview-code\">\n <code>{{ ContextQueryDisplay }}</code>\n </div>\n </div>\n\n <!-- Feature Output Schema & Entity Mappings Table -->\n <div class=\"rpf-table-wrap\">\n <table class=\"rpf-feature-table\">\n <thead>\n <tr>\n <th>Feature Name</th>\n <th>Kind / Type</th>\n <th>Validation Constraints</th>\n <th>Target Field Binding</th>\n <th>Reasoning</th>\n </tr>\n </thead>\n <tbody>\n @if (FeatureOutputs.length > 0) {\n @for (out of FeatureOutputs; track out.Name) {\n <tr>\n <td>\n <div class=\"rpf-feature-name-cell\">\n <i [class]=\"out.FeatureKind === 'numeric' ? 'fa-solid fa-chart-line' : 'fa-solid fa-tags'\"\n [style.color]=\"out.FeatureKind === 'numeric' ? '#f59e0b' : '#8b5cf6'\"></i>\n <span>{{ out.Name }}</span>\n </div>\n </td>\n <td>\n <span class=\"rpf-type-tag\"\n [class.rpf-type-numeric]=\"out.FeatureKind === 'numeric'\"\n [class.rpf-type-categorical]=\"out.FeatureKind === 'categorical'\"\n [class.rpf-type-default]=\"out.FeatureKind !== 'numeric' && out.FeatureKind !== 'categorical'\">\n {{ out.FeatureKind }}\n </span>\n </td>\n <td>\n <span class=\"rpf-sm-chip\" [title]=\"'Violation policy: ' + out.ViolationPolicy\">\n <i class=\"fa-solid fa-shield\"></i> {{ out.ConstraintSummary }}\n </span>\n </td>\n <td>\n <div class=\"rpf-binding-pill\">\n <i [class]=\"out.TargetFieldExists ? 'fa-solid fa-check-circle rpf-binding-valid' : 'fa-solid fa-triangle-exclamation rpf-binding-invalid'\"></i>\n <span>{{ TargetEntityName }}.<strong>{{ out.TargetField }}</strong></span>\n <span style=\"color: var(--mj-text-muted); font-size: 11px;\">({{ out.TargetFieldType }})</span>\n </div>\n </td>\n <td>\n @if (out.ReasoningTarget === 'Enabled') {\n <span class=\"rpf-sm-chip rpf-sm-chip-brand\"><i class=\"fa-solid fa-brain\"></i> Captured</span>\n } @else {\n <span style=\"color: var(--mj-text-muted); font-size: 11px;\">None</span>\n }\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"5\" style=\"text-align: center; color: var(--mj-text-muted); padding: 20px;\">\n No output features defined yet. Use the <em>Pipeline Configuration</em> builder tab to add output features.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- Advanced Raw JSON Drawer -->\n <div class=\"rpf-raw-json-drawer\">\n <div class=\"rpf-raw-json-header\" (click)=\"ToggleRawJson()\">\n <div class=\"rpf-raw-json-title\">\n <i [class]=\"RawJsonExpanded ? 'fa-solid fa-chevron-down' : 'fa-solid fa-chevron-right'\"></i>\n <i class=\"fa-solid fa-code\"></i>\n <span>Power User Escape Hatch: View Raw Pipeline Configuration JSON</span>\n </div>\n <button type=\"button\" class=\"rpf-sm-chip\" (click)=\"$event.stopPropagation(); CopyRawJson()\">\n <i [class]=\"RawJsonCopied ? 'fa-solid fa-check' : 'fa-regular fa-copy'\"></i>\n <span>{{ RawJsonCopied ? 'Copied!' : 'Copy JSON' }}</span>\n </button>\n </div>\n @if (RawJsonExpanded) {\n <div class=\"rpf-raw-json-body\">\n <pre><code>{{ FormattedRawJson }}</code></pre>\n </div>\n }\n </div>\n\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WorkType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ActionID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"AgentID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"PromptID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"InputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OutputMapping\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Configuration\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Scope Configuration Section -->\n <mj-collapsible-panel\n SectionKey=\"scopeConfiguration\"\n SectionName=\"Scope Configuration\"\n Icon=\"fa fa-filter\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-scope-infer-wrap\">\n <div class=\"rpf-scope-summary-row\">\n <div class=\"rpf-scope-badge-group\">\n <span class=\"rpf-scope-chip\">\n <i class=\"fa-solid fa-filter\"></i>\n <span>Scope Type: <strong>{{ record.ScopeType || 'Filter' }}</strong></span>\n </span>\n @if (record.ScopeFilter) {\n <span class=\"rpf-scope-chip rpf-scope-chip-brand\">\n <i class=\"fa-solid fa-calculator\"></i>\n <span>Filter Active</span>\n </span>\n }\n </div>\n </div>\n @if (FormattedScopeFilter) {\n <div class=\"rpf-sql-preview-box\">\n <div class=\"rpf-sql-preview-label\">\n <i class=\"fa-solid fa-database\"></i> SQL Scope Filter (WHERE clause)\n </div>\n <div class=\"rpf-sql-preview-code\">\n <code>{{ FormattedScopeFilter }}</code>\n </div>\n </div>\n } @else {\n <div class=\"rpf-notice-card\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <span>No scope filter applied. All records in <strong>{{ TargetEntityName }}</strong> will be evaluated.</span>\n </div>\n }\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n </div>\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeViewID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeListID\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\" LinkType=\"Record\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScopeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- Triggers Section -->\n <mj-collapsible-panel\n SectionKey=\"triggers\"\n SectionName=\"Triggers\"\n Icon=\"fa fa-bolt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeInvocationType\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnChangeFilter\" Type=\"code\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"ScheduleEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"CronExpression\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"Timezone\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"OnDemandEnabled\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <!-- Performance and Optimization Section -->\n <mj-collapsible-panel\n SectionKey=\"performanceAndOptimization\"\n SectionName=\"Performance and Optimization\"\n Icon=\"fa fa-tachometer-alt\"\n [Form]=\"this\"\n [FormContext]=\"formContext\">\n @if (record.WorkType === 'Infer') {\n <div class=\"rpf-opt-grid\">\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Delta Watermark</div>\n <div class=\"rpf-opt-value\">{{ record.WatermarkStrategy || 'Checksum' }}</div>\n <div class=\"rpf-opt-sub\">Evaluates row state changes</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Batch Processing</div>\n <div class=\"rpf-opt-value\">{{ record.BatchSize || 100 }} records</div>\n <div class=\"rpf-opt-sub\">Per inference chunk</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Concurrency</div>\n <div class=\"rpf-opt-value\">{{ record.MaxConcurrency || 1 }} Parallel</div>\n <div class=\"rpf-opt-sub\">Concurrent worker threads</div>\n </div>\n <div class=\"rpf-opt-card\">\n <div class=\"rpf-opt-label\">Skip Unchanged</div>\n <div class=\"rpf-opt-value\" [class.rpf-text-success]=\"record.SkipUnchanged\">\n <i [class]=\"record.SkipUnchanged ? 'fa-solid fa-check' : 'fa-solid fa-minus'\"></i>\n {{ record.SkipUnchanged ? 'Enabled' : 'Disabled' }}\n </div>\n <div class=\"rpf-opt-sub\">Skips re-evaluating unchanged rows</div>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"rpf-edit-fields-divider\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </div>\n }\n } @else {\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"SkipUnchanged\" Type=\"checkbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"WatermarkStrategy\" Type=\"select\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"BatchSize\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"MaxConcurrency\" Type=\"number\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n }\n </mj-collapsible-panel>\n\n <!-- System Metadata Section -->\n <mj-collapsible-panel\n SectionKey=\"systemMetadata\"\n SectionName=\"System Metadata\"\n Icon=\"fa fa-database\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [DefaultExpanded]=\"false\">\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_CreatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n <mj-form-field [Record]=\"record\" [ShowLabel]=\"true\" FieldName=\"__mj_UpdatedAt\" Type=\"textbox\" [EditMode]=\"EditMode\" [FormContext]=\"formContext\"></mj-form-field>\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-fields\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n\n <!-- ========================================\n RELATED ENTITY PANELS\n ======================================== -->\n\n <!-- Record Process Watermarks Section -->\n <mj-collapsible-panel\n SectionKey=\"mJRecordProcessWatermarks\"\n SectionName=\"Record Process Watermarks\"\n Icon=\"fa fa-water\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJRecordProcessWatermarks')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Record Process Watermarks','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Record Process Watermarks','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJRecordProcessWatermarks')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJRecordProcessWatermarks', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- ML Model Scoring Bindings Section -->\n <mj-collapsible-panel\n SectionKey=\"mJMLModelScoringBindings\"\n SectionName=\"ML Model Scoring Bindings\"\n Icon=\"fa fa-project-diagram\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJMLModelScoringBindings')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: ML Model Scoring Bindings','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJMLModelScoringBindings')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJMLModelScoringBindings', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Values Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValues\"\n SectionName=\"Feature Values\"\n Icon=\"fa fa-history\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValues')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Values','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Values','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValues')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValues', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <!-- Feature Value Caches Section -->\n <mj-collapsible-panel\n SectionKey=\"mJFeatureValueCaches\"\n SectionName=\"Feature Value Caches\"\n Icon=\"fa fa-database\"\n Variant=\"related-entity\"\n [Form]=\"this\"\n [FormContext]=\"formContext\"\n [BadgeCount]=\"GetSectionRowCount('mJFeatureValueCaches')\"\n [DefaultExpanded]=\"false\">\n @if (record.IsSaved) {\n <div>\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Feature Value Caches','RecordProcessID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Feature Value Caches','RecordProcessID')\"\n [AllowLoad]=\"IsSectionExpanded('mJFeatureValueCaches')\"\n [ShowToolbar]=\"true\"\n (Navigate)=\"OnFormNavigate($event)\"\n (AfterDataLoad)=\"SetSectionRowCount('mJFeatureValueCaches', $event.totalRowCount)\">\n </mj-explorer-entity-data-grid>\n </div>\n }\n </mj-collapsible-panel>\n\n <mj-form-panel-slot Entity=\"{{record.EntityInfo.Name}}\" Slot=\"after-related\" [Record]=\"record\" [FormComponent]=\"this\" [FormContext]=\"formContext\"></mj-form-panel-slot>\n</mj-record-form-container>\n}\n", styles: ["/* ==========================================================================\n Record Process / Feature Pipeline Custom Form Styles\n Uses standard MemberJunction design tokens for full light & dark mode support.\n ========================================================================== */\n\n.rpf-overview-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 4px 0 12px 0;\n}\n\n/* Hero Header Card */\n.rpf-hero-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 10px;\n padding: 20px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.rpf-hero-main {\n display: flex;\n align-items: flex-start;\n gap: 18px;\n}\n\n.rpf-hero-icon-wrap {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary, #0284c7);\n font-size: 22px;\n flex-shrink: 0;\n}\n\n.rpf-hero-info {\n flex: 1;\n min-width: 0;\n}\n\n.rpf-hero-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n margin-bottom: 6px;\n}\n\n.rpf-hero-title {\n margin: 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.3;\n}\n\n.rpf-hero-desc {\n margin: 0 0 12px 0;\n font-size: 14px;\n color: var(--mj-text-secondary, #64748b);\n line-height: 1.5;\n}\n\n.rpf-hero-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.rpf-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 6px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n font-size: 12px;\n font-weight: 500;\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-pill-feature {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n/* Status Badges */\n.rpf-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.rpf-badge-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n}\n\n.rpf-status-active {\n background: var(--mj-status-success-bg, color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-success-text, var(--mj-status-success));\n border: 1px solid var(--mj-status-success-border, color-mix(in srgb, var(--mj-status-success) 30%, transparent));\n}\n.rpf-status-active .rpf-badge-dot {\n background: var(--mj-status-success);\n}\n\n.rpf-status-draft {\n background: var(--mj-status-warning-bg, color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface)));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n border: 1px solid var(--mj-status-warning-border, color-mix(in srgb, var(--mj-status-warning) 30%, transparent));\n}\n.rpf-status-draft .rpf-badge-dot {\n background: var(--mj-status-warning);\n}\n\n.rpf-status-disabled {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n border: 1px solid var(--mj-border-subtle);\n}\n.rpf-status-disabled .rpf-badge-dot {\n background: var(--mj-text-muted);\n}\n\n.rpf-status-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #64748b);\n border: 1px solid var(--mj-border-subtle, #cbd5e1);\n}\n.rpf-status-default .rpf-badge-dot {\n background: var(--mj-text-secondary, #64748b);\n}\n\n/* KPI Grid */\n.rpf-kpi-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.rpf-kpi-card {\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px 16px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.rpf-kpi-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-muted, #94a3b8);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-kpi-value {\n font-size: 16px;\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-kpi-sub {\n font-size: 12px;\n color: var(--mj-text-secondary, #64748b);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.rpf-kpi-sub code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 11px;\n padding: 1px 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border-radius: 4px;\n}\n\n/* Wrappers for child components */\n.rpf-pipeline-builder-wrap {\n padding: 8px 0;\n}\n\n.rpf-editor-wrap {\n padding: 8px 0;\n}\n\n.rpf-history-wrap {\n padding: 8px 0;\n}\n\n.rpf-notice-card {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n border-radius: 8px;\n color: var(--mj-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.5;\n}\n\n.rpf-notice-card i {\n font-size: 16px;\n color: var(--mj-brand-primary, #0284c7);\n margin-top: 2px;\n}\n\n.rpf-notice-card strong {\n display: block;\n color: var(--mj-text-primary, #0f172a);\n margin-bottom: 2px;\n}\n\n.rpf-notice-card p {\n margin: 0;\n}\n\n/* ==========================================================================\n Option A: Semantic Cards for Infer Feature Pipeline Details\n ========================================================================== */\n\n/* Schema Health / Audit Banner */\n.rpf-audit-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-wrap: wrap;\n gap: 12px;\n padding: 10px 16px;\n background: var(--mj-bg-surface-elevated, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-left: 4px solid var(--mj-status-success, #22c55e);\n border-radius: 8px;\n margin-bottom: 16px;\n}\n\n.rpf-audit-bar-warning {\n border-left-color: var(--mj-status-warning, #f59e0b);\n}\n\n.rpf-audit-badges {\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.rpf-audit-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-text-secondary, #475569);\n font-weight: 500;\n}\n\n.rpf-audit-chip-valid {\n color: var(--mj-status-success-text, #15803d);\n font-weight: 600;\n}\n\n.rpf-audit-chip-warning {\n color: var(--mj-status-warning-text, #b45309);\n font-weight: 600;\n}\n\n/* Prompt Card & Resolution Grid */\n.rpf-prompt-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 14px;\n margin-bottom: 16px;\n}\n\n@media (max-width: 768px) {\n .rpf-prompt-grid {\n grid-template-columns: 1fr;\n }\n}\n\n.rpf-card-box {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-box-eyebrow {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n}\n\n.rpf-prompt-title {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-brand-primary, #0076b6);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-chip-wrap {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 10px;\n}\n\n.rpf-sm-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n background: var(--mj-bg-surface, #ffffff);\n color: var(--mj-text-secondary, #475569);\n border: 1px solid var(--mj-border-subtle, #e2e8f0);\n}\n\n.rpf-sm-chip-brand {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-param-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.rpf-param-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n padding: 2px 0;\n}\n\n.rpf-param-name {\n font-family: var(--mj-font-mono, monospace);\n color: var(--mj-text-secondary, #475569);\n font-weight: 600;\n}\n\n.rpf-param-arrow {\n color: var(--mj-text-muted, #94a3b8);\n font-size: 10px;\n margin: 0 4px;\n}\n\n/* SQL / Code Display Boxes */\n.rpf-sql-preview-box {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-bottom: 16px;\n}\n\n.rpf-sql-preview-label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.rpf-sql-preview-code {\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.6;\n overflow-x: auto;\n}\n\n/* Feature Schema Table */\n.rpf-table-wrap {\n overflow-x: auto;\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface, #ffffff);\n margin-bottom: 16px;\n}\n\n.rpf-feature-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.rpf-feature-table th {\n text-align: left;\n padding: 10px 14px;\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n border-bottom: 2px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-feature-table td {\n padding: 12px 14px;\n border-bottom: 1px solid var(--mj-border-subtle, #f1f5f9);\n vertical-align: middle;\n}\n\n.rpf-feature-table tr:last-child td {\n border-bottom: none;\n}\n\n.rpf-feature-table tr:hover td {\n background: var(--mj-bg-surface-hover, #f8fafc);\n}\n\n.rpf-feature-name-cell {\n font-weight: 600;\n color: var(--mj-text-primary, #0f172a);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-type-tag {\n font-size: 11px;\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n.rpf-type-numeric {\n background: var(--mj-status-warning-bg);\n color: var(--mj-status-warning-text);\n}\n\n.rpf-type-categorical {\n background: var(--mj-status-info-bg);\n color: var(--mj-status-info-text);\n}\n\n.rpf-type-default {\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-binding-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n}\n\n.rpf-binding-valid {\n color: var(--mj-status-success, #22c55e);\n}\n\n.rpf-binding-invalid {\n color: var(--mj-status-warning, #f59e0b);\n}\n\n/* Optimization Grid */\n.rpf-opt-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 12px;\n}\n\n@media (max-width: 900px) {\n .rpf-opt-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n.rpf-opt-card {\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n}\n\n.rpf-opt-label {\n font-size: 11px;\n text-transform: uppercase;\n font-weight: 700;\n color: var(--mj-text-muted, #94a3b8);\n letter-spacing: 0.5px;\n margin-bottom: 4px;\n}\n\n.rpf-opt-value {\n font-size: 16px;\n font-weight: 700;\n color: var(--mj-text-primary, #0f172a);\n}\n\n.rpf-opt-sub {\n font-size: 11px;\n color: var(--mj-text-secondary, #64748b);\n margin-top: 2px;\n}\n\n.rpf-text-success {\n color: var(--mj-status-success-text, #15803d) !important;\n}\n\n/* Raw JSON Accordion */\n.rpf-raw-json-drawer {\n border: 1px dashed var(--mj-border-default, #e2e8f0);\n border-radius: 8px;\n background: var(--mj-bg-surface-sunken, #f8fafc);\n margin-top: 20px;\n padding: 14px 16px;\n}\n\n.rpf-raw-json-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n cursor: pointer;\n user-select: none;\n}\n\n.rpf-raw-json-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary, #475569);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-raw-json-body {\n margin-top: 12px;\n}\n\n.rpf-raw-json-body pre {\n margin: 0;\n padding: 12px;\n background: var(--mj-bg-surface, #ffffff);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n border-radius: 6px;\n font-family: var(--mj-font-mono, monospace);\n font-size: 12px;\n color: var(--mj-text-primary, #0f172a);\n line-height: 1.5;\n max-height: 350px;\n overflow-y: auto;\n}\n\n.rpf-scope-infer-wrap {\n padding: 4px 0;\n}\n\n.rpf-scope-summary-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.rpf-scope-badge-group {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rpf-scope-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 3px 10px;\n border-radius: 6px;\n font-size: 12px;\n background: var(--mj-bg-surface-sunken, #f1f5f9);\n border: 1px solid var(--mj-border-default, #e2e8f0);\n color: var(--mj-text-secondary, #475569);\n}\n\n.rpf-scope-chip-brand {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n font-weight: 600;\n}\n\n.rpf-edit-fields-divider {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px dashed var(--mj-border-default, #e2e8f0);\n}\n"] }]
1307
+ }], null, { pipelineBuilder: [{
1308
+ type: ViewChild,
1309
+ args: [FeaturePipelineBuilderComponent]
1310
+ }] }); })();
1311
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber: 269 }); })();
504
1312
  /**
505
- * Form policy ensuring the Overview & Status panel sits as the lead group
506
- * before Details on the left-nav rail.
1313
+ * Form policy ensuring the Overview panel sits as the lead group
1314
+ * on the left-nav rail with proper title and icon.
507
1315
  */
508
1316
  let RecordProcessFormPolicy = class RecordProcessFormPolicy extends BaseFormPolicy {
509
1317
  DecorateChrome(spec, _ctx) {
1318
+ const detailsGroup = spec.Groups.find(g => g.Key === DETAILS_SECTION_KEY || g.Key === 'details');
1319
+ if (detailsGroup) {
1320
+ detailsGroup.Title = 'Overview';
1321
+ detailsGroup.Icon = 'fa-solid fa-gauge-high';
1322
+ detailsGroup.IsLead = true;
1323
+ }
510
1324
  const overview = spec.Groups.find(g => g.Key === 'processOverview');
511
1325
  if (overview) {
512
1326
  overview.IsLead = true;