@memberjunction/ng-core-entity-forms 6.1.4 → 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 (327) hide show
  1. package/README.md +22 -0
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  6. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
  7. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  8. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
  13. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +794 -262
  17. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
  19. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
  21. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
  23. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
  25. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
  27. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
  29. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
  35. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
  37. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
  39. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
  41. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
  43. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
  45. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
  47. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  48. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
  49. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  50. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
  51. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  52. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
  53. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  54. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
  55. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
  56. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
  57. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  58. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
  59. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  60. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +686 -238
  61. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  62. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
  63. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  64. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
  65. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  66. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
  67. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  68. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
  69. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  70. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
  71. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  72. package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
  73. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  74. package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
  75. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  76. package/dist/lib/custom/Actions/action-form.component.js +387 -107
  77. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  78. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
  79. package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
  80. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
  81. package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
  82. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
  83. package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
  84. package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
  85. package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
  86. package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
  87. package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
  88. package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
  89. package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
  90. package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
  91. package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
  92. package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
  93. package/dist/lib/custom/Entities/entity-form.component.d.ts +209 -28
  94. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  95. package/dist/lib/custom/Entities/entity-form.component.js +494 -138
  96. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  97. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
  98. package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
  99. package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
  100. package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
  101. package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
  102. package/dist/lib/custom/Files/file-form.component.js +2 -2
  103. package/dist/lib/custom/Files/file-form.component.js.map +1 -1
  104. package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
  105. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  106. package/dist/lib/custom/Lists/list-form.component.js +664 -208
  107. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  108. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts +27 -0
  109. package/dist/lib/custom/MLModels/ml-model-form.component.d.ts.map +1 -0
  110. package/dist/lib/custom/MLModels/ml-model-form.component.js +193 -0
  111. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -0
  112. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +75 -0
  113. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -0
  114. package/dist/lib/custom/MLModels/ml-model-view-models.js +244 -0
  115. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -0
  116. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +173 -0
  117. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -0
  118. package/dist/lib/custom/MLModels/ps-model-detail.component.js +883 -0
  119. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -0
  120. package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
  121. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  122. package/dist/lib/custom/Queries/query-form.component.js +429 -109
  123. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  124. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
  125. package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
  126. package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
  127. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  128. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +133 -7
  129. package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
  130. package/dist/lib/custom/RecordProcesses/record-process-form.component.js +1268 -19
  131. package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
  132. package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
  133. package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
  134. package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
  135. package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
  136. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
  137. package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
  138. package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
  139. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  140. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
  141. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  142. package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
  143. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  144. package/dist/lib/custom/Templates/templates-form.component.d.ts +142 -17
  145. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  146. package/dist/lib/custom/Templates/templates-form.component.js +333 -113
  147. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  148. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
  149. package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
  150. package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
  151. package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
  152. package/dist/lib/custom/Tests/test-form.component.d.ts +217 -27
  153. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  154. package/dist/lib/custom/Tests/test-form.component.js +549 -169
  155. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  156. package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
  157. package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
  158. package/dist/lib/custom/Tests/test-run-checks.js +5 -1
  159. package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
  160. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
  161. package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
  162. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
  163. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  164. package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
  165. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  166. package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
  167. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  168. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +390 -47
  169. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  170. package/dist/lib/custom/Tests/test-suite-form.component.js +1015 -343
  171. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  172. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
  173. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  174. package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
  175. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  176. package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
  177. package/dist/lib/custom/Users/user-overview.panel.js +2 -2
  178. package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
  179. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
  180. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
  181. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
  182. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  183. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
  184. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
  185. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
  186. package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
  187. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
  188. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  189. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
  190. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  191. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
  192. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  193. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
  194. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  195. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
  196. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  197. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
  198. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  199. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
  200. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  201. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
  202. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  203. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +121 -14
  204. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  205. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +287 -79
  206. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  207. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
  208. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
  209. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
  210. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
  211. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
  212. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
  213. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
  214. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
  215. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
  216. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
  217. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
  218. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
  219. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
  220. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
  221. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
  222. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
  223. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
  224. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
  225. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
  226. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
  227. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
  228. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
  229. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
  230. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
  231. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
  232. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
  233. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
  234. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
  235. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
  236. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
  237. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
  238. package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
  239. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
  240. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
  241. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
  242. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
  243. package/dist/lib/custom/custom-forms.module.d.ts +32 -30
  244. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  245. package/dist/lib/custom/custom-forms.module.js +21 -4
  246. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  247. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
  248. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  249. package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
  250. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  251. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  252. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +62 -26
  253. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  254. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  255. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
  256. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  257. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
  258. package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
  259. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  260. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +33 -15
  261. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  262. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  263. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +100 -82
  264. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  265. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +24 -20
  266. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  267. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts +10 -0
  268. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -0
  269. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +122 -0
  270. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -0
  271. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts +10 -0
  272. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.d.ts.map +1 -0
  273. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js +125 -0
  274. package/dist/lib/generated/Entities/MJFeatureValueCache/mjfeaturevaluecache.form.component.js.map +1 -0
  275. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
  276. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +23 -5
  277. package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
  278. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.d.ts.map +1 -1
  279. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js +25 -6
  280. package/dist/lib/generated/Entities/MJProcessRunDetail/mjprocessrundetail.form.component.js.map +1 -1
  281. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
  282. package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
  283. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  284. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +11 -15
  285. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  286. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  287. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +43 -7
  288. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  289. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  290. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
  291. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  292. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts +10 -0
  293. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.d.ts.map +1 -0
  294. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js +78 -0
  295. package/dist/lib/generated/Entities/MJWebSearchProvider/mjwebsearchprovider.form.component.js.map +1 -0
  296. package/dist/lib/generated/generated-forms.module.d.ts +240 -237
  297. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  298. package/dist/lib/generated/generated-forms.module.js +11 -2
  299. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  300. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
  301. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
  302. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
  303. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
  304. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
  305. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
  306. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
  307. package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
  308. package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
  309. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
  310. package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
  311. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +122 -1
  312. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  313. package/dist/lib/panels/model-predictions/model-prediction.logic.js +236 -11
  314. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  315. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +72 -13
  316. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
  317. package/dist/lib/panels/model-predictions/model-prediction.panel.js +577 -78
  318. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
  319. package/dist/lib/shared/components/template-editor.component.d.ts +133 -14
  320. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  321. package/dist/lib/shared/components/template-editor.component.js +322 -124
  322. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  323. package/dist/public-api.d.ts +4 -0
  324. package/dist/public-api.d.ts.map +1 -1
  325. package/dist/public-api.js +4 -0
  326. package/dist/public-api.js.map +1 -1
  327. package/package.json +43 -41
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
2
- import { FLOW_COLORS, shortLabel } from './agent-run-flow.model';
3
- import { svgEl, clip, appendIcon, appendTitle } from './flow-svg.util';
2
+ import { FLOW_COLORS, ShortLabel } from './agent-run-flow.model';
3
+ import { SvgEl, Clip, AppendIcon, AppendTitle } from './flow-svg.util';
4
4
  import { PanZoomController } from './pan-zoom';
5
5
  import * as i0 from "@angular/core";
6
6
  const _c0 = ["svg"];
@@ -12,7 +12,15 @@ const _c0 = ["svg"];
12
12
  */
13
13
  export class ConstellationComponent {
14
14
  constructor() {
15
- this.nodeSelected = new EventEmitter();
15
+ this.NodeSelected = new EventEmitter();
16
+ /**
17
+ * @deprecated Use {@link NodeSelected}.
18
+ *
19
+ * The same emitter under the old binding name, so a template still binding
20
+ * (nodeSelected) keeps working. Must stay AFTER NodeSelected: class fields
21
+ * initialise in order, and the other way round this captures undefined.
22
+ */
23
+ this.nodeSelected = this.NodeSelected;
16
24
  this._model = null;
17
25
  this.built = false;
18
26
  this.stars = new Map();
@@ -24,6 +32,14 @@ export class ConstellationComponent {
24
32
  this.CX = 600;
25
33
  this.CY = 360;
26
34
  }
35
+ /** @deprecated Use {@link SvgRef}. */
36
+ get svgRef() {
37
+ return this.SvgRef;
38
+ }
39
+ /** @deprecated Use {@link SvgRef}. */
40
+ set svgRef(value) {
41
+ this.SvgRef = value;
42
+ }
27
43
  SetSelected(id) { this.selectedId = id ?? -1; }
28
44
  ZoomIn() { this.pz?.ZoomIn(); }
29
45
  ZoomOut() { this.pz?.ZoomOut(); }
@@ -43,7 +59,7 @@ export class ConstellationComponent {
43
59
  clear() {
44
60
  this.pz?.Detach();
45
61
  this.pz = undefined;
46
- const svg = this.svgRef?.nativeElement;
62
+ const svg = this.SvgRef?.nativeElement;
47
63
  if (svg)
48
64
  while (svg.firstChild)
49
65
  svg.removeChild(svg.firstChild);
@@ -52,79 +68,79 @@ export class ConstellationComponent {
52
68
  this.hoveredId = -1;
53
69
  }
54
70
  build() {
55
- const svg = this.svgRef.nativeElement;
71
+ const svg = this.SvgRef.nativeElement;
56
72
  const m = this._model;
57
73
  svg.setAttribute('viewBox', `0 0 ${this.VW} ${this.VH}`);
58
- const bg = svgEl('g', {}, svg);
74
+ const bg = SvgEl('g', {}, svg);
59
75
  let seed = 7;
60
76
  const rnd = () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; };
61
77
  for (let i = 0; i < 150; i++) {
62
- svgEl('circle', { cx: rnd() * this.VW, cy: rnd() * this.VH, r: rnd() * 1.3 + 0.3, class: 'fstar-bg', opacity: rnd() * 0.3 + 0.04 }, bg);
78
+ SvgEl('circle', { cx: rnd() * this.VW, cy: rnd() * this.VH, r: rnd() * 1.3 + 0.3, class: 'fstar-bg', opacity: rnd() * 0.3 + 0.04 }, bg);
63
79
  }
64
- const main = svgEl('g', {}, svg);
65
- const edgeG = svgEl('g', {}, main);
66
- const nodeG = svgEl('g', {}, main);
67
- const step = Math.min(150, 300 / Math.max(1, m.maxDepth));
68
- const leafCount = Math.max(1, m.leaves.length);
80
+ const main = SvgEl('g', {}, svg);
81
+ const edgeG = SvgEl('g', {}, main);
82
+ const nodeG = SvgEl('g', {}, main);
83
+ const step = Math.min(150, 300 / Math.max(1, m.MaxDepth));
84
+ const leafCount = Math.max(1, m.Leaves.length);
69
85
  let li = 0;
70
86
  const assignAngle = (n) => {
71
- if (!n.children.length) {
87
+ if (!n.Children.length) {
72
88
  const a = (li + 0.5) / leafCount * 2 * Math.PI;
73
89
  li++;
74
90
  n._ang = a;
75
91
  return a;
76
92
  }
77
- const cs = n.children.map(c => assignAngle(c));
93
+ const cs = n.Children.map(c => assignAngle(c));
78
94
  n._ang = cs.reduce((s, a) => s + a, 0) / cs.length;
79
95
  return n._ang;
80
96
  };
81
- assignAngle(m.root);
82
- for (const n of m.nodes) {
83
- const cn = n, r = n.depth * step;
97
+ assignAngle(m.Root);
98
+ for (const n of m.Nodes) {
99
+ const cn = n, r = n.Depth * step;
84
100
  cn._x = this.CX + r * Math.cos(cn._ang - Math.PI / 2);
85
101
  cn._y = this.CY + r * Math.sin(cn._ang - Math.PI / 2);
86
102
  }
87
- for (const n of m.nodes) {
88
- if (!n.parent)
103
+ for (const n of m.Nodes) {
104
+ if (!n.Parent)
89
105
  continue;
90
- const pn = n.parent, cn = n;
106
+ const pn = n.Parent, cn = n;
91
107
  const mx = (pn._x + cn._x) / 2, my = (pn._y + cn._y) / 2;
92
108
  const ctrlX = mx + (this.CX - mx) * 0.16, ctrlY = my + (this.CY - my) * 0.16;
93
- const col = FLOW_COLORS[n.type];
94
- const path = svgEl('path', { d: `M${pn._x},${pn._y} Q${ctrlX},${ctrlY} ${cn._x},${cn._y}`, fill: 'none', stroke: col, 'stroke-width': 1.4, opacity: 0.12 }, edgeG);
95
- const part = svgEl('circle', { r: 3.2, class: 'fhand-dot', opacity: 0 }, edgeG);
109
+ const col = FLOW_COLORS[n.Type];
110
+ const path = SvgEl('path', { d: `M${pn._x},${pn._y} Q${ctrlX},${ctrlY} ${cn._x},${cn._y}`, fill: 'none', stroke: col, 'stroke-width': 1.4, opacity: 0.12 }, edgeG);
111
+ const part = SvgEl('circle', { r: 3.2, class: 'fhand-dot', opacity: 0 }, edgeG);
96
112
  this.edges.push({ path, part, node: n, len: path.getTotalLength() });
97
113
  }
98
- for (const n of m.nodes) {
114
+ for (const n of m.Nodes) {
99
115
  const cn = n;
100
- const rad = n.depth === 0 ? 22 : Math.min(24, 9 + Math.pow(n.realDur, 0.55) * 2.6);
101
- const col = FLOW_COLORS[n.type];
102
- const grp = svgEl('g', {}, nodeG);
116
+ const rad = n.Depth === 0 ? 22 : Math.min(24, 9 + Math.pow(n.RealDur, 0.55) * 2.6);
117
+ const col = FLOW_COLORS[n.Type];
118
+ const grp = SvgEl('g', {}, nodeG);
103
119
  grp.style.color = col;
104
120
  grp.style.cursor = 'pointer';
105
- appendTitle(grp, `${n.name}`);
106
- const halo = svgEl('circle', { cx: cn._x, cy: cn._y, r: rad + 7, fill: col, opacity: 0 }, grp);
107
- const ring = svgEl('circle', { cx: cn._x, cy: cn._y, r: rad, fill: col, 'fill-opacity': 0.16, stroke: col, 'stroke-width': 1.6 }, grp);
108
- const icon = appendIcon(grp, cn._x - rad * 0.6, cn._y - rad * 0.6, rad * 1.2, n.iconClass, n.logoUrl, col);
121
+ AppendTitle(grp, `${n.Name}`);
122
+ const halo = SvgEl('circle', { cx: cn._x, cy: cn._y, r: rad + 7, fill: col, opacity: 0 }, grp);
123
+ const ring = SvgEl('circle', { cx: cn._x, cy: cn._y, r: rad, fill: col, 'fill-opacity': 0.16, stroke: col, 'stroke-width': 1.6 }, grp);
124
+ const icon = AppendIcon(grp, cn._x - rad * 0.6, cn._y - rad * 0.6, rad * 1.2, n.IconClass, n.LogoUrl, col);
109
125
  icon.setAttribute('opacity', '0');
110
126
  // angle each label along its radial spoke (flip on the left half so it stays upright)
111
127
  const dir = cn._ang - Math.PI / 2;
112
128
  const lx = cn._x + Math.cos(dir) * (rad + 8), ly = cn._y + Math.sin(dir) * (rad + 8);
113
129
  const flip = Math.cos(dir) < 0;
114
130
  const deg = dir * 180 / Math.PI + (flip ? 180 : 0);
115
- const lab = n.depth === 0
116
- ? svgEl('text', { x: cn._x, y: cn._y + rad + 18, 'font-size': 13, 'font-weight': 700, 'text-anchor': 'middle', class: 'fhalo', opacity: 0, text: clip(shortLabel(n), 22) }, grp)
117
- : svgEl('text', {
131
+ const lab = n.Depth === 0
132
+ ? SvgEl('text', { x: cn._x, y: cn._y + rad + 18, 'font-size': 13, 'font-weight': 700, 'text-anchor': 'middle', class: 'fhalo', opacity: 0, text: Clip(ShortLabel(n), 22) }, grp)
133
+ : SvgEl('text', {
118
134
  x: lx, y: ly, 'font-size': 10.5, 'font-weight': 600, 'dominant-baseline': 'middle',
119
135
  'text-anchor': flip ? 'end' : 'start', transform: `rotate(${deg} ${lx} ${ly})`,
120
- class: 'fhalo', opacity: 0, text: clip(shortLabel(n), 22)
136
+ class: 'fhalo', opacity: 0, text: Clip(ShortLabel(n), 22)
121
137
  }, grp);
122
- grp.addEventListener('mouseenter', () => { this.hoveredId = n.id; });
123
- grp.addEventListener('mouseleave', () => { if (this.hoveredId === n.id)
138
+ grp.addEventListener('mouseenter', () => { this.hoveredId = n.Id; });
139
+ grp.addEventListener('mouseleave', () => { if (this.hoveredId === n.Id)
124
140
  this.hoveredId = -1; });
125
141
  grp.addEventListener('click', () => { if (!this.pz?.moved)
126
- this.nodeSelected.emit(n); });
127
- this.stars.set(n.id, { halo, ring, icon, lab, node: n, rad });
142
+ this.NodeSelected.emit(n); });
143
+ this.stars.set(n.Id, { halo, ring, icon, lab, node: n, rad });
128
144
  }
129
145
  this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.constellation.v1');
130
146
  this.pz.Load();
@@ -132,14 +148,14 @@ export class ConstellationComponent {
132
148
  }
133
149
  update(p, ts) {
134
150
  this.stars.forEach(({ halo, ring, icon, lab, node, rad }) => {
135
- const started = p >= node.t0 || node.depth === 0;
136
- const active = p >= node.t0 && p < node.t1;
137
- const hovered = this.hoveredId === node.id;
138
- const selected = this.selectedId === node.id;
151
+ const started = p >= node.T0 || node.Depth === 0;
152
+ const active = p >= node.T0 && p < node.T1;
153
+ const hovered = this.hoveredId === node.Id;
154
+ const selected = this.selectedId === node.Id;
139
155
  if (started) {
140
- const tw = 0.6 + 0.4 * Math.sin(ts / (420 + node.realDur * 70));
156
+ const tw = 0.6 + 0.4 * Math.sin(ts / (420 + node.RealDur * 70));
141
157
  ring.setAttribute('fill-opacity', active || hovered || selected ? '0.32' : String(0.16 + 0.06 * tw));
142
- ring.setAttribute('class', selected ? 'glow2' : active ? 'glow' + Math.max(1, node.heat) : hovered ? 'glow2' : 'glow1');
158
+ ring.setAttribute('class', selected ? 'glow2' : active ? 'glow' + Math.max(1, node.Heat) : hovered ? 'glow2' : 'glow1');
143
159
  ring.setAttribute('stroke-width', selected ? '3' : '1.6');
144
160
  icon.setAttribute('opacity', active || hovered || selected ? '1' : '0.8');
145
161
  halo.setAttribute('opacity', active ? String(0.16 + 0.12 * Math.sin(ts / 230)) : selected ? '0.16' : hovered ? '0.14' : '0');
@@ -152,12 +168,12 @@ export class ConstellationComponent {
152
168
  icon.setAttribute('opacity', hovered ? '0.7' : '0.25');
153
169
  halo.setAttribute('opacity', hovered ? '0.1' : '0');
154
170
  }
155
- const showLabel = node.depth <= 1 || active || hovered || selected;
156
- lab.setAttribute('opacity', showLabel ? (active || hovered || selected ? '1' : node.depth === 0 ? '1' : '0.62') : '0');
171
+ const showLabel = node.Depth <= 1 || active || hovered || selected;
172
+ lab.setAttribute('opacity', showLabel ? (active || hovered || selected ? '1' : node.Depth === 0 ? '1' : '0.62') : '0');
157
173
  });
158
174
  this.edges.forEach(({ path, part, node, len }) => {
159
- const flowing = p >= node.t0 && p < node.t1;
160
- const lit = p >= node.t0;
175
+ const flowing = p >= node.T0 && p < node.T1;
176
+ const lit = p >= node.T0;
161
177
  path.setAttribute('opacity', lit ? (flowing ? '0.6' : '0.2') : '0.1');
162
178
  path.setAttribute('stroke-width', flowing ? '2.4' : '1.4');
163
179
  if (flowing) {
@@ -167,7 +183,7 @@ export class ConstellationComponent {
167
183
  part.setAttribute('cy', String(pt.y));
168
184
  part.setAttribute('opacity', '1');
169
185
  part.setAttribute('class', 'glow2');
170
- part.style.color = FLOW_COLORS[node.type];
186
+ part.style.color = FLOW_COLORS[node.Type];
171
187
  }
172
188
  else {
173
189
  part.setAttribute('opacity', '0');
@@ -179,8 +195,8 @@ export class ConstellationComponent {
179
195
  i0.ɵɵviewQuery(_c0, 7);
180
196
  } if (rf & 2) {
181
197
  let _t;
182
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.svgRef = _t.first);
183
- } }, inputs: { Model: "Model" }, outputs: { nodeSelected: "nodeSelected" }, standalone: false, decls: 2, vars: 0, consts: [["svg", ""], ["preserveAspectRatio", "xMidYMid meet", 1, "flow-svg"]], template: function ConstellationComponent_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.SvgRef = _t.first);
199
+ } }, inputs: { Model: "Model" }, outputs: { NodeSelected: "NodeSelected", nodeSelected: "nodeSelected" }, standalone: false, decls: 2, vars: 0, consts: [["svg", ""], ["preserveAspectRatio", "xMidYMid meet", 1, "flow-svg"]], template: function ConstellationComponent_Template(rf, ctx) { if (rf & 1) {
184
200
  i0.ɵɵnamespaceSVG();
185
201
  i0.ɵɵelement(0, "svg", 1, 0);
186
202
  } }, styles: ["/* Shared chrome for every flow renderer's <svg> host.\n These components use ViewEncapsulation.None so this CSS reaches SVG nodes\n created imperatively via createElementNS (which never receive Angular's\n emulated-encapsulation scoping attribute). Everything is namespaced under\n `.flow-svg` to avoid leaking into the rest of the app. */\n.flow-svg {\n width: 100%;\n height: 100%;\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.flow-svg text { fill: var(--mj-text-primary); }\n.flow-svg .ftxt-secondary { fill: var(--mj-text-secondary); }\n.flow-svg .ftxt-muted { fill: var(--mj-text-muted); }\n.flow-svg .ftxt-on { fill: var(--mj-text-inverse); }\n.flow-svg .fgrid { stroke: var(--mj-border-subtle); }\n.flow-svg .fhand { stroke: var(--mj-text-secondary); }\n.flow-svg .fhand-dot { fill: var(--mj-text-primary); }\n.flow-svg .fstar-bg { fill: var(--mj-text-muted); }\n/* outlined label for legibility over edges / busy fields */\n.flow-svg .fhalo { paint-order: stroke; stroke: var(--mj-bg-page); stroke-width: 3.5px; stroke-linejoin: round; }\n\n/* Heat / activity glow tiers \u2014 driven by `currentColor` (the node's category color). */\n.flow-svg .glow1 { filter: drop-shadow(0 0 4px currentColor); }\n.flow-svg .glow2 { filter: drop-shadow(0 0 9px currentColor); }\n.flow-svg .glow3 { filter: drop-shadow(0 0 16px currentColor); }\n"], encapsulation: 2, changeDetection: 0 }); }
@@ -188,9 +204,11 @@ export class ConstellationComponent {
188
204
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConstellationComponent, [{
189
205
  type: Component,
190
206
  args: [{ standalone: false, selector: 'mj-agent-flow-constellation', template: `<svg #svg class="flow-svg" preserveAspectRatio="xMidYMid meet"></svg>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["/* Shared chrome for every flow renderer's <svg> host.\n These components use ViewEncapsulation.None so this CSS reaches SVG nodes\n created imperatively via createElementNS (which never receive Angular's\n emulated-encapsulation scoping attribute). Everything is namespaced under\n `.flow-svg` to avoid leaking into the rest of the app. */\n.flow-svg {\n width: 100%;\n height: 100%;\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.flow-svg text { fill: var(--mj-text-primary); }\n.flow-svg .ftxt-secondary { fill: var(--mj-text-secondary); }\n.flow-svg .ftxt-muted { fill: var(--mj-text-muted); }\n.flow-svg .ftxt-on { fill: var(--mj-text-inverse); }\n.flow-svg .fgrid { stroke: var(--mj-border-subtle); }\n.flow-svg .fhand { stroke: var(--mj-text-secondary); }\n.flow-svg .fhand-dot { fill: var(--mj-text-primary); }\n.flow-svg .fstar-bg { fill: var(--mj-text-muted); }\n/* outlined label for legibility over edges / busy fields */\n.flow-svg .fhalo { paint-order: stroke; stroke: var(--mj-bg-page); stroke-width: 3.5px; stroke-linejoin: round; }\n\n/* Heat / activity glow tiers \u2014 driven by `currentColor` (the node's category color). */\n.flow-svg .glow1 { filter: drop-shadow(0 0 4px currentColor); }\n.flow-svg .glow2 { filter: drop-shadow(0 0 9px currentColor); }\n.flow-svg .glow3 { filter: drop-shadow(0 0 16px currentColor); }\n"] }]
191
- }], null, { svgRef: [{
207
+ }], null, { SvgRef: [{
192
208
  type: ViewChild,
193
209
  args: ['svg', { static: true }]
210
+ }], NodeSelected: [{
211
+ type: Output
194
212
  }], nodeSelected: [{
195
213
  type: Output
196
214
  }], Model: [{
@@ -1 +1 @@
1
- {"version":3,"file":"constellation.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/constellation.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, Input, Output, EventEmitter, ViewChild, OnDestroy, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { FlowModel, FlowNode, FLOW_COLORS, shortLabel } from './agent-run-flow.model';\nimport { svgEl, clip, appendIcon, appendTitle } from './flow-svg.util';\nimport { PanZoomController } from './pan-zoom';\n\ninterface Star { halo: SVGElement; ring: SVGElement; icon: SVGElement; lab: SVGElement; node: FlowNode; rad: number; }\ninterface Edge { path: SVGGraphicsElement; part: SVGElement; node: FlowNode; len: number; }\ntype Placed = FlowNode & { _x?: number; _y?: number; _ang?: number };\n\n/**\n * Constellation — the agent tree as a star map. Leaves spread evenly around the\n * circle (radial dendrogram) so dense sub-agents don't clump; stars carry the real\n * step/agent icon, ignite in execution order, and pulse energy down curved edges.\n * Labels stay clutter-free (root + top level + active by default, hover to reveal).\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-constellation',\n template: `<svg #svg class=\"flow-svg\" preserveAspectRatio=\"xMidYMid meet\"></svg>`,\n styleUrls: ['./flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConstellationComponent {\n @ViewChild('svg', { static: true }) svgRef!: ElementRef<SVGSVGElement>;\n @Output() nodeSelected = new EventEmitter<FlowNode>();\n\n private _model: FlowModel | null = null;\n private built = false;\n private stars = new Map<number, Star>();\n private edges: Edge[] = [];\n private hoveredId = -1;\n private selectedId = -1;\n private pz?: PanZoomController;\n\n private readonly VW = 1200;\n private readonly VH = 720;\n private readonly CX = 600;\n private readonly CY = 360;\n\n public SetSelected(id: number | null): void { this.selectedId = id ?? -1; }\n public ZoomIn(): void { this.pz?.ZoomIn(); }\n public ZoomOut(): void { this.pz?.ZoomOut(); }\n public FitReset(): void { this.pz?.Reset(); }\n public ReapplyView(): void { this.pz?.Reapply(); }\n ngOnDestroy(): void { this.pz?.Detach(); }\n\n @Input() set Model(m: FlowModel | null) { this._model = m; this.built = false; this.clear(); }\n\n public Render(p: number, ts: number): void {\n if (!this._model) return;\n if (!this.built) { this.build(); this.built = true; }\n this.update(p, ts);\n }\n\n private clear(): void {\n this.pz?.Detach(); this.pz = undefined;\n const svg = this.svgRef?.nativeElement;\n if (svg) while (svg.firstChild) svg.removeChild(svg.firstChild);\n this.stars.clear(); this.edges = []; this.hoveredId = -1;\n }\n\n private build(): void {\n const svg = this.svgRef.nativeElement;\n const m = this._model!;\n svg.setAttribute('viewBox', `0 0 ${this.VW} ${this.VH}`);\n\n const bg = svgEl('g', {}, svg);\n let seed = 7; const rnd = () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; };\n for (let i = 0; i < 150; i++) {\n svgEl('circle', { cx: rnd() * this.VW, cy: rnd() * this.VH, r: rnd() * 1.3 + 0.3, class: 'fstar-bg', opacity: rnd() * 0.3 + 0.04 }, bg);\n }\n const main = svgEl('g', {}, svg);\n const edgeG = svgEl('g', {}, main);\n const nodeG = svgEl('g', {}, main);\n\n const step = Math.min(150, 300 / Math.max(1, m.maxDepth));\n const leafCount = Math.max(1, m.leaves.length);\n let li = 0;\n const assignAngle = (n: Placed): number => {\n if (!n.children.length) { const a = (li + 0.5) / leafCount * 2 * Math.PI; li++; n._ang = a; return a; }\n const cs = n.children.map(c => assignAngle(c as Placed));\n n._ang = cs.reduce((s, a) => s + a, 0) / cs.length; return n._ang;\n };\n assignAngle(m.root as Placed);\n for (const n of m.nodes) {\n const cn = n as Placed, r = n.depth * step;\n cn._x = this.CX + r * Math.cos(cn._ang! - Math.PI / 2);\n cn._y = this.CY + r * Math.sin(cn._ang! - Math.PI / 2);\n }\n\n for (const n of m.nodes) {\n if (!n.parent) continue;\n const pn = n.parent as Placed, cn = n as Placed;\n const mx = (pn._x! + cn._x!) / 2, my = (pn._y! + cn._y!) / 2;\n const ctrlX = mx + (this.CX - mx) * 0.16, ctrlY = my + (this.CY - my) * 0.16;\n const col = FLOW_COLORS[n.type];\n const path = svgEl('path', { d: `M${pn._x},${pn._y} Q${ctrlX},${ctrlY} ${cn._x},${cn._y}`, fill: 'none', stroke: col, 'stroke-width': 1.4, opacity: 0.12 }, edgeG) as SVGGraphicsElement;\n const part = svgEl('circle', { r: 3.2, class: 'fhand-dot', opacity: 0 }, edgeG);\n this.edges.push({ path, part, node: n, len: (path as unknown as SVGPathElement).getTotalLength() });\n }\n\n for (const n of m.nodes) {\n const cn = n as Placed;\n const rad = n.depth === 0 ? 22 : Math.min(24, 9 + Math.pow(n.realDur, 0.55) * 2.6);\n const col = FLOW_COLORS[n.type];\n const grp = svgEl('g', {}, nodeG);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n appendTitle(grp, `${n.name}`);\n const halo = svgEl('circle', { cx: cn._x!, cy: cn._y!, r: rad + 7, fill: col, opacity: 0 }, grp);\n const ring = svgEl('circle', { cx: cn._x!, cy: cn._y!, r: rad, fill: col, 'fill-opacity': 0.16, stroke: col, 'stroke-width': 1.6 }, grp);\n const icon = appendIcon(grp, cn._x! - rad * 0.6, cn._y! - rad * 0.6, rad * 1.2, n.iconClass, n.logoUrl, col);\n icon.setAttribute('opacity', '0');\n // angle each label along its radial spoke (flip on the left half so it stays upright)\n const dir = cn._ang! - Math.PI / 2;\n const lx = cn._x! + Math.cos(dir) * (rad + 8), ly = cn._y! + Math.sin(dir) * (rad + 8);\n const flip = Math.cos(dir) < 0;\n const deg = dir * 180 / Math.PI + (flip ? 180 : 0);\n const lab = n.depth === 0\n ? svgEl('text', { x: cn._x!, y: cn._y! + rad + 18, 'font-size': 13, 'font-weight': 700, 'text-anchor': 'middle', class: 'fhalo', opacity: 0, text: clip(shortLabel(n), 22) }, grp)\n : svgEl('text', {\n x: lx, y: ly, 'font-size': 10.5, 'font-weight': 600, 'dominant-baseline': 'middle',\n 'text-anchor': flip ? 'end' : 'start', transform: `rotate(${deg} ${lx} ${ly})`,\n class: 'fhalo', opacity: 0, text: clip(shortLabel(n), 22)\n }, grp);\n grp.addEventListener('mouseenter', () => { this.hoveredId = n.id; });\n grp.addEventListener('mouseleave', () => { if (this.hoveredId === n.id) this.hoveredId = -1; });\n grp.addEventListener('click', () => { if (!this.pz?.moved) this.nodeSelected.emit(n); });\n this.stars.set(n.id, { halo, ring, icon, lab, node: n, rad });\n }\n\n this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.constellation.v1');\n this.pz.Load(); this.pz.Attach();\n }\n\n private update(p: number, ts: number): void {\n this.stars.forEach(({ halo, ring, icon, lab, node, rad }) => {\n const started = p >= node.t0 || node.depth === 0;\n const active = p >= node.t0 && p < node.t1;\n const hovered = this.hoveredId === node.id;\n const selected = this.selectedId === node.id;\n if (started) {\n const tw = 0.6 + 0.4 * Math.sin(ts / (420 + node.realDur * 70));\n ring.setAttribute('fill-opacity', active || hovered || selected ? '0.32' : String(0.16 + 0.06 * tw));\n ring.setAttribute('class', selected ? 'glow2' : active ? 'glow' + Math.max(1, node.heat) : hovered ? 'glow2' : 'glow1');\n ring.setAttribute('stroke-width', selected ? '3' : '1.6');\n icon.setAttribute('opacity', active || hovered || selected ? '1' : '0.8');\n halo.setAttribute('opacity', active ? String(0.16 + 0.12 * Math.sin(ts / 230)) : selected ? '0.16' : hovered ? '0.14' : '0');\n halo.setAttribute('r', String(rad + 7 + (active ? 4 * Math.abs(Math.sin(ts / 240)) : 0)));\n } else {\n ring.setAttribute('fill-opacity', '0.06'); ring.setAttribute('class', hovered ? 'glow2' : '');\n ring.setAttribute('stroke-width', '1.6');\n icon.setAttribute('opacity', hovered ? '0.7' : '0.25');\n halo.setAttribute('opacity', hovered ? '0.1' : '0');\n }\n const showLabel = node.depth <= 1 || active || hovered || selected;\n lab.setAttribute('opacity', showLabel ? (active || hovered || selected ? '1' : node.depth === 0 ? '1' : '0.62') : '0');\n });\n this.edges.forEach(({ path, part, node, len }) => {\n const flowing = p >= node.t0 && p < node.t1;\n const lit = p >= node.t0;\n path.setAttribute('opacity', lit ? (flowing ? '0.6' : '0.2') : '0.1');\n path.setAttribute('stroke-width', flowing ? '2.4' : '1.4');\n if (flowing) {\n const ph = (ts / 700) % 1;\n const pt = (path as unknown as SVGPathElement).getPointAtLength(ph * len);\n part.setAttribute('cx', String(pt.x)); part.setAttribute('cy', String(pt.y));\n part.setAttribute('opacity', '1'); part.setAttribute('class', 'glow2');\n (part as SVGElement & { style: CSSStyleDeclaration }).style.color = FLOW_COLORS[node.type];\n } else {\n part.setAttribute('opacity', '0');\n }\n });\n }\n}\n"]}
1
+ {"version":3,"file":"constellation.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/constellation.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, ElementRef, Input, Output, EventEmitter, ViewChild, OnDestroy, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';\nimport { FlowModel, FlowNode, FLOW_COLORS, ShortLabel } from './agent-run-flow.model';\nimport { SvgEl, Clip, AppendIcon, AppendTitle } from './flow-svg.util';\nimport { PanZoomController } from './pan-zoom';\n\ninterface Star { halo: SVGElement; ring: SVGElement; icon: SVGElement; lab: SVGElement; node: FlowNode; rad: number; }\ninterface Edge { path: SVGGraphicsElement; part: SVGElement; node: FlowNode; len: number; }\ntype Placed = FlowNode & { _x?: number; _y?: number; _ang?: number };\n\n/**\n * Constellation — the agent tree as a star map. Leaves spread evenly around the\n * circle (radial dendrogram) so dense sub-agents don't clump; stars carry the real\n * step/agent icon, ignite in execution order, and pulse energy down curved edges.\n * Labels stay clutter-free (root + top level + active by default, hover to reveal).\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-constellation',\n template: `<svg #svg class=\"flow-svg\" preserveAspectRatio=\"xMidYMid meet\"></svg>`,\n styleUrls: ['./flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConstellationComponent {\n @ViewChild('svg', { static: true }) SvgRef!: ElementRef<SVGSVGElement>;\n\n /** @deprecated Use {@link SvgRef}. */\n get svgRef(): ElementRef<SVGSVGElement> {\n return this.SvgRef;\n }\n /** @deprecated Use {@link SvgRef}. */\n set svgRef(value: ElementRef<SVGSVGElement>) {\n this.SvgRef = value;\n }\n @Output() NodeSelected = new EventEmitter<FlowNode>();\n\n /**\n * @deprecated Use {@link NodeSelected}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (nodeSelected) keeps working. Must stay AFTER NodeSelected: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() nodeSelected = this.NodeSelected;\n\n private _model: FlowModel | null = null;\n private built = false;\n private stars = new Map<number, Star>();\n private edges: Edge[] = [];\n private hoveredId = -1;\n private selectedId = -1;\n private pz?: PanZoomController;\n\n private readonly VW = 1200;\n private readonly VH = 720;\n private readonly CX = 600;\n private readonly CY = 360;\n\n public SetSelected(id: number | null): void { this.selectedId = id ?? -1; }\n public ZoomIn(): void { this.pz?.ZoomIn(); }\n public ZoomOut(): void { this.pz?.ZoomOut(); }\n public FitReset(): void { this.pz?.Reset(); }\n public ReapplyView(): void { this.pz?.Reapply(); }\n ngOnDestroy(): void { this.pz?.Detach(); }\n\n @Input() set Model(m: FlowModel | null) { this._model = m; this.built = false; this.clear(); }\n\n public Render(p: number, ts: number): void {\n if (!this._model) return;\n if (!this.built) { this.build(); this.built = true; }\n this.update(p, ts);\n }\n\n private clear(): void {\n this.pz?.Detach(); this.pz = undefined;\n const svg = this.SvgRef?.nativeElement;\n if (svg) while (svg.firstChild) svg.removeChild(svg.firstChild);\n this.stars.clear(); this.edges = []; this.hoveredId = -1;\n }\n\n private build(): void {\n const svg = this.SvgRef.nativeElement;\n const m = this._model!;\n svg.setAttribute('viewBox', `0 0 ${this.VW} ${this.VH}`);\n\n const bg = SvgEl('g', {}, svg);\n let seed = 7; const rnd = () => { seed = (seed * 9301 + 49297) % 233280; return seed / 233280; };\n for (let i = 0; i < 150; i++) {\n SvgEl('circle', { cx: rnd() * this.VW, cy: rnd() * this.VH, r: rnd() * 1.3 + 0.3, class: 'fstar-bg', opacity: rnd() * 0.3 + 0.04 }, bg);\n }\n const main = SvgEl('g', {}, svg);\n const edgeG = SvgEl('g', {}, main);\n const nodeG = SvgEl('g', {}, main);\n\n const step = Math.min(150, 300 / Math.max(1, m.MaxDepth));\n const leafCount = Math.max(1, m.Leaves.length);\n let li = 0;\n const assignAngle = (n: Placed): number => {\n if (!n.Children.length) { const a = (li + 0.5) / leafCount * 2 * Math.PI; li++; n._ang = a; return a; }\n const cs = n.Children.map(c => assignAngle(c as Placed));\n n._ang = cs.reduce((s, a) => s + a, 0) / cs.length; return n._ang;\n };\n assignAngle(m.Root as Placed);\n for (const n of m.Nodes) {\n const cn = n as Placed, r = n.Depth * step;\n cn._x = this.CX + r * Math.cos(cn._ang! - Math.PI / 2);\n cn._y = this.CY + r * Math.sin(cn._ang! - Math.PI / 2);\n }\n\n for (const n of m.Nodes) {\n if (!n.Parent) continue;\n const pn = n.Parent as Placed, cn = n as Placed;\n const mx = (pn._x! + cn._x!) / 2, my = (pn._y! + cn._y!) / 2;\n const ctrlX = mx + (this.CX - mx) * 0.16, ctrlY = my + (this.CY - my) * 0.16;\n const col = FLOW_COLORS[n.Type];\n const path = SvgEl('path', { d: `M${pn._x},${pn._y} Q${ctrlX},${ctrlY} ${cn._x},${cn._y}`, fill: 'none', stroke: col, 'stroke-width': 1.4, opacity: 0.12 }, edgeG) as SVGGraphicsElement;\n const part = SvgEl('circle', { r: 3.2, class: 'fhand-dot', opacity: 0 }, edgeG);\n this.edges.push({ path, part, node: n, len: (path as unknown as SVGPathElement).getTotalLength() });\n }\n\n for (const n of m.Nodes) {\n const cn = n as Placed;\n const rad = n.Depth === 0 ? 22 : Math.min(24, 9 + Math.pow(n.RealDur, 0.55) * 2.6);\n const col = FLOW_COLORS[n.Type];\n const grp = SvgEl('g', {}, nodeG);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n AppendTitle(grp, `${n.Name}`);\n const halo = SvgEl('circle', { cx: cn._x!, cy: cn._y!, r: rad + 7, fill: col, opacity: 0 }, grp);\n const ring = SvgEl('circle', { cx: cn._x!, cy: cn._y!, r: rad, fill: col, 'fill-opacity': 0.16, stroke: col, 'stroke-width': 1.6 }, grp);\n const icon = AppendIcon(grp, cn._x! - rad * 0.6, cn._y! - rad * 0.6, rad * 1.2, n.IconClass, n.LogoUrl, col);\n icon.setAttribute('opacity', '0');\n // angle each label along its radial spoke (flip on the left half so it stays upright)\n const dir = cn._ang! - Math.PI / 2;\n const lx = cn._x! + Math.cos(dir) * (rad + 8), ly = cn._y! + Math.sin(dir) * (rad + 8);\n const flip = Math.cos(dir) < 0;\n const deg = dir * 180 / Math.PI + (flip ? 180 : 0);\n const lab = n.Depth === 0\n ? SvgEl('text', { x: cn._x!, y: cn._y! + rad + 18, 'font-size': 13, 'font-weight': 700, 'text-anchor': 'middle', class: 'fhalo', opacity: 0, text: Clip(ShortLabel(n), 22) }, grp)\n : SvgEl('text', {\n x: lx, y: ly, 'font-size': 10.5, 'font-weight': 600, 'dominant-baseline': 'middle',\n 'text-anchor': flip ? 'end' : 'start', transform: `rotate(${deg} ${lx} ${ly})`,\n class: 'fhalo', opacity: 0, text: Clip(ShortLabel(n), 22)\n }, grp);\n grp.addEventListener('mouseenter', () => { this.hoveredId = n.Id; });\n grp.addEventListener('mouseleave', () => { if (this.hoveredId === n.Id) this.hoveredId = -1; });\n grp.addEventListener('click', () => { if (!this.pz?.moved) this.NodeSelected.emit(n); });\n this.stars.set(n.Id, { halo, ring, icon, lab, node: n, rad });\n }\n\n this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.constellation.v1');\n this.pz.Load(); this.pz.Attach();\n }\n\n private update(p: number, ts: number): void {\n this.stars.forEach(({ halo, ring, icon, lab, node, rad }) => {\n const started = p >= node.T0 || node.Depth === 0;\n const active = p >= node.T0 && p < node.T1;\n const hovered = this.hoveredId === node.Id;\n const selected = this.selectedId === node.Id;\n if (started) {\n const tw = 0.6 + 0.4 * Math.sin(ts / (420 + node.RealDur * 70));\n ring.setAttribute('fill-opacity', active || hovered || selected ? '0.32' : String(0.16 + 0.06 * tw));\n ring.setAttribute('class', selected ? 'glow2' : active ? 'glow' + Math.max(1, node.Heat) : hovered ? 'glow2' : 'glow1');\n ring.setAttribute('stroke-width', selected ? '3' : '1.6');\n icon.setAttribute('opacity', active || hovered || selected ? '1' : '0.8');\n halo.setAttribute('opacity', active ? String(0.16 + 0.12 * Math.sin(ts / 230)) : selected ? '0.16' : hovered ? '0.14' : '0');\n halo.setAttribute('r', String(rad + 7 + (active ? 4 * Math.abs(Math.sin(ts / 240)) : 0)));\n } else {\n ring.setAttribute('fill-opacity', '0.06'); ring.setAttribute('class', hovered ? 'glow2' : '');\n ring.setAttribute('stroke-width', '1.6');\n icon.setAttribute('opacity', hovered ? '0.7' : '0.25');\n halo.setAttribute('opacity', hovered ? '0.1' : '0');\n }\n const showLabel = node.Depth <= 1 || active || hovered || selected;\n lab.setAttribute('opacity', showLabel ? (active || hovered || selected ? '1' : node.Depth === 0 ? '1' : '0.62') : '0');\n });\n this.edges.forEach(({ path, part, node, len }) => {\n const flowing = p >= node.T0 && p < node.T1;\n const lit = p >= node.T0;\n path.setAttribute('opacity', lit ? (flowing ? '0.6' : '0.2') : '0.1');\n path.setAttribute('stroke-width', flowing ? '2.4' : '1.4');\n if (flowing) {\n const ph = (ts / 700) % 1;\n const pt = (path as unknown as SVGPathElement).getPointAtLength(ph * len);\n part.setAttribute('cx', String(pt.x)); part.setAttribute('cy', String(pt.y));\n part.setAttribute('opacity', '1'); part.setAttribute('class', 'glow2');\n (part as SVGElement & { style: CSSStyleDeclaration }).style.color = FLOW_COLORS[node.Type];\n } else {\n part.setAttribute('opacity', '0');\n }\n });\n }\n}\n"]}
@@ -9,7 +9,19 @@ import * as i0 from "@angular/core";
9
9
  * burn hotter.
10
10
  */
11
11
  export declare class FlameCascadeComponent implements OnDestroy {
12
- svgRef: ElementRef<SVGSVGElement>;
12
+ SvgRef: ElementRef<SVGSVGElement>;
13
+ /** @deprecated Use {@link SvgRef}. */
14
+ get svgRef(): ElementRef<SVGSVGElement>;
15
+ /** @deprecated Use {@link SvgRef}. */
16
+ set svgRef(value: ElementRef<SVGSVGElement>);
17
+ NodeSelected: EventEmitter<FlowNode>;
18
+ /**
19
+ * @deprecated Use {@link NodeSelected}.
20
+ *
21
+ * The same emitter under the old binding name, so a template still binding
22
+ * (nodeSelected) keeps working. Must stay AFTER NodeSelected: class fields
23
+ * initialise in order, and the other way round this captures undefined.
24
+ */
13
25
  nodeSelected: EventEmitter<FlowNode>;
14
26
  private static seq;
15
27
  private uid;
@@ -39,6 +51,6 @@ export declare class FlameCascadeComponent implements OnDestroy {
39
51
  private build;
40
52
  private update;
41
53
  static ɵfac: i0.ɵɵFactoryDeclaration<FlameCascadeComponent, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<FlameCascadeComponent, "mj-agent-flow-flame", never, { "Model": { "alias": "Model"; "required": false; }; }, { "nodeSelected": "nodeSelected"; }, never, never, false, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<FlameCascadeComponent, "mj-agent-flow-flame", never, { "Model": { "alias": "Model"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "nodeSelected": "nodeSelected"; }, never, never, false, never>;
43
55
  }
44
56
  //# sourceMappingURL=flame-cascade.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flame-cascade.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flame-cascade.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAa,SAAS,EAA8C,MAAM,eAAe,CAAC;AACrJ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA2C,MAAM,wBAAwB,CAAC;;AAYtG;;;;;;GAMG;AACH,qBAQa,qBAAsB,YAAW,SAAS;IACjB,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7D,YAAY,yBAAgC;IAEtD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAK;IACvB,OAAO,CAAC,GAAG,CAA2C;IAEtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAC,CAAoB;IAExB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpC,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAChB,WAAW,IAAI,IAAI;IAC1B,WAAW,IAAI,IAAI;IAEnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,KAAK,EAAE,GAA6C;IAE3D,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAwD;IAEvF,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1C,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,KAAK;IA8Eb,OAAO,CAAC,MAAM;yCA9HH,qBAAqB;2CAArB,qBAAqB;CAmJjC"}
1
+ {"version":3,"file":"flame-cascade.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flame-cascade.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAa,SAAS,EAA8C,MAAM,eAAe,CAAC;AACrJ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAA2C,MAAM,wBAAwB,CAAC;;AAYtG;;;;;;GAMG;AACH,qBAQa,qBAAsB,YAAW,SAAS;IACjB,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAEvE,sCAAsC;IACtC,IAAI,MAAM,IAAI,UAAU,CAAC,aAAa,CAAC,CAEtC;IACD,sCAAsC;IACtC,IAAI,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,EAE1C;IACS,YAAY,yBAAgC;IAEtD;;;;;;OAMG;IACO,YAAY,yBAAqB;IAE3C,OAAO,CAAC,MAAM,CAAC,GAAG,CAAK;IACvB,OAAO,CAAC,GAAG,CAA2C;IAEtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAC,CAAoB;IAExB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IACpC,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAChB,WAAW,IAAI,IAAI;IAC1B,WAAW,IAAI,IAAI;IAEnB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,KAAK,EAAE,GAA6C;IAE3D,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAwD;IAEvF,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM1C,OAAO,CAAC,KAAK;IAOb,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,KAAK;IA8Eb,OAAO,CAAC,MAAM;yCAhJH,qBAAqB;2CAArB,qBAAqB;CAqKjC"}
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
2
- import { FLOW_COLORS, shortLabel, formatDuration } from './agent-run-flow.model';
3
- import { svgEl, appendIcon, appendTitle } from './flow-svg.util';
2
+ import { FLOW_COLORS, ShortLabel, FormatDuration } from './agent-run-flow.model';
3
+ import { SvgEl, AppendIcon, AppendTitle } from './flow-svg.util';
4
4
  import { PanZoomController } from './pan-zoom';
5
5
  import * as i0 from "@angular/core";
6
6
  const _c0 = ["svg"];
@@ -13,7 +13,15 @@ const _c0 = ["svg"];
13
13
  */
14
14
  export class FlameCascadeComponent {
15
15
  constructor() {
16
- this.nodeSelected = new EventEmitter();
16
+ this.NodeSelected = new EventEmitter();
17
+ /**
18
+ * @deprecated Use {@link NodeSelected}.
19
+ *
20
+ * The same emitter under the old binding name, so a template still binding
21
+ * (nodeSelected) keeps working. Must stay AFTER NodeSelected: class fields
22
+ * initialise in order, and the other way round this captures undefined.
23
+ */
24
+ this.nodeSelected = this.NodeSelected;
17
25
  this.uid = 'flame' + (FlameCascadeComponent.seq++);
18
26
  this._model = null;
19
27
  this.built = false;
@@ -25,6 +33,14 @@ export class FlameCascadeComponent {
25
33
  this.PAD = 26;
26
34
  this.TOP = 44;
27
35
  }
36
+ /** @deprecated Use {@link SvgRef}. */
37
+ get svgRef() {
38
+ return this.SvgRef;
39
+ }
40
+ /** @deprecated Use {@link SvgRef}. */
41
+ set svgRef(value) {
42
+ this.SvgRef = value;
43
+ }
28
44
  static { this.seq = 0; }
29
45
  SetSelected(id) { this.selectedId = id ?? -1; }
30
46
  ZoomIn() { this.pz?.ZoomIn(); }
@@ -46,69 +62,69 @@ export class FlameCascadeComponent {
46
62
  clear() {
47
63
  this.pz?.Detach();
48
64
  this.pz = undefined;
49
- const svg = this.svgRef?.nativeElement;
65
+ const svg = this.SvgRef?.nativeElement;
50
66
  if (svg)
51
67
  while (svg.firstChild)
52
68
  svg.removeChild(svg.firstChild);
53
69
  this.cells.clear();
54
70
  }
55
71
  subtreeMaxDepth(n) {
56
- return n.children.length ? Math.max(...n.children.map(c => this.subtreeMaxDepth(c))) : n.depth;
72
+ return n.Children.length ? Math.max(...n.Children.map(c => this.subtreeMaxDepth(c))) : n.Depth;
57
73
  }
58
74
  build() {
59
- const svg = this.svgRef.nativeElement;
75
+ const svg = this.SvgRef.nativeElement;
60
76
  const m = this._model;
61
- const VH = this.TOP + (m.maxDepth + 1) * this.ROW + 26;
77
+ const VH = this.TOP + (m.MaxDepth + 1) * this.ROW + 26;
62
78
  svg.setAttribute('viewBox', `0 0 ${this.VW} ${VH}`);
63
- const defs = svgEl('defs', {}, svg);
64
- const main = svgEl('g', {}, svg);
65
- const bands = svgEl('g', {}, main);
66
- const grid = svgEl('g', {}, main);
67
- const g = svgEl('g', {}, main);
79
+ const defs = SvgEl('defs', {}, svg);
80
+ const main = SvgEl('g', {}, svg);
81
+ const bands = SvgEl('g', {}, main);
82
+ const grid = SvgEl('g', {}, main);
83
+ const g = SvgEl('g', {}, main);
68
84
  // time axis
69
85
  for (let i = 0; i <= 10; i++) {
70
86
  const x = this.PAD + this.IW * i / 10;
71
- svgEl('line', { x1: x, y1: this.TOP - 8, x2: x, y2: VH - 18, 'stroke-width': 1, class: 'fgrid' }, grid);
87
+ SvgEl('line', { x1: x, y1: this.TOP - 8, x2: x, y2: VH - 18, 'stroke-width': 1, class: 'fgrid' }, grid);
72
88
  if (i % 2 === 0)
73
- svgEl('text', { x, y: this.TOP - 16, 'font-size': 9.5, 'text-anchor': 'middle', class: 'ftxt-muted', text: i * 10 + '%' }, grid);
89
+ SvgEl('text', { x, y: this.TOP - 16, 'font-size': 9.5, 'text-anchor': 'middle', class: 'ftxt-muted', text: i * 10 + '%' }, grid);
74
90
  }
75
91
  // swimlane bands behind sub-agent / loop containers (nested grouping)
76
- for (const n of m.nodes) {
77
- if (n.children.length === 0 || n.depth === 0)
92
+ for (const n of m.Nodes) {
93
+ if (n.Children.length === 0 || n.Depth === 0)
78
94
  continue;
79
- const x = this.PAD + n.t0 * this.IW;
80
- const w = Math.max(2, (n.t1 - n.t0) * this.IW);
81
- const y = this.TOP + n.depth * this.ROW - 3;
82
- const h = (this.subtreeMaxDepth(n) - n.depth + 1) * this.ROW - this.GAP + 6;
83
- const band = svgEl('rect', { x: x - 3, y, width: w + 6, height: h, rx: 12, fill: FLOW_COLORS[n.type], opacity: 0.07 }, bands);
84
- band.setAttribute('stroke', FLOW_COLORS[n.type]);
95
+ const x = this.PAD + n.T0 * this.IW;
96
+ const w = Math.max(2, (n.T1 - n.T0) * this.IW);
97
+ const y = this.TOP + n.Depth * this.ROW - 3;
98
+ const h = (this.subtreeMaxDepth(n) - n.Depth + 1) * this.ROW - this.GAP + 6;
99
+ const band = SvgEl('rect', { x: x - 3, y, width: w + 6, height: h, rx: 12, fill: FLOW_COLORS[n.Type], opacity: 0.07 }, bands);
100
+ band.setAttribute('stroke', FLOW_COLORS[n.Type]);
85
101
  band.setAttribute('stroke-width', '1');
86
102
  band.setAttribute('stroke-opacity', '0.18');
87
103
  }
88
- for (const n of m.nodes) {
89
- const x = this.PAD + n.t0 * this.IW;
90
- const fw = Math.max(2, (n.t1 - n.t0) * this.IW);
91
- const y = this.TOP + n.depth * this.ROW;
104
+ for (const n of m.Nodes) {
105
+ const x = this.PAD + n.T0 * this.IW;
106
+ const fw = Math.max(2, (n.T1 - n.T0) * this.IW);
107
+ const y = this.TOP + n.Depth * this.ROW;
92
108
  const h = this.ROW - this.GAP;
93
- const col = FLOW_COLORS[n.type];
94
- const grp = svgEl('g', {}, g);
109
+ const col = FLOW_COLORS[n.Type];
110
+ const grp = SvgEl('g', {}, g);
95
111
  grp.style.color = col;
96
112
  grp.style.cursor = 'pointer';
97
- appendTitle(grp, `${n.name} · ${formatDuration(n.realDur)}`);
113
+ AppendTitle(grp, `${n.Name} · ${FormatDuration(n.RealDur)}`);
98
114
  // outline = always-visible structure; fill = animated progress overlay
99
- const outline = svgEl('rect', { x, y, width: fw, height: h, rx: 8, fill: col, 'fill-opacity': 0.14, stroke: col, 'stroke-width': 1.4, 'stroke-opacity': 0.7 }, grp);
100
- const fill = svgEl('rect', { x, y, width: 0, height: h, rx: 8, fill: col, opacity: 0 }, grp);
115
+ const outline = SvgEl('rect', { x, y, width: fw, height: h, rx: 8, fill: col, 'fill-opacity': 0.14, stroke: col, 'stroke-width': 1.4, 'stroke-opacity': 0.7 }, grp);
116
+ const fill = SvgEl('rect', { x, y, width: 0, height: h, rx: 8, fill: col, opacity: 0 }, grp);
101
117
  // label group, clipped to the bar so it never bleeds into neighbours
102
- const clipId = `${this.uid}-${n.id}`;
103
- const cp = svgEl('clipPath', { id: clipId }, defs);
104
- svgEl('rect', { x, y, width: fw, height: h, rx: 8 }, cp);
105
- const content = svgEl('g', { 'clip-path': `url(#${clipId})` }, grp);
118
+ const clipId = `${this.uid}-${n.Id}`;
119
+ const cp = SvgEl('clipPath', { id: clipId }, defs);
120
+ SvgEl('rect', { x, y, width: fw, height: h, rx: 8 }, cp);
121
+ const content = SvgEl('g', { 'clip-path': `url(#${clipId})` }, grp);
106
122
  const cy = y + h / 2;
107
- const name = shortLabel(n);
123
+ const name = ShortLabel(n);
108
124
  const showIcon = fw > 22;
109
125
  const iconRight = showIcon ? 30 : 9;
110
126
  if (showIcon)
111
- appendIcon(content, x + 7, cy - 9, 18, n.iconClass, n.logoUrl, col);
127
+ AppendIcon(content, x + 7, cy - 9, 18, n.IconClass, n.LogoUrl, col);
112
128
  // shrink the font until the (already abbreviated) label fits, before giving up
113
129
  let fontSize = 0;
114
130
  for (const fs of [12.5, 11.5, 10.5, 9.5, 8.5]) {
@@ -118,31 +134,31 @@ export class FlameCascadeComponent {
118
134
  }
119
135
  }
120
136
  if (fontSize > 0) {
121
- svgEl('text', { x: x + iconRight, y: cy + 1, 'font-size': fontSize, 'font-weight': 600, 'dominant-baseline': 'middle', class: 'ftxt-on', text: name }, content);
122
- if (n.realDur && iconRight + name.length * fontSize * 0.56 + 52 <= fw) {
123
- svgEl('text', { x: x + fw - 12, y: cy + 1, 'font-size': 10.5, 'text-anchor': 'end', 'dominant-baseline': 'middle', class: 'ftxt-on', opacity: 0.72, text: formatDuration(n.realDur) }, content);
137
+ SvgEl('text', { x: x + iconRight, y: cy + 1, 'font-size': fontSize, 'font-weight': 600, 'dominant-baseline': 'middle', class: 'ftxt-on', text: name }, content);
138
+ if (n.RealDur && iconRight + name.length * fontSize * 0.56 + 52 <= fw) {
139
+ SvgEl('text', { x: x + fw - 12, y: cy + 1, 'font-size': 10.5, 'text-anchor': 'end', 'dominant-baseline': 'middle', class: 'ftxt-on', opacity: 0.72, text: FormatDuration(n.RealDur) }, content);
124
140
  }
125
141
  }
126
142
  grp.addEventListener('click', () => { if (!this.pz?.moved)
127
- this.nodeSelected.emit(n); });
128
- this.cells.set(n.id, { outline, fill, x, fw, node: n });
143
+ this.NodeSelected.emit(n); });
144
+ this.cells.set(n.Id, { outline, fill, x, fw, node: n });
129
145
  }
130
- this.playhead = svgEl('line', { x1: this.PAD, y1: this.TOP - 8, x2: this.PAD, y2: VH - 16, 'stroke-width': 1.5, opacity: 0, class: 'fhand' }, g);
131
- this.playMark = svgEl('path', { d: `M${this.PAD - 5},${this.TOP - 14} L${this.PAD + 5},${this.TOP - 14} L${this.PAD},${this.TOP - 6} Z`, opacity: 0, class: 'fhand-dot' }, g);
146
+ this.playhead = SvgEl('line', { x1: this.PAD, y1: this.TOP - 8, x2: this.PAD, y2: VH - 16, 'stroke-width': 1.5, opacity: 0, class: 'fhand' }, g);
147
+ this.playMark = SvgEl('path', { d: `M${this.PAD - 5},${this.TOP - 14} L${this.PAD + 5},${this.TOP - 14} L${this.PAD},${this.TOP - 6} Z`, opacity: 0, class: 'fhand-dot' }, g);
132
148
  this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.flame.v1');
133
149
  this.pz.Load();
134
150
  this.pz.Attach();
135
151
  }
136
152
  update(p, ts) {
137
153
  this.cells.forEach(({ outline, fill, fw, node }) => {
138
- const started = p >= node.t0;
139
- const active = started && p < node.t1;
140
- const selected = node.id === this.selectedId;
141
- const cw = p >= node.t1 ? fw : started ? (p - node.t0) / (node.t1 - node.t0) * fw : 0;
154
+ const started = p >= node.T0;
155
+ const active = started && p < node.T1;
156
+ const selected = node.Id === this.selectedId;
157
+ const cw = p >= node.T1 ? fw : started ? (p - node.T0) / (node.T1 - node.T0) * fw : 0;
142
158
  fill.setAttribute('width', String(Math.max(0, cw)));
143
159
  const fillOp = active ? 0.92 + 0.08 * Math.sin(ts / 170) : started ? 0.6 : 0;
144
160
  fill.setAttribute('opacity', String(fillOp));
145
- outline.setAttribute('class', selected ? 'glow2' : active && node.heat ? 'glow' + node.heat : '');
161
+ outline.setAttribute('class', selected ? 'glow2' : active && node.Heat ? 'glow' + node.Heat : '');
146
162
  outline.setAttribute('stroke-width', selected ? '3' : '1.4');
147
163
  outline.setAttribute('stroke-opacity', selected || active ? '1' : started ? '0.85' : '0.55');
148
164
  });
@@ -159,8 +175,8 @@ export class FlameCascadeComponent {
159
175
  i0.ɵɵviewQuery(_c0, 7);
160
176
  } if (rf & 2) {
161
177
  let _t;
162
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.svgRef = _t.first);
163
- } }, inputs: { Model: "Model" }, outputs: { nodeSelected: "nodeSelected" }, standalone: false, decls: 2, vars: 0, consts: [["svg", ""], ["preserveAspectRatio", "xMinYMin meet", 1, "flow-svg"]], template: function FlameCascadeComponent_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.SvgRef = _t.first);
179
+ } }, inputs: { Model: "Model" }, outputs: { NodeSelected: "NodeSelected", nodeSelected: "nodeSelected" }, standalone: false, decls: 2, vars: 0, consts: [["svg", ""], ["preserveAspectRatio", "xMinYMin meet", 1, "flow-svg"]], template: function FlameCascadeComponent_Template(rf, ctx) { if (rf & 1) {
164
180
  i0.ɵɵnamespaceSVG();
165
181
  i0.ɵɵelement(0, "svg", 1, 0);
166
182
  } }, styles: ["/* Shared chrome for every flow renderer's <svg> host.\n These components use ViewEncapsulation.None so this CSS reaches SVG nodes\n created imperatively via createElementNS (which never receive Angular's\n emulated-encapsulation scoping attribute). Everything is namespaced under\n `.flow-svg` to avoid leaking into the rest of the app. */\n.flow-svg {\n width: 100%;\n height: 100%;\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.flow-svg text { fill: var(--mj-text-primary); }\n.flow-svg .ftxt-secondary { fill: var(--mj-text-secondary); }\n.flow-svg .ftxt-muted { fill: var(--mj-text-muted); }\n.flow-svg .ftxt-on { fill: var(--mj-text-inverse); }\n.flow-svg .fgrid { stroke: var(--mj-border-subtle); }\n.flow-svg .fhand { stroke: var(--mj-text-secondary); }\n.flow-svg .fhand-dot { fill: var(--mj-text-primary); }\n.flow-svg .fstar-bg { fill: var(--mj-text-muted); }\n/* outlined label for legibility over edges / busy fields */\n.flow-svg .fhalo { paint-order: stroke; stroke: var(--mj-bg-page); stroke-width: 3.5px; stroke-linejoin: round; }\n\n/* Heat / activity glow tiers \u2014 driven by `currentColor` (the node's category color). */\n.flow-svg .glow1 { filter: drop-shadow(0 0 4px currentColor); }\n.flow-svg .glow2 { filter: drop-shadow(0 0 9px currentColor); }\n.flow-svg .glow3 { filter: drop-shadow(0 0 16px currentColor); }\n"], encapsulation: 2, changeDetection: 0 }); }
@@ -168,9 +184,11 @@ export class FlameCascadeComponent {
168
184
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FlameCascadeComponent, [{
169
185
  type: Component,
170
186
  args: [{ standalone: false, selector: 'mj-agent-flow-flame', template: `<svg #svg class="flow-svg" preserveAspectRatio="xMinYMin meet"></svg>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: ["/* Shared chrome for every flow renderer's <svg> host.\n These components use ViewEncapsulation.None so this CSS reaches SVG nodes\n created imperatively via createElementNS (which never receive Angular's\n emulated-encapsulation scoping attribute). Everything is namespaced under\n `.flow-svg` to avoid leaking into the rest of the app. */\n.flow-svg {\n width: 100%;\n height: 100%;\n display: block;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n}\n\n.flow-svg text { fill: var(--mj-text-primary); }\n.flow-svg .ftxt-secondary { fill: var(--mj-text-secondary); }\n.flow-svg .ftxt-muted { fill: var(--mj-text-muted); }\n.flow-svg .ftxt-on { fill: var(--mj-text-inverse); }\n.flow-svg .fgrid { stroke: var(--mj-border-subtle); }\n.flow-svg .fhand { stroke: var(--mj-text-secondary); }\n.flow-svg .fhand-dot { fill: var(--mj-text-primary); }\n.flow-svg .fstar-bg { fill: var(--mj-text-muted); }\n/* outlined label for legibility over edges / busy fields */\n.flow-svg .fhalo { paint-order: stroke; stroke: var(--mj-bg-page); stroke-width: 3.5px; stroke-linejoin: round; }\n\n/* Heat / activity glow tiers \u2014 driven by `currentColor` (the node's category color). */\n.flow-svg .glow1 { filter: drop-shadow(0 0 4px currentColor); }\n.flow-svg .glow2 { filter: drop-shadow(0 0 9px currentColor); }\n.flow-svg .glow3 { filter: drop-shadow(0 0 16px currentColor); }\n"] }]
171
- }], null, { svgRef: [{
187
+ }], null, { SvgRef: [{
172
188
  type: ViewChild,
173
189
  args: ['svg', { static: true }]
190
+ }], NodeSelected: [{
191
+ type: Output
174
192
  }], nodeSelected: [{
175
193
  type: Output
176
194
  }], Model: [{