@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
|
@@ -187,7 +187,7 @@ function TemplateParamDialogComponent_Conditional_0_Conditional_15_ng_template_1
|
|
|
187
187
|
i0.ɵɵconditionalCreate(0, TemplateParamDialogComponent_Conditional_0_Conditional_15_ng_template_15_Conditional_3_Conditional_0_Template, 3, 0, "span", 54)(1, TemplateParamDialogComponent_Conditional_0_Conditional_15_ng_template_15_Conditional_3_Conditional_1_Template, 3, 0, "span", 55);
|
|
188
188
|
} if (rf & 2) {
|
|
189
189
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
190
|
-
i0.ɵɵconditional(ctx_r1.testResult.
|
|
190
|
+
i0.ɵɵconditional(ctx_r1.testResult.Success ? 0 : 1);
|
|
191
191
|
} }
|
|
192
192
|
function TemplateParamDialogComponent_Conditional_0_Conditional_15_ng_template_15_Template(rf, ctx) { if (rf & 1) {
|
|
193
193
|
i0.ɵɵelementStart(0, "span", 28);
|
|
@@ -217,7 +217,7 @@ function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_1
|
|
|
217
217
|
} if (rf & 2) {
|
|
218
218
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
219
219
|
i0.ɵɵadvance(4);
|
|
220
|
-
i0.ɵɵtextInterpolate1("", ctx_r1.testResult.
|
|
220
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.testResult.ExecutionTimeMs, "ms");
|
|
221
221
|
} }
|
|
222
222
|
function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
223
223
|
i0.ɵɵelementStart(0, "div", 63)(1, "h6", 64);
|
|
@@ -230,7 +230,7 @@ function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_1
|
|
|
230
230
|
} if (rf & 2) {
|
|
231
231
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
232
232
|
i0.ɵɵadvance(5);
|
|
233
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.testResult.
|
|
233
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.testResult.Output, " ");
|
|
234
234
|
} }
|
|
235
235
|
function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_18_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
236
236
|
i0.ɵɵelementStart(0, "div", 63)(1, "h6", 64);
|
|
@@ -243,7 +243,7 @@ function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_1
|
|
|
243
243
|
} if (rf & 2) {
|
|
244
244
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
245
245
|
i0.ɵɵadvance(5);
|
|
246
|
-
i0.ɵɵtextInterpolate(ctx_r1.testResult.
|
|
246
|
+
i0.ɵɵtextInterpolate(ctx_r1.testResult.Error);
|
|
247
247
|
} }
|
|
248
248
|
function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
249
249
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
@@ -267,13 +267,13 @@ function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_1
|
|
|
267
267
|
} if (rf & 2) {
|
|
268
268
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
269
269
|
i0.ɵɵadvance();
|
|
270
|
-
i0.ɵɵclassProp("success", ctx_r1.testResult.
|
|
270
|
+
i0.ɵɵclassProp("success", ctx_r1.testResult.Success)("error", !ctx_r1.testResult.Success);
|
|
271
271
|
i0.ɵɵadvance(5);
|
|
272
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r1.testResult.
|
|
272
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.testResult.Success ? "Success" : "Failed", " ");
|
|
273
273
|
i0.ɵɵadvance();
|
|
274
|
-
i0.ɵɵconditional(ctx_r1.testResult.
|
|
274
|
+
i0.ɵɵconditional(ctx_r1.testResult.ExecutionTimeMs ? 7 : -1);
|
|
275
275
|
i0.ɵɵadvance(7);
|
|
276
|
-
i0.ɵɵconditional(ctx_r1.testResult.
|
|
276
|
+
i0.ɵɵconditional(ctx_r1.testResult.Success && ctx_r1.testResult.Output ? 14 : !ctx_r1.testResult.Success && ctx_r1.testResult.Error ? 15 : -1);
|
|
277
277
|
} }
|
|
278
278
|
function TemplateParamDialogComponent_Conditional_0_Conditional_15_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
279
279
|
i0.ɵɵelement(0, "mj-empty-state", 27);
|
|
@@ -394,45 +394,125 @@ function TemplateParamDialogComponent_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
394
394
|
export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
395
395
|
constructor() {
|
|
396
396
|
super(...arguments);
|
|
397
|
-
this.
|
|
398
|
-
this.
|
|
399
|
-
this.
|
|
400
|
-
|
|
397
|
+
this.Template = null;
|
|
398
|
+
this.IsVisible = false;
|
|
399
|
+
this.IsVisibleChange = new EventEmitter();
|
|
400
|
+
/**
|
|
401
|
+
* @deprecated Use {@link IsVisibleChange}.
|
|
402
|
+
*
|
|
403
|
+
* The same emitter under the old binding name, so a template still binding
|
|
404
|
+
* (isVisibleChange) keeps working. Must stay AFTER IsVisibleChange: class fields
|
|
405
|
+
* initialise in order, and the other way round this captures undefined.
|
|
406
|
+
*/
|
|
407
|
+
this.isVisibleChange = this.IsVisibleChange;
|
|
408
|
+
this.OnClose = new EventEmitter();
|
|
409
|
+
/**
|
|
410
|
+
* @deprecated Use {@link OnClose}.
|
|
411
|
+
*
|
|
412
|
+
* The same emitter under the old binding name, so a template still binding
|
|
413
|
+
* (onClose) keeps working. Must stay AFTER OnClose: class fields
|
|
414
|
+
* initialise in order, and the other way round this captures undefined.
|
|
415
|
+
*/
|
|
416
|
+
this.onClose = this.OnClose;
|
|
401
417
|
this.parameters = [];
|
|
402
418
|
this.isLoading = false;
|
|
403
|
-
this.
|
|
404
|
-
this.
|
|
405
|
-
this.
|
|
406
|
-
this.
|
|
407
|
-
this.
|
|
408
|
-
this.
|
|
419
|
+
this.IsRunning = false;
|
|
420
|
+
this.TestResult = null;
|
|
421
|
+
this.HasUnsavedParameters = false;
|
|
422
|
+
this.ParametersExpanded = true;
|
|
423
|
+
this.JsonPreviewExpanded = false;
|
|
424
|
+
this.ResultsExpanded = true;
|
|
409
425
|
this.originalTemplateParams = [];
|
|
410
426
|
}
|
|
427
|
+
/** @deprecated Use {@link Template}. */
|
|
428
|
+
set template(value) {
|
|
429
|
+
this.Template = value;
|
|
430
|
+
}
|
|
431
|
+
/** @deprecated Use {@link Template}. */
|
|
432
|
+
get template() {
|
|
433
|
+
return this.Template;
|
|
434
|
+
}
|
|
435
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
436
|
+
get _isVisible() {
|
|
437
|
+
return this.IsVisible;
|
|
438
|
+
}
|
|
439
|
+
/** @deprecated Use {@link IsVisible}. */
|
|
440
|
+
set _isVisible(value) {
|
|
441
|
+
this.IsVisible = value;
|
|
442
|
+
}
|
|
411
443
|
get isVisible() {
|
|
412
|
-
return this.
|
|
444
|
+
return this.IsVisible;
|
|
413
445
|
}
|
|
414
446
|
set isVisible(value) {
|
|
415
|
-
const wasVisible = this.
|
|
416
|
-
this.
|
|
447
|
+
const wasVisible = this.IsVisible;
|
|
448
|
+
this.IsVisible = value;
|
|
417
449
|
// Reset dialog state when opening
|
|
418
450
|
if (value && !wasVisible) {
|
|
419
451
|
this.resetDialogState();
|
|
420
452
|
}
|
|
421
453
|
}
|
|
454
|
+
/** @deprecated Use {@link IsRunning}. */
|
|
455
|
+
get isRunning() {
|
|
456
|
+
return this.IsRunning;
|
|
457
|
+
}
|
|
458
|
+
/** @deprecated Use {@link IsRunning}. */
|
|
459
|
+
set isRunning(value) {
|
|
460
|
+
this.IsRunning = value;
|
|
461
|
+
}
|
|
462
|
+
/** @deprecated Use {@link TestResult}. */
|
|
463
|
+
get testResult() {
|
|
464
|
+
return this.TestResult;
|
|
465
|
+
}
|
|
466
|
+
/** @deprecated Use {@link TestResult}. */
|
|
467
|
+
set testResult(value) {
|
|
468
|
+
this.TestResult = value;
|
|
469
|
+
}
|
|
470
|
+
/** @deprecated Use {@link HasUnsavedParameters}. */
|
|
471
|
+
get hasUnsavedParameters() {
|
|
472
|
+
return this.HasUnsavedParameters;
|
|
473
|
+
}
|
|
474
|
+
/** @deprecated Use {@link HasUnsavedParameters}. */
|
|
475
|
+
set hasUnsavedParameters(value) {
|
|
476
|
+
this.HasUnsavedParameters = value;
|
|
477
|
+
}
|
|
478
|
+
/** @deprecated Use {@link ParametersExpanded}. */
|
|
479
|
+
get parametersExpanded() {
|
|
480
|
+
return this.ParametersExpanded;
|
|
481
|
+
}
|
|
482
|
+
/** @deprecated Use {@link ParametersExpanded}. */
|
|
483
|
+
set parametersExpanded(value) {
|
|
484
|
+
this.ParametersExpanded = value;
|
|
485
|
+
}
|
|
486
|
+
/** @deprecated Use {@link JsonPreviewExpanded}. */
|
|
487
|
+
get jsonPreviewExpanded() {
|
|
488
|
+
return this.JsonPreviewExpanded;
|
|
489
|
+
}
|
|
490
|
+
/** @deprecated Use {@link JsonPreviewExpanded}. */
|
|
491
|
+
set jsonPreviewExpanded(value) {
|
|
492
|
+
this.JsonPreviewExpanded = value;
|
|
493
|
+
}
|
|
494
|
+
/** @deprecated Use {@link ResultsExpanded}. */
|
|
495
|
+
get resultsExpanded() {
|
|
496
|
+
return this.ResultsExpanded;
|
|
497
|
+
}
|
|
498
|
+
/** @deprecated Use {@link ResultsExpanded}. */
|
|
499
|
+
set resultsExpanded(value) {
|
|
500
|
+
this.ResultsExpanded = value;
|
|
501
|
+
}
|
|
422
502
|
ngOnInit() {
|
|
423
|
-
if (this.
|
|
424
|
-
this.
|
|
503
|
+
if (this.Template) {
|
|
504
|
+
this.LoadTemplateParams();
|
|
425
505
|
}
|
|
426
506
|
}
|
|
427
|
-
async
|
|
428
|
-
if (!this.
|
|
507
|
+
async LoadTemplateParams() {
|
|
508
|
+
if (!this.Template?.ID)
|
|
429
509
|
return;
|
|
430
510
|
this.isLoading = true;
|
|
431
511
|
try {
|
|
432
512
|
const rv = RunView.FromMetadataProvider(this.ProviderToUse);
|
|
433
513
|
const results = await rv.RunView({
|
|
434
514
|
EntityName: 'MJ: Template Params',
|
|
435
|
-
ExtraFilter: `TemplateID='${this.
|
|
515
|
+
ExtraFilter: `TemplateID='${this.Template.ID}'`,
|
|
436
516
|
OrderBy: 'Name ASC'
|
|
437
517
|
});
|
|
438
518
|
this.originalTemplateParams = results.Results;
|
|
@@ -447,7 +527,7 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
447
527
|
}));
|
|
448
528
|
// If no template params, add one empty pair to start
|
|
449
529
|
if (this.parameters.length === 0) {
|
|
450
|
-
this.
|
|
530
|
+
this.AddParameter();
|
|
451
531
|
}
|
|
452
532
|
}
|
|
453
533
|
catch (error) {
|
|
@@ -458,26 +538,42 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
458
538
|
this.isLoading = false;
|
|
459
539
|
}
|
|
460
540
|
}
|
|
461
|
-
|
|
541
|
+
/** @deprecated Use {@link LoadTemplateParams}. */
|
|
542
|
+
async loadTemplateParams() {
|
|
543
|
+
return this.LoadTemplateParams();
|
|
544
|
+
}
|
|
545
|
+
AddParameter() {
|
|
462
546
|
this.parameters.push({
|
|
463
547
|
key: '',
|
|
464
548
|
value: '',
|
|
465
549
|
isFromTemplate: false
|
|
466
550
|
});
|
|
467
551
|
}
|
|
468
|
-
|
|
552
|
+
/** @deprecated Use {@link AddParameter}. */
|
|
553
|
+
addParameter() {
|
|
554
|
+
return this.AddParameter();
|
|
555
|
+
}
|
|
556
|
+
RemoveParameter(index) {
|
|
469
557
|
if (this.parameters.length > 1) {
|
|
470
558
|
this.parameters.splice(index, 1);
|
|
471
559
|
}
|
|
472
560
|
}
|
|
473
|
-
|
|
561
|
+
/** @deprecated Use {@link RemoveParameter}. */
|
|
562
|
+
removeParameter(index) {
|
|
563
|
+
return this.RemoveParameter(index);
|
|
564
|
+
}
|
|
565
|
+
OnParameterChange() {
|
|
474
566
|
// Check if we have new parameters not in template
|
|
475
|
-
this.
|
|
567
|
+
this.HasUnsavedParameters = this.parameters.some(param => param.key &&
|
|
476
568
|
!param.isFromTemplate &&
|
|
477
569
|
!this.originalTemplateParams.find(tp => tp.Name === param.key));
|
|
478
570
|
}
|
|
479
|
-
|
|
480
|
-
|
|
571
|
+
/** @deprecated Use {@link OnParameterChange}. */
|
|
572
|
+
onParameterChange() {
|
|
573
|
+
return this.OnParameterChange();
|
|
574
|
+
}
|
|
575
|
+
async RunTemplate() {
|
|
576
|
+
if (!this.Template?.ID)
|
|
481
577
|
return;
|
|
482
578
|
// Validate parameter names - check for empty parameter names
|
|
483
579
|
const emptyNameParams = this.parameters.filter(p => p.value && !p.key);
|
|
@@ -491,8 +587,8 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
491
587
|
MJNotificationService.Instance.CreateSimpleNotification(`Required parameters missing: ${invalidParams.map(p => p.key).join(', ')}`, 'warning');
|
|
492
588
|
return;
|
|
493
589
|
}
|
|
494
|
-
this.
|
|
495
|
-
this.
|
|
590
|
+
this.IsRunning = true;
|
|
591
|
+
this.TestResult = null;
|
|
496
592
|
try {
|
|
497
593
|
// Build context data object from parameters
|
|
498
594
|
const contextData = {};
|
|
@@ -509,42 +605,46 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
509
605
|
});
|
|
510
606
|
// Run the template via the Template.Run Remote Operation (provider-scoped; routes over the
|
|
511
607
|
// generic ExecuteRemoteOperation transport — no bespoke GraphQL client).
|
|
512
|
-
const opResult = await new TemplateRunOperation().Execute({ templateID: this.
|
|
608
|
+
const opResult = await new TemplateRunOperation().Execute({ templateID: this.Template.ID, data: contextData }, { provider: this.ProviderToUse });
|
|
513
609
|
{
|
|
514
|
-
this.
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
610
|
+
this.TestResult = {
|
|
611
|
+
Success: opResult.Success,
|
|
612
|
+
Output: opResult.Output?.output,
|
|
613
|
+
Error: opResult.ErrorMessage,
|
|
614
|
+
ExecutionTimeMs: opResult.Output?.executionTimeMs,
|
|
519
615
|
};
|
|
520
616
|
// Collapse parameters and expand results after execution
|
|
521
|
-
this.
|
|
522
|
-
this.
|
|
523
|
-
if (this.
|
|
524
|
-
MJNotificationService.Instance.CreateSimpleNotification(`Template executed successfully in ${this.
|
|
617
|
+
this.ParametersExpanded = false;
|
|
618
|
+
this.ResultsExpanded = true;
|
|
619
|
+
if (this.TestResult?.Success) {
|
|
620
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Template executed successfully in ${this.TestResult.ExecutionTimeMs || 0}ms`, 'success', 4000);
|
|
525
621
|
}
|
|
526
622
|
else {
|
|
527
|
-
MJNotificationService.Instance.CreateSimpleNotification(`Template execution failed: ${this.
|
|
623
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Template execution failed: ${this.TestResult?.Error || 'Unknown error'}`, 'error', 5000);
|
|
528
624
|
}
|
|
529
625
|
}
|
|
530
626
|
}
|
|
531
627
|
catch (error) {
|
|
532
628
|
console.error('Template test error:', error);
|
|
533
|
-
this.
|
|
534
|
-
|
|
535
|
-
|
|
629
|
+
this.TestResult = {
|
|
630
|
+
Success: false,
|
|
631
|
+
Error: error.message || 'Unknown error occurred'
|
|
536
632
|
};
|
|
537
633
|
// Still collapse parameters and expand results on error
|
|
538
|
-
this.
|
|
539
|
-
this.
|
|
540
|
-
MJNotificationService.Instance.CreateSimpleNotification(`Template test failed: ${this.
|
|
634
|
+
this.ParametersExpanded = false;
|
|
635
|
+
this.ResultsExpanded = true;
|
|
636
|
+
MJNotificationService.Instance.CreateSimpleNotification(`Template test failed: ${this.TestResult?.Error || 'Unknown error'}`, 'error', 5000);
|
|
541
637
|
}
|
|
542
638
|
finally {
|
|
543
|
-
this.
|
|
639
|
+
this.IsRunning = false;
|
|
544
640
|
}
|
|
545
641
|
}
|
|
546
|
-
|
|
547
|
-
|
|
642
|
+
/** @deprecated Use {@link RunTemplate}. */
|
|
643
|
+
async runTemplate() {
|
|
644
|
+
return this.RunTemplate();
|
|
645
|
+
}
|
|
646
|
+
async UpdateTemplateParams() {
|
|
647
|
+
if (!this.Template?.ID || !this.HasUnsavedParameters)
|
|
548
648
|
return;
|
|
549
649
|
const newParams = this.parameters.filter(param => param.key &&
|
|
550
650
|
!param.isFromTemplate &&
|
|
@@ -555,7 +655,7 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
555
655
|
const md = this.ProviderToUse;
|
|
556
656
|
for (const param of newParams) {
|
|
557
657
|
const templateParam = await md.GetEntityObject('MJ: Template Params');
|
|
558
|
-
templateParam.TemplateID = this.
|
|
658
|
+
templateParam.TemplateID = this.Template.ID;
|
|
559
659
|
templateParam.Name = param.key;
|
|
560
660
|
templateParam.Description = param.description || null;
|
|
561
661
|
templateParam.Type = 'Scalar'; // Default type
|
|
@@ -567,40 +667,44 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
567
667
|
}
|
|
568
668
|
}
|
|
569
669
|
MJNotificationService.Instance.CreateSimpleNotification(`Added ${newParams.length} new parameter(s) to template`, 'success');
|
|
570
|
-
this.
|
|
670
|
+
this.HasUnsavedParameters = false;
|
|
571
671
|
// Reload template params to sync
|
|
572
|
-
await this.
|
|
672
|
+
await this.LoadTemplateParams();
|
|
573
673
|
}
|
|
574
674
|
catch (error) {
|
|
575
675
|
console.error('Error updating template params:', error);
|
|
576
676
|
MJNotificationService.Instance.CreateSimpleNotification('Error saving template parameters', 'error');
|
|
577
677
|
}
|
|
578
678
|
}
|
|
679
|
+
/** @deprecated Use {@link UpdateTemplateParams}. */
|
|
680
|
+
async updateTemplateParams() {
|
|
681
|
+
return this.UpdateTemplateParams();
|
|
682
|
+
}
|
|
579
683
|
close() {
|
|
580
|
-
this.
|
|
581
|
-
this.
|
|
582
|
-
this.
|
|
684
|
+
this.IsVisible = false;
|
|
685
|
+
this.IsVisibleChange.emit(false);
|
|
686
|
+
this.OnClose.emit();
|
|
583
687
|
}
|
|
584
688
|
resetDialogState() {
|
|
585
689
|
// Reset expansion states for a clean testing experience
|
|
586
|
-
this.
|
|
587
|
-
this.
|
|
588
|
-
this.
|
|
690
|
+
this.ParametersExpanded = true; // Show params by default
|
|
691
|
+
this.JsonPreviewExpanded = false; // Hide JSON (developer-focused)
|
|
692
|
+
this.ResultsExpanded = true; // Show results when they exist
|
|
589
693
|
// Clear previous test results
|
|
590
|
-
this.
|
|
591
|
-
this.
|
|
694
|
+
this.TestResult = null;
|
|
695
|
+
this.IsRunning = false;
|
|
592
696
|
// Reset unsaved parameters flag
|
|
593
|
-
this.
|
|
697
|
+
this.HasUnsavedParameters = false;
|
|
594
698
|
}
|
|
595
|
-
|
|
596
|
-
if (!this.
|
|
699
|
+
SaveResults() {
|
|
700
|
+
if (!this.TestResult)
|
|
597
701
|
return;
|
|
598
|
-
const content = this.
|
|
599
|
-
? this.
|
|
600
|
-
: this.
|
|
702
|
+
const content = this.TestResult.Success
|
|
703
|
+
? this.TestResult.Output || 'No output'
|
|
704
|
+
: this.TestResult.Error || 'No error details';
|
|
601
705
|
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);
|
|
602
|
-
const templateName = this.
|
|
603
|
-
const status = this.
|
|
706
|
+
const templateName = this.Template?.Name?.replace(/[^a-zA-Z0-9]/g, '_') || 'template';
|
|
707
|
+
const status = this.TestResult.Success ? 'success' : 'error';
|
|
604
708
|
const filename = `${templateName}_${status}_${timestamp}.txt`;
|
|
605
709
|
// Create blob and download
|
|
606
710
|
const blob = new Blob([content], { type: 'text/plain' });
|
|
@@ -614,7 +718,11 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
614
718
|
window.URL.revokeObjectURL(url);
|
|
615
719
|
MJNotificationService.Instance.CreateSimpleNotification(`Results saved as ${filename}`, 'success');
|
|
616
720
|
}
|
|
617
|
-
|
|
721
|
+
/** @deprecated Use {@link SaveResults}. */
|
|
722
|
+
saveResults() {
|
|
723
|
+
return this.SaveResults();
|
|
724
|
+
}
|
|
725
|
+
get ParametersAsJson() {
|
|
618
726
|
const contextData = {};
|
|
619
727
|
this.parameters.forEach(param => {
|
|
620
728
|
if (param.key && param.value) {
|
|
@@ -628,8 +736,12 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
628
736
|
});
|
|
629
737
|
return JSON.stringify(contextData, null, 2);
|
|
630
738
|
}
|
|
739
|
+
/** @deprecated Use {@link ParametersAsJson}. */
|
|
740
|
+
get parametersAsJson() {
|
|
741
|
+
return this.ParametersAsJson;
|
|
742
|
+
}
|
|
631
743
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵTemplateParamDialogComponent_BaseFactory; return function TemplateParamDialogComponent_Factory(__ngFactoryType__) { return (ɵTemplateParamDialogComponent_BaseFactory || (ɵTemplateParamDialogComponent_BaseFactory = i0.ɵɵgetInheritedFactory(TemplateParamDialogComponent)))(__ngFactoryType__ || TemplateParamDialogComponent); }; })(); }
|
|
632
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TemplateParamDialogComponent, selectors: [["mj-template-param-dialog"]], inputs: { template: "template", isVisible: "isVisible" }, outputs: { isVisibleChange: "isVisibleChange", onClose: "onClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Visible", "Width"], [3, "Close", "Visible", "Width"], [1, "dialog-content", 2, "display", "flex", "flex-direction", "column", "height", "100%", "font-family", "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"], [1, "dlg-header"], [1, "dlg-header-row"], [1, "fa-solid", "fa-sliders"], [1, "required-marker"], [1, "dlg-loading"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "width", "100%"], ["mjButton", "", "variant", "outline", 3, "disabled"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "outline", 3, "click"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "12px 0"], [1, "dlg-info-text"], [1, "fa-solid", "fa-info-circle"], [1, "params-table"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No parameters defined yet"], [1, "json-preview-box"], [2, "margin-bottom", "16px", "flex", "1", "display", "flex", "flex-direction", "column", 3, "ExpandedChange", "Expanded"], [2, "padding", "12px 0", "flex", "1", "display", "flex", "flex-direction", "column"], [1, "dlg-loading", 2, "flex", "1"], [2, "flex", "1", "display", "flex", "flex-direction", "column"], ["Size", "compact", "Icon", "fa-solid fa-circle-play", "Title", "No test results yet. Run the template to see results here.", 1, "no-results-state"], [1, "dlg-panel-title"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "params-table-header"], [1, "params-table-row"], [1, "add-param-row"], ["mjButton", "", "variant", "success", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "param-name", 2, "display", "flex", "flex-direction", "column"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], ["title", "From template definition", 1, "fa-solid", "fa-database", "param-source-icon-template"], ["title", "Custom parameter", 1, "fa-solid", "fa-edit", "param-source-icon-custom"], [1, "param-required-marker"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "font-family", "'Courier New', monospace", "width", "100%", 3, "ngModel", "disabled"], [1, "param-value"], ["placeholder", "Enter value (JSON strings, numbers, objects)...", 1, "mj-textarea", 2, "font-family", "'Courier New', monospace", "font-size", "0.9em", "width", "100%", 3, "ngModelChange", "ngModel", "rows", "disabled"], [1, "param-actions"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove parameter", 3, "disabled"], [1, "param-key-text"], [1, "param-description-text"], [1, "param-type-text"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "font-family", "'Courier New', monospace", "width", "100%", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove parameter", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "primary", "size", "sm", 5, ["", "actions", ""], 3, "click", "disabled"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-chart-line"], [1, "result-badge", "success"], [1, "result-badge", "error"], [1, "fa-solid", "fa-check"], [1, "result-stats"], [1, "result-stat"], [1, "result-stat-label"], [1, "result-stat-value"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Save results to file", 3, "click"], [1, "fa-solid", "fa-download"], [2, "margin-bottom", "12px", "flex", "1", "display", "flex", "flex-direction", "column"], [1, "output-header"], [1, "fa-solid", "fa-check-circle", "success-icon"], [1, "output-box"], [1, "fa-solid", "fa-exclamation-triangle", "error-icon"], [1, "error-output-box"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-save"], [1, "fa-solid", "fa-play"]], template: function TemplateParamDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
744
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TemplateParamDialogComponent, selectors: [["mj-template-param-dialog"]], inputs: { Template: "Template", template: "template", isVisible: "isVisible" }, outputs: { IsVisibleChange: "IsVisibleChange", isVisibleChange: "isVisibleChange", OnClose: "OnClose", onClose: "onClose" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[3, "Visible", "Width"], [3, "Close", "Visible", "Width"], [1, "dialog-content", 2, "display", "flex", "flex-direction", "column", "height", "100%", "font-family", "'Segoe UI', Tahoma, Geneva, Verdana, sans-serif"], [1, "dlg-header"], [1, "dlg-header-row"], [1, "fa-solid", "fa-sliders"], [1, "required-marker"], [1, "dlg-loading"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "width", "100%"], ["mjButton", "", "variant", "outline", 3, "disabled"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "outline", 3, "click"], ["mjButton", "", "variant", "outline"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "12px 0"], [1, "dlg-info-text"], [1, "fa-solid", "fa-info-circle"], [1, "params-table"], ["Size", "compact", "Icon", "fa-solid fa-circle-info", "Title", "No parameters defined yet"], [1, "json-preview-box"], [2, "margin-bottom", "16px", "flex", "1", "display", "flex", "flex-direction", "column", 3, "ExpandedChange", "Expanded"], [2, "padding", "12px 0", "flex", "1", "display", "flex", "flex-direction", "column"], [1, "dlg-loading", 2, "flex", "1"], [2, "flex", "1", "display", "flex", "flex-direction", "column"], ["Size", "compact", "Icon", "fa-solid fa-circle-play", "Title", "No test results yet. Run the template to see results here.", 1, "no-results-state"], [1, "dlg-panel-title"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "params-table-header"], [1, "params-table-row"], [1, "add-param-row"], ["mjButton", "", "variant", "success", "size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], [1, "param-name", 2, "display", "flex", "flex-direction", "column"], [2, "display", "flex", "align-items", "center", "gap", "4px", "margin-bottom", "4px"], ["title", "From template definition", 1, "fa-solid", "fa-database", "param-source-icon-template"], ["title", "Custom parameter", 1, "fa-solid", "fa-edit", "param-source-icon-custom"], [1, "param-required-marker"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "font-family", "'Courier New', monospace", "width", "100%", 3, "ngModel", "disabled"], [1, "param-value"], ["placeholder", "Enter value (JSON strings, numbers, objects)...", 1, "mj-textarea", 2, "font-family", "'Courier New', monospace", "font-size", "0.9em", "width", "100%", 3, "ngModelChange", "ngModel", "rows", "disabled"], [1, "param-actions"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove parameter", 3, "disabled"], [1, "param-key-text"], [1, "param-description-text"], [1, "param-type-text"], ["type", "text", "placeholder", "Parameter name...", 1, "mj-input", 2, "font-family", "'Courier New', monospace", "width", "100%", 3, "ngModelChange", "ngModel", "disabled"], ["mjButton", "", "variant", "danger", "size", "sm", "title", "Remove parameter", 3, "click", "disabled"], [1, "fa-solid", "fa-times"], ["ngProjectAs", "[actions]", "mjButton", "", "variant", "primary", "size", "sm", 5, ["", "actions", ""], 3, "click", "disabled"], [1, "fa-solid", "fa-code"], [1, "fa-solid", "fa-chart-line"], [1, "result-badge", "success"], [1, "result-badge", "error"], [1, "fa-solid", "fa-check"], [1, "result-stats"], [1, "result-stat"], [1, "result-stat-label"], [1, "result-stat-value"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Save results to file", 3, "click"], [1, "fa-solid", "fa-download"], [2, "margin-bottom", "12px", "flex", "1", "display", "flex", "flex-direction", "column"], [1, "output-header"], [1, "fa-solid", "fa-check-circle", "success-icon"], [1, "output-box"], [1, "fa-solid", "fa-exclamation-triangle", "error-icon"], [1, "error-output-box"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-save"], [1, "fa-solid", "fa-play"]], template: function TemplateParamDialogComponent_Template(rf, ctx) { if (rf & 1) {
|
|
633
745
|
i0.ɵɵconditionalCreate(0, TemplateParamDialogComponent_Conditional_0_Template, 27, 8, "mj-dialog", 0);
|
|
634
746
|
} if (rf & 2) {
|
|
635
747
|
i0.ɵɵconditional(ctx._isVisible ? 0 : -1);
|
|
@@ -637,13 +749,19 @@ export class TemplateParamDialogComponent extends BaseAngularComponent {
|
|
|
637
749
|
}
|
|
638
750
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TemplateParamDialogComponent, [{
|
|
639
751
|
type: Component,
|
|
640
|
-
args: [{ standalone: false, selector: 'mj-template-param-dialog', template: "@if (_isVisible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"800\"\n (Close)=\"close()\">\n <mj-dialog-titlebar>Test Template: {{ template?.Name || 'Unknown' }}</mj-dialog-titlebar>\n <div class=\"dialog-content\" style=\"display: flex; flex-direction: column; height: 100%; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\">\n <!-- Header Section -->\n <div class=\"dlg-header\">\n <div class=\"dlg-header-row\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h5>Template Testing</h5>\n </div>\n <p>\n Configure parameter values for testing. Parameters with <span class=\"required-marker\">*</span> are required.\n </p>\n </div>\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"dlg-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading template parameters...</span>\n </div>\n } @else {\n <!-- Template Parameters Section -->\n <mj-accordion-panel\n [(Expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Template Parameters\n @if (parameters.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ parameters.length }}</span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div class=\"dlg-info-text\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for template testing. Values can be JSON objects, strings, or numbers.\n </div>\n <!-- Parameters Table -->\n @if (parameters.length > 0) {\n <div class=\"params-table\">\n <!-- Header -->\n <div class=\"params-table-header\">\n <div>Parameter Name</div>\n <div>Value</div>\n <div>Actions</div>\n </div>\n <!-- Parameter Rows -->\n @for (param of parameters; track $index; let i = $index) {\n <div class=\"params-table-row\">\n <!-- Parameter Name -->\n <div class=\"param-name\" style=\"display: flex; flex-direction: column;\">\n <div style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n @if (param.isFromTemplate) {\n <i class=\"fa-solid fa-database param-source-icon-template\" title=\"From template definition\"></i>\n } @else {\n <i class=\"fa-solid fa-edit param-source-icon-custom\" title=\"Custom parameter\"></i>\n }\n @if (param.isRequired) {\n <span class=\"param-required-marker\">*</span>\n }\n </div>\n @if (param.isFromTemplate) {\n <div class=\"param-key-text\">\n {{ param.key }}\n </div>\n @if (param.description) {\n <div class=\"param-description-text\">\n {{ param.description }}\n </div>\n }\n @if (param.type && param.type !== 'Scalar') {\n <div class=\"param-type-text\">\n Type: {{ param.type }}\n </div>\n }\n } @else {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"param.key\"\n (ngModelChange)=\"onParameterChange()\"\n placeholder=\"Parameter name...\"\n [disabled]=\"isRunning\"\n style=\"font-family: 'Courier New', monospace; width: 100%;\" />\n }\n </div>\n <!-- Parameter Value -->\n <div class=\"param-value\">\n <textarea class=\"mj-textarea\"\n [(ngModel)]=\"param.value\"\n (ngModelChange)=\"onParameterChange()\"\n [rows]=\"2\"\n placeholder=\"Enter value (JSON strings, numbers, objects)...\"\n [disabled]=\"isRunning\"\n style=\"font-family: 'Courier New', monospace; font-size: 0.9em; width: 100%;\"></textarea>\n </div>\n <!-- Actions -->\n <div class=\"param-actions\">\n @if (!param.isFromTemplate && parameters.length > 1) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"removeParameter(i)\"\n [disabled]=\"isRunning\"\n title=\"Remove parameter\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n }\n <!-- Add Parameter Row -->\n <div class=\"add-param-row\">\n <button mjButton variant=\"success\" size=\"sm\"\n (click)=\"addParameter()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No parameters defined yet\">\n <button ngProjectAs=\"[actions]\" mjButton variant=\"primary\" size=\"sm\"\n (click)=\"addParameter()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n </mj-empty-state>\n }\n </div>\n </mj-accordion-panel>\n <!-- JSON Preview Section -->\n <mj-accordion-panel\n [(Expanded)]=\"jsonPreviewExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Context Data (JSON)\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div class=\"json-preview-box\">\n <pre>{{ parametersAsJson }}</pre>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Test Results Section -->\n <mj-accordion-panel\n [(Expanded)]=\"resultsExpanded\"\n style=\"margin-bottom: 16px; flex: 1; display: flex; flex-direction: column;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Test Results\n @if (testResult) {\n @if (testResult.success) {\n <span class=\"result-badge success\"><i class=\"fa-solid fa-check\"></i> Success</span>\n } @else {\n <span class=\"result-badge error\"><i class=\"fa-solid fa-times\"></i> Failed</span>\n }\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0; flex: 1; display: flex; flex-direction: column;\">\n @if (isRunning) {\n <div class=\"dlg-loading\" style=\"flex: 1;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Running template...</span>\n </div>\n } @else if (testResult) {\n <div style=\"flex: 1; display: flex; flex-direction: column;\">\n <!-- Result Header with Stats -->\n <div class=\"result-stats\" [class.success]=\"testResult.success\" [class.error]=\"!testResult.success\">\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">STATUS</div>\n <div class=\"result-stat-value\">\n {{ testResult.success ? 'Success' : 'Failed' }}\n </div>\n </div>\n @if (testResult.executionTimeMs) {\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">EXECUTION TIME</div>\n <div class=\"result-stat-value\">{{ testResult.executionTimeMs }}ms</div>\n </div>\n }\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">ACTIONS</div>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"saveResults()\"\n title=\"Save results to file\">\n <i class=\"fa-solid fa-download\"></i>\n </button>\n </div>\n </div>\n <!-- Result Content -->\n <div style=\"flex: 1; display: flex; flex-direction: column;\">\n @if (testResult.success && testResult.output) {\n <div style=\"margin-bottom: 12px; flex: 1; display: flex; flex-direction: column;\">\n <h6 class=\"output-header\">\n <i class=\"fa-solid fa-check-circle success-icon\"></i>\n Template Output\n </h6>\n <div class=\"output-box\">\n {{ testResult.output }}\n </div>\n </div>\n } @else if (!testResult.success && testResult.error) {\n <div style=\"margin-bottom: 12px; flex: 1; display: flex; flex-direction: column;\">\n <h6 class=\"output-header\">\n <i class=\"fa-solid fa-exclamation-triangle error-icon\"></i>\n Error Details\n </h6>\n <div class=\"error-output-box\">{{ testResult.error }}</div>\n </div>\n }\n </div>\n </div>\n } @else {\n <mj-empty-state class=\"no-results-state\"\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-play\"\n Title=\"No test results yet. Run the template to see results here.\" />\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n <!-- Dialog Actions -->\n <mj-dialog-actions>\n <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n <div>\n @if (hasUnsavedParameters) {\n <button mjButton variant=\"outline\"\n (click)=\"updateTemplateParams()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-save\"></i> Update Template Params\n </button>\n }\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button mjButton variant=\"outline\" (click)=\"close()\">\n Close\n </button>\n @if (testResult) {\n <button mjButton variant=\"outline\" (click)=\"saveResults()\">\n <i class=\"fa-solid fa-download\"></i> Save Results\n </button>\n }\n <button mjButton variant=\"primary\"\n [disabled]=\"isRunning || isLoading\"\n (click)=\"runTemplate()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Template\n }\n </button>\n </div>\n </div>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".dialog-content {\n min-height: 500px;\n max-height: 650px;\n}\n\n.parameter-row:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.parameter-row:last-child {\n border-bottom: none;\n}\n\n.param-name,\n.param-value {\n min-width: 0;\n}\n\n.param-name .mj-input,\n.param-value .mj-textarea {\n width: 100%;\n}\n\n.json-preview pre {\n line-height: 1.3;\n}\n\n.test-results {\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n}\n\n.result-content pre {\n line-height: 1.4;\n}\n\n/* Scrollbar styling */\n.parameters-list::-webkit-scrollbar,\n.result-content::-webkit-scrollbar,\n.json-preview > div::-webkit-scrollbar {\n width: 6px;\n}\n\n.parameters-list::-webkit-scrollbar-track,\n.result-content::-webkit-scrollbar-track,\n.json-preview > div::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.parameters-list::-webkit-scrollbar-thumb,\n.result-content::-webkit-scrollbar-thumb,\n.json-preview > div::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.parameters-list::-webkit-scrollbar-thumb:hover,\n.result-content::-webkit-scrollbar-thumb:hover,\n.json-preview > div::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}\n\n.parameter-row {\n align-items: flex-start;\n}\n\n.parameters-section {\n flex-shrink: 0;\n}\n\n.param-name > div {\n word-wrap: break-word;\n overflow-wrap: break-word;\n}\n\n.header-section > div:first-child:hover,\n.json-preview-header > div:first-child:hover,\n.result-header:hover {\n background-color: var(--mj-bg-surface-card) !important;\n transition: background-color 0.2s ease;\n}\n\n.fa-chevron-down,\n.fa-chevron-right {\n transition: transform 0.2s ease;\n}\n\n.test-results .result-header [mjButton] {\n opacity: 0.8;\n transition: opacity 0.2s ease;\n}\n\n.test-results .result-header:hover [mjButton] {\n opacity: 1;\n}\n\n/* Dialog header section */\n.dlg-header {\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.dlg-header-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.dlg-header-row i {\n color: var(--mj-text-muted);\n font-size: 1.2em;\n}\n\n.dlg-header-row h5 {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.dlg-header p {\n margin: 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.dlg-header .required-marker {\n color: var(--mj-status-error);\n}\n\n/* Loading state */\n.dlg-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.dlg-loading i {\n font-size: 24px;\n color: var(--mj-text-muted);\n margin-right: 12px;\n}\n\n.dlg-loading span {\n color: var(--mj-text-muted);\n}\n\n/* Panel title */\n.dlg-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.dlg-panel-title i {\n color: var(--mj-text-muted);\n}\n\n\n/* Info text */\n.dlg-info-text {\n margin-bottom: 12px;\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Parameters table */\n.params-table {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n}\n\n.params-table-header {\n display: grid;\n grid-template-columns: 200px 1fr 60px;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n font-weight: 600;\n font-size: 0.85em;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.params-table-row {\n display: grid;\n grid-template-columns: 200px 1fr 60px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n align-items: start;\n background: var(--mj-bg-surface);\n}\n\n.param-source-icon-template {\n color: var(--mj-status-success);\n font-size: 0.75em;\n}\n\n.param-source-icon-custom {\n color: var(--mj-status-warning);\n font-size: 0.75em;\n}\n\n.param-required-marker {\n color: var(--mj-status-error);\n font-weight: bold;\n}\n\n.param-key-text {\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 4px 0;\n word-break: break-word;\n}\n\n.param-description-text {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n margin-top: 2px;\n font-style: italic;\n word-break: break-word;\n}\n\n.param-type-text {\n font-size: 0.7em;\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.param-actions {\n display: flex;\n align-items: start;\n justify-content: center;\n padding-top: 4px;\n}\n\n/* Add parameter row */\n.add-param-row {\n padding: 12px 16px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* JSON preview */\n.json-preview-box {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 12px;\n font-family: 'Courier New', monospace;\n font-size: 0.85em;\n color: var(--mj-text-primary);\n max-height: 200px;\n overflow-y: auto;\n}\n\n.json-preview-box pre {\n margin: 0;\n white-space: pre-wrap;\n}\n\n/* Result status badges */\n.result-badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n font-weight: 600;\n}\n\n.result-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n font-weight: 600;\n}\n\n/* Result stats box */\n.result-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.result-stats.success {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-stats.error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-stat {\n text-align: center;\n}\n\n.result-stat-label {\n font-size: 0.75em;\n margin-bottom: 2px;\n color: var(--mj-text-muted);\n}\n\n.result-stat-value {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* Output section */\n.output-header {\n margin: 0 0 8px 0;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.output-header .success-icon {\n color: var(--mj-status-success);\n}\n\n.output-header .error-icon {\n color: var(--mj-status-error);\n}\n\n.output-box {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 12px;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n overflow: auto;\n height: 150px;\n color: var(--mj-text-primary);\n}\n\n.error-output-box {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 4px;\n padding: 12px;\n color: var(--mj-status-error);\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n overflow: auto;\n height: 150px;\n}\n\n/* No results state \u2014 fills the results pane */\nmj-empty-state.no-results-state {\n flex: 1;\n}\n"] }]
|
|
641
|
-
}], null, {
|
|
752
|
+
args: [{ standalone: false, selector: 'mj-template-param-dialog', template: "@if (_isVisible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"800\"\n (Close)=\"close()\">\n <mj-dialog-titlebar>Test Template: {{ template?.Name || 'Unknown' }}</mj-dialog-titlebar>\n <div class=\"dialog-content\" style=\"display: flex; flex-direction: column; height: 100%; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\">\n <!-- Header Section -->\n <div class=\"dlg-header\">\n <div class=\"dlg-header-row\">\n <i class=\"fa-solid fa-sliders\"></i>\n <h5>Template Testing</h5>\n </div>\n <p>\n Configure parameter values for testing. Parameters with <span class=\"required-marker\">*</span> are required.\n </p>\n </div>\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"dlg-loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading template parameters...</span>\n </div>\n } @else {\n <!-- Template Parameters Section -->\n <mj-accordion-panel\n [(Expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Template Parameters\n @if (parameters.length > 0) {\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ parameters.length }}</span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div class=\"dlg-info-text\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for template testing. Values can be JSON objects, strings, or numbers.\n </div>\n <!-- Parameters Table -->\n @if (parameters.length > 0) {\n <div class=\"params-table\">\n <!-- Header -->\n <div class=\"params-table-header\">\n <div>Parameter Name</div>\n <div>Value</div>\n <div>Actions</div>\n </div>\n <!-- Parameter Rows -->\n @for (param of parameters; track $index; let i = $index) {\n <div class=\"params-table-row\">\n <!-- Parameter Name -->\n <div class=\"param-name\" style=\"display: flex; flex-direction: column;\">\n <div style=\"display: flex; align-items: center; gap: 4px; margin-bottom: 4px;\">\n @if (param.isFromTemplate) {\n <i class=\"fa-solid fa-database param-source-icon-template\" title=\"From template definition\"></i>\n } @else {\n <i class=\"fa-solid fa-edit param-source-icon-custom\" title=\"Custom parameter\"></i>\n }\n @if (param.isRequired) {\n <span class=\"param-required-marker\">*</span>\n }\n </div>\n @if (param.isFromTemplate) {\n <div class=\"param-key-text\">\n {{ param.key }}\n </div>\n @if (param.description) {\n <div class=\"param-description-text\">\n {{ param.description }}\n </div>\n }\n @if (param.type && param.type !== 'Scalar') {\n <div class=\"param-type-text\">\n Type: {{ param.type }}\n </div>\n }\n } @else {\n <input type=\"text\" class=\"mj-input\"\n [(ngModel)]=\"param.key\"\n (ngModelChange)=\"onParameterChange()\"\n placeholder=\"Parameter name...\"\n [disabled]=\"isRunning\"\n style=\"font-family: 'Courier New', monospace; width: 100%;\" />\n }\n </div>\n <!-- Parameter Value -->\n <div class=\"param-value\">\n <textarea class=\"mj-textarea\"\n [(ngModel)]=\"param.value\"\n (ngModelChange)=\"onParameterChange()\"\n [rows]=\"2\"\n placeholder=\"Enter value (JSON strings, numbers, objects)...\"\n [disabled]=\"isRunning\"\n style=\"font-family: 'Courier New', monospace; font-size: 0.9em; width: 100%;\"></textarea>\n </div>\n <!-- Actions -->\n <div class=\"param-actions\">\n @if (!param.isFromTemplate && parameters.length > 1) {\n <button mjButton variant=\"danger\" size=\"sm\"\n (click)=\"removeParameter(i)\"\n [disabled]=\"isRunning\"\n title=\"Remove parameter\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n }\n <!-- Add Parameter Row -->\n <div class=\"add-param-row\">\n <button mjButton variant=\"success\" size=\"sm\"\n (click)=\"addParameter()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n </div>\n } @else {\n <mj-empty-state\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-info\"\n Title=\"No parameters defined yet\">\n <button ngProjectAs=\"[actions]\" mjButton variant=\"primary\" size=\"sm\"\n (click)=\"addParameter()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n </mj-empty-state>\n }\n </div>\n </mj-accordion-panel>\n <!-- JSON Preview Section -->\n <mj-accordion-panel\n [(Expanded)]=\"jsonPreviewExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Context Data (JSON)\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div class=\"json-preview-box\">\n <pre>{{ parametersAsJson }}</pre>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Test Results Section -->\n <mj-accordion-panel\n [(Expanded)]=\"resultsExpanded\"\n style=\"margin-bottom: 16px; flex: 1; display: flex; flex-direction: column;\">\n <ng-template mjAccordionTitle>\n <span class=\"dlg-panel-title\">\n <i class=\"fa-solid fa-chart-line\"></i>\n Test Results\n @if (testResult) {\n @if (testResult.Success) {\n <span class=\"result-badge success\"><i class=\"fa-solid fa-check\"></i> Success</span>\n } @else {\n <span class=\"result-badge error\"><i class=\"fa-solid fa-times\"></i> Failed</span>\n }\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0; flex: 1; display: flex; flex-direction: column;\">\n @if (isRunning) {\n <div class=\"dlg-loading\" style=\"flex: 1;\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Running template...</span>\n </div>\n } @else if (testResult) {\n <div style=\"flex: 1; display: flex; flex-direction: column;\">\n <!-- Result Header with Stats -->\n <div class=\"result-stats\" [class.success]=\"testResult.Success\" [class.error]=\"!testResult.Success\">\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">STATUS</div>\n <div class=\"result-stat-value\">\n {{ testResult.Success ? 'Success' : 'Failed' }}\n </div>\n </div>\n @if (testResult.ExecutionTimeMs) {\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">EXECUTION TIME</div>\n <div class=\"result-stat-value\">{{ testResult.ExecutionTimeMs }}ms</div>\n </div>\n }\n <div class=\"result-stat\">\n <div class=\"result-stat-label\">ACTIONS</div>\n <button mjButton variant=\"flat\" size=\"sm\"\n (click)=\"saveResults()\"\n title=\"Save results to file\">\n <i class=\"fa-solid fa-download\"></i>\n </button>\n </div>\n </div>\n <!-- Result Content -->\n <div style=\"flex: 1; display: flex; flex-direction: column;\">\n @if (testResult.Success && testResult.Output) {\n <div style=\"margin-bottom: 12px; flex: 1; display: flex; flex-direction: column;\">\n <h6 class=\"output-header\">\n <i class=\"fa-solid fa-check-circle success-icon\"></i>\n Template Output\n </h6>\n <div class=\"output-box\">\n {{ testResult.Output }}\n </div>\n </div>\n } @else if (!testResult.Success && testResult.Error) {\n <div style=\"margin-bottom: 12px; flex: 1; display: flex; flex-direction: column;\">\n <h6 class=\"output-header\">\n <i class=\"fa-solid fa-exclamation-triangle error-icon\"></i>\n Error Details\n </h6>\n <div class=\"error-output-box\">{{ testResult.Error }}</div>\n </div>\n }\n </div>\n </div>\n } @else {\n <mj-empty-state class=\"no-results-state\"\n Size=\"compact\"\n Icon=\"fa-solid fa-circle-play\"\n Title=\"No test results yet. Run the template to see results here.\" />\n }\n </div>\n </mj-accordion-panel>\n }\n </div>\n <!-- Dialog Actions -->\n <mj-dialog-actions>\n <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n <div>\n @if (hasUnsavedParameters) {\n <button mjButton variant=\"outline\"\n (click)=\"updateTemplateParams()\"\n [disabled]=\"isRunning\">\n <i class=\"fa-solid fa-save\"></i> Update Template Params\n </button>\n }\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <button mjButton variant=\"outline\" (click)=\"close()\">\n Close\n </button>\n @if (testResult) {\n <button mjButton variant=\"outline\" (click)=\"saveResults()\">\n <i class=\"fa-solid fa-download\"></i> Save Results\n </button>\n }\n <button mjButton variant=\"primary\"\n [disabled]=\"isRunning || isLoading\"\n (click)=\"runTemplate()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Template\n }\n </button>\n </div>\n </div>\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".dialog-content {\n min-height: 500px;\n max-height: 650px;\n}\n\n.parameter-row:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.parameter-row:last-child {\n border-bottom: none;\n}\n\n.param-name,\n.param-value {\n min-width: 0;\n}\n\n.param-name .mj-input,\n.param-value .mj-textarea {\n width: 100%;\n}\n\n.json-preview pre {\n line-height: 1.3;\n}\n\n.test-results {\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n}\n\n.result-content pre {\n line-height: 1.4;\n}\n\n/* Scrollbar styling */\n.parameters-list::-webkit-scrollbar,\n.result-content::-webkit-scrollbar,\n.json-preview > div::-webkit-scrollbar {\n width: 6px;\n}\n\n.parameters-list::-webkit-scrollbar-track,\n.result-content::-webkit-scrollbar-track,\n.json-preview > div::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-card);\n border-radius: 3px;\n}\n\n.parameters-list::-webkit-scrollbar-thumb,\n.result-content::-webkit-scrollbar-thumb,\n.json-preview > div::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: 3px;\n}\n\n.parameters-list::-webkit-scrollbar-thumb:hover,\n.result-content::-webkit-scrollbar-thumb:hover,\n.json-preview > div::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-muted);\n}\n\n.parameter-row {\n align-items: flex-start;\n}\n\n.parameters-section {\n flex-shrink: 0;\n}\n\n.param-name > div {\n word-wrap: break-word;\n overflow-wrap: break-word;\n}\n\n.header-section > div:first-child:hover,\n.json-preview-header > div:first-child:hover,\n.result-header:hover {\n background-color: var(--mj-bg-surface-card) !important;\n transition: background-color 0.2s ease;\n}\n\n.fa-chevron-down,\n.fa-chevron-right {\n transition: transform 0.2s ease;\n}\n\n.test-results .result-header [mjButton] {\n opacity: 0.8;\n transition: opacity 0.2s ease;\n}\n\n.test-results .result-header:hover [mjButton] {\n opacity: 1;\n}\n\n/* Dialog header section */\n.dlg-header {\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.dlg-header-row {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.dlg-header-row i {\n color: var(--mj-text-muted);\n font-size: 1.2em;\n}\n\n.dlg-header-row h5 {\n margin: 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.dlg-header p {\n margin: 0;\n color: var(--mj-text-muted);\n font-size: 0.9em;\n}\n\n.dlg-header .required-marker {\n color: var(--mj-status-error);\n}\n\n/* Loading state */\n.dlg-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.dlg-loading i {\n font-size: 24px;\n color: var(--mj-text-muted);\n margin-right: 12px;\n}\n\n.dlg-loading span {\n color: var(--mj-text-muted);\n}\n\n/* Panel title */\n.dlg-panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.dlg-panel-title i {\n color: var(--mj-text-muted);\n}\n\n\n/* Info text */\n.dlg-info-text {\n margin-bottom: 12px;\n color: var(--mj-text-muted);\n font-size: 0.85em;\n}\n\n/* Parameters table */\n.params-table {\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n}\n\n.params-table-header {\n display: grid;\n grid-template-columns: 200px 1fr 60px;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n font-weight: 600;\n font-size: 0.85em;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.params-table-row {\n display: grid;\n grid-template-columns: 200px 1fr 60px;\n gap: 12px;\n padding: 12px 16px;\n border-bottom: 1px solid var(--mj-border-default);\n align-items: start;\n background: var(--mj-bg-surface);\n}\n\n.param-source-icon-template {\n color: var(--mj-status-success);\n font-size: 0.75em;\n}\n\n.param-source-icon-custom {\n color: var(--mj-status-warning);\n font-size: 0.75em;\n}\n\n.param-required-marker {\n color: var(--mj-status-error);\n font-weight: bold;\n}\n\n.param-key-text {\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 4px 0;\n word-break: break-word;\n}\n\n.param-description-text {\n font-size: 0.75em;\n color: var(--mj-text-muted);\n margin-top: 2px;\n font-style: italic;\n word-break: break-word;\n}\n\n.param-type-text {\n font-size: 0.7em;\n color: var(--mj-brand-primary);\n margin-top: 2px;\n}\n\n.param-actions {\n display: flex;\n align-items: start;\n justify-content: center;\n padding-top: 4px;\n}\n\n/* Add parameter row */\n.add-param-row {\n padding: 12px 16px;\n text-align: center;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-border-default);\n}\n\n/* JSON preview */\n.json-preview-box {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 12px;\n font-family: 'Courier New', monospace;\n font-size: 0.85em;\n color: var(--mj-text-primary);\n max-height: 200px;\n overflow-y: auto;\n}\n\n.json-preview-box pre {\n margin: 0;\n white-space: pre-wrap;\n}\n\n/* Result status badges */\n.result-badge-success {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 30%, transparent);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n font-weight: 600;\n}\n\n.result-badge-error {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, transparent);\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 0.7em;\n font-weight: 600;\n}\n\n/* Result stats box */\n.result-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\n gap: 12px;\n margin-bottom: 16px;\n padding: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.result-stats.success {\n background: color-mix(in srgb, var(--mj-status-success) 10%, var(--mj-bg-surface));\n}\n\n.result-stats.error {\n background: color-mix(in srgb, var(--mj-status-error) 10%, var(--mj-bg-surface));\n}\n\n.result-stat {\n text-align: center;\n}\n\n.result-stat-label {\n font-size: 0.75em;\n margin-bottom: 2px;\n color: var(--mj-text-muted);\n}\n\n.result-stat-value {\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n/* Output section */\n.output-header {\n margin: 0 0 8px 0;\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.output-header .success-icon {\n color: var(--mj-status-success);\n}\n\n.output-header .error-icon {\n color: var(--mj-status-error);\n}\n\n.output-box {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 12px;\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n overflow: auto;\n height: 150px;\n color: var(--mj-text-primary);\n}\n\n.error-output-box {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 20%, var(--mj-bg-surface));\n border-radius: 4px;\n padding: 12px;\n color: var(--mj-status-error);\n font-family: 'Courier New', monospace;\n font-size: 0.9em;\n white-space: pre-wrap;\n overflow: auto;\n height: 150px;\n}\n\n/* No results state \u2014 fills the results pane */\nmj-empty-state.no-results-state {\n flex: 1;\n}\n"] }]
|
|
753
|
+
}], null, { Template: [{
|
|
754
|
+
type: Input
|
|
755
|
+
}], template: [{
|
|
642
756
|
type: Input
|
|
643
757
|
}], isVisible: [{
|
|
644
758
|
type: Input
|
|
759
|
+
}], IsVisibleChange: [{
|
|
760
|
+
type: Output
|
|
645
761
|
}], isVisibleChange: [{
|
|
646
762
|
type: Output
|
|
763
|
+
}], OnClose: [{
|
|
764
|
+
type: Output
|
|
647
765
|
}], onClose: [{
|
|
648
766
|
type: Output
|
|
649
767
|
}] }); })();
|