@memberjunction/ng-core-entity-forms 3.4.0 → 4.1.0
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/README.md +85 -2
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts +13 -25
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +33 -379
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +15 -14
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +1 -0
- package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
- 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 +14 -13
- 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 +45 -15
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1443 -1267
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +15 -14
- 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.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +12 -12
- 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.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +9 -8
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +14 -14
- 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.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +12 -11
- 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.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +18 -16
- 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 +3 -8
- 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 +107 -77
- 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.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +9 -9
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +1 -8
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +599 -587
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +11 -10
- 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 +1 -6
- 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 +20 -21
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +2 -6
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +64 -59
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +73 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +1592 -914
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts +15 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +51 -30
- package/dist/lib/custom/EntityActions/entityaction.form.component.js.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts +1 -1
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +437 -448
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-category-dialog.component.js +28 -29
- package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +1 -3
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +189 -188
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +90 -89
- package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-param-dialog.component.js +76 -75
- package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/template-params-grid.component.js +98 -93
- package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts +0 -1
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +28 -39
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts +0 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/entity-link-pill.component.js +16 -18
- package/dist/lib/custom/Tests/entity-link-pill.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +7 -13
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +440 -423
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts +0 -7
- package/dist/lib/custom/Tests/test-rubric-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-rubric-form.component.js +11 -20
- package/dist/lib/custom/Tests/test-rubric-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-feedback-form.component.d.ts +0 -7
- 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 +18 -25
- 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 +5 -12
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +423 -410
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +7 -13
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +665 -642
- 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 +7 -13
- 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 +635 -606
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- 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 +240 -243
- 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-step-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +42 -40
- 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.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +37 -36
- 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.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +68 -78
- 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-visualization.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +6 -6
- package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +5 -10
- 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 +310 -292
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +50 -54
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +29 -63
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/shared/entity-selector-dialog.component.js +85 -82
- package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAction/aiaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAction/aiaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAction/aiaction.form.component.js +36 -41
- package/dist/lib/generated/Entities/AIAction/aiaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js +252 -267
- package/dist/lib/generated/Entities/AIAgent/aiagent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.js +34 -42
- package/dist/lib/generated/Entities/AIAgentAction/aiagentaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentArtifactType/aiagentartifacttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentArtifactType/aiagentartifacttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentArtifactType/aiagentartifacttype.form.component.js +19 -27
- package/dist/lib/generated/Entities/AIAgentArtifactType/aiagentartifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js +26 -32
- package/dist/lib/generated/Entities/AIAgentConfiguration/aiagentconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentDataSource/aiagentdatasource.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentDataSource/aiagentdatasource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentDataSource/aiagentdatasource.form.component.js +43 -47
- package/dist/lib/generated/Entities/AIAgentDataSource/aiagentdatasource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js +48 -66
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.js +26 -30
- package/dist/lib/generated/Entities/AIAgentLearningCycle/aiagentlearningcycle.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentModality/aiagentmodality.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentModality/aiagentmodality.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentModality/aiagentmodality.form.component.js +24 -30
- package/dist/lib/generated/Entities/AIAgentModality/aiagentmodality.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.js +20 -26
- package/dist/lib/generated/Entities/AIAgentModel/aiagentmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +44 -64
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.js +22 -26
- package/dist/lib/generated/Entities/AIAgentNoteType/aiagentnotetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentPermission/aiagentpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentPermission/aiagentpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentPermission/aiagentpermission.form.component.js +27 -35
- package/dist/lib/generated/Entities/AIAgentPermission/aiagentpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.js +25 -35
- package/dist/lib/generated/Entities/AIAgentPrompt/aiagentprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRelationship/aiagentrelationship.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentRelationship/aiagentrelationship.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRelationship/aiagentrelationship.form.component.js +29 -35
- package/dist/lib/generated/Entities/AIAgentRelationship/aiagentrelationship.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.js +27 -35
- package/dist/lib/generated/Entities/AIAgentRequest/aiagentrequest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js +121 -150
- package/dist/lib/generated/Entities/AIAgentRun/aiagentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunMedia/aiagentrunmedia.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentRunMedia/aiagentrunmedia.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunMedia/aiagentrunmedia.form.component.js +37 -47
- package/dist/lib/generated/Entities/AIAgentRunMedia/aiagentrunmedia.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +52 -59
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js +55 -66
- package/dist/lib/generated/Entities/AIAgentStep/aiagentstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js +24 -30
- package/dist/lib/generated/Entities/AIAgentStepPath/aiagentsteppath.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js +37 -42
- package/dist/lib/generated/Entities/AIAgentType/aiagenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIArchitecture/aiarchitecture.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIArchitecture/aiarchitecture.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIArchitecture/aiarchitecture.form.component.js +42 -47
- package/dist/lib/generated/Entities/AIArchitecture/aiarchitecture.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js +86 -97
- package/dist/lib/generated/Entities/AIConfiguration/aiconfiguration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.js +23 -27
- package/dist/lib/generated/Entities/AIConfigurationParam/aiconfigurationparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.js +19 -29
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModality/aimodality.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModality/aimodality.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModality/aimodality.form.component.js +70 -73
- package/dist/lib/generated/Entities/AIModality/aimodality.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js +179 -184
- package/dist/lib/generated/Entities/AIModel/aimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.js +21 -27
- package/dist/lib/generated/Entities/AIModelAction/aimodelaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelArchitecture/aimodelarchitecture.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelArchitecture/aimodelarchitecture.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelArchitecture/aimodelarchitecture.form.component.js +23 -29
- package/dist/lib/generated/Entities/AIModelArchitecture/aimodelarchitecture.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js +33 -43
- package/dist/lib/generated/Entities/AIModelCost/aimodelcost.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelModality/aimodelmodality.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelModality/aimodelmodality.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelModality/aimodelmodality.form.component.js +31 -37
- package/dist/lib/generated/Entities/AIModelModality/aimodelmodality.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js +21 -24
- package/dist/lib/generated/Entities/AIModelPriceType/aimodelpricetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js +22 -25
- package/dist/lib/generated/Entities/AIModelPriceUnitType/aimodelpriceunittype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js +35 -42
- package/dist/lib/generated/Entities/AIModelType/aimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js +39 -48
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js +161 -174
- package/dist/lib/generated/Entities/AIPrompt/aiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.js +35 -40
- package/dist/lib/generated/Entities/AIPromptCategory/aipromptcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js +44 -55
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +134 -163
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRunMedia/aipromptrunmedia.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPromptRunMedia/aipromptrunmedia.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRunMedia/aipromptrunmedia.form.component.js +43 -52
- package/dist/lib/generated/Entities/AIPromptRunMedia/aipromptrunmedia.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.js +21 -24
- package/dist/lib/generated/Entities/AIPromptType/aiprompttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +36 -50
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +76 -81
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.js +25 -31
- package/dist/lib/generated/Entities/AIVendorType/aivendortype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.js +28 -31
- package/dist/lib/generated/Entities/AIVendorTypeDefinition/aivendortypedefinition.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.js +37 -40
- package/dist/lib/generated/Entities/APIApplication/apiapplication.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.js +24 -30
- package/dist/lib/generated/Entities/APIApplicationScope/apiapplicationscope.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIKey/apikey.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIKey/apikey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIKey/apikey.form.component.js +49 -56
- package/dist/lib/generated/Entities/APIKey/apikey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.js +17 -23
- package/dist/lib/generated/Entities/APIKeyApplication/apikeyapplication.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.js +24 -30
- package/dist/lib/generated/Entities/APIKeyScope/apikeyscope.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.js +30 -36
- package/dist/lib/generated/Entities/APIKeyUsageLog/apikeyusagelog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/APIScope/apiscope.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/APIScope/apiscope.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/APIScope/apiscope.form.component.js +47 -52
- package/dist/lib/generated/Entities/APIScope/apiscope.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AccessControlRule/accesscontrolrule.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AccessControlRule/accesscontrolrule.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AccessControlRule/accesscontrolrule.form.component.js +32 -38
- package/dist/lib/generated/Entities/AccessControlRule/accesscontrolrule.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Action/action.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Action/action.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Action/action.form.component.js +130 -141
- package/dist/lib/generated/Entities/Action/action.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js +19 -25
- package/dist/lib/generated/Entities/ActionAuthorization/actionauthorization.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js +43 -48
- package/dist/lib/generated/Entities/ActionCategory/actioncategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js +21 -27
- package/dist/lib/generated/Entities/ActionContext/actioncontext.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.js +21 -24
- package/dist/lib/generated/Entities/ActionContextType/actioncontexttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.js +27 -33
- package/dist/lib/generated/Entities/ActionExecutionLog/actionexecutionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.js +23 -26
- package/dist/lib/generated/Entities/ActionFilter/actionfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.js +19 -25
- package/dist/lib/generated/Entities/ActionLibrary/actionlibrary.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.js +42 -47
- package/dist/lib/generated/Entities/ActionParam/actionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.js +22 -26
- package/dist/lib/generated/Entities/ActionResultCode/actionresultcode.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Application/application.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Application/application.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Application/application.form.component.js +64 -67
- package/dist/lib/generated/Entities/Application/application.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.js +26 -32
- package/dist/lib/generated/Entities/ApplicationEntity/applicationentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.js +22 -26
- package/dist/lib/generated/Entities/ApplicationSetting/applicationsetting.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Artifact/artifact.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Artifact/artifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Artifact/artifact.form.component.js +47 -56
- package/dist/lib/generated/Entities/Artifact/artifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactPermission/artifactpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ArtifactPermission/artifactpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactPermission/artifactpermission.form.component.js +25 -33
- package/dist/lib/generated/Entities/ArtifactPermission/artifactpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js +61 -66
- package/dist/lib/generated/Entities/ArtifactType/artifacttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.js +22 -28
- package/dist/lib/generated/Entities/ArtifactUse/artifactuse.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.js +55 -62
- package/dist/lib/generated/Entities/ArtifactVersion/artifactversion.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ArtifactVersionAttribute/artifactversionattribute.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ArtifactVersionAttribute/artifactversionattribute.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ArtifactVersionAttribute/artifactversionattribute.form.component.js +26 -30
- package/dist/lib/generated/Entities/ArtifactVersionAttribute/artifactversionattribute.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.js +26 -36
- package/dist/lib/generated/Entities/AuditLog/auditlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.js +38 -45
- package/dist/lib/generated/Entities/AuditLogType/auditlogtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Authorization/authorization.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Authorization/authorization.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Authorization/authorization.form.component.js +60 -65
- package/dist/lib/generated/Entities/Authorization/authorization.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.js +19 -25
- package/dist/lib/generated/Entities/AuthorizationRole/authorizationrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Collection/collection.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Collection/collection.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Collection/collection.form.component.js +50 -59
- package/dist/lib/generated/Entities/Collection/collection.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CollectionArtifact/collectionartifact.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CollectionArtifact/collectionartifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CollectionArtifact/collectionartifact.form.component.js +19 -25
- package/dist/lib/generated/Entities/CollectionArtifact/collectionartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CollectionPermission/collectionpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CollectionPermission/collectionpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CollectionPermission/collectionpermission.form.component.js +25 -33
- package/dist/lib/generated/Entities/CollectionPermission/collectionpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.js +32 -35
- package/dist/lib/generated/Entities/CommunicationBaseMessageType/communicationbasemessagetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js +28 -38
- package/dist/lib/generated/Entities/CommunicationLog/communicationlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.js +37 -40
- package/dist/lib/generated/Entities/CommunicationProvider/communicationprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.js +31 -38
- package/dist/lib/generated/Entities/CommunicationProviderMessageType/communicationprovidermessagetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.js +36 -41
- package/dist/lib/generated/Entities/CommunicationRun/communicationrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Company/company.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Company/company.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Company/company.form.component.js +60 -63
- package/dist/lib/generated/Entities/Company/company.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.js +71 -78
- package/dist/lib/generated/Entities/CompanyIntegration/companyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.js +20 -26
- package/dist/lib/generated/Entities/CompanyIntegrationRecordMap/companyintegrationrecordmap.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.js +54 -59
- package/dist/lib/generated/Entities/CompanyIntegrationRun/companyintegrationrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js +23 -29
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.js +37 -42
- package/dist/lib/generated/Entities/CompanyIntegrationRunDetail/companyintegrationrundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Component/component.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Component/component.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Component/component.form.component.js +66 -71
- package/dist/lib/generated/Entities/Component/component.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ComponentDependency/componentdependency.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ComponentDependency/componentdependency.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentDependency/componentdependency.form.component.js +17 -23
- package/dist/lib/generated/Entities/ComponentDependency/componentdependency.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibrary/componentlibrary.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ComponentLibrary/componentlibrary.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibrary/componentlibrary.form.component.js +33 -36
- package/dist/lib/generated/Entities/ComponentLibrary/componentlibrary.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibraryLink/componentlibrarylink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ComponentLibraryLink/componentlibrarylink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentLibraryLink/componentlibrarylink.form.component.js +21 -27
- package/dist/lib/generated/Entities/ComponentLibraryLink/componentlibrarylink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ComponentRegistry/componentregistry.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ComponentRegistry/componentregistry.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ComponentRegistry/componentregistry.form.component.js +26 -29
- package/dist/lib/generated/Entities/ComponentRegistry/componentregistry.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js +27 -30
- package/dist/lib/generated/Entities/ContentFileType/contentfiletype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js +38 -54
- package/dist/lib/generated/Entities/ContentItem/contentitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js +17 -22
- package/dist/lib/generated/Entities/ContentItemAttribute/contentitemattribute.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js +16 -21
- package/dist/lib/generated/Entities/ContentItemTag/contentitemtag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js +19 -24
- package/dist/lib/generated/Entities/ContentProcessRun/contentprocessrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js +41 -55
- package/dist/lib/generated/Entities/ContentSource/contentsource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js +17 -22
- package/dist/lib/generated/Entities/ContentSourceParam/contentsourceparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js +27 -30
- package/dist/lib/generated/Entities/ContentSourceType/contentsourcetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js +16 -18
- package/dist/lib/generated/Entities/ContentSourceTypeParam/contentsourcetypeparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js +33 -40
- package/dist/lib/generated/Entities/ContentType/contenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js +15 -17
- package/dist/lib/generated/Entities/ContentTypeAttribute/contenttypeattribute.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js +80 -95
- package/dist/lib/generated/Entities/Conversation/conversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js +44 -51
- package/dist/lib/generated/Entities/ConversationArtifact/conversationartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.js +19 -25
- package/dist/lib/generated/Entities/ConversationArtifactPermission/conversationartifactpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.js +31 -36
- package/dist/lib/generated/Entities/ConversationArtifactVersion/conversationartifactversion.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +111 -130
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js +21 -29
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailAttachment/conversationdetailattachment.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationDetailAttachment/conversationdetailattachment.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailAttachment/conversationdetailattachment.form.component.js +34 -42
- package/dist/lib/generated/Entities/ConversationDetailAttachment/conversationdetailattachment.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +20 -32
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Credential/credential.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Credential/credential.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Credential/credential.form.component.js +72 -61
- package/dist/lib/generated/Entities/Credential/credential.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.js +36 -41
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js +40 -43
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.js +60 -71
- package/dist/lib/generated/Entities/Dashboard/dashboard.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.js +52 -59
- package/dist/lib/generated/Entities/DashboardCategory/dashboardcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategoryLink/dashboardcategorylink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardCategoryLink/dashboardcategorylink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategoryLink/dashboardcategorylink.form.component.js +21 -29
- package/dist/lib/generated/Entities/DashboardCategoryLink/dashboardcategorylink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategoryPermission/dashboardcategorypermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardCategoryPermission/dashboardcategorypermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardCategoryPermission/dashboardcategorypermission.form.component.js +28 -36
- package/dist/lib/generated/Entities/DashboardCategoryPermission/dashboardcategorypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardPartType/dashboardparttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardPartType/dashboardparttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardPartType/dashboardparttype.form.component.js +21 -23
- package/dist/lib/generated/Entities/DashboardPartType/dashboardparttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardPermission/dashboardpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardPermission/dashboardpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardPermission/dashboardpermission.form.component.js +25 -33
- package/dist/lib/generated/Entities/DashboardPermission/dashboardpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.js +26 -34
- package/dist/lib/generated/Entities/DashboardUserPreference/dashboarduserpreference.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.js +19 -25
- package/dist/lib/generated/Entities/DashboardUserState/dashboarduserstate.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DataContext/datacontext.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DataContext/datacontext.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DataContext/datacontext.form.component.js +44 -49
- package/dist/lib/generated/Entities/DataContext/datacontext.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.js +32 -42
- package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Dataset/dataset.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Dataset/dataset.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Dataset/dataset.form.component.js +21 -24
- package/dist/lib/generated/Entities/Dataset/dataset.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.js +25 -31
- package/dist/lib/generated/Entities/DatasetItem/datasetitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.js +39 -50
- package/dist/lib/generated/Entities/DuplicateRun/duplicaterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +33 -38
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js +27 -35
- package/dist/lib/generated/Entities/DuplicateRunDetailMatch/duplicaterundetailmatch.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Employee/employee.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Employee/employee.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Employee/employee.form.component.js +66 -71
- package/dist/lib/generated/Entities/Employee/employee.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +22 -28
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +19 -33
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +17 -23
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.js +25 -28
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.js +31 -38
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.js +25 -28
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Entity/entity.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Entity/entity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Entity/entity.form.component.js +424 -391
- package/dist/lib/generated/Entities/Entity/entity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.js +33 -43
- package/dist/lib/generated/Entities/EntityAIAction/entityaiaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.js +41 -48
- package/dist/lib/generated/Entities/EntityAction/entityaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +23 -25
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +21 -27
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.js +22 -25
- package/dist/lib/generated/Entities/EntityActionInvocationType/entityactioninvocationtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +24 -26
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +17 -22
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.js +27 -34
- package/dist/lib/generated/Entities/EntityCommunicationMessageType/entitycommunicationmessagetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.js +52 -65
- package/dist/lib/generated/Entities/EntityDocument/entitydocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.js +22 -26
- package/dist/lib/generated/Entities/EntityDocumentRun/entitydocumentrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.js +22 -26
- package/dist/lib/generated/Entities/EntityDocumentSetting/entitydocumentsetting.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.js +20 -24
- package/dist/lib/generated/Entities/EntityDocumentType/entitydocumenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js +102 -103
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js +25 -29
- package/dist/lib/generated/Entities/EntityFieldValue/entityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.js +33 -45
- package/dist/lib/generated/Entities/EntityPermission/entitypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.js +32 -40
- package/dist/lib/generated/Entities/EntityRecordDocument/entityrecorddocument.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.js +54 -60
- package/dist/lib/generated/Entities/EntityRelationship/entityrelationship.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.js +22 -25
- package/dist/lib/generated/Entities/EntityRelationshipDisplayComponent/entityrelationshipdisplaycomponent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.js +19 -23
- package/dist/lib/generated/Entities/EntitySetting/entitysetting.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Environment/environment.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Environment/environment.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Environment/environment.form.component.js +65 -69
- package/dist/lib/generated/Entities/Environment/environment.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +29 -35
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.js +23 -25
- package/dist/lib/generated/Entities/ExplorerNavigationItem/explorernavigationitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/File/file.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/File/file.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/File/file.form.component.js +55 -62
- package/dist/lib/generated/Entities/File/file.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.js +35 -40
- package/dist/lib/generated/Entities/FileCategory/filecategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.js +19 -25
- package/dist/lib/generated/Entities/FileEntityRecordLink/fileentityrecordlink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/FileStorageAccount/filestorageaccount.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/FileStorageAccount/filestorageaccount.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/FileStorageAccount/filestorageaccount.form.component.js +22 -28
- package/dist/lib/generated/Entities/FileStorageAccount/filestorageaccount.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.js +52 -55
- package/dist/lib/generated/Entities/FileStorageProvider/filestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.js +35 -43
- package/dist/lib/generated/Entities/GeneratedCode/generatedcode.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.js +35 -40
- package/dist/lib/generated/Entities/GeneratedCodeCategory/generatedcodecategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Integration/integration.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Integration/integration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Integration/integration.form.component.js +41 -44
- package/dist/lib/generated/Entities/Integration/integration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.js +27 -31
- package/dist/lib/generated/Entities/IntegrationURLFormat/integrationurlformat.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Library/library.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Library/library.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Library/library.form.component.js +32 -35
- package/dist/lib/generated/Entities/Library/library.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.js +18 -22
- package/dist/lib/generated/Entities/LibraryItem/libraryitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/List/list.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/List/list.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/List/list.form.component.js +52 -63
- package/dist/lib/generated/Entities/List/list.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.js +39 -46
- package/dist/lib/generated/Entities/ListCategory/listcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.js +23 -27
- package/dist/lib/generated/Entities/ListDetail/listdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ListInvitation/listinvitation.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ListInvitation/listinvitation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ListInvitation/listinvitation.form.component.js +22 -28
- package/dist/lib/generated/Entities/ListInvitation/listinvitation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ListShare/listshare.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ListShare/listshare.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ListShare/listshare.form.component.js +19 -25
- package/dist/lib/generated/Entities/ListShare/listshare.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.js +87 -56
- package/dist/lib/generated/Entities/MCPServer/mcpserver.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.js +110 -65
- package/dist/lib/generated/Entities/MCPServerConnection/mcpserverconnection.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.js +24 -32
- package/dist/lib/generated/Entities/MCPServerConnectionPermission/mcpserverconnectionpermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.js +23 -29
- package/dist/lib/generated/Entities/MCPServerConnectionTool/mcpserverconnectiontool.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.js +48 -57
- package/dist/lib/generated/Entities/MCPServerTool/mcpservertool.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.js +36 -44
- package/dist/lib/generated/Entities/MCPToolExecutionLog/mcptoolexecutionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/OAuthAuthServerMetadataCache/oauthauthservermetadatacache.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/OAuthAuthServerMetadataCache/oauthauthservermetadatacache.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/OAuthAuthServerMetadataCache/oauthauthservermetadatacache.form.component.js +73 -0
- package/dist/lib/generated/Entities/OAuthAuthServerMetadataCache/oauthauthservermetadatacache.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/OAuthAuthorizationState/oauthauthorizationstate.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/OAuthAuthorizationState/oauthauthorizationstate.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/OAuthAuthorizationState/oauthauthorizationstate.form.component.js +75 -0
- package/dist/lib/generated/Entities/OAuthAuthorizationState/oauthauthorizationstate.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/OAuthClientRegistration/oauthclientregistration.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/OAuthClientRegistration/oauthclientregistration.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/OAuthClientRegistration/oauthclientregistration.form.component.js +75 -0
- package/dist/lib/generated/Entities/OAuthClientRegistration/oauthclientregistration.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/OAuthToken/oauthtoken.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/OAuthToken/oauthtoken.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/OAuthToken/oauthtoken.form.component.js +61 -0
- package/dist/lib/generated/Entities/OAuthToken/oauthtoken.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.js +21 -24
- package/dist/lib/generated/Entities/OutputDeliveryType/outputdeliverytype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.js +22 -25
- package/dist/lib/generated/Entities/OutputFormatType/outputformattype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.js +21 -24
- package/dist/lib/generated/Entities/OutputTriggerType/outputtriggertype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Project/project.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Project/project.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Project/project.form.component.js +49 -56
- package/dist/lib/generated/Entities/Project/project.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/PublicLink/publiclink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/PublicLink/publiclink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/PublicLink/publiclink.form.component.js +30 -34
- package/dist/lib/generated/Entities/PublicLink/publiclink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Query/query.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Query/query.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Query/query.form.component.js +79 -86
- package/dist/lib/generated/Entities/Query/query.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.js +42 -49
- package/dist/lib/generated/Entities/QueryCategory/querycategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.js +20 -26
- package/dist/lib/generated/Entities/QueryEntity/queryentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueryField/queryfield.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueryField/queryfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueryField/queryfield.form.component.js +32 -38
- package/dist/lib/generated/Entities/QueryField/queryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js +28 -32
- package/dist/lib/generated/Entities/QueryParameter/queryparameter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.js +18 -26
- package/dist/lib/generated/Entities/QueryPermission/querypermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Queue/queue.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Queue/queue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Queue/queue.form.component.js +45 -50
- package/dist/lib/generated/Entities/Queue/queue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.js +30 -34
- package/dist/lib/generated/Entities/QueueTask/queuetask.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/QueueType/queuetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/QueueType/queuetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/QueueType/queuetype.form.component.js +25 -28
- package/dist/lib/generated/Entities/QueueType/queuetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js +25 -38
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js +18 -31
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.js +21 -24
- package/dist/lib/generated/Entities/RecommendationProvider/recommendationprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.js +31 -38
- package/dist/lib/generated/Entities/RecommendationRun/recommendationrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js +51 -49
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.js +30 -35
- package/dist/lib/generated/Entities/RecordChangeReplayRun/recordchangereplayrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordLink/recordlink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecordLink/recordlink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordLink/recordlink.form.component.js +26 -32
- package/dist/lib/generated/Entities/RecordLink/recordlink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js +17 -27
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.js +46 -55
- package/dist/lib/generated/Entities/RecordMergeLog/recordmergelog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Report/report.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.js +60 -89
- package/dist/lib/generated/Entities/Report/report.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.js +36 -43
- package/dist/lib/generated/Entities/ReportCategory/reportcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.js +19 -25
- package/dist/lib/generated/Entities/ReportSnapshot/reportsnapshot.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.js +19 -25
- package/dist/lib/generated/Entities/ReportUserState/reportuserstate.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.js +24 -28
- package/dist/lib/generated/Entities/ReportVersion/reportversion.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js +16 -22
- package/dist/lib/generated/Entities/ResourceLink/resourcelink.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js +28 -37
- package/dist/lib/generated/Entities/ResourcePermission/resourcepermission.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js +54 -63
- package/dist/lib/generated/Entities/ResourceType/resourcetype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Role/role.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Role/role.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Role/role.form.component.js +72 -75
- package/dist/lib/generated/Entities/Role/role.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.js +21 -25
- package/dist/lib/generated/Entities/RowLevelSecurityFilter/rowlevelsecurityfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.js +42 -49
- package/dist/lib/generated/Entities/ScheduledAction/scheduledaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.js +23 -29
- package/dist/lib/generated/Entities/ScheduledActionParam/scheduledactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJob/scheduledjob.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ScheduledJob/scheduledjob.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJob/scheduledjob.form.component.js +60 -69
- package/dist/lib/generated/Entities/ScheduledJob/scheduledjob.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJobRun/scheduledjobrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ScheduledJobRun/scheduledjobrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJobRun/scheduledjobrun.form.component.js +38 -45
- package/dist/lib/generated/Entities/ScheduledJobRun/scheduledjobrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJobType/scheduledjobtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/ScheduledJobType/scheduledjobtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ScheduledJobType/scheduledjobtype.form.component.js +26 -29
- package/dist/lib/generated/Entities/ScheduledJobType/scheduledjobtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.js +18 -20
- package/dist/lib/generated/Entities/SchemaInfo/schemainfo.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Skill/skill.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Skill/skill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Skill/skill.form.component.js +34 -39
- package/dist/lib/generated/Entities/Skill/skill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Tag/tag.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Tag/tag.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Tag/tag.form.component.js +36 -41
- package/dist/lib/generated/Entities/Tag/tag.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.js +21 -27
- package/dist/lib/generated/Entities/TaggedItem/taggeditem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Task/task.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.js +58 -75
- package/dist/lib/generated/Entities/Task/task.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TaskDependency/taskdependency.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TaskDependency/taskdependency.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TaskDependency/taskdependency.form.component.js +21 -27
- package/dist/lib/generated/Entities/TaskDependency/taskdependency.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TaskType/tasktype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TaskType/tasktype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TaskType/tasktype.form.component.js +21 -24
- package/dist/lib/generated/Entities/TaskType/tasktype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Template/template.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Template/template.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Template/template.form.component.js +70 -77
- package/dist/lib/generated/Entities/Template/template.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.js +39 -46
- package/dist/lib/generated/Entities/TemplateCategory/templatecategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js +31 -38
- package/dist/lib/generated/Entities/TemplateContent/templatecontent.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.js +21 -25
- package/dist/lib/generated/Entities/TemplateContentType/templatecontenttype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js +34 -48
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Test/test.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Test/test.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Test/test.form.component.js +50 -55
- package/dist/lib/generated/Entities/Test/test.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js +19 -23
- package/dist/lib/generated/Entities/TestRubric/testrubric.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js +89 -100
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js +25 -31
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js +52 -57
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js +64 -71
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js +17 -23
- package/dist/lib/generated/Entities/TestSuiteTest/testsuitetest.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/TestType/testtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestType/testtype.form.component.js +31 -34
- package/dist/lib/generated/Entities/TestType/testtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/User/user.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.js +645 -594
- package/dist/lib/generated/Entities/User/user.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.js +28 -35
- package/dist/lib/generated/Entities/UserApplication/userapplication.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.js +21 -25
- package/dist/lib/generated/Entities/UserApplicationEntity/userapplicationentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.js +21 -25
- package/dist/lib/generated/Entities/UserFavorite/userfavorite.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.js +27 -35
- package/dist/lib/generated/Entities/UserNotification/usernotification.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserNotificationPreference/usernotificationpreference.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserNotificationPreference/usernotificationpreference.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserNotificationPreference/usernotificationpreference.form.component.js +22 -28
- package/dist/lib/generated/Entities/UserNotificationPreference/usernotificationpreference.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserNotificationType/usernotificationtype.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserNotificationType/usernotificationtype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserNotificationType/usernotificationtype.form.component.js +44 -51
- package/dist/lib/generated/Entities/UserNotificationType/usernotificationtype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js +32 -36
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserRole/userrole.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserRole/userrole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserRole/userrole.form.component.js +17 -23
- package/dist/lib/generated/Entities/UserRole/userrole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserSetting/usersetting.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserSetting/usersetting.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserSetting/usersetting.form.component.js +18 -22
- package/dist/lib/generated/Entities/UserSetting/usersetting.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserView/userview.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserView/userview.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserView/userview.form.component.js +72 -77
- package/dist/lib/generated/Entities/UserView/userview.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.js +40 -49
- package/dist/lib/generated/Entities/UserViewCategory/userviewcategory.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.js +29 -36
- package/dist/lib/generated/Entities/UserViewRun/userviewrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.js +16 -18
- package/dist/lib/generated/Entities/UserViewRunDetail/userviewrundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.js +30 -33
- package/dist/lib/generated/Entities/VectorDatabase/vectordatabase.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.js +28 -35
- package/dist/lib/generated/Entities/VectorIndex/vectorindex.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.js +23 -25
- package/dist/lib/generated/Entities/VersionInstallation/versioninstallation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/VersionLabel/versionlabel.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/VersionLabel/versionlabel.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/VersionLabel/versionlabel.form.component.js +159 -0
- package/dist/lib/generated/Entities/VersionLabel/versionlabel.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/VersionLabelItem/versionlabelitem.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/VersionLabelItem/versionlabelitem.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/VersionLabelItem/versionlabelitem.form.component.js +63 -0
- package/dist/lib/generated/Entities/VersionLabelItem/versionlabelitem.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/VersionLabelRestore/versionlabelrestore.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/VersionLabelRestore/versionlabelrestore.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/VersionLabelRestore/versionlabelrestore.form.component.js +77 -0
- package/dist/lib/generated/Entities/VersionLabelRestore/versionlabelrestore.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/Workflow/workflow.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Workflow/workflow.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Workflow/workflow.form.component.js +36 -39
- package/dist/lib/generated/Entities/Workflow/workflow.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.js +23 -26
- package/dist/lib/generated/Entities/WorkflowEngine/workflowengine.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.js +25 -29
- package/dist/lib/generated/Entities/WorkflowRun/workflowrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Workspace/workspace.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/Workspace/workspace.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Workspace/workspace.form.component.js +27 -33
- package/dist/lib/generated/Entities/Workspace/workspace.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.d.ts +0 -1
- package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.js +26 -32
- package/dist/lib/generated/Entities/WorkspaceItem/workspaceitem.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +272 -271
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +429 -939
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +167 -164
- package/dist/lib/shared/components/template-editor.component.js.map +1 -1
- package/dist/public-api.d.ts +0 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +53 -52
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts +0 -109
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js +0 -2014
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/condition-editor/condition-editor.component.d.ts +0 -29
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/condition-editor/condition-editor.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/condition-editor/condition-editor.component.js +0 -198
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/condition-editor/condition-editor.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/confirmation-dialog/confirmation-dialog.component.d.ts +0 -14
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/confirmation-dialog/confirmation-dialog.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/confirmation-dialog/confirmation-dialog.component.js +0 -98
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/confirmation-dialog/confirmation-dialog.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/custom-node/custom-node.component.d.ts +0 -44
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/custom-node/custom-node.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/custom-node/custom-node.component.js +0 -282
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/custom-node/custom-node.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/execution-panel/execution-panel.component.d.ts +0 -35
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/execution-panel/execution-panel.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/execution-panel/execution-panel.component.js +0 -287
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/execution-panel/execution-panel.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/flow-editor/flow-editor.component.d.ts +0 -106
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/flow-editor/flow-editor.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/flow-editor/flow-editor.component.js +0 -951
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/flow-editor/flow-editor.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/prompt-editor/prompt-editor.component.d.ts +0 -30
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/prompt-editor/prompt-editor.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/prompt-editor/prompt-editor.component.js +0 -450
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/prompt-editor/prompt-editor.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/properties-panel/properties-panel.component.d.ts +0 -25
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/properties-panel/properties-panel.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/properties-panel/properties-panel.component.js +0 -423
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/properties-panel/properties-panel.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/simple-condition-editor/simple-condition-editor.component.d.ts +0 -21
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/simple-condition-editor/simple-condition-editor.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/simple-condition-editor/simple-condition-editor.component.js +0 -182
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/simple-condition-editor/simple-condition-editor.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/step/step.component.d.ts +0 -34
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/step/step.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/step/step.component.js +0 -171
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/step/step.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/toolbar/toolbar.component.d.ts +0 -17
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/toolbar/toolbar.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/toolbar/toolbar.component.js +0 -78
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/components/toolbar/toolbar.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/connection.model.d.ts +0 -17
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/connection.model.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/connection.model.js +0 -11
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/connection.model.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/mj-extended.model.d.ts +0 -21
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/mj-extended.model.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/mj-extended.model.js +0 -2
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/mj-extended.model.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/module.model.d.ts +0 -33
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/module.model.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/module.model.js +0 -2
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/module.model.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/step.model.d.ts +0 -44
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/step.model.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/step.model.js +0 -166
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/models/step.model.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-editor.service.d.ts +0 -14
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-editor.service.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-editor.service.js +0 -31
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-editor.service.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-executor.service.d.ts +0 -63
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-executor.service.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-executor.service.js +0 -294
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/flow-executor.service.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/mj-flow-transformer.service.d.ts +0 -77
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/mj-flow-transformer.service.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/mj-flow-transformer.service.js +0 -408
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/mj-flow-transformer.service.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/module-manager.service.d.ts +0 -19
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/module-manager.service.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/module-manager.service.js +0 -116
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/module-manager.service.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/prompt-manager.service.d.ts +0 -25
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/prompt-manager.service.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/prompt-manager.service.js +0 -90
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-editor-integration/services/prompt-manager.service.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.d.ts +0 -52
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.js +0 -500
- package/dist/lib/custom/AIAgents/FlowAgentType/mj-integrated-flow-editor.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts +0 -9
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js +0 -84
- package/dist/lib/custom/AIAgents/FlowAgentType/step-info-control.component.js.map +0 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts +0 -61
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts.map +0 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js +0 -790
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js.map +0 -1
|
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Component, ChangeDetectionStrategy, HostListener, ViewChild } from '@angular/core';
|
|
7
|
+
import { Component, ChangeDetectionStrategy, HostListener, ViewChild, ViewContainerRef, inject } from '@angular/core';
|
|
8
8
|
import * as d3 from 'd3';
|
|
9
9
|
import { Subject } from 'rxjs';
|
|
10
10
|
import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
@@ -12,19 +12,17 @@ import { CompositeKey, Metadata, RunView } from '@memberjunction/core';
|
|
|
12
12
|
import { UserInfoEngine } from '@memberjunction/core-entities';
|
|
13
13
|
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
14
14
|
import { RegisterClass } from '@memberjunction/global';
|
|
15
|
-
import { SharedService } from '@memberjunction/ng-shared';
|
|
15
|
+
import { SharedService, NavigationService } from '@memberjunction/ng-shared';
|
|
16
|
+
import { ApplicationManager } from '@memberjunction/ng-base-application';
|
|
16
17
|
import { TestSuiteFormComponent } from '../../generated/Entities/TestSuite/testsuite.form.component';
|
|
17
|
-
import { TagsHelper } from '@memberjunction/ng-testing';
|
|
18
|
+
import { TestingDialogService, TagsHelper, EvaluationPreferencesService } from '@memberjunction/ng-testing';
|
|
18
19
|
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "@
|
|
20
|
-
import * as i2 from "@angular/
|
|
21
|
-
import * as i3 from "@
|
|
22
|
-
import * as i4 from "@
|
|
23
|
-
import * as i5 from "@
|
|
24
|
-
import * as i6 from "@
|
|
25
|
-
import * as i7 from "@progress/kendo-angular-dialog";
|
|
26
|
-
import * as i8 from "@progress/kendo-angular-buttons";
|
|
27
|
-
import * as i9 from "@memberjunction/ng-shared-generic";
|
|
20
|
+
import * as i1 from "@angular/common";
|
|
21
|
+
import * as i2 from "@angular/forms";
|
|
22
|
+
import * as i3 from "@progress/kendo-angular-dialog";
|
|
23
|
+
import * as i4 from "@progress/kendo-angular-buttons";
|
|
24
|
+
import * as i5 from "@memberjunction/ng-testing";
|
|
25
|
+
import * as i6 from "@memberjunction/ng-shared-generic";
|
|
28
26
|
const _c0 = ["chartContainer"];
|
|
29
27
|
const _c1 = () => [1, 2, 3, 4, 5];
|
|
30
28
|
const _c2 = () => [1, 2, 3];
|
|
@@ -34,8 +32,8 @@ const _c5 = (a0, a1, a2) => ({ "high": a0, "medium": a1, "low": a2 });
|
|
|
34
32
|
const _c6 = (a0, a1) => ({ "positive": a0, "negative": a1 });
|
|
35
33
|
const _c7 = (a0, a1, a2) => ({ "fa-arrow-down": a0, "fa-arrow-up": a1, "fa-minus": a2 });
|
|
36
34
|
const _c8 = (a0, a1) => ({ "improved": a0, "regressed": a1 });
|
|
37
|
-
function
|
|
38
|
-
i0.ɵɵelementStart(0, "span",
|
|
35
|
+
function TestSuiteFormComponentExtended_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "span", 17);
|
|
39
37
|
i0.ɵɵelement(1, "i", 29);
|
|
40
38
|
i0.ɵɵtext(2);
|
|
41
39
|
i0.ɵɵelementEnd();
|
|
@@ -44,8 +42,8 @@ function TestSuiteFormComponentExtended_span_25_Template(rf, ctx) { if (rf & 1)
|
|
|
44
42
|
i0.ɵɵadvance(2);
|
|
45
43
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.suiteTests.length, " tests ");
|
|
46
44
|
} }
|
|
47
|
-
function
|
|
48
|
-
i0.ɵɵelementStart(0, "div",
|
|
45
|
+
function TestSuiteFormComponentExtended_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
i0.ɵɵelementStart(0, "div", 24)(1, "p");
|
|
49
47
|
i0.ɵɵtext(2);
|
|
50
48
|
i0.ɵɵelementEnd()();
|
|
51
49
|
} if (rf & 2) {
|
|
@@ -53,8 +51,8 @@ function TestSuiteFormComponentExtended_div_37_Template(rf, ctx) { if (rf & 1) {
|
|
|
53
51
|
i0.ɵɵadvance(2);
|
|
54
52
|
i0.ɵɵtextInterpolate(ctx_r0.record.Description);
|
|
55
53
|
} }
|
|
56
|
-
function
|
|
57
|
-
i0.ɵɵelementStart(0, "span",
|
|
54
|
+
function TestSuiteFormComponentExtended_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
58
56
|
i0.ɵɵtext(1);
|
|
59
57
|
i0.ɵɵelementEnd();
|
|
60
58
|
} if (rf & 2) {
|
|
@@ -62,8 +60,8 @@ function TestSuiteFormComponentExtended_span_46_Template(rf, ctx) { if (rf & 1)
|
|
|
62
60
|
i0.ɵɵadvance();
|
|
63
61
|
i0.ɵɵtextInterpolate(ctx_r0.suiteTests.length);
|
|
64
62
|
} }
|
|
65
|
-
function
|
|
66
|
-
i0.ɵɵelementStart(0, "span",
|
|
63
|
+
function TestSuiteFormComponentExtended_Conditional_50_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
+
i0.ɵɵelementStart(0, "span", 30);
|
|
67
65
|
i0.ɵɵtext(1);
|
|
68
66
|
i0.ɵɵelementEnd();
|
|
69
67
|
} if (rf & 2) {
|
|
@@ -71,55 +69,55 @@ function TestSuiteFormComponentExtended_span_50_Template(rf, ctx) { if (rf & 1)
|
|
|
71
69
|
i0.ɵɵadvance();
|
|
72
70
|
i0.ɵɵtextInterpolate(ctx_r0.suiteRuns.length);
|
|
73
71
|
} }
|
|
74
|
-
function
|
|
72
|
+
function TestSuiteFormComponentExtended_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
75
73
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
76
|
-
i0.ɵɵelementStart(0, "div",
|
|
77
|
-
i0.ɵɵelement(3, "i",
|
|
74
|
+
i0.ɵɵelementStart(0, "div", 35)(1, "div", 43)(2, "h3");
|
|
75
|
+
i0.ɵɵelement(3, "i", 44);
|
|
78
76
|
i0.ɵɵtext(4, " Suite Information");
|
|
79
77
|
i0.ɵɵelementEnd();
|
|
80
|
-
i0.ɵɵelementStart(5, "div",
|
|
78
|
+
i0.ɵɵelementStart(5, "div", 45)(6, "div", 46)(7, "div", 47);
|
|
81
79
|
i0.ɵɵtext(8, "Name");
|
|
82
80
|
i0.ɵɵelementEnd();
|
|
83
|
-
i0.ɵɵelementStart(9, "div",
|
|
81
|
+
i0.ɵɵelementStart(9, "div", 48);
|
|
84
82
|
i0.ɵɵtext(10);
|
|
85
83
|
i0.ɵɵelementEnd()();
|
|
86
|
-
i0.ɵɵelementStart(11, "div",
|
|
84
|
+
i0.ɵɵelementStart(11, "div", 46)(12, "div", 47);
|
|
87
85
|
i0.ɵɵtext(13, "Status");
|
|
88
86
|
i0.ɵɵelementEnd();
|
|
89
|
-
i0.ɵɵelementStart(14, "div",
|
|
87
|
+
i0.ɵɵelementStart(14, "div", 48)(15, "span", 49);
|
|
90
88
|
i0.ɵɵtext(16);
|
|
91
89
|
i0.ɵɵelementEnd()()();
|
|
92
|
-
i0.ɵɵelementStart(17, "div",
|
|
90
|
+
i0.ɵɵelementStart(17, "div", 46)(18, "div", 47);
|
|
93
91
|
i0.ɵɵtext(19, "Created");
|
|
94
92
|
i0.ɵɵelementEnd();
|
|
95
|
-
i0.ɵɵelementStart(20, "div",
|
|
93
|
+
i0.ɵɵelementStart(20, "div", 48);
|
|
96
94
|
i0.ɵɵtext(21);
|
|
97
95
|
i0.ɵɵpipe(22, "date");
|
|
98
96
|
i0.ɵɵelementEnd()();
|
|
99
|
-
i0.ɵɵelementStart(23, "div",
|
|
97
|
+
i0.ɵɵelementStart(23, "div", 46)(24, "div", 47);
|
|
100
98
|
i0.ɵɵtext(25, "Updated");
|
|
101
99
|
i0.ɵɵelementEnd();
|
|
102
|
-
i0.ɵɵelementStart(26, "div",
|
|
100
|
+
i0.ɵɵelementStart(26, "div", 48);
|
|
103
101
|
i0.ɵɵtext(27);
|
|
104
102
|
i0.ɵɵpipe(28, "date");
|
|
105
103
|
i0.ɵɵelementEnd()();
|
|
106
|
-
i0.ɵɵelementStart(29, "div",
|
|
104
|
+
i0.ɵɵelementStart(29, "div", 46)(30, "div", 47);
|
|
107
105
|
i0.ɵɵtext(31, "Max Execution Time");
|
|
108
106
|
i0.ɵɵelementEnd();
|
|
109
|
-
i0.ɵɵelementStart(32, "div",
|
|
107
|
+
i0.ɵɵelementStart(32, "div", 48);
|
|
110
108
|
i0.ɵɵtext(33);
|
|
111
109
|
i0.ɵɵelementEnd()()()();
|
|
112
|
-
i0.ɵɵelementStart(34, "div",
|
|
113
|
-
i0.ɵɵelement(36, "i",
|
|
110
|
+
i0.ɵɵelementStart(34, "div", 50)(35, "h3");
|
|
111
|
+
i0.ɵɵelement(36, "i", 51);
|
|
114
112
|
i0.ɵɵtext(37, " Execution Settings");
|
|
115
113
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵelementStart(38, "div",
|
|
114
|
+
i0.ɵɵelementStart(38, "div", 52)(39, "div", 53)(40, "label");
|
|
117
115
|
i0.ɵɵtext(41, "Max Execution Time (ms)");
|
|
118
116
|
i0.ɵɵelementEnd();
|
|
119
|
-
i0.ɵɵelementStart(42, "input",
|
|
120
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
117
|
+
i0.ɵɵelementStart(42, "input", 54);
|
|
118
|
+
i0.ɵɵtwoWayListener("ngModelChange", function TestSuiteFormComponentExtended_Conditional_58_Template_input_ngModelChange_42_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.MaxExecutionTimeMS, $event) || (ctx_r0.record.MaxExecutionTimeMS = $event); return i0.ɵɵresetView($event); });
|
|
121
119
|
i0.ɵɵelementEnd();
|
|
122
|
-
i0.ɵɵelementStart(43, "span",
|
|
120
|
+
i0.ɵɵelementStart(43, "span", 55);
|
|
123
121
|
i0.ɵɵtext(44, "Default timeout for tests in this suite");
|
|
124
122
|
i0.ɵɵelementEnd()()()()();
|
|
125
123
|
} if (rf & 2) {
|
|
@@ -139,48 +137,48 @@ function TestSuiteFormComponentExtended_div_58_Template(rf, ctx) { if (rf & 1) {
|
|
|
139
137
|
i0.ɵɵadvance(9);
|
|
140
138
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.MaxExecutionTimeMS);
|
|
141
139
|
} }
|
|
142
|
-
function
|
|
143
|
-
i0.ɵɵelementStart(0, "div",
|
|
144
|
-
i0.ɵɵelement(1, "div",
|
|
145
|
-
i0.ɵɵelementStart(3, "div",
|
|
146
|
-
i0.ɵɵelement(4, "div",
|
|
140
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵelementStart(0, "div", 60);
|
|
142
|
+
i0.ɵɵelement(1, "div", 61)(2, "div", 62);
|
|
143
|
+
i0.ɵɵelementStart(3, "div", 63);
|
|
144
|
+
i0.ɵɵelement(4, "div", 64)(5, "div", 65);
|
|
147
145
|
i0.ɵɵelementEnd()();
|
|
148
146
|
} }
|
|
149
|
-
function
|
|
150
|
-
i0.ɵɵelementStart(0, "div",
|
|
151
|
-
i0.ɵɵ
|
|
147
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
148
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 59);
|
|
149
|
+
i0.ɵɵrepeaterCreate(2, TestSuiteFormComponentExtended_Conditional_59_Conditional_1_For_3_Template, 6, 0, "div", 60, i0.ɵɵrepeaterTrackByIdentity);
|
|
152
150
|
i0.ɵɵelementEnd()();
|
|
153
151
|
} if (rf & 2) {
|
|
154
152
|
i0.ɵɵadvance(2);
|
|
155
|
-
i0.ɵɵ
|
|
153
|
+
i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c1));
|
|
156
154
|
} }
|
|
157
|
-
function
|
|
155
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_2_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
158
156
|
i0.ɵɵelementStart(0, "span");
|
|
159
|
-
i0.ɵɵelement(1, "i",
|
|
157
|
+
i0.ɵɵelement(1, "i", 44);
|
|
160
158
|
i0.ɵɵtext(2);
|
|
161
159
|
i0.ɵɵelementEnd();
|
|
162
160
|
} if (rf & 2) {
|
|
163
161
|
const test_r4 = i0.ɵɵnextContext().$implicit;
|
|
164
162
|
i0.ɵɵadvance(2);
|
|
165
|
-
i0.ɵɵtextInterpolate1(" ", test_r4.Status
|
|
163
|
+
i0.ɵɵtextInterpolate1(" ", test_r4.Status);
|
|
166
164
|
} }
|
|
167
|
-
function
|
|
165
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
168
166
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
169
|
-
i0.ɵɵelementStart(0, "div",
|
|
170
|
-
i0.ɵɵlistener("click", function
|
|
171
|
-
i0.ɵɵelementStart(1, "div",
|
|
167
|
+
i0.ɵɵelementStart(0, "div", 67);
|
|
168
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_59_Conditional_2_For_2_Template_div_click_0_listener() { const test_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openTest(test_r4.TestID)); });
|
|
169
|
+
i0.ɵɵelementStart(1, "div", 68);
|
|
172
170
|
i0.ɵɵtext(2);
|
|
173
171
|
i0.ɵɵelementEnd();
|
|
174
|
-
i0.ɵɵelementStart(3, "div",
|
|
172
|
+
i0.ɵɵelementStart(3, "div", 69);
|
|
175
173
|
i0.ɵɵelement(4, "i", 29);
|
|
176
174
|
i0.ɵɵelementEnd();
|
|
177
|
-
i0.ɵɵelementStart(5, "div",
|
|
175
|
+
i0.ɵɵelementStart(5, "div", 70)(6, "div", 71);
|
|
178
176
|
i0.ɵɵtext(7);
|
|
179
177
|
i0.ɵɵelementEnd();
|
|
180
|
-
i0.ɵɵelementStart(8, "div",
|
|
181
|
-
i0.ɵɵ
|
|
178
|
+
i0.ɵɵelementStart(8, "div", 72);
|
|
179
|
+
i0.ɵɵconditionalCreate(9, TestSuiteFormComponentExtended_Conditional_59_Conditional_2_For_2_Conditional_9_Template, 3, 1, "span");
|
|
182
180
|
i0.ɵɵelementEnd()();
|
|
183
|
-
i0.ɵɵelement(10, "i",
|
|
181
|
+
i0.ɵɵelement(10, "i", 73);
|
|
184
182
|
i0.ɵɵelementEnd();
|
|
185
183
|
} if (rf & 2) {
|
|
186
184
|
const test_r4 = ctx.$implicit;
|
|
@@ -189,19 +187,19 @@ function TestSuiteFormComponentExtended_div_59_div_2_div_1_Template(rf, ctx) { i
|
|
|
189
187
|
i0.ɵɵadvance(5);
|
|
190
188
|
i0.ɵɵtextInterpolate(test_r4.Test);
|
|
191
189
|
i0.ɵɵadvance(2);
|
|
192
|
-
i0.ɵɵ
|
|
190
|
+
i0.ɵɵconditional(test_r4.Status ? 9 : -1);
|
|
193
191
|
} }
|
|
194
|
-
function
|
|
195
|
-
i0.ɵɵelementStart(0, "div",
|
|
196
|
-
i0.ɵɵ
|
|
192
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
193
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
194
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_59_Conditional_2_For_2_Template, 11, 3, "div", 66, i0.ɵɵrepeaterTrackByIdentity);
|
|
197
195
|
i0.ɵɵelementEnd();
|
|
198
196
|
} if (rf & 2) {
|
|
199
197
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
200
198
|
i0.ɵɵadvance();
|
|
201
|
-
i0.ɵɵ
|
|
199
|
+
i0.ɵɵrepeater(ctx_r0.suiteTests);
|
|
202
200
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelementStart(0, "div",
|
|
201
|
+
function TestSuiteFormComponentExtended_Conditional_59_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
205
203
|
i0.ɵɵelement(2, "i", 29);
|
|
206
204
|
i0.ɵɵelementEnd();
|
|
207
205
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -211,37 +209,39 @@ function TestSuiteFormComponentExtended_div_59_div_3_Template(rf, ctx) { if (rf
|
|
|
211
209
|
i0.ɵɵtext(6, "Add tests to this suite to start running them together.");
|
|
212
210
|
i0.ɵɵelementEnd()();
|
|
213
211
|
} }
|
|
214
|
-
function
|
|
215
|
-
i0.ɵɵelementStart(0, "div",
|
|
216
|
-
i0.ɵɵ
|
|
212
|
+
function TestSuiteFormComponentExtended_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
213
|
+
i0.ɵɵelementStart(0, "div", 36);
|
|
214
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_59_Conditional_1_Template, 4, 1, "div", 56);
|
|
215
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_59_Conditional_2_Template, 3, 0, "div", 57);
|
|
216
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_59_Conditional_3_Template, 7, 0, "div", 58);
|
|
217
217
|
i0.ɵɵelementEnd();
|
|
218
218
|
} if (rf & 2) {
|
|
219
219
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
220
220
|
i0.ɵɵadvance();
|
|
221
|
-
i0.ɵɵ
|
|
221
|
+
i0.ɵɵconditional(ctx_r0.loadingTests ? 1 : -1);
|
|
222
222
|
i0.ɵɵadvance();
|
|
223
|
-
i0.ɵɵ
|
|
223
|
+
i0.ɵɵconditional(!ctx_r0.loadingTests && ctx_r0.suiteTests.length > 0 ? 2 : -1);
|
|
224
224
|
i0.ɵɵadvance();
|
|
225
|
-
i0.ɵɵ
|
|
225
|
+
i0.ɵɵconditional(ctx_r0.testsLoaded && !ctx_r0.loadingTests && ctx_r0.suiteTests.length === 0 ? 3 : -1);
|
|
226
226
|
} }
|
|
227
|
-
function
|
|
228
|
-
i0.ɵɵelementStart(0, "div",
|
|
229
|
-
i0.ɵɵelement(1, "div",
|
|
230
|
-
i0.ɵɵelementStart(2, "div",
|
|
231
|
-
i0.ɵɵelement(3, "div",
|
|
227
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
228
|
+
i0.ɵɵelementStart(0, "div", 60);
|
|
229
|
+
i0.ɵɵelement(1, "div", 62);
|
|
230
|
+
i0.ɵɵelementStart(2, "div", 63);
|
|
231
|
+
i0.ɵɵelement(3, "div", 64)(4, "div", 65);
|
|
232
232
|
i0.ɵɵelementEnd()();
|
|
233
233
|
} }
|
|
234
|
-
function
|
|
235
|
-
i0.ɵɵelementStart(0, "div",
|
|
236
|
-
i0.ɵɵ
|
|
234
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
235
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 59);
|
|
236
|
+
i0.ɵɵrepeaterCreate(2, TestSuiteFormComponentExtended_Conditional_60_Conditional_1_For_3_Template, 5, 0, "div", 60, i0.ɵɵrepeaterTrackByIdentity);
|
|
237
237
|
i0.ɵɵelementEnd()();
|
|
238
238
|
} if (rf & 2) {
|
|
239
239
|
i0.ɵɵadvance(2);
|
|
240
|
-
i0.ɵɵ
|
|
240
|
+
i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c2));
|
|
241
241
|
} }
|
|
242
|
-
function
|
|
242
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
243
243
|
i0.ɵɵelementStart(0, "span");
|
|
244
|
-
i0.ɵɵelement(1, "i",
|
|
244
|
+
i0.ɵɵelement(1, "i", 91);
|
|
245
245
|
i0.ɵɵtext(2);
|
|
246
246
|
i0.ɵɵelementEnd();
|
|
247
247
|
} if (rf & 2) {
|
|
@@ -250,9 +250,9 @@ function TestSuiteFormComponentExtended_div_60_div_2_div_1_span_13_Template(rf,
|
|
|
250
250
|
i0.ɵɵadvance(2);
|
|
251
251
|
i0.ɵɵtextInterpolate3(" ", run_r6.PassedTests, "/", run_r6.TotalTests, " (", ctx_r0.getPassRate(run_r6).toFixed(0), "%) ");
|
|
252
252
|
} }
|
|
253
|
-
function
|
|
254
|
-
i0.ɵɵelementStart(0, "span",
|
|
255
|
-
i0.ɵɵelement(1, "i",
|
|
253
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
254
|
+
i0.ɵɵelementStart(0, "span", 92);
|
|
255
|
+
i0.ɵɵelement(1, "i", 79);
|
|
256
256
|
i0.ɵɵelementEnd();
|
|
257
257
|
} if (rf & 2) {
|
|
258
258
|
const run_r6 = i0.ɵɵnextContext().$implicit;
|
|
@@ -260,16 +260,16 @@ function TestSuiteFormComponentExtended_div_60_div_2_div_1_span_15_Template(rf,
|
|
|
260
260
|
i0.ɵɵadvance();
|
|
261
261
|
i0.ɵɵclassProp("fa-circle-check", run_r6.Status === "Completed")("fa-circle-xmark", run_r6.Status === "Failed")("fa-spinner", run_r6.Status === "Running")("fa-clock", run_r6.Status === "Pending")("fa-ban", run_r6.Status === "Cancelled");
|
|
262
262
|
} }
|
|
263
|
-
function
|
|
264
|
-
i0.ɵɵelementStart(0, "span",
|
|
265
|
-
i0.ɵɵelement(1, "i",
|
|
266
|
-
i0.ɵɵelementStart(2, "span",
|
|
267
|
-
i0.ɵɵelement(3, "i",
|
|
263
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
264
|
+
i0.ɵɵelementStart(0, "span", 88);
|
|
265
|
+
i0.ɵɵelement(1, "i", 93);
|
|
266
|
+
i0.ɵɵelementStart(2, "span", 94);
|
|
267
|
+
i0.ɵɵelement(3, "i", 95);
|
|
268
268
|
i0.ɵɵelementEnd()();
|
|
269
269
|
} }
|
|
270
|
-
function
|
|
271
|
-
i0.ɵɵelementStart(0, "span",
|
|
272
|
-
i0.ɵɵelement(1, "i",
|
|
270
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
271
|
+
i0.ɵɵelementStart(0, "span", 96);
|
|
272
|
+
i0.ɵɵelement(1, "i", 97);
|
|
273
273
|
i0.ɵɵelementStart(2, "span");
|
|
274
274
|
i0.ɵɵtext(3);
|
|
275
275
|
i0.ɵɵelementEnd()();
|
|
@@ -280,8 +280,8 @@ function TestSuiteFormComponentExtended_div_60_div_2_div_1_span_17_Template(rf,
|
|
|
280
280
|
i0.ɵɵadvance(3);
|
|
281
281
|
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate(run_r6).toFixed(0), "%");
|
|
282
282
|
} }
|
|
283
|
-
function
|
|
284
|
-
i0.ɵɵelementStart(0, "span",
|
|
283
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_18_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
284
|
+
i0.ɵɵelementStart(0, "span", 98);
|
|
285
285
|
i0.ɵɵtext(1);
|
|
286
286
|
i0.ɵɵelementEnd();
|
|
287
287
|
} if (rf & 2) {
|
|
@@ -289,41 +289,43 @@ function TestSuiteFormComponentExtended_div_60_div_2_div_1_div_18_span_1_Templat
|
|
|
289
289
|
i0.ɵɵadvance();
|
|
290
290
|
i0.ɵɵtextInterpolate(tag_r7);
|
|
291
291
|
} }
|
|
292
|
-
function
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
294
|
-
i0.ɵɵ
|
|
292
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
+
i0.ɵɵelementStart(0, "div", 90);
|
|
294
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_18_For_2_Template, 2, 1, "span", 98, i0.ɵɵrepeaterTrackByIdentity);
|
|
295
295
|
i0.ɵɵelementEnd();
|
|
296
296
|
} if (rf & 2) {
|
|
297
297
|
const run_r6 = i0.ɵɵnextContext().$implicit;
|
|
298
298
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
299
299
|
i0.ɵɵadvance();
|
|
300
|
-
i0.ɵɵ
|
|
300
|
+
i0.ɵɵrepeater(ctx_r0.getRunTags(run_r6));
|
|
301
301
|
} }
|
|
302
|
-
function
|
|
302
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
303
303
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
304
|
-
i0.ɵɵelementStart(0, "div",
|
|
305
|
-
i0.ɵɵlistener("click", function
|
|
306
|
-
i0.ɵɵelementStart(1, "div",
|
|
307
|
-
i0.ɵɵelement(2, "i",
|
|
304
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
305
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Template_div_click_0_listener() { const run_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openSuiteRun(run_r6.ID)); });
|
|
306
|
+
i0.ɵɵelementStart(1, "div", 78);
|
|
307
|
+
i0.ɵɵelement(2, "i", 79);
|
|
308
308
|
i0.ɵɵelementEnd();
|
|
309
|
-
i0.ɵɵelementStart(3, "div",
|
|
309
|
+
i0.ɵɵelementStart(3, "div", 80)(4, "div", 81)(5, "span", 82);
|
|
310
310
|
i0.ɵɵtext(6);
|
|
311
311
|
i0.ɵɵelementEnd();
|
|
312
|
-
i0.ɵɵelementStart(7, "span",
|
|
312
|
+
i0.ɵɵelementStart(7, "span", 83);
|
|
313
313
|
i0.ɵɵtext(8);
|
|
314
314
|
i0.ɵɵelementEnd()();
|
|
315
|
-
i0.ɵɵelementStart(9, "div",
|
|
316
|
-
i0.ɵɵelement(11, "i",
|
|
315
|
+
i0.ɵɵelementStart(9, "div", 84)(10, "span");
|
|
316
|
+
i0.ɵɵelement(11, "i", 85);
|
|
317
317
|
i0.ɵɵtext(12);
|
|
318
318
|
i0.ɵɵelementEnd();
|
|
319
|
-
i0.ɵɵ
|
|
319
|
+
i0.ɵɵconditionalCreate(13, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_13_Template, 3, 3, "span");
|
|
320
320
|
i0.ɵɵelementEnd();
|
|
321
|
-
i0.ɵɵelementStart(14, "div",
|
|
322
|
-
i0.ɵɵ
|
|
321
|
+
i0.ɵɵelementStart(14, "div", 86);
|
|
322
|
+
i0.ɵɵconditionalCreate(15, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_15_Template, 2, 12, "span", 87);
|
|
323
|
+
i0.ɵɵconditionalCreate(16, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_16_Template, 4, 0, "span", 88);
|
|
324
|
+
i0.ɵɵconditionalCreate(17, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_17_Template, 4, 7, "span", 89);
|
|
323
325
|
i0.ɵɵelementEnd();
|
|
324
|
-
i0.ɵɵ
|
|
326
|
+
i0.ɵɵconditionalCreate(18, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Conditional_18_Template, 3, 0, "div", 90);
|
|
325
327
|
i0.ɵɵelementEnd();
|
|
326
|
-
i0.ɵɵelement(19, "i",
|
|
328
|
+
i0.ɵɵelement(19, "i", 73);
|
|
327
329
|
i0.ɵɵelementEnd();
|
|
328
330
|
} if (rf & 2) {
|
|
329
331
|
const run_r6 = ctx.$implicit;
|
|
@@ -333,37 +335,37 @@ function TestSuiteFormComponentExtended_div_60_div_2_div_1_Template(rf, ctx) { i
|
|
|
333
335
|
i0.ɵɵadvance();
|
|
334
336
|
i0.ɵɵclassProp("fa-check", run_r6.Status === "Completed")("fa-times", run_r6.Status === "Failed")("fa-spinner", run_r6.Status === "Running")("fa-clock", run_r6.Status === "Pending")("fa-ban", run_r6.Status === "Cancelled");
|
|
335
337
|
i0.ɵɵadvance(4);
|
|
336
|
-
i0.ɵɵtextInterpolate1("Run #", run_r6.ID.substring(0, 8)
|
|
338
|
+
i0.ɵɵtextInterpolate1("Run #", run_r6.ID.substring(0, 8));
|
|
337
339
|
i0.ɵɵadvance();
|
|
338
340
|
i0.ɵɵstyleProp("color", ctx_r0.getRunStatusColor(run_r6.Status));
|
|
339
341
|
i0.ɵɵadvance();
|
|
340
342
|
i0.ɵɵtextInterpolate(run_r6.Status);
|
|
341
343
|
i0.ɵɵadvance(4);
|
|
342
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r0.getRelativeTime(run_r6.StartedAt)
|
|
344
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.getRelativeTime(run_r6.StartedAt));
|
|
343
345
|
i0.ɵɵadvance();
|
|
344
|
-
i0.ɵɵ
|
|
346
|
+
i0.ɵɵconditional(run_r6.TotalTests ? 13 : -1);
|
|
345
347
|
i0.ɵɵadvance(2);
|
|
346
|
-
i0.ɵɵ
|
|
348
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showExecution ? 15 : -1);
|
|
347
349
|
i0.ɵɵadvance();
|
|
348
|
-
i0.ɵɵ
|
|
350
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showHuman ? 16 : -1);
|
|
349
351
|
i0.ɵɵadvance();
|
|
350
|
-
i0.ɵɵ
|
|
352
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showAuto && run_r6.TotalTests ? 17 : -1);
|
|
351
353
|
i0.ɵɵadvance();
|
|
352
|
-
i0.ɵɵ
|
|
354
|
+
i0.ɵɵconditional(ctx_r0.getRunTags(run_r6).length > 0 ? 18 : -1);
|
|
353
355
|
} }
|
|
354
|
-
function
|
|
355
|
-
i0.ɵɵelementStart(0, "div",
|
|
356
|
-
i0.ɵɵ
|
|
356
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
357
|
+
i0.ɵɵelementStart(0, "div", 75);
|
|
358
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_For_2_Template, 20, 22, "div", 76, i0.ɵɵrepeaterTrackByIdentity);
|
|
357
359
|
i0.ɵɵelementEnd();
|
|
358
360
|
} if (rf & 2) {
|
|
359
361
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
360
362
|
i0.ɵɵadvance();
|
|
361
|
-
i0.ɵɵ
|
|
363
|
+
i0.ɵɵrepeater(ctx_r0.suiteRuns);
|
|
362
364
|
} }
|
|
363
|
-
function
|
|
365
|
+
function TestSuiteFormComponentExtended_Conditional_60_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
364
366
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
365
|
-
i0.ɵɵelementStart(0, "div",
|
|
366
|
-
i0.ɵɵelement(2, "i",
|
|
367
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
368
|
+
i0.ɵɵelement(2, "i", 99);
|
|
367
369
|
i0.ɵɵelementEnd();
|
|
368
370
|
i0.ɵɵelementStart(3, "h4");
|
|
369
371
|
i0.ɵɵtext(4, "No Suite Runs Yet");
|
|
@@ -372,30 +374,32 @@ function TestSuiteFormComponentExtended_div_60_div_3_Template(rf, ctx) { if (rf
|
|
|
372
374
|
i0.ɵɵtext(6, "Run this suite to see execution history and results here.");
|
|
373
375
|
i0.ɵɵelementEnd();
|
|
374
376
|
i0.ɵɵelementStart(7, "button", 21);
|
|
375
|
-
i0.ɵɵlistener("click", function
|
|
377
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_60_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r8); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.runSuite()); });
|
|
376
378
|
i0.ɵɵelement(8, "i", 22);
|
|
377
379
|
i0.ɵɵtext(9, " Run Suite Now ");
|
|
378
380
|
i0.ɵɵelementEnd()();
|
|
379
381
|
} }
|
|
380
|
-
function
|
|
381
|
-
i0.ɵɵelementStart(0, "div",
|
|
382
|
-
i0.ɵɵ
|
|
382
|
+
function TestSuiteFormComponentExtended_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
383
|
+
i0.ɵɵelementStart(0, "div", 37);
|
|
384
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_60_Conditional_1_Template, 4, 1, "div", 56);
|
|
385
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_60_Conditional_2_Template, 3, 0, "div", 75);
|
|
386
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_60_Conditional_3_Template, 10, 0, "div", 58);
|
|
383
387
|
i0.ɵɵelementEnd();
|
|
384
388
|
} if (rf & 2) {
|
|
385
389
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
386
390
|
i0.ɵɵadvance();
|
|
387
|
-
i0.ɵɵ
|
|
391
|
+
i0.ɵɵconditional(ctx_r0.loadingRuns ? 1 : -1);
|
|
388
392
|
i0.ɵɵadvance();
|
|
389
|
-
i0.ɵɵ
|
|
393
|
+
i0.ɵɵconditional(!ctx_r0.loadingRuns && ctx_r0.suiteRuns.length > 0 ? 2 : -1);
|
|
390
394
|
i0.ɵɵadvance();
|
|
391
|
-
i0.ɵɵ
|
|
395
|
+
i0.ɵɵconditional(ctx_r0.runsLoaded && !ctx_r0.loadingRuns && ctx_r0.suiteRuns.length === 0 ? 3 : -1);
|
|
392
396
|
} }
|
|
393
|
-
function
|
|
394
|
-
i0.ɵɵelementStart(0, "div",
|
|
395
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
397
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
399
|
+
i0.ɵɵelement(1, "mj-loading", 100);
|
|
396
400
|
i0.ɵɵelementEnd();
|
|
397
401
|
} }
|
|
398
|
-
function
|
|
402
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
399
403
|
i0.ɵɵelementStart(0, "span");
|
|
400
404
|
i0.ɵɵtext(1);
|
|
401
405
|
i0.ɵɵelementEnd();
|
|
@@ -404,20 +408,20 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_span_20_span_2_Tem
|
|
|
404
408
|
i0.ɵɵadvance();
|
|
405
409
|
i0.ɵɵtextInterpolate1(" \u00B7 ", ctx_r0.selectedTags.length, " tags");
|
|
406
410
|
} }
|
|
407
|
-
function
|
|
408
|
-
i0.ɵɵelementStart(0, "span",
|
|
411
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
412
|
+
i0.ɵɵelementStart(0, "span", 111);
|
|
409
413
|
i0.ɵɵtext(1);
|
|
410
|
-
i0.ɵɵ
|
|
414
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_19_Conditional_2_Template, 2, 1, "span");
|
|
411
415
|
i0.ɵɵelementEnd();
|
|
412
416
|
} if (rf & 2) {
|
|
413
417
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
414
418
|
i0.ɵɵadvance();
|
|
415
419
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.analyticsTimeRange === "all" ? "All Time" : ctx_r0.analyticsTimeRange, " ");
|
|
416
420
|
i0.ɵɵadvance();
|
|
417
|
-
i0.ɵɵ
|
|
421
|
+
i0.ɵɵconditional(ctx_r0.selectedTags.length > 0 ? 2 : -1);
|
|
418
422
|
} }
|
|
419
|
-
function
|
|
420
|
-
i0.ɵɵelementStart(0, "span",
|
|
423
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
424
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
421
425
|
i0.ɵɵtext(1);
|
|
422
426
|
i0.ɵɵelementEnd();
|
|
423
427
|
} if (rf & 2) {
|
|
@@ -425,14 +429,14 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_div_22_div_13_span
|
|
|
425
429
|
i0.ɵɵadvance();
|
|
426
430
|
i0.ɵɵtextInterpolate1("(", ctx_r0.selectedTags.length, " selected)");
|
|
427
431
|
} }
|
|
428
|
-
function
|
|
429
|
-
i0.ɵɵelement(0, "i",
|
|
432
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_For_9_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
433
|
+
i0.ɵɵelement(0, "i", 121);
|
|
430
434
|
} }
|
|
431
|
-
function
|
|
435
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
432
436
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
433
|
-
i0.ɵɵelementStart(0, "button",
|
|
434
|
-
i0.ɵɵlistener("click", function
|
|
435
|
-
i0.ɵɵ
|
|
437
|
+
i0.ɵɵelementStart(0, "button", 120);
|
|
438
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_For_9_Template_button_click_0_listener() { const tag_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.toggleTagFilter(tag_r13)); });
|
|
439
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_For_9_Conditional_1_Template, 1, 0, "i", 121);
|
|
436
440
|
i0.ɵɵtext(2);
|
|
437
441
|
i0.ɵɵelementEnd();
|
|
438
442
|
} if (rf & 2) {
|
|
@@ -440,54 +444,54 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_div_22_div_13_butt
|
|
|
440
444
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
441
445
|
i0.ɵɵclassProp("active", ctx_r0.isTagSelected(tag_r13));
|
|
442
446
|
i0.ɵɵadvance();
|
|
443
|
-
i0.ɵɵ
|
|
447
|
+
i0.ɵɵconditional(ctx_r0.isTagSelected(tag_r13) ? 1 : -1);
|
|
444
448
|
i0.ɵɵadvance();
|
|
445
449
|
i0.ɵɵtextInterpolate1(" ", tag_r13, " ");
|
|
446
450
|
} }
|
|
447
|
-
function
|
|
451
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
448
452
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
449
|
-
i0.ɵɵelementStart(0, "div",
|
|
453
|
+
i0.ɵɵelementStart(0, "div", 113)(1, "label");
|
|
450
454
|
i0.ɵɵtext(2, "Filter by Tag ");
|
|
451
|
-
i0.ɵɵ
|
|
455
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_Conditional_3_Template, 2, 1, "span", 116);
|
|
452
456
|
i0.ɵɵelementEnd();
|
|
453
|
-
i0.ɵɵelementStart(4, "div",
|
|
454
|
-
i0.ɵɵlistener("click", function
|
|
457
|
+
i0.ɵɵelementStart(4, "div", 117)(5, "button", 118);
|
|
458
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleTagFilter(null)); });
|
|
455
459
|
i0.ɵɵelement(6, "i", 9);
|
|
456
460
|
i0.ɵɵtext(7, " All Tags ");
|
|
457
461
|
i0.ɵɵelementEnd();
|
|
458
|
-
i0.ɵɵ
|
|
462
|
+
i0.ɵɵrepeaterCreate(8, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_For_9_Template, 3, 4, "button", 119, i0.ɵɵrepeaterTrackByIdentity);
|
|
459
463
|
i0.ɵɵelementEnd()();
|
|
460
464
|
} if (rf & 2) {
|
|
461
465
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
462
466
|
i0.ɵɵadvance(3);
|
|
463
|
-
i0.ɵɵ
|
|
467
|
+
i0.ɵɵconditional(ctx_r0.selectedTags.length > 0 ? 3 : -1);
|
|
464
468
|
i0.ɵɵadvance(2);
|
|
465
469
|
i0.ɵɵclassProp("active", ctx_r0.selectedTags.length === 0);
|
|
466
470
|
i0.ɵɵadvance(3);
|
|
467
|
-
i0.ɵɵ
|
|
471
|
+
i0.ɵɵrepeater(ctx_r0.uniqueTags);
|
|
468
472
|
} }
|
|
469
|
-
function
|
|
473
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
470
474
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
471
|
-
i0.ɵɵelementStart(0, "div",
|
|
475
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "div", 113)(2, "label");
|
|
472
476
|
i0.ɵɵtext(3, "Time Range");
|
|
473
477
|
i0.ɵɵelementEnd();
|
|
474
|
-
i0.ɵɵelementStart(4, "div",
|
|
475
|
-
i0.ɵɵlistener("click", function
|
|
478
|
+
i0.ɵɵelementStart(4, "div", 114)(5, "button", 115);
|
|
479
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.setTimeRange("7d")); });
|
|
476
480
|
i0.ɵɵtext(6, "7 Days");
|
|
477
481
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(7, "button",
|
|
479
|
-
i0.ɵɵlistener("click", function
|
|
482
|
+
i0.ɵɵelementStart(7, "button", 115);
|
|
483
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.setTimeRange("30d")); });
|
|
480
484
|
i0.ɵɵtext(8, "30 Days");
|
|
481
485
|
i0.ɵɵelementEnd();
|
|
482
|
-
i0.ɵɵelementStart(9, "button",
|
|
483
|
-
i0.ɵɵlistener("click", function
|
|
486
|
+
i0.ɵɵelementStart(9, "button", 115);
|
|
487
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.setTimeRange("90d")); });
|
|
484
488
|
i0.ɵɵtext(10, "90 Days");
|
|
485
489
|
i0.ɵɵelementEnd();
|
|
486
|
-
i0.ɵɵelementStart(11, "button",
|
|
487
|
-
i0.ɵɵlistener("click", function
|
|
490
|
+
i0.ɵɵelementStart(11, "button", 115);
|
|
491
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r10); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.setTimeRange("all")); });
|
|
488
492
|
i0.ɵɵtext(12, "All Time");
|
|
489
493
|
i0.ɵɵelementEnd()()();
|
|
490
|
-
i0.ɵɵ
|
|
494
|
+
i0.ɵɵconditionalCreate(13, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Conditional_13_Template, 10, 3, "div", 113);
|
|
491
495
|
i0.ɵɵelementEnd();
|
|
492
496
|
} if (rf & 2) {
|
|
493
497
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
@@ -500,10 +504,10 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_div_22_Template(rf
|
|
|
500
504
|
i0.ɵɵadvance(2);
|
|
501
505
|
i0.ɵɵclassProp("active", ctx_r0.analyticsTimeRange === "all");
|
|
502
506
|
i0.ɵɵadvance(2);
|
|
503
|
-
i0.ɵɵ
|
|
507
|
+
i0.ɵɵconditional(ctx_r0.uniqueTags.length > 0 ? 13 : -1);
|
|
504
508
|
} }
|
|
505
|
-
function
|
|
506
|
-
i0.ɵɵelementStart(0, "span",
|
|
509
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_For_21_Template(rf, ctx) { if (rf & 1) {
|
|
510
|
+
i0.ɵɵelementStart(0, "span", 144);
|
|
507
511
|
i0.ɵɵtext(1);
|
|
508
512
|
i0.ɵɵelementEnd();
|
|
509
513
|
} if (rf & 2) {
|
|
@@ -511,28 +515,28 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_23_tr
|
|
|
511
515
|
i0.ɵɵadvance();
|
|
512
516
|
i0.ɵɵtextInterpolate(tag_r16);
|
|
513
517
|
} }
|
|
514
|
-
function
|
|
515
|
-
i0.ɵɵelementStart(0, "span",
|
|
518
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
519
|
+
i0.ɵɵelementStart(0, "span", 145);
|
|
516
520
|
i0.ɵɵtext(1);
|
|
517
521
|
i0.ɵɵelementEnd();
|
|
518
522
|
} if (rf & 2) {
|
|
519
523
|
const dp_r15 = i0.ɵɵnextContext().$implicit;
|
|
520
524
|
i0.ɵɵadvance();
|
|
521
|
-
i0.ɵɵtextInterpolate1("+", dp_r15.tags.length - 2
|
|
525
|
+
i0.ɵɵtextInterpolate1("+", dp_r15.tags.length - 2);
|
|
522
526
|
} }
|
|
523
|
-
function
|
|
527
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_Template(rf, ctx) { if (rf & 1) {
|
|
524
528
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
525
|
-
i0.ɵɵelementStart(0, "tr",
|
|
526
|
-
i0.ɵɵlistener("click", function
|
|
529
|
+
i0.ɵɵelementStart(0, "tr", 139);
|
|
530
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_Template_tr_click_0_listener() { const dp_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openSuiteRun(dp_r15.runId)); });
|
|
527
531
|
i0.ɵɵelementStart(1, "td");
|
|
528
532
|
i0.ɵɵtext(2);
|
|
529
533
|
i0.ɵɵpipe(3, "date");
|
|
530
534
|
i0.ɵɵelementEnd();
|
|
531
|
-
i0.ɵɵelementStart(4, "td")(5, "span",
|
|
535
|
+
i0.ɵɵelementStart(4, "td")(5, "span", 140);
|
|
532
536
|
i0.ɵɵtext(6);
|
|
533
537
|
i0.ɵɵelementEnd()();
|
|
534
|
-
i0.ɵɵelementStart(7, "td")(8, "div",
|
|
535
|
-
i0.ɵɵelement(9, "div",
|
|
538
|
+
i0.ɵɵelementStart(7, "td")(8, "div", 141);
|
|
539
|
+
i0.ɵɵelement(9, "div", 142);
|
|
536
540
|
i0.ɵɵelementStart(10, "span");
|
|
537
541
|
i0.ɵɵtext(11);
|
|
538
542
|
i0.ɵɵelementEnd()()();
|
|
@@ -545,122 +549,121 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_23_tr
|
|
|
545
549
|
i0.ɵɵelementStart(16, "td");
|
|
546
550
|
i0.ɵɵtext(17);
|
|
547
551
|
i0.ɵɵelementEnd();
|
|
548
|
-
i0.ɵɵelementStart(18, "td")(19, "div",
|
|
549
|
-
i0.ɵɵ
|
|
552
|
+
i0.ɵɵelementStart(18, "td")(19, "div", 143);
|
|
553
|
+
i0.ɵɵrepeaterCreate(20, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_For_21_Template, 2, 1, "span", 144, i0.ɵɵrepeaterTrackByIdentity);
|
|
554
|
+
i0.ɵɵconditionalCreate(22, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_Conditional_22_Template, 2, 1, "span", 145);
|
|
550
555
|
i0.ɵɵelementEnd()()();
|
|
551
556
|
} if (rf & 2) {
|
|
552
557
|
const dp_r15 = ctx.$implicit;
|
|
553
558
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
554
559
|
i0.ɵɵadvance(2);
|
|
555
|
-
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3,
|
|
560
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 12, dp_r15.date, "short"));
|
|
556
561
|
i0.ɵɵadvance(3);
|
|
557
562
|
i0.ɵɵproperty("ngClass", "status-" + dp_r15.status.toLowerCase());
|
|
558
563
|
i0.ɵɵadvance();
|
|
559
564
|
i0.ɵɵtextInterpolate(dp_r15.status);
|
|
560
565
|
i0.ɵɵadvance(3);
|
|
561
566
|
i0.ɵɵstyleProp("width", dp_r15.passRate, "%");
|
|
562
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(
|
|
567
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(15, _c5, dp_r15.passRate >= 80, dp_r15.passRate >= 50 && dp_r15.passRate < 80, dp_r15.passRate < 50));
|
|
563
568
|
i0.ɵɵadvance(2);
|
|
564
569
|
i0.ɵɵtextInterpolate1("", dp_r15.passRate.toFixed(0), "%");
|
|
565
570
|
i0.ɵɵadvance(2);
|
|
566
|
-
i0.ɵɵtextInterpolate2("", dp_r15.passedTests, "/", dp_r15.totalTests
|
|
571
|
+
i0.ɵɵtextInterpolate2("", dp_r15.passedTests, "/", dp_r15.totalTests);
|
|
567
572
|
i0.ɵɵadvance(2);
|
|
568
573
|
i0.ɵɵtextInterpolate(ctx_r0.formatDuration(dp_r15.duration));
|
|
569
574
|
i0.ɵɵadvance(2);
|
|
570
575
|
i0.ɵɵtextInterpolate(ctx_r0.formatCost(dp_r15.cost));
|
|
571
576
|
i0.ɵɵadvance(3);
|
|
572
|
-
i0.ɵɵ
|
|
573
|
-
i0.ɵɵadvance();
|
|
574
|
-
i0.ɵɵ
|
|
577
|
+
i0.ɵɵrepeater(dp_r15.tags.slice(0, 2));
|
|
578
|
+
i0.ɵɵadvance(2);
|
|
579
|
+
i0.ɵɵconditional(dp_r15.tags.length > 2 ? 22 : -1);
|
|
575
580
|
} }
|
|
576
|
-
function
|
|
577
|
-
i0.ɵɵelementStart(0, "div",
|
|
581
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
582
|
+
i0.ɵɵelementStart(0, "div", 138)(1, "p");
|
|
578
583
|
i0.ɵɵtext(2, "No runs match the current filters.");
|
|
579
584
|
i0.ɵɵelementEnd()();
|
|
580
585
|
} }
|
|
581
|
-
function
|
|
582
|
-
i0.ɵɵ
|
|
583
|
-
i0.ɵɵ
|
|
584
|
-
i0.ɵɵelement(4, "i", 114);
|
|
586
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
587
|
+
i0.ɵɵelementStart(0, "div", 122)(1, "div", 123)(2, "div", 124);
|
|
588
|
+
i0.ɵɵelement(3, "i", 99);
|
|
585
589
|
i0.ɵɵelementEnd();
|
|
586
|
-
i0.ɵɵelementStart(
|
|
587
|
-
i0.ɵɵtext(
|
|
590
|
+
i0.ɵɵelementStart(4, "div", 125)(5, "div", 126);
|
|
591
|
+
i0.ɵɵtext(6);
|
|
588
592
|
i0.ɵɵelementEnd();
|
|
589
|
-
i0.ɵɵelementStart(
|
|
590
|
-
i0.ɵɵtext(
|
|
593
|
+
i0.ɵɵelementStart(7, "div", 127);
|
|
594
|
+
i0.ɵɵtext(8, "Total Runs");
|
|
591
595
|
i0.ɵɵelementEnd()()();
|
|
592
|
-
i0.ɵɵelementStart(
|
|
593
|
-
i0.ɵɵelement(
|
|
596
|
+
i0.ɵɵelementStart(9, "div", 123)(10, "div", 128);
|
|
597
|
+
i0.ɵɵelement(11, "i", 91);
|
|
594
598
|
i0.ɵɵelementEnd();
|
|
595
|
-
i0.ɵɵelementStart(
|
|
596
|
-
i0.ɵɵtext(
|
|
599
|
+
i0.ɵɵelementStart(12, "div", 125)(13, "div", 126);
|
|
600
|
+
i0.ɵɵtext(14);
|
|
597
601
|
i0.ɵɵelementEnd();
|
|
598
|
-
i0.ɵɵelementStart(
|
|
599
|
-
i0.ɵɵtext(
|
|
602
|
+
i0.ɵɵelementStart(15, "div", 127);
|
|
603
|
+
i0.ɵɵtext(16, "Avg Pass Rate");
|
|
600
604
|
i0.ɵɵelementEnd();
|
|
601
|
-
i0.ɵɵelementStart(
|
|
602
|
-
i0.ɵɵelement(
|
|
603
|
-
i0.ɵɵtext(
|
|
605
|
+
i0.ɵɵelementStart(17, "div", 129);
|
|
606
|
+
i0.ɵɵelement(18, "i", 16);
|
|
607
|
+
i0.ɵɵtext(19);
|
|
604
608
|
i0.ɵɵelementEnd()()();
|
|
605
|
-
i0.ɵɵelementStart(
|
|
606
|
-
i0.ɵɵelement(
|
|
609
|
+
i0.ɵɵelementStart(20, "div", 123)(21, "div", 130);
|
|
610
|
+
i0.ɵɵelement(22, "i", 95);
|
|
607
611
|
i0.ɵɵelementEnd();
|
|
608
|
-
i0.ɵɵelementStart(
|
|
609
|
-
i0.ɵɵtext(
|
|
612
|
+
i0.ɵɵelementStart(23, "div", 125)(24, "div", 126);
|
|
613
|
+
i0.ɵɵtext(25);
|
|
610
614
|
i0.ɵɵelementEnd();
|
|
611
|
-
i0.ɵɵelementStart(
|
|
612
|
-
i0.ɵɵtext(
|
|
615
|
+
i0.ɵɵelementStart(26, "div", 127);
|
|
616
|
+
i0.ɵɵtext(27, "Avg Duration");
|
|
613
617
|
i0.ɵɵelementEnd()()();
|
|
614
|
-
i0.ɵɵelementStart(
|
|
615
|
-
i0.ɵɵelement(
|
|
618
|
+
i0.ɵɵelementStart(28, "div", 123)(29, "div", 131);
|
|
619
|
+
i0.ɵɵelement(30, "i", 132);
|
|
616
620
|
i0.ɵɵelementEnd();
|
|
617
|
-
i0.ɵɵelementStart(
|
|
618
|
-
i0.ɵɵtext(
|
|
621
|
+
i0.ɵɵelementStart(31, "div", 125)(32, "div", 126);
|
|
622
|
+
i0.ɵɵtext(33);
|
|
619
623
|
i0.ɵɵelementEnd();
|
|
620
|
-
i0.ɵɵelementStart(
|
|
621
|
-
i0.ɵɵtext(
|
|
624
|
+
i0.ɵɵelementStart(34, "div", 127);
|
|
625
|
+
i0.ɵɵtext(35, "Total Cost");
|
|
622
626
|
i0.ɵɵelementEnd()()()();
|
|
623
|
-
i0.ɵɵelementStart(
|
|
624
|
-
i0.ɵɵelement(
|
|
625
|
-
i0.ɵɵtext(
|
|
627
|
+
i0.ɵɵelementStart(36, "div", 133)(37, "h3");
|
|
628
|
+
i0.ɵɵelement(38, "i", 134);
|
|
629
|
+
i0.ɵɵtext(39, " Run History");
|
|
626
630
|
i0.ɵɵelementEnd();
|
|
627
|
-
i0.ɵɵelementStart(
|
|
628
|
-
i0.ɵɵtext(
|
|
631
|
+
i0.ɵɵelementStart(40, "div", 135)(41, "table", 136)(42, "thead")(43, "tr")(44, "th");
|
|
632
|
+
i0.ɵɵtext(45, "Date");
|
|
629
633
|
i0.ɵɵelementEnd();
|
|
630
|
-
i0.ɵɵelementStart(
|
|
631
|
-
i0.ɵɵtext(
|
|
634
|
+
i0.ɵɵelementStart(46, "th");
|
|
635
|
+
i0.ɵɵtext(47, "Status");
|
|
632
636
|
i0.ɵɵelementEnd();
|
|
633
|
-
i0.ɵɵelementStart(
|
|
634
|
-
i0.ɵɵtext(
|
|
637
|
+
i0.ɵɵelementStart(48, "th");
|
|
638
|
+
i0.ɵɵtext(49, "Pass Rate");
|
|
635
639
|
i0.ɵɵelementEnd();
|
|
636
|
-
i0.ɵɵelementStart(
|
|
637
|
-
i0.ɵɵtext(
|
|
640
|
+
i0.ɵɵelementStart(50, "th");
|
|
641
|
+
i0.ɵɵtext(51, "Tests");
|
|
638
642
|
i0.ɵɵelementEnd();
|
|
639
|
-
i0.ɵɵelementStart(
|
|
640
|
-
i0.ɵɵtext(
|
|
643
|
+
i0.ɵɵelementStart(52, "th");
|
|
644
|
+
i0.ɵɵtext(53, "Duration");
|
|
641
645
|
i0.ɵɵelementEnd();
|
|
642
|
-
i0.ɵɵelementStart(
|
|
643
|
-
i0.ɵɵtext(
|
|
646
|
+
i0.ɵɵelementStart(54, "th");
|
|
647
|
+
i0.ɵɵtext(55, "Cost");
|
|
644
648
|
i0.ɵɵelementEnd();
|
|
645
|
-
i0.ɵɵelementStart(
|
|
646
|
-
i0.ɵɵtext(
|
|
649
|
+
i0.ɵɵelementStart(56, "th");
|
|
650
|
+
i0.ɵɵtext(57, "Tags");
|
|
647
651
|
i0.ɵɵelementEnd()()();
|
|
648
|
-
i0.ɵɵelementStart(
|
|
649
|
-
i0.ɵɵ
|
|
652
|
+
i0.ɵɵelementStart(58, "tbody");
|
|
653
|
+
i0.ɵɵrepeaterCreate(59, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_For_60_Template, 23, 19, "tr", 137, i0.ɵɵrepeaterTrackByIdentity);
|
|
650
654
|
i0.ɵɵelementEnd()()();
|
|
651
|
-
i0.ɵɵ
|
|
655
|
+
i0.ɵɵconditionalCreate(61, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_Conditional_61_Template, 3, 0, "div", 138);
|
|
652
656
|
i0.ɵɵelementEnd();
|
|
653
|
-
i0.ɵɵelementContainerEnd();
|
|
654
657
|
} if (rf & 2) {
|
|
655
658
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
656
|
-
i0.ɵɵadvance(
|
|
659
|
+
i0.ɵɵadvance(6);
|
|
657
660
|
i0.ɵɵtextInterpolate(ctx_r0.getTotalRuns());
|
|
658
661
|
i0.ɵɵadvance(8);
|
|
659
662
|
i0.ɵɵtextInterpolate1("", ctx_r0.getAveragePassRate().toFixed(1), "%");
|
|
660
663
|
i0.ɵɵadvance(3);
|
|
661
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(
|
|
664
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(8, _c3, ctx_r0.getPassRateTrend().direction === "up", ctx_r0.getPassRateTrend().direction === "down"));
|
|
662
665
|
i0.ɵɵadvance();
|
|
663
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(
|
|
666
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(11, _c4, ctx_r0.getPassRateTrend().direction === "up", ctx_r0.getPassRateTrend().direction === "down", ctx_r0.getPassRateTrend().direction === "stable"));
|
|
664
667
|
i0.ɵɵadvance();
|
|
665
668
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.getPassRateTrend().value.toFixed(1), "% ");
|
|
666
669
|
i0.ɵɵadvance(6);
|
|
@@ -668,24 +671,24 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_23_Te
|
|
|
668
671
|
i0.ɵɵadvance(8);
|
|
669
672
|
i0.ɵɵtextInterpolate(ctx_r0.formatCost(ctx_r0.getTotalCost()));
|
|
670
673
|
i0.ɵɵadvance(26);
|
|
671
|
-
i0.ɵɵ
|
|
672
|
-
i0.ɵɵadvance();
|
|
673
|
-
i0.ɵɵ
|
|
674
|
+
i0.ɵɵrepeater(ctx_r0.getFilteredAnalyticsData());
|
|
675
|
+
i0.ɵɵadvance(2);
|
|
676
|
+
i0.ɵɵconditional(ctx_r0.getFilteredAnalyticsData().length === 0 ? 61 : -1);
|
|
674
677
|
} }
|
|
675
|
-
function
|
|
676
|
-
i0.ɵɵelementStart(0, "div",
|
|
677
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
678
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
679
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
680
|
+
i0.ɵɵelement(1, "mj-loading", 147);
|
|
678
681
|
i0.ɵɵelementEnd();
|
|
679
682
|
} }
|
|
680
|
-
function
|
|
683
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
681
684
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
682
|
-
i0.ɵɵelementStart(0, "button",
|
|
683
|
-
i0.ɵɵlistener("click", function
|
|
684
|
-
i0.ɵɵelement(1, "i",
|
|
685
|
+
i0.ɵɵelementStart(0, "button", 169);
|
|
686
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Conditional_9_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.clearMatrixFilter()); });
|
|
687
|
+
i0.ɵɵelement(1, "i", 170);
|
|
685
688
|
i0.ɵɵelementEnd();
|
|
686
689
|
} }
|
|
687
|
-
function
|
|
688
|
-
i0.ɵɵelementStart(0, "span",
|
|
690
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
691
|
+
i0.ɵɵelementStart(0, "span", 176);
|
|
689
692
|
i0.ɵɵtext(1);
|
|
690
693
|
i0.ɵɵelementEnd();
|
|
691
694
|
} if (rf & 2) {
|
|
@@ -693,37 +696,38 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
693
696
|
i0.ɵɵadvance();
|
|
694
697
|
i0.ɵɵtextInterpolate(tag_r21);
|
|
695
698
|
} }
|
|
696
|
-
function
|
|
697
|
-
i0.ɵɵelementStart(0, "span",
|
|
699
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
700
|
+
i0.ɵɵelementStart(0, "span", 177);
|
|
698
701
|
i0.ɵɵtext(1);
|
|
699
702
|
i0.ɵɵelementEnd();
|
|
700
703
|
} if (rf & 2) {
|
|
701
704
|
const run_r20 = i0.ɵɵnextContext(2).$implicit;
|
|
702
705
|
i0.ɵɵadvance();
|
|
703
|
-
i0.ɵɵtextInterpolate1("+", run_r20.tags.length - 2
|
|
706
|
+
i0.ɵɵtextInterpolate1("+", run_r20.tags.length - 2);
|
|
704
707
|
} }
|
|
705
|
-
function
|
|
706
|
-
i0.ɵɵelementStart(0, "div",
|
|
707
|
-
i0.ɵɵ
|
|
708
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
709
|
+
i0.ɵɵelementStart(0, "div", 173);
|
|
710
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_For_2_Template, 2, 1, "span", 176, i0.ɵɵrepeaterTrackByIdentity);
|
|
711
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_Conditional_3_Template, 2, 1, "span", 177);
|
|
708
712
|
i0.ɵɵelementEnd();
|
|
709
713
|
} if (rf & 2) {
|
|
710
714
|
const run_r20 = i0.ɵɵnextContext().$implicit;
|
|
711
715
|
i0.ɵɵadvance();
|
|
712
|
-
i0.ɵɵ
|
|
713
|
-
i0.ɵɵadvance();
|
|
714
|
-
i0.ɵɵ
|
|
716
|
+
i0.ɵɵrepeater(run_r20.tags.slice(0, 2));
|
|
717
|
+
i0.ɵɵadvance(2);
|
|
718
|
+
i0.ɵɵconditional(run_r20.tags.length > 2 ? 3 : -1);
|
|
715
719
|
} }
|
|
716
|
-
function
|
|
720
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Template(rf, ctx) { if (rf & 1) {
|
|
717
721
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
718
|
-
i0.ɵɵelementStart(0, "th",
|
|
722
|
+
i0.ɵɵelementStart(0, "th", 171);
|
|
719
723
|
i0.ɵɵpipe(1, "date");
|
|
720
|
-
i0.ɵɵlistener("click", function
|
|
721
|
-
i0.ɵɵelementStart(2, "div",
|
|
722
|
-
i0.ɵɵ
|
|
723
|
-
i0.ɵɵelementStart(4, "div",
|
|
724
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Template_th_click_0_listener() { const run_r20 = i0.ɵɵrestoreView(_r19).$implicit; const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.openSuiteRun(run_r20.runId)); });
|
|
725
|
+
i0.ɵɵelementStart(2, "div", 172);
|
|
726
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Conditional_3_Template, 4, 1, "div", 173);
|
|
727
|
+
i0.ɵɵelementStart(4, "div", 174);
|
|
724
728
|
i0.ɵɵtext(5);
|
|
725
729
|
i0.ɵɵelementEnd();
|
|
726
|
-
i0.ɵɵelementStart(6, "div",
|
|
730
|
+
i0.ɵɵelementStart(6, "div", 175);
|
|
727
731
|
i0.ɵɵtext(7);
|
|
728
732
|
i0.ɵɵelementEnd()()();
|
|
729
733
|
} if (rf & 2) {
|
|
@@ -731,7 +735,7 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
731
735
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
732
736
|
i0.ɵɵproperty("title", "Click to view suite run - " + i0.ɵɵpipeBind2(1, 5, run_r20.date, "medium"));
|
|
733
737
|
i0.ɵɵadvance(3);
|
|
734
|
-
i0.ɵɵ
|
|
738
|
+
i0.ɵɵconditional(run_r20.tags.length > 0 ? 3 : -1);
|
|
735
739
|
i0.ɵɵadvance(2);
|
|
736
740
|
i0.ɵɵtextInterpolate(ctx_r0.getRelativeTime(run_r20.date));
|
|
737
741
|
i0.ɵɵadvance();
|
|
@@ -739,110 +743,114 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
739
743
|
i0.ɵɵadvance();
|
|
740
744
|
i0.ɵɵtextInterpolate1(" ", run_r20.passRate.toFixed(0), "% ");
|
|
741
745
|
} }
|
|
742
|
-
function
|
|
743
|
-
i0.ɵɵelementStart(0, "span",
|
|
744
|
-
i0.ɵɵelement(1, "i",
|
|
746
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
747
|
+
i0.ɵɵelementStart(0, "span", 191);
|
|
748
|
+
i0.ɵɵelement(1, "i", 79);
|
|
745
749
|
i0.ɵɵelementEnd();
|
|
746
750
|
} if (rf & 2) {
|
|
747
|
-
const result_r26 = i0.ɵɵnextContext()
|
|
751
|
+
const result_r26 = i0.ɵɵnextContext();
|
|
748
752
|
const ctx_r0 = i0.ɵɵnextContext(7);
|
|
749
753
|
i0.ɵɵclassProp("cell-skipped-status", result_r26.status === "Skipped" || result_r26.status === "Pending");
|
|
750
754
|
i0.ɵɵproperty("ngClass", "status-" + result_r26.status.toLowerCase())("title", ctx_r0.getStatusTooltip(result_r26.status));
|
|
751
755
|
i0.ɵɵadvance();
|
|
752
756
|
i0.ɵɵclassProp("fa-check", result_r26.status === "Passed")("fa-times", result_r26.status === "Failed")("fa-exclamation", result_r26.status === "Error")("fa-hourglass-end", result_r26.status === "Timeout")("fa-forward", result_r26.status === "Skipped")("fa-spinner", result_r26.status === "Running")("fa-clock", result_r26.status === "Pending");
|
|
753
757
|
} }
|
|
754
|
-
function
|
|
755
|
-
i0.ɵɵelementStart(0, "span",
|
|
756
|
-
i0.ɵɵelement(1, "i",
|
|
758
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
759
|
+
i0.ɵɵelementStart(0, "span", 187);
|
|
760
|
+
i0.ɵɵelement(1, "i", 192);
|
|
757
761
|
i0.ɵɵelementEnd();
|
|
758
762
|
} }
|
|
759
|
-
function
|
|
760
|
-
i0.ɵɵelementStart(0, "span",
|
|
761
|
-
i0.ɵɵelement(1, "i",
|
|
762
|
-
i0.ɵɵelementStart(2, "span",
|
|
763
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
764
|
+
i0.ɵɵelementStart(0, "span", 193);
|
|
765
|
+
i0.ɵɵelement(1, "i", 93);
|
|
766
|
+
i0.ɵɵelementStart(2, "span", 194);
|
|
763
767
|
i0.ɵɵtext(3);
|
|
764
768
|
i0.ɵɵelementEnd()();
|
|
765
769
|
} if (rf & 2) {
|
|
766
|
-
const result_r26 = i0.ɵɵnextContext()
|
|
770
|
+
const result_r26 = i0.ɵɵnextContext();
|
|
767
771
|
const ctx_r0 = i0.ɵɵnextContext(7);
|
|
768
772
|
i0.ɵɵclassProp("rating-low", result_r26.humanRating <= 4)("rating-medium", result_r26.humanRating >= 5 && result_r26.humanRating <= 6)("rating-good", result_r26.humanRating >= 7 && result_r26.humanRating <= 8)("rating-excellent", result_r26.humanRating >= 9);
|
|
769
773
|
i0.ɵɵproperty("title", ctx_r0.getHumanTooltip(result_r26.humanRating, result_r26.humanComments));
|
|
770
774
|
i0.ɵɵadvance(3);
|
|
771
775
|
i0.ɵɵtextInterpolate(result_r26.humanRating);
|
|
772
776
|
} }
|
|
773
|
-
function
|
|
774
|
-
i0.ɵɵelementStart(0, "span",
|
|
775
|
-
i0.ɵɵelement(1, "i",
|
|
776
|
-
i0.ɵɵelementStart(2, "span",
|
|
777
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
778
|
+
i0.ɵɵelementStart(0, "span", 195);
|
|
779
|
+
i0.ɵɵelement(1, "i", 97);
|
|
780
|
+
i0.ɵɵelementStart(2, "span", 196);
|
|
777
781
|
i0.ɵɵtext(3);
|
|
778
782
|
i0.ɵɵelementEnd()();
|
|
779
783
|
} if (rf & 2) {
|
|
780
|
-
const result_r26 = i0.ɵɵnextContext()
|
|
784
|
+
const result_r26 = i0.ɵɵnextContext();
|
|
781
785
|
i0.ɵɵclassProp("score-low", result_r26.score < 0.5)("score-medium", result_r26.score >= 0.5 && result_r26.score < 0.7)("score-good", result_r26.score >= 0.7 && result_r26.score < 0.85)("score-excellent", result_r26.score >= 0.85);
|
|
782
786
|
i0.ɵɵproperty("title", "Auto Score: " + (result_r26.score * 100).toFixed(0) + "% automated evaluation");
|
|
783
787
|
i0.ɵɵadvance(3);
|
|
784
788
|
i0.ɵɵtextInterpolate((result_r26.score * 100).toFixed(0));
|
|
785
789
|
} }
|
|
786
|
-
function
|
|
787
|
-
i0.ɵɵelementStart(0, "span",
|
|
788
|
-
i0.ɵɵelement(1, "i",
|
|
790
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
792
|
+
i0.ɵɵelement(1, "i", 97);
|
|
789
793
|
i0.ɵɵelementEnd();
|
|
790
794
|
} }
|
|
791
|
-
function
|
|
792
|
-
i0.ɵɵ
|
|
793
|
-
i0.ɵɵ
|
|
794
|
-
i0.ɵɵ
|
|
795
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
796
|
+
i0.ɵɵelementStart(0, "div", 184);
|
|
797
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_1_Template, 2, 18, "span", 186);
|
|
798
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_2_Template, 2, 0, "span", 187);
|
|
799
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_3_Template, 4, 10, "span", 188);
|
|
800
|
+
i0.ɵɵconditionalCreate(4, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_4_Template, 4, 10, "span", 189);
|
|
801
|
+
i0.ɵɵconditionalCreate(5, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Conditional_5_Template, 2, 0, "span", 190);
|
|
795
802
|
i0.ɵɵelementEnd();
|
|
796
|
-
i0.ɵɵelementContainerEnd();
|
|
797
803
|
} if (rf & 2) {
|
|
798
|
-
const result_r26 = ctx
|
|
804
|
+
const result_r26 = ctx;
|
|
799
805
|
const ctx_r0 = i0.ɵɵnextContext(7);
|
|
800
|
-
i0.ɵɵadvance(2);
|
|
801
|
-
i0.ɵɵproperty("ngIf", ctx_r0.evalPreferences.showExecution);
|
|
802
806
|
i0.ɵɵadvance();
|
|
803
|
-
i0.ɵɵ
|
|
807
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showExecution ? 1 : -1);
|
|
808
|
+
i0.ɵɵadvance();
|
|
809
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showHuman && !result_r26.humanRating ? 2 : -1);
|
|
804
810
|
i0.ɵɵadvance();
|
|
805
|
-
i0.ɵɵ
|
|
811
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showHuman && result_r26.humanRating ? 3 : -1);
|
|
806
812
|
i0.ɵɵadvance();
|
|
807
|
-
i0.ɵɵ
|
|
813
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showAuto && result_r26.score != null ? 4 : -1);
|
|
808
814
|
i0.ɵɵadvance();
|
|
809
|
-
i0.ɵɵ
|
|
815
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showAuto && result_r26.score == null ? 5 : -1);
|
|
810
816
|
} }
|
|
811
|
-
function
|
|
812
|
-
i0.ɵɵelementStart(0, "span",
|
|
813
|
-
i0.ɵɵelement(1, "i",
|
|
817
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
818
|
+
i0.ɵɵelementStart(0, "span", 185);
|
|
819
|
+
i0.ɵɵelement(1, "i", 197);
|
|
814
820
|
i0.ɵɵelementEnd();
|
|
815
821
|
} }
|
|
816
|
-
function
|
|
822
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
817
823
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
818
|
-
i0.ɵɵelementStart(0, "td",
|
|
819
|
-
i0.ɵɵlistener("click", function
|
|
820
|
-
i0.ɵɵ
|
|
824
|
+
i0.ɵɵelementStart(0, "td", 183);
|
|
825
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Template_td_click_0_listener($event) { const run_r25 = i0.ɵɵrestoreView(_r24).$implicit; const test_r23 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.onMatrixCellClick(ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId), $event)); });
|
|
826
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_1_Template, 6, 5, "div", 184);
|
|
827
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Conditional_2_Template, 2, 0, "span", 185);
|
|
821
828
|
i0.ɵɵelementEnd();
|
|
822
829
|
} if (rf & 2) {
|
|
823
|
-
let
|
|
830
|
+
let tmp_27_0;
|
|
831
|
+
let tmp_28_0;
|
|
824
832
|
const run_r25 = ctx.$implicit;
|
|
825
833
|
const test_r23 = i0.ɵɵnextContext().$implicit;
|
|
826
834
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
827
835
|
i0.ɵɵclassProp("clickable", ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId))("cell-not-run", !ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId));
|
|
828
|
-
i0.ɵɵproperty("ngClass", ctx_r0.getMatrixCellClass(ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId)))("title", ((
|
|
836
|
+
i0.ɵɵproperty("ngClass", ctx_r0.getMatrixCellClass(ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId)))("title", ((tmp_27_0 = ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId)) == null ? null : tmp_27_0.status) + " - Click to view test run" || "Not Run");
|
|
829
837
|
i0.ɵɵadvance();
|
|
830
|
-
i0.ɵɵ
|
|
838
|
+
i0.ɵɵconditional((tmp_28_0 = ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId)) ? 1 : -1, tmp_28_0);
|
|
831
839
|
i0.ɵɵadvance();
|
|
832
|
-
i0.ɵɵ
|
|
840
|
+
i0.ɵɵconditional(!ctx_r0.getTestResultForRun(run_r25.runId, test_r23.testId) ? 2 : -1);
|
|
833
841
|
} }
|
|
834
|
-
function
|
|
842
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_Template(rf, ctx) { if (rf & 1) {
|
|
835
843
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
836
|
-
i0.ɵɵelementStart(0, "tr",
|
|
837
|
-
i0.ɵɵlistener("click", function
|
|
838
|
-
i0.ɵɵelementStart(1, "td",
|
|
844
|
+
i0.ɵɵelementStart(0, "tr", 178);
|
|
845
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_Template_tr_click_0_listener() { const test_r23 = i0.ɵɵrestoreView(_r22).$implicit; const ctx_r0 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r0.selectMatrixRow(test_r23.testId)); });
|
|
846
|
+
i0.ɵɵelementStart(1, "td", 179);
|
|
839
847
|
i0.ɵɵtext(2);
|
|
840
848
|
i0.ɵɵelementEnd();
|
|
841
|
-
i0.ɵɵelementStart(3, "td",
|
|
849
|
+
i0.ɵɵelementStart(3, "td", 180)(4, "span", 181);
|
|
842
850
|
i0.ɵɵtext(5);
|
|
843
851
|
i0.ɵɵelementEnd()();
|
|
844
|
-
i0.ɵɵ
|
|
845
|
-
i0.ɵɵelement(
|
|
852
|
+
i0.ɵɵrepeaterCreate(6, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_For_7_Template, 3, 8, "td", 182, i0.ɵɵrepeaterTrackByIdentity);
|
|
853
|
+
i0.ɵɵelement(8, "td", 168);
|
|
846
854
|
i0.ɵɵelementEnd();
|
|
847
855
|
} if (rf & 2) {
|
|
848
856
|
const test_r23 = ctx.$implicit;
|
|
@@ -855,45 +863,45 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
855
863
|
i0.ɵɵadvance();
|
|
856
864
|
i0.ɵɵtextInterpolate(test_r23.testName);
|
|
857
865
|
i0.ɵɵadvance();
|
|
858
|
-
i0.ɵɵ
|
|
866
|
+
i0.ɵɵrepeater(ctx_r0.matrixData);
|
|
859
867
|
} }
|
|
860
|
-
function
|
|
861
|
-
i0.ɵɵelementStart(0, "span",
|
|
868
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
869
|
+
i0.ɵɵelementStart(0, "span", 199)(1, "span", 202);
|
|
862
870
|
i0.ɵɵtext(2);
|
|
863
871
|
i0.ɵɵelementEnd()();
|
|
864
872
|
} if (rf & 2) {
|
|
865
873
|
const run_r27 = i0.ɵɵnextContext().$implicit;
|
|
866
874
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
867
875
|
i0.ɵɵadvance(2);
|
|
868
|
-
i0.ɵɵtextInterpolate2("", ctx_r0.getRunPassedCount(run_r27), "/", ctx_r0.getRunTotalCount(run_r27)
|
|
876
|
+
i0.ɵɵtextInterpolate2("", ctx_r0.getRunPassedCount(run_r27), "/", ctx_r0.getRunTotalCount(run_r27));
|
|
869
877
|
} }
|
|
870
|
-
function
|
|
871
|
-
i0.ɵɵelementStart(0, "span",
|
|
878
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
879
|
+
i0.ɵɵelementStart(0, "span", 203);
|
|
872
880
|
i0.ɵɵtext(1);
|
|
873
881
|
i0.ɵɵelementEnd();
|
|
874
882
|
} if (rf & 2) {
|
|
875
|
-
let
|
|
883
|
+
let tmp_16_0;
|
|
876
884
|
const run_r27 = i0.ɵɵnextContext(2).$implicit;
|
|
877
885
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
878
886
|
i0.ɵɵadvance();
|
|
879
|
-
i0.ɵɵtextInterpolate((
|
|
887
|
+
i0.ɵɵtextInterpolate((tmp_16_0 = ctx_r0.getRunHumanAvg(run_r27)) == null ? null : tmp_16_0.toFixed(1));
|
|
880
888
|
} }
|
|
881
|
-
function
|
|
882
|
-
i0.ɵɵelementStart(0, "span",
|
|
883
|
-
i0.ɵɵ
|
|
884
|
-
i0.ɵɵelementStart(2, "span",
|
|
889
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
890
|
+
i0.ɵɵelementStart(0, "span", 200);
|
|
891
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_3_Conditional_1_Template, 2, 1, "span", 203);
|
|
892
|
+
i0.ɵɵelementStart(2, "span", 204);
|
|
885
893
|
i0.ɵɵtext(3);
|
|
886
894
|
i0.ɵɵelementEnd()();
|
|
887
895
|
} if (rf & 2) {
|
|
888
896
|
const run_r27 = i0.ɵɵnextContext().$implicit;
|
|
889
897
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
890
898
|
i0.ɵɵadvance();
|
|
891
|
-
i0.ɵɵ
|
|
899
|
+
i0.ɵɵconditional(ctx_r0.getRunHumanAvg(run_r27) != null ? 1 : -1);
|
|
892
900
|
i0.ɵɵadvance(2);
|
|
893
901
|
i0.ɵɵtextInterpolate1("(", ctx_r0.getRunHumanCount(run_r27), ")");
|
|
894
902
|
} }
|
|
895
|
-
function
|
|
896
|
-
i0.ɵɵelementStart(0, "span",
|
|
903
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
904
|
+
i0.ɵɵelementStart(0, "span", 203);
|
|
897
905
|
i0.ɵɵtext(1);
|
|
898
906
|
i0.ɵɵelementEnd();
|
|
899
907
|
} if (rf & 2) {
|
|
@@ -902,84 +910,86 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
902
910
|
i0.ɵɵadvance();
|
|
903
911
|
i0.ɵɵtextInterpolate1("", (ctx_r0.getRunAutoAvg(run_r27) * 100).toFixed(0), "%");
|
|
904
912
|
} }
|
|
905
|
-
function
|
|
906
|
-
i0.ɵɵelementStart(0, "span",
|
|
907
|
-
i0.ɵɵ
|
|
908
|
-
i0.ɵɵelementStart(2, "span",
|
|
913
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
914
|
+
i0.ɵɵelementStart(0, "span", 201);
|
|
915
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_4_Conditional_1_Template, 2, 1, "span", 203);
|
|
916
|
+
i0.ɵɵelementStart(2, "span", 204);
|
|
909
917
|
i0.ɵɵtext(3);
|
|
910
918
|
i0.ɵɵelementEnd()();
|
|
911
919
|
} if (rf & 2) {
|
|
912
920
|
const run_r27 = i0.ɵɵnextContext().$implicit;
|
|
913
921
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
914
922
|
i0.ɵɵadvance();
|
|
915
|
-
i0.ɵɵ
|
|
923
|
+
i0.ɵɵconditional(ctx_r0.getRunAutoAvg(run_r27) != null ? 1 : -1);
|
|
916
924
|
i0.ɵɵadvance(2);
|
|
917
925
|
i0.ɵɵtextInterpolate1("(", ctx_r0.getRunAutoCount(run_r27), ")");
|
|
918
926
|
} }
|
|
919
|
-
function
|
|
920
|
-
i0.ɵɵelementStart(0, "td",
|
|
921
|
-
i0.ɵɵ
|
|
927
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Template(rf, ctx) { if (rf & 1) {
|
|
928
|
+
i0.ɵɵelementStart(0, "td", 167)(1, "div", 198);
|
|
929
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_2_Template, 3, 2, "span", 199);
|
|
930
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_3_Template, 4, 2, "span", 200);
|
|
931
|
+
i0.ɵɵconditionalCreate(4, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Conditional_4_Template, 4, 2, "span", 201);
|
|
922
932
|
i0.ɵɵelementEnd()();
|
|
923
933
|
} if (rf & 2) {
|
|
924
934
|
const ctx_r0 = i0.ɵɵnextContext(5);
|
|
925
935
|
i0.ɵɵadvance(2);
|
|
926
|
-
i0.ɵɵ
|
|
936
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showExecution ? 2 : -1);
|
|
927
937
|
i0.ɵɵadvance();
|
|
928
|
-
i0.ɵɵ
|
|
938
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showHuman ? 3 : -1);
|
|
929
939
|
i0.ɵɵadvance();
|
|
930
|
-
i0.ɵɵ
|
|
940
|
+
i0.ɵɵconditional(ctx_r0.evalPreferences.showAuto ? 4 : -1);
|
|
931
941
|
} }
|
|
932
|
-
function
|
|
942
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
933
943
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
934
|
-
i0.ɵɵelementStart(0, "div",
|
|
935
|
-
i0.ɵɵelement(3, "i",
|
|
944
|
+
i0.ɵɵelementStart(0, "div", 146)(1, "div", 148)(2, "h3");
|
|
945
|
+
i0.ɵɵelement(3, "i", 105);
|
|
936
946
|
i0.ɵɵtext(4, " Test Results Matrix");
|
|
937
947
|
i0.ɵɵelementEnd();
|
|
938
|
-
i0.ɵɵelementStart(5, "div",
|
|
939
|
-
i0.ɵɵelement(7, "i",
|
|
940
|
-
i0.ɵɵelementStart(8, "input",
|
|
941
|
-
i0.ɵɵlistener("input", function
|
|
948
|
+
i0.ɵɵelementStart(5, "div", 149)(6, "div", 150);
|
|
949
|
+
i0.ɵɵelement(7, "i", 151);
|
|
950
|
+
i0.ɵɵelementStart(8, "input", 152);
|
|
951
|
+
i0.ɵɵlistener("input", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template_input_input_8_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.onMatrixFilterInput($event)); });
|
|
942
952
|
i0.ɵɵelementEnd();
|
|
943
|
-
i0.ɵɵ
|
|
953
|
+
i0.ɵɵconditionalCreate(9, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Conditional_9_Template, 2, 0, "button", 153);
|
|
944
954
|
i0.ɵɵelementEnd();
|
|
945
|
-
i0.ɵɵelementStart(10, "span",
|
|
955
|
+
i0.ɵɵelementStart(10, "span", 154);
|
|
946
956
|
i0.ɵɵtext(11);
|
|
947
957
|
i0.ɵɵelementEnd();
|
|
948
|
-
i0.ɵɵelementStart(12, "button",
|
|
949
|
-
i0.ɵɵlistener("click", function
|
|
950
|
-
i0.ɵɵelement(13, "i",
|
|
958
|
+
i0.ɵɵelementStart(12, "button", 155);
|
|
959
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.exportMatrixToCSV()); });
|
|
960
|
+
i0.ɵɵelement(13, "i", 156);
|
|
951
961
|
i0.ɵɵtext(14, " Export ");
|
|
952
962
|
i0.ɵɵelementEnd()()();
|
|
953
|
-
i0.ɵɵelementStart(15, "div",
|
|
954
|
-
i0.ɵɵlistener("click", function
|
|
963
|
+
i0.ɵɵelementStart(15, "div", 157)(16, "table", 158)(17, "thead")(18, "tr")(19, "th", 159);
|
|
964
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template_th_click_19_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleMatrixSort("sequence")); });
|
|
955
965
|
i0.ɵɵtext(20, " # ");
|
|
956
966
|
i0.ɵɵelement(21, "i", 16);
|
|
957
967
|
i0.ɵɵelementEnd();
|
|
958
|
-
i0.ɵɵelementStart(22, "th",
|
|
959
|
-
i0.ɵɵlistener("click", function
|
|
968
|
+
i0.ɵɵelementStart(22, "th", 160);
|
|
969
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template_th_click_22_listener() { i0.ɵɵrestoreView(_r17); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.toggleMatrixSort("name")); });
|
|
960
970
|
i0.ɵɵtext(23, " Test ");
|
|
961
971
|
i0.ɵɵelement(24, "i", 16);
|
|
962
972
|
i0.ɵɵelementEnd();
|
|
963
|
-
i0.ɵɵ
|
|
964
|
-
i0.ɵɵelement(
|
|
973
|
+
i0.ɵɵrepeaterCreate(25, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_26_Template, 8, 12, "th", 161, i0.ɵɵrepeaterTrackByIdentity);
|
|
974
|
+
i0.ɵɵelement(27, "th", 162);
|
|
965
975
|
i0.ɵɵelementEnd()();
|
|
966
|
-
i0.ɵɵelementStart(
|
|
967
|
-
i0.ɵɵ
|
|
976
|
+
i0.ɵɵelementStart(28, "tbody");
|
|
977
|
+
i0.ɵɵrepeaterCreate(29, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_30_Template, 9, 5, "tr", 163, i0.ɵɵrepeaterTrackByIdentity);
|
|
968
978
|
i0.ɵɵelementEnd();
|
|
969
|
-
i0.ɵɵelementStart(
|
|
970
|
-
i0.ɵɵelement(
|
|
971
|
-
i0.ɵɵelementStart(
|
|
972
|
-
i0.ɵɵtext(
|
|
979
|
+
i0.ɵɵelementStart(31, "tfoot")(32, "tr", 164);
|
|
980
|
+
i0.ɵɵelement(33, "td", 165);
|
|
981
|
+
i0.ɵɵelementStart(34, "td", 166)(35, "strong");
|
|
982
|
+
i0.ɵɵtext(36, "Totals");
|
|
973
983
|
i0.ɵɵelementEnd()();
|
|
974
|
-
i0.ɵɵ
|
|
975
|
-
i0.ɵɵelement(
|
|
984
|
+
i0.ɵɵrepeaterCreate(37, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_For_38_Template, 5, 3, "td", 167, i0.ɵɵrepeaterTrackByIdentity);
|
|
985
|
+
i0.ɵɵelement(39, "td", 168);
|
|
976
986
|
i0.ɵɵelementEnd()()()()();
|
|
977
987
|
} if (rf & 2) {
|
|
978
988
|
const ctx_r0 = i0.ɵɵnextContext(4);
|
|
979
989
|
i0.ɵɵadvance(8);
|
|
980
990
|
i0.ɵɵproperty("value", ctx_r0.matrixTestFilter);
|
|
981
991
|
i0.ɵɵadvance();
|
|
982
|
-
i0.ɵɵ
|
|
992
|
+
i0.ɵɵconditional(ctx_r0.matrixTestFilter ? 9 : -1);
|
|
983
993
|
i0.ɵɵadvance(2);
|
|
984
994
|
i0.ɵɵtextInterpolate2("", ctx_r0.matrixData.length, " runs \u00B7 ", ctx_r0.getUniqueTestsFromMatrix().length, " tests");
|
|
985
995
|
i0.ɵɵadvance();
|
|
@@ -989,15 +999,15 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
989
999
|
i0.ɵɵadvance(3);
|
|
990
1000
|
i0.ɵɵproperty("ngClass", ctx_r0.matrixSortBy === "name" ? ctx_r0.matrixSortAsc ? "fa-sort-up" : "fa-sort-down" : "fa-sort");
|
|
991
1001
|
i0.ɵɵadvance();
|
|
992
|
-
i0.ɵɵ
|
|
993
|
-
i0.ɵɵadvance(
|
|
994
|
-
i0.ɵɵ
|
|
995
|
-
i0.ɵɵadvance(
|
|
996
|
-
i0.ɵɵ
|
|
1002
|
+
i0.ɵɵrepeater(ctx_r0.matrixData);
|
|
1003
|
+
i0.ɵɵadvance(4);
|
|
1004
|
+
i0.ɵɵrepeater(ctx_r0.getUniqueTestsFromMatrix());
|
|
1005
|
+
i0.ɵɵadvance(8);
|
|
1006
|
+
i0.ɵɵrepeater(ctx_r0.matrixData);
|
|
997
1007
|
} }
|
|
998
|
-
function
|
|
999
|
-
i0.ɵɵelementStart(0, "div",
|
|
1000
|
-
i0.ɵɵelement(2, "i",
|
|
1008
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1009
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
1010
|
+
i0.ɵɵelement(2, "i", 105);
|
|
1001
1011
|
i0.ɵɵelementEnd();
|
|
1002
1012
|
i0.ɵɵelementStart(3, "h4");
|
|
1003
1013
|
i0.ɵɵtext(4, "No Matrix Data");
|
|
@@ -1006,50 +1016,49 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_24_di
|
|
|
1006
1016
|
i0.ɵɵtext(6, "No suite runs match the current filters.");
|
|
1007
1017
|
i0.ɵɵelementEnd()();
|
|
1008
1018
|
} }
|
|
1009
|
-
function
|
|
1010
|
-
i0.ɵɵ
|
|
1011
|
-
i0.ɵɵ
|
|
1012
|
-
i0.ɵɵ
|
|
1019
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
1020
|
+
i0.ɵɵconditionalCreate(0, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_0_Template, 2, 0, "div", 56);
|
|
1021
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_1_Template, 40, 7, "div", 146);
|
|
1022
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Conditional_2_Template, 7, 0, "div", 58);
|
|
1013
1023
|
} if (rf & 2) {
|
|
1014
1024
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1025
|
+
i0.ɵɵconditional(ctx_r0.loadingMatrix ? 0 : -1);
|
|
1015
1026
|
i0.ɵɵadvance();
|
|
1016
|
-
i0.ɵɵ
|
|
1017
|
-
i0.ɵɵadvance();
|
|
1018
|
-
i0.ɵɵproperty("ngIf", !ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length > 0);
|
|
1027
|
+
i0.ɵɵconditional(!ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length > 0 ? 1 : -1);
|
|
1019
1028
|
i0.ɵɵadvance();
|
|
1020
|
-
i0.ɵɵ
|
|
1029
|
+
i0.ɵɵconditional(!ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length === 0 ? 2 : -1);
|
|
1021
1030
|
} }
|
|
1022
|
-
function
|
|
1023
|
-
i0.ɵɵelementStart(0, "div",
|
|
1024
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1031
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1032
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
1033
|
+
i0.ɵɵelement(1, "mj-loading", 206);
|
|
1025
1034
|
i0.ɵɵelementEnd();
|
|
1026
1035
|
} }
|
|
1027
|
-
function
|
|
1028
|
-
i0.ɵɵelementStart(0, "div",
|
|
1029
|
-
i0.ɵɵelement(3, "i",
|
|
1036
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1037
|
+
i0.ɵɵelementStart(0, "div", 205)(1, "div", 207)(2, "h3");
|
|
1038
|
+
i0.ɵɵelement(3, "i", 106);
|
|
1030
1039
|
i0.ɵɵtext(4, " Test Results Flow");
|
|
1031
1040
|
i0.ɵɵelementEnd();
|
|
1032
|
-
i0.ɵɵelementStart(5, "div",
|
|
1033
|
-
i0.ɵɵelement(7, "i",
|
|
1041
|
+
i0.ɵɵelementStart(5, "div", 208)(6, "span", 209);
|
|
1042
|
+
i0.ɵɵelement(7, "i", 121);
|
|
1034
1043
|
i0.ɵɵtext(8, " Passed");
|
|
1035
1044
|
i0.ɵɵelementEnd();
|
|
1036
|
-
i0.ɵɵelementStart(9, "span",
|
|
1037
|
-
i0.ɵɵelement(10, "i",
|
|
1045
|
+
i0.ɵɵelementStart(9, "span", 210);
|
|
1046
|
+
i0.ɵɵelement(10, "i", 170);
|
|
1038
1047
|
i0.ɵɵtext(11, " Failed");
|
|
1039
1048
|
i0.ɵɵelementEnd();
|
|
1040
|
-
i0.ɵɵelementStart(12, "span",
|
|
1041
|
-
i0.ɵɵelement(13, "i",
|
|
1049
|
+
i0.ɵɵelementStart(12, "span", 211);
|
|
1050
|
+
i0.ɵɵelement(13, "i", 212);
|
|
1042
1051
|
i0.ɵɵtext(14, " Error");
|
|
1043
1052
|
i0.ɵɵelementEnd();
|
|
1044
|
-
i0.ɵɵelementStart(15, "span",
|
|
1045
|
-
i0.ɵɵelement(16, "i",
|
|
1053
|
+
i0.ɵɵelementStart(15, "span", 213);
|
|
1054
|
+
i0.ɵɵelement(16, "i", 214);
|
|
1046
1055
|
i0.ɵɵtext(17, " Skipped");
|
|
1047
1056
|
i0.ɵɵelementEnd()()();
|
|
1048
|
-
i0.ɵɵelementStart(18, "div",
|
|
1049
|
-
i0.ɵɵelement(19, "div",
|
|
1057
|
+
i0.ɵɵelementStart(18, "div", 215);
|
|
1058
|
+
i0.ɵɵelement(19, "div", 216, 0);
|
|
1050
1059
|
i0.ɵɵelementEnd();
|
|
1051
|
-
i0.ɵɵelementStart(21, "div",
|
|
1052
|
-
i0.ɵɵelement(22, "i",
|
|
1060
|
+
i0.ɵɵelementStart(21, "div", 217);
|
|
1061
|
+
i0.ɵɵelement(22, "i", 44);
|
|
1053
1062
|
i0.ɵɵtext(23);
|
|
1054
1063
|
i0.ɵɵelementEnd()();
|
|
1055
1064
|
} if (rf & 2) {
|
|
@@ -1057,9 +1066,9 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_25_di
|
|
|
1057
1066
|
i0.ɵɵadvance(23);
|
|
1058
1067
|
i0.ɵɵtextInterpolate1(" Interactive visualization showing test results across ", ctx_r0.matrixData.length, " runs. Hover over elements for details, click nodes to navigate. ");
|
|
1059
1068
|
} }
|
|
1060
|
-
function
|
|
1061
|
-
i0.ɵɵelementStart(0, "div",
|
|
1062
|
-
i0.ɵɵelement(2, "i",
|
|
1069
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1070
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
1071
|
+
i0.ɵɵelement(2, "i", 106);
|
|
1063
1072
|
i0.ɵɵelementEnd();
|
|
1064
1073
|
i0.ɵɵelementStart(3, "h4");
|
|
1065
1074
|
i0.ɵɵtext(4, "No Chart Data");
|
|
@@ -1068,56 +1077,55 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_ng_container_25_di
|
|
|
1068
1077
|
i0.ɵɵtext(6, "No suite runs match the current filters.");
|
|
1069
1078
|
i0.ɵɵelementEnd()();
|
|
1070
1079
|
} }
|
|
1071
|
-
function
|
|
1072
|
-
i0.ɵɵ
|
|
1073
|
-
i0.ɵɵ
|
|
1074
|
-
i0.ɵɵ
|
|
1080
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1081
|
+
i0.ɵɵconditionalCreate(0, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_0_Template, 2, 0, "div", 56);
|
|
1082
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_1_Template, 24, 1, "div", 205);
|
|
1083
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Conditional_2_Template, 7, 0, "div", 58);
|
|
1075
1084
|
} if (rf & 2) {
|
|
1076
1085
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1086
|
+
i0.ɵɵconditional(ctx_r0.loadingMatrix ? 0 : -1);
|
|
1077
1087
|
i0.ɵɵadvance();
|
|
1078
|
-
i0.ɵɵ
|
|
1088
|
+
i0.ɵɵconditional(!ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length > 0 ? 1 : -1);
|
|
1079
1089
|
i0.ɵɵadvance();
|
|
1080
|
-
i0.ɵɵ
|
|
1081
|
-
i0.ɵɵadvance();
|
|
1082
|
-
i0.ɵɵproperty("ngIf", !ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length === 0);
|
|
1090
|
+
i0.ɵɵconditional(!ctx_r0.loadingMatrix && ctx_r0.matrixLoaded && ctx_r0.matrixData.length === 0 ? 2 : -1);
|
|
1083
1091
|
} }
|
|
1084
|
-
function
|
|
1092
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1085
1093
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
1086
|
-
i0.ɵɵ
|
|
1087
|
-
i0.ɵɵ
|
|
1088
|
-
i0.ɵɵ
|
|
1089
|
-
i0.ɵɵ
|
|
1090
|
-
i0.ɵɵ
|
|
1091
|
-
i0.ɵɵtext(6, "Summary");
|
|
1094
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "div", 102)(2, "button", 103);
|
|
1095
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.setAnalyticsView("summary")); });
|
|
1096
|
+
i0.ɵɵelement(3, "i", 104);
|
|
1097
|
+
i0.ɵɵelementStart(4, "span");
|
|
1098
|
+
i0.ɵɵtext(5, "Summary");
|
|
1092
1099
|
i0.ɵɵelementEnd()();
|
|
1093
|
-
i0.ɵɵelementStart(
|
|
1094
|
-
i0.ɵɵlistener("click", function
|
|
1095
|
-
i0.ɵɵelement(
|
|
1096
|
-
i0.ɵɵelementStart(
|
|
1097
|
-
i0.ɵɵtext(
|
|
1100
|
+
i0.ɵɵelementStart(6, "button", 103);
|
|
1101
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.setAnalyticsView("matrix")); });
|
|
1102
|
+
i0.ɵɵelement(7, "i", 105);
|
|
1103
|
+
i0.ɵɵelementStart(8, "span");
|
|
1104
|
+
i0.ɵɵtext(9, "Matrix");
|
|
1098
1105
|
i0.ɵɵelementEnd()();
|
|
1099
|
-
i0.ɵɵelementStart(
|
|
1100
|
-
i0.ɵɵlistener("click", function
|
|
1101
|
-
i0.ɵɵelement(
|
|
1102
|
-
i0.ɵɵelementStart(
|
|
1103
|
-
i0.ɵɵtext(
|
|
1106
|
+
i0.ɵɵelementStart(10, "button", 103);
|
|
1107
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.setAnalyticsView("chart")); });
|
|
1108
|
+
i0.ɵɵelement(11, "i", 106);
|
|
1109
|
+
i0.ɵɵelementStart(12, "span");
|
|
1110
|
+
i0.ɵɵtext(13, "Chart");
|
|
1104
1111
|
i0.ɵɵelementEnd()()()();
|
|
1105
|
-
i0.ɵɵelementStart(
|
|
1106
|
-
i0.ɵɵlistener("click", function
|
|
1107
|
-
i0.ɵɵelementStart(
|
|
1108
|
-
i0.ɵɵelement(
|
|
1109
|
-
i0.ɵɵtext(
|
|
1110
|
-
i0.ɵɵ
|
|
1112
|
+
i0.ɵɵelementStart(14, "div", 107)(15, "div", 108);
|
|
1113
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template_div_click_15_listener() { i0.ɵɵrestoreView(_r9); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFilters()); });
|
|
1114
|
+
i0.ɵɵelementStart(16, "span", 109);
|
|
1115
|
+
i0.ɵɵelement(17, "i", 110);
|
|
1116
|
+
i0.ɵɵtext(18, " Filters ");
|
|
1117
|
+
i0.ɵɵconditionalCreate(19, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_19_Template, 3, 2, "span", 111);
|
|
1111
1118
|
i0.ɵɵelementEnd();
|
|
1112
|
-
i0.ɵɵelement(
|
|
1119
|
+
i0.ɵɵelement(20, "i", 16);
|
|
1113
1120
|
i0.ɵɵelementEnd();
|
|
1114
|
-
i0.ɵɵ
|
|
1121
|
+
i0.ɵɵconditionalCreate(21, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_21_Template, 14, 9, "div", 112);
|
|
1115
1122
|
i0.ɵɵelementEnd();
|
|
1116
|
-
i0.ɵɵ
|
|
1117
|
-
i0.ɵɵ
|
|
1123
|
+
i0.ɵɵconditionalCreate(22, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_22_Template, 62, 15);
|
|
1124
|
+
i0.ɵɵconditionalCreate(23, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_23_Template, 3, 3);
|
|
1125
|
+
i0.ɵɵconditionalCreate(24, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Conditional_24_Template, 3, 3);
|
|
1118
1126
|
} if (rf & 2) {
|
|
1119
1127
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1120
|
-
i0.ɵɵadvance(
|
|
1128
|
+
i0.ɵɵadvance(2);
|
|
1121
1129
|
i0.ɵɵclassProp("active", ctx_r0.analyticsView === "summary");
|
|
1122
1130
|
i0.ɵɵadvance(4);
|
|
1123
1131
|
i0.ɵɵclassProp("active", ctx_r0.analyticsView === "matrix");
|
|
@@ -1126,21 +1134,21 @@ function TestSuiteFormComponentExtended_div_61_ng_container_2_Template(rf, ctx)
|
|
|
1126
1134
|
i0.ɵɵadvance(4);
|
|
1127
1135
|
i0.ɵɵclassProp("collapsed", ctx_r0.filtersCollapsed);
|
|
1128
1136
|
i0.ɵɵadvance(5);
|
|
1129
|
-
i0.ɵɵ
|
|
1137
|
+
i0.ɵɵconditional(ctx_r0.filtersCollapsed ? 19 : -1);
|
|
1130
1138
|
i0.ɵɵadvance();
|
|
1131
1139
|
i0.ɵɵproperty("ngClass", ctx_r0.filtersCollapsed ? "fa-chevron-down" : "fa-chevron-up");
|
|
1132
1140
|
i0.ɵɵadvance();
|
|
1133
|
-
i0.ɵɵ
|
|
1141
|
+
i0.ɵɵconditional(!ctx_r0.filtersCollapsed ? 21 : -1);
|
|
1134
1142
|
i0.ɵɵadvance();
|
|
1135
|
-
i0.ɵɵ
|
|
1143
|
+
i0.ɵɵconditional(ctx_r0.analyticsView === "summary" ? 22 : -1);
|
|
1136
1144
|
i0.ɵɵadvance();
|
|
1137
|
-
i0.ɵɵ
|
|
1145
|
+
i0.ɵɵconditional(ctx_r0.analyticsView === "matrix" ? 23 : -1);
|
|
1138
1146
|
i0.ɵɵadvance();
|
|
1139
|
-
i0.ɵɵ
|
|
1147
|
+
i0.ɵɵconditional(ctx_r0.analyticsView === "chart" ? 24 : -1);
|
|
1140
1148
|
} }
|
|
1141
|
-
function
|
|
1149
|
+
function TestSuiteFormComponentExtended_Conditional_61_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1142
1150
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
1143
|
-
i0.ɵɵelementStart(0, "div",
|
|
1151
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
1144
1152
|
i0.ɵɵelement(2, "i", 32);
|
|
1145
1153
|
i0.ɵɵelementEnd();
|
|
1146
1154
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -1150,26 +1158,28 @@ function TestSuiteFormComponentExtended_div_61_div_3_Template(rf, ctx) { if (rf
|
|
|
1150
1158
|
i0.ɵɵtext(6, "Run this suite to start collecting analytics data.");
|
|
1151
1159
|
i0.ɵɵelementEnd();
|
|
1152
1160
|
i0.ɵɵelementStart(7, "button", 21);
|
|
1153
|
-
i0.ɵɵlistener("click", function
|
|
1161
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_61_Conditional_3_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r28); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.runSuite()); });
|
|
1154
1162
|
i0.ɵɵelement(8, "i", 22);
|
|
1155
1163
|
i0.ɵɵtext(9, " Run Suite Now ");
|
|
1156
1164
|
i0.ɵɵelementEnd()();
|
|
1157
1165
|
} }
|
|
1158
|
-
function
|
|
1159
|
-
i0.ɵɵelementStart(0, "div",
|
|
1160
|
-
i0.ɵɵ
|
|
1166
|
+
function TestSuiteFormComponentExtended_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
1167
|
+
i0.ɵɵelementStart(0, "div", 38);
|
|
1168
|
+
i0.ɵɵconditionalCreate(1, TestSuiteFormComponentExtended_Conditional_61_Conditional_1_Template, 2, 0, "div", 56);
|
|
1169
|
+
i0.ɵɵconditionalCreate(2, TestSuiteFormComponentExtended_Conditional_61_Conditional_2_Template, 25, 14);
|
|
1170
|
+
i0.ɵɵconditionalCreate(3, TestSuiteFormComponentExtended_Conditional_61_Conditional_3_Template, 10, 0, "div", 58);
|
|
1161
1171
|
i0.ɵɵelementEnd();
|
|
1162
1172
|
} if (rf & 2) {
|
|
1163
1173
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
1164
1174
|
i0.ɵɵadvance();
|
|
1165
|
-
i0.ɵɵ
|
|
1175
|
+
i0.ɵɵconditional(ctx_r0.loadingAnalytics ? 1 : -1);
|
|
1166
1176
|
i0.ɵɵadvance();
|
|
1167
|
-
i0.ɵɵ
|
|
1177
|
+
i0.ɵɵconditional(!ctx_r0.loadingAnalytics && ctx_r0.analyticsLoaded ? 2 : -1);
|
|
1168
1178
|
i0.ɵɵadvance();
|
|
1169
|
-
i0.ɵɵ
|
|
1179
|
+
i0.ɵɵconditional(!ctx_r0.loadingAnalytics && ctx_r0.analyticsLoaded && ctx_r0.analyticsData.length === 0 ? 3 : -1);
|
|
1170
1180
|
} }
|
|
1171
|
-
function
|
|
1172
|
-
i0.ɵɵelementStart(0, "span",
|
|
1181
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1182
|
+
i0.ɵɵelementStart(0, "span", 233);
|
|
1173
1183
|
i0.ɵɵtext(1);
|
|
1174
1184
|
i0.ɵɵelementEnd();
|
|
1175
1185
|
} if (rf & 2) {
|
|
@@ -1177,29 +1187,29 @@ function TestSuiteFormComponentExtended_div_62_div_5_div_1_div_8_span_1_Template
|
|
|
1177
1187
|
i0.ɵɵadvance();
|
|
1178
1188
|
i0.ɵɵtextInterpolate(tag_r31);
|
|
1179
1189
|
} }
|
|
1180
|
-
function
|
|
1181
|
-
i0.ɵɵelementStart(0, "div",
|
|
1182
|
-
i0.ɵɵ
|
|
1190
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1191
|
+
i0.ɵɵelementStart(0, "div", 232);
|
|
1192
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Conditional_8_For_2_Template, 2, 1, "span", 233, i0.ɵɵrepeaterTrackByIdentity);
|
|
1183
1193
|
i0.ɵɵelementEnd();
|
|
1184
1194
|
} if (rf & 2) {
|
|
1185
1195
|
const run_r30 = i0.ɵɵnextContext().$implicit;
|
|
1186
1196
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1187
1197
|
i0.ɵɵadvance();
|
|
1188
|
-
i0.ɵɵ
|
|
1198
|
+
i0.ɵɵrepeater(ctx_r0.getRunTags(run_r30).slice(0, 2));
|
|
1189
1199
|
} }
|
|
1190
|
-
function
|
|
1200
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1191
1201
|
const _r29 = i0.ɵɵgetCurrentView();
|
|
1192
|
-
i0.ɵɵelementStart(0, "div",
|
|
1193
|
-
i0.ɵɵlistener("click", function
|
|
1194
|
-
i0.ɵɵelement(1, "div",
|
|
1195
|
-
i0.ɵɵelementStart(2, "div",
|
|
1202
|
+
i0.ɵɵelementStart(0, "div", 227);
|
|
1203
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Template_div_click_0_listener() { const run_r30 = i0.ɵɵrestoreView(_r29).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.selectCompareRunA(run_r30)); });
|
|
1204
|
+
i0.ɵɵelement(1, "div", 228);
|
|
1205
|
+
i0.ɵɵelementStart(2, "div", 229)(3, "div", 230);
|
|
1196
1206
|
i0.ɵɵtext(4);
|
|
1197
1207
|
i0.ɵɵpipe(5, "date");
|
|
1198
1208
|
i0.ɵɵelementEnd();
|
|
1199
|
-
i0.ɵɵelementStart(6, "div",
|
|
1209
|
+
i0.ɵɵelementStart(6, "div", 231);
|
|
1200
1210
|
i0.ɵɵtext(7);
|
|
1201
1211
|
i0.ɵɵelementEnd()();
|
|
1202
|
-
i0.ɵɵ
|
|
1212
|
+
i0.ɵɵconditionalCreate(8, TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Conditional_8_Template, 3, 0, "div", 232);
|
|
1203
1213
|
i0.ɵɵelementEnd();
|
|
1204
1214
|
} if (rf & 2) {
|
|
1205
1215
|
const run_r30 = ctx.$implicit;
|
|
@@ -1212,31 +1222,31 @@ function TestSuiteFormComponentExtended_div_62_div_5_div_1_Template(rf, ctx) { i
|
|
|
1212
1222
|
i0.ɵɵadvance(3);
|
|
1213
1223
|
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate(run_r30).toFixed(0), "% pass");
|
|
1214
1224
|
i0.ɵɵadvance();
|
|
1215
|
-
i0.ɵɵ
|
|
1225
|
+
i0.ɵɵconditional(ctx_r0.getRunTags(run_r30).length > 0 ? 8 : -1);
|
|
1216
1226
|
} }
|
|
1217
|
-
function
|
|
1218
|
-
i0.ɵɵelementStart(0, "div",
|
|
1219
|
-
i0.ɵɵ
|
|
1227
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1228
|
+
i0.ɵɵelementStart(0, "div", 220);
|
|
1229
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_62_Conditional_5_For_2_Template, 9, 10, "div", 226, i0.ɵɵrepeaterTrackByIdentity);
|
|
1220
1230
|
i0.ɵɵelementEnd();
|
|
1221
1231
|
} if (rf & 2) {
|
|
1222
1232
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1223
1233
|
i0.ɵɵadvance();
|
|
1224
|
-
i0.ɵɵ
|
|
1234
|
+
i0.ɵɵrepeater(ctx_r0.suiteRuns);
|
|
1225
1235
|
} }
|
|
1226
|
-
function
|
|
1236
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1227
1237
|
const _r32 = i0.ɵɵgetCurrentView();
|
|
1228
|
-
i0.ɵɵelementStart(0, "div",
|
|
1238
|
+
i0.ɵɵelementStart(0, "div", 221)(1, "div", 234)(2, "span", 235);
|
|
1229
1239
|
i0.ɵɵtext(3, "Selected:");
|
|
1230
1240
|
i0.ɵɵelementEnd();
|
|
1231
|
-
i0.ɵɵelementStart(4, "button",
|
|
1232
|
-
i0.ɵɵlistener("click", function
|
|
1241
|
+
i0.ɵɵelementStart(4, "button", 236);
|
|
1242
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_62_Conditional_6_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r32); const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.compareRunA = null; return i0.ɵɵresetView(ctx_r0.compareResults = []); });
|
|
1233
1243
|
i0.ɵɵtext(5, "Clear");
|
|
1234
1244
|
i0.ɵɵelementEnd()();
|
|
1235
|
-
i0.ɵɵelementStart(6, "div",
|
|
1245
|
+
i0.ɵɵelementStart(6, "div", 237)(7, "span");
|
|
1236
1246
|
i0.ɵɵtext(8);
|
|
1237
1247
|
i0.ɵɵpipe(9, "date");
|
|
1238
1248
|
i0.ɵɵelementEnd();
|
|
1239
|
-
i0.ɵɵelementStart(10, "span",
|
|
1249
|
+
i0.ɵɵelementStart(10, "span", 238);
|
|
1240
1250
|
i0.ɵɵtext(11);
|
|
1241
1251
|
i0.ɵɵelementEnd()()();
|
|
1242
1252
|
} if (rf & 2) {
|
|
@@ -1246,8 +1256,8 @@ function TestSuiteFormComponentExtended_div_62_div_6_Template(rf, ctx) { if (rf
|
|
|
1246
1256
|
i0.ɵɵadvance(3);
|
|
1247
1257
|
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate(ctx_r0.compareRunA).toFixed(1), "%");
|
|
1248
1258
|
} }
|
|
1249
|
-
function
|
|
1250
|
-
i0.ɵɵelementStart(0, "span",
|
|
1259
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1260
|
+
i0.ɵɵelementStart(0, "span", 233);
|
|
1251
1261
|
i0.ɵɵtext(1);
|
|
1252
1262
|
i0.ɵɵelementEnd();
|
|
1253
1263
|
} if (rf & 2) {
|
|
@@ -1255,29 +1265,29 @@ function TestSuiteFormComponentExtended_div_62_div_12_div_1_div_8_span_1_Templat
|
|
|
1255
1265
|
i0.ɵɵadvance();
|
|
1256
1266
|
i0.ɵɵtextInterpolate(tag_r35);
|
|
1257
1267
|
} }
|
|
1258
|
-
function
|
|
1259
|
-
i0.ɵɵelementStart(0, "div",
|
|
1260
|
-
i0.ɵɵ
|
|
1268
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1269
|
+
i0.ɵɵelementStart(0, "div", 232);
|
|
1270
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Conditional_8_For_2_Template, 2, 1, "span", 233, i0.ɵɵrepeaterTrackByIdentity);
|
|
1261
1271
|
i0.ɵɵelementEnd();
|
|
1262
1272
|
} if (rf & 2) {
|
|
1263
1273
|
const run_r34 = i0.ɵɵnextContext().$implicit;
|
|
1264
1274
|
const ctx_r0 = i0.ɵɵnextContext(3);
|
|
1265
1275
|
i0.ɵɵadvance();
|
|
1266
|
-
i0.ɵɵ
|
|
1276
|
+
i0.ɵɵrepeater(ctx_r0.getRunTags(run_r34).slice(0, 2));
|
|
1267
1277
|
} }
|
|
1268
|
-
function
|
|
1278
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1269
1279
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
1270
|
-
i0.ɵɵelementStart(0, "div",
|
|
1271
|
-
i0.ɵɵlistener("click", function
|
|
1272
|
-
i0.ɵɵelement(1, "div",
|
|
1273
|
-
i0.ɵɵelementStart(2, "div",
|
|
1280
|
+
i0.ɵɵelementStart(0, "div", 227);
|
|
1281
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Template_div_click_0_listener() { const run_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView((ctx_r0.compareRunA == null ? null : ctx_r0.compareRunA.ID) !== run_r34.ID && ctx_r0.selectCompareRunB(run_r34)); });
|
|
1282
|
+
i0.ɵɵelement(1, "div", 228);
|
|
1283
|
+
i0.ɵɵelementStart(2, "div", 229)(3, "div", 230);
|
|
1274
1284
|
i0.ɵɵtext(4);
|
|
1275
1285
|
i0.ɵɵpipe(5, "date");
|
|
1276
1286
|
i0.ɵɵelementEnd();
|
|
1277
|
-
i0.ɵɵelementStart(6, "div",
|
|
1287
|
+
i0.ɵɵelementStart(6, "div", 231);
|
|
1278
1288
|
i0.ɵɵtext(7);
|
|
1279
1289
|
i0.ɵɵelementEnd()();
|
|
1280
|
-
i0.ɵɵ
|
|
1290
|
+
i0.ɵɵconditionalCreate(8, TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Conditional_8_Template, 3, 0, "div", 232);
|
|
1281
1291
|
i0.ɵɵelementEnd();
|
|
1282
1292
|
} if (rf & 2) {
|
|
1283
1293
|
const run_r34 = ctx.$implicit;
|
|
@@ -1290,31 +1300,31 @@ function TestSuiteFormComponentExtended_div_62_div_12_div_1_Template(rf, ctx) {
|
|
|
1290
1300
|
i0.ɵɵadvance(3);
|
|
1291
1301
|
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate(run_r34).toFixed(0), "% pass");
|
|
1292
1302
|
i0.ɵɵadvance();
|
|
1293
|
-
i0.ɵɵ
|
|
1303
|
+
i0.ɵɵconditional(ctx_r0.getRunTags(run_r34).length > 0 ? 8 : -1);
|
|
1294
1304
|
} }
|
|
1295
|
-
function
|
|
1296
|
-
i0.ɵɵelementStart(0, "div",
|
|
1297
|
-
i0.ɵɵ
|
|
1305
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1306
|
+
i0.ɵɵelementStart(0, "div", 220);
|
|
1307
|
+
i0.ɵɵrepeaterCreate(1, TestSuiteFormComponentExtended_Conditional_62_Conditional_12_For_2_Template, 9, 12, "div", 239, i0.ɵɵrepeaterTrackByIdentity);
|
|
1298
1308
|
i0.ɵɵelementEnd();
|
|
1299
1309
|
} if (rf & 2) {
|
|
1300
1310
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1301
1311
|
i0.ɵɵadvance();
|
|
1302
|
-
i0.ɵɵ
|
|
1312
|
+
i0.ɵɵrepeater(ctx_r0.suiteRuns);
|
|
1303
1313
|
} }
|
|
1304
|
-
function
|
|
1314
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1305
1315
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1306
|
-
i0.ɵɵelementStart(0, "div",
|
|
1316
|
+
i0.ɵɵelementStart(0, "div", 221)(1, "div", 234)(2, "span", 235);
|
|
1307
1317
|
i0.ɵɵtext(3, "Selected:");
|
|
1308
1318
|
i0.ɵɵelementEnd();
|
|
1309
|
-
i0.ɵɵelementStart(4, "button",
|
|
1310
|
-
i0.ɵɵlistener("click", function
|
|
1319
|
+
i0.ɵɵelementStart(4, "button", 236);
|
|
1320
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_62_Conditional_13_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r36); const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.compareRunB = null; return i0.ɵɵresetView(ctx_r0.compareResults = []); });
|
|
1311
1321
|
i0.ɵɵtext(5, "Clear");
|
|
1312
1322
|
i0.ɵɵelementEnd()();
|
|
1313
|
-
i0.ɵɵelementStart(6, "div",
|
|
1323
|
+
i0.ɵɵelementStart(6, "div", 237)(7, "span");
|
|
1314
1324
|
i0.ɵɵtext(8);
|
|
1315
1325
|
i0.ɵɵpipe(9, "date");
|
|
1316
1326
|
i0.ɵɵelementEnd();
|
|
1317
|
-
i0.ɵɵelementStart(10, "span",
|
|
1327
|
+
i0.ɵɵelementStart(10, "span", 238);
|
|
1318
1328
|
i0.ɵɵtext(11);
|
|
1319
1329
|
i0.ɵɵelementEnd()()();
|
|
1320
1330
|
} if (rf & 2) {
|
|
@@ -1324,8 +1334,8 @@ function TestSuiteFormComponentExtended_div_62_div_13_Template(rf, ctx) { if (rf
|
|
|
1324
1334
|
i0.ɵɵadvance(3);
|
|
1325
1335
|
i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate(ctx_r0.compareRunB).toFixed(1), "%");
|
|
1326
1336
|
} }
|
|
1327
|
-
function
|
|
1328
|
-
i0.ɵɵelementStart(0, "span",
|
|
1337
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1338
|
+
i0.ɵɵelementStart(0, "span", 140);
|
|
1329
1339
|
i0.ɵɵtext(1);
|
|
1330
1340
|
i0.ɵɵelementEnd();
|
|
1331
1341
|
} if (rf & 2) {
|
|
@@ -1334,13 +1344,13 @@ function TestSuiteFormComponentExtended_div_62_div_14_tr_45_span_4_Template(rf,
|
|
|
1334
1344
|
i0.ɵɵadvance();
|
|
1335
1345
|
i0.ɵɵtextInterpolate(result_r37.runA.status);
|
|
1336
1346
|
} }
|
|
1337
|
-
function
|
|
1338
|
-
i0.ɵɵelementStart(0, "span",
|
|
1347
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1348
|
+
i0.ɵɵelementStart(0, "span", 252);
|
|
1339
1349
|
i0.ɵɵtext(1, "N/A");
|
|
1340
1350
|
i0.ɵɵelementEnd();
|
|
1341
1351
|
} }
|
|
1342
|
-
function
|
|
1343
|
-
i0.ɵɵelementStart(0, "span",
|
|
1352
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1353
|
+
i0.ɵɵelementStart(0, "span", 140);
|
|
1344
1354
|
i0.ɵɵtext(1);
|
|
1345
1355
|
i0.ɵɵelementEnd();
|
|
1346
1356
|
} if (rf & 2) {
|
|
@@ -1349,13 +1359,13 @@ function TestSuiteFormComponentExtended_div_62_div_14_tr_45_span_7_Template(rf,
|
|
|
1349
1359
|
i0.ɵɵadvance();
|
|
1350
1360
|
i0.ɵɵtextInterpolate(result_r37.runB.status);
|
|
1351
1361
|
} }
|
|
1352
|
-
function
|
|
1353
|
-
i0.ɵɵelementStart(0, "span",
|
|
1362
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1363
|
+
i0.ɵɵelementStart(0, "span", 252);
|
|
1354
1364
|
i0.ɵɵtext(1, "N/A");
|
|
1355
1365
|
i0.ɵɵelementEnd();
|
|
1356
1366
|
} }
|
|
1357
|
-
function
|
|
1358
|
-
i0.ɵɵelementStart(0, "span",
|
|
1367
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1368
|
+
i0.ɵɵelementStart(0, "span", 251);
|
|
1359
1369
|
i0.ɵɵtext(1);
|
|
1360
1370
|
i0.ɵɵelementEnd();
|
|
1361
1371
|
} if (rf & 2) {
|
|
@@ -1364,13 +1374,13 @@ function TestSuiteFormComponentExtended_div_62_div_14_tr_45_span_10_Template(rf,
|
|
|
1364
1374
|
i0.ɵɵadvance();
|
|
1365
1375
|
i0.ɵɵtextInterpolate2(" ", result_r37.scoreDiff > 0 ? "+" : "", "", (result_r37.scoreDiff * 100).toFixed(1), "% ");
|
|
1366
1376
|
} }
|
|
1367
|
-
function
|
|
1368
|
-
i0.ɵɵelementStart(0, "span",
|
|
1377
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1378
|
+
i0.ɵɵelementStart(0, "span", 253);
|
|
1369
1379
|
i0.ɵɵtext(1, "-");
|
|
1370
1380
|
i0.ɵɵelementEnd();
|
|
1371
1381
|
} }
|
|
1372
|
-
function
|
|
1373
|
-
i0.ɵɵelementStart(0, "span",
|
|
1382
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1383
|
+
i0.ɵɵelementStart(0, "span", 251);
|
|
1374
1384
|
i0.ɵɵtext(1);
|
|
1375
1385
|
i0.ɵɵelementEnd();
|
|
1376
1386
|
} if (rf & 2) {
|
|
@@ -1379,46 +1389,52 @@ function TestSuiteFormComponentExtended_div_62_div_14_tr_45_span_13_Template(rf,
|
|
|
1379
1389
|
i0.ɵɵadvance();
|
|
1380
1390
|
i0.ɵɵtextInterpolate2(" ", result_r37.durationDiff > 0 ? "+" : "", "", result_r37.durationDiff.toFixed(1), "s ");
|
|
1381
1391
|
} }
|
|
1382
|
-
function
|
|
1383
|
-
i0.ɵɵelementStart(0, "span",
|
|
1392
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1393
|
+
i0.ɵɵelementStart(0, "span", 253);
|
|
1384
1394
|
i0.ɵɵtext(1, "-");
|
|
1385
1395
|
i0.ɵɵelementEnd();
|
|
1386
1396
|
} }
|
|
1387
|
-
function
|
|
1388
|
-
i0.ɵɵelementStart(0, "span",
|
|
1389
|
-
i0.ɵɵelement(1, "i",
|
|
1397
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1398
|
+
i0.ɵɵelementStart(0, "span", 254);
|
|
1399
|
+
i0.ɵɵelement(1, "i", 257);
|
|
1390
1400
|
i0.ɵɵtext(2, " Fixed ");
|
|
1391
1401
|
i0.ɵɵelementEnd();
|
|
1392
1402
|
} }
|
|
1393
|
-
function
|
|
1394
|
-
i0.ɵɵelementStart(0, "span",
|
|
1395
|
-
i0.ɵɵelement(1, "i",
|
|
1403
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1404
|
+
i0.ɵɵelementStart(0, "span", 255);
|
|
1405
|
+
i0.ɵɵelement(1, "i", 258);
|
|
1396
1406
|
i0.ɵɵtext(2, " Broke ");
|
|
1397
1407
|
i0.ɵɵelementEnd();
|
|
1398
1408
|
} }
|
|
1399
|
-
function
|
|
1400
|
-
i0.ɵɵelementStart(0, "span",
|
|
1401
|
-
i0.ɵɵelement(1, "i",
|
|
1409
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1410
|
+
i0.ɵɵelementStart(0, "span", 256);
|
|
1411
|
+
i0.ɵɵelement(1, "i", 197);
|
|
1402
1412
|
i0.ɵɵelementEnd();
|
|
1403
1413
|
} }
|
|
1404
|
-
function
|
|
1405
|
-
i0.ɵɵelementStart(0, "tr",
|
|
1414
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Template(rf, ctx) { if (rf & 1) {
|
|
1415
|
+
i0.ɵɵelementStart(0, "tr", 251)(1, "td", 180);
|
|
1406
1416
|
i0.ɵɵtext(2);
|
|
1407
1417
|
i0.ɵɵelementEnd();
|
|
1408
1418
|
i0.ɵɵelementStart(3, "td");
|
|
1409
|
-
i0.ɵɵ
|
|
1419
|
+
i0.ɵɵconditionalCreate(4, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_4_Template, 2, 2, "span", 140);
|
|
1420
|
+
i0.ɵɵconditionalCreate(5, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_5_Template, 2, 0, "span", 252);
|
|
1410
1421
|
i0.ɵɵelementEnd();
|
|
1411
1422
|
i0.ɵɵelementStart(6, "td");
|
|
1412
|
-
i0.ɵɵ
|
|
1423
|
+
i0.ɵɵconditionalCreate(7, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_7_Template, 2, 2, "span", 140);
|
|
1424
|
+
i0.ɵɵconditionalCreate(8, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_8_Template, 2, 0, "span", 252);
|
|
1413
1425
|
i0.ɵɵelementEnd();
|
|
1414
1426
|
i0.ɵɵelementStart(9, "td");
|
|
1415
|
-
i0.ɵɵ
|
|
1427
|
+
i0.ɵɵconditionalCreate(10, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_10_Template, 2, 6, "span", 251);
|
|
1428
|
+
i0.ɵɵconditionalCreate(11, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_11_Template, 2, 0, "span", 253);
|
|
1416
1429
|
i0.ɵɵelementEnd();
|
|
1417
1430
|
i0.ɵɵelementStart(12, "td");
|
|
1418
|
-
i0.ɵɵ
|
|
1431
|
+
i0.ɵɵconditionalCreate(13, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_13_Template, 2, 6, "span", 251);
|
|
1432
|
+
i0.ɵɵconditionalCreate(14, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_14_Template, 2, 0, "span", 253);
|
|
1419
1433
|
i0.ɵɵelementEnd();
|
|
1420
1434
|
i0.ɵɵelementStart(15, "td");
|
|
1421
|
-
i0.ɵɵ
|
|
1435
|
+
i0.ɵɵconditionalCreate(16, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_16_Template, 3, 0, "span", 254);
|
|
1436
|
+
i0.ɵɵconditionalCreate(17, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_17_Template, 3, 0, "span", 255);
|
|
1437
|
+
i0.ɵɵconditionalCreate(18, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Conditional_18_Template, 2, 0, "span", 256);
|
|
1422
1438
|
i0.ɵɵelementEnd()();
|
|
1423
1439
|
} if (rf & 2) {
|
|
1424
1440
|
const result_r37 = ctx.$implicit;
|
|
@@ -1426,60 +1442,60 @@ function TestSuiteFormComponentExtended_div_62_div_14_tr_45_Template(rf, ctx) {
|
|
|
1426
1442
|
i0.ɵɵadvance(2);
|
|
1427
1443
|
i0.ɵɵtextInterpolate(result_r37.testName);
|
|
1428
1444
|
i0.ɵɵadvance(2);
|
|
1429
|
-
i0.ɵɵ
|
|
1445
|
+
i0.ɵɵconditional(result_r37.runA ? 4 : -1);
|
|
1430
1446
|
i0.ɵɵadvance();
|
|
1431
|
-
i0.ɵɵ
|
|
1447
|
+
i0.ɵɵconditional(!result_r37.runA ? 5 : -1);
|
|
1432
1448
|
i0.ɵɵadvance(2);
|
|
1433
|
-
i0.ɵɵ
|
|
1449
|
+
i0.ɵɵconditional(result_r37.runB ? 7 : -1);
|
|
1434
1450
|
i0.ɵɵadvance();
|
|
1435
|
-
i0.ɵɵ
|
|
1451
|
+
i0.ɵɵconditional(!result_r37.runB ? 8 : -1);
|
|
1436
1452
|
i0.ɵɵadvance(2);
|
|
1437
|
-
i0.ɵɵ
|
|
1453
|
+
i0.ɵɵconditional(result_r37.scoreDiff != null ? 10 : -1);
|
|
1438
1454
|
i0.ɵɵadvance();
|
|
1439
|
-
i0.ɵɵ
|
|
1455
|
+
i0.ɵɵconditional(result_r37.scoreDiff == null ? 11 : -1);
|
|
1440
1456
|
i0.ɵɵadvance(2);
|
|
1441
|
-
i0.ɵɵ
|
|
1457
|
+
i0.ɵɵconditional(result_r37.durationDiff != null ? 13 : -1);
|
|
1442
1458
|
i0.ɵɵadvance();
|
|
1443
|
-
i0.ɵɵ
|
|
1459
|
+
i0.ɵɵconditional(result_r37.durationDiff == null ? 14 : -1);
|
|
1444
1460
|
i0.ɵɵadvance(2);
|
|
1445
|
-
i0.ɵɵ
|
|
1461
|
+
i0.ɵɵconditional(result_r37.runA && result_r37.runB && result_r37.runA.status !== "Passed" && result_r37.runB.status === "Passed" ? 16 : -1);
|
|
1446
1462
|
i0.ɵɵadvance();
|
|
1447
|
-
i0.ɵɵ
|
|
1463
|
+
i0.ɵɵconditional(result_r37.runA && result_r37.runB && result_r37.runA.status === "Passed" && result_r37.runB.status !== "Passed" ? 17 : -1);
|
|
1448
1464
|
i0.ɵɵadvance();
|
|
1449
|
-
i0.ɵɵ
|
|
1465
|
+
i0.ɵɵconditional(!result_r37.statusChanged ? 18 : -1);
|
|
1450
1466
|
} }
|
|
1451
|
-
function
|
|
1452
|
-
i0.ɵɵelementStart(0, "div",
|
|
1467
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1468
|
+
i0.ɵɵelementStart(0, "div", 224)(1, "div", 240)(2, "div", 241)(3, "div", 242);
|
|
1453
1469
|
i0.ɵɵtext(4, "Pass Rate Change");
|
|
1454
1470
|
i0.ɵɵelementEnd();
|
|
1455
|
-
i0.ɵɵelementStart(5, "div",
|
|
1471
|
+
i0.ɵɵelementStart(5, "div", 243);
|
|
1456
1472
|
i0.ɵɵelement(6, "i", 16);
|
|
1457
1473
|
i0.ɵɵtext(7);
|
|
1458
1474
|
i0.ɵɵelementEnd()();
|
|
1459
|
-
i0.ɵɵelementStart(8, "div",
|
|
1475
|
+
i0.ɵɵelementStart(8, "div", 241)(9, "div", 242);
|
|
1460
1476
|
i0.ɵɵtext(10, "Duration Change");
|
|
1461
1477
|
i0.ɵɵelementEnd();
|
|
1462
|
-
i0.ɵɵelementStart(11, "div",
|
|
1478
|
+
i0.ɵɵelementStart(11, "div", 243);
|
|
1463
1479
|
i0.ɵɵelement(12, "i", 16);
|
|
1464
1480
|
i0.ɵɵtext(13);
|
|
1465
1481
|
i0.ɵɵelementEnd()();
|
|
1466
|
-
i0.ɵɵelementStart(14, "div",
|
|
1482
|
+
i0.ɵɵelementStart(14, "div", 244)(15, "div", 242);
|
|
1467
1483
|
i0.ɵɵtext(16, "Improved");
|
|
1468
1484
|
i0.ɵɵelementEnd();
|
|
1469
|
-
i0.ɵɵelementStart(17, "div",
|
|
1485
|
+
i0.ɵɵelementStart(17, "div", 245);
|
|
1470
1486
|
i0.ɵɵtext(18);
|
|
1471
1487
|
i0.ɵɵelementEnd()();
|
|
1472
|
-
i0.ɵɵelementStart(19, "div",
|
|
1488
|
+
i0.ɵɵelementStart(19, "div", 246)(20, "div", 242);
|
|
1473
1489
|
i0.ɵɵtext(21, "Regressed");
|
|
1474
1490
|
i0.ɵɵelementEnd();
|
|
1475
|
-
i0.ɵɵelementStart(22, "div",
|
|
1491
|
+
i0.ɵɵelementStart(22, "div", 245);
|
|
1476
1492
|
i0.ɵɵtext(23);
|
|
1477
1493
|
i0.ɵɵelementEnd()()();
|
|
1478
|
-
i0.ɵɵelementStart(24, "div",
|
|
1479
|
-
i0.ɵɵelement(26, "i",
|
|
1494
|
+
i0.ɵɵelementStart(24, "div", 247)(25, "h3");
|
|
1495
|
+
i0.ɵɵelement(26, "i", 248);
|
|
1480
1496
|
i0.ɵɵtext(27, " Test-by-Test Comparison");
|
|
1481
1497
|
i0.ɵɵelementEnd();
|
|
1482
|
-
i0.ɵɵelementStart(28, "div",
|
|
1498
|
+
i0.ɵɵelementStart(28, "div", 249)(29, "table", 250)(30, "thead")(31, "tr")(32, "th");
|
|
1483
1499
|
i0.ɵɵtext(33, "Test");
|
|
1484
1500
|
i0.ɵɵelementEnd();
|
|
1485
1501
|
i0.ɵɵelementStart(34, "th");
|
|
@@ -1498,21 +1514,21 @@ function TestSuiteFormComponentExtended_div_62_div_14_Template(rf, ctx) { if (rf
|
|
|
1498
1514
|
i0.ɵɵtext(43, "Change");
|
|
1499
1515
|
i0.ɵɵelementEnd()()();
|
|
1500
1516
|
i0.ɵɵelementStart(44, "tbody");
|
|
1501
|
-
i0.ɵɵ
|
|
1517
|
+
i0.ɵɵrepeaterCreate(45, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_For_46_Template, 19, 16, "tr", 251, i0.ɵɵrepeaterTrackByIdentity);
|
|
1502
1518
|
i0.ɵɵelementEnd()()()()();
|
|
1503
1519
|
} if (rf & 2) {
|
|
1504
1520
|
let tmp_4_0;
|
|
1505
1521
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
1506
1522
|
i0.ɵɵadvance(5);
|
|
1507
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(
|
|
1523
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(9, _c6, ctx_r0.getComparePassRateDiff() > 0, ctx_r0.getComparePassRateDiff() < 0));
|
|
1508
1524
|
i0.ɵɵadvance();
|
|
1509
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(
|
|
1525
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(12, _c4, ctx_r0.getComparePassRateDiff() > 0, ctx_r0.getComparePassRateDiff() < 0, ctx_r0.getComparePassRateDiff() === 0));
|
|
1510
1526
|
i0.ɵɵadvance();
|
|
1511
1527
|
i0.ɵɵtextInterpolate2(" ", ctx_r0.getComparePassRateDiff() > 0 ? "+" : "", "", (tmp_4_0 = ctx_r0.getComparePassRateDiff()) == null ? null : tmp_4_0.toFixed(1), "% ");
|
|
1512
1528
|
i0.ɵɵadvance(4);
|
|
1513
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(
|
|
1529
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction2(16, _c6, ctx_r0.getCompareDurationDiff() < 0, ctx_r0.getCompareDurationDiff() > 0));
|
|
1514
1530
|
i0.ɵɵadvance();
|
|
1515
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(
|
|
1531
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction3(19, _c7, ctx_r0.getCompareDurationDiff() < 0, ctx_r0.getCompareDurationDiff() > 0, ctx_r0.getCompareDurationDiff() === 0));
|
|
1516
1532
|
i0.ɵɵadvance();
|
|
1517
1533
|
i0.ɵɵtextInterpolate1(" ", ctx_r0.formatDuration(ctx_r0.getAbsCompareDurationDiff()), " ");
|
|
1518
1534
|
i0.ɵɵadvance(5);
|
|
@@ -1520,15 +1536,15 @@ function TestSuiteFormComponentExtended_div_62_div_14_Template(rf, ctx) { if (rf
|
|
|
1520
1536
|
i0.ɵɵadvance(5);
|
|
1521
1537
|
i0.ɵɵtextInterpolate(ctx_r0.getCompareRegressedCount());
|
|
1522
1538
|
i0.ɵɵadvance(22);
|
|
1523
|
-
i0.ɵɵ
|
|
1539
|
+
i0.ɵɵrepeater(ctx_r0.compareResults);
|
|
1524
1540
|
} }
|
|
1525
|
-
function
|
|
1526
|
-
i0.ɵɵelementStart(0, "div",
|
|
1527
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1541
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1542
|
+
i0.ɵɵelementStart(0, "div", 56);
|
|
1543
|
+
i0.ɵɵelement(1, "mj-loading", 259);
|
|
1528
1544
|
i0.ɵɵelementEnd();
|
|
1529
1545
|
} }
|
|
1530
|
-
function
|
|
1531
|
-
i0.ɵɵelementStart(0, "div",
|
|
1546
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1547
|
+
i0.ɵɵelementStart(0, "div", 225)(1, "div", 260);
|
|
1532
1548
|
i0.ɵɵelement(2, "i", 33);
|
|
1533
1549
|
i0.ɵɵelementEnd();
|
|
1534
1550
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -1538,9 +1554,9 @@ function TestSuiteFormComponentExtended_div_62_div_16_Template(rf, ctx) { if (rf
|
|
|
1538
1554
|
i0.ɵɵtext(6, "Choose a baseline run (A) and a comparison run (B) from the lists above to see a detailed side-by-side comparison.");
|
|
1539
1555
|
i0.ɵɵelementEnd()();
|
|
1540
1556
|
} }
|
|
1541
|
-
function
|
|
1557
|
+
function TestSuiteFormComponentExtended_Conditional_62_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1542
1558
|
const _r38 = i0.ɵɵgetCurrentView();
|
|
1543
|
-
i0.ɵɵelementStart(0, "div",
|
|
1559
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "div", 74);
|
|
1544
1560
|
i0.ɵɵelement(2, "i", 33);
|
|
1545
1561
|
i0.ɵɵelementEnd();
|
|
1546
1562
|
i0.ɵɵelementStart(3, "h4");
|
|
@@ -1550,77 +1566,82 @@ function TestSuiteFormComponentExtended_div_62_div_17_Template(rf, ctx) { if (rf
|
|
|
1550
1566
|
i0.ɵɵtext(6, "You need at least 2 suite runs to use the comparison feature.");
|
|
1551
1567
|
i0.ɵɵelementEnd();
|
|
1552
1568
|
i0.ɵɵelementStart(7, "button", 21);
|
|
1553
|
-
i0.ɵɵlistener("click", function
|
|
1569
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_62_Conditional_17_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r38); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.runSuite()); });
|
|
1554
1570
|
i0.ɵɵelement(8, "i", 22);
|
|
1555
1571
|
i0.ɵɵtext(9, " Run Suite Now ");
|
|
1556
1572
|
i0.ɵɵelementEnd()();
|
|
1557
1573
|
} }
|
|
1558
|
-
function
|
|
1559
|
-
i0.ɵɵelementStart(0, "div",
|
|
1574
|
+
function TestSuiteFormComponentExtended_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
1575
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "div", 218)(2, "div", 219)(3, "h4");
|
|
1560
1576
|
i0.ɵɵtext(4, "Run A (Baseline)");
|
|
1561
1577
|
i0.ɵɵelementEnd();
|
|
1562
|
-
i0.ɵɵ
|
|
1578
|
+
i0.ɵɵconditionalCreate(5, TestSuiteFormComponentExtended_Conditional_62_Conditional_5_Template, 3, 0, "div", 220);
|
|
1579
|
+
i0.ɵɵconditionalCreate(6, TestSuiteFormComponentExtended_Conditional_62_Conditional_6_Template, 12, 5, "div", 221);
|
|
1563
1580
|
i0.ɵɵelementEnd();
|
|
1564
|
-
i0.ɵɵelementStart(7, "div",
|
|
1565
|
-
i0.ɵɵelement(8, "i",
|
|
1581
|
+
i0.ɵɵelementStart(7, "div", 222);
|
|
1582
|
+
i0.ɵɵelement(8, "i", 223);
|
|
1566
1583
|
i0.ɵɵelementEnd();
|
|
1567
|
-
i0.ɵɵelementStart(9, "div",
|
|
1584
|
+
i0.ɵɵelementStart(9, "div", 219)(10, "h4");
|
|
1568
1585
|
i0.ɵɵtext(11, "Run B (Compare)");
|
|
1569
1586
|
i0.ɵɵelementEnd();
|
|
1570
|
-
i0.ɵɵ
|
|
1587
|
+
i0.ɵɵconditionalCreate(12, TestSuiteFormComponentExtended_Conditional_62_Conditional_12_Template, 3, 0, "div", 220);
|
|
1588
|
+
i0.ɵɵconditionalCreate(13, TestSuiteFormComponentExtended_Conditional_62_Conditional_13_Template, 12, 5, "div", 221);
|
|
1571
1589
|
i0.ɵɵelementEnd()();
|
|
1572
|
-
i0.ɵɵ
|
|
1590
|
+
i0.ɵɵconditionalCreate(14, TestSuiteFormComponentExtended_Conditional_62_Conditional_14_Template, 47, 23, "div", 224);
|
|
1591
|
+
i0.ɵɵconditionalCreate(15, TestSuiteFormComponentExtended_Conditional_62_Conditional_15_Template, 2, 0, "div", 56);
|
|
1592
|
+
i0.ɵɵconditionalCreate(16, TestSuiteFormComponentExtended_Conditional_62_Conditional_16_Template, 7, 0, "div", 225);
|
|
1593
|
+
i0.ɵɵconditionalCreate(17, TestSuiteFormComponentExtended_Conditional_62_Conditional_17_Template, 10, 0, "div", 58);
|
|
1573
1594
|
i0.ɵɵelementEnd();
|
|
1574
1595
|
} if (rf & 2) {
|
|
1575
1596
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
1576
1597
|
i0.ɵɵadvance(5);
|
|
1577
|
-
i0.ɵɵ
|
|
1598
|
+
i0.ɵɵconditional(!ctx_r0.loadingRuns && ctx_r0.suiteRuns.length > 0 ? 5 : -1);
|
|
1578
1599
|
i0.ɵɵadvance();
|
|
1579
|
-
i0.ɵɵ
|
|
1600
|
+
i0.ɵɵconditional(ctx_r0.compareRunA ? 6 : -1);
|
|
1580
1601
|
i0.ɵɵadvance(6);
|
|
1581
|
-
i0.ɵɵ
|
|
1602
|
+
i0.ɵɵconditional(!ctx_r0.loadingRuns && ctx_r0.suiteRuns.length > 0 ? 12 : -1);
|
|
1582
1603
|
i0.ɵɵadvance();
|
|
1583
|
-
i0.ɵɵ
|
|
1604
|
+
i0.ɵɵconditional(ctx_r0.compareRunB ? 13 : -1);
|
|
1584
1605
|
i0.ɵɵadvance();
|
|
1585
|
-
i0.ɵɵ
|
|
1606
|
+
i0.ɵɵconditional(ctx_r0.compareRunA && ctx_r0.compareRunB && !ctx_r0.loadingCompare ? 14 : -1);
|
|
1586
1607
|
i0.ɵɵadvance();
|
|
1587
|
-
i0.ɵɵ
|
|
1608
|
+
i0.ɵɵconditional(ctx_r0.loadingCompare ? 15 : -1);
|
|
1588
1609
|
i0.ɵɵadvance();
|
|
1589
|
-
i0.ɵɵ
|
|
1610
|
+
i0.ɵɵconditional(!ctx_r0.compareRunA || !ctx_r0.compareRunB ? 16 : -1);
|
|
1590
1611
|
i0.ɵɵadvance();
|
|
1591
|
-
i0.ɵɵ
|
|
1612
|
+
i0.ɵɵconditional(ctx_r0.runsLoaded && ctx_r0.suiteRuns.length < 2 ? 17 : -1);
|
|
1592
1613
|
} }
|
|
1593
|
-
function
|
|
1614
|
+
function TestSuiteFormComponentExtended_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
1594
1615
|
const _r39 = i0.ɵɵgetCurrentView();
|
|
1595
|
-
i0.ɵɵelementStart(0, "div",
|
|
1616
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 261);
|
|
1596
1617
|
i0.ɵɵelement(2, "i", 41);
|
|
1597
1618
|
i0.ɵɵtext(3, " Shortcuts ");
|
|
1598
|
-
i0.ɵɵelementStart(4, "button",
|
|
1599
|
-
i0.ɵɵlistener("click", function
|
|
1600
|
-
i0.ɵɵelement(5, "i",
|
|
1619
|
+
i0.ɵɵelementStart(4, "button", 262);
|
|
1620
|
+
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Conditional_65_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r39); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleShortcuts()); });
|
|
1621
|
+
i0.ɵɵelement(5, "i", 170);
|
|
1601
1622
|
i0.ɵɵelementEnd()();
|
|
1602
|
-
i0.ɵɵelementStart(6, "div",
|
|
1623
|
+
i0.ɵɵelementStart(6, "div", 263)(7, "div", 264)(8, "span");
|
|
1603
1624
|
i0.ɵɵtext(9, "Refresh");
|
|
1604
1625
|
i0.ɵɵelementEnd();
|
|
1605
|
-
i0.ɵɵelementStart(10, "span",
|
|
1626
|
+
i0.ɵɵelementStart(10, "span", 265)(11, "kbd");
|
|
1606
1627
|
i0.ɵɵtext(12, "Cmd");
|
|
1607
1628
|
i0.ɵɵelementEnd();
|
|
1608
1629
|
i0.ɵɵelementStart(13, "kbd");
|
|
1609
1630
|
i0.ɵɵtext(14, "R");
|
|
1610
1631
|
i0.ɵɵelementEnd()()();
|
|
1611
|
-
i0.ɵɵelementStart(15, "div",
|
|
1632
|
+
i0.ɵɵelementStart(15, "div", 264)(16, "span");
|
|
1612
1633
|
i0.ɵɵtext(17, "Run Suite");
|
|
1613
1634
|
i0.ɵɵelementEnd();
|
|
1614
|
-
i0.ɵɵelementStart(18, "span",
|
|
1635
|
+
i0.ɵɵelementStart(18, "span", 265)(19, "kbd");
|
|
1615
1636
|
i0.ɵɵtext(20, "Cmd");
|
|
1616
1637
|
i0.ɵɵelementEnd();
|
|
1617
1638
|
i0.ɵɵelementStart(21, "kbd");
|
|
1618
1639
|
i0.ɵɵtext(22, "Enter");
|
|
1619
1640
|
i0.ɵɵelementEnd()()();
|
|
1620
|
-
i0.ɵɵelementStart(23, "div",
|
|
1641
|
+
i0.ɵɵelementStart(23, "div", 264)(24, "span");
|
|
1621
1642
|
i0.ɵɵtext(25, "Switch Tabs");
|
|
1622
1643
|
i0.ɵɵelementEnd();
|
|
1623
|
-
i0.ɵɵelementStart(26, "span",
|
|
1644
|
+
i0.ɵɵelementStart(26, "span", 265)(27, "kbd");
|
|
1624
1645
|
i0.ɵɵtext(28, "1");
|
|
1625
1646
|
i0.ɵɵelementEnd();
|
|
1626
1647
|
i0.ɵɵtext(29, "-");
|
|
@@ -1631,14 +1652,8 @@ function TestSuiteFormComponentExtended_div_65_Template(rf, ctx) { if (rf & 1) {
|
|
|
1631
1652
|
/** Settings key for keyboard shortcuts visibility */
|
|
1632
1653
|
const SHORTCUTS_SETTINGS_KEY = '__mj.Testing.ShowKeyboardShortcuts';
|
|
1633
1654
|
let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extends TestSuiteFormComponent {
|
|
1634
|
-
constructor(
|
|
1635
|
-
super(
|
|
1636
|
-
this.router = router;
|
|
1637
|
-
this.cdr = cdr;
|
|
1638
|
-
this.testingDialogService = testingDialogService;
|
|
1639
|
-
this.evalPrefsService = evalPrefsService;
|
|
1640
|
-
this.viewContainerRef = viewContainerRef;
|
|
1641
|
-
this.appManager = appManager;
|
|
1655
|
+
constructor() {
|
|
1656
|
+
super(...arguments);
|
|
1642
1657
|
this.destroy$ = new Subject();
|
|
1643
1658
|
// UI state
|
|
1644
1659
|
this.activeTab = 'overview';
|
|
@@ -1688,6 +1703,12 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
1688
1703
|
// Matrix test name filter
|
|
1689
1704
|
this.matrixTestFilter = '';
|
|
1690
1705
|
this.matrixFilterSubject$ = new Subject();
|
|
1706
|
+
// Service injections
|
|
1707
|
+
this.navigationService = inject(NavigationService);
|
|
1708
|
+
this.testingDialogService = inject(TestingDialogService);
|
|
1709
|
+
this.evalPrefsService = inject(EvaluationPreferencesService);
|
|
1710
|
+
this.viewContainerRef = inject(ViewContainerRef);
|
|
1711
|
+
this.appManager = inject(ApplicationManager);
|
|
1691
1712
|
}
|
|
1692
1713
|
async ngOnInit() {
|
|
1693
1714
|
await super.ngOnInit();
|
|
@@ -3324,15 +3345,15 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3324
3345
|
console.warn('Failed to save shortcuts setting:', error);
|
|
3325
3346
|
}
|
|
3326
3347
|
}
|
|
3327
|
-
static { this.ɵfac = function TestSuiteFormComponentExtended_Factory(__ngFactoryType__) { return
|
|
3348
|
+
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵTestSuiteFormComponentExtended_BaseFactory; return function TestSuiteFormComponentExtended_Factory(__ngFactoryType__) { return (ɵTestSuiteFormComponentExtended_BaseFactory || (ɵTestSuiteFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(TestSuiteFormComponentExtended)))(__ngFactoryType__ || TestSuiteFormComponentExtended); }; })(); }
|
|
3328
3349
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestSuiteFormComponentExtended, selectors: [["mj-test-suite-form"]], viewQuery: function TestSuiteFormComponentExtended_Query(rf, ctx) { if (rf & 1) {
|
|
3329
3350
|
i0.ɵɵviewQuery(_c0, 5);
|
|
3330
3351
|
} if (rf & 2) {
|
|
3331
3352
|
let _t;
|
|
3332
3353
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.chartContainer = _t.first);
|
|
3333
3354
|
} }, hostBindings: function TestSuiteFormComponentExtended_HostBindings(rf, ctx) { if (rf & 1) {
|
|
3334
|
-
i0.ɵɵlistener("keydown", function TestSuiteFormComponentExtended_keydown_HostBindingHandler($event) { return ctx.handleKeyboardShortcut($event); },
|
|
3335
|
-
} }, features: [i0.ɵɵInheritDefinitionFeature], decls: 66, vars: 36, consts: [["chartContainer", ""], ["kendoDialogContainer", "", 1, "test-suite-form"], [1, "suite-header"], ["aria-label", "Breadcrumb", 1, "breadcrumb"], ["href", "javascript:void(0)", 3, "click"], [1, "fas", "fa-vial"], [1, "breadcrumb-text"], [1, "current"], [1, "fas", "fa-chevron-right", "separator"], [1, "fas", "fa-layer-group"], [1, "header-content"], [1, "header-left"], [1, "suite-icon"], [1, "suite-info"], [1, "suite-meta"], [1, "status-badge", 3, "ngClass"], [1, "fas", 3, "ngClass"], ["class", "test-count", 4, "ngIf"], [1, "header-actions"], ["kendoButton", "", "title", "Export to CSV", 3, "click"], [1, "fas", "fa-file-excel"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fas", "fa-play"], ["kendoButton", "", 3, "click", "disabled"], ["class", "suite-description", 4, "ngIf"], [1, "tabs-container"], ["role", "tablist", 1, "tabs"], ["role", "tab", 1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "fas", "fa-flask"], ["class", "tab-badge", 4, "ngIf"], [1, "fas", "fa-history"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-balance-scale"], [1, "tab-content"], ["class", "overview-tab", 4, "ngIf"], ["class", "tests-tab", 4, "ngIf"], ["class", "runs-tab", 4, "ngIf"], ["class", "analytics-tab", 4, "ngIf"], ["class", "compare-tab", 4, "ngIf"], [1, "shortcuts-toggle", 3, "click", "title"], [1, "fas", "fa-keyboard"], ["class", "keyboard-shortcuts", 4, "ngIf"], [1, "test-count"], [1, "suite-description"], [1, "tab-badge"], [1, "overview-tab"], [1, "info-section"], [1, "fas", "fa-info-circle"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "status-badge-inline", 3, "ngClass"], [1, "config-section"], [1, "fas", "fa-cogs"], [1, "config-grid"], [1, "config-item"], ["type", "number", "placeholder", "Default: 300000 (5 min)", 1, "config-input", 3, "ngModelChange", "ngModel"], [1, "config-hint"], [1, "tests-tab"], ["class", "loading-state", 4, "ngIf"], ["class", "tests-list", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], [1, "loading-state"], [1, "skeleton-list"], ["class", "skeleton-card", 4, "ngFor", "ngForOf"], [1, "skeleton-card"], [1, "skeleton-sequence"], [1, "skeleton-icon"], [1, "skeleton-content"], [1, "skeleton-line", "wide"], [1, "skeleton-line", "narrow"], [1, "tests-list"], ["class", "test-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "test-item", 3, "click"], [1, "test-sequence"], [1, "test-icon"], [1, "test-content"], [1, "test-name"], [1, "test-status"], [4, "ngIf"], [1, "fas", "fa-chevron-right"], [1, "empty-state"], [1, "empty-icon"], [1, "runs-tab"], ["class", "runs-list", 4, "ngIf"], [1, "runs-list"], ["class", "run-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "run-item", 3, "click"], [1, "run-icon"], [1, "fas"], [1, "run-content"], [1, "run-header"], [1, "run-id"], [1, "run-status"], [1, "run-meta"], [1, "fas", "fa-calendar"], [1, "run-eval-metrics"], ["class", "eval-metric status", 3, "class", 4, "ngIf"], ["class", "eval-metric human", "title", "Human evaluation", 4, "ngIf"], ["class", "eval-metric auto", "title", "Auto score (pass rate)", 3, "high", "medium", "low", 4, "ngIf"], ["class", "run-tags", 4, "ngIf"], [1, "fas", "fa-check-circle"], [1, "eval-metric", "status"], ["title", "Human evaluation", 1, "eval-metric", "human"], [1, "fas", "fa-user"], [1, "eval-pending"], [1, "fas", "fa-clock"], ["title", "Auto score (pass rate)", 1, "eval-metric", "auto"], [1, "fas", "fa-robot"], [1, "run-tags"], ["class", "tag-chip", 4, "ngFor", "ngForOf"], [1, "tag-chip"], [1, "fas", "fa-play-circle"], [1, "analytics-tab"], ["text", "Loading analytics data..."], [1, "analytics-subnav"], [1, "subnav-tabs"], [1, "subnav-tab", 3, "click"], [1, "fas", "fa-chart-bar"], [1, "fas", "fa-th"], [1, "fas", "fa-project-diagram"], [1, "analytics-filters"], [1, "filters-header", 3, "click"], [1, "filters-title"], [1, "fas", "fa-filter"], ["class", "filter-summary", 4, "ngIf"], ["class", "filters-content", 4, "ngIf"], [1, "filter-summary"], [1, "filters-content"], [1, "filter-group"], [1, "filter-buttons"], [1, "filter-btn", 3, "click"], ["class", "filter-group", 4, "ngIf"], ["class", "filter-hint", 4, "ngIf"], [1, "filter-buttons", "tag-filters"], [1, "filter-btn", "tag-btn", "all-tags-btn", 3, "click"], ["class", "filter-btn tag-btn", 3, "active", "click", 4, "ngFor", "ngForOf"], [1, "filter-hint"], [1, "filter-btn", "tag-btn", 3, "click"], ["class", "fas fa-check", 4, "ngIf"], [1, "fas", "fa-check"], [1, "analytics-kpis"], [1, "kpi-card"], [1, "kpi-icon"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", "success"], [1, "kpi-trend", 3, "ngClass"], [1, "kpi-icon", "info"], [1, "kpi-icon", "warning"], [1, "fas", "fa-dollar-sign"], [1, "analytics-table-section"], [1, "fas", "fa-table"], [1, "analytics-table-wrapper"], [1, "analytics-table"], ["class", "clickable-row", 3, "click", 4, "ngFor", "ngForOf"], ["class", "empty-state small", 4, "ngIf"], [1, "clickable-row", 3, "click"], [1, "status-chip", 3, "ngClass"], [1, "pass-rate-cell"], [1, "pass-rate-bar", 3, "ngClass"], [1, "tag-cell"], ["class", "tag-chip-table", 4, "ngFor", "ngForOf"], ["class", "tag-more", 4, "ngIf"], [1, "tag-chip-table"], [1, "tag-more"], [1, "empty-state", "small"], ["class", "matrix-section", 4, "ngIf"], ["text", "Loading test matrix..."], [1, "matrix-section"], [1, "matrix-header"], [1, "matrix-header-right"], [1, "matrix-filter-input"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Filter tests...", 1, "filter-input", 3, "input", "value"], ["class", "clear-filter-btn", "title", "Clear filter", 3, "click", 4, "ngIf"], [1, "matrix-run-count"], ["kendoButton", "", "title", "Export matrix to CSV", 3, "click", "disabled"], [1, "fas", "fa-download"], [1, "matrix-scroll-container"], [1, "test-matrix"], ["title", "Sort by sequence", 1, "seq-header", 3, "click"], ["title", "Sort by name", 1, "test-name-header", 3, "click"], ["class", "run-header", 3, "title", "click", 4, "ngFor", "ngForOf"], [1, "spacer-header"], [3, "row-selected", "click", 4, "ngFor", "ngForOf"], [1, "totals-row"], [1, "seq-cell", "totals-label"], [1, "test-name-cell", "totals-label"], ["class", "result-cell totals-cell", 4, "ngFor", "ngForOf"], [1, "spacer-cell"], ["title", "Clear filter", 1, "clear-filter-btn", 3, "click"], [1, "fas", "fa-times"], [1, "run-header", 3, "click", "title"], [1, "run-header-content"], ["class", "run-tags-header", 4, "ngIf"], [1, "run-date"], [1, "run-pass-rate", 3, "ngClass"], [1, "run-tags-header"], ["class", "tag-chip-header", 4, "ngFor", "ngForOf"], ["class", "tag-more-header", 4, "ngIf"], [1, "tag-chip-header"], [1, "tag-more-header"], [3, "click"], [1, "seq-cell"], [1, "test-name-cell"], [1, "test-name", 3, "title"], ["class", "result-cell", 3, "ngClass", "clickable", "cell-not-run", "title", "click", 4, "ngFor", "ngForOf"], [1, "result-cell", 3, "click", "ngClass", "title"], ["class", "cell-not-run-indicator", 4, "ngIf"], [1, "cell-eval-stack"], ["class", "cell-status", 3, "ngClass", "cell-skipped-status", "title", 4, "ngIf"], ["class", "cell-human no-feedback", "title", "Human Review: No rating submitted yet", 4, "ngIf"], ["class", "cell-human has-feedback", 3, "rating-low", "rating-medium", "rating-good", "rating-excellent", "title", 4, "ngIf"], ["class", "cell-auto has-score", 3, "score-low", "score-medium", "score-good", "score-excellent", "title", 4, "ngIf"], ["class", "cell-auto no-score", "title", "Auto Score: No automated score available", 4, "ngIf"], [1, "cell-status", 3, "ngClass", "title"], ["title", "Human Review: No rating submitted yet", 1, "cell-human", "no-feedback"], [1, "fas", "fa-user-slash"], [1, "cell-human", "has-feedback", 3, "title"], [1, "rating-value"], [1, "cell-auto", "has-score", 3, "title"], [1, "score-value"], ["title", "Auto Score: No automated score available", 1, "cell-auto", "no-score"], [1, "cell-not-run-indicator"], [1, "fas", "fa-minus"], [1, "result-cell", "totals-cell"], [1, "cell-eval-stack", "totals-stack"], ["class", "totals-status", 4, "ngIf"], ["class", "totals-human", 4, "ngIf"], ["class", "totals-auto", 4, "ngIf"], [1, "totals-status"], [1, "pass-count"], [1, "totals-human"], ["class", "avg-label", 4, "ngIf"], [1, "count-label"], [1, "avg-label"], [1, "totals-auto"], ["class", "chart-section", 4, "ngIf"], ["text", "Loading chart data..."], [1, "chart-section"], [1, "chart-header"], [1, "chart-legend"], [1, "legend-item", "chart-passed"], [1, "legend-item", "chart-failed"], [1, "legend-item", "chart-error"], [1, "fas", "fa-exclamation"], [1, "legend-item", "chart-skipped"], [1, "fas", "fa-forward"], [1, "chart-container"], [1, "d3-chart"], [1, "chart-info"], [1, "compare-tab"], [1, "compare-selection"], [1, "compare-run-selector"], ["class", "run-selector-list", 4, "ngIf"], ["class", "selected-run-preview", 4, "ngIf"], [1, "compare-vs"], [1, "fas", "fa-exchange-alt"], ["class", "compare-results", 4, "ngIf"], ["class", "compare-empty", 4, "ngIf"], [1, "run-selector-list"], ["class", "run-selector-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], [1, "run-selector-item", 3, "click"], [1, "selector-status"], [1, "selector-content"], [1, "selector-date"], [1, "selector-rate"], ["class", "selector-tags", 4, "ngIf"], [1, "selector-tags"], ["class", "tag-mini", 4, "ngFor", "ngForOf"], [1, "tag-mini"], [1, "selected-run-preview"], [1, "preview-header"], [1, "preview-label"], [1, "clear-btn", 3, "click"], [1, "preview-details"], [1, "preview-rate"], ["class", "run-selector-item", 3, "selected", "disabled", "click", 4, "ngFor", "ngForOf"], [1, "compare-results"], [1, "compare-summary"], [1, "compare-summary-card"], [1, "summary-label"], [1, "summary-value", 3, "ngClass"], [1, "compare-summary-card", "improved"], [1, "summary-value"], [1, "compare-summary-card", "regressed"], [1, "compare-table-section"], [1, "fas", "fa-list"], [1, "compare-table-wrapper"], [1, "compare-table"], [3, "ngClass", 4, "ngFor", "ngForOf"], [3, "ngClass"], ["class", "status-chip", 3, "ngClass", 4, "ngIf"], ["class", "status-chip status-missing", 4, "ngIf"], [3, "ngClass", 4, "ngIf"], ["class", "muted", 4, "ngIf"], ["class", "change-indicator improved", 4, "ngIf"], ["class", "change-indicator regressed", 4, "ngIf"], ["class", "change-indicator unchanged", 4, "ngIf"], [1, "status-chip", "status-missing"], [1, "muted"], [1, "change-indicator", "improved"], [1, "fas", "fa-arrow-up"], [1, "change-indicator", "regressed"], [1, "fas", "fa-arrow-down"], [1, "change-indicator", "unchanged"], ["text", "Loading comparison data..."], [1, "compare-empty"], [1, "compare-empty-icon"], [1, "keyboard-shortcuts"], [1, "shortcuts-header"], ["title", "Hide shortcuts", 1, "shortcuts-close", 3, "click"], [1, "shortcut-list"], [1, "shortcut-item"], [1, "shortcut-keys"]], template: function TestSuiteFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3355
|
+
i0.ɵɵlistener("keydown", function TestSuiteFormComponentExtended_keydown_HostBindingHandler($event) { return ctx.handleKeyboardShortcut($event); }, i0.ɵɵresolveDocument);
|
|
3356
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 66, vars: 36, consts: [["chartContainer", ""], ["kendoDialogContainer", "", 1, "test-suite-form"], [1, "suite-header"], ["aria-label", "Breadcrumb", 1, "breadcrumb"], ["href", "javascript:void(0)", 3, "click"], [1, "fas", "fa-vial"], [1, "breadcrumb-text"], [1, "current"], [1, "fas", "fa-chevron-right", "separator"], [1, "fas", "fa-layer-group"], [1, "header-content"], [1, "header-left"], [1, "suite-icon"], [1, "suite-info"], [1, "suite-meta"], [1, "status-badge", 3, "ngClass"], [1, "fas", 3, "ngClass"], [1, "test-count"], [1, "header-actions"], ["kendoButton", "", "title", "Export to CSV", 3, "click"], [1, "fas", "fa-file-excel"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "fas", "fa-play"], ["kendoButton", "", 3, "click", "disabled"], [1, "suite-description"], [1, "tabs-container"], ["role", "tablist", 1, "tabs"], ["role", "tab", 1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "fas", "fa-flask"], [1, "tab-badge"], [1, "fas", "fa-history"], [1, "fas", "fa-chart-line"], [1, "fas", "fa-balance-scale"], [1, "tab-content"], [1, "overview-tab"], [1, "tests-tab"], [1, "runs-tab"], [1, "analytics-tab"], [1, "compare-tab"], [1, "shortcuts-toggle", 3, "click", "title"], [1, "fas", "fa-keyboard"], [1, "keyboard-shortcuts"], [1, "info-section"], [1, "fas", "fa-info-circle"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "status-badge-inline", 3, "ngClass"], [1, "config-section"], [1, "fas", "fa-cogs"], [1, "config-grid"], [1, "config-item"], ["type", "number", "placeholder", "Default: 300000 (5 min)", 1, "config-input", 3, "ngModelChange", "ngModel"], [1, "config-hint"], [1, "loading-state"], [1, "tests-list"], [1, "empty-state"], [1, "skeleton-list"], [1, "skeleton-card"], [1, "skeleton-sequence"], [1, "skeleton-icon"], [1, "skeleton-content"], [1, "skeleton-line", "wide"], [1, "skeleton-line", "narrow"], [1, "test-item"], [1, "test-item", 3, "click"], [1, "test-sequence"], [1, "test-icon"], [1, "test-content"], [1, "test-name"], [1, "test-status"], [1, "fas", "fa-chevron-right"], [1, "empty-icon"], [1, "runs-list"], [1, "run-item"], [1, "run-item", 3, "click"], [1, "run-icon"], [1, "fas"], [1, "run-content"], [1, "run-header"], [1, "run-id"], [1, "run-status"], [1, "run-meta"], [1, "fas", "fa-calendar"], [1, "run-eval-metrics"], [1, "eval-metric", "status", 3, "class"], ["title", "Human evaluation", 1, "eval-metric", "human"], ["title", "Auto score (pass rate)", 1, "eval-metric", "auto", 3, "high", "medium", "low"], [1, "run-tags"], [1, "fas", "fa-check-circle"], [1, "eval-metric", "status"], [1, "fas", "fa-user"], [1, "eval-pending"], [1, "fas", "fa-clock"], ["title", "Auto score (pass rate)", 1, "eval-metric", "auto"], [1, "fas", "fa-robot"], [1, "tag-chip"], [1, "fas", "fa-play-circle"], ["text", "Loading analytics data..."], [1, "analytics-subnav"], [1, "subnav-tabs"], [1, "subnav-tab", 3, "click"], [1, "fas", "fa-chart-bar"], [1, "fas", "fa-th"], [1, "fas", "fa-project-diagram"], [1, "analytics-filters"], [1, "filters-header", 3, "click"], [1, "filters-title"], [1, "fas", "fa-filter"], [1, "filter-summary"], [1, "filters-content"], [1, "filter-group"], [1, "filter-buttons"], [1, "filter-btn", 3, "click"], [1, "filter-hint"], [1, "filter-buttons", "tag-filters"], [1, "filter-btn", "tag-btn", "all-tags-btn", 3, "click"], [1, "filter-btn", "tag-btn", 3, "active"], [1, "filter-btn", "tag-btn", 3, "click"], [1, "fas", "fa-check"], [1, "analytics-kpis"], [1, "kpi-card"], [1, "kpi-icon"], [1, "kpi-content"], [1, "kpi-value"], [1, "kpi-label"], [1, "kpi-icon", "success"], [1, "kpi-trend", 3, "ngClass"], [1, "kpi-icon", "info"], [1, "kpi-icon", "warning"], [1, "fas", "fa-dollar-sign"], [1, "analytics-table-section"], [1, "fas", "fa-table"], [1, "analytics-table-wrapper"], [1, "analytics-table"], [1, "clickable-row"], [1, "empty-state", "small"], [1, "clickable-row", 3, "click"], [1, "status-chip", 3, "ngClass"], [1, "pass-rate-cell"], [1, "pass-rate-bar", 3, "ngClass"], [1, "tag-cell"], [1, "tag-chip-table"], [1, "tag-more"], [1, "matrix-section"], ["text", "Loading test matrix..."], [1, "matrix-header"], [1, "matrix-header-right"], [1, "matrix-filter-input"], [1, "fas", "fa-search"], ["type", "text", "placeholder", "Filter tests...", 1, "filter-input", 3, "input", "value"], ["title", "Clear filter", 1, "clear-filter-btn"], [1, "matrix-run-count"], ["kendoButton", "", "title", "Export matrix to CSV", 3, "click", "disabled"], [1, "fas", "fa-download"], [1, "matrix-scroll-container"], [1, "test-matrix"], ["title", "Sort by sequence", 1, "seq-header", 3, "click"], ["title", "Sort by name", 1, "test-name-header", 3, "click"], [1, "run-header", 3, "title"], [1, "spacer-header"], [3, "row-selected"], [1, "totals-row"], [1, "seq-cell", "totals-label"], [1, "test-name-cell", "totals-label"], [1, "result-cell", "totals-cell"], [1, "spacer-cell"], ["title", "Clear filter", 1, "clear-filter-btn", 3, "click"], [1, "fas", "fa-times"], [1, "run-header", 3, "click", "title"], [1, "run-header-content"], [1, "run-tags-header"], [1, "run-date"], [1, "run-pass-rate", 3, "ngClass"], [1, "tag-chip-header"], [1, "tag-more-header"], [3, "click"], [1, "seq-cell"], [1, "test-name-cell"], [1, "test-name", 3, "title"], [1, "result-cell", 3, "ngClass", "clickable", "cell-not-run", "title"], [1, "result-cell", 3, "click", "ngClass", "title"], [1, "cell-eval-stack"], [1, "cell-not-run-indicator"], [1, "cell-status", 3, "ngClass", "cell-skipped-status", "title"], ["title", "Human Review: No rating submitted yet", 1, "cell-human", "no-feedback"], [1, "cell-human", "has-feedback", 3, "rating-low", "rating-medium", "rating-good", "rating-excellent", "title"], [1, "cell-auto", "has-score", 3, "score-low", "score-medium", "score-good", "score-excellent", "title"], ["title", "Auto Score: No automated score available", 1, "cell-auto", "no-score"], [1, "cell-status", 3, "ngClass", "title"], [1, "fas", "fa-user-slash"], [1, "cell-human", "has-feedback", 3, "title"], [1, "rating-value"], [1, "cell-auto", "has-score", 3, "title"], [1, "score-value"], [1, "fas", "fa-minus"], [1, "cell-eval-stack", "totals-stack"], [1, "totals-status"], [1, "totals-human"], [1, "totals-auto"], [1, "pass-count"], [1, "avg-label"], [1, "count-label"], [1, "chart-section"], ["text", "Loading chart data..."], [1, "chart-header"], [1, "chart-legend"], [1, "legend-item", "chart-passed"], [1, "legend-item", "chart-failed"], [1, "legend-item", "chart-error"], [1, "fas", "fa-exclamation"], [1, "legend-item", "chart-skipped"], [1, "fas", "fa-forward"], [1, "chart-container"], [1, "d3-chart"], [1, "chart-info"], [1, "compare-selection"], [1, "compare-run-selector"], [1, "run-selector-list"], [1, "selected-run-preview"], [1, "compare-vs"], [1, "fas", "fa-exchange-alt"], [1, "compare-results"], [1, "compare-empty"], [1, "run-selector-item", 3, "selected"], [1, "run-selector-item", 3, "click"], [1, "selector-status"], [1, "selector-content"], [1, "selector-date"], [1, "selector-rate"], [1, "selector-tags"], [1, "tag-mini"], [1, "preview-header"], [1, "preview-label"], [1, "clear-btn", 3, "click"], [1, "preview-details"], [1, "preview-rate"], [1, "run-selector-item", 3, "selected", "disabled"], [1, "compare-summary"], [1, "compare-summary-card"], [1, "summary-label"], [1, "summary-value", 3, "ngClass"], [1, "compare-summary-card", "improved"], [1, "summary-value"], [1, "compare-summary-card", "regressed"], [1, "compare-table-section"], [1, "fas", "fa-list"], [1, "compare-table-wrapper"], [1, "compare-table"], [3, "ngClass"], [1, "status-chip", "status-missing"], [1, "muted"], [1, "change-indicator", "improved"], [1, "change-indicator", "regressed"], [1, "change-indicator", "unchanged"], [1, "fas", "fa-arrow-up"], [1, "fas", "fa-arrow-down"], ["text", "Loading comparison data..."], [1, "compare-empty-icon"], [1, "shortcuts-header"], ["title", "Hide shortcuts", 1, "shortcuts-close", 3, "click"], [1, "shortcut-list"], [1, "shortcut-item"], [1, "shortcut-keys"]], template: function TestSuiteFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3336
3357
|
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "nav", 3)(3, "ol")(4, "li")(5, "a", 4);
|
|
3337
3358
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_a_click_5_listener() { return ctx.navigateToTestingDashboard(); });
|
|
3338
3359
|
i0.ɵɵelement(6, "i", 5);
|
|
@@ -3354,7 +3375,7 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3354
3375
|
i0.ɵɵelement(23, "i", 16);
|
|
3355
3376
|
i0.ɵɵtext(24);
|
|
3356
3377
|
i0.ɵɵelementEnd();
|
|
3357
|
-
i0.ɵɵ
|
|
3378
|
+
i0.ɵɵconditionalCreate(25, TestSuiteFormComponentExtended_Conditional_25_Template, 3, 1, "span", 17);
|
|
3358
3379
|
i0.ɵɵelementEnd()()();
|
|
3359
3380
|
i0.ɵɵelementStart(26, "div", 18);
|
|
3360
3381
|
i0.ɵɵelement(27, "app-evaluation-mode-toggle");
|
|
@@ -3373,7 +3394,7 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3373
3394
|
i0.ɵɵelement(35, "i", 16);
|
|
3374
3395
|
i0.ɵɵtext(36);
|
|
3375
3396
|
i0.ɵɵelementEnd()()();
|
|
3376
|
-
i0.ɵɵ
|
|
3397
|
+
i0.ɵɵconditionalCreate(37, TestSuiteFormComponentExtended_Conditional_37_Template, 3, 1, "div", 24);
|
|
3377
3398
|
i0.ɵɵelementEnd();
|
|
3378
3399
|
i0.ɵɵelementStart(38, "div", 25)(39, "div", 26)(40, "button", 27);
|
|
3379
3400
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_button_click_40_listener() { return ctx.changeTab("overview"); });
|
|
@@ -3384,13 +3405,13 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3384
3405
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_button_click_43_listener() { return ctx.changeTab("tests"); });
|
|
3385
3406
|
i0.ɵɵelement(44, "i", 29);
|
|
3386
3407
|
i0.ɵɵtext(45, " Tests ");
|
|
3387
|
-
i0.ɵɵ
|
|
3408
|
+
i0.ɵɵconditionalCreate(46, TestSuiteFormComponentExtended_Conditional_46_Template, 2, 1, "span", 30);
|
|
3388
3409
|
i0.ɵɵelementEnd();
|
|
3389
3410
|
i0.ɵɵelementStart(47, "button", 27);
|
|
3390
3411
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_button_click_47_listener() { return ctx.changeTab("runs"); });
|
|
3391
3412
|
i0.ɵɵelement(48, "i", 31);
|
|
3392
3413
|
i0.ɵɵtext(49, " Runs ");
|
|
3393
|
-
i0.ɵɵ
|
|
3414
|
+
i0.ɵɵconditionalCreate(50, TestSuiteFormComponentExtended_Conditional_50_Template, 2, 1, "span", 30);
|
|
3394
3415
|
i0.ɵɵelementEnd();
|
|
3395
3416
|
i0.ɵɵelementStart(51, "button", 27);
|
|
3396
3417
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_button_click_51_listener() { return ctx.changeTab("analytics"); });
|
|
@@ -3403,13 +3424,17 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3403
3424
|
i0.ɵɵtext(56, " Compare ");
|
|
3404
3425
|
i0.ɵɵelementEnd()()();
|
|
3405
3426
|
i0.ɵɵelementStart(57, "div", 34);
|
|
3406
|
-
i0.ɵɵ
|
|
3427
|
+
i0.ɵɵconditionalCreate(58, TestSuiteFormComponentExtended_Conditional_58_Template, 45, 13, "div", 35);
|
|
3428
|
+
i0.ɵɵconditionalCreate(59, TestSuiteFormComponentExtended_Conditional_59_Template, 4, 3, "div", 36);
|
|
3429
|
+
i0.ɵɵconditionalCreate(60, TestSuiteFormComponentExtended_Conditional_60_Template, 4, 3, "div", 37);
|
|
3430
|
+
i0.ɵɵconditionalCreate(61, TestSuiteFormComponentExtended_Conditional_61_Template, 4, 3, "div", 38);
|
|
3431
|
+
i0.ɵɵconditionalCreate(62, TestSuiteFormComponentExtended_Conditional_62_Template, 18, 8, "div", 39);
|
|
3407
3432
|
i0.ɵɵelementEnd();
|
|
3408
3433
|
i0.ɵɵelementStart(63, "button", 40);
|
|
3409
3434
|
i0.ɵɵlistener("click", function TestSuiteFormComponentExtended_Template_button_click_63_listener() { return ctx.toggleShortcuts(); });
|
|
3410
3435
|
i0.ɵɵelement(64, "i", 41);
|
|
3411
3436
|
i0.ɵɵelementEnd();
|
|
3412
|
-
i0.ɵɵ
|
|
3437
|
+
i0.ɵɵconditionalCreate(65, TestSuiteFormComponentExtended_Conditional_65_Template, 32, 0, "div", 42);
|
|
3413
3438
|
i0.ɵɵelementEnd();
|
|
3414
3439
|
} if (rf & 2) {
|
|
3415
3440
|
i0.ɵɵadvance(13);
|
|
@@ -3425,7 +3450,7 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3425
3450
|
i0.ɵɵadvance();
|
|
3426
3451
|
i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
|
|
3427
3452
|
i0.ɵɵadvance();
|
|
3428
|
-
i0.ɵɵ
|
|
3453
|
+
i0.ɵɵconditional(ctx.testsLoaded ? 25 : -1);
|
|
3429
3454
|
i0.ɵɵadvance(9);
|
|
3430
3455
|
i0.ɵɵproperty("disabled", ctx.isRefreshing);
|
|
3431
3456
|
i0.ɵɵadvance();
|
|
@@ -3433,7 +3458,7 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3433
3458
|
i0.ɵɵadvance();
|
|
3434
3459
|
i0.ɵɵtextInterpolate1(" ", ctx.isRefreshing ? "Refreshing..." : "Refresh", " ");
|
|
3435
3460
|
i0.ɵɵadvance();
|
|
3436
|
-
i0.ɵɵ
|
|
3461
|
+
i0.ɵɵconditional(ctx.record.Description ? 37 : -1);
|
|
3437
3462
|
i0.ɵɵadvance(3);
|
|
3438
3463
|
i0.ɵɵclassProp("active", ctx.activeTab === "overview");
|
|
3439
3464
|
i0.ɵɵattribute("aria-selected", ctx.activeTab === "overview");
|
|
@@ -3441,12 +3466,12 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3441
3466
|
i0.ɵɵclassProp("active", ctx.activeTab === "tests");
|
|
3442
3467
|
i0.ɵɵattribute("aria-selected", ctx.activeTab === "tests");
|
|
3443
3468
|
i0.ɵɵadvance(3);
|
|
3444
|
-
i0.ɵɵ
|
|
3469
|
+
i0.ɵɵconditional(ctx.testsLoaded ? 46 : -1);
|
|
3445
3470
|
i0.ɵɵadvance();
|
|
3446
3471
|
i0.ɵɵclassProp("active", ctx.activeTab === "runs");
|
|
3447
3472
|
i0.ɵɵattribute("aria-selected", ctx.activeTab === "runs");
|
|
3448
3473
|
i0.ɵɵadvance(3);
|
|
3449
|
-
i0.ɵɵ
|
|
3474
|
+
i0.ɵɵconditional(ctx.runsLoaded ? 50 : -1);
|
|
3450
3475
|
i0.ɵɵadvance();
|
|
3451
3476
|
i0.ɵɵclassProp("active", ctx.activeTab === "analytics");
|
|
3452
3477
|
i0.ɵɵattribute("aria-selected", ctx.activeTab === "analytics");
|
|
@@ -3454,20 +3479,20 @@ let TestSuiteFormComponentExtended = class TestSuiteFormComponentExtended extend
|
|
|
3454
3479
|
i0.ɵɵclassProp("active", ctx.activeTab === "compare");
|
|
3455
3480
|
i0.ɵɵattribute("aria-selected", ctx.activeTab === "compare");
|
|
3456
3481
|
i0.ɵɵadvance(4);
|
|
3457
|
-
i0.ɵɵ
|
|
3482
|
+
i0.ɵɵconditional(ctx.activeTab === "overview" ? 58 : -1);
|
|
3458
3483
|
i0.ɵɵadvance();
|
|
3459
|
-
i0.ɵɵ
|
|
3484
|
+
i0.ɵɵconditional(ctx.activeTab === "tests" ? 59 : -1);
|
|
3460
3485
|
i0.ɵɵadvance();
|
|
3461
|
-
i0.ɵɵ
|
|
3486
|
+
i0.ɵɵconditional(ctx.activeTab === "runs" ? 60 : -1);
|
|
3462
3487
|
i0.ɵɵadvance();
|
|
3463
|
-
i0.ɵɵ
|
|
3488
|
+
i0.ɵɵconditional(ctx.activeTab === "analytics" ? 61 : -1);
|
|
3464
3489
|
i0.ɵɵadvance();
|
|
3465
|
-
i0.ɵɵ
|
|
3490
|
+
i0.ɵɵconditional(ctx.activeTab === "compare" ? 62 : -1);
|
|
3466
3491
|
i0.ɵɵadvance();
|
|
3467
3492
|
i0.ɵɵproperty("title", ctx.showShortcuts ? "Hide keyboard shortcuts" : "Show keyboard shortcuts");
|
|
3468
3493
|
i0.ɵɵadvance(2);
|
|
3469
|
-
i0.ɵɵ
|
|
3470
|
-
} }, dependencies: [i5.NgClass, i5.NgForOf, i5.NgIf, i6.DefaultValueAccessor, i6.NumberValueAccessor, i6.NgControlStatus, i6.NgModel, i7.DialogContainerDirective, i8.ButtonComponent, i3.EvaluationModeToggleComponent, i9.LoadingComponent, i5.DatePipe], styles: ["\n\n\n\n\n\n\n[_nghost-%COMP%] {\n --test-primary: #2563eb;\n --test-primary-light: #3b82f6;\n --test-success: #10b981;\n --test-error: #ef4444;\n --test-warning: #f59e0b;\n --test-disabled: #6b7280;\n --test-bg: #f8fafc;\n --test-surface: #ffffff;\n --test-border: #e2e8f0;\n --test-text: #1e293b;\n --test-text-secondary: #64748b;\n --test-text-muted: #94a3b8;\n --test-radius-sm: 6px;\n --test-radius-md: 10px;\n --test-radius-lg: 16px;\n --test-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --test-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --test-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n --test-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: block;\n height: 100%;\n}\n\n.test-suite-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--test-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n\n\n.breadcrumb[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--test-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .separator[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--test-text-muted);\n margin: 0 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .current[_ngcontent-%COMP%] {\n color: var(--test-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text[_ngcontent-%COMP%] {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.suite-header[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n padding: 20px;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n gap: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.suite-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: var(--test-radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-md);\n transition: var(--test-transition);\n}\n\n.suite-icon[_ngcontent-%COMP%]:hover { transform: scale(1.05); }\n\n.suite-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.suite-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: clamp(18px, 4vw, 24px);\n font-weight: 700;\n color: var(--test-text);\n word-wrap: break-word;\n}\n\n.suite-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-success) 0%, #059669 100%); }\n.status-badge.status-disabled[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-disabled) 0%, #4b5563 100%); }\n.status-badge.status-pending[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-warning) 0%, #d97706 100%); }\n\n.status-badge-inline[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 2px 10px;\n border-radius: 10px;\n color: white;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-badge-inline.status-active[_ngcontent-%COMP%] { background: var(--test-success); }\n.status-badge-inline.status-disabled[_ngcontent-%COMP%] { background: var(--test-disabled); }\n.status-badge-inline.status-pending[_ngcontent-%COMP%] { background: var(--test-warning); }\n\n.test-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: var(--test-text-secondary);\n padding: 4px 10px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.suite-description[_ngcontent-%COMP%] {\n padding: 16px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.suite-description[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--test-text-secondary);\n line-height: 1.6;\n font-size: 14px;\n}\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.tabs[_ngcontent-%COMP%]::-webkit-scrollbar { display: none; }\n\n.tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 18px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--test-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n white-space: nowrap;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--test-primary);\n border-bottom-color: var(--test-primary);\n font-weight: 600;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n background: var(--test-border);\n color: var(--test-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-badge[_ngcontent-%COMP%] {\n background: rgba(37, 99, 235, 0.15);\n color: var(--test-primary);\n}\n\n.tab-shortcut[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--test-text-muted);\n background: var(--test-bg);\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n\n.overview-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.info-section[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 20px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--test-text);\n font-weight: 500;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.config-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.config-input[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--test-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.config-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--test-text-muted);\n}\n\n\n\n.tests-tab[_ngcontent-%COMP%], .runs-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.loading-state[_ngcontent-%COMP%] { padding: 0; }\n\n.skeleton-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.skeleton-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: var(--test-radius-md);\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line[_ngcontent-%COMP%] {\n height: 14px;\n border-radius: 4px;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-line.wide[_ngcontent-%COMP%] { width: 70%; }\n.skeleton-line.narrow[_ngcontent-%COMP%] { width: 40%; }\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.tests-list[_ngcontent-%COMP%], .runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.test-item[_ngcontent-%COMP%]:hover, .run-item[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n border-color: var(--test-primary-light);\n transform: translateX(4px);\n}\n\n.test-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n font-size: 14px;\n font-weight: 700;\n color: var(--test-text-secondary);\n flex-shrink: 0;\n}\n\n.test-icon[_ngcontent-%COMP%], .run-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--test-radius-md);\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-sm);\n}\n\n.test-icon[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--test-primary) 0%, #1d4ed8 100%);\n}\n\n.test-content[_ngcontent-%COMP%], .run-content[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.test-name[_ngcontent-%COMP%], .run-header[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n margin-bottom: 4px;\n}\n\n.run-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] { font-weight: 600; }\n\n.run-status[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n}\n\n.test-status[_ngcontent-%COMP%], .run-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--test-text-secondary);\n}\n\n.test-status[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .run-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.test-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.test-item[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n transform: translateX(2px);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--test-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 300px;\n}\n\n\n\n\n\n.shortcuts-toggle[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n box-shadow: var(--test-shadow-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--test-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--test-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle[_ngcontent-%COMP%]:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--test-primary);\n border-color: var(--test-primary);\n}\n\n.keyboard-shortcuts[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n padding: 12px 16px;\n box-shadow: var(--test-shadow-lg);\n font-size: 12px;\n z-index: 100;\n max-width: 260px;\n}\n\n.shortcuts-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text);\n}\n\n.shortcuts-close[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--test-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--test-transition);\n}\n\n.shortcuts-close[_ngcontent-%COMP%]:hover {\n color: var(--test-text);\n background: var(--test-border);\n}\n\n.shortcut-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: var(--test-text-secondary);\n}\n\n.shortcut-keys[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.shortcut-keys[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n background: var(--test-bg);\n border: 1px solid var(--test-border);\n border-radius: 4px;\n padding: 2px 6px;\n font-size: 11px;\n color: var(--test-text);\n}\n\n\n\n@media (max-width: 1024px) {\n .keyboard-shortcuts[_ngcontent-%COMP%], .shortcuts-toggle[_ngcontent-%COMP%] { display: none; }\n}\n\n@media (max-width: 768px) {\n .suite-header[_ngcontent-%COMP%] { padding: 16px; }\n\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { flex: 1; }\n\n .tab-shortcut[_ngcontent-%COMP%] { display: none; }\n\n .info-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n\n .test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] { padding: 14px; }\n}\n\n@media (max-width: 480px) {\n .suite-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: 18px;\n }\n\n .suite-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] { font-size: 16px; }\n\n .tab-badge[_ngcontent-%COMP%] { display: none; }\n\n .test-sequence[_ngcontent-%COMP%] { display: none; }\n}\n\n@media (hover: none) and (pointer: coarse) {\n .test-item[_ngcontent-%COMP%]:active, .run-item[_ngcontent-%COMP%]:active {\n background: rgba(37, 99, 235, 0.1);\n transform: scale(0.98);\n }\n\n .tab[_ngcontent-%COMP%] { min-height: 48px; }\n .test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] { min-height: 64px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *[_ngcontent-%COMP%], *[_ngcontent-%COMP%]::before, *[_ngcontent-%COMP%]::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n@media print {\n .header-actions[_ngcontent-%COMP%], .tabs-container[_ngcontent-%COMP%], .keyboard-shortcuts[_ngcontent-%COMP%] {\n display: none !important;\n }\n}\n\n\n\n\n\n.run-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.tag-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.tag-mini[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 500;\n color: #64748b;\n}\n\n.tag-more[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #94a3b8;\n font-weight: 500;\n}\n\n\n\n.run-eval-metrics[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n\n.eval-metric[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.eval-metric.status[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.eval-metric.status.status-completed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.eval-metric.status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.eval-metric.status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.eval-metric.status.status-pending[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.eval-metric.human[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #f59e0b;\n color: #92400e;\n}\n\n.eval-metric.human[_ngcontent-%COMP%] .eval-pending[_ngcontent-%COMP%] {\n font-size: 9px;\n color: #d97706;\n}\n\n.eval-metric.auto[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n}\n\n.eval-metric.auto.high[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);\n border: 1px solid #86efac;\n color: #166534;\n}\n\n.eval-metric.auto.medium[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #fcd34d;\n color: #92400e;\n}\n\n.eval-metric.auto.low[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n border: 1px solid #fca5a5;\n color: #991b1b;\n}\n\n.tag-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.tag-chip-table[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n\n\n.analytics-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n\n\n.analytics-filters[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-bottom: 16px;\n box-shadow: var(--test-shadow-sm);\n overflow: hidden;\n}\n\n.analytics-filters.collapsed[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.filters-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.filters-header[_ngcontent-%COMP%]:hover {\n background: var(--test-bg);\n}\n\n.filters-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--test-text-secondary);\n}\n\n.filters-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.filter-summary[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--test-text-muted);\n margin-left: 8px;\n}\n\n.filters-header[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n font-size: 12px;\n}\n\n.filters-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 12px 16px 16px 16px;\n border-top: 1px solid var(--test-border);\n}\n\n.filter-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.filter-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.filter-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.filter-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n background: var(--test-surface);\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.filter-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--test-primary);\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.filter-btn.active[_ngcontent-%COMP%] {\n background: var(--test-primary);\n border-color: var(--test-primary);\n color: white;\n}\n\n.filter-btn.tag-btn[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn.tag-btn[_ngcontent-%COMP%] i.fa-check[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.filter-btn.tag-btn.all-tags-btn[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.filter-btn.tag-btn.all-tags-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.filter-hint[_ngcontent-%COMP%] {\n font-weight: 400;\n font-size: 10px;\n color: var(--test-primary);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-filters[_ngcontent-%COMP%] {\n max-height: 120px;\n overflow-y: auto;\n}\n\n\n\n.analytics-kpis[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n transition: var(--test-transition);\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--test-shadow-md);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #eff6ff;\n border-radius: var(--test-radius-md);\n color: var(--test-primary);\n font-size: 20px;\n}\n\n.kpi-icon.success[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-icon.info[_ngcontent-%COMP%] {\n background: #f0f9ff;\n color: #0ea5e9;\n}\n\n.kpi-icon.warning[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n line-height: 1.2;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--test-text-secondary);\n margin-top: 2px;\n}\n\n.kpi-trend[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 600;\n margin-top: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f1f5f9;\n color: var(--test-text-secondary);\n}\n\n.kpi-trend.trend-up[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-trend.trend-down[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n\n\n.analytics-table-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.analytics-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.analytics-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.analytics-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n margin: 0 -24px;\n padding: 0 24px;\n}\n\n.analytics-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.analytics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.analytics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.clickable-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.clickable-row[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.status-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-chip.status-completed[_ngcontent-%COMP%] { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-passed[_ngcontent-%COMP%] { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-failed[_ngcontent-%COMP%] { background: #fef2f2; color: var(--test-error); }\n.status-chip.status-error[_ngcontent-%COMP%] { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-running[_ngcontent-%COMP%] { background: #eff6ff; color: var(--test-primary); }\n.status-chip.status-pending[_ngcontent-%COMP%] { background: #f5f3ff; color: #8b5cf6; }\n.status-chip.status-cancelled[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-disabled); }\n.status-chip.status-missing[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-text-muted); }\n.status-chip.status-timeout[_ngcontent-%COMP%] { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-skipped[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-disabled); }\n\n.pass-rate-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 100px;\n}\n\n.pass-rate-bar[_ngcontent-%COMP%] {\n height: 6px;\n border-radius: 3px;\n background: var(--test-success);\n transition: width 0.3s ease;\n max-width: 60px;\n}\n\n.pass-rate-bar.medium[_ngcontent-%COMP%] { background: var(--test-warning); }\n.pass-rate-bar.low[_ngcontent-%COMP%] { background: var(--test-error); }\n\n\n\n.analytics-subnav[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 8px;\n margin-bottom: 20px;\n box-shadow: var(--test-shadow-sm);\n display: inline-flex;\n}\n\n.subnav-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--test-bg);\n border-radius: var(--test-radius-md);\n padding: 4px;\n}\n\n.subnav-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: var(--test-radius-sm);\n background: transparent;\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.subnav-tab[_ngcontent-%COMP%]:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.subnav-tab.active[_ngcontent-%COMP%] {\n background: var(--test-surface);\n color: var(--test-primary);\n box-shadow: var(--test-shadow-sm);\n}\n\n.subnav-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.matrix-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 16px;\n box-shadow: var(--test-shadow-sm);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 280px);\n min-height: 300px;\n}\n\n.matrix-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--test-border);\n flex-shrink: 0;\n}\n\n.matrix-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.matrix-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.matrix-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.matrix-run-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--test-text-muted);\n font-weight: 500;\n}\n\n\n\n.matrix-filter-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f8fafc;\n border: 1px solid var(--test-border);\n border-radius: 6px;\n padding: 4px 10px;\n min-width: 180px;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] i.fa-search[_ngcontent-%COMP%] {\n color: #94a3b8;\n font-size: 12px;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n font-size: 12px;\n color: var(--test-text);\n width: 100%;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]::placeholder {\n color: #94a3b8;\n}\n\n.clear-filter-btn[_ngcontent-%COMP%] {\n border: none;\n background: none;\n padding: 2px 4px;\n cursor: pointer;\n color: #94a3b8;\n font-size: 10px;\n border-radius: 3px;\n transition: all 0.15s ease;\n}\n\n.clear-filter-btn[_ngcontent-%COMP%]:hover {\n background: #e2e8f0;\n color: #64748b;\n}\n\n\n\n.matrix-scroll-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n}\n\n.test-matrix[_ngcontent-%COMP%] {\n display: table;\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.test-matrix[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n display: table-header-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n display: table-row;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] {\n display: table-row-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n display: table-row;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: rgba(59, 130, 246, 0.05);\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n border-top: 1px solid rgba(59, 130, 246, 0.3);\n border-bottom: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] .test-name-cell[_ngcontent-%COMP%] {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix[_ngcontent-%COMP%] tfoot[_ngcontent-%COMP%] {\n display: table-footer-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n display: table-cell;\n border: 1px solid var(--test-border);\n padding: 8px 12px;\n text-align: center;\n vertical-align: middle;\n}\n\n.test-matrix[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--test-bg);\n font-weight: 600;\n font-size: 11px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 3px solid #475569 !important;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%] {\n width: 36px;\n min-width: 36px;\n max-width: 36px;\n text-align: center;\n position: sticky;\n left: 0;\n font-size: 11px;\n color: #64748b;\n border-right: 1px solid var(--test-border);\n padding: 6px 4px !important;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%] {\n cursor: pointer;\n font-weight: 600;\n background: var(--test-bg);\n z-index: 12; \n\n top: 0;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%] {\n background: var(--test-surface);\n z-index: 2;\n}\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.6;\n}\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%]:hover {\n background: #f1f5f9;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%] {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-bg);\n z-index: 11;\n border-right: 2px solid var(--test-border);\n cursor: pointer;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 4px;\n opacity: 0.6;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%]:hover {\n background: #f1f5f9;\n}\n\n.test-matrix[_ngcontent-%COMP%] .run-header[_ngcontent-%COMP%] {\n min-width: 120px;\n width: 120px;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .spacer-header[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] .spacer-cell[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 20px;\n background: var(--test-bg);\n border: none;\n}\n\n.test-matrix[_ngcontent-%COMP%] .spacer-cell[_ngcontent-%COMP%] {\n background: var(--test-surface);\n}\n\n.test-matrix[_ngcontent-%COMP%] .run-header[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-header-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.run-date[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.run-pass-rate[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.run-pass-rate.high[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.run-pass-rate.medium[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.run-pass-rate.low[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.run-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.tag-tiny[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n background: #eff6ff;\n color: var(--test-primary);\n border-radius: 8px;\n white-space: nowrap;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.run-tags-header[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 3px;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.tag-chip-header[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 70px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-more-header[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--test-text-secondary);\n padding: 2px 4px;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-cell[_ngcontent-%COMP%] {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-surface);\n z-index: 2;\n border-right: 2px solid var(--test-border);\n padding: 6px 10px !important;\n}\n\n.test-name[_ngcontent-%COMP%] {\n display: block;\n white-space: nowrap;\n font-weight: 500;\n color: var(--test-text);\n font-size: 12px;\n}\n\n.result-cell[_ngcontent-%COMP%] {\n position: relative;\n min-width: 120px;\n width: 120px;\n transition: var(--test-transition);\n}\n\n.result-cell.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-cell.clickable[_ngcontent-%COMP%]:hover {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 5;\n}\n\n.result-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.result-cell.cell-passed[_ngcontent-%COMP%], \n.result-cell.cell-failed[_ngcontent-%COMP%], \n.result-cell.cell-error[_ngcontent-%COMP%], \n.result-cell.cell-timeout[_ngcontent-%COMP%], \n.result-cell.cell-running[_ngcontent-%COMP%], \n.result-cell.cell-pending[_ngcontent-%COMP%] {\n background: #ffffff;\n color: var(--test-text);\n}\n\n\n\n.result-cell.cell-skipped[_ngcontent-%COMP%] {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: var(--test-disabled);\n}\n\n.result-cell.cell-none[_ngcontent-%COMP%] {\n background: #f8fafc;\n color: var(--test-text-muted);\n}\n\n.cell-score[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n margin-top: 2px;\n}\n\n\n\n.cell-eval-stack[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-wrap: nowrap;\n}\n\n.result-cell.multi-eval[_ngcontent-%COMP%] {\n min-width: 120px;\n width: auto;\n}\n\n\n\n.cell-status.status-timeout[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-status.status-error[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-status.status-skipped[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-status.status-pending[_ngcontent-%COMP%] {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.cell-human[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: #fef3c7;\n color: #d97706;\n font-size: 10px;\n}\n\n.cell-auto[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-auto.high[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-auto.medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-auto.low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-none-indicator[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n opacity: 0.5;\n}\n\n.matrix-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.matrix-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n\n\n\n\n.chart-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.chart-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--test-border);\n}\n\n.chart-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.chart-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 12px;\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-passed[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-failed[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-error[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-skipped[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: var(--test-disabled);\n}\n\n.chart-container[_ngcontent-%COMP%] {\n min-height: 500px;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #fafbff 0%, #f8fafc 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.d3-chart[_ngcontent-%COMP%] {\n width: 100%;\n height: 500px;\n}\n\n.d3-chart[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n\n\n.d3-chart[_ngcontent-%COMP%] .node[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: transform 0.2s ease;\n}\n\n.d3-chart[_ngcontent-%COMP%] .node[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.d3-chart[_ngcontent-%COMP%] .node-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n fill: var(--test-text);\n pointer-events: none;\n}\n\n.d3-chart[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n fill: none;\n stroke-opacity: 0.4;\n transition: stroke-opacity 0.2s ease;\n}\n\n.d3-chart[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n stroke-opacity: 0.8;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip[_ngcontent-%COMP%] {\n position: absolute;\n padding: 10px 14px;\n background: rgba(30, 41, 59, 0.95);\n color: white;\n border-radius: 8px;\n font-size: 12px;\n pointer-events: none;\n z-index: 100;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n max-width: 250px;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip-title[_ngcontent-%COMP%] {\n font-weight: 600;\n margin-bottom: 4px;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip-value[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n.chart-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n margin-top: 16px;\n}\n\n.chart-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n\n\n\n\n.compare-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.compare-selection[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.compare-run-selector[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-run-selector[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.run-selector-list[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.run-selector-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.run-selector-item[_ngcontent-%COMP%]:hover {\n border-color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-selector-item.selected[_ngcontent-%COMP%] {\n border-color: var(--test-primary);\n background: #eff6ff;\n}\n\n.run-selector-item.disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.selector-status[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.selector-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.selector-date[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--test-text);\n}\n\n.selector-rate[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--test-text-secondary);\n}\n\n.selector-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.selected-run-preview[_ngcontent-%COMP%] {\n padding: 12px;\n background: #f8fafc;\n border-radius: var(--test-radius-sm);\n border: 1px solid var(--test-border);\n}\n\n.preview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n}\n\n.clear-btn[_ngcontent-%COMP%] {\n padding: 4px 8px;\n border: none;\n background: transparent;\n color: var(--test-error);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.clear-btn[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.preview-details[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n color: var(--test-text);\n}\n\n.preview-rate[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--test-success);\n}\n\n.compare-vs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--test-bg);\n border-radius: 50%;\n color: var(--test-text-muted);\n font-size: 16px;\n align-self: center;\n margin-top: 60px;\n}\n\n\n\n.compare-results[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.compare-summary[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n text-align: center;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n margin-bottom: 8px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-value.positive[_ngcontent-%COMP%] { color: var(--test-success); }\n.compare-summary-card[_ngcontent-%COMP%] .summary-value.negative[_ngcontent-%COMP%] { color: var(--test-error); }\n\n.compare-summary-card.improved[_ngcontent-%COMP%] {\n border-left: 4px solid var(--test-success);\n}\n\n.compare-summary-card.improved[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--test-success); }\n\n.compare-summary-card.regressed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--test-error);\n}\n\n.compare-summary-card.regressed[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--test-error); }\n\n\n\n.compare-table-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.compare-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.compare-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.compare-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.compare-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.compare-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.compare-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.improved[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.05);\n}\n\n.compare-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.regressed[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.05);\n}\n\n.test-name-cell[_ngcontent-%COMP%] {\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.positive[_ngcontent-%COMP%] { color: var(--test-success); }\n.negative[_ngcontent-%COMP%] { color: var(--test-error); }\n.muted[_ngcontent-%COMP%] { color: var(--test-text-muted); }\n\n.change-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.change-indicator.improved[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.change-indicator.regressed[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.change-indicator.unchanged[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: var(--test-text-muted);\n}\n\n\n\n.compare-empty[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 24px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-top: 24px;\n}\n\n.compare-empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin: 0 auto 20px;\n}\n\n.compare-empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--test-text-muted);\n}\n\n.compare-empty[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.compare-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 400px;\n margin: 0 auto;\n}\n\n\n\n.empty-state.small[_ngcontent-%COMP%] {\n padding: 32px 16px;\n}\n\n.empty-state.small[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n\n\n@media (max-width: 1024px) {\n .compare-selection[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .compare-vs[_ngcontent-%COMP%] {\n margin: 0;\n align-self: center;\n justify-self: center;\n }\n\n .analytics-kpis[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .filter-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .filter-btn[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n }\n\n .analytics-kpis[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-card[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .kpi-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .compare-summary[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .analytics-table-wrapper[_ngcontent-%COMP%], \n .compare-table-wrapper[_ngcontent-%COMP%] {\n margin: 0 -20px;\n padding: 0 20px;\n }\n\n .run-selector-list[_ngcontent-%COMP%] {\n max-height: 150px;\n }\n}\n\n@media (max-width: 480px) {\n .compare-summary[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .compare-summary-card[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .analytics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n .analytics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%], \n .compare-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n .compare-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-size: 12px;\n }\n}\n\n\n\n\n\n\n\n\n.cell-human[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-human.no-feedback[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-human.no-feedback[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] .rating-value[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 11px;\n}\n\n\n\n.cell-human.rating-low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-human.rating-medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-human.rating-good[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-human.rating-excellent[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n\n\n.cell-auto[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-auto.no-score[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-auto.no-score[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] .score-value[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 10px;\n}\n\n\n\n.cell-auto.score-low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-auto.score-medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-auto.score-good[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-auto.score-excellent[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n\n\n.cell-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n.cell-status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-status.status-error[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-timeout[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-skipped[_ngcontent-%COMP%], \n.cell-status.status-pending[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #2563eb;\n}\n\n\n\n.result-cell.cell-not-run[_ngcontent-%COMP%] {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: #94a3b8;\n}\n\n.result-cell.cell-not-run[_ngcontent-%COMP%] .cell-eval-stack[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.cell-not-run-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n color: #94a3b8;\n font-size: 11px;\n}\n\n\n\n\n\n.test-matrix[_ngcontent-%COMP%] tfoot[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 0;\n z-index: 2;\n}\n\n.totals-row[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n border-top: 2px solid var(--test-border);\n}\n\n.totals-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-weight: 600;\n}\n\n.totals-row[_ngcontent-%COMP%] .totals-label[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n font-size: 12px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.totals-row[_ngcontent-%COMP%] .totals-cell[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n}\n\n.totals-stack[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.totals-status[_ngcontent-%COMP%], \n.totals-human[_ngcontent-%COMP%], \n.totals-auto[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.totals-status[_ngcontent-%COMP%] {\n background: #e0f2fe;\n color: #0369a1;\n}\n\n.totals-status[_ngcontent-%COMP%] .pass-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-human[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.totals-human[_ngcontent-%COMP%] .avg-label[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-human[_ngcontent-%COMP%] .count-label[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.8;\n}\n\n.totals-auto[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.totals-auto[_ngcontent-%COMP%] .avg-label[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-auto[_ngcontent-%COMP%] .count-label[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.8;\n}"], changeDetection: 0 }); }
|
|
3494
|
+
i0.ɵɵconditional(ctx.showShortcuts ? 65 : -1);
|
|
3495
|
+
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgModel, i3.DialogContainerDirective, i4.ButtonComponent, i5.EvaluationModeToggleComponent, i6.LoadingComponent, i1.DatePipe], styles: ["\n\n\n\n\n\n\n[_nghost-%COMP%] {\n --test-primary: #2563eb;\n --test-primary-light: #3b82f6;\n --test-success: #10b981;\n --test-error: #ef4444;\n --test-warning: #f59e0b;\n --test-disabled: #6b7280;\n --test-bg: #f8fafc;\n --test-surface: #ffffff;\n --test-border: #e2e8f0;\n --test-text: #1e293b;\n --test-text-secondary: #64748b;\n --test-text-muted: #94a3b8;\n --test-radius-sm: 6px;\n --test-radius-md: 10px;\n --test-radius-lg: 16px;\n --test-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --test-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --test-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n --test-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: block;\n height: 100%;\n}\n\n.test-suite-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--test-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n\n\n.breadcrumb[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%] {\n color: var(--test-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .separator[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--test-text-muted);\n margin: 0 4px;\n}\n\n.breadcrumb[_ngcontent-%COMP%] .current[_ngcontent-%COMP%] {\n color: var(--test-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text[_ngcontent-%COMP%] {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.suite-header[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n padding: 20px;\n}\n\n.header-content[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n gap: 16px;\n}\n\n.header-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.suite-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: var(--test-radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-md);\n transition: var(--test-transition);\n}\n\n.suite-icon[_ngcontent-%COMP%]:hover { transform: scale(1.05); }\n\n.suite-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.suite-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: clamp(18px, 4vw, 24px);\n font-weight: 700;\n color: var(--test-text);\n word-wrap: break-word;\n}\n\n.suite-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-success) 0%, #059669 100%); }\n.status-badge.status-disabled[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-disabled) 0%, #4b5563 100%); }\n.status-badge.status-pending[_ngcontent-%COMP%] { background: linear-gradient(135deg, var(--test-warning) 0%, #d97706 100%); }\n\n.status-badge-inline[_ngcontent-%COMP%] {\n display: inline-flex;\n padding: 2px 10px;\n border-radius: 10px;\n color: white;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-badge-inline.status-active[_ngcontent-%COMP%] { background: var(--test-success); }\n.status-badge-inline.status-disabled[_ngcontent-%COMP%] { background: var(--test-disabled); }\n.status-badge-inline.status-pending[_ngcontent-%COMP%] { background: var(--test-warning); }\n\n.test-count[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: var(--test-text-secondary);\n padding: 4px 10px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.suite-description[_ngcontent-%COMP%] {\n padding: 16px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.suite-description[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--test-text-secondary);\n line-height: 1.6;\n font-size: 14px;\n}\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs[_ngcontent-%COMP%] {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.tabs[_ngcontent-%COMP%]::-webkit-scrollbar { display: none; }\n\n.tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 18px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--test-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n white-space: nowrap;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n color: var(--test-primary);\n border-bottom-color: var(--test-primary);\n font-weight: 600;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n background: var(--test-border);\n color: var(--test-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active[_ngcontent-%COMP%] .tab-badge[_ngcontent-%COMP%] {\n background: rgba(37, 99, 235, 0.15);\n color: var(--test-primary);\n}\n\n.tab-shortcut[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--test-text-muted);\n background: var(--test-bg);\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n\n\n.tab-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n\n\n.overview-tab[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 20px;\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.info-section[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 20px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.info-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .config-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--test-text);\n font-weight: 500;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.config-item[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.config-input[_ngcontent-%COMP%] {\n padding: 10px 14px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--test-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.config-hint[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--test-text-muted);\n}\n\n\n\n.tests-tab[_ngcontent-%COMP%], .runs-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.loading-state[_ngcontent-%COMP%] { padding: 0; }\n\n.skeleton-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.skeleton-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: var(--test-radius-md);\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line[_ngcontent-%COMP%] {\n height: 14px;\n border-radius: 4px;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: _ngcontent-%COMP%_shimmer 1.5s infinite;\n}\n\n.skeleton-line.wide[_ngcontent-%COMP%] { width: 70%; }\n.skeleton-line.narrow[_ngcontent-%COMP%] { width: 40%; }\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.tests-list[_ngcontent-%COMP%], .runs-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.test-item[_ngcontent-%COMP%]:hover, .run-item[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n border-color: var(--test-primary-light);\n transform: translateX(4px);\n}\n\n.test-sequence[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n font-size: 14px;\n font-weight: 700;\n color: var(--test-text-secondary);\n flex-shrink: 0;\n}\n\n.test-icon[_ngcontent-%COMP%], .run-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--test-radius-md);\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-sm);\n}\n\n.test-icon[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, var(--test-primary) 0%, #1d4ed8 100%);\n}\n\n.test-content[_ngcontent-%COMP%], .run-content[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n\n.test-name[_ngcontent-%COMP%], .run-header[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n margin-bottom: 4px;\n}\n\n.run-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id[_ngcontent-%COMP%] { font-weight: 600; }\n\n.run-status[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n}\n\n.test-status[_ngcontent-%COMP%], .run-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--test-text-secondary);\n}\n\n.test-status[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .run-meta[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.test-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.test-item[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n transform: translateX(2px);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n color: var(--test-text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 300px;\n}\n\n\n\n\n\n.shortcuts-toggle[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n box-shadow: var(--test-shadow-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--test-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--test-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle[_ngcontent-%COMP%]:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--test-primary);\n border-color: var(--test-primary);\n}\n\n.keyboard-shortcuts[_ngcontent-%COMP%] {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n padding: 12px 16px;\n box-shadow: var(--test-shadow-lg);\n font-size: 12px;\n z-index: 100;\n max-width: 260px;\n}\n\n.shortcuts-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text);\n}\n\n.shortcuts-close[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--test-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--test-transition);\n}\n\n.shortcuts-close[_ngcontent-%COMP%]:hover {\n color: var(--test-text);\n background: var(--test-border);\n}\n\n.shortcut-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: var(--test-text-secondary);\n}\n\n.shortcut-keys[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.shortcut-keys[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%] {\n background: var(--test-bg);\n border: 1px solid var(--test-border);\n border-radius: 4px;\n padding: 2px 6px;\n font-size: 11px;\n color: var(--test-text);\n}\n\n\n\n@media (max-width: 1024px) {\n .keyboard-shortcuts[_ngcontent-%COMP%], .shortcuts-toggle[_ngcontent-%COMP%] { display: none; }\n}\n\n@media (max-width: 768px) {\n .suite-header[_ngcontent-%COMP%] { padding: 16px; }\n\n .header-content[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] { flex: 1; }\n\n .tab-shortcut[_ngcontent-%COMP%] { display: none; }\n\n .info-grid[_ngcontent-%COMP%] { grid-template-columns: 1fr; }\n\n .test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] { padding: 14px; }\n}\n\n@media (max-width: 480px) {\n .suite-icon[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n font-size: 18px;\n }\n\n .suite-info[_ngcontent-%COMP%] h1[_ngcontent-%COMP%] { font-size: 16px; }\n\n .tab-badge[_ngcontent-%COMP%] { display: none; }\n\n .test-sequence[_ngcontent-%COMP%] { display: none; }\n}\n\n@media (hover: none) and (pointer: coarse) {\n .test-item[_ngcontent-%COMP%]:active, .run-item[_ngcontent-%COMP%]:active {\n background: rgba(37, 99, 235, 0.1);\n transform: scale(0.98);\n }\n\n .tab[_ngcontent-%COMP%] { min-height: 48px; }\n .test-item[_ngcontent-%COMP%], .run-item[_ngcontent-%COMP%] { min-height: 64px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *[_ngcontent-%COMP%], *[_ngcontent-%COMP%]::before, *[_ngcontent-%COMP%]::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n@media print {\n .header-actions[_ngcontent-%COMP%], .tabs-container[_ngcontent-%COMP%], .keyboard-shortcuts[_ngcontent-%COMP%] {\n display: none !important;\n }\n}\n\n\n\n\n\n.run-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.tag-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.tag-mini[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 500;\n color: #64748b;\n}\n\n.tag-more[_ngcontent-%COMP%] {\n font-size: 10px;\n color: #94a3b8;\n font-weight: 500;\n}\n\n\n\n.run-eval-metrics[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n\n.eval-metric[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.eval-metric.status[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.eval-metric.status.status-completed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.eval-metric.status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.eval-metric.status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.eval-metric.status.status-pending[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.eval-metric.human[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #f59e0b;\n color: #92400e;\n}\n\n.eval-metric.human[_ngcontent-%COMP%] .eval-pending[_ngcontent-%COMP%] {\n font-size: 9px;\n color: #d97706;\n}\n\n.eval-metric.auto[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n}\n\n.eval-metric.auto.high[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);\n border: 1px solid #86efac;\n color: #166534;\n}\n\n.eval-metric.auto.medium[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #fcd34d;\n color: #92400e;\n}\n\n.eval-metric.auto.low[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n border: 1px solid #fca5a5;\n color: #991b1b;\n}\n\n.tag-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.tag-chip-table[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n\n\n.analytics-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n\n\n.analytics-filters[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-bottom: 16px;\n box-shadow: var(--test-shadow-sm);\n overflow: hidden;\n}\n\n.analytics-filters.collapsed[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.filters-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.filters-header[_ngcontent-%COMP%]:hover {\n background: var(--test-bg);\n}\n\n.filters-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--test-text-secondary);\n}\n\n.filters-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.filter-summary[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--test-text-muted);\n margin-left: 8px;\n}\n\n.filters-header[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n font-size: 12px;\n}\n\n.filters-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 12px 16px 16px 16px;\n border-top: 1px solid var(--test-border);\n}\n\n.filter-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.filter-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.filter-buttons[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.filter-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n background: var(--test-surface);\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.filter-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--test-primary);\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.filter-btn.active[_ngcontent-%COMP%] {\n background: var(--test-primary);\n border-color: var(--test-primary);\n color: white;\n}\n\n.filter-btn.tag-btn[_ngcontent-%COMP%] {\n padding: 6px 12px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn.tag-btn[_ngcontent-%COMP%] i.fa-check[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.filter-btn.tag-btn.all-tags-btn[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n.filter-btn.tag-btn.all-tags-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.filter-hint[_ngcontent-%COMP%] {\n font-weight: 400;\n font-size: 10px;\n color: var(--test-primary);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-filters[_ngcontent-%COMP%] {\n max-height: 120px;\n overflow-y: auto;\n}\n\n\n\n.analytics-kpis[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n transition: var(--test-transition);\n}\n\n.kpi-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: var(--test-shadow-md);\n}\n\n.kpi-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #eff6ff;\n border-radius: var(--test-radius-md);\n color: var(--test-primary);\n font-size: 20px;\n}\n\n.kpi-icon.success[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-icon.info[_ngcontent-%COMP%] {\n background: #f0f9ff;\n color: #0ea5e9;\n}\n\n.kpi-icon.warning[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.kpi-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n line-height: 1.2;\n}\n\n.kpi-label[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--test-text-secondary);\n margin-top: 2px;\n}\n\n.kpi-trend[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 600;\n margin-top: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f1f5f9;\n color: var(--test-text-secondary);\n}\n\n.kpi-trend.trend-up[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-trend.trend-down[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n\n\n.analytics-table-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.analytics-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.analytics-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.analytics-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n margin: 0 -24px;\n padding: 0 24px;\n}\n\n.analytics-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.analytics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.analytics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.clickable-row[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.analytics-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.clickable-row[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.status-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-chip.status-completed[_ngcontent-%COMP%] { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-passed[_ngcontent-%COMP%] { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-failed[_ngcontent-%COMP%] { background: #fef2f2; color: var(--test-error); }\n.status-chip.status-error[_ngcontent-%COMP%] { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-running[_ngcontent-%COMP%] { background: #eff6ff; color: var(--test-primary); }\n.status-chip.status-pending[_ngcontent-%COMP%] { background: #f5f3ff; color: #8b5cf6; }\n.status-chip.status-cancelled[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-disabled); }\n.status-chip.status-missing[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-text-muted); }\n.status-chip.status-timeout[_ngcontent-%COMP%] { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-skipped[_ngcontent-%COMP%] { background: #f1f5f9; color: var(--test-disabled); }\n\n.pass-rate-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 100px;\n}\n\n.pass-rate-bar[_ngcontent-%COMP%] {\n height: 6px;\n border-radius: 3px;\n background: var(--test-success);\n transition: width 0.3s ease;\n max-width: 60px;\n}\n\n.pass-rate-bar.medium[_ngcontent-%COMP%] { background: var(--test-warning); }\n.pass-rate-bar.low[_ngcontent-%COMP%] { background: var(--test-error); }\n\n\n\n.analytics-subnav[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 8px;\n margin-bottom: 20px;\n box-shadow: var(--test-shadow-sm);\n display: inline-flex;\n}\n\n.subnav-tabs[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n background: var(--test-bg);\n border-radius: var(--test-radius-md);\n padding: 4px;\n}\n\n.subnav-tab[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: var(--test-radius-sm);\n background: transparent;\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.subnav-tab[_ngcontent-%COMP%]:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.subnav-tab.active[_ngcontent-%COMP%] {\n background: var(--test-surface);\n color: var(--test-primary);\n box-shadow: var(--test-shadow-sm);\n}\n\n.subnav-tab[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.matrix-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 16px;\n box-shadow: var(--test-shadow-sm);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 280px);\n min-height: 300px;\n}\n\n.matrix-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--test-border);\n flex-shrink: 0;\n}\n\n.matrix-header-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.matrix-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.matrix-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.matrix-run-count[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--test-text-muted);\n font-weight: 500;\n}\n\n\n\n.matrix-filter-input[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f8fafc;\n border: 1px solid var(--test-border);\n border-radius: 6px;\n padding: 4px 10px;\n min-width: 180px;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] i.fa-search[_ngcontent-%COMP%] {\n color: #94a3b8;\n font-size: 12px;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n outline: none;\n font-size: 12px;\n color: var(--test-text);\n width: 100%;\n}\n\n.matrix-filter-input[_ngcontent-%COMP%] .filter-input[_ngcontent-%COMP%]::placeholder {\n color: #94a3b8;\n}\n\n.clear-filter-btn[_ngcontent-%COMP%] {\n border: none;\n background: none;\n padding: 2px 4px;\n cursor: pointer;\n color: #94a3b8;\n font-size: 10px;\n border-radius: 3px;\n transition: all 0.15s ease;\n}\n\n.clear-filter-btn[_ngcontent-%COMP%]:hover {\n background: #e2e8f0;\n color: #64748b;\n}\n\n\n\n.matrix-scroll-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n}\n\n.test-matrix[_ngcontent-%COMP%] {\n display: table;\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.test-matrix[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n display: table-header-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n display: table-row;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] {\n display: table-row-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n display: table-row;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: rgba(59, 130, 246, 0.05);\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n border-top: 1px solid rgba(59, 130, 246, 0.3);\n border-bottom: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.row-selected[_ngcontent-%COMP%] .test-name-cell[_ngcontent-%COMP%] {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix[_ngcontent-%COMP%] tfoot[_ngcontent-%COMP%] {\n display: table-footer-group;\n}\n\n.test-matrix[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n display: table-cell;\n border: 1px solid var(--test-border);\n padding: 8px 12px;\n text-align: center;\n vertical-align: middle;\n}\n\n.test-matrix[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--test-bg);\n font-weight: 600;\n font-size: 11px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 3px solid #475569 !important;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%] {\n width: 36px;\n min-width: 36px;\n max-width: 36px;\n text-align: center;\n position: sticky;\n left: 0;\n font-size: 11px;\n color: #64748b;\n border-right: 1px solid var(--test-border);\n padding: 6px 4px !important;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%] {\n cursor: pointer;\n font-weight: 600;\n background: var(--test-bg);\n z-index: 12; \n\n top: 0;\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .seq-cell[_ngcontent-%COMP%] {\n background: var(--test-surface);\n z-index: 2;\n}\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.6;\n}\n\n.test-matrix[_ngcontent-%COMP%] .seq-header[_ngcontent-%COMP%]:hover {\n background: #f1f5f9;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%] {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-bg);\n z-index: 11;\n border-right: 2px solid var(--test-border);\n cursor: pointer;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 4px;\n opacity: 0.6;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-header[_ngcontent-%COMP%]:hover {\n background: #f1f5f9;\n}\n\n.test-matrix[_ngcontent-%COMP%] .run-header[_ngcontent-%COMP%] {\n min-width: 120px;\n width: 120px;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n\n\n.test-matrix[_ngcontent-%COMP%] .spacer-header[_ngcontent-%COMP%], \n.test-matrix[_ngcontent-%COMP%] .spacer-cell[_ngcontent-%COMP%] {\n width: 100%;\n min-width: 20px;\n background: var(--test-bg);\n border: none;\n}\n\n.test-matrix[_ngcontent-%COMP%] .spacer-cell[_ngcontent-%COMP%] {\n background: var(--test-surface);\n}\n\n.test-matrix[_ngcontent-%COMP%] .run-header[_ngcontent-%COMP%]:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-header-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.run-date[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.run-pass-rate[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.run-pass-rate.high[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.run-pass-rate.medium[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.run-pass-rate.low[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.run-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.tag-tiny[_ngcontent-%COMP%] {\n font-size: 9px;\n padding: 2px 6px;\n background: #eff6ff;\n color: var(--test-primary);\n border-radius: 8px;\n white-space: nowrap;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.run-tags-header[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 3px;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.tag-chip-header[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 70px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-more-header[_ngcontent-%COMP%] {\n font-size: 9px;\n color: var(--test-text-secondary);\n padding: 2px 4px;\n}\n\n.test-matrix[_ngcontent-%COMP%] .test-name-cell[_ngcontent-%COMP%] {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-surface);\n z-index: 2;\n border-right: 2px solid var(--test-border);\n padding: 6px 10px !important;\n}\n\n.test-name[_ngcontent-%COMP%] {\n display: block;\n white-space: nowrap;\n font-weight: 500;\n color: var(--test-text);\n font-size: 12px;\n}\n\n.result-cell[_ngcontent-%COMP%] {\n position: relative;\n min-width: 120px;\n width: 120px;\n transition: var(--test-transition);\n}\n\n.result-cell.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.result-cell.clickable[_ngcontent-%COMP%]:hover {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 5;\n}\n\n.result-cell[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n.result-cell.cell-passed[_ngcontent-%COMP%], \n.result-cell.cell-failed[_ngcontent-%COMP%], \n.result-cell.cell-error[_ngcontent-%COMP%], \n.result-cell.cell-timeout[_ngcontent-%COMP%], \n.result-cell.cell-running[_ngcontent-%COMP%], \n.result-cell.cell-pending[_ngcontent-%COMP%] {\n background: #ffffff;\n color: var(--test-text);\n}\n\n\n\n.result-cell.cell-skipped[_ngcontent-%COMP%] {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: var(--test-disabled);\n}\n\n.result-cell.cell-none[_ngcontent-%COMP%] {\n background: #f8fafc;\n color: var(--test-text-muted);\n}\n\n.cell-score[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n margin-top: 2px;\n}\n\n\n\n.cell-eval-stack[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-wrap: nowrap;\n}\n\n.result-cell.multi-eval[_ngcontent-%COMP%] {\n min-width: 120px;\n width: auto;\n}\n\n\n\n.cell-status.status-timeout[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-status.status-error[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-status.status-skipped[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-status.status-pending[_ngcontent-%COMP%] {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.cell-human[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: #fef3c7;\n color: #d97706;\n font-size: 10px;\n}\n\n.cell-auto[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-auto.high[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-auto.medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-auto.low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-none-indicator[_ngcontent-%COMP%] {\n color: var(--test-text-muted);\n opacity: 0.5;\n}\n\n.matrix-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.matrix-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n\n\n\n\n.chart-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.chart-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--test-border);\n}\n\n.chart-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.chart-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.chart-legend[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 12px;\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-passed[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-failed[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-error[_ngcontent-%COMP%] {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.chart-legend[_ngcontent-%COMP%] .legend-item.chart-skipped[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: var(--test-disabled);\n}\n\n.chart-container[_ngcontent-%COMP%] {\n min-height: 500px;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #fafbff 0%, #f8fafc 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.d3-chart[_ngcontent-%COMP%] {\n width: 100%;\n height: 500px;\n}\n\n.d3-chart[_ngcontent-%COMP%] svg[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n\n\n.d3-chart[_ngcontent-%COMP%] .node[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: transform 0.2s ease;\n}\n\n.d3-chart[_ngcontent-%COMP%] .node[_ngcontent-%COMP%]:hover {\n transform: scale(1.05);\n}\n\n.d3-chart[_ngcontent-%COMP%] .node-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n fill: var(--test-text);\n pointer-events: none;\n}\n\n.d3-chart[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n fill: none;\n stroke-opacity: 0.4;\n transition: stroke-opacity 0.2s ease;\n}\n\n.d3-chart[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n stroke-opacity: 0.8;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip[_ngcontent-%COMP%] {\n position: absolute;\n padding: 10px 14px;\n background: rgba(30, 41, 59, 0.95);\n color: white;\n border-radius: 8px;\n font-size: 12px;\n pointer-events: none;\n z-index: 100;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n max-width: 250px;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip-title[_ngcontent-%COMP%] {\n font-weight: 600;\n margin-bottom: 4px;\n}\n\n.d3-chart[_ngcontent-%COMP%] .tooltip-value[_ngcontent-%COMP%] {\n opacity: 0.8;\n}\n\n.chart-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n margin-top: 16px;\n}\n\n.chart-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n\n\n\n\n.compare-tab[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.compare-selection[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.compare-run-selector[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-run-selector[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.run-selector-list[_ngcontent-%COMP%] {\n max-height: 200px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.run-selector-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.run-selector-item[_ngcontent-%COMP%]:hover {\n border-color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-selector-item.selected[_ngcontent-%COMP%] {\n border-color: var(--test-primary);\n background: #eff6ff;\n}\n\n.run-selector-item.disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.selector-status[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.selector-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.selector-date[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 500;\n color: var(--test-text);\n}\n\n.selector-rate[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--test-text-secondary);\n}\n\n.selector-tags[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.selected-run-preview[_ngcontent-%COMP%] {\n padding: 12px;\n background: #f8fafc;\n border-radius: var(--test-radius-sm);\n border: 1px solid var(--test-border);\n}\n\n.preview-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n}\n\n.clear-btn[_ngcontent-%COMP%] {\n padding: 4px 8px;\n border: none;\n background: transparent;\n color: var(--test-error);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.clear-btn[_ngcontent-%COMP%]:hover { text-decoration: underline; }\n\n.preview-details[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n color: var(--test-text);\n}\n\n.preview-rate[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--test-success);\n}\n\n.compare-vs[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--test-bg);\n border-radius: 50%;\n color: var(--test-text-muted);\n font-size: 16px;\n align-self: center;\n margin-top: 60px;\n}\n\n\n\n.compare-results[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_fadeIn 0.3s ease-out;\n}\n\n.compare-summary[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n text-align: center;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n margin-bottom: 8px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.compare-summary-card[_ngcontent-%COMP%] .summary-value.positive[_ngcontent-%COMP%] { color: var(--test-success); }\n.compare-summary-card[_ngcontent-%COMP%] .summary-value.negative[_ngcontent-%COMP%] { color: var(--test-error); }\n\n.compare-summary-card.improved[_ngcontent-%COMP%] {\n border-left: 4px solid var(--test-success);\n}\n\n.compare-summary-card.improved[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--test-success); }\n\n.compare-summary-card.regressed[_ngcontent-%COMP%] {\n border-left: 4px solid var(--test-error);\n}\n\n.compare-summary-card.regressed[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] { color: var(--test-error); }\n\n\n\n.compare-table-section[_ngcontent-%COMP%] {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.compare-table-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--test-primary);\n}\n\n.compare-table-wrapper[_ngcontent-%COMP%] {\n overflow-x: auto;\n}\n\n.compare-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.compare-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.compare-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.compare-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.improved[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.05);\n}\n\n.compare-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.regressed[_ngcontent-%COMP%] {\n background: rgba(239, 68, 68, 0.05);\n}\n\n.test-name-cell[_ngcontent-%COMP%] {\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.positive[_ngcontent-%COMP%] { color: var(--test-success); }\n.negative[_ngcontent-%COMP%] { color: var(--test-error); }\n.muted[_ngcontent-%COMP%] { color: var(--test-text-muted); }\n\n.change-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.change-indicator.improved[_ngcontent-%COMP%] {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.change-indicator.regressed[_ngcontent-%COMP%] {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.change-indicator.unchanged[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: var(--test-text-muted);\n}\n\n\n\n.compare-empty[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 24px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-top: 24px;\n}\n\n.compare-empty-icon[_ngcontent-%COMP%] {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin: 0 auto 20px;\n}\n\n.compare-empty-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: var(--test-text-muted);\n}\n\n.compare-empty[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.compare-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 400px;\n margin: 0 auto;\n}\n\n\n\n.empty-state.small[_ngcontent-%COMP%] {\n padding: 32px 16px;\n}\n\n.empty-state.small[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n\n\n\n\n@media (max-width: 1024px) {\n .compare-selection[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .compare-vs[_ngcontent-%COMP%] {\n margin: 0;\n align-self: center;\n justify-self: center;\n }\n\n .analytics-kpis[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .filter-buttons[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .filter-btn[_ngcontent-%COMP%] {\n width: 100%;\n text-align: center;\n }\n\n .analytics-kpis[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .kpi-card[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .kpi-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .compare-summary[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .analytics-table-wrapper[_ngcontent-%COMP%], \n .compare-table-wrapper[_ngcontent-%COMP%] {\n margin: 0 -20px;\n padding: 0 20px;\n }\n\n .run-selector-list[_ngcontent-%COMP%] {\n max-height: 150px;\n }\n}\n\n@media (max-width: 480px) {\n .compare-summary[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .compare-summary-card[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-size: 20px;\n }\n\n .analytics-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n .analytics-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%], \n .compare-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n .compare-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-size: 12px;\n }\n}\n\n\n\n\n\n\n\n\n.cell-human[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-human.no-feedback[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-human.no-feedback[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n.cell-human.has-feedback[_ngcontent-%COMP%] .rating-value[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 11px;\n}\n\n\n\n.cell-human.rating-low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-human.rating-medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-human.rating-good[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-human.rating-excellent[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n\n\n.cell-auto[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-auto.no-score[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-auto.no-score[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n.cell-auto.has-score[_ngcontent-%COMP%] .score-value[_ngcontent-%COMP%] {\n font-weight: 700;\n font-size: 10px;\n}\n\n\n\n.cell-auto.score-low[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-auto.score-medium[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-auto.score-good[_ngcontent-%COMP%] {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-auto.score-excellent[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n\n\n.cell-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #16a34a;\n}\n\n.cell-status.status-failed[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-status.status-error[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-timeout[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-skipped[_ngcontent-%COMP%], \n.cell-status.status-pending[_ngcontent-%COMP%] {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #2563eb;\n}\n\n\n\n.result-cell.cell-not-run[_ngcontent-%COMP%] {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: #94a3b8;\n}\n\n.result-cell.cell-not-run[_ngcontent-%COMP%] .cell-eval-stack[_ngcontent-%COMP%] {\n opacity: 0.6;\n}\n\n.cell-not-run-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n color: #94a3b8;\n font-size: 11px;\n}\n\n\n\n\n\n.test-matrix[_ngcontent-%COMP%] tfoot[_ngcontent-%COMP%] {\n position: sticky;\n bottom: 0;\n z-index: 2;\n}\n\n.totals-row[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n border-top: 2px solid var(--test-border);\n}\n\n.totals-row[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 10px 12px;\n font-weight: 600;\n}\n\n.totals-row[_ngcontent-%COMP%] .totals-label[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n font-size: 12px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.totals-row[_ngcontent-%COMP%] .totals-cell[_ngcontent-%COMP%] {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n}\n\n.totals-stack[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.totals-status[_ngcontent-%COMP%], \n.totals-human[_ngcontent-%COMP%], \n.totals-auto[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.totals-status[_ngcontent-%COMP%] {\n background: #e0f2fe;\n color: #0369a1;\n}\n\n.totals-status[_ngcontent-%COMP%] .pass-count[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-human[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.totals-human[_ngcontent-%COMP%] .avg-label[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-human[_ngcontent-%COMP%] .count-label[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.8;\n}\n\n.totals-auto[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.totals-auto[_ngcontent-%COMP%] .avg-label[_ngcontent-%COMP%] {\n font-weight: 700;\n}\n\n.totals-auto[_ngcontent-%COMP%] .count-label[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.8;\n}"], changeDetection: 0 }); }
|
|
3471
3496
|
};
|
|
3472
3497
|
TestSuiteFormComponentExtended = __decorate([
|
|
3473
3498
|
RegisterClass(BaseFormComponent, 'MJ: Test Suites')
|
|
@@ -3475,8 +3500,8 @@ TestSuiteFormComponentExtended = __decorate([
|
|
|
3475
3500
|
export { TestSuiteFormComponentExtended };
|
|
3476
3501
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestSuiteFormComponentExtended, [{
|
|
3477
3502
|
type: Component,
|
|
3478
|
-
args: [{ selector: 'mj-test-suite-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-suite-form\" kendoDialogContainer>\n <!-- Header Section -->\n <div class=\"suite-header\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <i class=\"fas fa-layer-group\"></i>\n <span>{{ record.Name }}</span>\n </li>\n </ol>\n </nav>\n\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"suite-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas fa-layer-group\"></i>\n </div>\n <div class=\"suite-info\">\n <h1>{{ record.Name }}</h1>\n <div class=\"suite-meta\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass()\">\n <i class=\"fas\" [ngClass]=\"record.Status === 'Active' ? 'fa-circle-check' : 'fa-circle-pause'\"></i>\n {{ record.Status }}\n </span>\n <span class=\"test-count\" *ngIf=\"testsLoaded\">\n <i class=\"fas fa-flask\"></i>\n {{ suiteTests.length }} tests\n </span>\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n <button kendoButton (click)=\"exportToExcel()\" title=\"Export to CSV\">\n <i class=\"fas fa-file-excel\"></i> Export\n </button>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite\n </button>\n <button kendoButton (click)=\"refresh()\" [disabled]=\"isRefreshing\">\n <i class=\"fas\" [ngClass]=\"isRefreshing ? 'fa-sync fa-spin' : 'fa-sync'\"></i>\n {{ isRefreshing ? 'Refreshing...' : 'Refresh' }}\n </button>\n </div>\n </div>\n <div class=\"suite-description\" *ngIf=\"record.Description\">\n <p>{{ record.Description }}</p>\n </div>\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 'overview'\"\n (click)=\"changeTab('overview')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'overview'\">\n <i class=\"fas fa-th-large\"></i> Overview\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'tests'\"\n (click)=\"changeTab('tests')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'tests'\">\n <i class=\"fas fa-flask\"></i> Tests\n <span class=\"tab-badge\" *ngIf=\"testsLoaded\">{{ suiteTests.length }}</span>\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'runs'\"\n (click)=\"changeTab('runs')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'runs'\">\n <i class=\"fas fa-history\"></i> Runs\n <span class=\"tab-badge\" *ngIf=\"runsLoaded\">{{ suiteRuns.length }}</span>\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'analytics'\"\n (click)=\"changeTab('analytics')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'analytics'\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'compare'\"\n (click)=\"changeTab('compare')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'compare'\">\n <i class=\"fas fa-balance-scale\"></i> Compare\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n <div class=\"overview-tab\" *ngIf=\"activeTab === 'overview'\">\n <div class=\"info-section\">\n <h3><i class=\"fas fa-info-circle\"></i> Suite Information</h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <div class=\"info-label\">Name</div>\n <div class=\"info-value\">{{ record.Name }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Status</div>\n <div class=\"info-value\">\n <span class=\"status-badge-inline\" [ngClass]=\"getStatusClass()\">{{ record.Status }}</span>\n </div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Created</div>\n <div class=\"info-value\">{{ record.__mj_CreatedAt | date:'medium' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Updated</div>\n <div class=\"info-value\">{{ record.__mj_UpdatedAt | date:'medium' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Max Execution Time</div>\n <div class=\"info-value\">{{ formatTimeout(record.MaxExecutionTimeMS) }}</div>\n </div>\n </div>\n </div>\n\n <div class=\"config-section\">\n <h3><i class=\"fas fa-cogs\"></i> Execution Settings</h3>\n <div class=\"config-grid\">\n <div class=\"config-item\">\n <label>Max Execution Time (ms)</label>\n <input type=\"number\" [(ngModel)]=\"record.MaxExecutionTimeMS\" class=\"config-input\" placeholder=\"Default: 300000 (5 min)\" />\n <span class=\"config-hint\">Default timeout for tests in this suite</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tests Tab -->\n <div class=\"tests-tab\" *ngIf=\"activeTab === 'tests'\">\n <!-- Loading State -->\n <div class=\"loading-state\" *ngIf=\"loadingTests\">\n <div class=\"skeleton-list\">\n <div class=\"skeleton-card\" *ngFor=\"let i of [1,2,3,4,5]\">\n <div class=\"skeleton-sequence\"></div>\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tests List -->\n <div class=\"tests-list\" *ngIf=\"!loadingTests && suiteTests.length > 0\">\n <div class=\"test-item\" *ngFor=\"let test of suiteTests\" (click)=\"openTest(test.TestID)\">\n <div class=\"test-sequence\">{{ test.Sequence }}</div>\n <div class=\"test-icon\"><i class=\"fas fa-flask\"></i></div>\n <div class=\"test-content\">\n <div class=\"test-name\">{{ test.Test }}</div>\n <div class=\"test-status\">\n <span *ngIf=\"test.Status\"><i class=\"fas fa-info-circle\"></i> {{ test.Status }}</span>\n </div>\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"testsLoaded && !loadingTests && suiteTests.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-flask\"></i>\n </div>\n <h4>No Tests in Suite</h4>\n <p>Add tests to this suite to start running them together.</p>\n </div>\n </div>\n\n <!-- Runs Tab -->\n <div class=\"runs-tab\" *ngIf=\"activeTab === 'runs'\">\n <!-- Loading State -->\n <div class=\"loading-state\" *ngIf=\"loadingRuns\">\n <div class=\"skeleton-list\">\n <div class=\"skeleton-card\" *ngFor=\"let i of [1,2,3]\">\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Runs List -->\n <div class=\"runs-list\" *ngIf=\"!loadingRuns && suiteRuns.length > 0\">\n <div class=\"run-item\" *ngFor=\"let run of suiteRuns\" (click)=\"openSuiteRun(run.ID)\">\n <div class=\"run-icon\" [style.background-color]=\"getRunStatusColor(run.Status)\">\n <i class=\"fas\"\n [class.fa-check]=\"run.Status === 'Completed'\"\n [class.fa-times]=\"run.Status === 'Failed'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-ban]=\"run.Status === 'Cancelled'\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header\">\n <span class=\"run-id\">Run #{{ run.ID.substring(0, 8) }}</span>\n <span class=\"run-status\" [style.color]=\"getRunStatusColor(run.Status)\">{{ run.Status }}</span>\n </div>\n <div class=\"run-meta\">\n <span><i class=\"fas fa-calendar\"></i> {{ getRelativeTime(run.StartedAt) }}</span>\n <span *ngIf=\"run.TotalTests\">\n <i class=\"fas fa-check-circle\"></i> {{ run.PassedTests }}/{{ run.TotalTests }}\n ({{ getPassRate(run).toFixed(0) }}%)\n </span>\n </div>\n <!-- Evaluation metrics row -->\n <div class=\"run-eval-metrics\">\n <!-- Status badge -->\n <span class=\"eval-metric status\" *ngIf=\"evalPreferences.showExecution\" [class]=\"'status-' + run.Status.toLowerCase()\">\n <i class=\"fas\"\n [class.fa-circle-check]=\"run.Status === 'Completed'\"\n [class.fa-circle-xmark]=\"run.Status === 'Failed'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-ban]=\"run.Status === 'Cancelled'\"></i>\n </span>\n <!-- Human score (placeholder - need avg from suite run) -->\n <span class=\"eval-metric human\" *ngIf=\"evalPreferences.showHuman\" title=\"Human evaluation\">\n <i class=\"fas fa-user\"></i>\n <span class=\"eval-pending\"><i class=\"fas fa-clock\"></i></span>\n </span>\n <!-- Auto score (pass rate as proxy) -->\n <span class=\"eval-metric auto\" *ngIf=\"evalPreferences.showAuto && run.TotalTests\"\n [class.high]=\"getPassRate(run) >= 80\"\n [class.medium]=\"getPassRate(run) >= 50 && getPassRate(run) < 80\"\n [class.low]=\"getPassRate(run) < 50\"\n title=\"Auto score (pass rate)\">\n <i class=\"fas fa-robot\"></i>\n <span>{{ getPassRate(run).toFixed(0) }}%</span>\n </span>\n </div>\n <!-- Tags display -->\n <div class=\"run-tags\" *ngIf=\"getRunTags(run).length > 0\">\n <span class=\"tag-chip\" *ngFor=\"let tag of getRunTags(run)\">{{ tag }}</span>\n </div>\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"runsLoaded && !loadingRuns && suiteRuns.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-play-circle\"></i>\n </div>\n <h4>No Suite Runs Yet</h4>\n <p>Run this suite to see execution history and results here.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n </div>\n\n <!-- Analytics Tab -->\n <div class=\"analytics-tab\" *ngIf=\"activeTab === 'analytics'\">\n <!-- Loading State -->\n <div class=\"loading-state\" *ngIf=\"loadingAnalytics\">\n <mj-loading text=\"Loading analytics data...\"></mj-loading>\n </div>\n\n <ng-container *ngIf=\"!loadingAnalytics && analyticsLoaded\">\n <!-- View Toggle Sub-nav -->\n <div class=\"analytics-subnav\">\n <div class=\"subnav-tabs\">\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'summary'\"\n (click)=\"setAnalyticsView('summary')\">\n <i class=\"fas fa-chart-bar\"></i>\n <span>Summary</span>\n </button>\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'matrix'\"\n (click)=\"setAnalyticsView('matrix')\">\n <i class=\"fas fa-th\"></i>\n <span>Matrix</span>\n </button>\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'chart'\"\n (click)=\"setAnalyticsView('chart')\">\n <i class=\"fas fa-project-diagram\"></i>\n <span>Chart</span>\n </button>\n </div>\n </div>\n\n <!-- Collapsible Filters (shared by both views) -->\n <div class=\"analytics-filters\" [class.collapsed]=\"filtersCollapsed\">\n <div class=\"filters-header\" (click)=\"toggleFilters()\">\n <span class=\"filters-title\">\n <i class=\"fas fa-filter\"></i>\n Filters\n <span class=\"filter-summary\" *ngIf=\"filtersCollapsed\">\n {{ analyticsTimeRange === 'all' ? 'All Time' : analyticsTimeRange }}\n <span *ngIf=\"selectedTags.length > 0\"> \u00B7 {{ selectedTags.length }} tags</span>\n </span>\n </span>\n <i class=\"fas\" [ngClass]=\"filtersCollapsed ? 'fa-chevron-down' : 'fa-chevron-up'\"></i>\n </div>\n <div class=\"filters-content\" *ngIf=\"!filtersCollapsed\">\n <div class=\"filter-group\">\n <label>Time Range</label>\n <div class=\"filter-buttons\">\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '7d'\" (click)=\"setTimeRange('7d')\">7 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '30d'\" (click)=\"setTimeRange('30d')\">30 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '90d'\" (click)=\"setTimeRange('90d')\">90 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === 'all'\" (click)=\"setTimeRange('all')\">All Time</button>\n </div>\n </div>\n <div class=\"filter-group\" *ngIf=\"uniqueTags.length > 0\">\n <label>Filter by Tag <span class=\"filter-hint\" *ngIf=\"selectedTags.length > 0\">({{ selectedTags.length }} selected)</span></label>\n <div class=\"filter-buttons tag-filters\">\n <button class=\"filter-btn tag-btn all-tags-btn\"\n [class.active]=\"selectedTags.length === 0\"\n (click)=\"toggleTagFilter(null)\">\n <i class=\"fas fa-layer-group\"></i> All Tags\n </button>\n <button class=\"filter-btn tag-btn\"\n *ngFor=\"let tag of uniqueTags\"\n [class.active]=\"isTagSelected(tag)\"\n (click)=\"toggleTagFilter(tag)\">\n <i class=\"fas fa-check\" *ngIf=\"isTagSelected(tag)\"></i>\n {{ tag }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Summary View -->\n <ng-container *ngIf=\"analyticsView === 'summary'\">\n <!-- KPI Cards -->\n <div class=\"analytics-kpis\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\"><i class=\"fas fa-play-circle\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ getTotalRuns() }}</div>\n <div class=\"kpi-label\">Total Runs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon success\"><i class=\"fas fa-check-circle\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ getAveragePassRate().toFixed(1) }}%</div>\n <div class=\"kpi-label\">Avg Pass Rate</div>\n <div class=\"kpi-trend\" [ngClass]=\"{'trend-up': getPassRateTrend().direction === 'up', 'trend-down': getPassRateTrend().direction === 'down'}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-up': getPassRateTrend().direction === 'up', 'fa-arrow-down': getPassRateTrend().direction === 'down', 'fa-minus': getPassRateTrend().direction === 'stable'}\"></i>\n {{ getPassRateTrend().value.toFixed(1) }}%\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon info\"><i class=\"fas fa-clock\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ formatDuration(getAverageDuration()) }}</div>\n <div class=\"kpi-label\">Avg Duration</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon warning\"><i class=\"fas fa-dollar-sign\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ formatCost(getTotalCost()) }}</div>\n <div class=\"kpi-label\">Total Cost</div>\n </div>\n </div>\n </div>\n\n <!-- Runs Table -->\n <div class=\"analytics-table-section\">\n <h3><i class=\"fas fa-table\"></i> Run History</h3>\n <div class=\"analytics-table-wrapper\">\n <table class=\"analytics-table\">\n <thead>\n <tr>\n <th>Date</th>\n <th>Status</th>\n <th>Pass Rate</th>\n <th>Tests</th>\n <th>Duration</th>\n <th>Cost</th>\n <th>Tags</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let dp of getFilteredAnalyticsData()\" (click)=\"openSuiteRun(dp.runId)\" class=\"clickable-row\">\n <td>{{ dp.date | date:'short' }}</td>\n <td>\n <span class=\"status-chip\" [ngClass]=\"'status-' + dp.status.toLowerCase()\">{{ dp.status }}</span>\n </td>\n <td>\n <div class=\"pass-rate-cell\">\n <div class=\"pass-rate-bar\" [style.width.%]=\"dp.passRate\" [ngClass]=\"{'high': dp.passRate >= 80, 'medium': dp.passRate >= 50 && dp.passRate < 80, 'low': dp.passRate < 50}\"></div>\n <span>{{ dp.passRate.toFixed(0) }}%</span>\n </div>\n </td>\n <td>{{ dp.passedTests }}/{{ dp.totalTests }}</td>\n <td>{{ formatDuration(dp.duration) }}</td>\n <td>{{ formatCost(dp.cost) }}</td>\n <td>\n <div class=\"tag-cell\">\n <span class=\"tag-chip-table\" *ngFor=\"let tag of dp.tags.slice(0, 2)\">{{ tag }}</span>\n <span class=\"tag-more\" *ngIf=\"dp.tags.length > 2\">+{{ dp.tags.length - 2 }}</span>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n <div class=\"empty-state small\" *ngIf=\"getFilteredAnalyticsData().length === 0\">\n <p>No runs match the current filters.</p>\n </div>\n </div>\n </ng-container>\n\n <!-- Matrix View -->\n <ng-container *ngIf=\"analyticsView === 'matrix'\">\n <!-- Loading Matrix -->\n <div class=\"loading-state\" *ngIf=\"loadingMatrix\">\n <mj-loading text=\"Loading test matrix...\"></mj-loading>\n </div>\n\n <!-- Matrix Content -->\n <div class=\"matrix-section\" *ngIf=\"!loadingMatrix && matrixLoaded && matrixData.length > 0\">\n <div class=\"matrix-header\">\n <h3><i class=\"fas fa-th\"></i> Test Results Matrix</h3>\n <div class=\"matrix-header-right\">\n <div class=\"matrix-filter-input\">\n <i class=\"fas fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter tests...\"\n [value]=\"matrixTestFilter\"\n (input)=\"onMatrixFilterInput($event)\"\n class=\"filter-input\">\n <button class=\"clear-filter-btn\" *ngIf=\"matrixTestFilter\" (click)=\"clearMatrixFilter()\" title=\"Clear filter\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <span class=\"matrix-run-count\">{{ matrixData.length }} runs \u00B7 {{ getUniqueTestsFromMatrix().length }} tests</span>\n <button kendoButton (click)=\"exportMatrixToCSV()\" [disabled]=\"matrixData.length === 0\" title=\"Export matrix to CSV\">\n <i class=\"fas fa-download\"></i> Export\n </button>\n </div>\n </div>\n\n <div class=\"matrix-scroll-container\">\n <table class=\"test-matrix\">\n <thead>\n <tr>\n <th class=\"seq-header\" (click)=\"toggleMatrixSort('sequence')\" title=\"Sort by sequence\">\n #\n <i class=\"fas\" [ngClass]=\"matrixSortBy === 'sequence' ? (matrixSortAsc ? 'fa-sort-up' : 'fa-sort-down') : 'fa-sort'\"></i>\n </th>\n <th class=\"test-name-header\" (click)=\"toggleMatrixSort('name')\" title=\"Sort by name\">\n Test\n <i class=\"fas\" [ngClass]=\"matrixSortBy === 'name' ? (matrixSortAsc ? 'fa-sort-up' : 'fa-sort-down') : 'fa-sort'\"></i>\n </th>\n <th class=\"run-header\" *ngFor=\"let run of matrixData\" (click)=\"openSuiteRun(run.runId)\" [title]=\"'Click to view suite run - ' + (run.date | date:'medium')\">\n <div class=\"run-header-content\">\n <div class=\"run-tags-header\" *ngIf=\"run.tags.length > 0\">\n <span class=\"tag-chip-header\" *ngFor=\"let tag of run.tags.slice(0, 2)\">{{ tag }}</span>\n <span class=\"tag-more-header\" *ngIf=\"run.tags.length > 2\">+{{ run.tags.length - 2 }}</span>\n </div>\n <div class=\"run-date\">{{ getRelativeTime(run.date) }}</div>\n <div class=\"run-pass-rate\" [ngClass]=\"{'high': run.passRate >= 80, 'medium': run.passRate >= 50 && run.passRate < 80, 'low': run.passRate < 50}\">\n {{ run.passRate.toFixed(0) }}%\n </div>\n </div>\n </th>\n <th class=\"spacer-header\"></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let test of getUniqueTestsFromMatrix()\"\n [class.row-selected]=\"selectedMatrixTestId === test.testId\"\n (click)=\"selectMatrixRow(test.testId)\">\n <td class=\"seq-cell\">{{ test.sequence }}</td>\n <td class=\"test-name-cell\">\n <span class=\"test-name\" [title]=\"test.testName\">{{ test.testName }}</span>\n </td>\n <td class=\"result-cell\"\n *ngFor=\"let run of matrixData\"\n [ngClass]=\"getMatrixCellClass(getTestResultForRun(run.runId, test.testId))\"\n [class.clickable]=\"getTestResultForRun(run.runId, test.testId)\"\n [class.cell-not-run]=\"!getTestResultForRun(run.runId, test.testId)\"\n [title]=\"getTestResultForRun(run.runId, test.testId)?.status + ' - Click to view test run' || 'Not Run'\"\n (click)=\"onMatrixCellClick(getTestResultForRun(run.runId, test.testId), $event)\">\n <ng-container *ngIf=\"getTestResultForRun(run.runId, test.testId) as result\">\n <div class=\"cell-eval-stack\">\n <!-- Status indicator -->\n <span class=\"cell-status\" *ngIf=\"evalPreferences.showExecution\"\n [ngClass]=\"'status-' + result.status.toLowerCase()\"\n [class.cell-skipped-status]=\"result.status === 'Skipped' || result.status === 'Pending'\"\n [title]=\"getStatusTooltip(result.status)\">\n <i class=\"fas\"\n [class.fa-check]=\"result.status === 'Passed'\"\n [class.fa-times]=\"result.status === 'Failed'\"\n [class.fa-exclamation]=\"result.status === 'Error'\"\n [class.fa-hourglass-end]=\"result.status === 'Timeout'\"\n [class.fa-forward]=\"result.status === 'Skipped'\"\n [class.fa-spinner]=\"result.status === 'Running'\"\n [class.fa-clock]=\"result.status === 'Pending'\"></i>\n </span>\n <!-- Human score - slashed icon if no feedback, colored by rating if has feedback -->\n <span class=\"cell-human no-feedback\" *ngIf=\"evalPreferences.showHuman && !result.humanRating\"\n title=\"Human Review: No rating submitted yet\">\n <i class=\"fas fa-user-slash\"></i>\n </span>\n <span class=\"cell-human has-feedback\" *ngIf=\"evalPreferences.showHuman && result.humanRating\"\n [class.rating-low]=\"result.humanRating <= 4\"\n [class.rating-medium]=\"result.humanRating >= 5 && result.humanRating <= 6\"\n [class.rating-good]=\"result.humanRating >= 7 && result.humanRating <= 8\"\n [class.rating-excellent]=\"result.humanRating >= 9\"\n [title]=\"getHumanTooltip(result.humanRating, result.humanComments)\">\n <i class=\"fas fa-user\"></i>\n <span class=\"rating-value\">{{ result.humanRating }}</span>\n </span>\n <!-- Auto score - colored by percentage -->\n <span class=\"cell-auto has-score\" *ngIf=\"evalPreferences.showAuto && result.score != null\"\n [class.score-low]=\"result.score < 0.5\"\n [class.score-medium]=\"result.score >= 0.5 && result.score < 0.7\"\n [class.score-good]=\"result.score >= 0.7 && result.score < 0.85\"\n [class.score-excellent]=\"result.score >= 0.85\"\n [title]=\"'Auto Score: ' + (result.score * 100).toFixed(0) + '% automated evaluation'\">\n <i class=\"fas fa-robot\"></i>\n <span class=\"score-value\">{{ (result.score * 100).toFixed(0) }}</span>\n </span>\n <span class=\"cell-auto no-score\" *ngIf=\"evalPreferences.showAuto && result.score == null\"\n title=\"Auto Score: No automated score available\">\n <i class=\"fas fa-robot\"></i>\n </span>\n </div>\n </ng-container>\n <span class=\"cell-not-run-indicator\" *ngIf=\"!getTestResultForRun(run.runId, test.testId)\">\n <i class=\"fas fa-minus\"></i>\n </span>\n </td>\n <td class=\"spacer-cell\"></td>\n </tr>\n </tbody>\n <!-- Footer row with totals -->\n <tfoot>\n <tr class=\"totals-row\">\n <td class=\"seq-cell totals-label\"></td>\n <td class=\"test-name-cell totals-label\">\n <strong>Totals</strong>\n </td>\n <td class=\"result-cell totals-cell\" *ngFor=\"let run of matrixData\">\n <div class=\"cell-eval-stack totals-stack\">\n <!-- Status totals -->\n <span class=\"totals-status\" *ngIf=\"evalPreferences.showExecution\">\n <span class=\"pass-count\">{{ getRunPassedCount(run) }}/{{ getRunTotalCount(run) }}</span>\n </span>\n <!-- Human totals -->\n <span class=\"totals-human\" *ngIf=\"evalPreferences.showHuman\">\n <span class=\"avg-label\" *ngIf=\"getRunHumanAvg(run) != null\">{{ getRunHumanAvg(run)?.toFixed(1) }}</span>\n <span class=\"count-label\">({{ getRunHumanCount(run) }})</span>\n </span>\n <!-- Auto totals -->\n <span class=\"totals-auto\" *ngIf=\"evalPreferences.showAuto\">\n <span class=\"avg-label\" *ngIf=\"getRunAutoAvg(run) != null\">{{ (getRunAutoAvg(run)! * 100).toFixed(0) }}%</span>\n <span class=\"count-label\">({{ getRunAutoCount(run) }})</span>\n </span>\n </div>\n </td>\n <td class=\"spacer-cell\"></td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n\n <!-- Empty Matrix State -->\n <div class=\"empty-state\" *ngIf=\"!loadingMatrix && matrixLoaded && matrixData.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-th\"></i>\n </div>\n <h4>No Matrix Data</h4>\n <p>No suite runs match the current filters.</p>\n </div>\n </ng-container>\n\n <!-- Chart View -->\n <ng-container *ngIf=\"analyticsView === 'chart'\">\n <!-- Loading Chart -->\n <div class=\"loading-state\" *ngIf=\"loadingMatrix\">\n <mj-loading text=\"Loading chart data...\"></mj-loading>\n </div>\n\n <!-- Chart Content -->\n <div class=\"chart-section\" *ngIf=\"!loadingMatrix && matrixLoaded && matrixData.length > 0\">\n <div class=\"chart-header\">\n <h3><i class=\"fas fa-project-diagram\"></i> Test Results Flow</h3>\n <div class=\"chart-legend\">\n <span class=\"legend-item chart-passed\"><i class=\"fas fa-check\"></i> Passed</span>\n <span class=\"legend-item chart-failed\"><i class=\"fas fa-times\"></i> Failed</span>\n <span class=\"legend-item chart-error\"><i class=\"fas fa-exclamation\"></i> Error</span>\n <span class=\"legend-item chart-skipped\"><i class=\"fas fa-forward\"></i> Skipped</span>\n </div>\n </div>\n\n <div class=\"chart-container\">\n <div #chartContainer class=\"d3-chart\"></div>\n </div>\n\n <div class=\"chart-info\">\n <i class=\"fas fa-info-circle\"></i>\n Interactive visualization showing test results across {{ matrixData.length }} runs.\n Hover over elements for details, click nodes to navigate.\n </div>\n </div>\n\n <!-- Empty Chart State -->\n <div class=\"empty-state\" *ngIf=\"!loadingMatrix && matrixLoaded && matrixData.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-project-diagram\"></i>\n </div>\n <h4>No Chart Data</h4>\n <p>No suite runs match the current filters.</p>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"!loadingAnalytics && analyticsLoaded && analyticsData.length === 0\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-chart-line\"></i>\n </div>\n <h4>No Analytics Data</h4>\n <p>Run this suite to start collecting analytics data.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n </div>\n\n <!-- Compare Tab -->\n <div class=\"compare-tab\" *ngIf=\"activeTab === 'compare'\">\n <!-- Run Selection -->\n <div class=\"compare-selection\">\n <div class=\"compare-run-selector\">\n <h4>Run A (Baseline)</h4>\n <div class=\"run-selector-list\" *ngIf=\"!loadingRuns && suiteRuns.length > 0\">\n <div class=\"run-selector-item\"\n *ngFor=\"let run of suiteRuns\"\n [class.selected]=\"compareRunA?.ID === run.ID\"\n (click)=\"selectCompareRunA(run)\">\n <div class=\"selector-status\" [style.background-color]=\"getRunStatusColor(run.Status)\"></div>\n <div class=\"selector-content\">\n <div class=\"selector-date\">{{ run.StartedAt | date:'short' }}</div>\n <div class=\"selector-rate\">{{ getPassRate(run).toFixed(0) }}% pass</div>\n </div>\n <div class=\"selector-tags\" *ngIf=\"getRunTags(run).length > 0\">\n <span class=\"tag-mini\" *ngFor=\"let tag of getRunTags(run).slice(0, 2)\">{{ tag }}</span>\n </div>\n </div>\n </div>\n <div class=\"selected-run-preview\" *ngIf=\"compareRunA\">\n <div class=\"preview-header\">\n <span class=\"preview-label\">Selected:</span>\n <button class=\"clear-btn\" (click)=\"compareRunA = null; compareResults = []\">Clear</button>\n </div>\n <div class=\"preview-details\">\n <span>{{ compareRunA.StartedAt | date:'medium' }}</span>\n <span class=\"preview-rate\">{{ getPassRate(compareRunA).toFixed(1) }}%</span>\n </div>\n </div>\n </div>\n\n <div class=\"compare-vs\"><i class=\"fas fa-exchange-alt\"></i></div>\n\n <div class=\"compare-run-selector\">\n <h4>Run B (Compare)</h4>\n <div class=\"run-selector-list\" *ngIf=\"!loadingRuns && suiteRuns.length > 0\">\n <div class=\"run-selector-item\"\n *ngFor=\"let run of suiteRuns\"\n [class.selected]=\"compareRunB?.ID === run.ID\"\n [class.disabled]=\"compareRunA?.ID === run.ID\"\n (click)=\"compareRunA?.ID !== run.ID && selectCompareRunB(run)\">\n <div class=\"selector-status\" [style.background-color]=\"getRunStatusColor(run.Status)\"></div>\n <div class=\"selector-content\">\n <div class=\"selector-date\">{{ run.StartedAt | date:'short' }}</div>\n <div class=\"selector-rate\">{{ getPassRate(run).toFixed(0) }}% pass</div>\n </div>\n <div class=\"selector-tags\" *ngIf=\"getRunTags(run).length > 0\">\n <span class=\"tag-mini\" *ngFor=\"let tag of getRunTags(run).slice(0, 2)\">{{ tag }}</span>\n </div>\n </div>\n </div>\n <div class=\"selected-run-preview\" *ngIf=\"compareRunB\">\n <div class=\"preview-header\">\n <span class=\"preview-label\">Selected:</span>\n <button class=\"clear-btn\" (click)=\"compareRunB = null; compareResults = []\">Clear</button>\n </div>\n <div class=\"preview-details\">\n <span>{{ compareRunB.StartedAt | date:'medium' }}</span>\n <span class=\"preview-rate\">{{ getPassRate(compareRunB).toFixed(1) }}%</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Comparison Results -->\n <div class=\"compare-results\" *ngIf=\"compareRunA && compareRunB && !loadingCompare\">\n <!-- Summary Cards -->\n <div class=\"compare-summary\">\n <div class=\"compare-summary-card\">\n <div class=\"summary-label\">Pass Rate Change</div>\n <div class=\"summary-value\" [ngClass]=\"{'positive': getComparePassRateDiff()! > 0, 'negative': getComparePassRateDiff()! < 0}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-up': getComparePassRateDiff()! > 0, 'fa-arrow-down': getComparePassRateDiff()! < 0, 'fa-minus': getComparePassRateDiff() === 0}\"></i>\n {{ getComparePassRateDiff()! > 0 ? '+' : '' }}{{ getComparePassRateDiff()?.toFixed(1) }}%\n </div>\n </div>\n <div class=\"compare-summary-card\">\n <div class=\"summary-label\">Duration Change</div>\n <div class=\"summary-value\" [ngClass]=\"{'positive': getCompareDurationDiff()! < 0, 'negative': getCompareDurationDiff()! > 0}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-down': getCompareDurationDiff()! < 0, 'fa-arrow-up': getCompareDurationDiff()! > 0, 'fa-minus': getCompareDurationDiff() === 0}\"></i>\n {{ formatDuration(getAbsCompareDurationDiff()) }}\n </div>\n </div>\n <div class=\"compare-summary-card improved\">\n <div class=\"summary-label\">Improved</div>\n <div class=\"summary-value\">{{ getCompareImprovedCount() }}</div>\n </div>\n <div class=\"compare-summary-card regressed\">\n <div class=\"summary-label\">Regressed</div>\n <div class=\"summary-value\">{{ getCompareRegressedCount() }}</div>\n </div>\n </div>\n\n <!-- Detailed Comparison Table -->\n <div class=\"compare-table-section\">\n <h3><i class=\"fas fa-list\"></i> Test-by-Test Comparison</h3>\n <div class=\"compare-table-wrapper\">\n <table class=\"compare-table\">\n <thead>\n <tr>\n <th>Test</th>\n <th>Run A Status</th>\n <th>Run B Status</th>\n <th>Score Diff</th>\n <th>Duration Diff</th>\n <th>Change</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let result of compareResults\" [ngClass]=\"{'improved': result.runA && result.runB && result.runA.status !== 'Passed' && result.runB.status === 'Passed', 'regressed': result.runA && result.runB && result.runA.status === 'Passed' && result.runB.status !== 'Passed'}\">\n <td class=\"test-name-cell\">{{ result.testName }}</td>\n <td>\n <span class=\"status-chip\" *ngIf=\"result.runA\" [ngClass]=\"'status-' + result.runA.status.toLowerCase()\">{{ result.runA.status }}</span>\n <span class=\"status-chip status-missing\" *ngIf=\"!result.runA\">N/A</span>\n </td>\n <td>\n <span class=\"status-chip\" *ngIf=\"result.runB\" [ngClass]=\"'status-' + result.runB.status.toLowerCase()\">{{ result.runB.status }}</span>\n <span class=\"status-chip status-missing\" *ngIf=\"!result.runB\">N/A</span>\n </td>\n <td>\n <span *ngIf=\"result.scoreDiff != null\" [ngClass]=\"{'positive': result.scoreDiff > 0, 'negative': result.scoreDiff < 0}\">\n {{ result.scoreDiff > 0 ? '+' : '' }}{{ (result.scoreDiff * 100).toFixed(1) }}%\n </span>\n <span *ngIf=\"result.scoreDiff == null\" class=\"muted\">-</span>\n </td>\n <td>\n <span *ngIf=\"result.durationDiff != null\" [ngClass]=\"{'positive': result.durationDiff < 0, 'negative': result.durationDiff > 0}\">\n {{ result.durationDiff > 0 ? '+' : '' }}{{ result.durationDiff.toFixed(1) }}s\n </span>\n <span *ngIf=\"result.durationDiff == null\" class=\"muted\">-</span>\n </td>\n <td>\n <span class=\"change-indicator improved\" *ngIf=\"result.runA && result.runB && result.runA.status !== 'Passed' && result.runB.status === 'Passed'\">\n <i class=\"fas fa-arrow-up\"></i> Fixed\n </span>\n <span class=\"change-indicator regressed\" *ngIf=\"result.runA && result.runB && result.runA.status === 'Passed' && result.runB.status !== 'Passed'\">\n <i class=\"fas fa-arrow-down\"></i> Broke\n </span>\n <span class=\"change-indicator unchanged\" *ngIf=\"!result.statusChanged\">\n <i class=\"fas fa-minus\"></i>\n </span>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n\n <!-- Loading State for Compare -->\n <div class=\"loading-state\" *ngIf=\"loadingCompare\">\n <mj-loading text=\"Loading comparison data...\"></mj-loading>\n </div>\n\n <!-- Empty State -->\n <div class=\"compare-empty\" *ngIf=\"!compareRunA || !compareRunB\">\n <div class=\"compare-empty-icon\">\n <i class=\"fas fa-balance-scale\"></i>\n </div>\n <h4>Select Two Runs to Compare</h4>\n <p>Choose a baseline run (A) and a comparison run (B) from the lists above to see a detailed side-by-side comparison.</p>\n </div>\n\n <!-- No Runs State -->\n <div class=\"empty-state\" *ngIf=\"runsLoaded && suiteRuns.length < 2\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-balance-scale\"></i>\n </div>\n <h4>Not Enough Runs to Compare</h4>\n <p>You need at least 2 suite runs to use the comparison feature.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n </div>\n </div>\n\n <!-- Keyboard Shortcuts Toggle Button -->\n <button class=\"shortcuts-toggle\" (click)=\"toggleShortcuts()\" [title]=\"showShortcuts ? 'Hide keyboard shortcuts' : 'Show keyboard shortcuts'\">\n <i class=\"fas fa-keyboard\"></i>\n </button>\n\n <!-- Keyboard Shortcuts Hint (Desktop Only) -->\n <div class=\"keyboard-shortcuts\" *ngIf=\"showShortcuts\">\n <div class=\"shortcuts-header\">\n <i class=\"fas fa-keyboard\"></i>\n Shortcuts\n <button class=\"shortcuts-close\" (click)=\"toggleShortcuts()\" title=\"Hide shortcuts\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcut-list\">\n <div class=\"shortcut-item\">\n <span>Refresh</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Run Suite</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>Enter</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Switch Tabs</span>\n <span class=\"shortcut-keys\"><kbd>1</kbd>-<kbd>5</kbd></span>\n </div>\n </div>\n </div>\n</div>\n", styles: ["/* ===========================\n Test Suite Form - World-Class UX\n =========================== */\n\n/* CSS Custom Properties for Theming - using :host for Angular encapsulation */\n:host {\n --test-primary: #2563eb;\n --test-primary-light: #3b82f6;\n --test-success: #10b981;\n --test-error: #ef4444;\n --test-warning: #f59e0b;\n --test-disabled: #6b7280;\n --test-bg: #f8fafc;\n --test-surface: #ffffff;\n --test-border: #e2e8f0;\n --test-text: #1e293b;\n --test-text-secondary: #64748b;\n --test-text-muted: #94a3b8;\n --test-radius-sm: 6px;\n --test-radius-md: 10px;\n --test-radius-lg: 16px;\n --test-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --test-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --test-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n --test-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: block;\n height: 100%;\n}\n\n.test-suite-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--test-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n/* Breadcrumb */\n.breadcrumb {\n margin-bottom: 16px;\n}\n\n.breadcrumb ol {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb li {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb a {\n color: var(--test-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb a:hover {\n background: rgba(37, 99, 235, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb .separator {\n font-size: 10px;\n color: var(--test-text-muted);\n margin: 0 4px;\n}\n\n.breadcrumb .current {\n color: var(--test-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Header */\n.suite-header {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n padding: 20px;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n gap: 16px;\n}\n\n.header-left {\n display: flex;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.suite-icon {\n width: 56px;\n height: 56px;\n border-radius: var(--test-radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-md);\n transition: var(--test-transition);\n}\n\n.suite-icon:hover { transform: scale(1.05); }\n\n.suite-info { flex: 1; min-width: 0; }\n\n.suite-info h1 {\n margin: 0 0 8px 0;\n font-size: clamp(18px, 4vw, 24px);\n font-weight: 700;\n color: var(--test-text);\n word-wrap: break-word;\n}\n\n.suite-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-active { background: linear-gradient(135deg, var(--test-success) 0%, #059669 100%); }\n.status-badge.status-disabled { background: linear-gradient(135deg, var(--test-disabled) 0%, #4b5563 100%); }\n.status-badge.status-pending { background: linear-gradient(135deg, var(--test-warning) 0%, #d97706 100%); }\n\n.status-badge-inline {\n display: inline-flex;\n padding: 2px 10px;\n border-radius: 10px;\n color: white;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-badge-inline.status-active { background: var(--test-success); }\n.status-badge-inline.status-disabled { background: var(--test-disabled); }\n.status-badge-inline.status-pending { background: var(--test-warning); }\n\n.test-count {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: var(--test-text-secondary);\n padding: 4px 10px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.suite-description {\n padding: 16px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.suite-description p {\n margin: 0;\n color: var(--test-text-secondary);\n line-height: 1.6;\n font-size: 14px;\n}\n\n/* Tabs */\n.tabs-container {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.tabs::-webkit-scrollbar { display: none; }\n\n.tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 18px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--test-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n white-space: nowrap;\n}\n\n.tab:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.tab.active {\n color: var(--test-primary);\n border-bottom-color: var(--test-primary);\n font-weight: 600;\n}\n\n.tab-badge {\n background: var(--test-border);\n color: var(--test-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active .tab-badge {\n background: rgba(37, 99, 235, 0.15);\n color: var(--test-primary);\n}\n\n.tab-shortcut {\n font-size: 10px;\n color: var(--test-text-muted);\n background: var(--test-bg);\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n/* Tab Content */\n.tab-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Overview Tab */\n.overview-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.info-section, .config-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.info-section h3, .config-section h3 {\n margin: 0 0 20px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.info-section h3 i, .config-section h3 i {\n color: var(--test-primary);\n}\n\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--test-text);\n font-weight: 500;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.config-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.config-item label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.config-input {\n padding: 10px 14px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.config-input:focus {\n outline: none;\n border-color: var(--test-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.config-hint {\n font-size: 11px;\n color: var(--test-text-muted);\n}\n\n/* Tests Tab */\n.tests-tab, .runs-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n.loading-state { padding: 0; }\n\n.skeleton-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.skeleton-sequence {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-icon {\n width: 40px;\n height: 40px;\n border-radius: var(--test-radius-md);\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line {\n height: 14px;\n border-radius: 4px;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-line.wide { width: 70%; }\n.skeleton-line.narrow { width: 40%; }\n\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.tests-list, .runs-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-item, .run-item {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.test-item:hover, .run-item:hover {\n background: rgba(37, 99, 235, 0.05);\n border-color: var(--test-primary-light);\n transform: translateX(4px);\n}\n\n.test-sequence {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n font-size: 14px;\n font-weight: 700;\n color: var(--test-text-secondary);\n flex-shrink: 0;\n}\n\n.test-icon, .run-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--test-radius-md);\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-sm);\n}\n\n.test-icon {\n background: linear-gradient(135deg, var(--test-primary) 0%, #1d4ed8 100%);\n}\n\n.test-content, .run-content { flex: 1; min-width: 0; }\n\n.test-name, .run-header {\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n margin-bottom: 4px;\n}\n\n.run-header {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id { font-weight: 600; }\n\n.run-status {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n}\n\n.test-status, .run-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--test-text-secondary);\n}\n\n.test-status span, .run-meta span {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.test-item > i, .run-item > i {\n color: var(--test-text-muted);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.test-item:hover > i, .run-item:hover > i {\n color: var(--test-primary);\n transform: translateX(2px);\n}\n\n/* Empty States */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--test-text-muted);\n}\n\n.empty-state h4 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.empty-state p {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 300px;\n}\n\n/* Keyboard Shortcuts */\n/* Keyboard shortcuts toggle button - visible when shortcuts are hidden */\n.shortcuts-toggle {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n box-shadow: var(--test-shadow-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--test-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--test-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--test-primary);\n border-color: var(--test-primary);\n}\n\n.keyboard-shortcuts {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n padding: 12px 16px;\n box-shadow: var(--test-shadow-lg);\n font-size: 12px;\n z-index: 100;\n max-width: 260px;\n}\n\n.shortcuts-header {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text);\n}\n\n.shortcuts-close {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--test-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--test-transition);\n}\n\n.shortcuts-close:hover {\n color: var(--test-text);\n background: var(--test-border);\n}\n\n.shortcut-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: var(--test-text-secondary);\n}\n\n.shortcut-keys {\n display: flex;\n gap: 4px;\n}\n\n.shortcut-keys kbd {\n background: var(--test-bg);\n border: 1px solid var(--test-border);\n border-radius: 4px;\n padding: 2px 6px;\n font-size: 11px;\n color: var(--test-text);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .keyboard-shortcuts, .shortcuts-toggle { display: none; }\n}\n\n@media (max-width: 768px) {\n .suite-header { padding: 16px; }\n\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions button { flex: 1; }\n\n .tab-shortcut { display: none; }\n\n .info-grid { grid-template-columns: 1fr; }\n\n .test-item, .run-item { padding: 14px; }\n}\n\n@media (max-width: 480px) {\n .suite-icon {\n width: 40px;\n height: 40px;\n font-size: 18px;\n }\n\n .suite-info h1 { font-size: 16px; }\n\n .tab-badge { display: none; }\n\n .test-sequence { display: none; }\n}\n\n@media (hover: none) and (pointer: coarse) {\n .test-item:active, .run-item:active {\n background: rgba(37, 99, 235, 0.1);\n transform: scale(0.98);\n }\n\n .tab { min-height: 48px; }\n .test-item, .run-item { min-height: 64px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n@media print {\n .header-actions, .tabs-container, .keyboard-shortcuts {\n display: none !important;\n }\n}\n\n/* ===========================\n Tags UI\n =========================== */\n.run-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.tag-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.tag-mini {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 500;\n color: #64748b;\n}\n\n.tag-more {\n font-size: 10px;\n color: #94a3b8;\n font-weight: 500;\n}\n\n/* Evaluation metrics row for Runs list */\n.run-eval-metrics {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n\n.eval-metric {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.eval-metric.status {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.eval-metric.status.status-completed {\n background: #dcfce7;\n color: #166534;\n}\n\n.eval-metric.status.status-failed {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.eval-metric.status.status-running {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.eval-metric.status.status-pending {\n background: #fef3c7;\n color: #92400e;\n}\n\n.eval-metric.human {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #f59e0b;\n color: #92400e;\n}\n\n.eval-metric.human .eval-pending {\n font-size: 9px;\n color: #d97706;\n}\n\n.eval-metric.auto {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n}\n\n.eval-metric.auto.high {\n background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);\n border: 1px solid #86efac;\n color: #166534;\n}\n\n.eval-metric.auto.medium {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #fcd34d;\n color: #92400e;\n}\n\n.eval-metric.auto.low {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n border: 1px solid #fca5a5;\n color: #991b1b;\n}\n\n.tag-cell {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.tag-chip-table {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ===========================\n Analytics Tab\n =========================== */\n.analytics-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n/* Collapsible filters */\n.analytics-filters {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-bottom: 16px;\n box-shadow: var(--test-shadow-sm);\n overflow: hidden;\n}\n\n.analytics-filters.collapsed {\n margin-bottom: 12px;\n}\n\n.filters-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.filters-header:hover {\n background: var(--test-bg);\n}\n\n.filters-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--test-text-secondary);\n}\n\n.filters-title i {\n color: var(--test-primary);\n}\n\n.filter-summary {\n font-weight: 400;\n color: var(--test-text-muted);\n margin-left: 8px;\n}\n\n.filters-header > i {\n color: var(--test-text-muted);\n font-size: 12px;\n}\n\n.filters-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 12px 16px 16px 16px;\n border-top: 1px solid var(--test-border);\n}\n\n.filter-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.filter-group label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.filter-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.filter-btn {\n padding: 8px 16px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n background: var(--test-surface);\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.filter-btn:hover {\n border-color: var(--test-primary);\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.filter-btn.active {\n background: var(--test-primary);\n border-color: var(--test-primary);\n color: white;\n}\n\n.filter-btn.tag-btn {\n padding: 6px 12px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn.tag-btn i.fa-check {\n font-size: 10px;\n}\n\n.filter-btn.tag-btn.all-tags-btn {\n font-weight: 600;\n}\n\n.filter-btn.tag-btn.all-tags-btn i {\n font-size: 11px;\n}\n\n.filter-hint {\n font-weight: 400;\n font-size: 10px;\n color: var(--test-primary);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-filters {\n max-height: 120px;\n overflow-y: auto;\n}\n\n/* KPI Cards */\n.analytics-kpis {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n transition: var(--test-transition);\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--test-shadow-md);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #eff6ff;\n border-radius: var(--test-radius-md);\n color: var(--test-primary);\n font-size: 20px;\n}\n\n.kpi-icon.success {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-icon.info {\n background: #f0f9ff;\n color: #0ea5e9;\n}\n\n.kpi-icon.warning {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--test-text-secondary);\n margin-top: 2px;\n}\n\n.kpi-trend {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 600;\n margin-top: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f1f5f9;\n color: var(--test-text-secondary);\n}\n\n.kpi-trend.trend-up {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-trend.trend-down {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n/* Analytics Table */\n.analytics-table-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.analytics-table-section h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.analytics-table-section h3 i {\n color: var(--test-primary);\n}\n\n.analytics-table-wrapper {\n overflow-x: auto;\n margin: 0 -24px;\n padding: 0 24px;\n}\n\n.analytics-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.analytics-table th {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.analytics-table td {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.analytics-table tbody tr.clickable-row {\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.analytics-table tbody tr.clickable-row:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.status-chip {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-chip.status-completed { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-passed { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-failed { background: #fef2f2; color: var(--test-error); }\n.status-chip.status-error { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-running { background: #eff6ff; color: var(--test-primary); }\n.status-chip.status-pending { background: #f5f3ff; color: #8b5cf6; }\n.status-chip.status-cancelled { background: #f1f5f9; color: var(--test-disabled); }\n.status-chip.status-missing { background: #f1f5f9; color: var(--test-text-muted); }\n.status-chip.status-timeout { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-skipped { background: #f1f5f9; color: var(--test-disabled); }\n\n.pass-rate-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 100px;\n}\n\n.pass-rate-bar {\n height: 6px;\n border-radius: 3px;\n background: var(--test-success);\n transition: width 0.3s ease;\n max-width: 60px;\n}\n\n.pass-rate-bar.medium { background: var(--test-warning); }\n.pass-rate-bar.low { background: var(--test-error); }\n\n/* Analytics Sub-navigation */\n.analytics-subnav {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 8px;\n margin-bottom: 20px;\n box-shadow: var(--test-shadow-sm);\n display: inline-flex;\n}\n\n.subnav-tabs {\n display: flex;\n gap: 4px;\n background: var(--test-bg);\n border-radius: var(--test-radius-md);\n padding: 4px;\n}\n\n.subnav-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: var(--test-radius-sm);\n background: transparent;\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.subnav-tab:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.subnav-tab.active {\n background: var(--test-surface);\n color: var(--test-primary);\n box-shadow: var(--test-shadow-sm);\n}\n\n.subnav-tab i {\n font-size: 14px;\n}\n\n/* Matrix View */\n.matrix-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 16px;\n box-shadow: var(--test-shadow-sm);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 280px);\n min-height: 300px;\n}\n\n.matrix-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--test-border);\n flex-shrink: 0;\n}\n\n.matrix-header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.matrix-header h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.matrix-header h3 i {\n color: var(--test-primary);\n}\n\n.matrix-run-count {\n font-size: 12px;\n color: var(--test-text-muted);\n font-weight: 500;\n}\n\n/* Matrix filter input */\n.matrix-filter-input {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f8fafc;\n border: 1px solid var(--test-border);\n border-radius: 6px;\n padding: 4px 10px;\n min-width: 180px;\n}\n\n.matrix-filter-input i.fa-search {\n color: #94a3b8;\n font-size: 12px;\n}\n\n.matrix-filter-input .filter-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 12px;\n color: var(--test-text);\n width: 100%;\n}\n\n.matrix-filter-input .filter-input::placeholder {\n color: #94a3b8;\n}\n\n.clear-filter-btn {\n border: none;\n background: none;\n padding: 2px 4px;\n cursor: pointer;\n color: #94a3b8;\n font-size: 10px;\n border-radius: 3px;\n transition: all 0.15s ease;\n}\n\n.clear-filter-btn:hover {\n background: #e2e8f0;\n color: #64748b;\n}\n\n/* Scrollable matrix container with fixed height */\n.matrix-scroll-container {\n flex: 1;\n overflow: auto;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n}\n\n.test-matrix {\n display: table;\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.test-matrix thead {\n display: table-header-group;\n}\n\n.test-matrix thead tr {\n display: table-row;\n}\n\n.test-matrix tbody {\n display: table-row-group;\n}\n\n.test-matrix tbody tr {\n display: table-row;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.test-matrix tbody tr:hover {\n background-color: rgba(59, 130, 246, 0.05);\n}\n\n.test-matrix tbody tr.row-selected {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix tbody tr.row-selected td {\n border-top: 1px solid rgba(59, 130, 246, 0.3);\n border-bottom: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.test-matrix tbody tr.row-selected .seq-cell,\n.test-matrix tbody tr.row-selected .test-name-cell {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix tfoot {\n display: table-footer-group;\n}\n\n.test-matrix th,\n.test-matrix td {\n display: table-cell;\n border: 1px solid var(--test-border);\n padding: 8px 12px;\n text-align: center;\n vertical-align: middle;\n}\n\n.test-matrix th {\n background: var(--test-bg);\n font-weight: 600;\n font-size: 11px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 3px solid #475569 !important;\n}\n\n/* Sequence column - shared styles */\n.test-matrix .seq-header,\n.test-matrix .seq-cell {\n width: 36px;\n min-width: 36px;\n max-width: 36px;\n text-align: center;\n position: sticky;\n left: 0;\n font-size: 11px;\n color: #64748b;\n border-right: 1px solid var(--test-border);\n padding: 6px 4px !important;\n}\n\n/* Seq header - sticky top AND left, highest z-index */\n.test-matrix .seq-header {\n cursor: pointer;\n font-weight: 600;\n background: var(--test-bg);\n z-index: 12; /* Higher than other headers */\n top: 0;\n}\n\n/* Seq body cells - sticky left only, lower z-index */\n.test-matrix .seq-cell {\n background: var(--test-surface);\n z-index: 2;\n}\n\n.test-matrix .seq-header i {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.6;\n}\n\n.test-matrix .seq-header:hover {\n background: #f1f5f9;\n}\n\n.test-matrix .test-name-header {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-bg);\n z-index: 11;\n border-right: 2px solid var(--test-border);\n cursor: pointer;\n}\n\n.test-matrix .test-name-header i {\n font-size: 9px;\n margin-left: 4px;\n opacity: 0.6;\n}\n\n.test-matrix .test-name-header:hover {\n background: #f1f5f9;\n}\n\n.test-matrix .run-header {\n min-width: 120px;\n width: 120px;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n/* Spacer column absorbs extra width */\n.test-matrix .spacer-header,\n.test-matrix .spacer-cell {\n width: 100%;\n min-width: 20px;\n background: var(--test-bg);\n border: none;\n}\n\n.test-matrix .spacer-cell {\n background: var(--test-surface);\n}\n\n.test-matrix .run-header:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-header-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.run-date {\n font-size: 12px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.run-pass-rate {\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.run-pass-rate.high {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.run-pass-rate.medium {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.run-pass-rate.low {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.run-tags {\n display: flex;\n gap: 4px;\n}\n\n.tag-tiny {\n font-size: 9px;\n padding: 2px 6px;\n background: #eff6ff;\n color: var(--test-primary);\n border-radius: 8px;\n white-space: nowrap;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Matrix column header tags - emphasized */\n.run-tags-header {\n display: flex;\n flex-wrap: wrap;\n gap: 3px;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.tag-chip-header {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 70px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-more-header {\n font-size: 9px;\n color: var(--test-text-secondary);\n padding: 2px 4px;\n}\n\n.test-matrix .test-name-cell {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-surface);\n z-index: 2;\n border-right: 2px solid var(--test-border);\n padding: 6px 10px !important;\n}\n\n.test-name {\n display: block;\n white-space: nowrap;\n font-weight: 500;\n color: var(--test-text);\n font-size: 12px;\n}\n\n.result-cell {\n position: relative;\n min-width: 120px;\n width: 120px;\n transition: var(--test-transition);\n}\n\n.result-cell.clickable {\n cursor: pointer;\n}\n\n.result-cell.clickable:hover {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 5;\n}\n\n.result-cell i {\n font-size: 14px;\n}\n\n/* Completed cells have neutral white background - pills tell the story */\n.result-cell.cell-passed,\n.result-cell.cell-failed,\n.result-cell.cell-error,\n.result-cell.cell-timeout,\n.result-cell.cell-running,\n.result-cell.cell-pending {\n background: #ffffff;\n color: var(--test-text);\n}\n\n/* Skipped/not-run cells get hatched background */\n.result-cell.cell-skipped {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: var(--test-disabled);\n}\n\n.result-cell.cell-none {\n background: #f8fafc;\n color: var(--test-text-muted);\n}\n\n.cell-score {\n display: block;\n font-size: 10px;\n font-weight: 600;\n margin-top: 2px;\n}\n\n/* Matrix cell evaluation stack - shows multiple eval types horizontally */\n.cell-eval-stack {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-wrap: nowrap;\n}\n\n.result-cell.multi-eval {\n min-width: 120px;\n width: auto;\n}\n\n/* Add timeout status icon */\n.cell-status.status-timeout {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-status.status-failed {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-status.status-error {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-status.status-skipped {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-status.status-pending {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.cell-human {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: #fef3c7;\n color: #d97706;\n font-size: 10px;\n}\n\n.cell-auto {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-auto.high {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-auto.medium {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-auto.low {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-none-indicator {\n color: var(--test-text-muted);\n opacity: 0.5;\n}\n\n.matrix-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.matrix-info i {\n color: var(--test-primary);\n}\n\n/* ===========================\n Chart View\n =========================== */\n.chart-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.chart-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--test-border);\n}\n\n.chart-header h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.chart-header h3 i {\n color: var(--test-primary);\n}\n\n.chart-legend {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.chart-legend .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 12px;\n}\n\n.chart-legend .legend-item.chart-passed {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.chart-legend .legend-item.chart-failed {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.chart-legend .legend-item.chart-error {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.chart-legend .legend-item.chart-skipped {\n background: #f1f5f9;\n color: var(--test-disabled);\n}\n\n.chart-container {\n min-height: 500px;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #fafbff 0%, #f8fafc 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.d3-chart {\n width: 100%;\n height: 500px;\n}\n\n.d3-chart svg {\n width: 100%;\n height: 100%;\n}\n\n/* D3 Chart Node Styles */\n.d3-chart .node {\n cursor: pointer;\n transition: transform 0.2s ease;\n}\n\n.d3-chart .node:hover {\n transform: scale(1.05);\n}\n\n.d3-chart .node-label {\n font-size: 11px;\n font-weight: 500;\n fill: var(--test-text);\n pointer-events: none;\n}\n\n.d3-chart .link {\n fill: none;\n stroke-opacity: 0.4;\n transition: stroke-opacity 0.2s ease;\n}\n\n.d3-chart .link:hover {\n stroke-opacity: 0.8;\n}\n\n.d3-chart .tooltip {\n position: absolute;\n padding: 10px 14px;\n background: rgba(30, 41, 59, 0.95);\n color: white;\n border-radius: 8px;\n font-size: 12px;\n pointer-events: none;\n z-index: 100;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n max-width: 250px;\n}\n\n.d3-chart .tooltip-title {\n font-weight: 600;\n margin-bottom: 4px;\n}\n\n.d3-chart .tooltip-value {\n opacity: 0.8;\n}\n\n.chart-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n margin-top: 16px;\n}\n\n.chart-info i {\n color: var(--test-primary);\n}\n\n/* ===========================\n Compare Tab\n =========================== */\n.compare-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n.compare-selection {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.compare-run-selector {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-run-selector h4 {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.run-selector-list {\n max-height: 200px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.run-selector-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.run-selector-item:hover {\n border-color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-selector-item.selected {\n border-color: var(--test-primary);\n background: #eff6ff;\n}\n\n.run-selector-item.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.selector-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.selector-content {\n flex: 1;\n min-width: 0;\n}\n\n.selector-date {\n font-size: 12px;\n font-weight: 500;\n color: var(--test-text);\n}\n\n.selector-rate {\n font-size: 11px;\n color: var(--test-text-secondary);\n}\n\n.selector-tags {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.selected-run-preview {\n padding: 12px;\n background: #f8fafc;\n border-radius: var(--test-radius-sm);\n border: 1px solid var(--test-border);\n}\n\n.preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.preview-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n}\n\n.clear-btn {\n padding: 4px 8px;\n border: none;\n background: transparent;\n color: var(--test-error);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.clear-btn:hover { text-decoration: underline; }\n\n.preview-details {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n color: var(--test-text);\n}\n\n.preview-rate {\n font-weight: 600;\n color: var(--test-success);\n}\n\n.compare-vs {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--test-bg);\n border-radius: 50%;\n color: var(--test-text-muted);\n font-size: 16px;\n align-self: center;\n margin-top: 60px;\n}\n\n/* Compare Results */\n.compare-results {\n animation: fadeIn 0.3s ease-out;\n}\n\n.compare-summary {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.compare-summary-card {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n text-align: center;\n}\n\n.compare-summary-card .summary-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n margin-bottom: 8px;\n}\n\n.compare-summary-card .summary-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.compare-summary-card .summary-value.positive { color: var(--test-success); }\n.compare-summary-card .summary-value.negative { color: var(--test-error); }\n\n.compare-summary-card.improved {\n border-left: 4px solid var(--test-success);\n}\n\n.compare-summary-card.improved .summary-value { color: var(--test-success); }\n\n.compare-summary-card.regressed {\n border-left: 4px solid var(--test-error);\n}\n\n.compare-summary-card.regressed .summary-value { color: var(--test-error); }\n\n/* Compare Table */\n.compare-table-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-table-section h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.compare-table-section h3 i {\n color: var(--test-primary);\n}\n\n.compare-table-wrapper {\n overflow-x: auto;\n}\n\n.compare-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.compare-table th {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.compare-table td {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.compare-table tbody tr.improved {\n background: rgba(16, 185, 129, 0.05);\n}\n\n.compare-table tbody tr.regressed {\n background: rgba(239, 68, 68, 0.05);\n}\n\n.test-name-cell {\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.positive { color: var(--test-success); }\n.negative { color: var(--test-error); }\n.muted { color: var(--test-text-muted); }\n\n.change-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.change-indicator.improved {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.change-indicator.regressed {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.change-indicator.unchanged {\n background: #f1f5f9;\n color: var(--test-text-muted);\n}\n\n/* Compare Empty State */\n.compare-empty {\n text-align: center;\n padding: 60px 24px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-top: 24px;\n}\n\n.compare-empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin: 0 auto 20px;\n}\n\n.compare-empty-icon i {\n font-size: 32px;\n color: var(--test-text-muted);\n}\n\n.compare-empty h4 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.compare-empty p {\n margin: 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 400px;\n margin: 0 auto;\n}\n\n/* Small empty state variant */\n.empty-state.small {\n padding: 32px 16px;\n}\n\n.empty-state.small p {\n margin: 0;\n}\n\n/* ===========================\n Responsive Analytics/Compare\n =========================== */\n@media (max-width: 1024px) {\n .compare-selection {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .compare-vs {\n margin: 0;\n align-self: center;\n justify-self: center;\n }\n\n .analytics-kpis {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .filter-buttons {\n flex-direction: column;\n }\n\n .filter-btn {\n width: 100%;\n text-align: center;\n }\n\n .analytics-kpis {\n grid-template-columns: 1fr;\n }\n\n .kpi-card {\n padding: 16px;\n }\n\n .kpi-value {\n font-size: 20px;\n }\n\n .compare-summary {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .analytics-table-wrapper,\n .compare-table-wrapper {\n margin: 0 -20px;\n padding: 0 20px;\n }\n\n .run-selector-list {\n max-height: 150px;\n }\n}\n\n@media (max-width: 480px) {\n .compare-summary {\n grid-template-columns: 1fr;\n }\n\n .compare-summary-card .summary-value {\n font-size: 20px;\n }\n\n .analytics-table th,\n .analytics-table td,\n .compare-table th,\n .compare-table td {\n padding: 10px 12px;\n font-size: 12px;\n }\n}\n\n/* ===========================\n Matrix Evaluation Indicators\n =========================== */\n\n/* Human Feedback Indicators */\n.cell-human {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-human.no-feedback {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-human.no-feedback i {\n font-size: 11px;\n}\n\n.cell-human.has-feedback {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-human.has-feedback i {\n font-size: 9px;\n}\n\n.cell-human.has-feedback .rating-value {\n font-weight: 700;\n font-size: 11px;\n}\n\n/* Human rating color coding: red \u22644, yellow 5-6, light-green 7-8, green 9-10 */\n.cell-human.rating-low {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-human.rating-medium {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-human.rating-good {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-human.rating-excellent {\n background: #dcfce7;\n color: #16a34a;\n}\n\n/* Auto Score Indicators */\n.cell-auto {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-auto.no-score {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-auto.no-score i {\n font-size: 11px;\n}\n\n.cell-auto.has-score {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-auto.has-score i {\n font-size: 9px;\n}\n\n.cell-auto.has-score .score-value {\n font-weight: 700;\n font-size: 10px;\n}\n\n/* Auto score color coding (0-100%): red <50, yellow 50-69, light-green 70-84, green 85+ */\n.cell-auto.score-low {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-auto.score-medium {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-auto.score-good {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-auto.score-excellent {\n background: #dcfce7;\n color: #16a34a;\n}\n\n/* Status indicators in matrix cells */\n.cell-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed {\n background: #dcfce7;\n color: #16a34a;\n}\n\n.cell-status.status-failed {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-status.status-error {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-timeout {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-skipped,\n.cell-status.status-pending {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running {\n background: #dbeafe;\n color: #2563eb;\n}\n\n/* Not-run / Skipped cells with hatch pattern */\n.result-cell.cell-not-run {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: #94a3b8;\n}\n\n.result-cell.cell-not-run .cell-eval-stack {\n opacity: 0.6;\n}\n\n.cell-not-run-indicator {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n color: #94a3b8;\n font-size: 11px;\n}\n\n/* ===========================\n Matrix Totals Footer Row\n =========================== */\n.test-matrix tfoot {\n position: sticky;\n bottom: 0;\n z-index: 2;\n}\n\n.totals-row {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n border-top: 2px solid var(--test-border);\n}\n\n.totals-row td {\n padding: 10px 12px;\n font-weight: 600;\n}\n\n.totals-row .totals-label {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n font-size: 12px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.totals-row .totals-cell {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n}\n\n.totals-stack {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.totals-status,\n.totals-human,\n.totals-auto {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.totals-status {\n background: #e0f2fe;\n color: #0369a1;\n}\n\n.totals-status .pass-count {\n font-weight: 700;\n}\n\n.totals-human {\n background: #fef3c7;\n color: #92400e;\n}\n\n.totals-human .avg-label {\n font-weight: 700;\n}\n\n.totals-human .count-label {\n font-size: 10px;\n opacity: 0.8;\n}\n\n.totals-auto {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.totals-auto .avg-label {\n font-weight: 700;\n}\n\n.totals-auto .count-label {\n font-size: 10px;\n opacity: 0.8;\n}\n"] }]
|
|
3479
|
-
}],
|
|
3503
|
+
args: [{ standalone: false, selector: 'mj-test-suite-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-suite-form\" kendoDialogContainer>\n <!-- Header Section -->\n <div class=\"suite-header\">\n <!-- Breadcrumb Navigation -->\n <nav class=\"breadcrumb\" aria-label=\"Breadcrumb\">\n <ol>\n <li>\n <a href=\"javascript:void(0)\" (click)=\"navigateToTestingDashboard()\">\n <i class=\"fas fa-vial\"></i>\n <span class=\"breadcrumb-text\">Testing</span>\n </a>\n </li>\n <li class=\"current\">\n <i class=\"fas fa-chevron-right separator\"></i>\n <i class=\"fas fa-layer-group\"></i>\n <span>{{ record.Name }}</span>\n </li>\n </ol>\n </nav>\n\n <div class=\"header-content\">\n <div class=\"header-left\">\n <div class=\"suite-icon\" [style.background-color]=\"getStatusColor()\">\n <i class=\"fas fa-layer-group\"></i>\n </div>\n <div class=\"suite-info\">\n <h1>{{ record.Name }}</h1>\n <div class=\"suite-meta\">\n <span class=\"status-badge\" [ngClass]=\"getStatusClass()\">\n <i class=\"fas\" [ngClass]=\"record.Status === 'Active' ? 'fa-circle-check' : 'fa-circle-pause'\"></i>\n {{ record.Status }}\n </span>\n @if (testsLoaded) {\n <span class=\"test-count\">\n <i class=\"fas fa-flask\"></i>\n {{ suiteTests.length }} tests\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-actions\">\n <app-evaluation-mode-toggle></app-evaluation-mode-toggle>\n <button kendoButton (click)=\"exportToExcel()\" title=\"Export to CSV\">\n <i class=\"fas fa-file-excel\"></i> Export\n </button>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite\n </button>\n <button kendoButton (click)=\"refresh()\" [disabled]=\"isRefreshing\">\n <i class=\"fas\" [ngClass]=\"isRefreshing ? 'fa-sync fa-spin' : 'fa-sync'\"></i>\n {{ isRefreshing ? 'Refreshing...' : 'Refresh' }}\n </button>\n </div>\n </div>\n @if (record.Description) {\n <div class=\"suite-description\">\n <p>{{ record.Description }}</p>\n </div>\n }\n </div>\n\n <!-- Tabs -->\n <div class=\"tabs-container\">\n <div class=\"tabs\" role=\"tablist\">\n <button class=\"tab\"\n [class.active]=\"activeTab === 'overview'\"\n (click)=\"changeTab('overview')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'overview'\">\n <i class=\"fas fa-th-large\"></i> Overview\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'tests'\"\n (click)=\"changeTab('tests')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'tests'\">\n <i class=\"fas fa-flask\"></i> Tests\n @if (testsLoaded) {\n <span class=\"tab-badge\">{{ suiteTests.length }}</span>\n }\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'runs'\"\n (click)=\"changeTab('runs')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'runs'\">\n <i class=\"fas fa-history\"></i> Runs\n @if (runsLoaded) {\n <span class=\"tab-badge\">{{ suiteRuns.length }}</span>\n }\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'analytics'\"\n (click)=\"changeTab('analytics')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'analytics'\">\n <i class=\"fas fa-chart-line\"></i> Analytics\n </button>\n <button class=\"tab\"\n [class.active]=\"activeTab === 'compare'\"\n (click)=\"changeTab('compare')\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'compare'\">\n <i class=\"fas fa-balance-scale\"></i> Compare\n </button>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tab-content\">\n <!-- Overview Tab -->\n @if (activeTab === 'overview') {\n <div class=\"overview-tab\">\n <div class=\"info-section\">\n <h3><i class=\"fas fa-info-circle\"></i> Suite Information</h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <div class=\"info-label\">Name</div>\n <div class=\"info-value\">{{ record.Name }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Status</div>\n <div class=\"info-value\">\n <span class=\"status-badge-inline\" [ngClass]=\"getStatusClass()\">{{ record.Status }}</span>\n </div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Created</div>\n <div class=\"info-value\">{{ record.__mj_CreatedAt | date:'medium' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Updated</div>\n <div class=\"info-value\">{{ record.__mj_UpdatedAt | date:'medium' }}</div>\n </div>\n <div class=\"info-item\">\n <div class=\"info-label\">Max Execution Time</div>\n <div class=\"info-value\">{{ formatTimeout(record.MaxExecutionTimeMS) }}</div>\n </div>\n </div>\n </div>\n <div class=\"config-section\">\n <h3><i class=\"fas fa-cogs\"></i> Execution Settings</h3>\n <div class=\"config-grid\">\n <div class=\"config-item\">\n <label>Max Execution Time (ms)</label>\n <input type=\"number\" [(ngModel)]=\"record.MaxExecutionTimeMS\" class=\"config-input\" placeholder=\"Default: 300000 (5 min)\" />\n <span class=\"config-hint\">Default timeout for tests in this suite</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- Tests Tab -->\n @if (activeTab === 'tests') {\n <div class=\"tests-tab\">\n <!-- Loading State -->\n @if (loadingTests) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3,4,5]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-sequence\"></div>\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Tests List -->\n @if (!loadingTests && suiteTests.length > 0) {\n <div class=\"tests-list\">\n @for (test of suiteTests; track test) {\n <div class=\"test-item\" (click)=\"openTest(test.TestID)\">\n <div class=\"test-sequence\">{{ test.Sequence }}</div>\n <div class=\"test-icon\"><i class=\"fas fa-flask\"></i></div>\n <div class=\"test-content\">\n <div class=\"test-name\">{{ test.Test }}</div>\n <div class=\"test-status\">\n @if (test.Status) {\n <span><i class=\"fas fa-info-circle\"></i> {{ test.Status }}</span>\n }\n </div>\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (testsLoaded && !loadingTests && suiteTests.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-flask\"></i>\n </div>\n <h4>No Tests in Suite</h4>\n <p>Add tests to this suite to start running them together.</p>\n </div>\n }\n </div>\n }\n\n <!-- Runs Tab -->\n @if (activeTab === 'runs') {\n <div class=\"runs-tab\">\n <!-- Loading State -->\n @if (loadingRuns) {\n <div class=\"loading-state\">\n <div class=\"skeleton-list\">\n @for (i of [1,2,3]; track i) {\n <div class=\"skeleton-card\">\n <div class=\"skeleton-icon\"></div>\n <div class=\"skeleton-content\">\n <div class=\"skeleton-line wide\"></div>\n <div class=\"skeleton-line narrow\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n <!-- Runs List -->\n @if (!loadingRuns && suiteRuns.length > 0) {\n <div class=\"runs-list\">\n @for (run of suiteRuns; track run) {\n <div class=\"run-item\" (click)=\"openSuiteRun(run.ID)\">\n <div class=\"run-icon\" [style.background-color]=\"getRunStatusColor(run.Status)\">\n <i class=\"fas\"\n [class.fa-check]=\"run.Status === 'Completed'\"\n [class.fa-times]=\"run.Status === 'Failed'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-ban]=\"run.Status === 'Cancelled'\"></i>\n </div>\n <div class=\"run-content\">\n <div class=\"run-header\">\n <span class=\"run-id\">Run #{{ run.ID.substring(0, 8) }}</span>\n <span class=\"run-status\" [style.color]=\"getRunStatusColor(run.Status)\">{{ run.Status }}</span>\n </div>\n <div class=\"run-meta\">\n <span><i class=\"fas fa-calendar\"></i> {{ getRelativeTime(run.StartedAt) }}</span>\n @if (run.TotalTests) {\n <span>\n <i class=\"fas fa-check-circle\"></i> {{ run.PassedTests }}/{{ run.TotalTests }}\n ({{ getPassRate(run).toFixed(0) }}%)\n </span>\n }\n </div>\n <!-- Evaluation metrics row -->\n <div class=\"run-eval-metrics\">\n <!-- Status badge -->\n @if (evalPreferences.showExecution) {\n <span class=\"eval-metric status\" [class]=\"'status-' + run.Status.toLowerCase()\">\n <i class=\"fas\"\n [class.fa-circle-check]=\"run.Status === 'Completed'\"\n [class.fa-circle-xmark]=\"run.Status === 'Failed'\"\n [class.fa-spinner]=\"run.Status === 'Running'\"\n [class.fa-clock]=\"run.Status === 'Pending'\"\n [class.fa-ban]=\"run.Status === 'Cancelled'\"></i>\n </span>\n }\n <!-- Human score (placeholder - need avg from suite run) -->\n @if (evalPreferences.showHuman) {\n <span class=\"eval-metric human\" title=\"Human evaluation\">\n <i class=\"fas fa-user\"></i>\n <span class=\"eval-pending\"><i class=\"fas fa-clock\"></i></span>\n </span>\n }\n <!-- Auto score (pass rate as proxy) -->\n @if (evalPreferences.showAuto && run.TotalTests) {\n <span class=\"eval-metric auto\"\n [class.high]=\"getPassRate(run) >= 80\"\n [class.medium]=\"getPassRate(run) >= 50 && getPassRate(run) < 80\"\n [class.low]=\"getPassRate(run) < 50\"\n title=\"Auto score (pass rate)\">\n <i class=\"fas fa-robot\"></i>\n <span>{{ getPassRate(run).toFixed(0) }}%</span>\n </span>\n }\n </div>\n <!-- Tags display -->\n @if (getRunTags(run).length > 0) {\n <div class=\"run-tags\">\n @for (tag of getRunTags(run); track tag) {\n <span class=\"tag-chip\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n <i class=\"fas fa-chevron-right\"></i>\n </div>\n }\n </div>\n }\n <!-- Empty State -->\n @if (runsLoaded && !loadingRuns && suiteRuns.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-play-circle\"></i>\n </div>\n <h4>No Suite Runs Yet</h4>\n <p>Run this suite to see execution history and results here.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n }\n </div>\n }\n\n <!-- Analytics Tab -->\n @if (activeTab === 'analytics') {\n <div class=\"analytics-tab\">\n <!-- Loading State -->\n @if (loadingAnalytics) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading analytics data...\"></mj-loading>\n </div>\n }\n @if (!loadingAnalytics && analyticsLoaded) {\n <!-- View Toggle Sub-nav -->\n <div class=\"analytics-subnav\">\n <div class=\"subnav-tabs\">\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'summary'\"\n (click)=\"setAnalyticsView('summary')\">\n <i class=\"fas fa-chart-bar\"></i>\n <span>Summary</span>\n </button>\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'matrix'\"\n (click)=\"setAnalyticsView('matrix')\">\n <i class=\"fas fa-th\"></i>\n <span>Matrix</span>\n </button>\n <button class=\"subnav-tab\"\n [class.active]=\"analyticsView === 'chart'\"\n (click)=\"setAnalyticsView('chart')\">\n <i class=\"fas fa-project-diagram\"></i>\n <span>Chart</span>\n </button>\n </div>\n </div>\n <!-- Collapsible Filters (shared by both views) -->\n <div class=\"analytics-filters\" [class.collapsed]=\"filtersCollapsed\">\n <div class=\"filters-header\" (click)=\"toggleFilters()\">\n <span class=\"filters-title\">\n <i class=\"fas fa-filter\"></i>\n Filters\n @if (filtersCollapsed) {\n <span class=\"filter-summary\">\n {{ analyticsTimeRange === 'all' ? 'All Time' : analyticsTimeRange }}\n @if (selectedTags.length > 0) {\n <span> \u00B7 {{ selectedTags.length }} tags</span>\n }\n </span>\n }\n </span>\n <i class=\"fas\" [ngClass]=\"filtersCollapsed ? 'fa-chevron-down' : 'fa-chevron-up'\"></i>\n </div>\n @if (!filtersCollapsed) {\n <div class=\"filters-content\">\n <div class=\"filter-group\">\n <label>Time Range</label>\n <div class=\"filter-buttons\">\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '7d'\" (click)=\"setTimeRange('7d')\">7 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '30d'\" (click)=\"setTimeRange('30d')\">30 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === '90d'\" (click)=\"setTimeRange('90d')\">90 Days</button>\n <button class=\"filter-btn\" [class.active]=\"analyticsTimeRange === 'all'\" (click)=\"setTimeRange('all')\">All Time</button>\n </div>\n </div>\n @if (uniqueTags.length > 0) {\n <div class=\"filter-group\">\n <label>Filter by Tag @if (selectedTags.length > 0) {\n <span class=\"filter-hint\">({{ selectedTags.length }} selected)</span>\n }</label>\n <div class=\"filter-buttons tag-filters\">\n <button class=\"filter-btn tag-btn all-tags-btn\"\n [class.active]=\"selectedTags.length === 0\"\n (click)=\"toggleTagFilter(null)\">\n <i class=\"fas fa-layer-group\"></i> All Tags\n </button>\n @for (tag of uniqueTags; track tag) {\n <button class=\"filter-btn tag-btn\"\n [class.active]=\"isTagSelected(tag)\"\n (click)=\"toggleTagFilter(tag)\">\n @if (isTagSelected(tag)) {\n <i class=\"fas fa-check\"></i>\n }\n {{ tag }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n <!-- Summary View -->\n @if (analyticsView === 'summary') {\n <!-- KPI Cards -->\n <div class=\"analytics-kpis\">\n <div class=\"kpi-card\">\n <div class=\"kpi-icon\"><i class=\"fas fa-play-circle\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ getTotalRuns() }}</div>\n <div class=\"kpi-label\">Total Runs</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon success\"><i class=\"fas fa-check-circle\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ getAveragePassRate().toFixed(1) }}%</div>\n <div class=\"kpi-label\">Avg Pass Rate</div>\n <div class=\"kpi-trend\" [ngClass]=\"{'trend-up': getPassRateTrend().direction === 'up', 'trend-down': getPassRateTrend().direction === 'down'}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-up': getPassRateTrend().direction === 'up', 'fa-arrow-down': getPassRateTrend().direction === 'down', 'fa-minus': getPassRateTrend().direction === 'stable'}\"></i>\n {{ getPassRateTrend().value.toFixed(1) }}%\n </div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon info\"><i class=\"fas fa-clock\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ formatDuration(getAverageDuration()) }}</div>\n <div class=\"kpi-label\">Avg Duration</div>\n </div>\n </div>\n <div class=\"kpi-card\">\n <div class=\"kpi-icon warning\"><i class=\"fas fa-dollar-sign\"></i></div>\n <div class=\"kpi-content\">\n <div class=\"kpi-value\">{{ formatCost(getTotalCost()) }}</div>\n <div class=\"kpi-label\">Total Cost</div>\n </div>\n </div>\n </div>\n <!-- Runs Table -->\n <div class=\"analytics-table-section\">\n <h3><i class=\"fas fa-table\"></i> Run History</h3>\n <div class=\"analytics-table-wrapper\">\n <table class=\"analytics-table\">\n <thead>\n <tr>\n <th>Date</th>\n <th>Status</th>\n <th>Pass Rate</th>\n <th>Tests</th>\n <th>Duration</th>\n <th>Cost</th>\n <th>Tags</th>\n </tr>\n </thead>\n <tbody>\n @for (dp of getFilteredAnalyticsData(); track dp) {\n <tr (click)=\"openSuiteRun(dp.runId)\" class=\"clickable-row\">\n <td>{{ dp.date | date:'short' }}</td>\n <td>\n <span class=\"status-chip\" [ngClass]=\"'status-' + dp.status.toLowerCase()\">{{ dp.status }}</span>\n </td>\n <td>\n <div class=\"pass-rate-cell\">\n <div class=\"pass-rate-bar\" [style.width.%]=\"dp.passRate\" [ngClass]=\"{'high': dp.passRate >= 80, 'medium': dp.passRate >= 50 && dp.passRate < 80, 'low': dp.passRate < 50}\"></div>\n <span>{{ dp.passRate.toFixed(0) }}%</span>\n </div>\n </td>\n <td>{{ dp.passedTests }}/{{ dp.totalTests }}</td>\n <td>{{ formatDuration(dp.duration) }}</td>\n <td>{{ formatCost(dp.cost) }}</td>\n <td>\n <div class=\"tag-cell\">\n @for (tag of dp.tags.slice(0, 2); track tag) {\n <span class=\"tag-chip-table\">{{ tag }}</span>\n }\n @if (dp.tags.length > 2) {\n <span class=\"tag-more\">+{{ dp.tags.length - 2 }}</span>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n @if (getFilteredAnalyticsData().length === 0) {\n <div class=\"empty-state small\">\n <p>No runs match the current filters.</p>\n </div>\n }\n </div>\n }\n <!-- Matrix View -->\n @if (analyticsView === 'matrix') {\n <!-- Loading Matrix -->\n @if (loadingMatrix) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading test matrix...\"></mj-loading>\n </div>\n }\n <!-- Matrix Content -->\n @if (!loadingMatrix && matrixLoaded && matrixData.length > 0) {\n <div class=\"matrix-section\">\n <div class=\"matrix-header\">\n <h3><i class=\"fas fa-th\"></i> Test Results Matrix</h3>\n <div class=\"matrix-header-right\">\n <div class=\"matrix-filter-input\">\n <i class=\"fas fa-search\"></i>\n <input type=\"text\"\n placeholder=\"Filter tests...\"\n [value]=\"matrixTestFilter\"\n (input)=\"onMatrixFilterInput($event)\"\n class=\"filter-input\">\n @if (matrixTestFilter) {\n <button class=\"clear-filter-btn\" (click)=\"clearMatrixFilter()\" title=\"Clear filter\">\n <i class=\"fas fa-times\"></i>\n </button>\n }\n </div>\n <span class=\"matrix-run-count\">{{ matrixData.length }} runs \u00B7 {{ getUniqueTestsFromMatrix().length }} tests</span>\n <button kendoButton (click)=\"exportMatrixToCSV()\" [disabled]=\"matrixData.length === 0\" title=\"Export matrix to CSV\">\n <i class=\"fas fa-download\"></i> Export\n </button>\n </div>\n </div>\n <div class=\"matrix-scroll-container\">\n <table class=\"test-matrix\">\n <thead>\n <tr>\n <th class=\"seq-header\" (click)=\"toggleMatrixSort('sequence')\" title=\"Sort by sequence\">\n #\n <i class=\"fas\" [ngClass]=\"matrixSortBy === 'sequence' ? (matrixSortAsc ? 'fa-sort-up' : 'fa-sort-down') : 'fa-sort'\"></i>\n </th>\n <th class=\"test-name-header\" (click)=\"toggleMatrixSort('name')\" title=\"Sort by name\">\n Test\n <i class=\"fas\" [ngClass]=\"matrixSortBy === 'name' ? (matrixSortAsc ? 'fa-sort-up' : 'fa-sort-down') : 'fa-sort'\"></i>\n </th>\n @for (run of matrixData; track run) {\n <th class=\"run-header\" (click)=\"openSuiteRun(run.runId)\" [title]=\"'Click to view suite run - ' + (run.date | date:'medium')\">\n <div class=\"run-header-content\">\n @if (run.tags.length > 0) {\n <div class=\"run-tags-header\">\n @for (tag of run.tags.slice(0, 2); track tag) {\n <span class=\"tag-chip-header\">{{ tag }}</span>\n }\n @if (run.tags.length > 2) {\n <span class=\"tag-more-header\">+{{ run.tags.length - 2 }}</span>\n }\n </div>\n }\n <div class=\"run-date\">{{ getRelativeTime(run.date) }}</div>\n <div class=\"run-pass-rate\" [ngClass]=\"{'high': run.passRate >= 80, 'medium': run.passRate >= 50 && run.passRate < 80, 'low': run.passRate < 50}\">\n {{ run.passRate.toFixed(0) }}%\n </div>\n </div>\n </th>\n }\n <th class=\"spacer-header\"></th>\n </tr>\n </thead>\n <tbody>\n @for (test of getUniqueTestsFromMatrix(); track test) {\n <tr\n [class.row-selected]=\"selectedMatrixTestId === test.testId\"\n (click)=\"selectMatrixRow(test.testId)\">\n <td class=\"seq-cell\">{{ test.sequence }}</td>\n <td class=\"test-name-cell\">\n <span class=\"test-name\" [title]=\"test.testName\">{{ test.testName }}</span>\n </td>\n @for (run of matrixData; track run) {\n <td class=\"result-cell\"\n [ngClass]=\"getMatrixCellClass(getTestResultForRun(run.runId, test.testId))\"\n [class.clickable]=\"getTestResultForRun(run.runId, test.testId)\"\n [class.cell-not-run]=\"!getTestResultForRun(run.runId, test.testId)\"\n [title]=\"getTestResultForRun(run.runId, test.testId)?.status + ' - Click to view test run' || 'Not Run'\"\n (click)=\"onMatrixCellClick(getTestResultForRun(run.runId, test.testId), $event)\">\n @if (getTestResultForRun(run.runId, test.testId); as result) {\n <div class=\"cell-eval-stack\">\n <!-- Status indicator -->\n @if (evalPreferences.showExecution) {\n <span class=\"cell-status\"\n [ngClass]=\"'status-' + result.status.toLowerCase()\"\n [class.cell-skipped-status]=\"result.status === 'Skipped' || result.status === 'Pending'\"\n [title]=\"getStatusTooltip(result.status)\">\n <i class=\"fas\"\n [class.fa-check]=\"result.status === 'Passed'\"\n [class.fa-times]=\"result.status === 'Failed'\"\n [class.fa-exclamation]=\"result.status === 'Error'\"\n [class.fa-hourglass-end]=\"result.status === 'Timeout'\"\n [class.fa-forward]=\"result.status === 'Skipped'\"\n [class.fa-spinner]=\"result.status === 'Running'\"\n [class.fa-clock]=\"result.status === 'Pending'\"></i>\n </span>\n }\n <!-- Human score - slashed icon if no feedback, colored by rating if has feedback -->\n @if (evalPreferences.showHuman && !result.humanRating) {\n <span class=\"cell-human no-feedback\"\n title=\"Human Review: No rating submitted yet\">\n <i class=\"fas fa-user-slash\"></i>\n </span>\n }\n @if (evalPreferences.showHuman && result.humanRating) {\n <span class=\"cell-human has-feedback\"\n [class.rating-low]=\"result.humanRating <= 4\"\n [class.rating-medium]=\"result.humanRating >= 5 && result.humanRating <= 6\"\n [class.rating-good]=\"result.humanRating >= 7 && result.humanRating <= 8\"\n [class.rating-excellent]=\"result.humanRating >= 9\"\n [title]=\"getHumanTooltip(result.humanRating, result.humanComments)\">\n <i class=\"fas fa-user\"></i>\n <span class=\"rating-value\">{{ result.humanRating }}</span>\n </span>\n }\n <!-- Auto score - colored by percentage -->\n @if (evalPreferences.showAuto && result.score != null) {\n <span class=\"cell-auto has-score\"\n [class.score-low]=\"result.score < 0.5\"\n [class.score-medium]=\"result.score >= 0.5 && result.score < 0.7\"\n [class.score-good]=\"result.score >= 0.7 && result.score < 0.85\"\n [class.score-excellent]=\"result.score >= 0.85\"\n [title]=\"'Auto Score: ' + (result.score * 100).toFixed(0) + '% automated evaluation'\">\n <i class=\"fas fa-robot\"></i>\n <span class=\"score-value\">{{ (result.score * 100).toFixed(0) }}</span>\n </span>\n }\n @if (evalPreferences.showAuto && result.score == null) {\n <span class=\"cell-auto no-score\"\n title=\"Auto Score: No automated score available\">\n <i class=\"fas fa-robot\"></i>\n </span>\n }\n </div>\n }\n @if (!getTestResultForRun(run.runId, test.testId)) {\n <span class=\"cell-not-run-indicator\">\n <i class=\"fas fa-minus\"></i>\n </span>\n }\n </td>\n }\n <td class=\"spacer-cell\"></td>\n </tr>\n }\n </tbody>\n <!-- Footer row with totals -->\n <tfoot>\n <tr class=\"totals-row\">\n <td class=\"seq-cell totals-label\"></td>\n <td class=\"test-name-cell totals-label\">\n <strong>Totals</strong>\n </td>\n @for (run of matrixData; track run) {\n <td class=\"result-cell totals-cell\">\n <div class=\"cell-eval-stack totals-stack\">\n <!-- Status totals -->\n @if (evalPreferences.showExecution) {\n <span class=\"totals-status\">\n <span class=\"pass-count\">{{ getRunPassedCount(run) }}/{{ getRunTotalCount(run) }}</span>\n </span>\n }\n <!-- Human totals -->\n @if (evalPreferences.showHuman) {\n <span class=\"totals-human\">\n @if (getRunHumanAvg(run) != null) {\n <span class=\"avg-label\">{{ getRunHumanAvg(run)?.toFixed(1) }}</span>\n }\n <span class=\"count-label\">({{ getRunHumanCount(run) }})</span>\n </span>\n }\n <!-- Auto totals -->\n @if (evalPreferences.showAuto) {\n <span class=\"totals-auto\">\n @if (getRunAutoAvg(run) != null) {\n <span class=\"avg-label\">{{ (getRunAutoAvg(run)! * 100).toFixed(0) }}%</span>\n }\n <span class=\"count-label\">({{ getRunAutoCount(run) }})</span>\n </span>\n }\n </div>\n </td>\n }\n <td class=\"spacer-cell\"></td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n }\n <!-- Empty Matrix State -->\n @if (!loadingMatrix && matrixLoaded && matrixData.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-th\"></i>\n </div>\n <h4>No Matrix Data</h4>\n <p>No suite runs match the current filters.</p>\n </div>\n }\n }\n <!-- Chart View -->\n @if (analyticsView === 'chart') {\n <!-- Loading Chart -->\n @if (loadingMatrix) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading chart data...\"></mj-loading>\n </div>\n }\n <!-- Chart Content -->\n @if (!loadingMatrix && matrixLoaded && matrixData.length > 0) {\n <div class=\"chart-section\">\n <div class=\"chart-header\">\n <h3><i class=\"fas fa-project-diagram\"></i> Test Results Flow</h3>\n <div class=\"chart-legend\">\n <span class=\"legend-item chart-passed\"><i class=\"fas fa-check\"></i> Passed</span>\n <span class=\"legend-item chart-failed\"><i class=\"fas fa-times\"></i> Failed</span>\n <span class=\"legend-item chart-error\"><i class=\"fas fa-exclamation\"></i> Error</span>\n <span class=\"legend-item chart-skipped\"><i class=\"fas fa-forward\"></i> Skipped</span>\n </div>\n </div>\n <div class=\"chart-container\">\n <div #chartContainer class=\"d3-chart\"></div>\n </div>\n <div class=\"chart-info\">\n <i class=\"fas fa-info-circle\"></i>\n Interactive visualization showing test results across {{ matrixData.length }} runs.\n Hover over elements for details, click nodes to navigate.\n </div>\n </div>\n }\n <!-- Empty Chart State -->\n @if (!loadingMatrix && matrixLoaded && matrixData.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-project-diagram\"></i>\n </div>\n <h4>No Chart Data</h4>\n <p>No suite runs match the current filters.</p>\n </div>\n }\n }\n }\n <!-- Empty State -->\n @if (!loadingAnalytics && analyticsLoaded && analyticsData.length === 0) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-chart-line\"></i>\n </div>\n <h4>No Analytics Data</h4>\n <p>Run this suite to start collecting analytics data.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n }\n </div>\n }\n\n <!-- Compare Tab -->\n @if (activeTab === 'compare') {\n <div class=\"compare-tab\">\n <!-- Run Selection -->\n <div class=\"compare-selection\">\n <div class=\"compare-run-selector\">\n <h4>Run A (Baseline)</h4>\n @if (!loadingRuns && suiteRuns.length > 0) {\n <div class=\"run-selector-list\">\n @for (run of suiteRuns; track run) {\n <div class=\"run-selector-item\"\n [class.selected]=\"compareRunA?.ID === run.ID\"\n (click)=\"selectCompareRunA(run)\">\n <div class=\"selector-status\" [style.background-color]=\"getRunStatusColor(run.Status)\"></div>\n <div class=\"selector-content\">\n <div class=\"selector-date\">{{ run.StartedAt | date:'short' }}</div>\n <div class=\"selector-rate\">{{ getPassRate(run).toFixed(0) }}% pass</div>\n </div>\n @if (getRunTags(run).length > 0) {\n <div class=\"selector-tags\">\n @for (tag of getRunTags(run).slice(0, 2); track tag) {\n <span class=\"tag-mini\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (compareRunA) {\n <div class=\"selected-run-preview\">\n <div class=\"preview-header\">\n <span class=\"preview-label\">Selected:</span>\n <button class=\"clear-btn\" (click)=\"compareRunA = null; compareResults = []\">Clear</button>\n </div>\n <div class=\"preview-details\">\n <span>{{ compareRunA.StartedAt | date:'medium' }}</span>\n <span class=\"preview-rate\">{{ getPassRate(compareRunA).toFixed(1) }}%</span>\n </div>\n </div>\n }\n </div>\n <div class=\"compare-vs\"><i class=\"fas fa-exchange-alt\"></i></div>\n <div class=\"compare-run-selector\">\n <h4>Run B (Compare)</h4>\n @if (!loadingRuns && suiteRuns.length > 0) {\n <div class=\"run-selector-list\">\n @for (run of suiteRuns; track run) {\n <div class=\"run-selector-item\"\n [class.selected]=\"compareRunB?.ID === run.ID\"\n [class.disabled]=\"compareRunA?.ID === run.ID\"\n (click)=\"compareRunA?.ID !== run.ID && selectCompareRunB(run)\">\n <div class=\"selector-status\" [style.background-color]=\"getRunStatusColor(run.Status)\"></div>\n <div class=\"selector-content\">\n <div class=\"selector-date\">{{ run.StartedAt | date:'short' }}</div>\n <div class=\"selector-rate\">{{ getPassRate(run).toFixed(0) }}% pass</div>\n </div>\n @if (getRunTags(run).length > 0) {\n <div class=\"selector-tags\">\n @for (tag of getRunTags(run).slice(0, 2); track tag) {\n <span class=\"tag-mini\">{{ tag }}</span>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (compareRunB) {\n <div class=\"selected-run-preview\">\n <div class=\"preview-header\">\n <span class=\"preview-label\">Selected:</span>\n <button class=\"clear-btn\" (click)=\"compareRunB = null; compareResults = []\">Clear</button>\n </div>\n <div class=\"preview-details\">\n <span>{{ compareRunB.StartedAt | date:'medium' }}</span>\n <span class=\"preview-rate\">{{ getPassRate(compareRunB).toFixed(1) }}%</span>\n </div>\n </div>\n }\n </div>\n </div>\n <!-- Comparison Results -->\n @if (compareRunA && compareRunB && !loadingCompare) {\n <div class=\"compare-results\">\n <!-- Summary Cards -->\n <div class=\"compare-summary\">\n <div class=\"compare-summary-card\">\n <div class=\"summary-label\">Pass Rate Change</div>\n <div class=\"summary-value\" [ngClass]=\"{'positive': getComparePassRateDiff()! > 0, 'negative': getComparePassRateDiff()! < 0}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-up': getComparePassRateDiff()! > 0, 'fa-arrow-down': getComparePassRateDiff()! < 0, 'fa-minus': getComparePassRateDiff() === 0}\"></i>\n {{ getComparePassRateDiff()! > 0 ? '+' : '' }}{{ getComparePassRateDiff()?.toFixed(1) }}%\n </div>\n </div>\n <div class=\"compare-summary-card\">\n <div class=\"summary-label\">Duration Change</div>\n <div class=\"summary-value\" [ngClass]=\"{'positive': getCompareDurationDiff()! < 0, 'negative': getCompareDurationDiff()! > 0}\">\n <i class=\"fas\" [ngClass]=\"{'fa-arrow-down': getCompareDurationDiff()! < 0, 'fa-arrow-up': getCompareDurationDiff()! > 0, 'fa-minus': getCompareDurationDiff() === 0}\"></i>\n {{ formatDuration(getAbsCompareDurationDiff()) }}\n </div>\n </div>\n <div class=\"compare-summary-card improved\">\n <div class=\"summary-label\">Improved</div>\n <div class=\"summary-value\">{{ getCompareImprovedCount() }}</div>\n </div>\n <div class=\"compare-summary-card regressed\">\n <div class=\"summary-label\">Regressed</div>\n <div class=\"summary-value\">{{ getCompareRegressedCount() }}</div>\n </div>\n </div>\n <!-- Detailed Comparison Table -->\n <div class=\"compare-table-section\">\n <h3><i class=\"fas fa-list\"></i> Test-by-Test Comparison</h3>\n <div class=\"compare-table-wrapper\">\n <table class=\"compare-table\">\n <thead>\n <tr>\n <th>Test</th>\n <th>Run A Status</th>\n <th>Run B Status</th>\n <th>Score Diff</th>\n <th>Duration Diff</th>\n <th>Change</th>\n </tr>\n </thead>\n <tbody>\n @for (result of compareResults; track result) {\n <tr [ngClass]=\"{'improved': result.runA && result.runB && result.runA.status !== 'Passed' && result.runB.status === 'Passed', 'regressed': result.runA && result.runB && result.runA.status === 'Passed' && result.runB.status !== 'Passed'}\">\n <td class=\"test-name-cell\">{{ result.testName }}</td>\n <td>\n @if (result.runA) {\n <span class=\"status-chip\" [ngClass]=\"'status-' + result.runA.status.toLowerCase()\">{{ result.runA.status }}</span>\n }\n @if (!result.runA) {\n <span class=\"status-chip status-missing\">N/A</span>\n }\n </td>\n <td>\n @if (result.runB) {\n <span class=\"status-chip\" [ngClass]=\"'status-' + result.runB.status.toLowerCase()\">{{ result.runB.status }}</span>\n }\n @if (!result.runB) {\n <span class=\"status-chip status-missing\">N/A</span>\n }\n </td>\n <td>\n @if (result.scoreDiff != null) {\n <span [ngClass]=\"{'positive': result.scoreDiff > 0, 'negative': result.scoreDiff < 0}\">\n {{ result.scoreDiff > 0 ? '+' : '' }}{{ (result.scoreDiff * 100).toFixed(1) }}%\n </span>\n }\n @if (result.scoreDiff == null) {\n <span class=\"muted\">-</span>\n }\n </td>\n <td>\n @if (result.durationDiff != null) {\n <span [ngClass]=\"{'positive': result.durationDiff < 0, 'negative': result.durationDiff > 0}\">\n {{ result.durationDiff > 0 ? '+' : '' }}{{ result.durationDiff.toFixed(1) }}s\n </span>\n }\n @if (result.durationDiff == null) {\n <span class=\"muted\">-</span>\n }\n </td>\n <td>\n @if (result.runA && result.runB && result.runA.status !== 'Passed' && result.runB.status === 'Passed') {\n <span class=\"change-indicator improved\">\n <i class=\"fas fa-arrow-up\"></i> Fixed\n </span>\n }\n @if (result.runA && result.runB && result.runA.status === 'Passed' && result.runB.status !== 'Passed') {\n <span class=\"change-indicator regressed\">\n <i class=\"fas fa-arrow-down\"></i> Broke\n </span>\n }\n @if (!result.statusChanged) {\n <span class=\"change-indicator unchanged\">\n <i class=\"fas fa-minus\"></i>\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n </div>\n }\n <!-- Loading State for Compare -->\n @if (loadingCompare) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading comparison data...\"></mj-loading>\n </div>\n }\n <!-- Empty State -->\n @if (!compareRunA || !compareRunB) {\n <div class=\"compare-empty\">\n <div class=\"compare-empty-icon\">\n <i class=\"fas fa-balance-scale\"></i>\n </div>\n <h4>Select Two Runs to Compare</h4>\n <p>Choose a baseline run (A) and a comparison run (B) from the lists above to see a detailed side-by-side comparison.</p>\n </div>\n }\n <!-- No Runs State -->\n @if (runsLoaded && suiteRuns.length < 2) {\n <div class=\"empty-state\">\n <div class=\"empty-icon\">\n <i class=\"fas fa-balance-scale\"></i>\n </div>\n <h4>Not Enough Runs to Compare</h4>\n <p>You need at least 2 suite runs to use the comparison feature.</p>\n <button kendoButton (click)=\"runSuite()\" themeColor=\"primary\">\n <i class=\"fas fa-play\"></i> Run Suite Now\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Keyboard Shortcuts Toggle Button -->\n <button class=\"shortcuts-toggle\" (click)=\"toggleShortcuts()\" [title]=\"showShortcuts ? 'Hide keyboard shortcuts' : 'Show keyboard shortcuts'\">\n <i class=\"fas fa-keyboard\"></i>\n </button>\n\n <!-- Keyboard Shortcuts Hint (Desktop Only) -->\n @if (showShortcuts) {\n <div class=\"keyboard-shortcuts\">\n <div class=\"shortcuts-header\">\n <i class=\"fas fa-keyboard\"></i>\n Shortcuts\n <button class=\"shortcuts-close\" (click)=\"toggleShortcuts()\" title=\"Hide shortcuts\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n <div class=\"shortcut-list\">\n <div class=\"shortcut-item\">\n <span>Refresh</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>R</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Run Suite</span>\n <span class=\"shortcut-keys\"><kbd>Cmd</kbd><kbd>Enter</kbd></span>\n </div>\n <div class=\"shortcut-item\">\n <span>Switch Tabs</span>\n <span class=\"shortcut-keys\"><kbd>1</kbd>-<kbd>5</kbd></span>\n </div>\n </div>\n </div>\n }\n</div>\n", styles: ["/* ===========================\n Test Suite Form - World-Class UX\n =========================== */\n\n/* CSS Custom Properties for Theming - using :host for Angular encapsulation */\n:host {\n --test-primary: #2563eb;\n --test-primary-light: #3b82f6;\n --test-success: #10b981;\n --test-error: #ef4444;\n --test-warning: #f59e0b;\n --test-disabled: #6b7280;\n --test-bg: #f8fafc;\n --test-surface: #ffffff;\n --test-border: #e2e8f0;\n --test-text: #1e293b;\n --test-text-secondary: #64748b;\n --test-text-muted: #94a3b8;\n --test-radius-sm: 6px;\n --test-radius-md: 10px;\n --test-radius-lg: 16px;\n --test-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --test-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --test-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n --test-transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);\n display: block;\n height: 100%;\n}\n\n.test-suite-form {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--test-bg);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n}\n\n/* Breadcrumb */\n.breadcrumb {\n margin-bottom: 16px;\n}\n\n.breadcrumb ol {\n display: flex;\n align-items: center;\n gap: 4px;\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: 13px;\n}\n\n.breadcrumb li {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.breadcrumb a {\n color: var(--test-primary);\n text-decoration: none;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n border-radius: 6px;\n transition: background 0.15s;\n}\n\n.breadcrumb a:hover {\n background: rgba(37, 99, 235, 0.1);\n text-decoration: none;\n}\n\n.breadcrumb .separator {\n font-size: 10px;\n color: var(--test-text-muted);\n margin: 0 4px;\n}\n\n.breadcrumb .current {\n color: var(--test-text-secondary);\n font-weight: 500;\n}\n\n.breadcrumb-text {\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Header */\n.suite-header {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n padding: 20px;\n}\n\n.header-content {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 16px;\n gap: 16px;\n}\n\n.header-left {\n display: flex;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.suite-icon {\n width: 56px;\n height: 56px;\n border-radius: var(--test-radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 24px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-md);\n transition: var(--test-transition);\n}\n\n.suite-icon:hover { transform: scale(1.05); }\n\n.suite-info { flex: 1; min-width: 0; }\n\n.suite-info h1 {\n margin: 0 0 8px 0;\n font-size: clamp(18px, 4vw, 24px);\n font-weight: 700;\n color: var(--test-text);\n word-wrap: break-word;\n}\n\n.suite-meta {\n display: flex;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border-radius: 20px;\n color: white;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-badge.status-active { background: linear-gradient(135deg, var(--test-success) 0%, #059669 100%); }\n.status-badge.status-disabled { background: linear-gradient(135deg, var(--test-disabled) 0%, #4b5563 100%); }\n.status-badge.status-pending { background: linear-gradient(135deg, var(--test-warning) 0%, #d97706 100%); }\n\n.status-badge-inline {\n display: inline-flex;\n padding: 2px 10px;\n border-radius: 10px;\n color: white;\n font-size: 11px;\n font-weight: 600;\n}\n\n.status-badge-inline.status-active { background: var(--test-success); }\n.status-badge-inline.status-disabled { background: var(--test-disabled); }\n.status-badge-inline.status-pending { background: var(--test-warning); }\n\n.test-count {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 14px;\n color: var(--test-text-secondary);\n padding: 4px 10px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.suite-description {\n padding: 16px;\n background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.suite-description p {\n margin: 0;\n color: var(--test-text-secondary);\n line-height: 1.6;\n font-size: 14px;\n}\n\n/* Tabs */\n.tabs-container {\n background: var(--test-surface);\n border-bottom: 1px solid var(--test-border);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.tabs {\n display: flex;\n padding: 0 20px;\n overflow-x: auto;\n scrollbar-width: none;\n}\n\n.tabs::-webkit-scrollbar { display: none; }\n\n.tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 18px;\n border: none;\n background: transparent;\n border-bottom: 3px solid transparent;\n color: var(--test-text-secondary);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n white-space: nowrap;\n}\n\n.tab:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.tab.active {\n color: var(--test-primary);\n border-bottom-color: var(--test-primary);\n font-weight: 600;\n}\n\n.tab-badge {\n background: var(--test-border);\n color: var(--test-text-secondary);\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.tab.active .tab-badge {\n background: rgba(37, 99, 235, 0.15);\n color: var(--test-primary);\n}\n\n.tab-shortcut {\n font-size: 10px;\n color: var(--test-text-muted);\n background: var(--test-bg);\n padding: 2px 6px;\n border-radius: 4px;\n font-weight: 600;\n}\n\n/* Tab Content */\n.tab-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* Overview Tab */\n.overview-tab {\n display: flex;\n flex-direction: column;\n gap: 20px;\n animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; transform: translateY(10px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n.info-section, .config-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.info-section h3, .config-section h3 {\n margin: 0 0 20px 0;\n font-size: 18px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.info-section h3 i, .config-section h3 i {\n color: var(--test-primary);\n}\n\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.info-label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--test-text);\n font-weight: 500;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n gap: 20px;\n}\n\n.config-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.config-item label {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.config-input {\n padding: 10px 14px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.config-input:focus {\n outline: none;\n border-color: var(--test-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.config-hint {\n font-size: 11px;\n color: var(--test-text-muted);\n}\n\n/* Tests Tab */\n.tests-tab, .runs-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n.loading-state { padding: 0; }\n\n.skeleton-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.skeleton-card {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.skeleton-sequence {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-icon {\n width: 40px;\n height: 40px;\n border-radius: var(--test-radius-md);\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.skeleton-line {\n height: 14px;\n border-radius: 4px;\n background: linear-gradient(90deg, #e2e8f0 25%, #f1f5f9 50%, #e2e8f0 75%);\n background-size: 200% 100%;\n animation: shimmer 1.5s infinite;\n}\n\n.skeleton-line.wide { width: 70%; }\n.skeleton-line.narrow { width: 40%; }\n\n@keyframes shimmer {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n.tests-list, .runs-list {\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.test-item, .run-item {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 16px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.test-item:hover, .run-item:hover {\n background: rgba(37, 99, 235, 0.05);\n border-color: var(--test-primary-light);\n transform: translateX(4px);\n}\n\n.test-sequence {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n font-size: 14px;\n font-weight: 700;\n color: var(--test-text-secondary);\n flex-shrink: 0;\n}\n\n.test-icon, .run-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--test-radius-md);\n color: white;\n font-size: 18px;\n flex-shrink: 0;\n box-shadow: var(--test-shadow-sm);\n}\n\n.test-icon {\n background: linear-gradient(135deg, var(--test-primary) 0%, #1d4ed8 100%);\n}\n\n.test-content, .run-content { flex: 1; min-width: 0; }\n\n.test-name, .run-header {\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n margin-bottom: 4px;\n}\n\n.run-header {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.run-id { font-weight: 600; }\n\n.run-status {\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n}\n\n.test-status, .run-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--test-text-secondary);\n}\n\n.test-status span, .run-meta span {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.test-item > i, .run-item > i {\n color: var(--test-text-muted);\n font-size: 14px;\n transition: var(--test-transition);\n}\n\n.test-item:hover > i, .run-item:hover > i {\n color: var(--test-primary);\n transform: translateX(2px);\n}\n\n/* Empty States */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n}\n\n.empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin-bottom: 20px;\n}\n\n.empty-icon i {\n font-size: 36px;\n color: var(--test-text-muted);\n}\n\n.empty-state h4 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.empty-state p {\n margin: 0 0 20px 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 300px;\n}\n\n/* Keyboard Shortcuts */\n/* Keyboard shortcuts toggle button - visible when shortcuts are hidden */\n.shortcuts-toggle {\n position: fixed;\n bottom: 20px;\n right: 20px;\n width: 36px;\n height: 36px;\n border-radius: 50%;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n box-shadow: var(--test-shadow-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--test-text-secondary);\n font-size: 14px;\n z-index: 99;\n transition: var(--test-transition);\n opacity: 0.7;\n}\n\n.shortcuts-toggle:hover {\n opacity: 1;\n transform: scale(1.1);\n color: var(--test-primary);\n border-color: var(--test-primary);\n}\n\n.keyboard-shortcuts {\n position: fixed;\n bottom: 20px;\n right: 20px;\n background: var(--test-surface);\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-md);\n padding: 12px 16px;\n box-shadow: var(--test-shadow-lg);\n font-size: 12px;\n z-index: 100;\n max-width: 260px;\n}\n\n.shortcuts-header {\n display: flex;\n align-items: center;\n gap: 6px;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text);\n}\n\n.shortcuts-close {\n margin-left: auto;\n background: none;\n border: none;\n cursor: pointer;\n color: var(--test-text-muted);\n font-size: 12px;\n padding: 2px 4px;\n border-radius: 4px;\n transition: var(--test-transition);\n}\n\n.shortcuts-close:hover {\n color: var(--test-text);\n background: var(--test-border);\n}\n\n.shortcut-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.shortcut-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: var(--test-text-secondary);\n}\n\n.shortcut-keys {\n display: flex;\n gap: 4px;\n}\n\n.shortcut-keys kbd {\n background: var(--test-bg);\n border: 1px solid var(--test-border);\n border-radius: 4px;\n padding: 2px 6px;\n font-size: 11px;\n color: var(--test-text);\n}\n\n/* Responsive */\n@media (max-width: 1024px) {\n .keyboard-shortcuts, .shortcuts-toggle { display: none; }\n}\n\n@media (max-width: 768px) {\n .suite-header { padding: 16px; }\n\n .header-content {\n flex-direction: column;\n gap: 16px;\n }\n\n .header-actions {\n width: 100%;\n justify-content: stretch;\n }\n\n .header-actions button { flex: 1; }\n\n .tab-shortcut { display: none; }\n\n .info-grid { grid-template-columns: 1fr; }\n\n .test-item, .run-item { padding: 14px; }\n}\n\n@media (max-width: 480px) {\n .suite-icon {\n width: 40px;\n height: 40px;\n font-size: 18px;\n }\n\n .suite-info h1 { font-size: 16px; }\n\n .tab-badge { display: none; }\n\n .test-sequence { display: none; }\n}\n\n@media (hover: none) and (pointer: coarse) {\n .test-item:active, .run-item:active {\n background: rgba(37, 99, 235, 0.1);\n transform: scale(0.98);\n }\n\n .tab { min-height: 48px; }\n .test-item, .run-item { min-height: 64px; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n transition-duration: 0.01ms !important;\n }\n}\n\n@media print {\n .header-actions, .tabs-container, .keyboard-shortcuts {\n display: none !important;\n }\n}\n\n/* ===========================\n Tags UI\n =========================== */\n.run-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n margin-top: 8px;\n}\n\n.tag-chip {\n display: inline-flex;\n align-items: center;\n padding: 3px 10px;\n background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);\n border: 1px solid #bfdbfe;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 500;\n color: #1d4ed8;\n}\n\n.tag-mini {\n display: inline-flex;\n align-items: center;\n padding: 2px 6px;\n background: #f1f5f9;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 500;\n color: #64748b;\n}\n\n.tag-more {\n font-size: 10px;\n color: #94a3b8;\n font-weight: 500;\n}\n\n/* Evaluation metrics row for Runs list */\n.run-eval-metrics {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n}\n\n.eval-metric {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 6px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.eval-metric.status {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.eval-metric.status.status-completed {\n background: #dcfce7;\n color: #166534;\n}\n\n.eval-metric.status.status-failed {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.eval-metric.status.status-running {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.eval-metric.status.status-pending {\n background: #fef3c7;\n color: #92400e;\n}\n\n.eval-metric.human {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #f59e0b;\n color: #92400e;\n}\n\n.eval-metric.human .eval-pending {\n font-size: 9px;\n color: #d97706;\n}\n\n.eval-metric.auto {\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n}\n\n.eval-metric.auto.high {\n background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%);\n border: 1px solid #86efac;\n color: #166534;\n}\n\n.eval-metric.auto.medium {\n background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%);\n border: 1px solid #fcd34d;\n color: #92400e;\n}\n\n.eval-metric.auto.low {\n background: linear-gradient(135deg, #fee2e2 0%, #fecaca 100%);\n border: 1px solid #fca5a5;\n color: #991b1b;\n}\n\n.tag-cell {\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.tag-chip-table {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 80px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* ===========================\n Analytics Tab\n =========================== */\n.analytics-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n/* Collapsible filters */\n.analytics-filters {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-bottom: 16px;\n box-shadow: var(--test-shadow-sm);\n overflow: hidden;\n}\n\n.analytics-filters.collapsed {\n margin-bottom: 12px;\n}\n\n.filters-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n cursor: pointer;\n user-select: none;\n transition: background 0.15s ease;\n}\n\n.filters-header:hover {\n background: var(--test-bg);\n}\n\n.filters-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--test-text-secondary);\n}\n\n.filters-title i {\n color: var(--test-primary);\n}\n\n.filter-summary {\n font-weight: 400;\n color: var(--test-text-muted);\n margin-left: 8px;\n}\n\n.filters-header > i {\n color: var(--test-text-muted);\n font-size: 12px;\n}\n\n.filters-content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 12px 16px 16px 16px;\n border-top: 1px solid var(--test-border);\n}\n\n.filter-group {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.filter-group label {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--test-text-muted);\n}\n\n.filter-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.filter-btn {\n padding: 8px 16px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n background: var(--test-surface);\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.filter-btn:hover {\n border-color: var(--test-primary);\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.filter-btn.active {\n background: var(--test-primary);\n border-color: var(--test-primary);\n color: white;\n}\n\n.filter-btn.tag-btn {\n padding: 6px 12px;\n font-size: 12px;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n}\n\n.filter-btn.tag-btn i.fa-check {\n font-size: 10px;\n}\n\n.filter-btn.tag-btn.all-tags-btn {\n font-weight: 600;\n}\n\n.filter-btn.tag-btn.all-tags-btn i {\n font-size: 11px;\n}\n\n.filter-hint {\n font-weight: 400;\n font-size: 10px;\n color: var(--test-primary);\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-filters {\n max-height: 120px;\n overflow-y: auto;\n}\n\n/* KPI Cards */\n.analytics-kpis {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.kpi-card {\n display: flex;\n align-items: center;\n gap: 16px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n transition: var(--test-transition);\n}\n\n.kpi-card:hover {\n transform: translateY(-2px);\n box-shadow: var(--test-shadow-md);\n}\n\n.kpi-icon {\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #eff6ff;\n border-radius: var(--test-radius-md);\n color: var(--test-primary);\n font-size: 20px;\n}\n\n.kpi-icon.success {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-icon.info {\n background: #f0f9ff;\n color: #0ea5e9;\n}\n\n.kpi-icon.warning {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.kpi-content {\n flex: 1;\n min-width: 0;\n}\n\n.kpi-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n line-height: 1.2;\n}\n\n.kpi-label {\n font-size: 12px;\n color: var(--test-text-secondary);\n margin-top: 2px;\n}\n\n.kpi-trend {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n font-weight: 600;\n margin-top: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n background: #f1f5f9;\n color: var(--test-text-secondary);\n}\n\n.kpi-trend.trend-up {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.kpi-trend.trend-down {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n/* Analytics Table */\n.analytics-table-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.analytics-table-section h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.analytics-table-section h3 i {\n color: var(--test-primary);\n}\n\n.analytics-table-wrapper {\n overflow-x: auto;\n margin: 0 -24px;\n padding: 0 24px;\n}\n\n.analytics-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.analytics-table th {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.analytics-table td {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.analytics-table tbody tr.clickable-row {\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.analytics-table tbody tr.clickable-row:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.status-chip {\n display: inline-flex;\n align-items: center;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.status-chip.status-completed { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-passed { background: #ecfdf5; color: var(--test-success); }\n.status-chip.status-failed { background: #fef2f2; color: var(--test-error); }\n.status-chip.status-error { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-running { background: #eff6ff; color: var(--test-primary); }\n.status-chip.status-pending { background: #f5f3ff; color: #8b5cf6; }\n.status-chip.status-cancelled { background: #f1f5f9; color: var(--test-disabled); }\n.status-chip.status-missing { background: #f1f5f9; color: var(--test-text-muted); }\n.status-chip.status-timeout { background: #fffbeb; color: var(--test-warning); }\n.status-chip.status-skipped { background: #f1f5f9; color: var(--test-disabled); }\n\n.pass-rate-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 100px;\n}\n\n.pass-rate-bar {\n height: 6px;\n border-radius: 3px;\n background: var(--test-success);\n transition: width 0.3s ease;\n max-width: 60px;\n}\n\n.pass-rate-bar.medium { background: var(--test-warning); }\n.pass-rate-bar.low { background: var(--test-error); }\n\n/* Analytics Sub-navigation */\n.analytics-subnav {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 8px;\n margin-bottom: 20px;\n box-shadow: var(--test-shadow-sm);\n display: inline-flex;\n}\n\n.subnav-tabs {\n display: flex;\n gap: 4px;\n background: var(--test-bg);\n border-radius: var(--test-radius-md);\n padding: 4px;\n}\n\n.subnav-tab {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 20px;\n border: none;\n border-radius: var(--test-radius-sm);\n background: transparent;\n color: var(--test-text-secondary);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.subnav-tab:hover {\n color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.subnav-tab.active {\n background: var(--test-surface);\n color: var(--test-primary);\n box-shadow: var(--test-shadow-sm);\n}\n\n.subnav-tab i {\n font-size: 14px;\n}\n\n/* Matrix View */\n.matrix-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 16px;\n box-shadow: var(--test-shadow-sm);\n display: flex;\n flex-direction: column;\n max-height: calc(100vh - 280px);\n min-height: 300px;\n}\n\n.matrix-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 12px;\n margin-bottom: 12px;\n padding-bottom: 12px;\n border-bottom: 1px solid var(--test-border);\n flex-shrink: 0;\n}\n\n.matrix-header-right {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.matrix-header h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.matrix-header h3 i {\n color: var(--test-primary);\n}\n\n.matrix-run-count {\n font-size: 12px;\n color: var(--test-text-muted);\n font-weight: 500;\n}\n\n/* Matrix filter input */\n.matrix-filter-input {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f8fafc;\n border: 1px solid var(--test-border);\n border-radius: 6px;\n padding: 4px 10px;\n min-width: 180px;\n}\n\n.matrix-filter-input i.fa-search {\n color: #94a3b8;\n font-size: 12px;\n}\n\n.matrix-filter-input .filter-input {\n border: none;\n background: transparent;\n outline: none;\n font-size: 12px;\n color: var(--test-text);\n width: 100%;\n}\n\n.matrix-filter-input .filter-input::placeholder {\n color: #94a3b8;\n}\n\n.clear-filter-btn {\n border: none;\n background: none;\n padding: 2px 4px;\n cursor: pointer;\n color: #94a3b8;\n font-size: 10px;\n border-radius: 3px;\n transition: all 0.15s ease;\n}\n\n.clear-filter-btn:hover {\n background: #e2e8f0;\n color: #64748b;\n}\n\n/* Scrollable matrix container with fixed height */\n.matrix-scroll-container {\n flex: 1;\n overflow: auto;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n}\n\n.test-matrix {\n display: table;\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.test-matrix thead {\n display: table-header-group;\n}\n\n.test-matrix thead tr {\n display: table-row;\n}\n\n.test-matrix tbody {\n display: table-row-group;\n}\n\n.test-matrix tbody tr {\n display: table-row;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n\n.test-matrix tbody tr:hover {\n background-color: rgba(59, 130, 246, 0.05);\n}\n\n.test-matrix tbody tr.row-selected {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix tbody tr.row-selected td {\n border-top: 1px solid rgba(59, 130, 246, 0.3);\n border-bottom: 1px solid rgba(59, 130, 246, 0.3);\n}\n\n.test-matrix tbody tr.row-selected .seq-cell,\n.test-matrix tbody tr.row-selected .test-name-cell {\n background-color: rgba(59, 130, 246, 0.12) !important;\n}\n\n.test-matrix tfoot {\n display: table-footer-group;\n}\n\n.test-matrix th,\n.test-matrix td {\n display: table-cell;\n border: 1px solid var(--test-border);\n padding: 8px 12px;\n text-align: center;\n vertical-align: middle;\n}\n\n.test-matrix th {\n background: var(--test-bg);\n font-weight: 600;\n font-size: 11px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n position: sticky;\n top: 0;\n z-index: 10;\n border-bottom: 3px solid #475569 !important;\n}\n\n/* Sequence column - shared styles */\n.test-matrix .seq-header,\n.test-matrix .seq-cell {\n width: 36px;\n min-width: 36px;\n max-width: 36px;\n text-align: center;\n position: sticky;\n left: 0;\n font-size: 11px;\n color: #64748b;\n border-right: 1px solid var(--test-border);\n padding: 6px 4px !important;\n}\n\n/* Seq header - sticky top AND left, highest z-index */\n.test-matrix .seq-header {\n cursor: pointer;\n font-weight: 600;\n background: var(--test-bg);\n z-index: 12; /* Higher than other headers */\n top: 0;\n}\n\n/* Seq body cells - sticky left only, lower z-index */\n.test-matrix .seq-cell {\n background: var(--test-surface);\n z-index: 2;\n}\n\n.test-matrix .seq-header i {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.6;\n}\n\n.test-matrix .seq-header:hover {\n background: #f1f5f9;\n}\n\n.test-matrix .test-name-header {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-bg);\n z-index: 11;\n border-right: 2px solid var(--test-border);\n cursor: pointer;\n}\n\n.test-matrix .test-name-header i {\n font-size: 9px;\n margin-left: 4px;\n opacity: 0.6;\n}\n\n.test-matrix .test-name-header:hover {\n background: #f1f5f9;\n}\n\n.test-matrix .run-header {\n min-width: 120px;\n width: 120px;\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n/* Spacer column absorbs extra width */\n.test-matrix .spacer-header,\n.test-matrix .spacer-cell {\n width: 100%;\n min-width: 20px;\n background: var(--test-bg);\n border: none;\n}\n\n.test-matrix .spacer-cell {\n background: var(--test-surface);\n}\n\n.test-matrix .run-header:hover {\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-header-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.run-date {\n font-size: 12px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.run-pass-rate {\n font-size: 11px;\n font-weight: 700;\n padding: 2px 8px;\n border-radius: 10px;\n}\n\n.run-pass-rate.high {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.run-pass-rate.medium {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.run-pass-rate.low {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.run-tags {\n display: flex;\n gap: 4px;\n}\n\n.tag-tiny {\n font-size: 9px;\n padding: 2px 6px;\n background: #eff6ff;\n color: var(--test-primary);\n border-radius: 8px;\n white-space: nowrap;\n max-width: 60px;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Matrix column header tags - emphasized */\n.run-tags-header {\n display: flex;\n flex-wrap: wrap;\n gap: 3px;\n justify-content: center;\n margin-bottom: 4px;\n}\n\n.tag-chip-header {\n display: inline-block;\n padding: 3px 8px;\n background: linear-gradient(135deg, #dbeafe 0%, #bfdbfe 100%);\n border: 1px solid #93c5fd;\n color: #1d4ed8;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n white-space: nowrap;\n max-width: 70px;\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n letter-spacing: normal;\n}\n\n.tag-more-header {\n font-size: 9px;\n color: var(--test-text-secondary);\n padding: 2px 4px;\n}\n\n.test-matrix .test-name-cell {\n text-align: left;\n min-width: 150px;\n max-width: 500px;\n width: auto;\n position: sticky;\n left: 36px;\n background: var(--test-surface);\n z-index: 2;\n border-right: 2px solid var(--test-border);\n padding: 6px 10px !important;\n}\n\n.test-name {\n display: block;\n white-space: nowrap;\n font-weight: 500;\n color: var(--test-text);\n font-size: 12px;\n}\n\n.result-cell {\n position: relative;\n min-width: 120px;\n width: 120px;\n transition: var(--test-transition);\n}\n\n.result-cell.clickable {\n cursor: pointer;\n}\n\n.result-cell.clickable:hover {\n transform: scale(1.1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n z-index: 5;\n}\n\n.result-cell i {\n font-size: 14px;\n}\n\n/* Completed cells have neutral white background - pills tell the story */\n.result-cell.cell-passed,\n.result-cell.cell-failed,\n.result-cell.cell-error,\n.result-cell.cell-timeout,\n.result-cell.cell-running,\n.result-cell.cell-pending {\n background: #ffffff;\n color: var(--test-text);\n}\n\n/* Skipped/not-run cells get hatched background */\n.result-cell.cell-skipped {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: var(--test-disabled);\n}\n\n.result-cell.cell-none {\n background: #f8fafc;\n color: var(--test-text-muted);\n}\n\n.cell-score {\n display: block;\n font-size: 10px;\n font-weight: 600;\n margin-top: 2px;\n}\n\n/* Matrix cell evaluation stack - shows multiple eval types horizontally */\n.cell-eval-stack {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-wrap: nowrap;\n}\n\n.result-cell.multi-eval {\n min-width: 120px;\n width: auto;\n}\n\n/* Add timeout status icon */\n.cell-status.status-timeout {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-status.status-failed {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-status.status-error {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-status.status-skipped {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running {\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-status.status-pending {\n background: #f3e8ff;\n color: #7c3aed;\n}\n\n.cell-human {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n background: #fef3c7;\n color: #d97706;\n font-size: 10px;\n}\n\n.cell-auto {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n background: #dbeafe;\n color: #1d4ed8;\n}\n\n.cell-auto.high {\n background: #dcfce7;\n color: #166534;\n}\n\n.cell-auto.medium {\n background: #fef3c7;\n color: #92400e;\n}\n\n.cell-auto.low {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.cell-none-indicator {\n color: var(--test-text-muted);\n opacity: 0.5;\n}\n\n.matrix-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n}\n\n.matrix-info i {\n color: var(--test-primary);\n}\n\n/* ===========================\n Chart View\n =========================== */\n.chart-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.chart-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 16px;\n margin-bottom: 20px;\n padding-bottom: 16px;\n border-bottom: 1px solid var(--test-border);\n}\n\n.chart-header h3 {\n display: flex;\n align-items: center;\n gap: 10px;\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.chart-header h3 i {\n color: var(--test-primary);\n}\n\n.chart-legend {\n display: flex;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.chart-legend .legend-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 500;\n padding: 4px 10px;\n border-radius: 12px;\n}\n\n.chart-legend .legend-item.chart-passed {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.chart-legend .legend-item.chart-failed {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.chart-legend .legend-item.chart-error {\n background: #fffbeb;\n color: var(--test-warning);\n}\n\n.chart-legend .legend-item.chart-skipped {\n background: #f1f5f9;\n color: var(--test-disabled);\n}\n\n.chart-container {\n min-height: 500px;\n position: relative;\n overflow: hidden;\n background: linear-gradient(135deg, #fafbff 0%, #f8fafc 100%);\n border-radius: var(--test-radius-md);\n border: 1px solid var(--test-border);\n}\n\n.d3-chart {\n width: 100%;\n height: 500px;\n}\n\n.d3-chart svg {\n width: 100%;\n height: 100%;\n}\n\n/* D3 Chart Node Styles */\n.d3-chart .node {\n cursor: pointer;\n transition: transform 0.2s ease;\n}\n\n.d3-chart .node:hover {\n transform: scale(1.05);\n}\n\n.d3-chart .node-label {\n font-size: 11px;\n font-weight: 500;\n fill: var(--test-text);\n pointer-events: none;\n}\n\n.d3-chart .link {\n fill: none;\n stroke-opacity: 0.4;\n transition: stroke-opacity 0.2s ease;\n}\n\n.d3-chart .link:hover {\n stroke-opacity: 0.8;\n}\n\n.d3-chart .tooltip {\n position: absolute;\n padding: 10px 14px;\n background: rgba(30, 41, 59, 0.95);\n color: white;\n border-radius: 8px;\n font-size: 12px;\n pointer-events: none;\n z-index: 100;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n max-width: 250px;\n}\n\n.d3-chart .tooltip-title {\n font-weight: 600;\n margin-bottom: 4px;\n}\n\n.d3-chart .tooltip-value {\n opacity: 0.8;\n}\n\n.chart-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: var(--test-text-muted);\n padding: 12px;\n background: var(--test-bg);\n border-radius: var(--test-radius-sm);\n margin-top: 16px;\n}\n\n.chart-info i {\n color: var(--test-primary);\n}\n\n/* ===========================\n Compare Tab\n =========================== */\n.compare-tab {\n animation: fadeIn 0.3s ease-out;\n}\n\n.compare-selection {\n display: grid;\n grid-template-columns: 1fr auto 1fr;\n gap: 24px;\n align-items: flex-start;\n margin-bottom: 24px;\n}\n\n.compare-run-selector {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-run-selector h4 {\n margin: 0 0 16px 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.run-selector-list {\n max-height: 200px;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-bottom: 12px;\n}\n\n.run-selector-item {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n border: 1px solid var(--test-border);\n border-radius: var(--test-radius-sm);\n cursor: pointer;\n transition: var(--test-transition);\n}\n\n.run-selector-item:hover {\n border-color: var(--test-primary);\n background: rgba(37, 99, 235, 0.05);\n}\n\n.run-selector-item.selected {\n border-color: var(--test-primary);\n background: #eff6ff;\n}\n\n.run-selector-item.disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.selector-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n\n.selector-content {\n flex: 1;\n min-width: 0;\n}\n\n.selector-date {\n font-size: 12px;\n font-weight: 500;\n color: var(--test-text);\n}\n\n.selector-rate {\n font-size: 11px;\n color: var(--test-text-secondary);\n}\n\n.selector-tags {\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.selected-run-preview {\n padding: 12px;\n background: #f8fafc;\n border-radius: var(--test-radius-sm);\n border: 1px solid var(--test-border);\n}\n\n.preview-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.preview-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n}\n\n.clear-btn {\n padding: 4px 8px;\n border: none;\n background: transparent;\n color: var(--test-error);\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n}\n\n.clear-btn:hover { text-decoration: underline; }\n\n.preview-details {\n display: flex;\n justify-content: space-between;\n font-size: 12px;\n color: var(--test-text);\n}\n\n.preview-rate {\n font-weight: 600;\n color: var(--test-success);\n}\n\n.compare-vs {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: var(--test-bg);\n border-radius: 50%;\n color: var(--test-text-muted);\n font-size: 16px;\n align-self: center;\n margin-top: 60px;\n}\n\n/* Compare Results */\n.compare-results {\n animation: fadeIn 0.3s ease-out;\n}\n\n.compare-summary {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n gap: 16px;\n margin-bottom: 24px;\n}\n\n.compare-summary-card {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 20px;\n box-shadow: var(--test-shadow-sm);\n text-align: center;\n}\n\n.compare-summary-card .summary-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n color: var(--test-text-muted);\n margin-bottom: 8px;\n}\n\n.compare-summary-card .summary-value {\n font-size: 24px;\n font-weight: 700;\n color: var(--test-text);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n}\n\n.compare-summary-card .summary-value.positive { color: var(--test-success); }\n.compare-summary-card .summary-value.negative { color: var(--test-error); }\n\n.compare-summary-card.improved {\n border-left: 4px solid var(--test-success);\n}\n\n.compare-summary-card.improved .summary-value { color: var(--test-success); }\n\n.compare-summary-card.regressed {\n border-left: 4px solid var(--test-error);\n}\n\n.compare-summary-card.regressed .summary-value { color: var(--test-error); }\n\n/* Compare Table */\n.compare-table-section {\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n padding: 24px;\n box-shadow: var(--test-shadow-sm);\n}\n\n.compare-table-section h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--test-text);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.compare-table-section h3 i {\n color: var(--test-primary);\n}\n\n.compare-table-wrapper {\n overflow-x: auto;\n}\n\n.compare-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 13px;\n}\n\n.compare-table th {\n text-align: left;\n padding: 12px 16px;\n background: #f8fafc;\n border-bottom: 2px solid var(--test-border);\n font-weight: 600;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n font-size: 11px;\n letter-spacing: 0.5px;\n white-space: nowrap;\n}\n\n.compare-table td {\n padding: 14px 16px;\n border-bottom: 1px solid var(--test-border);\n color: var(--test-text);\n}\n\n.compare-table tbody tr.improved {\n background: rgba(16, 185, 129, 0.05);\n}\n\n.compare-table tbody tr.regressed {\n background: rgba(239, 68, 68, 0.05);\n}\n\n.test-name-cell {\n font-weight: 500;\n max-width: 200px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.positive { color: var(--test-success); }\n.negative { color: var(--test-error); }\n.muted { color: var(--test-text-muted); }\n\n.change-indicator {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 4px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.change-indicator.improved {\n background: #ecfdf5;\n color: var(--test-success);\n}\n\n.change-indicator.regressed {\n background: #fef2f2;\n color: var(--test-error);\n}\n\n.change-indicator.unchanged {\n background: #f1f5f9;\n color: var(--test-text-muted);\n}\n\n/* Compare Empty State */\n.compare-empty {\n text-align: center;\n padding: 60px 24px;\n background: var(--test-surface);\n border-radius: var(--test-radius-lg);\n margin-top: 24px;\n}\n\n.compare-empty-icon {\n width: 80px;\n height: 80px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--test-bg);\n border-radius: 50%;\n margin: 0 auto 20px;\n}\n\n.compare-empty-icon i {\n font-size: 32px;\n color: var(--test-text-muted);\n}\n\n.compare-empty h4 {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--test-text);\n}\n\n.compare-empty p {\n margin: 0;\n font-size: 14px;\n color: var(--test-text-secondary);\n max-width: 400px;\n margin: 0 auto;\n}\n\n/* Small empty state variant */\n.empty-state.small {\n padding: 32px 16px;\n}\n\n.empty-state.small p {\n margin: 0;\n}\n\n/* ===========================\n Responsive Analytics/Compare\n =========================== */\n@media (max-width: 1024px) {\n .compare-selection {\n grid-template-columns: 1fr;\n gap: 16px;\n }\n\n .compare-vs {\n margin: 0;\n align-self: center;\n justify-self: center;\n }\n\n .analytics-kpis {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n@media (max-width: 768px) {\n .filter-buttons {\n flex-direction: column;\n }\n\n .filter-btn {\n width: 100%;\n text-align: center;\n }\n\n .analytics-kpis {\n grid-template-columns: 1fr;\n }\n\n .kpi-card {\n padding: 16px;\n }\n\n .kpi-value {\n font-size: 20px;\n }\n\n .compare-summary {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .analytics-table-wrapper,\n .compare-table-wrapper {\n margin: 0 -20px;\n padding: 0 20px;\n }\n\n .run-selector-list {\n max-height: 150px;\n }\n}\n\n@media (max-width: 480px) {\n .compare-summary {\n grid-template-columns: 1fr;\n }\n\n .compare-summary-card .summary-value {\n font-size: 20px;\n }\n\n .analytics-table th,\n .analytics-table td,\n .compare-table th,\n .compare-table td {\n padding: 10px 12px;\n font-size: 12px;\n }\n}\n\n/* ===========================\n Matrix Evaluation Indicators\n =========================== */\n\n/* Human Feedback Indicators */\n.cell-human {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-human.no-feedback {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-human.no-feedback i {\n font-size: 11px;\n}\n\n.cell-human.has-feedback {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-human.has-feedback i {\n font-size: 9px;\n}\n\n.cell-human.has-feedback .rating-value {\n font-weight: 700;\n font-size: 11px;\n}\n\n/* Human rating color coding: red \u22644, yellow 5-6, light-green 7-8, green 9-10 */\n.cell-human.rating-low {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-human.rating-medium {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-human.rating-good {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-human.rating-excellent {\n background: #dcfce7;\n color: #16a34a;\n}\n\n/* Auto Score Indicators */\n.cell-auto {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 3px;\n min-width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 10px;\n}\n\n.cell-auto.no-score {\n background: #f1f5f9;\n color: #94a3b8;\n}\n\n.cell-auto.no-score i {\n font-size: 11px;\n}\n\n.cell-auto.has-score {\n padding: 0 6px;\n border-radius: 12px;\n min-width: 36px;\n}\n\n.cell-auto.has-score i {\n font-size: 9px;\n}\n\n.cell-auto.has-score .score-value {\n font-weight: 700;\n font-size: 10px;\n}\n\n/* Auto score color coding (0-100%): red <50, yellow 50-69, light-green 70-84, green 85+ */\n.cell-auto.score-low {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-auto.score-medium {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-auto.score-good {\n background: #d1fae5;\n color: #059669;\n}\n\n.cell-auto.score-excellent {\n background: #dcfce7;\n color: #16a34a;\n}\n\n/* Status indicators in matrix cells */\n.cell-status {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n border-radius: 50%;\n font-size: 11px;\n}\n\n.cell-status.status-passed {\n background: #dcfce7;\n color: #16a34a;\n}\n\n.cell-status.status-failed {\n background: #fee2e2;\n color: #dc2626;\n}\n\n.cell-status.status-error {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-timeout {\n background: #fef3c7;\n color: #d97706;\n}\n\n.cell-status.status-skipped,\n.cell-status.status-pending {\n background: #f1f5f9;\n color: #64748b;\n}\n\n.cell-status.status-running {\n background: #dbeafe;\n color: #2563eb;\n}\n\n/* Not-run / Skipped cells with hatch pattern */\n.result-cell.cell-not-run {\n background: repeating-linear-gradient(\n 45deg,\n #f8fafc,\n #f8fafc 4px,\n #e2e8f0 4px,\n #e2e8f0 8px\n );\n color: #94a3b8;\n}\n\n.result-cell.cell-not-run .cell-eval-stack {\n opacity: 0.6;\n}\n\n.cell-not-run-indicator {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 22px;\n height: 22px;\n color: #94a3b8;\n font-size: 11px;\n}\n\n/* ===========================\n Matrix Totals Footer Row\n =========================== */\n.test-matrix tfoot {\n position: sticky;\n bottom: 0;\n z-index: 2;\n}\n\n.totals-row {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n border-top: 2px solid var(--test-border);\n}\n\n.totals-row td {\n padding: 10px 12px;\n font-weight: 600;\n}\n\n.totals-row .totals-label {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n font-size: 12px;\n color: var(--test-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.totals-row .totals-cell {\n background: linear-gradient(to bottom, #f8fafc, #f1f5f9);\n}\n\n.totals-stack {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n}\n\n.totals-status,\n.totals-human,\n.totals-auto {\n display: flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n white-space: nowrap;\n}\n\n.totals-status {\n background: #e0f2fe;\n color: #0369a1;\n}\n\n.totals-status .pass-count {\n font-weight: 700;\n}\n\n.totals-human {\n background: #fef3c7;\n color: #92400e;\n}\n\n.totals-human .avg-label {\n font-weight: 700;\n}\n\n.totals-human .count-label {\n font-size: 10px;\n opacity: 0.8;\n}\n\n.totals-auto {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.totals-auto .avg-label {\n font-weight: 700;\n}\n\n.totals-auto .count-label {\n font-size: 10px;\n opacity: 0.8;\n}\n"] }]
|
|
3504
|
+
}], null, { chartContainer: [{
|
|
3480
3505
|
type: ViewChild,
|
|
3481
3506
|
args: ['chartContainer']
|
|
3482
3507
|
}], handleKeyboardShortcut: [{
|
|
@@ -3484,6 +3509,4 @@ export { TestSuiteFormComponentExtended };
|
|
|
3484
3509
|
args: ['document:keydown', ['$event']]
|
|
3485
3510
|
}] }); })();
|
|
3486
3511
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestSuiteFormComponentExtended, { className: "TestSuiteFormComponentExtended", filePath: "src/lib/custom/Tests/test-suite-form.component.ts", lineNumber: 31 }); })();
|
|
3487
|
-
export function LoadTestSuiteFormComponentExtended() { }
|
|
3488
|
-
LoadTestSuiteFormComponentExtended();
|
|
3489
3512
|
//# sourceMappingURL=test-suite-form.component.js.map
|