@memberjunction/ng-core-entity-forms 6.2.0-edge.0 → 6.2.0-edge.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-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 +794 -262
- 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 +686 -238
- 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/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 +209 -28
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +494 -138
- 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 +110 -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 +858 -86
- package/dist/lib/custom/RecordProcesses/record-process-form.component.js.map +1 -1
- 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 +142 -17
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +333 -113
- 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 +217 -27
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +549 -169
- 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 +390 -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 +1015 -343
- 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 +2 -2
- 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/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/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +59 -51
- 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/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/MJUser/mjuser.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +155 -119
- package/dist/lib/generated/Entities/MJUser/mjuser.form.component.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/shared/components/template-editor.component.d.ts +133 -14
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +322 -124
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/package.json +43 -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":"AAAA,OAAO,EACL,SAAS,EAAc,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,EAC7D,uBAAuB,EAAE,iBAAiB,EAC3C,MAAM,eAAe,CAAC;AACvB,OAAO,EAAuB,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;;;AAIvE;;;;;;GAMG;AASH,MAAM,OAAO,kBAAkB;IAR/B;QAmBY,iBAAY,GAAG,IAAI,YAAY,EAAY,CAAC;QAEtD;;;;;;WAMG;QACO,iBAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACjC,qBAAgB,GAAG,IAAI,YAAY,EAAQ,CAAC;QAEtD;;;;;;WAMG;QACO,qBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE3C,WAAM,GAAqB,IAAI,CAAC;QAChC,UAAK,GAAG,KAAK,CAAC;QACd,cAAS,GAAG,KAAK,CAAC;QAClB,UAAK,GAAG,IAAI,GAAG,EAAe,CAAC;QAE/B,eAAU,GAAG,CAAC,CAAC,CAAC;QAChB,cAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QAErB,WAAM,GAAG,GAAG,CAAC;QACb,WAAM,GAAG,EAAE,CAAC;QACZ,SAAI,GAAG,EAAE,CAAC;QACV,WAAM,GAAG,EAAE,CAAC;QACZ,SAAI,GAAG,EAAE,CAAC;QAEnB,SAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9B,YAAO,GAAG,KAAK,CAAC;QAChB,UAAK,GAAG,KAAK,CAAC;QACd,eAAU,GAAG,KAAK,CAAC;QACnB,UAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QA2G7C,+EAA+E;QAEvE,YAAO,GAAG,CAAC,CAAa,EAAQ,EAAE;YACxC,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/E,CAAC,CAAC;QACM,WAAM,GAAG,GAAS,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5J,cAAS,GAAG,CAAC,CAAa,EAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7F,WAAM,GAAG,CAAC,CAAa,EAAQ,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,OAAO;YAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YACrE,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC,CAAC;QACM,SAAI,GAAG,GAAS,EAAE;YACxB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAAC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAChD,CAAC,CAAC;KA6EH;IA1PC,sCAAsC;IACtC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,sCAAsC;IACtC,IAAI,MAAM,CAAC,KAAgC;QACzC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IA0CD,IAAa,KAAK,CAAC,CAAmB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAErI,MAAM,CAAC,EAAU,EAAE,GAAW;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAAC,CAAC;IAChE,CAAC;IAED,WAAW,KAAW,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IAEvC,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;QACvC,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC,UAAU;gBAAE,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,+EAA+E;IAEvE,YAAY;QAClB,MAAM,GAAG,GAAe,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAW,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,eAAe,CAAC,CAAW;QACjC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAEO,UAAU,CAAC,GAAY;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAEpC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoC,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/F,+CAA+C;QAC/C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,SAAS;YACjD,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC;YACpD,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1K,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;YAChC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAClC,GAAmD,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;YAEvE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAChC,IAAoD,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;YAC/E,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC;YACrC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE;gBACzB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBACrD,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,2BAA2B;gBACtE,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI;aAC5E,EAAE,IAAI,CAAC,CAAC;YACT,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7D,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YACjF,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC9D,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACpF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACjJ,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpF,MAAM,GAAG,GAAG,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/G,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3G,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/N,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE9G,qEAAqE;YACrE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC5C,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC9B,EAAkD,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC7E,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;gBACjF,MAAM,GAAG,GAAG,WAAW;oBACrB,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI;oBAChE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;gBACnE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;oBAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjH,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAAC,CAAC;QACvE,IAAI,GAAG;YAAE,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;;YAClD,IAAI,CAAC,SAAS,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc,CAAC,CAAW;QAChC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;YAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAuBO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACtC,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAChE,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACO,eAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;QACvC,GAAG,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAEO,SAAS;QACf,IAAI,CAAC,KAAK,EAAE,YAAY,CAAC,WAAW,EAAE,aAAa,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5G,CAAC;IACO,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,MAAc;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACrC,CAAC;IACO,SAAS;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,EAAE,GAAI,IAAI,CAAC,KAA4B,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC;QAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1H,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAEM,MAAM,KAAW,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,2FAA2F;IACnN,OAAO,KAAW,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,2FAA2F;IACxN,SAAS,KAAW,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE9C,yCAAyC;IAClC,SAAS;QACd,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED,gEAAgE;IACzD,MAAM,KAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACjC,OAAO,KAAW,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACnC,QAAQ,KAAW,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAE7C,8EAA8E;IAEtE,WAAW,CAAC,CAAW;QAC7B,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1D,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACO,QAAQ;QACd,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO;QACnC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,2FAA2F;IACpF,QAAQ;QACb,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC;YAAE,OAAO;QACnC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IACO,cAAc;QACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC;YACxC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAClF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;IACL,CAAC;mHA5PU,kBAAkB;oEAAlB,kBAAkB;;;;;;YCxB/B,8BAAqB;;YACnB,4BAAiC;YACnC,iBAAM;;;iFDsBO,kBAAkB;cAR9B,SAAS;6BACI,KAAK,YACP,yBAAyB,iBAGpB,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM;;kBAG9C,SAAS;mBAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;kBAUjC,MAAM;;kBASN,MAAM;;kBACN,MAAM;;kBASN,MAAM;;kBAsBN,KAAK;;kFApDK,kBAAkB","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"}
|