@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 +1 @@
1
- {"version":3,"file":"flame-cascade.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flame-cascade.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, formatDuration } from './agent-run-flow.model';\nimport { svgEl, clip, appendIcon, appendTitle } from './flow-svg.util';\nimport { PanZoomController } from './pan-zoom';\n\ninterface FlameCell {\n outline: SVGElement;\n fill: SVGElement;\n x: number;\n fw: number;\n node: FlowNode;\n}\n\n/**\n * Flame Cascade — a static icicle of the whole run that's always visible (depth =\n * hierarchy, x = order, bar width = compressed time). Translucent **swimlane bands**\n * sit behind each sub-agent/loop so you can see which steps belong to which. As the\n * clock plays, a fill sweeps each bar and a playhead crosses the chart; longer steps\n * burn hotter.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-flame',\n template: `<svg #svg class=\"flow-svg\" preserveAspectRatio=\"xMinYMin meet\"></svg>`,\n styleUrls: ['./flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlameCascadeComponent implements OnDestroy {\n @ViewChild('svg', { static: true }) svgRef!: ElementRef<SVGSVGElement>;\n @Output() nodeSelected = new EventEmitter<FlowNode>();\n\n private static seq = 0;\n private uid = 'flame' + (FlameCascadeComponent.seq++);\n\n private _model: FlowModel | null = null;\n private built = false;\n private cells = new Map<number, FlameCell>();\n private playhead?: SVGElement;\n private playMark?: SVGElement;\n private selectedId = -1;\n private pz?: PanZoomController;\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 private readonly VW = 1200;\n private readonly ROW = 46;\n private readonly GAP = 9;\n private readonly PAD = 26;\n private readonly TOP = 44;\n private get IW(): number { return this.VW - this.PAD * 2; }\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.cells.clear();\n }\n\n private subtreeMaxDepth(n: FlowNode): number {\n return n.children.length ? Math.max(...n.children.map(c => this.subtreeMaxDepth(c))) : n.depth;\n }\n\n private build(): void {\n const svg = this.svgRef.nativeElement;\n const m = this._model!;\n const VH = this.TOP + (m.maxDepth + 1) * this.ROW + 26;\n svg.setAttribute('viewBox', `0 0 ${this.VW} ${VH}`);\n const defs = svgEl('defs', {}, svg);\n const main = svgEl('g', {}, svg);\n const bands = svgEl('g', {}, main);\n const grid = svgEl('g', {}, main);\n const g = svgEl('g', {}, main);\n\n // time axis\n for (let i = 0; i <= 10; i++) {\n const x = this.PAD + this.IW * i / 10;\n svgEl('line', { x1: x, y1: this.TOP - 8, x2: x, y2: VH - 18, 'stroke-width': 1, class: 'fgrid' }, grid);\n if (i % 2 === 0) svgEl('text', { x, y: this.TOP - 16, 'font-size': 9.5, 'text-anchor': 'middle', class: 'ftxt-muted', text: i * 10 + '%' }, grid);\n }\n\n // swimlane bands behind sub-agent / loop containers (nested grouping)\n for (const n of m.nodes) {\n if (n.children.length === 0 || n.depth === 0) continue;\n const x = this.PAD + n.t0 * this.IW;\n const w = Math.max(2, (n.t1 - n.t0) * this.IW);\n const y = this.TOP + n.depth * this.ROW - 3;\n const h = (this.subtreeMaxDepth(n) - n.depth + 1) * this.ROW - this.GAP + 6;\n const band = svgEl('rect', { x: x - 3, y, width: w + 6, height: h, rx: 12, fill: FLOW_COLORS[n.type], opacity: 0.07 }, bands);\n band.setAttribute('stroke', FLOW_COLORS[n.type]);\n band.setAttribute('stroke-width', '1');\n band.setAttribute('stroke-opacity', '0.18');\n }\n\n for (const n of m.nodes) {\n const x = this.PAD + n.t0 * this.IW;\n const fw = Math.max(2, (n.t1 - n.t0) * this.IW);\n const y = this.TOP + n.depth * this.ROW;\n const h = this.ROW - this.GAP;\n const col = FLOW_COLORS[n.type];\n const grp = svgEl('g', {}, g);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n appendTitle(grp, `${n.name} · ${formatDuration(n.realDur)}`);\n\n // outline = always-visible structure; fill = animated progress overlay\n 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);\n const fill = svgEl('rect', { x, y, width: 0, height: h, rx: 8, fill: col, opacity: 0 }, grp);\n\n // label group, clipped to the bar so it never bleeds into neighbours\n const clipId = `${this.uid}-${n.id}`;\n const cp = svgEl('clipPath', { id: clipId }, defs);\n svgEl('rect', { x, y, width: fw, height: h, rx: 8 }, cp);\n const content = svgEl('g', { 'clip-path': `url(#${clipId})` }, grp);\n const cy = y + h / 2;\n const name = shortLabel(n);\n const showIcon = fw > 22;\n const iconRight = showIcon ? 30 : 9;\n if (showIcon) appendIcon(content, x + 7, cy - 9, 18, n.iconClass, n.logoUrl, col);\n // shrink the font until the (already abbreviated) label fits, before giving up\n let fontSize = 0;\n for (const fs of [12.5, 11.5, 10.5, 9.5, 8.5]) {\n if (iconRight + name.length * fs * 0.56 + 8 <= fw) { fontSize = fs; break; }\n }\n if (fontSize > 0) {\n svgEl('text', { x: x + iconRight, y: cy + 1, 'font-size': fontSize, 'font-weight': 600, 'dominant-baseline': 'middle', class: 'ftxt-on', text: name }, content);\n if (n.realDur && iconRight + name.length * fontSize * 0.56 + 52 <= fw) {\n 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);\n }\n }\n grp.addEventListener('click', () => { if (!this.pz?.moved) this.nodeSelected.emit(n); });\n this.cells.set(n.id, { outline, fill, x, fw, node: n });\n }\n\n 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);\n 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);\n\n this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.flame.v1');\n this.pz.Load(); this.pz.Attach();\n }\n\n private update(p: number, ts: number): void {\n this.cells.forEach(({ outline, fill, fw, node }) => {\n const started = p >= node.t0;\n const active = started && p < node.t1;\n const selected = node.id === this.selectedId;\n const cw = p >= node.t1 ? fw : started ? (p - node.t0) / (node.t1 - node.t0) * fw : 0;\n fill.setAttribute('width', String(Math.max(0, cw)));\n const fillOp = active ? 0.92 + 0.08 * Math.sin(ts / 170) : started ? 0.6 : 0;\n fill.setAttribute('opacity', String(fillOp));\n outline.setAttribute('class', selected ? 'glow2' : active && node.heat ? 'glow' + node.heat : '');\n outline.setAttribute('stroke-width', selected ? '3' : '1.4');\n outline.setAttribute('stroke-opacity', selected || active ? '1' : started ? '0.85' : '0.55');\n });\n const live = p > 0 && p < 1;\n const ph = this.PAD + p * this.IW;\n this.playhead?.setAttribute('x1', String(ph));\n this.playhead?.setAttribute('x2', String(ph));\n this.playhead?.setAttribute('opacity', live ? '0.8' : '0');\n this.playMark?.setAttribute('transform', `translate(${ph - this.PAD},0)`);\n this.playMark?.setAttribute('opacity', live ? '1' : '0');\n }\n}\n"]}
1
+ {"version":3,"file":"flame-cascade.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flame-cascade.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, FormatDuration } from './agent-run-flow.model';\nimport { SvgEl, Clip, AppendIcon, AppendTitle } from './flow-svg.util';\nimport { PanZoomController } from './pan-zoom';\n\ninterface FlameCell {\n outline: SVGElement;\n fill: SVGElement;\n x: number;\n fw: number;\n node: FlowNode;\n}\n\n/**\n * Flame Cascade — a static icicle of the whole run that's always visible (depth =\n * hierarchy, x = order, bar width = compressed time). Translucent **swimlane bands**\n * sit behind each sub-agent/loop so you can see which steps belong to which. As the\n * clock plays, a fill sweeps each bar and a playhead crosses the chart; longer steps\n * burn hotter.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-flame',\n template: `<svg #svg class=\"flow-svg\" preserveAspectRatio=\"xMinYMin meet\"></svg>`,\n styleUrls: ['./flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlameCascadeComponent implements OnDestroy {\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 static seq = 0;\n private uid = 'flame' + (FlameCascadeComponent.seq++);\n\n private _model: FlowModel | null = null;\n private built = false;\n private cells = new Map<number, FlameCell>();\n private playhead?: SVGElement;\n private playMark?: SVGElement;\n private selectedId = -1;\n private pz?: PanZoomController;\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 private readonly VW = 1200;\n private readonly ROW = 46;\n private readonly GAP = 9;\n private readonly PAD = 26;\n private readonly TOP = 44;\n private get IW(): number { return this.VW - this.PAD * 2; }\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.cells.clear();\n }\n\n private subtreeMaxDepth(n: FlowNode): number {\n return n.Children.length ? Math.max(...n.Children.map(c => this.subtreeMaxDepth(c))) : n.Depth;\n }\n\n private build(): void {\n const svg = this.SvgRef.nativeElement;\n const m = this._model!;\n const VH = this.TOP + (m.MaxDepth + 1) * this.ROW + 26;\n svg.setAttribute('viewBox', `0 0 ${this.VW} ${VH}`);\n const defs = SvgEl('defs', {}, svg);\n const main = SvgEl('g', {}, svg);\n const bands = SvgEl('g', {}, main);\n const grid = SvgEl('g', {}, main);\n const g = SvgEl('g', {}, main);\n\n // time axis\n for (let i = 0; i <= 10; i++) {\n const x = this.PAD + this.IW * i / 10;\n SvgEl('line', { x1: x, y1: this.TOP - 8, x2: x, y2: VH - 18, 'stroke-width': 1, class: 'fgrid' }, grid);\n if (i % 2 === 0) SvgEl('text', { x, y: this.TOP - 16, 'font-size': 9.5, 'text-anchor': 'middle', class: 'ftxt-muted', text: i * 10 + '%' }, grid);\n }\n\n // swimlane bands behind sub-agent / loop containers (nested grouping)\n for (const n of m.Nodes) {\n if (n.Children.length === 0 || n.Depth === 0) continue;\n const x = this.PAD + n.T0 * this.IW;\n const w = Math.max(2, (n.T1 - n.T0) * this.IW);\n const y = this.TOP + n.Depth * this.ROW - 3;\n const h = (this.subtreeMaxDepth(n) - n.Depth + 1) * this.ROW - this.GAP + 6;\n const band = SvgEl('rect', { x: x - 3, y, width: w + 6, height: h, rx: 12, fill: FLOW_COLORS[n.Type], opacity: 0.07 }, bands);\n band.setAttribute('stroke', FLOW_COLORS[n.Type]);\n band.setAttribute('stroke-width', '1');\n band.setAttribute('stroke-opacity', '0.18');\n }\n\n for (const n of m.Nodes) {\n const x = this.PAD + n.T0 * this.IW;\n const fw = Math.max(2, (n.T1 - n.T0) * this.IW);\n const y = this.TOP + n.Depth * this.ROW;\n const h = this.ROW - this.GAP;\n const col = FLOW_COLORS[n.Type];\n const grp = SvgEl('g', {}, g);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n AppendTitle(grp, `${n.Name} · ${FormatDuration(n.RealDur)}`);\n\n // outline = always-visible structure; fill = animated progress overlay\n 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);\n const fill = SvgEl('rect', { x, y, width: 0, height: h, rx: 8, fill: col, opacity: 0 }, grp);\n\n // label group, clipped to the bar so it never bleeds into neighbours\n const clipId = `${this.uid}-${n.Id}`;\n const cp = SvgEl('clipPath', { id: clipId }, defs);\n SvgEl('rect', { x, y, width: fw, height: h, rx: 8 }, cp);\n const content = SvgEl('g', { 'clip-path': `url(#${clipId})` }, grp);\n const cy = y + h / 2;\n const name = ShortLabel(n);\n const showIcon = fw > 22;\n const iconRight = showIcon ? 30 : 9;\n if (showIcon) AppendIcon(content, x + 7, cy - 9, 18, n.IconClass, n.LogoUrl, col);\n // shrink the font until the (already abbreviated) label fits, before giving up\n let fontSize = 0;\n for (const fs of [12.5, 11.5, 10.5, 9.5, 8.5]) {\n if (iconRight + name.length * fs * 0.56 + 8 <= fw) { fontSize = fs; break; }\n }\n if (fontSize > 0) {\n SvgEl('text', { x: x + iconRight, y: cy + 1, 'font-size': fontSize, 'font-weight': 600, 'dominant-baseline': 'middle', class: 'ftxt-on', text: name }, content);\n if (n.RealDur && iconRight + name.length * fontSize * 0.56 + 52 <= fw) {\n 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);\n }\n }\n grp.addEventListener('click', () => { if (!this.pz?.moved) this.NodeSelected.emit(n); });\n this.cells.set(n.Id, { outline, fill, x, fw, node: n });\n }\n\n 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);\n 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);\n\n this.pz = new PanZoomController(svg, main, 'mj.agentRunFlow.view.flame.v1');\n this.pz.Load(); this.pz.Attach();\n }\n\n private update(p: number, ts: number): void {\n this.cells.forEach(({ outline, fill, fw, node }) => {\n const started = p >= node.T0;\n const active = started && p < node.T1;\n const selected = node.Id === this.selectedId;\n const cw = p >= node.T1 ? fw : started ? (p - node.T0) / (node.T1 - node.T0) * fw : 0;\n fill.setAttribute('width', String(Math.max(0, cw)));\n const fillOp = active ? 0.92 + 0.08 * Math.sin(ts / 170) : started ? 0.6 : 0;\n fill.setAttribute('opacity', String(fillOp));\n outline.setAttribute('class', selected ? 'glow2' : active && node.Heat ? 'glow' + node.Heat : '');\n outline.setAttribute('stroke-width', selected ? '3' : '1.4');\n outline.setAttribute('stroke-opacity', selected || active ? '1' : started ? '0.85' : '0.55');\n });\n const live = p > 0 && p < 1;\n const ph = this.PAD + p * this.IW;\n this.playhead?.setAttribute('x1', String(ph));\n this.playhead?.setAttribute('x2', String(ph));\n this.playhead?.setAttribute('opacity', live ? '0.8' : '0');\n this.playMark?.setAttribute('transform', `translate(${ph - this.PAD},0)`);\n this.playMark?.setAttribute('opacity', live ? '1' : '0');\n }\n}\n"]}
@@ -1,12 +1,20 @@
1
+ export declare function SvgEl(tag: string, attrs: Record<string, string | number>, parent?: SVGElement): SVGElement;
2
+ /** @deprecated Use {@link SvgEl}. */
1
3
  export declare function svgEl(tag: string, attrs: Record<string, string | number>, parent?: SVGElement): SVGElement;
2
4
  /** Truncate a label to fit, with an ellipsis. */
5
+ export declare function Clip(text: string, max: number): string;
6
+ /** @deprecated Use {@link Clip}. */
3
7
  export declare function clip(text: string, max: number): string;
4
8
  /**
5
9
  * Append an icon centered in a `size`×`size` box at (x,y): an agent logo `<image>`
6
10
  * when `logoUrl` is set, otherwise a Font Awesome glyph via `<foreignObject>` (FA's
7
11
  * global stylesheet renders it; we just set colour + size).
8
12
  */
13
+ export declare function AppendIcon(parent: SVGElement, x: number, y: number, size: number, iconClass: string, logoUrl: string | null, color: string): SVGElement;
14
+ /** @deprecated Use {@link AppendIcon}. */
9
15
  export declare function appendIcon(parent: SVGElement, x: number, y: number, size: number, iconClass: string, logoUrl: string | null, color: string): SVGElement;
10
16
  /** Native hover tooltip on an SVG element (works without any JS). */
17
+ export declare function AppendTitle(parent: SVGElement, text: string): void;
18
+ /** @deprecated Use {@link AppendTitle}. */
11
19
  export declare function appendTitle(parent: SVGElement, text: string): void;
12
20
  //# sourceMappingURL=flow-svg.util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-svg.util.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flow-svg.util.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACtC,MAAM,CAAC,EAAE,UAAU,GAClB,UAAU,CAQZ;AAED,iDAAiD;AACjD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACtD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GACvD,UAAU,CAgBZ;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElE"}
1
+ {"version":3,"file":"flow-svg.util.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flow-svg.util.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACtC,MAAM,CAAC,EAAE,UAAU,GAClB,UAAU,CAQZ;AAED,qCAAqC;AACrC,wBAAgB,KAAK,CACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EACtC,MAAM,CAAC,EAAE,UAAU,GAClB,UAAU,CAEZ;AAED,iDAAiD;AACjD,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,oCAAoC;AACpC,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACtD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GACvD,UAAU,CAgBZ;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CACxB,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EACtD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GACvD,UAAU,CAEZ;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElE;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElE"}
@@ -1,6 +1,6 @@
1
1
  /** Tiny SVG element factory shared by all flow renderers. */
2
2
  const SVG_NS = 'http://www.w3.org/2000/svg';
3
- export function svgEl(tag, attrs, parent) {
3
+ export function SvgEl(tag, attrs, parent) {
4
4
  const e = document.createElementNS(SVG_NS, tag);
5
5
  for (const k in attrs) {
6
6
  if (k === 'text')
@@ -12,24 +12,32 @@ export function svgEl(tag, attrs, parent) {
12
12
  parent.appendChild(e);
13
13
  return e;
14
14
  }
15
+ /** @deprecated Use {@link SvgEl}. */
16
+ export function svgEl(tag, attrs, parent) {
17
+ return SvgEl(tag, attrs, parent);
18
+ }
15
19
  /** Truncate a label to fit, with an ellipsis. */
16
- export function clip(text, max) {
20
+ export function Clip(text, max) {
17
21
  return text.length <= max ? text : text.slice(0, max - 1) + '…';
18
22
  }
23
+ /** @deprecated Use {@link Clip}. */
24
+ export function clip(text, max) {
25
+ return Clip(text, max);
26
+ }
19
27
  const XHTML_NS = 'http://www.w3.org/1999/xhtml';
20
28
  /**
21
29
  * Append an icon centered in a `size`×`size` box at (x,y): an agent logo `<image>`
22
30
  * when `logoUrl` is set, otherwise a Font Awesome glyph via `<foreignObject>` (FA's
23
31
  * global stylesheet renders it; we just set colour + size).
24
32
  */
25
- export function appendIcon(parent, x, y, size, iconClass, logoUrl, color) {
33
+ export function AppendIcon(parent, x, y, size, iconClass, logoUrl, color) {
26
34
  if (logoUrl) {
27
- const img = svgEl('image', { x, y, width: size, height: size, preserveAspectRatio: 'xMidYMid slice' }, parent);
35
+ const img = SvgEl('image', { x, y, width: size, height: size, preserveAspectRatio: 'xMidYMid slice' }, parent);
28
36
  img.setAttribute('href', logoUrl);
29
37
  img.setAttribute('clip-path', `inset(0 round ${size / 2}px)`);
30
38
  return img;
31
39
  }
32
- const fo = svgEl('foreignObject', { x, y, width: size, height: size }, parent);
40
+ const fo = SvgEl('foreignObject', { x, y, width: size, height: size }, parent);
33
41
  const div = document.createElementNS(XHTML_NS, 'div');
34
42
  div.setAttribute('style', `width:${size}px;height:${size}px;display:flex;align-items:center;justify-content:center;color:${color}`);
35
43
  const i = document.createElementNS(XHTML_NS, 'i');
@@ -39,8 +47,16 @@ export function appendIcon(parent, x, y, size, iconClass, logoUrl, color) {
39
47
  fo.appendChild(div);
40
48
  return fo;
41
49
  }
50
+ /** @deprecated Use {@link AppendIcon}. */
51
+ export function appendIcon(parent, x, y, size, iconClass, logoUrl, color) {
52
+ return AppendIcon(parent, x, y, size, iconClass, logoUrl, color);
53
+ }
42
54
  /** Native hover tooltip on an SVG element (works without any JS). */
55
+ export function AppendTitle(parent, text) {
56
+ SvgEl('title', { text }, parent);
57
+ }
58
+ /** @deprecated Use {@link AppendTitle}. */
43
59
  export function appendTitle(parent, text) {
44
- svgEl('title', { text }, parent);
60
+ return AppendTitle(parent, text);
45
61
  }
46
62
  //# sourceMappingURL=flow-svg.util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"flow-svg.util.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flow-svg.util.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,MAAM,GAAG,4BAA4B,CAAC;AAE5C,MAAM,UAAU,KAAK,CACnB,GAAW,EACX,KAAsC,EACtC,MAAmB;IAEnB,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,MAAM;YAAE,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC9C,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM;QAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,GAAW;IAC5C,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAClE,CAAC;AAED,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EACtD,SAAiB,EAAE,OAAsB,EAAE,KAAa;IAExD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/G,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,iBAAiB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,IAAI,aAAa,IAAI,mEAAmE,KAAK,EAAE,CAAC,CAAC;IACpI,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChF,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,IAAY;IAC1D,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/** Tiny SVG element factory shared by all flow renderers. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function svgEl(\n tag: string,\n attrs: Record<string, string | number>,\n parent?: SVGElement\n): SVGElement {\n const e = document.createElementNS(SVG_NS, tag);\n for (const k in attrs) {\n if (k === 'text') e.textContent = String(attrs[k]);\n else e.setAttribute(k, String(attrs[k]));\n }\n if (parent) parent.appendChild(e);\n return e;\n}\n\n/** Truncate a label to fit, with an ellipsis. */\nexport function clip(text: string, max: number): string {\n return text.length <= max ? text : text.slice(0, max - 1) + '…';\n}\n\nconst XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n/**\n * Append an icon centered in a `size`×`size` box at (x,y): an agent logo `<image>`\n * when `logoUrl` is set, otherwise a Font Awesome glyph via `<foreignObject>` (FA's\n * global stylesheet renders it; we just set colour + size).\n */\nexport function appendIcon(\n parent: SVGElement, x: number, y: number, size: number,\n iconClass: string, logoUrl: string | null, color: string\n): SVGElement {\n if (logoUrl) {\n const img = svgEl('image', { x, y, width: size, height: size, preserveAspectRatio: 'xMidYMid slice' }, parent);\n img.setAttribute('href', logoUrl);\n img.setAttribute('clip-path', `inset(0 round ${size / 2}px)`);\n return img;\n }\n const fo = svgEl('foreignObject', { x, y, width: size, height: size }, parent);\n const div = document.createElementNS(XHTML_NS, 'div');\n div.setAttribute('style', `width:${size}px;height:${size}px;display:flex;align-items:center;justify-content:center;color:${color}`);\n const i = document.createElementNS(XHTML_NS, 'i');\n i.setAttribute('class', `fa-solid ${iconClass}`);\n i.setAttribute('style', `font-size:${Math.round(size * 0.82)}px;line-height:1`);\n div.appendChild(i);\n fo.appendChild(div);\n return fo;\n}\n\n/** Native hover tooltip on an SVG element (works without any JS). */\nexport function appendTitle(parent: SVGElement, text: string): void {\n svgEl('title', { text }, parent);\n}\n"]}
1
+ {"version":3,"file":"flow-svg.util.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flow-svg.util.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,MAAM,GAAG,4BAA4B,CAAC;AAE5C,MAAM,UAAU,KAAK,CACnB,GAAW,EACX,KAAsC,EACtC,MAAmB;IAEnB,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,MAAM;YAAE,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC9C,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,MAAM;QAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,KAAK,CACnB,GAAW,EACX,KAAsC,EACtC,MAAmB;IAEnB,OAAO,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,GAAW;IAC5C,OAAO,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAClE,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,GAAW;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEhD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,MAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EACtD,SAAiB,EAAE,OAAsB,EAAE,KAAa;IAExD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/G,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,iBAAiB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,GAAG,KAAK,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtD,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,IAAI,aAAa,IAAI,mEAAmE,KAAK,EAAE,CAAC,CAAC;IACpI,MAAM,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChF,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnB,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,UAAU,CACxB,MAAkB,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EACtD,SAAiB,EAAE,OAAsB,EAAE,KAAa;IAExD,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACnE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,IAAY;IAC1D,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,IAAY;IAC1D,OAAO,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC","sourcesContent":["/** Tiny SVG element factory shared by all flow renderers. */\nconst SVG_NS = 'http://www.w3.org/2000/svg';\n\nexport function SvgEl(\n tag: string,\n attrs: Record<string, string | number>,\n parent?: SVGElement\n): SVGElement {\n const e = document.createElementNS(SVG_NS, tag);\n for (const k in attrs) {\n if (k === 'text') e.textContent = String(attrs[k]);\n else e.setAttribute(k, String(attrs[k]));\n }\n if (parent) parent.appendChild(e);\n return e;\n}\n\n/** @deprecated Use {@link SvgEl}. */\nexport function svgEl(\n tag: string,\n attrs: Record<string, string | number>,\n parent?: SVGElement\n): SVGElement {\n return SvgEl(tag, attrs, parent);\n}\n\n/** Truncate a label to fit, with an ellipsis. */\nexport function Clip(text: string, max: number): string {\n return text.length <= max ? text : text.slice(0, max - 1) + '…';\n}\n\n/** @deprecated Use {@link Clip}. */\nexport function clip(text: string, max: number): string {\n return Clip(text, max);\n}\n\nconst XHTML_NS = 'http://www.w3.org/1999/xhtml';\n\n/**\n * Append an icon centered in a `size`×`size` box at (x,y): an agent logo `<image>`\n * when `logoUrl` is set, otherwise a Font Awesome glyph via `<foreignObject>` (FA's\n * global stylesheet renders it; we just set colour + size).\n */\nexport function AppendIcon(\n parent: SVGElement, x: number, y: number, size: number,\n iconClass: string, logoUrl: string | null, color: string\n): SVGElement {\n if (logoUrl) {\n const img = SvgEl('image', { x, y, width: size, height: size, preserveAspectRatio: 'xMidYMid slice' }, parent);\n img.setAttribute('href', logoUrl);\n img.setAttribute('clip-path', `inset(0 round ${size / 2}px)`);\n return img;\n }\n const fo = SvgEl('foreignObject', { x, y, width: size, height: size }, parent);\n const div = document.createElementNS(XHTML_NS, 'div');\n div.setAttribute('style', `width:${size}px;height:${size}px;display:flex;align-items:center;justify-content:center;color:${color}`);\n const i = document.createElementNS(XHTML_NS, 'i');\n i.setAttribute('class', `fa-solid ${iconClass}`);\n i.setAttribute('style', `font-size:${Math.round(size * 0.82)}px;line-height:1`);\n div.appendChild(i);\n fo.appendChild(div);\n return fo;\n}\n\n/** @deprecated Use {@link AppendIcon}. */\nexport function appendIcon(\n parent: SVGElement, x: number, y: number, size: number,\n iconClass: string, logoUrl: string | null, color: string\n): SVGElement {\n return AppendIcon(parent, x, y, size, iconClass, logoUrl, color);\n}\n\n/** Native hover tooltip on an SVG element (works without any JS). */\nexport function AppendTitle(parent: SVGElement, text: string): void {\n SvgEl('title', { text }, parent);\n}\n\n/** @deprecated Use {@link AppendTitle}. */\nexport function appendTitle(parent: SVGElement, text: string): void {\n return AppendTitle(parent, text);\n}\n"]}
@@ -9,8 +9,28 @@ import * as i0 from "@angular/core";
9
9
  * renderers, so palette, hierarchy and durations stay consistent.
10
10
  */
11
11
  export declare class FlowchartComponent 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>;
26
+ SelectionCleared: EventEmitter<void>;
27
+ /**
28
+ * @deprecated Use {@link SelectionCleared}.
29
+ *
30
+ * The same emitter under the old binding name, so a template still binding
31
+ * (selectionCleared) keeps working. Must stay AFTER SelectionCleared: class fields
32
+ * initialise in order, and the other way round this captures undefined.
33
+ */
14
34
  selectionCleared: EventEmitter<void>;
15
35
  private _model;
16
36
  private built;
@@ -49,6 +69,8 @@ export declare class FlowchartComponent implements OnDestroy {
49
69
  private fitToView;
50
70
  zoomIn(): void;
51
71
  zoomOut(): void;
72
+ ResetView(): void;
73
+ /** @deprecated Use {@link ResetView}. */
52
74
  resetView(): void;
53
75
  ZoomIn(): void;
54
76
  ZoomOut(): void;
@@ -59,6 +81,6 @@ export declare class FlowchartComponent implements OnDestroy {
59
81
  Deselect(): void;
60
82
  private paintSelection;
61
83
  static ɵfac: i0.ɵɵFactoryDeclaration<FlowchartComponent, never>;
62
- static ɵcmp: i0.ɵɵComponentDeclaration<FlowchartComponent, "mj-agent-flow-flowchart", never, { "Model": { "alias": "Model"; "required": false; }; }, { "nodeSelected": "nodeSelected"; "selectionCleared": "selectionCleared"; }, never, never, false, never>;
84
+ static ɵcmp: i0.ɵɵComponentDeclaration<FlowchartComponent, "mj-agent-flow-flowchart", never, { "Model": { "alias": "Model"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "nodeSelected": "nodeSelected"; "SelectionCleared": "SelectionCleared"; "selectionCleared": "selectionCleared"; }, never, never, false, never>;
63
85
  }
64
86
  //# sourceMappingURL=flowchart.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flowchart.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,UAAU,EAAiB,YAAY,EACN,SAAS,EACtD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAuD,MAAM,wBAAwB,CAAC;;AAKlH;;;;;;GAMG;AACH,qBAQa,kBAAmB,YAAW,SAAS;IACd,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC7D,YAAY,yBAAgC;IAC5C,gBAAgB,qBAA4B;IAEtD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAE3B,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAgC;IAE7C,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAsG;IAErI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAK5C,WAAW,IAAI,IAAI;IAEnB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAwElB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,OAAO,CAIb;IACF,OAAO,CAAC,MAAM,CAAsJ;IACpK,OAAO,CAAC,SAAS,CAAoF;IACrG,OAAO,CAAC,MAAM,CAMZ;IACF,OAAO,CAAC,IAAI,CAGV;IAEF,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,SAAS;IAUV,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,SAAS,IAAI,IAAI;IAGjB,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;IAOhB,2FAA2F;IACpF,QAAQ,IAAI,IAAI;IAKvB,OAAO,CAAC,cAAc;yCAtNX,kBAAkB;2CAAlB,kBAAkB;CA6N9B"}
1
+ {"version":3,"file":"flowchart.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,UAAU,EAAiB,YAAY,EACN,SAAS,EACtD,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAuD,MAAM,wBAAwB,CAAC;;AAKlH;;;;;;GAMG;AACH,qBAQa,kBAAmB,YAAW,SAAS;IACd,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;IACjC,gBAAgB,qBAA4B;IAEtD;;;;;;OAMG;IACO,gBAAgB,qBAAyB;IAEnD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,SAAS,CAAqB;IAEtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAE3B,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAgC;IAE7C,IAAa,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAsG;IAErI,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAK5C,WAAW,IAAI,IAAI;IAEnB,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,UAAU;IAwElB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,OAAO,CAIb;IACF,OAAO,CAAC,MAAM,CAAsJ;IACpK,OAAO,CAAC,SAAS,CAAoF;IACrG,OAAO,CAAC,MAAM,CAMZ;IACF,OAAO,CAAC,IAAI,CAGV;IAEF,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,SAAS;IAUV,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,SAAS,IAAI,IAAI;IAExB,yCAAyC;IAClC,SAAS,IAAI,IAAI;IAKjB,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,QAAQ,IAAI,IAAI;IAIvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;IAOhB,2FAA2F;IACpF,QAAQ,IAAI,IAAI;IAKvB,OAAO,CAAC,cAAc;yCAtPX,kBAAkB;2CAAlB,kBAAkB;CA6P9B"}
@@ -1,6 +1,6 @@
1
1
  import { Component, Input, Output, EventEmitter, ViewChild, ChangeDetectionStrategy, ViewEncapsulation } from '@angular/core';
2
- import { FLOW_COLORS, FLOW_LABEL, shortLabel, formatDuration } from './agent-run-flow.model';
3
- import { svgEl, clip, appendIcon, appendTitle } from './flow-svg.util';
2
+ import { FLOW_COLORS, FLOW_LABEL, ShortLabel, FormatDuration } from './agent-run-flow.model';
3
+ import { SvgEl, Clip, AppendIcon, AppendTitle } from './flow-svg.util';
4
4
  import * as i0 from "@angular/core";
5
5
  const _c0 = ["svg"];
6
6
  /**
@@ -12,8 +12,24 @@ const _c0 = ["svg"];
12
12
  */
13
13
  export class FlowchartComponent {
14
14
  constructor() {
15
- this.nodeSelected = new EventEmitter();
16
- this.selectionCleared = 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;
24
+ this.SelectionCleared = new EventEmitter();
25
+ /**
26
+ * @deprecated Use {@link SelectionCleared}.
27
+ *
28
+ * The same emitter under the old binding name, so a template still binding
29
+ * (selectionCleared) keeps working. Must stay AFTER SelectionCleared: class fields
30
+ * initialise in order, and the other way round this captures undefined.
31
+ */
32
+ this.selectionCleared = this.SelectionCleared;
17
33
  this._model = null;
18
34
  this.built = false;
19
35
  this.listening = false;
@@ -33,7 +49,7 @@ export class FlowchartComponent {
33
49
  /* ------------------------------ pan / zoom ------------------------------- */
34
50
  this.onWheel = (e) => {
35
51
  e.preventDefault();
36
- const r = this.svgRef.nativeElement.getBoundingClientRect();
52
+ const r = this.SvgRef.nativeElement.getBoundingClientRect();
37
53
  this.zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY > 0 ? 0.9 : 1.1);
38
54
  };
39
55
  this.onDown = () => { this.panning = true; this.moved = false; this.suppressBg = false; this.start = { x: 0, y: 0, tx: this.view.tx, ty: this.view.ty }; };
@@ -55,6 +71,14 @@ export class FlowchartComponent {
55
71
  this.suppressBg = false;
56
72
  };
57
73
  }
74
+ /** @deprecated Use {@link SvgRef}. */
75
+ get svgRef() {
76
+ return this.SvgRef;
77
+ }
78
+ /** @deprecated Use {@link SvgRef}. */
79
+ set svgRef(value) {
80
+ this.SvgRef = value;
81
+ }
58
82
  set Model(m) { this._model = m; this.built = false; this.collapsed.clear(); this.selectedId = -1; this.clear(); }
59
83
  Render(_p, _ts) {
60
84
  if (!this._model)
@@ -66,7 +90,7 @@ export class FlowchartComponent {
66
90
  }
67
91
  ngOnDestroy() { this.detachListeners(); }
68
92
  clear() {
69
- const svg = this.svgRef?.nativeElement;
93
+ const svg = this.SvgRef?.nativeElement;
70
94
  if (svg)
71
95
  while (svg.firstChild)
72
96
  svg.removeChild(svg.firstChild);
@@ -75,59 +99,59 @@ export class FlowchartComponent {
75
99
  /* ------------------------------ scene build ------------------------------ */
76
100
  visibleNodes() {
77
101
  const out = [];
78
- const walk = (n) => { out.push(n); if (!this.collapsed.has(n.id))
79
- n.children.forEach(walk); };
80
- walk(this._model.root);
102
+ const walk = (n) => { out.push(n); if (!this.collapsed.has(n.Id))
103
+ n.Children.forEach(walk); };
104
+ walk(this._model.Root);
81
105
  return out;
82
106
  }
83
107
  descendantCount(n) {
84
- return n.children.reduce((s, c) => s + 1 + this.descendantCount(c), 0);
108
+ return n.Children.reduce((s, c) => s + 1 + this.descendantCount(c), 0);
85
109
  }
86
110
  buildScene(fit) {
87
111
  this.clear();
88
- const svg = this.svgRef.nativeElement;
112
+ const svg = this.SvgRef.nativeElement;
89
113
  const ordered = this.visibleNodes();
90
114
  const rowY = (i) => i * (this.NODE_H + this.VGAP);
91
- this.mainG = svgEl('g', {}, svg);
115
+ this.mainG = SvgEl('g', {}, svg);
92
116
  const main = this.mainG;
93
- const edges = svgEl('g', {}, main);
94
- const nodesG = svgEl('g', {}, main);
117
+ const edges = SvgEl('g', {}, main);
118
+ const nodesG = SvgEl('g', {}, main);
95
119
  const pos = new Map();
96
- ordered.forEach((n, i) => pos.set(n.id, { x: this.PADX + n.depth * this.INDENT, y: rowY(i) }));
120
+ ordered.forEach((n, i) => pos.set(n.Id, { x: this.PADX + n.Depth * this.INDENT, y: rowY(i) }));
97
121
  // elbow connectors to parent (file-tree style)
98
122
  for (const n of ordered) {
99
- if (!n.parent || !pos.has(n.parent.id))
123
+ if (!n.Parent || !pos.has(n.Parent.Id))
100
124
  continue;
101
- const c = pos.get(n.id), p = pos.get(n.parent.id);
125
+ const c = pos.get(n.Id), p = pos.get(n.Parent.Id);
102
126
  const spineX = p.x + 16, midY = c.y + this.NODE_H / 2;
103
- svgEl('path', { d: `M${spineX},${p.y + this.NODE_H} L${spineX},${midY} L${c.x},${midY}`, fill: 'none', stroke: 'var(--mj-border-strong)', 'stroke-width': 1.5 }, edges);
127
+ SvgEl('path', { d: `M${spineX},${p.y + this.NODE_H} L${spineX},${midY} L${c.x},${midY}`, fill: 'none', stroke: 'var(--mj-border-strong)', 'stroke-width': 1.5 }, edges);
104
128
  }
105
129
  for (const n of ordered) {
106
- const { x, y } = pos.get(n.id);
107
- const col = FLOW_COLORS[n.type];
108
- const isContainer = n.children.length > 0;
109
- const isCollapsed = this.collapsed.has(n.id);
110
- const grp = svgEl('g', {}, nodesG);
130
+ const { x, y } = pos.get(n.Id);
131
+ const col = FLOW_COLORS[n.Type];
132
+ const isContainer = n.Children.length > 0;
133
+ const isCollapsed = this.collapsed.has(n.Id);
134
+ const grp = SvgEl('g', {}, nodesG);
111
135
  grp.style.color = col;
112
- const body = svgEl('g', {}, grp);
136
+ const body = SvgEl('g', {}, grp);
113
137
  body.style.cursor = 'pointer';
114
- const sel = n.id === this.selectedId;
115
- const rect = svgEl('rect', {
138
+ const sel = n.Id === this.selectedId;
139
+ const rect = SvgEl('rect', {
116
140
  x, y, width: this.NODE_W, height: this.NODE_H, rx: 12,
117
141
  fill: sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)',
118
142
  stroke: col, 'stroke-width': sel ? 3 : isContainer ? 2 : 1.4, opacity: 0.98
119
143
  }, body);
120
- if (n.heat >= 2)
121
- rect.setAttribute('class', 'glow' + n.heat);
122
- svgEl('rect', { x, y, width: 5, height: this.NODE_H, rx: 2.5, fill: col }, body);
123
- appendTitle(body, `${n.name} · ${formatDuration(n.realDur)}`);
124
- appendIcon(body, x + 14, y + this.NODE_H / 2 - 11, 22, n.iconClass, n.logoUrl, col);
125
- svgEl('text', { x: x + 46, y: y + 22, 'font-size': 13, 'font-weight': 600, 'dominant-baseline': 'middle', text: clip(shortLabel(n), 26) }, body);
126
- const baseSub = n.model ? `${FLOW_LABEL[n.type]} · ${n.model}` : FLOW_LABEL[n.type];
127
- const sub = isContainer && isCollapsed ? `${FLOW_LABEL[n.type]} · ${this.descendantCount(n)} hidden` : baseSub;
128
- svgEl('text', { x: x + 46, y: y + 41, 'font-size': 10.5, class: 'ftxt-muted', text: clip(sub, 32) }, body);
129
- if (n.realDur) {
130
- svgEl('text', { x: x + this.NODE_W - 14, y: y + this.NODE_H / 2, 'font-size': 11, 'font-weight': 600, 'text-anchor': 'end', 'dominant-baseline': 'middle', class: 'ftxt-secondary', text: formatDuration(n.realDur) }, body);
144
+ if (n.Heat >= 2)
145
+ rect.setAttribute('class', 'glow' + n.Heat);
146
+ SvgEl('rect', { x, y, width: 5, height: this.NODE_H, rx: 2.5, fill: col }, body);
147
+ AppendTitle(body, `${n.Name} · ${FormatDuration(n.RealDur)}`);
148
+ AppendIcon(body, x + 14, y + this.NODE_H / 2 - 11, 22, n.IconClass, n.LogoUrl, col);
149
+ SvgEl('text', { x: x + 46, y: y + 22, 'font-size': 13, 'font-weight': 600, 'dominant-baseline': 'middle', text: Clip(ShortLabel(n), 26) }, body);
150
+ const baseSub = n.Model ? `${FLOW_LABEL[n.Type]} · ${n.Model}` : FLOW_LABEL[n.Type];
151
+ const sub = isContainer && isCollapsed ? `${FLOW_LABEL[n.Type]} · ${this.descendantCount(n)} hidden` : baseSub;
152
+ SvgEl('text', { x: x + 46, y: y + 41, 'font-size': 10.5, class: 'ftxt-muted', text: Clip(sub, 32) }, body);
153
+ if (n.RealDur) {
154
+ SvgEl('text', { x: x + this.NODE_W - 14, y: y + this.NODE_H / 2, 'font-size': 11, 'font-weight': 600, 'text-anchor': 'end', 'dominant-baseline': 'middle', class: 'ftxt-secondary', text: FormatDuration(n.RealDur) }, body);
131
155
  }
132
156
  body.addEventListener('mouseup', () => { if (!this.moved) {
133
157
  this.suppressBg = true;
@@ -136,19 +160,19 @@ export class FlowchartComponent {
136
160
  // collapse / expand disclosure — in the LEFT gutter, tree convention
137
161
  if (isContainer) {
138
162
  const gx = x - 15, gy = y + this.NODE_H / 2;
139
- const tg = svgEl('g', {}, grp);
163
+ const tg = SvgEl('g', {}, grp);
140
164
  tg.style.cursor = 'pointer';
141
- svgEl('circle', { cx: gx, cy: gy, r: 9, fill: 'transparent' }, tg); // hit target
165
+ SvgEl('circle', { cx: gx, cy: gy, r: 9, fill: 'transparent' }, tg); // hit target
142
166
  const tri = isCollapsed
143
167
  ? `M${gx - 3},${gy - 5} L${gx + 4},${gy} L${gx - 3},${gy + 5} Z`
144
168
  : `M${gx - 5},${gy - 3} L${gx + 5},${gy - 3} L${gx},${gy + 4} Z`;
145
- svgEl('path', { d: tri, fill: col }, tg);
169
+ SvgEl('path', { d: tri, fill: col }, tg);
146
170
  tg.addEventListener('mouseup', () => { if (!this.moved) {
147
171
  this.suppressBg = true;
148
172
  this.toggleCollapse(n);
149
173
  } });
150
174
  }
151
- this.boxes.set(n.id, { rect, node: n });
175
+ this.boxes.set(n.Id, { rect, node: n });
152
176
  }
153
177
  if (!this.listening) {
154
178
  this.attachListeners();
@@ -160,21 +184,21 @@ export class FlowchartComponent {
160
184
  this.applyView();
161
185
  }
162
186
  toggleCollapse(n) {
163
- if (this.collapsed.has(n.id))
164
- this.collapsed.delete(n.id);
187
+ if (this.collapsed.has(n.Id))
188
+ this.collapsed.delete(n.Id);
165
189
  else
166
- this.collapsed.add(n.id);
190
+ this.collapsed.add(n.Id);
167
191
  this.buildScene(false);
168
192
  }
169
193
  attachListeners() {
170
- const svg = this.svgRef.nativeElement;
194
+ const svg = this.SvgRef.nativeElement;
171
195
  svg.addEventListener('wheel', this.onWheel, { passive: false });
172
196
  svg.addEventListener('mousedown', (e) => { this.onDown(); this.onDownPos(e); });
173
197
  window.addEventListener('mousemove', this.onMove);
174
198
  window.addEventListener('mouseup', this.onUp);
175
199
  }
176
200
  detachListeners() {
177
- const svg = this.svgRef?.nativeElement;
201
+ const svg = this.SvgRef?.nativeElement;
178
202
  svg?.removeEventListener('wheel', this.onWheel);
179
203
  window.removeEventListener('mousemove', this.onMove);
180
204
  window.removeEventListener('mouseup', this.onUp);
@@ -190,7 +214,7 @@ export class FlowchartComponent {
190
214
  this.applyView();
191
215
  }
192
216
  fitToView() {
193
- const svg = this.svgRef.nativeElement;
217
+ const svg = this.SvgRef.nativeElement;
194
218
  if (!this.mainG)
195
219
  return;
196
220
  const bb = this.mainG.getBBox();
@@ -199,29 +223,33 @@ export class FlowchartComponent {
199
223
  this.view = { s, tx: (vw - bb.width * s) / 2 - bb.x * s, ty: 28 - bb.y * s };
200
224
  this.applyView();
201
225
  }
202
- zoomIn() { const svg = this.svgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1.2); }
203
- zoomOut() { const svg = this.svgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1 / 1.2); }
204
- resetView() { this.fitToView(); }
226
+ zoomIn() { const svg = this.SvgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1.2); } // case-violation-ok-legacy-back-compat: the PascalCase name is already taken in this scope
227
+ zoomOut() { const svg = this.SvgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1 / 1.2); } // case-violation-ok-legacy-back-compat: the PascalCase name is already taken in this scope
228
+ ResetView() { this.fitToView(); }
229
+ /** @deprecated Use {@link ResetView}. */
230
+ resetView() {
231
+ return this.ResetView();
232
+ }
205
233
  // unified interface used by the container's shared zoom toolbar
206
234
  ZoomIn() { this.zoomIn(); }
207
235
  ZoomOut() { this.zoomOut(); }
208
236
  FitReset() { this.fitToView(); }
209
237
  /* ------------------------------- selection ------------------------------ */
210
238
  onNodeClick(n) {
211
- if (this.selectedId === n.id) {
239
+ if (this.selectedId === n.Id) {
212
240
  this.deselect();
213
241
  return;
214
242
  }
215
- this.selectedId = n.id;
243
+ this.selectedId = n.Id;
216
244
  this.paintSelection();
217
- this.nodeSelected.emit(n);
245
+ this.NodeSelected.emit(n);
218
246
  }
219
247
  deselect() {
220
248
  if (this.selectedId === -1)
221
249
  return;
222
250
  this.selectedId = -1;
223
251
  this.paintSelection();
224
- this.selectionCleared.emit();
252
+ this.SelectionCleared.emit();
225
253
  }
226
254
  /** External deselect (e.g. detail panel closed) — clears highlight without re-emitting. */
227
255
  Deselect() {
@@ -232,8 +260,8 @@ export class FlowchartComponent {
232
260
  }
233
261
  paintSelection() {
234
262
  this.boxes.forEach(({ rect, node }) => {
235
- const sel = node.id === this.selectedId;
236
- rect.setAttribute('stroke-width', sel ? '3' : node.children.length ? '2' : '1.4');
263
+ const sel = node.Id === this.selectedId;
264
+ rect.setAttribute('stroke-width', sel ? '3' : node.Children.length ? '2' : '1.4');
237
265
  rect.setAttribute('fill', sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)');
238
266
  });
239
267
  }
@@ -242,8 +270,8 @@ export class FlowchartComponent {
242
270
  i0.ɵɵviewQuery(_c0, 7);
243
271
  } if (rf & 2) {
244
272
  let _t;
245
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.svgRef = _t.first);
246
- } }, inputs: { Model: "Model" }, outputs: { nodeSelected: "nodeSelected", selectionCleared: "selectionCleared" }, standalone: false, decls: 3, vars: 0, consts: [["svg", ""], [1, "fc-wrap"], [1, "flow-svg"]], template: function FlowchartComponent_Template(rf, ctx) { if (rf & 1) {
273
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.SvgRef = _t.first);
274
+ } }, inputs: { Model: "Model" }, outputs: { NodeSelected: "NodeSelected", nodeSelected: "nodeSelected", SelectionCleared: "SelectionCleared", selectionCleared: "selectionCleared" }, standalone: false, decls: 3, vars: 0, consts: [["svg", ""], [1, "fc-wrap"], [1, "flow-svg"]], template: function FlowchartComponent_Template(rf, ctx) { if (rf & 1) {
247
275
  i0.ɵɵelementStart(0, "div", 1);
248
276
  i0.ɵɵnamespaceSVG();
249
277
  i0.ɵɵelement(1, "svg", 2, 0);
@@ -253,11 +281,15 @@ export class FlowchartComponent {
253
281
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FlowchartComponent, [{
254
282
  type: Component,
255
283
  args: [{ standalone: false, selector: 'mj-agent-flow-flowchart', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fc-wrap\">\n <svg #svg class=\"flow-svg\"></svg>\n</div>\n", styles: ["/* ViewEncapsulation.None \u2014 namespaced under .fc-* to avoid leakage. */\nmj-agent-flow-flowchart { display: block; width: 100%; height: 100%; }\n\n.fc-wrap { position: relative; width: 100%; height: 100%; }\n\n.fc-toolbar {\n position: absolute;\n top: 12px;\n right: 14px;\n display: flex;\n gap: 6px;\n z-index: 3;\n}\n.fc-btn {\n width: 34px;\n height: 34px;\n border-radius: 9px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: grid;\n place-items: center;\n font-size: 13px;\n}\n.fc-btn:hover { color: var(--mj-text-primary); border-color: var(--mj-brand-primary); }\n\n.fc-wrap .flow-svg { cursor: grab; }\n.fc-wrap .flow-svg:active { cursor: grabbing; }\n", "/* 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"] }]
256
- }], null, { svgRef: [{
284
+ }], null, { SvgRef: [{
257
285
  type: ViewChild,
258
286
  args: ['svg', { static: true }]
287
+ }], NodeSelected: [{
288
+ type: Output
259
289
  }], nodeSelected: [{
260
290
  type: Output
291
+ }], SelectionCleared: [{
292
+ type: Output
261
293
  }], selectionCleared: [{
262
294
  type: Output
263
295
  }], Model: [{