@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.d.ts +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js +2 -2
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-overview.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +90 -16
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +218 -70
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts +1 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-form-tabs.js +2 -0
- package/dist/lib/custom/AIAgents/agent-form-tabs.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +80 -16
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +146 -46
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +329 -27
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1322 -783
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +76 -0
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js +77 -33
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +69 -15
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +182 -74
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +105 -25
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +272 -112
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +32 -6
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +71 -19
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +10 -0
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +27 -7
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -15
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +152 -52
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +81 -15
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +145 -45
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +71 -17
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +175 -67
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +173 -27
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +385 -93
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts +64 -4
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +129 -29
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +260 -27
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +694 -252
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +17 -9
- package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
- package/dist/lib/custom/AIPrompts/pending-records.d.ts +11 -0
- package/dist/lib/custom/AIPrompts/pending-records.d.ts.map +1 -0
- package/dist/lib/custom/AIPrompts/pending-records.js +21 -0
- package/dist/lib/custom/AIPrompts/pending-records.js.map +1 -0
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +74 -16
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +174 -58
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +108 -14
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +258 -70
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +198 -14
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +387 -107
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts +12 -6
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.d.ts.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js +41 -29
- package/dist/lib/custom/BridgeProviders/bridge-provider-features.js.map +1 -1
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js +14 -14
- package/dist/lib/custom/BridgeProviders/bridge-provider-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Companies/company-overview.panel.js +2 -2
- package/dist/lib/custom/Companies/company-overview.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Conversations/conversation-overview.panel.js +2 -2
- package/dist/lib/custom/Conversations/conversation-overview.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Employees/employee-overview.panel.js +2 -2
- package/dist/lib/custom/Employees/employee-overview.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +217 -29
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +734 -285
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +5 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +10 -2
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Files/file-form.component.d.ts +1 -1
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +300 -36
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +664 -208
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +31 -0
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +52 -16
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +107 -10
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +291 -101
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +201 -26
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +429 -109
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts +107 -14
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +249 -79
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts +129 -4
- package/dist/lib/custom/RecordProcesses/record-process-form.component.d.ts.map +1 -1
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js +904 -90
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts +37 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js +399 -0
- package/dist/lib/custom/Rubrics/evaluation-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts +69 -0
- package/dist/lib/custom/Rubrics/record-forms.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js +587 -0
- package/dist/lib/custom/Rubrics/record-forms.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts +67 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js +534 -0
- package/dist/lib/custom/Rubrics/rubric-form.component.js.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts +25 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js +299 -0
- package/dist/lib/custom/Rubrics/rubric-form.panels.js.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts +31 -0
- package/dist/lib/custom/Rubrics/scale-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js +395 -0
- package/dist/lib/custom/Rubrics/scale-form.component.js.map +1 -0
- package/dist/lib/custom/SearchScopes/searchscope-form.component.d.ts +1 -1
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js +4 -4
- package/dist/lib/custom/SearchScopes/searchscope-form.component.js.map +1 -1
- package/dist/lib/custom/SessionBridges/session-bridge-form.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts +77 -13
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +196 -78
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts +49 -7
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +132 -44
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +153 -19
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +434 -217
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +24 -4
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +64 -20
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +223 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +951 -530
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-checks.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-checks.js +5 -1
- package/dist/lib/custom/Tests/test-run-checks.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +2 -0
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js +5 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +146 -18
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +362 -106
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +395 -47
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +1719 -1007
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +214 -26
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +535 -159
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-overview.panel.d.ts +1 -1
- package/dist/lib/custom/Users/user-overview.panel.js +3 -3
- package/dist/lib/custom/Users/user-overview.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts +208 -29
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +446 -138
- package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts +6 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js +16 -4
- package/dist/lib/custom/ai-agent-run/ai-agent-run-cost.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts +50 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +84 -12
- package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +89 -5
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +216 -70
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +62 -3
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +140 -42
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts +81 -10
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +165 -37
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +140 -15
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +326 -100
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +101 -15
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +281 -97
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +43 -25
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +100 -64
- package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +71 -53
- package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +70 -52
- package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +8 -0
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +22 -6
- package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +24 -2
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +91 -59
- package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +10 -2
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +33 -17
- package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts +2 -0
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js +34 -30
- package/dist/lib/custom/ai-agent-run/flow/run-tree-flow-projection.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +14 -2
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +69 -51
- package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +56 -48
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +60 -0
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +38 -12
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +103 -51
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +61 -43
- package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJAIAgentRubric/mjaiagentrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +37 -19
- package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +78 -52
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +76 -74
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +156 -84
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJFeaturePipelineType/mjfeaturepipelinetype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJProcessRun/mjprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJProject/mjproject.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJRecordChange/mjrecordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRecordCloneLog/mjrecordclonelog.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js +74 -0
- package/dist/lib/generated/Entities/MJRecordCloneLogItem/mjrecordclonelogitem.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js +135 -0
- package/dist/lib/generated/Entities/MJRubric/mjrubric.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJRubricBand/mjrubricband.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricCategory/mjrubriccategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js +155 -0
- package/dist/lib/generated/Entities/MJRubricCriterion/mjrubriccriterion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJRubricCriterionLevel/mjrubriccriterionlevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js +183 -0
- package/dist/lib/generated/Entities/MJRubricEvaluation/mjrubricevaluation.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js +120 -0
- package/dist/lib/generated/Entities/MJRubricEvaluationScore/mjrubricevaluationscore.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js +107 -0
- package/dist/lib/generated/Entities/MJRubricScale/mjrubricscale.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js +103 -0
- package/dist/lib/generated/Entities/MJRubricScaleLevel/mjrubricscalelevel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js +171 -0
- package/dist/lib/generated/Entities/MJRubricVersion/mjrubricversion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js +24 -16
- package/dist/lib/generated/Entities/MJTest/mjtest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js +27 -25
- package/dist/lib/generated/Entities/MJTestSuite/mjtestsuite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJTestSuiteRun/mjtestsuiterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +209 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +436 -422
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +44 -2
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +5 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -1
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +11 -3
- package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts +2 -0
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.d.ts.map +1 -1
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js +16 -12
- package/dist/lib/panels/content-sources/tag-pipeline-configuration.panel.js.map +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.d.ts +1 -1
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js +2 -2
- package/dist/lib/panels/content-sources/website-crawler-settings.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +45 -19
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js +95 -43
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +20 -16
- package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.panel.js +73 -65
- package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -1
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts +116 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.d.ts.map +1 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js +820 -0
- package/dist/lib/panels/record-clone/entity-clone-config-editor.component.js.map +1 -0
- package/dist/lib/shared/components/template-editor.component.d.ts +158 -15
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +389 -127
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +5 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +5 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +47 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowchart.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.ts","../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, ElementRef, Input, Output, EventEmitter, ViewChild,\n ChangeDetectionStrategy, ViewEncapsulation, OnDestroy\n} from '@angular/core';\nimport { FlowModel, FlowNode, FLOW_COLORS, FLOW_LABEL, shortLabel, formatDuration } from './agent-run-flow.model';\nimport { svgEl, clip, appendIcon, appendTitle } from './flow-svg.util';\n\ninterface Box { rect: SVGElement; node: FlowNode; }\n\n/**\n * Flowchart — a clean, static top-down tree of the run (the evolution of the old\n * Visualization tab). No clock: pan (drag), zoom (wheel / buttons), click a node to\n * inspect it (click again or the background to deselect), and collapse/expand\n * sub-agent & loop containers. Built on the same shared FlowModel as the animated\n * renderers, so palette, hierarchy and durations stay consistent.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-flowchart',\n templateUrl: './flowchart.component.html',\n styleUrls: ['./flowchart.component.css', './flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowchartComponent implements OnDestroy {\n @ViewChild('svg', { static: true }) svgRef!: ElementRef<SVGSVGElement>;\n @Output() nodeSelected = new EventEmitter<FlowNode>();\n @Output() selectionCleared = new EventEmitter<void>();\n\n private _model: FlowModel | null = null;\n private built = false;\n private listening = false;\n private boxes = new Map<number, Box>();\n private mainG?: SVGElement;\n private selectedId = -1;\n private collapsed = new Set<number>();\n\n private readonly NODE_W = 280;\n private readonly NODE_H = 62;\n private readonly VGAP = 22;\n private readonly INDENT = 48;\n private readonly PADX = 40;\n\n private view = { s: 1, tx: 0, ty: 0 };\n private panning = false;\n private moved = false;\n private suppressBg = false;\n private start = { x: 0, y: 0, tx: 0, ty: 0 };\n\n @Input() set Model(m: FlowModel | null) { this._model = m; this.built = false; this.collapsed.clear(); this.selectedId = -1; this.clear(); }\n\n public Render(_p: number, _ts: number): void {\n if (!this._model) return;\n if (!this.built) { this.buildScene(true); this.built = true; }\n }\n\n ngOnDestroy(): void { this.detachListeners(); }\n\n private clear(): void {\n const svg = this.svgRef?.nativeElement;\n if (svg) while (svg.firstChild) svg.removeChild(svg.firstChild);\n this.boxes.clear();\n }\n\n /* ------------------------------ scene build ------------------------------ */\n\n private visibleNodes(): FlowNode[] {\n const out: FlowNode[] = [];\n const walk = (n: FlowNode) => { out.push(n); if (!this.collapsed.has(n.id)) n.children.forEach(walk); };\n walk(this._model!.root);\n return out;\n }\n\n private descendantCount(n: FlowNode): number {\n return n.children.reduce((s, c) => s + 1 + this.descendantCount(c), 0);\n }\n\n private buildScene(fit: boolean): void {\n this.clear();\n const svg = this.svgRef.nativeElement;\n const ordered = this.visibleNodes();\n const rowY = (i: number) => i * (this.NODE_H + this.VGAP);\n\n this.mainG = svgEl('g', {}, svg);\n const main = this.mainG;\n const edges = svgEl('g', {}, main);\n const nodesG = svgEl('g', {}, main);\n\n const pos = new Map<number, { x: number; y: number }>();\n ordered.forEach((n, i) => pos.set(n.id, { x: this.PADX + n.depth * this.INDENT, y: rowY(i) }));\n\n // elbow connectors to parent (file-tree style)\n for (const n of ordered) {\n if (!n.parent || !pos.has(n.parent.id)) continue;\n const c = pos.get(n.id)!, p = pos.get(n.parent.id)!;\n const spineX = p.x + 16, midY = c.y + this.NODE_H / 2;\n 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);\n }\n\n for (const n of ordered) {\n const { x, y } = pos.get(n.id)!;\n const col = FLOW_COLORS[n.type];\n const isContainer = n.children.length > 0;\n const isCollapsed = this.collapsed.has(n.id);\n const grp = svgEl('g', {}, nodesG);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n\n const body = svgEl('g', {}, grp);\n (body as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n const sel = n.id === this.selectedId;\n const rect = svgEl('rect', {\n x, y, width: this.NODE_W, height: this.NODE_H, rx: 12,\n fill: sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)',\n stroke: col, 'stroke-width': sel ? 3 : isContainer ? 2 : 1.4, opacity: 0.98\n }, body);\n if (n.heat >= 2) rect.setAttribute('class', 'glow' + n.heat);\n svgEl('rect', { x, y, width: 5, height: this.NODE_H, rx: 2.5, fill: col }, body);\n appendTitle(body, `${n.name} · ${formatDuration(n.realDur)}`);\n appendIcon(body, x + 14, y + this.NODE_H / 2 - 11, 22, n.iconClass, n.logoUrl, col);\n svgEl('text', { x: x + 46, y: y + 22, 'font-size': 13, 'font-weight': 600, 'dominant-baseline': 'middle', text: clip(shortLabel(n), 26) }, body);\n const baseSub = n.model ? `${FLOW_LABEL[n.type]} · ${n.model}` : FLOW_LABEL[n.type];\n const sub = isContainer && isCollapsed ? `${FLOW_LABEL[n.type]} · ${this.descendantCount(n)} hidden` : baseSub;\n svgEl('text', { x: x + 46, y: y + 41, 'font-size': 10.5, class: 'ftxt-muted', text: clip(sub, 32) }, body);\n if (n.realDur) {\n 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);\n }\n body.addEventListener('mouseup', () => { if (!this.moved) { this.suppressBg = true; this.onNodeClick(n); } });\n\n // collapse / expand disclosure — in the LEFT gutter, tree convention\n if (isContainer) {\n const gx = x - 15, gy = y + this.NODE_H / 2;\n const tg = svgEl('g', {}, grp);\n (tg as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n svgEl('circle', { cx: gx, cy: gy, r: 9, fill: 'transparent' }, tg); // hit target\n const tri = isCollapsed\n ? `M${gx - 3},${gy - 5} L${gx + 4},${gy} L${gx - 3},${gy + 5} Z`\n : `M${gx - 5},${gy - 3} L${gx + 5},${gy - 3} L${gx},${gy + 4} Z`;\n svgEl('path', { d: tri, fill: col }, tg);\n tg.addEventListener('mouseup', () => { if (!this.moved) { this.suppressBg = true; this.toggleCollapse(n); } });\n }\n\n this.boxes.set(n.id, { rect, node: n });\n }\n\n if (!this.listening) { this.attachListeners(); this.listening = true; }\n if (fit) requestAnimationFrame(() => this.fitToView());\n else this.applyView();\n }\n\n private toggleCollapse(n: FlowNode): void {\n if (this.collapsed.has(n.id)) this.collapsed.delete(n.id); else this.collapsed.add(n.id);\n this.buildScene(false);\n }\n\n /* ------------------------------ pan / zoom ------------------------------- */\n\n private onWheel = (e: WheelEvent): void => {\n e.preventDefault();\n const r = this.svgRef.nativeElement.getBoundingClientRect();\n this.zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY > 0 ? 0.9 : 1.1);\n };\n private onDown = (): void => { this.panning = true; this.moved = false; this.suppressBg = false; this.start = { x: 0, y: 0, tx: this.view.tx, ty: this.view.ty }; };\n private onDownPos = (e: MouseEvent): void => { this.start.x = e.clientX; this.start.y = e.clientY; };\n private onMove = (e: MouseEvent): void => {\n if (!this.panning) return;\n const dx = e.clientX - this.start.x, dy = e.clientY - this.start.y;\n if (Math.abs(dx) + Math.abs(dy) > 3) this.moved = true;\n this.view.tx = this.start.tx + dx; this.view.ty = this.start.ty + dy;\n this.applyView();\n };\n private onUp = (): void => {\n if (this.panning && !this.moved && !this.suppressBg) this.deselect();\n this.panning = false; this.suppressBg = false;\n };\n\n private attachListeners(): void {\n const svg = this.svgRef.nativeElement;\n svg.addEventListener('wheel', this.onWheel, { passive: false });\n svg.addEventListener('mousedown', (e) => { this.onDown(); this.onDownPos(e); });\n window.addEventListener('mousemove', this.onMove);\n window.addEventListener('mouseup', this.onUp);\n }\n private detachListeners(): void {\n const svg = this.svgRef?.nativeElement;\n svg?.removeEventListener('wheel', this.onWheel);\n window.removeEventListener('mousemove', this.onMove);\n window.removeEventListener('mouseup', this.onUp);\n }\n\n private applyView(): void {\n this.mainG?.setAttribute('transform', `translate(${this.view.tx},${this.view.ty}) scale(${this.view.s})`);\n }\n private zoomAt(cx: number, cy: number, factor: number): void {\n const ns = Math.max(0.2, Math.min(2.5, this.view.s * factor));\n this.view.tx = cx - (cx - this.view.tx) * (ns / this.view.s);\n this.view.ty = cy - (cy - this.view.ty) * (ns / this.view.s);\n this.view.s = ns; this.applyView();\n }\n private fitToView(): void {\n const svg = this.svgRef.nativeElement;\n if (!this.mainG) return;\n const bb = (this.mainG as SVGGraphicsElement).getBBox();\n const vw = svg.clientWidth || 900, vh = svg.clientHeight || 600;\n const s = Math.max(0.25, Math.min(1.15, Math.min((vw - 60) / Math.max(1, bb.width), (vh - 48) / Math.max(1, bb.height))));\n this.view = { s, tx: (vw - bb.width * s) / 2 - bb.x * s, ty: 28 - bb.y * s };\n this.applyView();\n }\n\n public zoomIn(): void { const svg = this.svgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1.2); }\n public zoomOut(): void { const svg = this.svgRef.nativeElement; this.zoomAt(svg.clientWidth / 2, svg.clientHeight / 2, 1 / 1.2); }\n public resetView(): void { this.fitToView(); }\n\n // unified interface used by the container's shared zoom toolbar\n public ZoomIn(): void { this.zoomIn(); }\n public ZoomOut(): void { this.zoomOut(); }\n public FitReset(): void { this.fitToView(); }\n\n /* ------------------------------- selection ------------------------------ */\n\n private onNodeClick(n: FlowNode): void {\n if (this.selectedId === n.id) { this.deselect(); return; }\n this.selectedId = n.id;\n this.paintSelection();\n this.nodeSelected.emit(n);\n }\n private deselect(): void {\n if (this.selectedId === -1) return;\n this.selectedId = -1;\n this.paintSelection();\n this.selectionCleared.emit();\n }\n\n /** External deselect (e.g. detail panel closed) — clears highlight without re-emitting. */\n public Deselect(): void {\n if (this.selectedId === -1) return;\n this.selectedId = -1;\n this.paintSelection();\n }\n private paintSelection(): void {\n this.boxes.forEach(({ rect, node }) => {\n const sel = node.id === this.selectedId;\n rect.setAttribute('stroke-width', sel ? '3' : node.children.length ? '2' : '1.4');\n rect.setAttribute('fill', sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)');\n });\n }\n}\n","<div class=\"fc-wrap\">\n <svg #svg class=\"flow-svg\"></svg>\n</div>\n"]}
|
|
1
|
+
{"version":3,"file":"flowchart.component.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.ts","../../../../../src/lib/custom/ai-agent-run/flow/flowchart.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n Component, ElementRef, Input, Output, EventEmitter, ViewChild,\n ChangeDetectionStrategy, ViewEncapsulation, OnDestroy\n} from '@angular/core';\nimport { FlowModel, FlowNode, FLOW_COLORS, FLOW_LABEL, ShortLabel, FormatDuration } from './agent-run-flow.model';\nimport { SvgEl, Clip, AppendIcon, AppendTitle } from './flow-svg.util';\n\ninterface Box { rect: SVGElement; node: FlowNode; }\n\n/**\n * Flowchart — a clean, static top-down tree of the run (the evolution of the old\n * Visualization tab). No clock: pan (drag), zoom (wheel / buttons), click a node to\n * inspect it (click again or the background to deselect), and collapse/expand\n * sub-agent & loop containers. Built on the same shared FlowModel as the animated\n * renderers, so palette, hierarchy and durations stay consistent.\n */\n@Component({\n standalone: false,\n selector: 'mj-agent-flow-flowchart',\n templateUrl: './flowchart.component.html',\n styleUrls: ['./flowchart.component.css', './flow-shared.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FlowchartComponent 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 @Output() SelectionCleared = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link SelectionCleared}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (selectionCleared) keeps working. Must stay AFTER SelectionCleared: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() selectionCleared = this.SelectionCleared;\n\n private _model: FlowModel | null = null;\n private built = false;\n private listening = false;\n private boxes = new Map<number, Box>();\n private mainG?: SVGElement;\n private selectedId = -1;\n private collapsed = new Set<number>();\n\n private readonly NODE_W = 280;\n private readonly NODE_H = 62;\n private readonly VGAP = 22;\n private readonly INDENT = 48;\n private readonly PADX = 40;\n\n private view = { s: 1, tx: 0, ty: 0 };\n private panning = false;\n private moved = false;\n private suppressBg = false;\n private start = { x: 0, y: 0, tx: 0, ty: 0 };\n\n @Input() set Model(m: FlowModel | null) { this._model = m; this.built = false; this.collapsed.clear(); this.selectedId = -1; this.clear(); }\n\n public Render(_p: number, _ts: number): void {\n if (!this._model) return;\n if (!this.built) { this.buildScene(true); this.built = true; }\n }\n\n ngOnDestroy(): void { this.detachListeners(); }\n\n private clear(): void {\n const svg = this.SvgRef?.nativeElement;\n if (svg) while (svg.firstChild) svg.removeChild(svg.firstChild);\n this.boxes.clear();\n }\n\n /* ------------------------------ scene build ------------------------------ */\n\n private visibleNodes(): FlowNode[] {\n const out: FlowNode[] = [];\n const walk = (n: FlowNode) => { out.push(n); if (!this.collapsed.has(n.Id)) n.Children.forEach(walk); };\n walk(this._model!.Root);\n return out;\n }\n\n private descendantCount(n: FlowNode): number {\n return n.Children.reduce((s, c) => s + 1 + this.descendantCount(c), 0);\n }\n\n private buildScene(fit: boolean): void {\n this.clear();\n const svg = this.SvgRef.nativeElement;\n const ordered = this.visibleNodes();\n const rowY = (i: number) => i * (this.NODE_H + this.VGAP);\n\n this.mainG = SvgEl('g', {}, svg);\n const main = this.mainG;\n const edges = SvgEl('g', {}, main);\n const nodesG = SvgEl('g', {}, main);\n\n const pos = new Map<number, { x: number; y: number }>();\n ordered.forEach((n, i) => pos.set(n.Id, { x: this.PADX + n.Depth * this.INDENT, y: rowY(i) }));\n\n // elbow connectors to parent (file-tree style)\n for (const n of ordered) {\n if (!n.Parent || !pos.has(n.Parent.Id)) continue;\n const c = pos.get(n.Id)!, p = pos.get(n.Parent.Id)!;\n const spineX = p.x + 16, midY = c.y + this.NODE_H / 2;\n 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);\n }\n\n for (const n of ordered) {\n const { x, y } = pos.get(n.Id)!;\n const col = FLOW_COLORS[n.Type];\n const isContainer = n.Children.length > 0;\n const isCollapsed = this.collapsed.has(n.Id);\n const grp = SvgEl('g', {}, nodesG);\n (grp as SVGElement & { style: CSSStyleDeclaration }).style.color = col;\n\n const body = SvgEl('g', {}, grp);\n (body as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n const sel = n.Id === this.selectedId;\n const rect = SvgEl('rect', {\n x, y, width: this.NODE_W, height: this.NODE_H, rx: 12,\n fill: sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)',\n stroke: col, 'stroke-width': sel ? 3 : isContainer ? 2 : 1.4, opacity: 0.98\n }, body);\n if (n.Heat >= 2) rect.setAttribute('class', 'glow' + n.Heat);\n SvgEl('rect', { x, y, width: 5, height: this.NODE_H, rx: 2.5, fill: col }, body);\n AppendTitle(body, `${n.Name} · ${FormatDuration(n.RealDur)}`);\n AppendIcon(body, x + 14, y + this.NODE_H / 2 - 11, 22, n.IconClass, n.LogoUrl, col);\n SvgEl('text', { x: x + 46, y: y + 22, 'font-size': 13, 'font-weight': 600, 'dominant-baseline': 'middle', text: Clip(ShortLabel(n), 26) }, body);\n const baseSub = n.Model ? `${FLOW_LABEL[n.Type]} · ${n.Model}` : FLOW_LABEL[n.Type];\n const sub = isContainer && isCollapsed ? `${FLOW_LABEL[n.Type]} · ${this.descendantCount(n)} hidden` : baseSub;\n SvgEl('text', { x: x + 46, y: y + 41, 'font-size': 10.5, class: 'ftxt-muted', text: Clip(sub, 32) }, body);\n if (n.RealDur) {\n 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);\n }\n body.addEventListener('mouseup', () => { if (!this.moved) { this.suppressBg = true; this.onNodeClick(n); } });\n\n // collapse / expand disclosure — in the LEFT gutter, tree convention\n if (isContainer) {\n const gx = x - 15, gy = y + this.NODE_H / 2;\n const tg = SvgEl('g', {}, grp);\n (tg as SVGElement & { style: CSSStyleDeclaration }).style.cursor = 'pointer';\n SvgEl('circle', { cx: gx, cy: gy, r: 9, fill: 'transparent' }, tg); // hit target\n const tri = isCollapsed\n ? `M${gx - 3},${gy - 5} L${gx + 4},${gy} L${gx - 3},${gy + 5} Z`\n : `M${gx - 5},${gy - 3} L${gx + 5},${gy - 3} L${gx},${gy + 4} Z`;\n SvgEl('path', { d: tri, fill: col }, tg);\n tg.addEventListener('mouseup', () => { if (!this.moved) { this.suppressBg = true; this.toggleCollapse(n); } });\n }\n\n this.boxes.set(n.Id, { rect, node: n });\n }\n\n if (!this.listening) { this.attachListeners(); this.listening = true; }\n if (fit) requestAnimationFrame(() => this.fitToView());\n else this.applyView();\n }\n\n private toggleCollapse(n: FlowNode): void {\n if (this.collapsed.has(n.Id)) this.collapsed.delete(n.Id); else this.collapsed.add(n.Id);\n this.buildScene(false);\n }\n\n /* ------------------------------ pan / zoom ------------------------------- */\n\n private onWheel = (e: WheelEvent): void => {\n e.preventDefault();\n const r = this.SvgRef.nativeElement.getBoundingClientRect();\n this.zoomAt(e.clientX - r.left, e.clientY - r.top, e.deltaY > 0 ? 0.9 : 1.1);\n };\n private onDown = (): void => { this.panning = true; this.moved = false; this.suppressBg = false; this.start = { x: 0, y: 0, tx: this.view.tx, ty: this.view.ty }; };\n private onDownPos = (e: MouseEvent): void => { this.start.x = e.clientX; this.start.y = e.clientY; };\n private onMove = (e: MouseEvent): void => {\n if (!this.panning) return;\n const dx = e.clientX - this.start.x, dy = e.clientY - this.start.y;\n if (Math.abs(dx) + Math.abs(dy) > 3) this.moved = true;\n this.view.tx = this.start.tx + dx; this.view.ty = this.start.ty + dy;\n this.applyView();\n };\n private onUp = (): void => {\n if (this.panning && !this.moved && !this.suppressBg) this.deselect();\n this.panning = false; this.suppressBg = false;\n };\n\n private attachListeners(): void {\n const svg = this.SvgRef.nativeElement;\n svg.addEventListener('wheel', this.onWheel, { passive: false });\n svg.addEventListener('mousedown', (e) => { this.onDown(); this.onDownPos(e); });\n window.addEventListener('mousemove', this.onMove);\n window.addEventListener('mouseup', this.onUp);\n }\n private detachListeners(): void {\n const svg = this.SvgRef?.nativeElement;\n svg?.removeEventListener('wheel', this.onWheel);\n window.removeEventListener('mousemove', this.onMove);\n window.removeEventListener('mouseup', this.onUp);\n }\n\n private applyView(): void {\n this.mainG?.setAttribute('transform', `translate(${this.view.tx},${this.view.ty}) scale(${this.view.s})`);\n }\n private zoomAt(cx: number, cy: number, factor: number): void {\n const ns = Math.max(0.2, Math.min(2.5, this.view.s * factor));\n this.view.tx = cx - (cx - this.view.tx) * (ns / this.view.s);\n this.view.ty = cy - (cy - this.view.ty) * (ns / this.view.s);\n this.view.s = ns; this.applyView();\n }\n private fitToView(): void {\n const svg = this.SvgRef.nativeElement;\n if (!this.mainG) return;\n const bb = (this.mainG as SVGGraphicsElement).getBBox();\n const vw = svg.clientWidth || 900, vh = svg.clientHeight || 600;\n const s = Math.max(0.25, Math.min(1.15, Math.min((vw - 60) / Math.max(1, bb.width), (vh - 48) / Math.max(1, bb.height))));\n this.view = { s, tx: (vw - bb.width * s) / 2 - bb.x * s, ty: 28 - bb.y * s };\n this.applyView();\n }\n\n public zoomIn(): void { 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\n public zoomOut(): void { 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\n public ResetView(): void { this.fitToView(); }\n\n /** @deprecated Use {@link ResetView}. */\n public resetView(): void {\n return this.ResetView();\n }\n\n // unified interface used by the container's shared zoom toolbar\n public ZoomIn(): void { this.zoomIn(); }\n public ZoomOut(): void { this.zoomOut(); }\n public FitReset(): void { this.fitToView(); }\n\n /* ------------------------------- selection ------------------------------ */\n\n private onNodeClick(n: FlowNode): void {\n if (this.selectedId === n.Id) { this.deselect(); return; }\n this.selectedId = n.Id;\n this.paintSelection();\n this.NodeSelected.emit(n);\n }\n private deselect(): void {\n if (this.selectedId === -1) return;\n this.selectedId = -1;\n this.paintSelection();\n this.SelectionCleared.emit();\n }\n\n /** External deselect (e.g. detail panel closed) — clears highlight without re-emitting. */\n public Deselect(): void {\n if (this.selectedId === -1) return;\n this.selectedId = -1;\n this.paintSelection();\n }\n private paintSelection(): void {\n this.boxes.forEach(({ rect, node }) => {\n const sel = node.Id === this.selectedId;\n rect.setAttribute('stroke-width', sel ? '3' : node.Children.length ? '2' : '1.4');\n rect.setAttribute('fill', sel ? 'var(--mj-bg-surface-hover)' : 'var(--mj-bg-surface-card)');\n });\n }\n}\n","<div class=\"fc-wrap\">\n <svg #svg class=\"flow-svg\"></svg>\n</div>\n"]}
|
|
@@ -18,9 +18,17 @@ export declare class PanZoomController {
|
|
|
18
18
|
private storageKey;
|
|
19
19
|
private minS;
|
|
20
20
|
private maxS;
|
|
21
|
-
|
|
21
|
+
View: View;
|
|
22
|
+
/** @deprecated Use {@link View}. */
|
|
23
|
+
get view(): View;
|
|
24
|
+
/** @deprecated Use {@link View}. */
|
|
25
|
+
set view(value: View);
|
|
22
26
|
/** True when the last gesture actually dragged — renderers use it to suppress click-select. */
|
|
23
|
-
|
|
27
|
+
Moved: boolean;
|
|
28
|
+
/** @deprecated Use {@link Moved}. */
|
|
29
|
+
get moved(): boolean;
|
|
30
|
+
/** @deprecated Use {@link Moved}. */
|
|
31
|
+
set moved(value: boolean);
|
|
24
32
|
private panning;
|
|
25
33
|
private startX;
|
|
26
34
|
private startY;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pan-zoom.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/pan-zoom.ts"],"names":[],"mappings":"AAEA,UAAU,IAAI;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAErD;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"pan-zoom.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/pan-zoom.ts"],"names":[],"mappings":"AAEA,UAAU,IAAI;IAAG,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;CAAE;AAErD;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAmC1B,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;IAtCP,IAAI,EAAE,IAAI,CAA0B;IAE3C,oCAAoC;IACpC,IAAW,IAAI,IAAI,IAAI,CAEtB;IACD,oCAAoC;IACpC,IAAW,IAAI,CAAC,KAAK,EAAE,IAAI,EAE1B;IACD,+FAA+F;IACxF,KAAK,UAAS;IAErB,qCAAqC;IACrC,IAAW,KAAK,YAEf;IACD,qCAAqC;IACrC,IAAW,KAAK,CAAC,KAAK,SAAA,EAErB;IAED,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwB;gBAGpC,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,SAAM,EACV,IAAI,SAAI;IAGX,IAAI,IAAI,IAAI;IAWZ,MAAM,IAAI,IAAI;IAQd,MAAM,IAAI,IAAI;IAOd,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,KAAK,IAAI,IAAI;IACpB,sFAAsF;IAC/E,OAAO,IAAI,IAAI;IAEtB,OAAO,CAAC,EAAE;IAIV,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,IAAI;IAEZ,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,KAAK;IAGb,OAAO,CAAC,OAAO;CAGhB"}
|
|
@@ -9,15 +9,31 @@ import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
|
9
9
|
* svg is scaled to fit its container.
|
|
10
10
|
*/
|
|
11
11
|
export class PanZoomController {
|
|
12
|
+
/** @deprecated Use {@link View}. */
|
|
13
|
+
get view() {
|
|
14
|
+
return this.View;
|
|
15
|
+
}
|
|
16
|
+
/** @deprecated Use {@link View}. */
|
|
17
|
+
set view(value) {
|
|
18
|
+
this.View = value;
|
|
19
|
+
}
|
|
20
|
+
/** @deprecated Use {@link Moved}. */
|
|
21
|
+
get moved() {
|
|
22
|
+
return this.Moved;
|
|
23
|
+
}
|
|
24
|
+
/** @deprecated Use {@link Moved}. */
|
|
25
|
+
set moved(value) {
|
|
26
|
+
this.Moved = value;
|
|
27
|
+
}
|
|
12
28
|
constructor(svg, group, storageKey, minS = 0.4, maxS = 6) {
|
|
13
29
|
this.svg = svg;
|
|
14
30
|
this.group = group;
|
|
15
31
|
this.storageKey = storageKey;
|
|
16
32
|
this.minS = minS;
|
|
17
33
|
this.maxS = maxS;
|
|
18
|
-
this.
|
|
34
|
+
this.View = { s: 1, tx: 0, ty: 0 };
|
|
19
35
|
/** True when the last gesture actually dragged — renderers use it to suppress click-select. */
|
|
20
|
-
this.
|
|
36
|
+
this.Moved = false;
|
|
21
37
|
this.panning = false;
|
|
22
38
|
this.startX = 0;
|
|
23
39
|
this.startY = 0;
|
|
@@ -35,7 +51,7 @@ export class PanZoomController {
|
|
|
35
51
|
try {
|
|
36
52
|
const v = JSON.parse(raw);
|
|
37
53
|
if (v && typeof v.s === 'number' && typeof v.tx === 'number' && typeof v.ty === 'number') {
|
|
38
|
-
this.
|
|
54
|
+
this.View = { s: v.s, tx: v.tx, ty: v.ty };
|
|
39
55
|
}
|
|
40
56
|
}
|
|
41
57
|
catch { /* ignore bad cache */ }
|
|
@@ -55,7 +71,7 @@ export class PanZoomController {
|
|
|
55
71
|
}
|
|
56
72
|
ZoomIn() { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1.25); }
|
|
57
73
|
ZoomOut() { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1 / 1.25); }
|
|
58
|
-
Reset() { this.
|
|
74
|
+
Reset() { this.View = { s: 1, tx: 0, ty: 0 }; this.apply(); this.persist(); }
|
|
59
75
|
/** Re-assert this controller's own view onto its group (defensive on mode switch). */
|
|
60
76
|
Reapply() { this.apply(); }
|
|
61
77
|
vb() {
|
|
@@ -74,11 +90,11 @@ export class PanZoomController {
|
|
|
74
90
|
}
|
|
75
91
|
onDown(e) {
|
|
76
92
|
this.panning = true;
|
|
77
|
-
this.
|
|
93
|
+
this.Moved = false;
|
|
78
94
|
this.startX = e.clientX;
|
|
79
95
|
this.startY = e.clientY;
|
|
80
|
-
this.startTx = this.
|
|
81
|
-
this.startTy = this.
|
|
96
|
+
this.startTx = this.View.tx;
|
|
97
|
+
this.startTy = this.View.ty;
|
|
82
98
|
}
|
|
83
99
|
onMove(e) {
|
|
84
100
|
if (!this.panning)
|
|
@@ -86,26 +102,26 @@ export class PanZoomController {
|
|
|
86
102
|
const k = this.toVbScale();
|
|
87
103
|
const dx = (e.clientX - this.startX) * k, dy = (e.clientY - this.startY) * k;
|
|
88
104
|
if (Math.abs(dx) + Math.abs(dy) > 3)
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
this.
|
|
105
|
+
this.Moved = true;
|
|
106
|
+
this.View.tx = this.startTx + dx;
|
|
107
|
+
this.View.ty = this.startTy + dy;
|
|
92
108
|
this.apply();
|
|
93
109
|
}
|
|
94
|
-
onUp() { if (this.panning && this.
|
|
110
|
+
onUp() { if (this.panning && this.Moved)
|
|
95
111
|
this.persist(); this.panning = false; }
|
|
96
112
|
zoomAt(cx, cy, factor) {
|
|
97
|
-
const ns = Math.max(this.minS, Math.min(this.maxS, this.
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
113
|
+
const ns = Math.max(this.minS, Math.min(this.maxS, this.View.s * factor));
|
|
114
|
+
this.View.tx = cx - (cx - this.View.tx) * (ns / this.View.s);
|
|
115
|
+
this.View.ty = cy - (cy - this.View.ty) * (ns / this.View.s);
|
|
116
|
+
this.View.s = ns;
|
|
101
117
|
this.apply();
|
|
102
118
|
this.persist();
|
|
103
119
|
}
|
|
104
120
|
apply() {
|
|
105
|
-
this.group.setAttribute('transform', `translate(${this.
|
|
121
|
+
this.group.setAttribute('transform', `translate(${this.View.tx},${this.View.ty}) scale(${this.View.s})`);
|
|
106
122
|
}
|
|
107
123
|
persist() {
|
|
108
|
-
UserInfoEngine.Instance.SetSettingDebounced(this.storageKey, JSON.stringify(this.
|
|
124
|
+
UserInfoEngine.Instance.SetSettingDebounced(this.storageKey, JSON.stringify(this.View));
|
|
109
125
|
}
|
|
110
126
|
}
|
|
111
127
|
//# sourceMappingURL=pan-zoom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pan-zoom.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/pan-zoom.ts"],"names":[],"mappings":"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","sourcesContent":["import { UserInfoEngine } from '@memberjunction/core-entities';\n\ninterface View { s: number; tx: number; ty: number; }\n\n/**\n * Reusable pan/zoom for the viewBox-based flow renderers (Flame, Subway,\n * Constellation). Wheel zooms about the cursor, drag pans, and the view is\n * persisted per-user (cross-device) via UserInfoEngine under `storageKey`.\n *\n * All math is done in the svg's *viewBox* coordinate space (screen deltas are\n * converted), so zoom-to-cursor and pan stay accurate regardless of how the\n * svg is scaled to fit its container.\n */\nexport class PanZoomController {\n public view: View = { s: 1, tx: 0, ty: 0 };\n /** True when the last gesture actually dragged — renderers use it to suppress click-select. */\n public moved = false;\n\n private panning = false;\n private startX = 0;\n private startY = 0;\n private startTx = 0;\n private startTy = 0;\n\n private readonly onWheelB = this.onWheel.bind(this);\n private readonly onDownB = this.onDown.bind(this);\n private readonly onMoveB = this.onMove.bind(this);\n private readonly onUpB = this.onUp.bind(this);\n\n constructor(\n private svg: SVGSVGElement,\n private group: SVGElement,\n private storageKey: string,\n private minS = 0.4,\n private maxS = 6\n ) {}\n\n public Load(): void {\n const raw = UserInfoEngine.Instance.GetSetting(this.storageKey);\n if (!raw) return;\n try {\n const v = JSON.parse(raw) as Partial<View>;\n if (v && typeof v.s === 'number' && typeof v.tx === 'number' && typeof v.ty === 'number') {\n this.view = { s: v.s, tx: v.tx, ty: v.ty };\n }\n } catch { /* ignore bad cache */ }\n }\n\n public Attach(): void {\n this.svg.addEventListener('wheel', this.onWheelB, { passive: false });\n this.svg.addEventListener('mousedown', this.onDownB);\n window.addEventListener('mousemove', this.onMoveB);\n window.addEventListener('mouseup', this.onUpB);\n this.apply();\n }\n\n public Detach(): void {\n this.svg.removeEventListener('wheel', this.onWheelB);\n this.svg.removeEventListener('mousedown', this.onDownB);\n window.removeEventListener('mousemove', this.onMoveB);\n window.removeEventListener('mouseup', this.onUpB);\n }\n\n public ZoomIn(): void { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1.25); }\n public ZoomOut(): void { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1 / 1.25); }\n public Reset(): void { this.view = { s: 1, tx: 0, ty: 0 }; this.apply(); this.persist(); }\n /** Re-assert this controller's own view onto its group (defensive on mode switch). */\n public Reapply(): void { this.apply(); }\n\n private vb(): { w: number; h: number } {\n const b = this.svg.viewBox?.baseVal;\n return b && b.width ? { w: b.width, h: b.height } : { w: this.svg.clientWidth || 1, h: this.svg.clientHeight || 1 };\n }\n private toVbScale(): number {\n const r = this.svg.getBoundingClientRect();\n return r.width ? this.vb().w / r.width : 1;\n }\n\n private onWheel(e: WheelEvent): void {\n e.preventDefault();\n const r = this.svg.getBoundingClientRect();\n const k = this.toVbScale();\n this.zoomAt((e.clientX - r.left) * k, (e.clientY - r.top) * k, e.deltaY > 0 ? 0.9 : 1.1);\n }\n private onDown(e: MouseEvent): void {\n this.panning = true; this.moved = false;\n this.startX = e.clientX; this.startY = e.clientY;\n this.startTx = this.view.tx; this.startTy = this.view.ty;\n }\n private onMove(e: MouseEvent): void {\n if (!this.panning) return;\n const k = this.toVbScale();\n const dx = (e.clientX - this.startX) * k, dy = (e.clientY - this.startY) * k;\n if (Math.abs(dx) + Math.abs(dy) > 3) this.moved = true;\n this.view.tx = this.startTx + dx; this.view.ty = this.startTy + dy;\n this.apply();\n }\n private onUp(): void { if (this.panning && this.moved) this.persist(); this.panning = false; }\n\n private zoomAt(cx: number, cy: number, factor: number): void {\n const ns = Math.max(this.minS, Math.min(this.maxS, this.view.s * factor));\n this.view.tx = cx - (cx - this.view.tx) * (ns / this.view.s);\n this.view.ty = cy - (cy - this.view.ty) * (ns / this.view.s);\n this.view.s = ns;\n this.apply(); this.persist();\n }\n private apply(): void {\n this.group.setAttribute('transform', `translate(${this.view.tx},${this.view.ty}) scale(${this.view.s})`);\n }\n private persist(): void {\n UserInfoEngine.Instance.SetSettingDebounced(this.storageKey, JSON.stringify(this.view));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pan-zoom.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/pan-zoom.ts"],"names":[],"mappings":"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","sourcesContent":["import { UserInfoEngine } from '@memberjunction/core-entities';\n\ninterface View { s: number; tx: number; ty: number; }\n\n/**\n * Reusable pan/zoom for the viewBox-based flow renderers (Flame, Subway,\n * Constellation). Wheel zooms about the cursor, drag pans, and the view is\n * persisted per-user (cross-device) via UserInfoEngine under `storageKey`.\n *\n * All math is done in the svg's *viewBox* coordinate space (screen deltas are\n * converted), so zoom-to-cursor and pan stay accurate regardless of how the\n * svg is scaled to fit its container.\n */\nexport class PanZoomController {\n public View: View = { s: 1, tx: 0, ty: 0 };\n\n /** @deprecated Use {@link View}. */\n public get view(): View {\n return this.View;\n }\n /** @deprecated Use {@link View}. */\n public set view(value: View) {\n this.View = value;\n }\n /** True when the last gesture actually dragged — renderers use it to suppress click-select. */\n public Moved = false;\n\n /** @deprecated Use {@link Moved}. */\n public get moved() {\n return this.Moved;\n }\n /** @deprecated Use {@link Moved}. */\n public set moved(value) {\n this.Moved = value;\n }\n\n private panning = false;\n private startX = 0;\n private startY = 0;\n private startTx = 0;\n private startTy = 0;\n\n private readonly onWheelB = this.onWheel.bind(this);\n private readonly onDownB = this.onDown.bind(this);\n private readonly onMoveB = this.onMove.bind(this);\n private readonly onUpB = this.onUp.bind(this);\n\n constructor(\n private svg: SVGSVGElement,\n private group: SVGElement,\n private storageKey: string,\n private minS = 0.4,\n private maxS = 6\n ) {}\n\n public Load(): void {\n const raw = UserInfoEngine.Instance.GetSetting(this.storageKey);\n if (!raw) return;\n try {\n const v = JSON.parse(raw) as Partial<View>;\n if (v && typeof v.s === 'number' && typeof v.tx === 'number' && typeof v.ty === 'number') {\n this.View = { s: v.s, tx: v.tx, ty: v.ty };\n }\n } catch { /* ignore bad cache */ }\n }\n\n public Attach(): void {\n this.svg.addEventListener('wheel', this.onWheelB, { passive: false });\n this.svg.addEventListener('mousedown', this.onDownB);\n window.addEventListener('mousemove', this.onMoveB);\n window.addEventListener('mouseup', this.onUpB);\n this.apply();\n }\n\n public Detach(): void {\n this.svg.removeEventListener('wheel', this.onWheelB);\n this.svg.removeEventListener('mousedown', this.onDownB);\n window.removeEventListener('mousemove', this.onMoveB);\n window.removeEventListener('mouseup', this.onUpB);\n }\n\n public ZoomIn(): void { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1.25); }\n public ZoomOut(): void { const vb = this.vb(); this.zoomAt(vb.w / 2, vb.h / 2, 1 / 1.25); }\n public Reset(): void { this.View = { s: 1, tx: 0, ty: 0 }; this.apply(); this.persist(); }\n /** Re-assert this controller's own view onto its group (defensive on mode switch). */\n public Reapply(): void { this.apply(); }\n\n private vb(): { w: number; h: number } {\n const b = this.svg.viewBox?.baseVal;\n return b && b.width ? { w: b.width, h: b.height } : { w: this.svg.clientWidth || 1, h: this.svg.clientHeight || 1 };\n }\n private toVbScale(): number {\n const r = this.svg.getBoundingClientRect();\n return r.width ? this.vb().w / r.width : 1;\n }\n\n private onWheel(e: WheelEvent): void {\n e.preventDefault();\n const r = this.svg.getBoundingClientRect();\n const k = this.toVbScale();\n this.zoomAt((e.clientX - r.left) * k, (e.clientY - r.top) * k, e.deltaY > 0 ? 0.9 : 1.1);\n }\n private onDown(e: MouseEvent): void {\n this.panning = true; this.Moved = false;\n this.startX = e.clientX; this.startY = e.clientY;\n this.startTx = this.View.tx; this.startTy = this.View.ty;\n }\n private onMove(e: MouseEvent): void {\n if (!this.panning) return;\n const k = this.toVbScale();\n const dx = (e.clientX - this.startX) * k, dy = (e.clientY - this.startY) * k;\n if (Math.abs(dx) + Math.abs(dy) > 3) this.Moved = true;\n this.View.tx = this.startTx + dx; this.View.ty = this.startTy + dy;\n this.apply();\n }\n private onUp(): void { if (this.panning && this.Moved) this.persist(); this.panning = false; }\n\n private zoomAt(cx: number, cy: number, factor: number): void {\n const ns = Math.max(this.minS, Math.min(this.maxS, this.View.s * factor));\n this.View.tx = cx - (cx - this.View.tx) * (ns / this.View.s);\n this.View.ty = cy - (cy - this.View.ty) * (ns / this.View.s);\n this.View.s = ns;\n this.apply(); this.persist();\n }\n private apply(): void {\n this.group.setAttribute('transform', `translate(${this.View.tx},${this.View.ty}) scale(${this.View.s})`);\n }\n private persist(): void {\n UserInfoEngine.Instance.SetSettingDebounced(this.storageKey, JSON.stringify(this.View));\n }\n}\n"]}
|
|
@@ -24,5 +24,7 @@ import { FlowModel, RootIcon } from './agent-run-flow.model';
|
|
|
24
24
|
* @param rootStatus the run's status
|
|
25
25
|
* @param rootIcon the agent's icon/logo, which only the form knows
|
|
26
26
|
*/
|
|
27
|
+
export declare function BuildFlowModelFromTree(root: AgentRunTreeNode | null, rootName: string, rootStatus: string, rootIcon: RootIcon): FlowModel | null;
|
|
28
|
+
/** @deprecated Use {@link BuildFlowModelFromTree}. */
|
|
27
29
|
export declare function buildFlowModelFromTree(root: AgentRunTreeNode | null, rootName: string, rootStatus: string, rootIcon: RootIcon): FlowModel | null;
|
|
28
30
|
//# sourceMappingURL=run-tree-flow-projection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-tree-flow-projection.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/run-tree-flow-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAY,SAAS,EAAE,QAAQ,EAAqB,MAAM,wBAAwB,CAAC;AA0D1F;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,GACnB,SAAS,GAAG,IAAI,CAsBlB"}
|
|
1
|
+
{"version":3,"file":"run-tree-flow-projection.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/run-tree-flow-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,8BAA8B,CAAC;AAC3F,OAAO,EAAY,SAAS,EAAE,QAAQ,EAAqB,MAAM,wBAAwB,CAAC;AA0D1F;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,GACnB,SAAS,GAAG,IAAI,CAsBlB;AAED,sDAAsD;AACtD,wBAAgB,sBAAsB,CAClC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,GACnB,SAAS,GAAG,IAAI,CAElB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FinalizeFlowModel } from './agent-run-flow.model';
|
|
2
2
|
/**
|
|
3
3
|
* How a tree node's kind maps to the visual vocabulary.
|
|
4
4
|
*
|
|
@@ -60,50 +60,54 @@ const ICON_BY_TYPE = {
|
|
|
60
60
|
* @param rootStatus the run's status
|
|
61
61
|
* @param rootIcon the agent's icon/logo, which only the form knows
|
|
62
62
|
*/
|
|
63
|
-
export function
|
|
63
|
+
export function BuildFlowModelFromTree(root, rootName, rootStatus, rootIcon) {
|
|
64
64
|
if (!root)
|
|
65
65
|
return null;
|
|
66
66
|
const rootNode = {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
67
|
+
Id: -1,
|
|
68
|
+
Name: rootName || root.Name || 'Agent run',
|
|
69
|
+
Type: 'agent',
|
|
70
|
+
Status: rootStatus || root.Status,
|
|
71
|
+
Model: null,
|
|
72
|
+
RealDur: durationSeconds(root),
|
|
73
|
+
T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: 0, Heat: 0,
|
|
74
|
+
Parent: null,
|
|
75
|
+
Children: [],
|
|
76
|
+
Raw: null,
|
|
77
|
+
Source: { entity: root.SourceEntity, id: root.SourceID },
|
|
78
|
+
IconClass: rootIcon.iconClass || 'fa-robot',
|
|
79
|
+
LogoUrl: rootIcon.logoUrl,
|
|
80
80
|
};
|
|
81
81
|
for (const child of root.Children)
|
|
82
82
|
attach(rootNode, child);
|
|
83
|
-
return
|
|
83
|
+
return FinalizeFlowModel(rootNode);
|
|
84
|
+
}
|
|
85
|
+
/** @deprecated Use {@link BuildFlowModelFromTree}. */
|
|
86
|
+
export function buildFlowModelFromTree(root, rootName, rootStatus, rootIcon) {
|
|
87
|
+
return BuildFlowModelFromTree(root, rootName, rootStatus, rootIcon);
|
|
84
88
|
}
|
|
85
89
|
/** Adds one tree node (and its descendants) under a flow node. */
|
|
86
90
|
function attach(parent, node) {
|
|
87
91
|
const type = flowTypeOf(node);
|
|
88
92
|
const flow = {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
type,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
parent,
|
|
97
|
-
|
|
98
|
-
|
|
93
|
+
Id: 0, // assigned during flatten
|
|
94
|
+
Name: node.Name,
|
|
95
|
+
Type: type,
|
|
96
|
+
Status: node.Status,
|
|
97
|
+
Model: null,
|
|
98
|
+
RealDur: durationSeconds(node),
|
|
99
|
+
T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: parent.Depth + 1, Heat: 0,
|
|
100
|
+
Parent: parent,
|
|
101
|
+
Children: [],
|
|
102
|
+
Raw: null,
|
|
99
103
|
// Every node keeps a pointer to the row it came from, so a click can open the right record
|
|
100
104
|
// whichever entity it lives in. `raw` stays null for task nodes because it is typed to a
|
|
101
105
|
// run STEP — the reason this generic reference exists.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
Source: { entity: node.SourceEntity, id: node.SourceID },
|
|
107
|
+
IconClass: ICON_BY_TYPE[type],
|
|
108
|
+
LogoUrl: null,
|
|
105
109
|
};
|
|
106
|
-
parent.
|
|
110
|
+
parent.Children.push(flow);
|
|
107
111
|
for (const child of node.Children)
|
|
108
112
|
attach(flow, child);
|
|
109
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-tree-flow-projection.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/run-tree-flow-projection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"run-tree-flow-projection.js","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/run-tree-flow-projection.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @fileoverview Projects a run tree into the `FlowModel` the three visualizations render.\n *\n * **Why this exists.** Flame Cascade, Subway Lines and Constellation all read one `FlowModel`, and\n * that model was built from raw `AIAgentRunStep` rows — which means none of them could show\n * task-graph work at all. A workflow's steps live in `MJ: Tasks`, not in the run's step list, so the\n * most interesting thing a run did was invisible in every visual view of it.\n *\n * One projection fixes all three, because they share the model. That is the whole reason to do it\n * here rather than teaching each renderer about tasks.\n *\n * **The normalization is deliberately NOT re-implemented.** Durations, the [0..1] playback window,\n * cumulative wall-clock and heat tiers all come from the same helpers the step-based builder uses,\n * so a graph node and a step node are laid out and coloured by identical rules. Re-deriving them\n * here is how the two sources would drift into looking like different products.\n */\nimport type { AgentRunTreeNode, AgentRunTreeNodeType } from '@memberjunction/ai-core-plus';\nimport { FlowNode, FlowModel, RootIcon, FinalizeFlowModel } from './agent-run-flow.model';\n\n/**\n * How a tree node's kind maps to the visual vocabulary.\n *\n * Keyed on `SourceKind` — the node's kind in its OWN vocabulary — with the node type as the\n * fallback. A run step says 'Actions'; a task says 'Action'. Both are an action to look at, and\n * flattening that difference at the source would have lost the design-time/executable distinction\n * everywhere else.\n */\nconst KIND_TO_FLOW_TYPE: Record<string, FlowNode['Type']> = {\n // Run-step vocabulary\n Actions: 'action',\n Prompt: 'prompt',\n 'Sub-Agent': 'subagent',\n Validation: 'validation',\n Decision: 'decision',\n Chat: 'prompt',\n Plan: 'decision',\n Skill: 'action',\n Tool: 'action',\n Compaction: 'other',\n TaskGraph: 'loop',\n // Task vocabulary\n Action: 'action',\n Agent: 'subagent',\n ForEach: 'loop',\n While: 'loop',\n Human: 'decision',\n External: 'other',\n};\n\n/** The visual type for a node, preferring its declared kind over its structural role. */\nfunction flowTypeOf(node: AgentRunTreeNode): FlowNode['Type'] {\n const byKind = node.SourceKind ? KIND_TO_FLOW_TYPE[node.SourceKind] : undefined;\n if (byKind) return byKind;\n\n const byType: Record<AgentRunTreeNodeType, FlowNode['Type']> = {\n Run: 'subagent',\n Step: 'other',\n TaskGraph: 'loop',\n Task: 'other',\n };\n return byType[node.NodeType] ?? 'other';\n}\n\n/** Font Awesome icon per visual type — the same vocabulary the step-based builder uses. */\nconst ICON_BY_TYPE: Record<FlowNode['Type'], string> = {\n agent: 'fa-robot',\n subagent: 'fa-robot',\n prompt: 'fa-brain',\n action: 'fa-gear',\n decision: 'fa-code-branch',\n loop: 'fa-repeat',\n validation: 'fa-circle-check',\n other: 'fa-circle',\n};\n\n/**\n * Builds the flow model from a run tree.\n *\n * @param root the tree, as loaded once by the run form and shared with every tab\n * @param rootName what to call the run itself\n * @param rootStatus the run's status\n * @param rootIcon the agent's icon/logo, which only the form knows\n */\nexport function BuildFlowModelFromTree(\n root: AgentRunTreeNode | null,\n rootName: string,\n rootStatus: string,\n rootIcon: RootIcon,\n): FlowModel | null {\n if (!root) return null;\n\n const rootNode: FlowNode = {\n Id: -1,\n Name: rootName || root.Name || 'Agent run',\n Type: 'agent',\n Status: rootStatus || root.Status,\n Model: null,\n RealDur: durationSeconds(root),\n T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: 0, Heat: 0,\n Parent: null,\n Children: [],\n Raw: null,\n Source: { entity: root.SourceEntity, id: root.SourceID },\n IconClass: rootIcon.iconClass || 'fa-robot',\n LogoUrl: rootIcon.logoUrl,\n };\n\n for (const child of root.Children) attach(rootNode, child);\n\n return FinalizeFlowModel(rootNode);\n}\n\n/** @deprecated Use {@link BuildFlowModelFromTree}. */\nexport function buildFlowModelFromTree(\n root: AgentRunTreeNode | null,\n rootName: string,\n rootStatus: string,\n rootIcon: RootIcon,\n): FlowModel | null {\n return BuildFlowModelFromTree(root, rootName, rootStatus, rootIcon);\n}\n\n/** Adds one tree node (and its descendants) under a flow node. */\nfunction attach(parent: FlowNode, node: AgentRunTreeNode): void {\n const type = flowTypeOf(node);\n const flow: FlowNode = {\n Id: 0, // assigned during flatten\n Name: node.Name,\n Type: type,\n Status: node.Status,\n Model: null,\n RealDur: durationSeconds(node),\n T0: 0, T1: 1, Tmid: 0.5, R0: 0, R1: 0, Depth: parent.Depth + 1, Heat: 0,\n Parent: parent,\n Children: [],\n Raw: null,\n // Every node keeps a pointer to the row it came from, so a click can open the right record\n // whichever entity it lives in. `raw` stays null for task nodes because it is typed to a\n // run STEP — the reason this generic reference exists.\n Source: { entity: node.SourceEntity, id: node.SourceID },\n IconClass: ICON_BY_TYPE[type],\n LogoUrl: null,\n };\n parent.Children.push(flow);\n for (const child of node.Children) attach(flow, child);\n}\n\n/**\n * A node's own duration, in seconds.\n *\n * Zero for anything unfinished. The normalization sums children into containers afterwards, so a\n * node that is still running contributes nothing rather than an arbitrary elapsed-so-far that would\n * make an in-flight run look longer than a settled one.\n */\nfunction durationSeconds(node: AgentRunTreeNode): number {\n return node.DurationMs != null ? node.DurationMs / 1000 : 0;\n}\n"]}
|
|
@@ -8,7 +8,19 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
* icon; labels are abbreviated and angled 30° so dense lines stay readable.
|
|
9
9
|
*/
|
|
10
10
|
export declare class SubwayLinesComponent implements OnDestroy {
|
|
11
|
-
|
|
11
|
+
SvgRef: ElementRef<SVGSVGElement>;
|
|
12
|
+
/** @deprecated Use {@link SvgRef}. */
|
|
13
|
+
get svgRef(): ElementRef<SVGSVGElement>;
|
|
14
|
+
/** @deprecated Use {@link SvgRef}. */
|
|
15
|
+
set svgRef(value: ElementRef<SVGSVGElement>);
|
|
16
|
+
NodeSelected: EventEmitter<FlowNode>;
|
|
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
|
+
*/
|
|
12
24
|
nodeSelected: EventEmitter<FlowNode>;
|
|
13
25
|
private _model;
|
|
14
26
|
private built;
|
|
@@ -37,6 +49,6 @@ export declare class SubwayLinesComponent implements OnDestroy {
|
|
|
37
49
|
private build;
|
|
38
50
|
private update;
|
|
39
51
|
static ɵfac: i0.ɵɵFactoryDeclaration<SubwayLinesComponent, never>;
|
|
40
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SubwayLinesComponent, "mj-agent-flow-subway", never, { "Model": { "alias": "Model"; "required": false; }; }, { "nodeSelected": "nodeSelected"; }, never, never, false, never>;
|
|
52
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SubwayLinesComponent, "mj-agent-flow-subway", never, { "Model": { "alias": "Model"; "required": false; }; }, { "NodeSelected": "NodeSelected"; "nodeSelected": "nodeSelected"; }, never, never, false, never>;
|
|
41
53
|
}
|
|
42
54
|
//# sourceMappingURL=subway-lines.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subway-lines.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/subway-lines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAa,SAAS,EAA8C,MAAM,eAAe,CAAC;AACrJ,OAAO,EACL,SAAS,EAAE,QAAQ,EACpB,MAAM,wBAAwB,CAAC;;AAOhC;;;;;GAKG;AACH,qBAQa,oBAAqB,YAAW,SAAS;IAChB,MAAM,EAAG,UAAU,CAAC,aAAa,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"subway-lines.component.d.ts","sourceRoot":"","sources":["../../../../../src/lib/custom/ai-agent-run/flow/subway-lines.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAiB,YAAY,EAAa,SAAS,EAA8C,MAAM,eAAe,CAAC;AACrJ,OAAO,EACL,SAAS,EAAE,QAAQ,EACpB,MAAM,wBAAwB,CAAC;;AAOhC;;;;;GAKG;AACH,qBAQa,oBAAqB,YAAW,SAAS;IAChB,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,CAA0B;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,KAAK,CAAC,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAC,CAAoB;IAExB,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,CAAO;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAO;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAO;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAM;IACpC,OAAO,KAAK,EAAE,GAA8C;IAErD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAE3C,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,KAAK;IA6Eb,OAAO,CAAC,MAAM;yCA3IH,oBAAoB;2CAApB,oBAAoB;CAsLhC"}
|