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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) 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-prompt-advanced-settings-dialog.component.d.ts +80 -16
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
  18. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  19. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
  20. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
  22. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
  24. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
  26. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  27. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
  28. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
  34. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  35. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
  36. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
  38. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  39. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
  40. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
  42. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  43. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
  44. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
  46. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
  48. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
  50. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  51. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
  52. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
  54. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
  56. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
  58. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
  60. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  61. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
  62. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  63. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
  64. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  65. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
  66. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  67. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
  68. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  69. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
  70. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  71. package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
  72. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  73. package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
  74. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Actions/action-form.component.js +387 -107
  76. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  77. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
  78. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
  79. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
  80. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
  81. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
  82. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
  83. package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
  84. package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
  85. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  86. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
  87. package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
  88. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  89. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
  90. package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
  91. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  92. package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
  93. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  94. package/dist/lib/custom/Entities/entity-form.component.js +494 -138
  95. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  96. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
  97. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  98. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
  99. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  100. package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
  101. package/dist/lib/custom/Files/file-form.component.js +2 -2
  102. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  103. package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
  104. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  105. package/dist/lib/custom/Lists/list-form.component.js +664 -208
  106. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  107. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
  108. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  109. package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
  110. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  111. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
  112. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  113. package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
  114. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  115. package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
  116. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  117. package/dist/lib/custom/Queries/query-form.component.js +429 -109
  118. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  119. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
  120. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  121. package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
  122. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  123. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +110 -4
  124. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  125. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +858 -86
  126. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  127. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
  128. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
  129. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  130. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
  131. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
  132. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  133. package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
  134. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  135. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
  136. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  137. package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
  138. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  139. package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
  140. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  141. package/dist/lib/custom/Templates/templates-form.component.js +333 -113
  142. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  143. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
  144. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  145. package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
  146. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  147. package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
  148. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  149. package/dist/lib/custom/Tests/test-form.component.js +549 -169
  150. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  151. package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
  152. package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
  153. package/dist/lib/custom/Tests/test-run-checks.js +5 -1
  154. package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
  155. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
  156. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
  157. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
  158. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  159. package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
  160. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  161. package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
  162. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  163. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
  164. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  165. package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
  166. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  167. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
  168. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  169. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
  170. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  171. package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
  172. package/dist/lib/custom/Users/user-overview.panel.js +2 -2
  173. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  174. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
  175. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  176. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
  177. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  178. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
  179. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  180. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
  181. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  182. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
  183. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  184. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
  185. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  186. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
  187. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  188. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
  189. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  190. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
  191. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  192. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
  193. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  194. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
  195. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  196. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
  197. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  198. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
  199. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  200. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
  201. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  202. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
  203. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  204. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
  205. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  206. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
  207. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  208. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
  209. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  210. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
  211. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
  212. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
  213. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
  214. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
  215. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
  216. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
  217. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
  218. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
  219. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
  220. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
  221. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
  222. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
  223. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
  224. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
  225. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
  226. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
  227. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
  228. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
  229. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
  230. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
  231. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
  232. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
  233. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
  234. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
  235. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
  236. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
  237. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
  238. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
  239. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  240. package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
  241. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  242. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  243. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
  244. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  245. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
  246. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  247. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
  248. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  249. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  250. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
  251. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  252. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
  253. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
  254. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
  255. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  256. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
  257. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
  258. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
  259. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  260. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
  261. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
  262. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  263. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
  264. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  265. package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
  266. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  267. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
  268. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  269. package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
  270. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  271. package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
  272. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  273. package/dist/lib/shared/components/template-editor.component.js +322 -124
  274. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  275. package/package.json +43 -42
@@ -5,16 +5,20 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Component } from '@angular/core';
8
- import { RegisterClass, RegisterClassEx } from '@memberjunction/global';
9
- import { BaseFormComponent, BaseFormPolicy } from '@memberjunction/ng-base-forms';
8
+ import { RegisterClass, RegisterClassEx, SafeJSONParse, EscapeSQLString } from '@memberjunction/global';
9
+ import { BaseFormComponent, BaseFormPolicy, DETAILS_SECTION_KEY } from '@memberjunction/ng-base-forms';
10
10
  import { MJRecordProcessFormComponent } from '../../generated/Entities/MJRecordProcess/mjrecordprocess.form.component';
11
+ import { RunView, LogError } from '@memberjunction/core';
12
+ import { validateSpec } from '@memberjunction/feature-pipelines';
11
13
  import * as i0 from "@angular/core";
12
14
  import * as i1 from "@angular/common";
13
15
  import * as i2 from "@memberjunction/ng-base-forms";
14
16
  import * as i3 from "@memberjunction/ng-record-process-studio";
17
+ const _forTrack0 = ($index, $item) => $item.Param;
18
+ const _forTrack1 = ($index, $item) => $item.Name;
15
19
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
16
20
  i0.ɵɵelementStart(0, "span", 18);
17
- i0.ɵɵelement(1, "i", 78);
21
+ i0.ɵɵelement(1, "i", 64);
18
22
  i0.ɵɵelementStart(2, "span");
19
23
  i0.ɵɵtext(3, "Feature Pipeline");
20
24
  i0.ɵɵelementEnd()();
@@ -64,7 +68,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_48_Templat
64
68
  } }
65
69
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
66
70
  const _r3 = i0.ɵɵgetCurrentView();
67
- i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder", 79);
71
+ i0.ɵɵelementStart(0, "div", 31)(1, "mj-feature-pipeline-builder", 65);
68
72
  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
73
  i0.ɵɵelementEnd()();
70
74
  } if (rf & 2) {
@@ -74,7 +78,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_66_Templat
74
78
  } }
75
79
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
76
80
  i0.ɵɵelementStart(0, "div", 32);
77
- i0.ɵɵelement(1, "mj-record-process-editor", 80);
81
+ i0.ɵɵelement(1, "mj-record-process-editor", 66);
78
82
  i0.ɵɵelementEnd();
79
83
  } if (rf & 2) {
80
84
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -83,7 +87,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_67_Templat
83
87
  } }
84
88
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Template(rf, ctx) { if (rf & 1) {
85
89
  i0.ɵɵelementStart(0, "div", 33)(1, "div", 36);
86
- i0.ɵɵelement(2, "i", 81);
90
+ i0.ɵɵelement(2, "i", 67);
87
91
  i0.ɵɵelementStart(3, "div")(4, "strong");
88
92
  i0.ɵɵtext(5);
89
93
  i0.ɵɵelementEnd();
@@ -105,7 +109,7 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_68_Templat
105
109
  } }
106
110
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
107
111
  i0.ɵɵelementStart(0, "div", 35);
108
- i0.ɵɵelement(1, "mj-record-process-history", 82);
112
+ i0.ɵɵelement(1, "mj-record-process-history", 68);
109
113
  i0.ɵɵelementEnd();
110
114
  } if (rf & 2) {
111
115
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -114,45 +118,498 @@ function RecordProcessFormComponentExtended_Conditional_0_Conditional_70_Templat
114
118
  } }
115
119
  function RecordProcessFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
116
120
  i0.ɵɵelementStart(0, "div", 36);
117
- i0.ɵɵelement(1, "i", 81);
121
+ i0.ɵɵelement(1, "i", 67);
118
122
  i0.ɵɵelementStart(2, "span");
119
123
  i0.ɵɵtext(3, "Save this record process to view execution history and per-record audit logs.");
120
124
  i0.ɵɵelementEnd()();
121
125
  } }
122
- function RecordProcessFormComponentExtended_Conditional_0_Conditional_109_Template(rf, ctx) { if (rf & 1) {
126
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template(rf, ctx) { if (rf & 1) {
127
+ i0.ɵɵelementStart(0, "span", 79);
128
+ i0.ɵɵtext(1);
129
+ i0.ɵɵelementEnd();
130
+ } if (rf & 2) {
131
+ const ctx_r1 = i0.ɵɵnextContext(3);
132
+ i0.ɵɵadvance();
133
+ i0.ɵɵtextInterpolate1("ID: ", ctx_r1.record.PromptID.substring(0, 8), "...");
134
+ } }
135
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template(rf, ctx) { if (rf & 1) {
136
+ i0.ɵɵelementStart(0, "div", 81);
137
+ i0.ɵɵelement(1, "mj-form-field", 96);
138
+ i0.ɵɵelementEnd();
139
+ } if (rf & 2) {
140
+ const ctx_r1 = i0.ɵɵnextContext(3);
141
+ i0.ɵɵadvance();
142
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
143
+ } }
144
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template(rf, ctx) { if (rf & 1) {
145
+ i0.ɵɵelementStart(0, "div", 97)(1, "span", 98);
146
+ i0.ɵɵtext(2);
147
+ i0.ɵɵelementEnd();
148
+ i0.ɵɵelementStart(3, "span");
149
+ i0.ɵɵelement(4, "i", 99);
150
+ i0.ɵɵelementStart(5, "span");
151
+ i0.ɵɵtext(6, "Column: ");
152
+ i0.ɵɵelementStart(7, "code");
153
+ i0.ɵɵtext(8);
154
+ i0.ɵɵelementEnd()()()();
155
+ } if (rf & 2) {
156
+ const item_r5 = ctx.$implicit;
157
+ i0.ɵɵadvance(2);
158
+ i0.ɵɵtextInterpolate(item_r5.Param);
159
+ i0.ɵɵadvance(6);
160
+ i0.ɵɵtextInterpolate(item_r5.Field);
161
+ } }
162
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_Template(rf, ctx) { if (rf & 1) {
163
+ i0.ɵɵelementStart(0, "div", 82);
164
+ i0.ɵɵrepeaterCreate(1, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_34_For_2_Template, 9, 2, "div", 97, _forTrack0);
165
+ i0.ɵɵelementEnd();
166
+ } if (rf & 2) {
167
+ const ctx_r1 = i0.ɵɵnextContext(3);
168
+ i0.ɵɵadvance();
169
+ i0.ɵɵrepeater(ctx_r1.ParameterMappings);
170
+ } }
171
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_35_Template(rf, ctx) { if (rf & 1) {
172
+ i0.ɵɵelementStart(0, "div", 83);
173
+ i0.ɵɵtext(1, " No parameter bindings configured. Entire row context will be passed to prompt. ");
174
+ i0.ɵɵelementEnd();
175
+ } }
176
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
177
+ i0.ɵɵelementStart(0, "span", 79);
178
+ i0.ɵɵelement(1, "i", 106);
179
+ i0.ɵɵtext(2, " Captured");
180
+ i0.ɵɵelementEnd();
181
+ } }
182
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
183
+ i0.ɵɵelementStart(0, "span", 105);
184
+ i0.ɵɵtext(1, "None");
185
+ i0.ɵɵelementEnd();
186
+ } }
187
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template(rf, ctx) { if (rf & 1) {
188
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 100);
189
+ i0.ɵɵelement(3, "i");
190
+ i0.ɵɵelementStart(4, "span");
191
+ i0.ɵɵtext(5);
192
+ i0.ɵɵelementEnd()()();
193
+ i0.ɵɵelementStart(6, "td")(7, "span", 101);
194
+ i0.ɵɵtext(8);
195
+ i0.ɵɵelementEnd()();
196
+ i0.ɵɵelementStart(9, "td")(10, "span", 102);
197
+ i0.ɵɵelement(11, "i", 103);
198
+ i0.ɵɵtext(12);
199
+ i0.ɵɵelementEnd()();
200
+ i0.ɵɵelementStart(13, "td")(14, "div", 104);
201
+ i0.ɵɵelement(15, "i");
202
+ i0.ɵɵelementStart(16, "span");
203
+ i0.ɵɵtext(17);
204
+ i0.ɵɵelementStart(18, "strong");
205
+ i0.ɵɵtext(19);
206
+ i0.ɵɵelementEnd()();
207
+ i0.ɵɵelementStart(20, "span", 105);
208
+ i0.ɵɵtext(21);
209
+ i0.ɵɵelementEnd()()();
210
+ i0.ɵɵelementStart(22, "td");
211
+ 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);
212
+ i0.ɵɵelementEnd()();
213
+ } if (rf & 2) {
214
+ const out_r6 = ctx.$implicit;
215
+ const ctx_r1 = i0.ɵɵnextContext(4);
216
+ i0.ɵɵadvance(3);
217
+ i0.ɵɵclassMap(out_r6.FeatureKind === "numeric" ? "fa-solid fa-chart-line" : "fa-solid fa-tags");
218
+ i0.ɵɵstyleProp("color", out_r6.FeatureKind === "numeric" ? "#f59e0b" : "#8b5cf6");
219
+ i0.ɵɵadvance(2);
220
+ i0.ɵɵtextInterpolate(out_r6.Name);
221
+ i0.ɵɵadvance(2);
222
+ 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");
223
+ i0.ɵɵadvance();
224
+ i0.ɵɵtextInterpolate1(" ", out_r6.FeatureKind, " ");
225
+ i0.ɵɵadvance(2);
226
+ i0.ɵɵproperty("title", "Violation policy: " + out_r6.ViolationPolicy);
227
+ i0.ɵɵadvance(2);
228
+ i0.ɵɵtextInterpolate1(" ", out_r6.ConstraintSummary, " ");
229
+ i0.ɵɵadvance(3);
230
+ i0.ɵɵclassMap(out_r6.TargetFieldExists ? "fa-solid fa-check-circle rpf-binding-valid" : "fa-solid fa-triangle-exclamation rpf-binding-invalid");
231
+ i0.ɵɵadvance(2);
232
+ i0.ɵɵtextInterpolate1("", ctx_r1.TargetEntityName, ".");
233
+ i0.ɵɵadvance(2);
234
+ i0.ɵɵtextInterpolate(out_r6.TargetField);
235
+ i0.ɵɵadvance(2);
236
+ i0.ɵɵtextInterpolate1("(", out_r6.TargetFieldType, ")");
237
+ i0.ɵɵadvance(2);
238
+ i0.ɵɵconditional(out_r6.ReasoningTarget === "Enabled" ? 23 : 24);
239
+ } }
240
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_Template(rf, ctx) { if (rf & 1) {
241
+ i0.ɵɵrepeaterCreate(0, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_58_For_1_Template, 25, 20, "tr", null, _forTrack1);
242
+ } if (rf & 2) {
243
+ const ctx_r1 = i0.ɵɵnextContext(3);
244
+ i0.ɵɵrepeater(ctx_r1.FeatureOutputs);
245
+ } }
246
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_59_Template(rf, ctx) { if (rf & 1) {
247
+ i0.ɵɵelementStart(0, "tr")(1, "td", 107);
248
+ i0.ɵɵtext(2, " No output features defined yet. Use the ");
249
+ i0.ɵɵelementStart(3, "em");
250
+ i0.ɵɵtext(4, "Pipeline Configuration");
251
+ i0.ɵɵelementEnd();
252
+ i0.ɵɵtext(5, " builder tab to add output features. ");
253
+ i0.ɵɵelementEnd()();
254
+ } }
255
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template(rf, ctx) { if (rf & 1) {
256
+ i0.ɵɵelementStart(0, "div", 94)(1, "pre")(2, "code");
257
+ i0.ɵɵtext(3);
258
+ i0.ɵɵelementEnd()()();
259
+ } if (rf & 2) {
260
+ const ctx_r1 = i0.ɵɵnextContext(3);
261
+ i0.ɵɵadvance(3);
262
+ i0.ɵɵtextInterpolate(ctx_r1.FormattedRawJson);
263
+ } }
264
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template(rf, ctx) { if (rf & 1) {
265
+ i0.ɵɵelementStart(0, "div", 95);
266
+ i0.ɵɵelement(1, "mj-form-field", 108)(2, "mj-form-field", 109)(3, "mj-form-field", 110);
267
+ i0.ɵɵelementEnd();
268
+ } if (rf & 2) {
269
+ const ctx_r1 = i0.ɵɵnextContext(3);
270
+ i0.ɵɵadvance();
271
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
272
+ i0.ɵɵadvance();
273
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
274
+ i0.ɵɵadvance();
275
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
276
+ } }
277
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template(rf, ctx) { if (rf & 1) {
123
278
  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)); });
279
+ i0.ɵɵelementStart(0, "div", 69)(1, "div", 70)(2, "div", 71);
280
+ i0.ɵɵelement(3, "i");
281
+ i0.ɵɵelementStart(4, "span");
282
+ i0.ɵɵtext(5);
283
+ i0.ɵɵelementEnd()();
284
+ i0.ɵɵelementStart(6, "div", 71);
285
+ i0.ɵɵelement(7, "i", 72);
286
+ i0.ɵɵelementStart(8, "span");
287
+ i0.ɵɵtext(9);
288
+ i0.ɵɵelementEnd()();
289
+ i0.ɵɵelementStart(10, "div", 71);
290
+ i0.ɵɵelement(11, "i", 16);
291
+ i0.ɵɵelementStart(12, "span");
292
+ i0.ɵɵtext(13);
293
+ i0.ɵɵelementEnd()()()();
294
+ i0.ɵɵelementStart(14, "div", 73)(15, "div", 74)(16, "div", 75);
295
+ i0.ɵɵtext(17, "Bound AI Prompt");
296
+ i0.ɵɵelementEnd();
297
+ i0.ɵɵelementStart(18, "div", 76);
298
+ i0.ɵɵelement(19, "i", 77);
299
+ i0.ɵɵelementStart(20, "span");
300
+ i0.ɵɵtext(21);
301
+ i0.ɵɵelementEnd()();
302
+ i0.ɵɵelementStart(22, "div", 78);
303
+ i0.ɵɵconditionalCreate(23, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_23_Template, 2, 1, "span", 79);
304
+ i0.ɵɵelementStart(24, "span", 80);
305
+ i0.ɵɵelement(25, "i", 64);
306
+ i0.ɵɵtext(26, " Feature Infer Engine");
307
+ i0.ɵɵelementEnd();
308
+ i0.ɵɵelementStart(27, "span", 80);
309
+ i0.ɵɵelement(28, "i", 29);
310
+ i0.ɵɵtext(29, " LLM Output Parser");
311
+ i0.ɵɵelementEnd()();
312
+ i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_30_Template, 2, 4, "div", 81);
313
+ i0.ɵɵelementEnd();
314
+ i0.ɵɵelementStart(31, "div", 74)(32, "div", 75);
315
+ i0.ɵɵtext(33, "Prompt Parameter Resolution");
316
+ i0.ɵɵelementEnd();
317
+ 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);
318
+ i0.ɵɵelementEnd()();
319
+ i0.ɵɵelementStart(36, "div", 84)(37, "div", 85);
320
+ i0.ɵɵelement(38, "i", 86);
321
+ i0.ɵɵtext(39, " Context Retrieval Query ");
322
+ i0.ɵɵelementEnd();
323
+ i0.ɵɵelementStart(40, "div", 87)(41, "code");
324
+ i0.ɵɵtext(42);
325
+ i0.ɵɵelementEnd()()();
326
+ i0.ɵɵelementStart(43, "div", 88)(44, "table", 89)(45, "thead")(46, "tr")(47, "th");
327
+ i0.ɵɵtext(48, "Feature Name");
328
+ i0.ɵɵelementEnd();
329
+ i0.ɵɵelementStart(49, "th");
330
+ i0.ɵɵtext(50, "Kind / Type");
331
+ i0.ɵɵelementEnd();
332
+ i0.ɵɵelementStart(51, "th");
333
+ i0.ɵɵtext(52, "Validation Constraints");
334
+ i0.ɵɵelementEnd();
335
+ i0.ɵɵelementStart(53, "th");
336
+ i0.ɵɵtext(54, "Target Field Binding");
337
+ i0.ɵɵelementEnd();
338
+ i0.ɵɵelementStart(55, "th");
339
+ i0.ɵɵtext(56, "Reasoning");
340
+ i0.ɵɵelementEnd()()();
341
+ i0.ɵɵelementStart(57, "tbody");
342
+ 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");
343
+ i0.ɵɵelementEnd()()();
344
+ i0.ɵɵelementStart(60, "div", 90)(61, "div", 91);
345
+ 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()); });
346
+ i0.ɵɵelementStart(62, "div", 92);
347
+ i0.ɵɵelement(63, "i")(64, "i", 86);
348
+ i0.ɵɵelementStart(65, "span");
349
+ i0.ɵɵtext(66, "Power User Escape Hatch: View Raw Pipeline Configuration JSON");
350
+ i0.ɵɵelementEnd()();
351
+ i0.ɵɵelementStart(67, "button", 93);
352
+ 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()); });
353
+ i0.ɵɵelement(68, "i");
354
+ i0.ɵɵelementStart(69, "span");
355
+ i0.ɵɵtext(70);
356
+ i0.ɵɵelementEnd()()();
357
+ i0.ɵɵconditionalCreate(71, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_71_Template, 4, 1, "div", 94);
358
+ i0.ɵɵelementEnd();
359
+ i0.ɵɵconditionalCreate(72, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Conditional_72_Template, 4, 12, "div", 95);
360
+ } if (rf & 2) {
361
+ const ctx_r1 = i0.ɵɵnextContext(2);
362
+ i0.ɵɵclassProp("rpf-audit-bar-warning", !ctx_r1.IsSpecValid);
363
+ i0.ɵɵadvance(2);
364
+ i0.ɵɵclassProp("rpf-audit-chip-valid", ctx_r1.IsSpecValid)("rpf-audit-chip-warning", !ctx_r1.IsSpecValid);
365
+ i0.ɵɵadvance();
366
+ i0.ɵɵclassMap(ctx_r1.IsSpecValid ? "fa-solid fa-shield-check" : "fa-solid fa-triangle-exclamation");
367
+ i0.ɵɵadvance(2);
368
+ i0.ɵɵtextInterpolate(ctx_r1.IsSpecValid ? "Configuration Valid" : "Configuration Issues Found");
369
+ i0.ɵɵadvance(4);
370
+ i0.ɵɵtextInterpolate2("", ctx_r1.BoundFeaturesCount, " of ", ctx_r1.TotalFeaturesCount, " Features Bound to Target");
371
+ i0.ɵɵadvance(4);
372
+ i0.ɵɵtextInterpolate1("Context: ", ctx_r1.ContextModeText);
373
+ i0.ɵɵadvance(8);
374
+ i0.ɵɵtextInterpolate(ctx_r1.record.PromptID ? "Prompt Configured" : "No Prompt Selected");
375
+ i0.ɵɵadvance(2);
376
+ i0.ɵɵconditional(ctx_r1.record.PromptID ? 23 : -1);
377
+ i0.ɵɵadvance(7);
378
+ i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
379
+ i0.ɵɵadvance(4);
380
+ i0.ɵɵconditional(ctx_r1.ParameterMappings.length > 0 ? 34 : 35);
381
+ i0.ɵɵadvance(8);
382
+ i0.ɵɵtextInterpolate(ctx_r1.ContextQueryDisplay);
383
+ i0.ɵɵadvance(16);
384
+ i0.ɵɵconditional(ctx_r1.FeatureOutputs.length > 0 ? 58 : 59);
385
+ i0.ɵɵadvance(5);
386
+ i0.ɵɵclassMap(ctx_r1.RawJsonExpanded ? "fa-solid fa-chevron-down" : "fa-solid fa-chevron-right");
387
+ i0.ɵɵadvance(5);
388
+ i0.ɵɵclassMap(ctx_r1.RawJsonCopied ? "fa-solid fa-check" : "fa-regular fa-copy");
389
+ i0.ɵɵadvance(2);
390
+ i0.ɵɵtextInterpolate(ctx_r1.RawJsonCopied ? "Copied!" : "Copy JSON");
391
+ i0.ɵɵadvance();
392
+ i0.ɵɵconditional(ctx_r1.RawJsonExpanded ? 71 : -1);
393
+ i0.ɵɵadvance();
394
+ i0.ɵɵconditional(ctx_r1.EditMode ? 72 : -1);
395
+ } }
396
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template(rf, ctx) { if (rf & 1) {
397
+ 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);
398
+ } if (rf & 2) {
399
+ const ctx_r1 = i0.ɵɵnextContext(2);
400
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
401
+ i0.ɵɵadvance();
402
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
403
+ i0.ɵɵadvance();
404
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
405
+ i0.ɵɵadvance();
406
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
407
+ i0.ɵɵadvance();
408
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
409
+ i0.ɵɵadvance();
410
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
411
+ i0.ɵɵadvance();
412
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
413
+ } }
414
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template(rf, ctx) { if (rf & 1) {
415
+ i0.ɵɵelementStart(0, "span", 117);
416
+ i0.ɵɵelement(1, "i", 118);
417
+ i0.ɵɵelementStart(2, "span");
418
+ i0.ɵɵtext(3, "Filter Active");
419
+ i0.ɵɵelementEnd()();
420
+ } }
421
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_10_Template(rf, ctx) { if (rf & 1) {
422
+ i0.ɵɵelementStart(0, "div", 84)(1, "div", 85);
423
+ i0.ɵɵelement(2, "i", 16);
424
+ i0.ɵɵtext(3, " SQL Scope Filter (WHERE clause) ");
425
+ i0.ɵɵelementEnd();
426
+ i0.ɵɵelementStart(4, "div", 87)(5, "code");
427
+ i0.ɵɵtext(6);
428
+ i0.ɵɵelementEnd()()();
429
+ } if (rf & 2) {
430
+ const ctx_r1 = i0.ɵɵnextContext(3);
431
+ i0.ɵɵadvance(6);
432
+ i0.ɵɵtextInterpolate(ctx_r1.FormattedScopeFilter);
433
+ } }
434
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_11_Template(rf, ctx) { if (rf & 1) {
435
+ i0.ɵɵelementStart(0, "div", 36);
436
+ i0.ɵɵelement(1, "i", 67);
437
+ i0.ɵɵelementStart(2, "span");
438
+ i0.ɵɵtext(3, "No scope filter applied. All records in ");
439
+ i0.ɵɵelementStart(4, "strong");
440
+ i0.ɵɵtext(5);
441
+ i0.ɵɵelementEnd();
442
+ i0.ɵɵtext(6, " will be evaluated.");
443
+ i0.ɵɵelementEnd()();
444
+ } if (rf & 2) {
445
+ const ctx_r1 = i0.ɵɵnextContext(3);
446
+ i0.ɵɵadvance(5);
447
+ i0.ɵɵtextInterpolate(ctx_r1.TargetEntityName);
448
+ } }
449
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template(rf, ctx) { if (rf & 1) {
450
+ i0.ɵɵelementStart(0, "div", 95);
451
+ i0.ɵɵelement(1, "mj-form-field", 119)(2, "mj-form-field", 120);
452
+ i0.ɵɵelementEnd();
453
+ } if (rf & 2) {
454
+ const ctx_r1 = i0.ɵɵnextContext(3);
455
+ i0.ɵɵadvance();
456
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
457
+ i0.ɵɵadvance();
458
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
459
+ } }
460
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template(rf, ctx) { if (rf & 1) {
461
+ i0.ɵɵelementStart(0, "div", 45)(1, "div", 114)(2, "div", 115)(3, "span", 116);
462
+ i0.ɵɵelement(4, "i", 22);
463
+ i0.ɵɵelementStart(5, "span");
464
+ i0.ɵɵtext(6, "Scope Type: ");
465
+ i0.ɵɵelementStart(7, "strong");
466
+ i0.ɵɵtext(8);
467
+ i0.ɵɵelementEnd()()();
468
+ i0.ɵɵconditionalCreate(9, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_9_Template, 4, 0, "span", 117);
469
+ i0.ɵɵelementEnd()();
470
+ 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);
471
+ i0.ɵɵconditionalCreate(12, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Conditional_12_Template, 3, 8, "div", 95);
472
+ i0.ɵɵelementEnd();
473
+ } if (rf & 2) {
474
+ const ctx_r1 = i0.ɵɵnextContext(2);
475
+ i0.ɵɵadvance(8);
476
+ i0.ɵɵtextInterpolate(ctx_r1.record.ScopeType || "Filter");
477
+ i0.ɵɵadvance();
478
+ i0.ɵɵconditional(ctx_r1.record.ScopeFilter ? 9 : -1);
479
+ i0.ɵɵadvance();
480
+ i0.ɵɵconditional(ctx_r1.FormattedScopeFilter ? 10 : 11);
481
+ i0.ɵɵadvance(2);
482
+ i0.ɵɵconditional(ctx_r1.EditMode ? 12 : -1);
483
+ } }
484
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template(rf, ctx) { if (rf & 1) {
485
+ i0.ɵɵelement(0, "mj-form-field", 119)(1, "mj-form-field", 121)(2, "mj-form-field", 122)(3, "mj-form-field", 120);
486
+ } if (rf & 2) {
487
+ const ctx_r1 = i0.ɵɵnextContext(2);
488
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
489
+ i0.ɵɵadvance();
490
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
491
+ i0.ɵɵadvance();
492
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
493
+ i0.ɵɵadvance();
494
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
495
+ } }
496
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template(rf, ctx) { if (rf & 1) {
497
+ i0.ɵɵelementStart(0, "div", 95);
498
+ i0.ɵɵelement(1, "mj-form-field", 128)(2, "mj-form-field", 129)(3, "mj-form-field", 130)(4, "mj-form-field", 131);
499
+ i0.ɵɵelementEnd();
500
+ } if (rf & 2) {
501
+ const ctx_r1 = i0.ɵɵnextContext(3);
502
+ i0.ɵɵadvance();
503
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
504
+ i0.ɵɵadvance();
505
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
506
+ i0.ɵɵadvance();
507
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
508
+ i0.ɵɵadvance();
509
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
510
+ } }
511
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template(rf, ctx) { if (rf & 1) {
512
+ i0.ɵɵelementStart(0, "div", 123)(1, "div", 124)(2, "div", 125);
513
+ i0.ɵɵtext(3, "Delta Watermark");
514
+ i0.ɵɵelementEnd();
515
+ i0.ɵɵelementStart(4, "div", 126);
516
+ i0.ɵɵtext(5);
517
+ i0.ɵɵelementEnd();
518
+ i0.ɵɵelementStart(6, "div", 127);
519
+ i0.ɵɵtext(7, "Evaluates row state changes");
520
+ i0.ɵɵelementEnd()();
521
+ i0.ɵɵelementStart(8, "div", 124)(9, "div", 125);
522
+ i0.ɵɵtext(10, "Batch Processing");
523
+ i0.ɵɵelementEnd();
524
+ i0.ɵɵelementStart(11, "div", 126);
525
+ i0.ɵɵtext(12);
526
+ i0.ɵɵelementEnd();
527
+ i0.ɵɵelementStart(13, "div", 127);
528
+ i0.ɵɵtext(14, "Per inference chunk");
529
+ i0.ɵɵelementEnd()();
530
+ i0.ɵɵelementStart(15, "div", 124)(16, "div", 125);
531
+ i0.ɵɵtext(17, "Concurrency");
532
+ i0.ɵɵelementEnd();
533
+ i0.ɵɵelementStart(18, "div", 126);
534
+ i0.ɵɵtext(19);
535
+ i0.ɵɵelementEnd();
536
+ i0.ɵɵelementStart(20, "div", 127);
537
+ i0.ɵɵtext(21, "Concurrent worker threads");
538
+ i0.ɵɵelementEnd()();
539
+ i0.ɵɵelementStart(22, "div", 124)(23, "div", 125);
540
+ i0.ɵɵtext(24, "Skip Unchanged");
541
+ i0.ɵɵelementEnd();
542
+ i0.ɵɵelementStart(25, "div", 126);
543
+ i0.ɵɵelement(26, "i");
544
+ i0.ɵɵtext(27);
545
+ i0.ɵɵelementEnd();
546
+ i0.ɵɵelementStart(28, "div", 127);
547
+ i0.ɵɵtext(29, "Skips re-evaluating unchanged rows");
548
+ i0.ɵɵelementEnd()()();
549
+ i0.ɵɵconditionalCreate(30, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Conditional_30_Template, 5, 16, "div", 95);
550
+ } if (rf & 2) {
551
+ const ctx_r1 = i0.ɵɵnextContext(2);
552
+ i0.ɵɵadvance(5);
553
+ i0.ɵɵtextInterpolate(ctx_r1.record.WatermarkStrategy || "Checksum");
554
+ i0.ɵɵadvance(7);
555
+ i0.ɵɵtextInterpolate1("", ctx_r1.record.BatchSize || 100, " records");
556
+ i0.ɵɵadvance(7);
557
+ i0.ɵɵtextInterpolate1("", ctx_r1.record.MaxConcurrency || 1, " Parallel");
558
+ i0.ɵɵadvance(6);
559
+ i0.ɵɵclassProp("rpf-text-success", ctx_r1.record.SkipUnchanged);
560
+ i0.ɵɵadvance();
561
+ i0.ɵɵclassMap(ctx_r1.record.SkipUnchanged ? "fa-solid fa-check" : "fa-solid fa-minus");
562
+ i0.ɵɵadvance();
563
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.record.SkipUnchanged ? "Enabled" : "Disabled", " ");
564
+ i0.ɵɵadvance(3);
565
+ i0.ɵɵconditional(ctx_r1.EditMode ? 30 : -1);
566
+ } }
567
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template(rf, ctx) { if (rf & 1) {
568
+ i0.ɵɵelement(0, "mj-form-field", 128)(1, "mj-form-field", 129)(2, "mj-form-field", 130)(3, "mj-form-field", 131);
569
+ } if (rf & 2) {
570
+ const ctx_r1 = i0.ɵɵnextContext(2);
571
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
572
+ i0.ɵɵadvance();
573
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
574
+ i0.ɵɵadvance();
575
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
576
+ i0.ɵɵadvance();
577
+ i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
578
+ } }
579
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template(rf, ctx) { if (rf & 1) {
580
+ const _r7 = i0.ɵɵgetCurrentView();
581
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
582
+ 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
583
  i0.ɵɵelementEnd()();
127
584
  } if (rf & 2) {
128
585
  const ctx_r1 = i0.ɵɵnextContext(2);
129
586
  i0.ɵɵadvance();
130
587
  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
588
  } }
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)); });
589
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template(rf, ctx) { if (rf & 1) {
590
+ const _r8 = i0.ɵɵgetCurrentView();
591
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
592
+ 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
593
  i0.ɵɵelementEnd()();
137
594
  } if (rf & 2) {
138
595
  const ctx_r1 = i0.ɵɵnextContext(2);
139
596
  i0.ɵɵadvance();
140
597
  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
598
  } }
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)); });
599
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template(rf, ctx) { if (rf & 1) {
600
+ const _r9 = i0.ɵɵgetCurrentView();
601
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
602
+ 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
603
  i0.ɵɵelementEnd()();
147
604
  } if (rf & 2) {
148
605
  const ctx_r1 = i0.ɵɵnextContext(2);
149
606
  i0.ɵɵadvance();
150
607
  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
608
  } }
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)); });
609
+ function RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template(rf, ctx) { if (rf & 1) {
610
+ const _r10 = i0.ɵɵgetCurrentView();
611
+ i0.ɵɵelementStart(0, "div")(1, "mj-explorer-entity-data-grid", 132);
612
+ 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
613
  i0.ɵɵelementEnd()();
157
614
  } if (rf & 2) {
158
615
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -239,34 +696,34 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
239
696
  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
697
  i0.ɵɵelementEnd();
241
698
  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);
699
+ i0.ɵɵconditionalCreate(79, RecordProcessFormComponentExtended_Conditional_0_Conditional_79_Template, 73, 25)(80, RecordProcessFormComponentExtended_Conditional_0_Conditional_80_Template, 7, 28);
243
700
  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);
701
+ i0.ɵɵelementStart(81, "mj-collapsible-panel", 44);
702
+ i0.ɵɵconditionalCreate(82, RecordProcessFormComponentExtended_Conditional_0_Conditional_82_Template, 13, 4, "div", 45)(83, RecordProcessFormComponentExtended_Conditional_0_Conditional_83_Template, 4, 16);
246
703
  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);
704
+ i0.ɵɵelementStart(84, "mj-collapsible-panel", 46);
705
+ 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
706
  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);
707
+ i0.ɵɵelementStart(92, "mj-collapsible-panel", 54);
708
+ i0.ɵɵconditionalCreate(93, RecordProcessFormComponentExtended_Conditional_0_Conditional_93_Template, 31, 9)(94, RecordProcessFormComponentExtended_Conditional_0_Conditional_94_Template, 4, 16);
252
709
  i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(104, "mj-collapsible-panel", 69);
254
- i0.ɵɵelement(105, "mj-form-field", 70)(106, "mj-form-field", 71);
710
+ i0.ɵɵelementStart(95, "mj-collapsible-panel", 55);
711
+ i0.ɵɵelement(96, "mj-form-field", 56)(97, "mj-form-field", 57);
255
712
  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");
713
+ i0.ɵɵelement(98, "mj-form-panel-slot", 58);
714
+ i0.ɵɵelementStart(99, "mj-collapsible-panel", 59);
715
+ i0.ɵɵconditionalCreate(100, RecordProcessFormComponentExtended_Conditional_0_Conditional_100_Template, 2, 4, "div");
259
716
  i0.ɵɵelementEnd();
260
- i0.ɵɵelementStart(110, "mj-collapsible-panel", 74);
261
- i0.ɵɵconditionalCreate(111, RecordProcessFormComponentExtended_Conditional_0_Conditional_111_Template, 2, 4, "div");
717
+ i0.ɵɵelementStart(101, "mj-collapsible-panel", 60);
718
+ i0.ɵɵconditionalCreate(102, RecordProcessFormComponentExtended_Conditional_0_Conditional_102_Template, 2, 4, "div");
262
719
  i0.ɵɵelementEnd();
263
- i0.ɵɵelementStart(112, "mj-collapsible-panel", 75);
264
- i0.ɵɵconditionalCreate(113, RecordProcessFormComponentExtended_Conditional_0_Conditional_113_Template, 2, 4, "div");
720
+ i0.ɵɵelementStart(103, "mj-collapsible-panel", 61);
721
+ i0.ɵɵconditionalCreate(104, RecordProcessFormComponentExtended_Conditional_0_Conditional_104_Template, 2, 4, "div");
265
722
  i0.ɵɵelementEnd();
266
- i0.ɵɵelementStart(114, "mj-collapsible-panel", 76);
267
- i0.ɵɵconditionalCreate(115, RecordProcessFormComponentExtended_Conditional_0_Conditional_115_Template, 2, 4, "div");
723
+ i0.ɵɵelementStart(105, "mj-collapsible-panel", 62);
724
+ i0.ɵɵconditionalCreate(106, RecordProcessFormComponentExtended_Conditional_0_Conditional_106_Template, 2, 4, "div");
268
725
  i0.ɵɵelementEnd();
269
- i0.ɵɵelement(116, "mj-form-panel-slot", 77);
726
+ i0.ɵɵelement(107, "mj-form-panel-slot", 63);
270
727
  i0.ɵɵelementEnd();
271
728
  } if (rf & 2) {
272
729
  const ctx_r1 = i0.ɵɵnextContext();
@@ -334,30 +791,12 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
334
791
  i0.ɵɵadvance();
335
792
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
336
793
  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();
794
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 79 : 80);
795
+ i0.ɵɵadvance(2);
351
796
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
352
797
  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();
798
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 82 : 83);
799
+ i0.ɵɵadvance(2);
361
800
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
362
801
  i0.ɵɵadvance();
363
802
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
@@ -376,14 +815,8 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
376
815
  i0.ɵɵadvance();
377
816
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext);
378
817
  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();
818
+ i0.ɵɵconditional(ctx_r1.record.WorkType === "Infer" ? 93 : 94);
819
+ i0.ɵɵadvance(2);
387
820
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("DefaultExpanded", false);
388
821
  i0.ɵɵadvance();
389
822
  i0.ɵɵproperty("Record", ctx_r1.record)("ShowLabel", true)("EditMode", ctx_r1.EditMode)("FormContext", ctx_r1.formContext);
@@ -394,22 +827,191 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
394
827
  i0.ɵɵadvance();
395
828
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJRecordProcessWatermarks"))("DefaultExpanded", false);
396
829
  i0.ɵɵadvance();
397
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 109 : -1);
830
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 100 : -1);
398
831
  i0.ɵɵadvance();
399
832
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJMLModelScoringBindings"))("DefaultExpanded", false);
400
833
  i0.ɵɵadvance();
401
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 111 : -1);
834
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 102 : -1);
402
835
  i0.ɵɵadvance();
403
836
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValues"))("DefaultExpanded", false);
404
837
  i0.ɵɵadvance();
405
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 113 : -1);
838
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 104 : -1);
406
839
  i0.ɵɵadvance();
407
840
  i0.ɵɵproperty("Form", ctx_r1)("FormContext", ctx_r1.formContext)("BadgeCount", ctx_r1.GetSectionRowCount("mJFeatureValueCaches"))("DefaultExpanded", false);
408
841
  i0.ɵɵadvance();
409
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 115 : -1);
842
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 106 : -1);
410
843
  i0.ɵɵadvance();
411
844
  i0.ɵɵproperty("Entity", i0.ɵɵinterpolate(ctx_r1.record.EntityInfo.Name))("Record", ctx_r1.record)("FormComponent", ctx_r1)("FormContext", ctx_r1.formContext);
412
845
  } }
846
+ /**
847
+ * Pure helper function to format raw JSON.
848
+ */
849
+ export function FormatRawPipelineJson(configuration) {
850
+ if (!configuration)
851
+ return '';
852
+ const parsed = SafeJSONParse(configuration);
853
+ return parsed ? JSON.stringify(parsed, null, 2) : configuration;
854
+ }
855
+ /** @deprecated Use {@link FormatRawPipelineJson}. */
856
+ export function formatRawPipelineJson(configuration) {
857
+ return FormatRawPipelineJson(configuration);
858
+ }
859
+ /**
860
+ * Pure helper function to parse DataFeatureSpec safely.
861
+ */
862
+ export function ParsePipelineSpec(configuration) {
863
+ if (!configuration)
864
+ return null;
865
+ return SafeJSONParse(configuration);
866
+ }
867
+ /** @deprecated Use {@link ParsePipelineSpec}. */
868
+ export function parsePipelineSpec(configuration) {
869
+ return ParsePipelineSpec(configuration);
870
+ }
871
+ /**
872
+ * Pure helper function to validate pipeline spec against entity stub.
873
+ */
874
+ export function ValidatePipelineSpec(spec, entityStub) {
875
+ if (!spec)
876
+ return [];
877
+ return validateSpec(spec, entityStub);
878
+ }
879
+ /** @deprecated Use {@link ValidatePipelineSpec}. */
880
+ export function validatePipelineSpec(spec, entityStub) {
881
+ return ValidatePipelineSpec(spec, entityStub);
882
+ }
883
+ /**
884
+ * Pure helper to build feature output view-models from spec or output mapping.
885
+ */
886
+ export function BuildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
887
+ const outputs = [];
888
+ if (spec?.Outputs && spec.Outputs.length > 0) {
889
+ for (const out of spec.Outputs) {
890
+ let targetFieldName = '';
891
+ const targetMode = out.Target?.Mode;
892
+ if (out.Target?.Mode === 'field') {
893
+ targetFieldName = out.Target.EntityFieldName;
894
+ }
895
+ else if (out.Target?.Mode === 'child') {
896
+ targetFieldName = `Child: ${out.Target.EntityName}`;
897
+ }
898
+ else if (out.Target?.Mode === 'tags') {
899
+ targetFieldName = `Tags (${out.Target.Growth || 'taxonomy'})`;
900
+ }
901
+ let constraintText = 'None';
902
+ let violationPolicy = 'error';
903
+ const c = out.Constraint;
904
+ if (c) {
905
+ if (c.OnViolation) {
906
+ violationPolicy = c.OnViolation;
907
+ }
908
+ switch (c.Type) {
909
+ case 'numeric':
910
+ case 'money': {
911
+ const min = c.Min != null ? String(c.Min) : '-∞';
912
+ const max = c.Max != null ? String(c.Max) : '+∞';
913
+ constraintText = `[${min}, ${max}]`;
914
+ break;
915
+ }
916
+ case 'enum': {
917
+ if (c.Values && c.Values.length > 0) {
918
+ constraintText = `Allowed: ${c.Values.slice(0, 3).join(', ')}${c.Values.length > 3 ? '...' : ''}`;
919
+ }
920
+ else if (c.FromFieldMetadata) {
921
+ constraintText = 'From Field Metadata';
922
+ }
923
+ break;
924
+ }
925
+ case 'lookup': {
926
+ constraintText = `Lookup: ${c.Entity || ''}.${c.MatchField || ''}`;
927
+ break;
928
+ }
929
+ case 'date': {
930
+ constraintText = `Date: [${c.Min || '-∞'}, ${c.Max || '+∞'}]`;
931
+ break;
932
+ }
933
+ case 'boolean': {
934
+ constraintText = 'Boolean';
935
+ break;
936
+ }
937
+ case 'freetext': {
938
+ constraintText = c.MaxLength != null ? `Max: ${c.MaxLength} chars` : 'Freetext';
939
+ break;
940
+ }
941
+ }
942
+ }
943
+ const isFieldMode = targetMode === 'field';
944
+ const field = isFieldMode && targetFieldName && entityInfo?.Fields
945
+ ? entityInfo.Fields.find((f) => f.Name.toLowerCase() === targetFieldName.toLowerCase())
946
+ : undefined;
947
+ outputs.push({
948
+ Name: out.Name || out.Ref || 'Unnamed',
949
+ Ref: out.Ref || '',
950
+ FeatureKind: out.FeatureKind || (c?.Type === 'numeric' ? 'numeric' : 'categorical'),
951
+ TargetField: targetFieldName || '—',
952
+ TargetFieldExists: isFieldMode ? !!field : true,
953
+ TargetFieldType: isFieldMode ? (field?.TSType || field?.Type || 'unbound') : (targetMode || 'custom'),
954
+ ConstraintSummary: constraintText,
955
+ ViolationPolicy: violationPolicy,
956
+ ReasoningTarget: spec.CaptureReasoning ? 'Enabled' : 'None',
957
+ });
958
+ }
959
+ }
960
+ else if (outputMapping) {
961
+ const mapping = SafeJSONParse(outputMapping);
962
+ const fieldsObj = (mapping && 'fields' in mapping && mapping.fields) ? mapping.fields : mapping;
963
+ if (fieldsObj && typeof fieldsObj === 'object') {
964
+ for (const [key, val] of Object.entries(fieldsObj)) {
965
+ const field = entityInfo?.Fields?.find((f) => f.Name.toLowerCase() === key.toLowerCase());
966
+ outputs.push({
967
+ Name: String(val),
968
+ Ref: String(val),
969
+ FeatureKind: 'field',
970
+ TargetField: key,
971
+ TargetFieldExists: !!field,
972
+ TargetFieldType: field?.TSType || field?.Type || 'unbound',
973
+ ConstraintSummary: 'Standard',
974
+ ViolationPolicy: 'null',
975
+ ReasoningTarget: 'None',
976
+ });
977
+ }
978
+ }
979
+ }
980
+ return outputs;
981
+ }
982
+ /** @deprecated Use {@link BuildFeatureOutputViewModels}. */
983
+ export function buildFeatureOutputViewModels(spec, entityInfo, outputMapping) {
984
+ return BuildFeatureOutputViewModels(spec, entityInfo, outputMapping);
985
+ }
986
+ /**
987
+ * Pure helper to build prompt parameter resolution mappings.
988
+ */
989
+ export function BuildPromptParamViewModels(spec, inputMapping) {
990
+ const mappings = [];
991
+ if (spec?.Context?.QueryParams) {
992
+ for (const [param, field] of Object.entries(spec.Context.QueryParams)) {
993
+ mappings.push({ Param: `@${param}`, Field: String(field) });
994
+ }
995
+ }
996
+ else if (spec?.Context?.InputMapping) {
997
+ for (const [param, field] of Object.entries(spec.Context.InputMapping)) {
998
+ mappings.push({ Param: `@${param}`, Field: String(field) });
999
+ }
1000
+ }
1001
+ else if (inputMapping) {
1002
+ const raw = SafeJSONParse(inputMapping);
1003
+ if (raw) {
1004
+ for (const [param, field] of Object.entries(raw)) {
1005
+ mappings.push({ Param: `@${param}`, Field: String(field) });
1006
+ }
1007
+ }
1008
+ }
1009
+ return mappings;
1010
+ }
1011
+ /** @deprecated Use {@link BuildPromptParamViewModels}. */
1012
+ export function buildPromptParamViewModels(spec, inputMapping) {
1013
+ return BuildPromptParamViewModels(spec, inputMapping);
1014
+ }
413
1015
  /**
414
1016
  * Custom form override for `MJ: Record Processes` (priority 100).
415
1017
  * Presents the Record Process / Feature Pipeline in a first-class MJ form with:
@@ -417,19 +1019,57 @@ function RecordProcessFormComponentExtended_Conditional_0_Template(rf, ctx) { if
417
1019
  * - Builder panel: "Pipeline Configuration" embedding the visual <mj-feature-pipeline-builder> for Infer / Feature Pipelines,
418
1020
  * or the <mj-record-process-editor> for Field Rules.
419
1021
  * - 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.
1022
+ * - Details panel (Option A Structured Cards): First-class semantic cards for Infer pipelines, replacing raw JSON
1023
+ * with configuration health diagnostics, prompt context binding, feature output schema & column validation,
1024
+ * scope preview, and a collapsible raw JSON drawer.
421
1025
  * - Related entity sections: Watermarks, ML Model Scoring Bindings, Feature Values, Feature Value Caches.
422
1026
  * - System Metadata panel.
423
1027
  */
424
1028
  let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtended extends MJRecordProcessFormComponent {
425
1029
  constructor() {
426
1030
  super(...arguments);
427
- this.pipelineValid = true;
1031
+ this.PipelineValid = true;
1032
+ this.RawJsonExpanded = false;
1033
+ this.RawJsonCopied = false;
1034
+ this.LoadedQuery = null;
1035
+ }
1036
+ /** @deprecated Use {@link PipelineValid}. */
1037
+ get pipelineValid() {
1038
+ return this.PipelineValid;
1039
+ }
1040
+ /** @deprecated Use {@link PipelineValid}. */
1041
+ set pipelineValid(value) {
1042
+ this.PipelineValid = value;
1043
+ }
1044
+ /** @deprecated Use {@link RawJsonExpanded}. */
1045
+ get rawJsonExpanded() {
1046
+ return this.RawJsonExpanded;
1047
+ }
1048
+ /** @deprecated Use {@link RawJsonExpanded}. */
1049
+ set rawJsonExpanded(value) {
1050
+ this.RawJsonExpanded = value;
1051
+ }
1052
+ /** @deprecated Use {@link RawJsonCopied}. */
1053
+ get rawJsonCopied() {
1054
+ return this.RawJsonCopied;
1055
+ }
1056
+ /** @deprecated Use {@link RawJsonCopied}. */
1057
+ set rawJsonCopied(value) {
1058
+ this.RawJsonCopied = value;
1059
+ }
1060
+ /** @deprecated Use {@link LoadedQuery}. */
1061
+ get loadedQuery() {
1062
+ return this.LoadedQuery;
1063
+ }
1064
+ /** @deprecated Use {@link LoadedQuery}. */
1065
+ set loadedQuery(value) {
1066
+ this.LoadedQuery = value;
428
1067
  }
429
1068
  async ngOnInit() {
430
1069
  await super.ngOnInit();
431
1070
  this.initSections([
432
1071
  { sectionKey: 'processOverview', sectionName: 'Overview & Status', isExpanded: true },
1072
+ { sectionKey: 'inferConfig', sectionName: 'Infer Configuration', isExpanded: true },
433
1073
  { sectionKey: 'pipelineConfiguration', sectionName: 'Pipeline Configuration', isExpanded: true },
434
1074
  { sectionKey: 'processRuns', sectionName: 'Prior Runs', isExpanded: true },
435
1075
  { sectionKey: 'processDefinition', sectionName: 'Process Definition', isExpanded: true },
@@ -443,6 +1083,31 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
443
1083
  { sectionKey: 'mJFeatureValueCaches', sectionName: 'Feature Value Caches', isExpanded: false },
444
1084
  { sectionKey: 'systemMetadata', sectionName: 'System Metadata', isExpanded: false },
445
1085
  ]);
1086
+ await this.loadContextQuery();
1087
+ }
1088
+ async loadContextQuery() {
1089
+ const queryId = this.ParsedSpec?.Context?.QueryID;
1090
+ if (!queryId)
1091
+ return;
1092
+ try {
1093
+ const rv = new RunView();
1094
+ const res = await rv.RunView({
1095
+ EntityName: 'MJ: Queries',
1096
+ ExtraFilter: `ID = '${EscapeSQLString(queryId)}'`,
1097
+ Fields: ['ID', 'Name', 'SQL'],
1098
+ ResultType: 'simple',
1099
+ });
1100
+ if (res.Success && res.Results && res.Results.length > 0) {
1101
+ this.LoadedQuery = res.Results[0];
1102
+ this.cdr.markForCheck();
1103
+ }
1104
+ else if (!res.Success) {
1105
+ LogError(`[RecordProcessForm] Failed to load context query ${queryId}: ${res.ErrorMessage}`);
1106
+ }
1107
+ }
1108
+ catch (e) {
1109
+ LogError(`[RecordProcessForm] Exception loading context query ${queryId}`, undefined, e);
1110
+ }
446
1111
  }
447
1112
  get TargetEntityName() {
448
1113
  if (!this.record?.EntityID)
@@ -450,6 +1115,11 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
450
1115
  const entity = this.ProviderToUse.EntityByID(this.record.EntityID);
451
1116
  return entity?.DisplayName || entity?.Name || this.record.EntityID;
452
1117
  }
1118
+ get TargetEntityInfo() {
1119
+ if (!this.record?.EntityID)
1120
+ return undefined;
1121
+ return this.ProviderToUse.EntityByID(this.record.EntityID);
1122
+ }
453
1123
  get WorkTypeIcon() {
454
1124
  switch (this.record?.WorkType) {
455
1125
  case 'Infer':
@@ -482,15 +1152,111 @@ let RecordProcessFormComponentExtended = class RecordProcessFormComponentExtende
482
1152
  this.cdr.markForCheck();
483
1153
  }
484
1154
  OnPipelineValidChange(valid) {
485
- this.pipelineValid = valid;
1155
+ this.PipelineValid = valid;
486
1156
  this.cdr.markForCheck();
487
1157
  }
1158
+ ToggleRawJson() {
1159
+ this.RawJsonExpanded = !this.RawJsonExpanded;
1160
+ this.cdr.markForCheck();
1161
+ }
1162
+ /** @deprecated Use {@link ToggleRawJson}. */
1163
+ toggleRawJson() {
1164
+ return this.ToggleRawJson();
1165
+ }
1166
+ async CopyRawJson() {
1167
+ try {
1168
+ if (navigator?.clipboard && this.FormattedRawJson) {
1169
+ await navigator.clipboard.writeText(this.FormattedRawJson);
1170
+ this.RawJsonCopied = true;
1171
+ this.cdr.markForCheck();
1172
+ setTimeout(() => {
1173
+ this.RawJsonCopied = false;
1174
+ this.cdr.markForCheck();
1175
+ }, 2000);
1176
+ }
1177
+ }
1178
+ catch (e) {
1179
+ LogError('[RecordProcessForm] Failed to copy raw JSON to clipboard', undefined, e);
1180
+ }
1181
+ }
1182
+ /** @deprecated Use {@link CopyRawJson}. */
1183
+ async copyRawJson() {
1184
+ return this.CopyRawJson();
1185
+ }
1186
+ get FormattedRawJson() {
1187
+ return FormatRawPipelineJson(this.record?.Configuration);
1188
+ }
1189
+ get ParsedSpec() {
1190
+ return ParsePipelineSpec(this.record?.Configuration);
1191
+ }
1192
+ get EntityStub() {
1193
+ const entity = this.TargetEntityInfo;
1194
+ if (!entity)
1195
+ return undefined;
1196
+ return {
1197
+ Name: entity.Name,
1198
+ Fields: (entity.Fields ?? []).map((f) => ({
1199
+ Name: f.Name,
1200
+ TSType: f.TSType,
1201
+ IsVirtual: f.IsVirtual,
1202
+ AllowsNull: f.AllowsNull,
1203
+ RelatedEntity: f.RelatedEntity,
1204
+ RelatedEntityID: f.RelatedEntityID,
1205
+ EntityFieldValues: f.EntityFieldValues
1206
+ ? f.EntityFieldValues.map((v) => ({ Value: v.Value, Code: v.Code }))
1207
+ : undefined,
1208
+ })),
1209
+ };
1210
+ }
1211
+ get SpecIssues() {
1212
+ return ValidatePipelineSpec(this.ParsedSpec, this.EntityStub);
1213
+ }
1214
+ get IsSpecValid() {
1215
+ return this.SpecIssues.filter((i) => i.Severity === 'error').length === 0;
1216
+ }
1217
+ get FeatureOutputs() {
1218
+ return BuildFeatureOutputViewModels(this.ParsedSpec, this.TargetEntityInfo, this.record?.OutputMapping);
1219
+ }
1220
+ get TotalFeaturesCount() {
1221
+ return this.FeatureOutputs.length;
1222
+ }
1223
+ get BoundFeaturesCount() {
1224
+ return this.FeatureOutputs.filter((f) => f.TargetFieldExists).length;
1225
+ }
1226
+ get ParameterMappings() {
1227
+ return BuildPromptParamViewModels(this.ParsedSpec, this.record?.InputMapping);
1228
+ }
1229
+ get ContextModeText() {
1230
+ const spec = this.ParsedSpec;
1231
+ if (spec?.Context?.EntityDocumentID)
1232
+ return 'Entity Document Template';
1233
+ if (spec?.Context?.QueryID) {
1234
+ return this.LoadedQuery?.Name ? `Query: ${this.LoadedQuery.Name}` : `Saved Query (${spec.Context.QueryID.substring(0, 8)}...)`;
1235
+ }
1236
+ if (spec?.Context?.Fields && spec.Context.Fields.length > 0)
1237
+ return `Fields (${spec.Context.Fields.join(', ')})`;
1238
+ return 'Record Fields (Automatic)';
1239
+ }
1240
+ get ContextQueryDisplay() {
1241
+ const spec = this.ParsedSpec;
1242
+ if (spec?.Context?.QueryID) {
1243
+ if (this.LoadedQuery?.SQL) {
1244
+ return `-- Saved Query: ${this.LoadedQuery.Name}\n${this.LoadedQuery.SQL}`;
1245
+ }
1246
+ const paramName = spec.Context.QueryParams ? Object.keys(spec.Context.QueryParams)[0] || 'RecordID' : 'RecordID';
1247
+ return `-- Saved Query: ${spec.Context.QueryID}\nSELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @${paramName}`;
1248
+ }
1249
+ return `SELECT a.* FROM ${this.TargetEntityName || 'TargetEntity'} a WHERE a.ID = @RecordID`;
1250
+ }
1251
+ get FormattedScopeFilter() {
1252
+ return this.record?.ScopeFilter?.trim() || '';
1253
+ }
488
1254
  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);
1255
+ 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", 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"], [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) {
1256
+ i0.ɵɵconditionalCreate(0, RecordProcessFormComponentExtended_Conditional_0_Template, 108, 142, "mj-record-form-container", 0);
491
1257
  } if (rf & 2) {
492
1258
  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}"] }); }
1259
+ } }, 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
1260
  };
495
1261
  RecordProcessFormComponentExtended = __decorate([
496
1262
  RegisterClass(BaseFormComponent, 'MJ: Record Processes', 100)
@@ -498,15 +1264,21 @@ RecordProcessFormComponentExtended = __decorate([
498
1264
  export { RecordProcessFormComponentExtended };
499
1265
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RecordProcessFormComponentExtended, [{
500
1266
  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"] }]
1267
+ 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 (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"] }]
502
1268
  }], null, null); })();
503
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber: 24 }); })();
1269
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(RecordProcessFormComponentExtended, { className: "RecordProcessFormComponentExtended", filePath: "src/lib/custom/RecordProcesses/record-process-form.component.ts", lineNumber: 247 }); })();
504
1270
  /**
505
- * Form policy ensuring the Overview & Status panel sits as the lead group
506
- * before Details on the left-nav rail.
1271
+ * Form policy ensuring the Overview panel sits as the lead group
1272
+ * on the left-nav rail with proper title and icon.
507
1273
  */
508
1274
  let RecordProcessFormPolicy = class RecordProcessFormPolicy extends BaseFormPolicy {
509
1275
  DecorateChrome(spec, _ctx) {
1276
+ const detailsGroup = spec.Groups.find(g => g.Key === DETAILS_SECTION_KEY || g.Key === 'details');
1277
+ if (detailsGroup) {
1278
+ detailsGroup.Title = 'Overview';
1279
+ detailsGroup.Icon = 'fa-solid fa-gauge-high';
1280
+ detailsGroup.IsLead = true;
1281
+ }
510
1282
  const overview = spec.Groups.find(g => g.Key === 'processOverview');
511
1283
  if (overview) {
512
1284
  overview.IsLead = true;