var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    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;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { Component, ChangeDetectionStrategy } from '@angular/core';
import { Subject } from 'rxjs';
import { CompositeKey, RunView } from '@memberjunction/core';
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
import { RegisterClass } from '@memberjunction/global';
import { SharedService } from '@memberjunction/ng-shared';
import { TestFormComponent } from '../../generated/Entities/Test/test.form.component';
import * as i0 from "@angular/core";
import * as i1 from "@memberjunction/ng-shared";
import * as i2 from "@angular/router";
import * as i3 from "@memberjunction/ng-testing";
import * as i4 from "@angular/common";
import * as i5 from "@angular/forms";
import * as i6 from "@progress/kendo-angular-dialog";
import * as i7 from "@progress/kendo-angular-buttons";
function TestFormComponentExtended_div_20_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 29)(1, "p");
    i0.ɵɵtext(2);
    i0.ɵɵelementEnd()();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance(2);
    i0.ɵɵtextInterpolate(ctx_r0.record.Description);
} }
function TestFormComponentExtended_div_21_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 30)(1, "div", 31)(2, "div", 32);
    i0.ɵɵtext(3, "Total Runs");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 33);
    i0.ɵɵtext(5);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(6, "div", 31)(7, "div", 32);
    i0.ɵɵtext(8, "Pass Rate");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(9, "div", 33);
    i0.ɵɵtext(10);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(11, "div", 31)(12, "div", 32);
    i0.ɵɵtext(13, "Avg Cost");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(14, "div", 33);
    i0.ɵɵtext(15);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(16, "div", 31)(17, "div", 32);
    i0.ɵɵtext(18, "Avg Duration");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(19, "div", 33);
    i0.ɵɵtext(20);
    i0.ɵɵelementEnd()()();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.testRuns.length);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate1("", ctx_r0.getPassRate().toFixed(1), "%");
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.formatCost(ctx_r0.getAverageCost()));
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.formatDuration(ctx_r0.getAverageDuration()));
} }
function TestFormComponentExtended_span_36_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span", 34);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(ctx_r0.testRuns.length);
} }
function TestFormComponentExtended_span_41_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span", 34);
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(ctx_r0.suiteTests.length);
} }
function TestFormComponentExtended_div_43_Template(rf, ctx) { if (rf & 1) {
    const _r2 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 35)(1, "div", 36)(2, "h3");
    i0.ɵɵtext(3, "Test Information");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 37)(5, "div", 38)(6, "div", 39);
    i0.ɵɵtext(7, "Name");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(8, "div", 40);
    i0.ɵɵtext(9);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(10, "div", 38)(11, "div", 39);
    i0.ɵɵtext(12, "Type");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(13, "div", 40);
    i0.ɵɵtext(14);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(15, "div", 38)(16, "div", 39);
    i0.ɵɵtext(17, "Status");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(18, "div", 40);
    i0.ɵɵtext(19);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(20, "div", 38)(21, "div", 39);
    i0.ɵɵtext(22, "Priority");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(23, "div", 40);
    i0.ɵɵtext(24);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(25, "div", 38)(26, "div", 39);
    i0.ɵɵtext(27, "Estimated Duration");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(28, "div", 40);
    i0.ɵɵtext(29);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(30, "div", 38)(31, "div", 39);
    i0.ɵɵtext(32, "Estimated Cost");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(33, "div", 40);
    i0.ɵɵtext(34);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(35, "div", 38)(36, "div", 39);
    i0.ɵɵtext(37, "Repeat Count");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(38, "div", 40);
    i0.ɵɵtext(39);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(40, "div", 38)(41, "div", 39);
    i0.ɵɵtext(42, "Created");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(43, "div", 40);
    i0.ɵɵtext(44);
    i0.ɵɵpipe(45, "date");
    i0.ɵɵelementEnd()()()();
    i0.ɵɵelementStart(46, "div", 41)(47, "h3");
    i0.ɵɵtext(48, "Test Definition");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(49, "div", 42)(50, "button", 43);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_50_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("input")); });
    i0.ɵɵtext(51, " Input Definition ");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(52, "button", 43);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_52_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("expected")); });
    i0.ɵɵtext(53, " Expected Outcomes ");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(54, "button", 43);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_54_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("config")); });
    i0.ɵɵtext(55, " Configuration ");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(56, "button", 43);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_43_Template_button_click_56_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setJsonView("tags")); });
    i0.ɵɵtext(57, " Tags ");
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(58, "div", 44)(59, "pre");
    i0.ɵɵtext(60);
    i0.ɵɵpipe(61, "json");
    i0.ɵɵelementEnd()()()();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance(9);
    i0.ɵɵtextInterpolate(ctx_r0.record.Name);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.Type);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.Status);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.Priority || "N/A");
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.EstimatedDurationSeconds ? ctx_r0.formatDuration(ctx_r0.record.EstimatedDurationSeconds) : "N/A");
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.EstimatedCostUSD ? ctx_r0.formatCost(ctx_r0.record.EstimatedCostUSD) : "N/A");
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(ctx_r0.record.RepeatCount || 1);
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(45, 17, ctx_r0.record.__mj_CreatedAt, "medium"));
    i0.ɵɵadvance(6);
    i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "input");
    i0.ɵɵadvance(2);
    i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "expected");
    i0.ɵɵadvance(2);
    i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "config");
    i0.ɵɵadvance(2);
    i0.ɵɵclassProp("active", ctx_r0.activeJsonView === "tags");
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(61, 20, ctx_r0.getJsonData()));
} }
function TestFormComponentExtended_div_44_Template(rf, ctx) { if (rf & 1) {
    const _r3 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 45)(1, "div", 46)(2, "h3");
    i0.ɵɵtext(3, "Execution Settings");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(4, "div", 47)(5, "div", 48)(6, "label");
    i0.ɵɵtext(7, "Priority");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(8, "input", 49);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_8_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Priority, $event) || (ctx_r0.record.Priority = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(9, "div", 48)(10, "label");
    i0.ɵɵtext(11, "Repeat Count");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(12, "input", 49);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_12_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.RepeatCount, $event) || (ctx_r0.record.RepeatCount = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(13, "div", 48)(14, "label");
    i0.ɵɵtext(15, "Estimated Duration (seconds)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(16, "input", 49);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_16_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.EstimatedDurationSeconds, $event) || (ctx_r0.record.EstimatedDurationSeconds = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(17, "div", 48)(18, "label");
    i0.ɵɵtext(19, "Estimated Cost (USD)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(20, "input", 50);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_input_ngModelChange_20_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.EstimatedCostUSD, $event) || (ctx_r0.record.EstimatedCostUSD = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()()()();
    i0.ɵɵelementStart(21, "div", 46)(22, "h3");
    i0.ɵɵtext(23, "Input Definition (JSON)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(24, "textarea", 51);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_24_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.InputDefinition, $event) || (ctx_r0.record.InputDefinition = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(25, "div", 46)(26, "h3");
    i0.ɵɵtext(27, "Expected Outcomes (JSON)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(28, "textarea", 51);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.ExpectedOutcomes, $event) || (ctx_r0.record.ExpectedOutcomes = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(29, "div", 46)(30, "h3");
    i0.ɵɵtext(31, "Configuration (JSON)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(32, "textarea", 51);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_32_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Configuration, $event) || (ctx_r0.record.Configuration = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(33, "div", 46)(34, "h3");
    i0.ɵɵtext(35, "Tags (JSON Array)");
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(36, "textarea", 52);
    i0.ɵɵtwoWayListener("ngModelChange", function TestFormComponentExtended_div_44_Template_textarea_ngModelChange_36_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r0.record.Tags, $event) || (ctx_r0.record.Tags = $event); return i0.ɵɵresetView($event); });
    i0.ɵɵelementEnd()()();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance(8);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Priority);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.RepeatCount);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.EstimatedDurationSeconds);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.EstimatedCostUSD);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.InputDefinition);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.ExpectedOutcomes);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Configuration);
    i0.ɵɵadvance(4);
    i0.ɵɵtwoWayProperty("ngModel", ctx_r0.record.Tags);
} }
function TestFormComponentExtended_div_45_div_1_div_1_span_13_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span");
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const run_r5 = i0.ɵɵnextContext().$implicit;
    const ctx_r0 = i0.ɵɵnextContext(3);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(ctx_r0.formatDuration(run_r5.DurationSeconds));
} }
function TestFormComponentExtended_div_45_div_1_div_1_span_14_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span");
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const run_r5 = i0.ɵɵnextContext().$implicit;
    const ctx_r0 = i0.ɵɵnextContext(3);
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(ctx_r0.formatCost(run_r5.CostUSD));
} }
function TestFormComponentExtended_div_45_div_1_div_1_span_15_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "span");
    i0.ɵɵtext(1);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const run_r5 = i0.ɵɵnextContext().$implicit;
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate1("Score: ", run_r5.Score.toFixed(4), "");
} }
function TestFormComponentExtended_div_45_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
    const _r4 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 58);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_45_div_1_div_1_Template_div_click_0_listener() { const run_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openTestRun(run_r5.ID)); });
    i0.ɵɵelementStart(1, "div", 59);
    i0.ɵɵelement(2, "i", 60);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(3, "div", 61)(4, "div", 62)(5, "span", 63);
    i0.ɵɵtext(6);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(7, "span", 64);
    i0.ɵɵtext(8);
    i0.ɵɵelementEnd()();
    i0.ɵɵelementStart(9, "div", 65)(10, "span");
    i0.ɵɵtext(11);
    i0.ɵɵpipe(12, "date");
    i0.ɵɵelementEnd();
    i0.ɵɵtemplate(13, TestFormComponentExtended_div_45_div_1_div_1_span_13_Template, 2, 1, "span", 66)(14, TestFormComponentExtended_div_45_div_1_div_1_span_14_Template, 2, 1, "span", 66)(15, TestFormComponentExtended_div_45_div_1_div_1_span_15_Template, 2, 1, "span", 66);
    i0.ɵɵelementEnd()();
    i0.ɵɵelement(16, "i", 67);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const run_r5 = ctx.$implicit;
    i0.ɵɵadvance();
    i0.ɵɵstyleProp("background-color", run_r5.Status === "Passed" ? "#4caf50" : run_r5.Status === "Failed" ? "#f44336" : "#ff9800");
    i0.ɵɵadvance();
    i0.ɵɵclassProp("fa-check", run_r5.Status === "Passed")("fa-times", run_r5.Status === "Failed")("fa-exclamation", run_r5.Status === "Error");
    i0.ɵɵadvance(4);
    i0.ɵɵtextInterpolate1("Run #", run_r5.ID.substring(0, 8), "");
    i0.ɵɵadvance();
    i0.ɵɵstyleProp("color", run_r5.Status === "Passed" ? "#4caf50" : run_r5.Status === "Failed" ? "#f44336" : "#ff9800");
    i0.ɵɵadvance();
    i0.ɵɵtextInterpolate(run_r5.Status);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(12, 16, run_r5.StartedAt, "short"));
    i0.ɵɵadvance(2);
    i0.ɵɵproperty("ngIf", run_r5.DurationSeconds);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", run_r5.CostUSD);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", run_r5.Score != null);
} }
function TestFormComponentExtended_div_45_div_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 56);
    i0.ɵɵtemplate(1, TestFormComponentExtended_div_45_div_1_div_1_Template, 17, 19, "div", 57);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext(2);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngForOf", ctx_r0.testRuns);
} }
function TestFormComponentExtended_div_45_div_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 68);
    i0.ɵɵelement(1, "i", 69);
    i0.ɵɵelementStart(2, "p");
    i0.ɵɵtext(3, "No test runs found for this test");
    i0.ɵɵelementEnd()();
} }
function TestFormComponentExtended_div_45_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 53);
    i0.ɵɵtemplate(1, TestFormComponentExtended_div_45_div_1_Template, 2, 1, "div", 54)(2, TestFormComponentExtended_div_45_div_2_Template, 4, 0, "div", 55);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", ctx_r0.testRuns.length > 0);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", ctx_r0.testRunsLoaded && ctx_r0.testRuns.length === 0);
} }
function TestFormComponentExtended_div_46_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
    const _r6 = i0.ɵɵgetCurrentView();
    i0.ɵɵelementStart(0, "div", 74);
    i0.ɵɵlistener("click", function TestFormComponentExtended_div_46_div_1_div_1_Template_div_click_0_listener() { const suiteTest_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openTestSuite(suiteTest_r7.SuiteID)); });
    i0.ɵɵelementStart(1, "div", 75);
    i0.ɵɵelement(2, "i", 76);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(3, "div", 77)(4, "div", 78);
    i0.ɵɵtext(5);
    i0.ɵɵelementEnd();
    i0.ɵɵelementStart(6, "div", 79)(7, "span");
    i0.ɵɵtext(8);
    i0.ɵɵelementEnd()()();
    i0.ɵɵelement(9, "i", 67);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const suiteTest_r7 = ctx.$implicit;
    i0.ɵɵadvance(5);
    i0.ɵɵtextInterpolate(suiteTest_r7.Suite);
    i0.ɵɵadvance(3);
    i0.ɵɵtextInterpolate1("Sequence: ", suiteTest_r7.Sequence, "");
} }
function TestFormComponentExtended_div_46_div_1_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 72);
    i0.ɵɵtemplate(1, TestFormComponentExtended_div_46_div_1_div_1_Template, 10, 2, "div", 73);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext(2);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngForOf", ctx_r0.suiteTests);
} }
function TestFormComponentExtended_div_46_div_2_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 68);
    i0.ɵɵelement(1, "i", 69);
    i0.ɵɵelementStart(2, "p");
    i0.ɵɵtext(3, "This test is not part of any test suite");
    i0.ɵɵelementEnd()();
} }
function TestFormComponentExtended_div_46_Template(rf, ctx) { if (rf & 1) {
    i0.ɵɵelementStart(0, "div", 70);
    i0.ɵɵtemplate(1, TestFormComponentExtended_div_46_div_1_Template, 2, 1, "div", 71)(2, TestFormComponentExtended_div_46_div_2_Template, 4, 0, "div", 55);
    i0.ɵɵelementEnd();
} if (rf & 2) {
    const ctx_r0 = i0.ɵɵnextContext();
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", ctx_r0.suiteTests.length > 0);
    i0.ɵɵadvance();
    i0.ɵɵproperty("ngIf", ctx_r0.suiteTestsLoaded && ctx_r0.suiteTests.length === 0);
} }
let TestFormComponentExtended = class TestFormComponentExtended extends TestFormComponent {
    constructor(elementRef, sharedService, router, route, cdr, testingDialogService) {
        super(elementRef, sharedService, router, route, cdr);
        this.router = router;
        this.cdr = cdr;
        this.testingDialogService = testingDialogService;
        this.destroy$ = new Subject();
        // UI state
        this.activeTab = 'overview';
        this.loading = false;
        this.error = null;
        this.testRunsLoaded = false;
        this.suiteTestsLoaded = false;
        // Related data
        this.testRuns = [];
        this.suiteTests = [];
        // Parsed JSON fields
        this.parsedData = {};
        // Active JSON view
        this.activeJsonView = 'input';
    }
    async ngOnInit() {
        await super.ngOnInit();
        if (this.record && this.record.ID) {
            await this.loadRelatedData();
            this.parseJsonFields();
        }
    }
    ngOnDestroy() {
        this.destroy$.next();
        this.destroy$.complete();
    }
    async loadRelatedData() {
        this.loading = true;
        try {
            this.cdr.markForCheck();
        }
        catch (error) {
            console.error('Error loading related data:', error);
            this.error = 'Failed to load related data';
        }
        finally {
            this.loading = false;
            this.cdr.markForCheck();
        }
    }
    async loadTestRuns() {
        if (this.testRunsLoaded)
            return;
        try {
            const rv = new RunView();
            const result = await rv.RunView({
                EntityName: 'MJ: Test Runs',
                ExtraFilter: `TestID='${this.record.ID}'`,
                OrderBy: 'StartedAt DESC',
                MaxRows: 100,
                ResultType: 'entity_object'
            });
            if (result.Success) {
                this.testRuns = result.Results || [];
            }
            this.testRunsLoaded = true;
            this.cdr.markForCheck();
        }
        catch (error) {
            console.error('Error loading test runs:', error);
        }
    }
    async loadSuiteTests() {
        if (this.suiteTestsLoaded)
            return;
        try {
            const rv = new RunView();
            const result = await rv.RunView({
                EntityName: 'MJ: Test Suite Tests',
                ExtraFilter: `TestID='${this.record.ID}'`,
                OrderBy: 'Sequence',
                ResultType: 'entity_object'
            });
            if (result.Success) {
                this.suiteTests = result.Results || [];
            }
            this.suiteTestsLoaded = true;
            this.cdr.markForCheck();
        }
        catch (error) {
            console.error('Error loading suite tests:', error);
        }
    }
    parseJsonFields() {
        try {
            if (this.record.InputDefinition) {
                this.parsedData.inputDefinition = JSON.parse(this.record.InputDefinition);
            }
            if (this.record.ExpectedOutcomes) {
                this.parsedData.expectedOutcomes = JSON.parse(this.record.ExpectedOutcomes);
            }
            if (this.record.Configuration) {
                this.parsedData.configuration = JSON.parse(this.record.Configuration);
            }
            if (this.record.Tags) {
                this.parsedData.tags = JSON.parse(this.record.Tags);
            }
        }
        catch (error) {
            console.error('Error parsing JSON fields:', error);
        }
    }
    changeTab(tab) {
        this.activeTab = tab;
        // Lazy load tabs
        if (tab === 'runs' && !this.testRunsLoaded) {
            this.loadTestRuns();
        }
        if (tab === 'suites' && !this.suiteTestsLoaded) {
            this.loadSuiteTests();
        }
        this.cdr.markForCheck();
    }
    setJsonView(view) {
        this.activeJsonView = view;
        this.cdr.markForCheck();
    }
    getStatusColor() {
        switch (this.record.Status) {
            case 'Active': return '#4caf50';
            case 'Disabled': return '#9e9e9e';
            case 'Pending': return '#ffc107';
            default: return '#999';
        }
    }
    getStatusIcon() {
        switch (this.record.Status) {
            case 'Active': return 'fa-circle-check';
            case 'Disabled': return 'fa-circle-stop';
            case 'Pending': return 'fa-circle-pause';
            default: return 'fa-circle-question';
        }
    }
    getPassRate() {
        if (this.testRuns.length === 0)
            return 0;
        const passed = this.testRuns.filter(r => r.Status === 'Passed').length;
        return (passed / this.testRuns.length) * 100;
    }
    getAverageCost() {
        if (this.testRuns.length === 0)
            return 0;
        const totalCost = this.testRuns.reduce((sum, r) => sum + (r.CostUSD || 0), 0);
        return totalCost / this.testRuns.length;
    }
    getAverageDuration() {
        if (this.testRuns.length === 0)
            return 0;
        const totalDuration = this.testRuns.reduce((sum, r) => sum + (r.DurationSeconds || 0), 0);
        return totalDuration / this.testRuns.length;
    }
    formatDuration(seconds) {
        if (seconds < 60)
            return `${seconds.toFixed(1)}s`;
        if (seconds < 3600) {
            const mins = Math.floor(seconds / 60);
            const secs = Math.floor(seconds % 60);
            return `${mins}m ${secs}s`;
        }
        const hours = Math.floor(seconds / 3600);
        const mins = Math.floor((seconds % 3600) / 60);
        return `${hours}h ${mins}m`;
    }
    formatCost(cost) {
        return `$${cost.toFixed(6)}`;
    }
    openTestRun(runId) {
        SharedService.Instance.OpenEntityRecord('MJ: Test Runs', CompositeKey.FromID(runId));
    }
    openTestSuite(suiteId) {
        SharedService.Instance.OpenEntityRecord('MJ: Test Suites', CompositeKey.FromID(suiteId));
    }
    async runTest() {
        if (this.record?.ID) {
            this.testingDialogService.OpenTestDialog(this.record.ID);
        }
    }
    async refresh() {
        await this.loadRelatedData();
        if (this.testRunsLoaded) {
            this.testRunsLoaded = false;
            await this.loadTestRuns();
        }
        if (this.suiteTestsLoaded) {
            this.suiteTestsLoaded = false;
            await this.loadSuiteTests();
        }
        this.cdr.markForCheck();
    }
    getJsonData() {
        switch (this.activeJsonView) {
            case 'input': return this.parsedData.inputDefinition;
            case 'expected': return this.parsedData.expectedOutcomes;
            case 'config': return this.parsedData.configuration;
            case 'tags': return this.parsedData.tags;
            default: return null;
        }
    }
    static { this.ɵfac = function TestFormComponentExtended_Factory(t) { return new (t || TestFormComponentExtended)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i3.TestingDialogService)); }; }
    static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestFormComponentExtended, selectors: [["mj-test-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 47, vars: 24, consts: [["kendoDialogContainer", "", 1, "test-form"], [1, "test-header"], [1, "header-content"], [1, "header-left"], [1, "test-icon"], [1, "fas", "fa-flask"], [1, "test-info"], [1, "test-meta"], [1, "status-badge"], [1, "fas", 3, "ngClass"], [1, "test-type"], [1, "header-actions"], ["kendoButton", "", "icon", "play", 3, "click"], ["kendoButton", "", "icon", "sync", 3, "click"], ["class", "test-description", 4, "ngIf"], ["class", "metrics-bar", 4, "ngIf"], [1, "tabs-container"], [1, "tabs"], [1, "tab", 3, "click"], [1, "fas", "fa-th-large"], [1, "fas", "fa-sliders-h"], [1, "fas", "fa-list"], ["class", "tab-badge", 4, "ngIf"], [1, "fas", "fa-layer-group"], [1, "tab-content"], ["class", "overview-tab", 4, "ngIf"], ["class", "config-tab", 4, "ngIf"], ["class", "runs-tab", 4, "ngIf"], ["class", "suites-tab", 4, "ngIf"], [1, "test-description"], [1, "metrics-bar"], [1, "metric-card"], [1, "metric-label"], [1, "metric-value"], [1, "tab-badge"], [1, "overview-tab"], [1, "info-section"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "json-section"], [1, "json-tabs"], [1, "json-tab", 3, "click"], [1, "json-content"], [1, "config-tab"], [1, "config-section"], [1, "config-grid"], [1, "config-item"], ["type", "number", 1, "config-input", 3, "ngModelChange", "ngModel"], ["type", "number", "step", "0.000001", 1, "config-input", 3, "ngModelChange", "ngModel"], ["rows", "10", 1, "json-editor", 3, "ngModelChange", "ngModel"], ["rows", "5", 1, "json-editor", 3, "ngModelChange", "ngModel"], [1, "runs-tab"], ["class", "runs-list", 4, "ngIf"], ["class", "no-data", 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"], [4, "ngIf"], [1, "fas", "fa-chevron-right"], [1, "no-data"], [1, "fas", "fa-inbox"], [1, "suites-tab"], ["class", "suites-list", 4, "ngIf"], [1, "suites-list"], ["class", "suite-item", 3, "click", 4, "ngFor", "ngForOf"], [1, "suite-item", 3, "click"], [1, "suite-icon"], [1, "fas", "fa-folder"], [1, "suite-content"], [1, "suite-name"], [1, "suite-meta"]], template: function TestFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
            i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "div", 3)(4, "div", 4);
            i0.ɵɵelement(5, "i", 5);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(6, "div", 6)(7, "h1");
            i0.ɵɵtext(8);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(9, "div", 7)(10, "span", 8);
            i0.ɵɵelement(11, "i", 9);
            i0.ɵɵtext(12);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(13, "span", 10);
            i0.ɵɵtext(14);
            i0.ɵɵelementEnd()()()();
            i0.ɵɵelementStart(15, "div", 11)(16, "button", 12);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_16_listener() { return ctx.runTest(); });
            i0.ɵɵtext(17, " Run Test ");
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(18, "button", 13);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_18_listener() { return ctx.refresh(); });
            i0.ɵɵtext(19, " Refresh ");
            i0.ɵɵelementEnd()()();
            i0.ɵɵtemplate(20, TestFormComponentExtended_div_20_Template, 3, 1, "div", 14)(21, TestFormComponentExtended_div_21_Template, 21, 4, "div", 15);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(22, "div", 16)(23, "div", 17)(24, "button", 18);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_24_listener() { return ctx.changeTab("overview"); });
            i0.ɵɵelement(25, "i", 19);
            i0.ɵɵelementStart(26, "span");
            i0.ɵɵtext(27, "Overview");
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(28, "button", 18);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_28_listener() { return ctx.changeTab("config"); });
            i0.ɵɵelement(29, "i", 20);
            i0.ɵɵelementStart(30, "span");
            i0.ɵɵtext(31, "Configuration");
            i0.ɵɵelementEnd()();
            i0.ɵɵelementStart(32, "button", 18);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_32_listener() { return ctx.changeTab("runs"); });
            i0.ɵɵelement(33, "i", 21);
            i0.ɵɵelementStart(34, "span");
            i0.ɵɵtext(35, "Test Runs");
            i0.ɵɵelementEnd();
            i0.ɵɵtemplate(36, TestFormComponentExtended_span_36_Template, 2, 1, "span", 22);
            i0.ɵɵelementEnd();
            i0.ɵɵelementStart(37, "button", 18);
            i0.ɵɵlistener("click", function TestFormComponentExtended_Template_button_click_37_listener() { return ctx.changeTab("suites"); });
            i0.ɵɵelement(38, "i", 23);
            i0.ɵɵelementStart(39, "span");
            i0.ɵɵtext(40, "Test Suites");
            i0.ɵɵelementEnd();
            i0.ɵɵtemplate(41, TestFormComponentExtended_span_41_Template, 2, 1, "span", 22);
            i0.ɵɵelementEnd()()();
            i0.ɵɵelementStart(42, "div", 24);
            i0.ɵɵtemplate(43, TestFormComponentExtended_div_43_Template, 62, 22, "div", 25)(44, TestFormComponentExtended_div_44_Template, 37, 8, "div", 26)(45, TestFormComponentExtended_div_45_Template, 3, 2, "div", 27)(46, TestFormComponentExtended_div_46_Template, 3, 2, "div", 28);
            i0.ɵɵelementEnd()();
        } if (rf & 2) {
            i0.ɵɵadvance(4);
            i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
            i0.ɵɵadvance(4);
            i0.ɵɵtextInterpolate(ctx.record.Name);
            i0.ɵɵadvance(2);
            i0.ɵɵstyleProp("background-color", ctx.getStatusColor());
            i0.ɵɵadvance();
            i0.ɵɵproperty("ngClass", ctx.getStatusIcon());
            i0.ɵɵadvance();
            i0.ɵɵtextInterpolate1(" ", ctx.record.Status, " ");
            i0.ɵɵadvance(2);
            i0.ɵɵtextInterpolate(ctx.record.Type);
            i0.ɵɵadvance(6);
            i0.ɵɵproperty("ngIf", ctx.record.Description);
            i0.ɵɵadvance();
            i0.ɵɵproperty("ngIf", ctx.testRunsLoaded && ctx.testRuns.length > 0);
            i0.ɵɵadvance(3);
            i0.ɵɵclassProp("active", ctx.activeTab === "overview");
            i0.ɵɵadvance(4);
            i0.ɵɵclassProp("active", ctx.activeTab === "config");
            i0.ɵɵadvance(4);
            i0.ɵɵclassProp("active", ctx.activeTab === "runs");
            i0.ɵɵadvance(4);
            i0.ɵɵproperty("ngIf", ctx.testRunsLoaded);
            i0.ɵɵadvance();
            i0.ɵɵclassProp("active", ctx.activeTab === "suites");
            i0.ɵɵadvance(4);
            i0.ɵɵproperty("ngIf", ctx.suiteTestsLoaded);
            i0.ɵɵadvance(2);
            i0.ɵɵproperty("ngIf", ctx.activeTab === "overview");
            i0.ɵɵadvance();
            i0.ɵɵproperty("ngIf", ctx.activeTab === "config");
            i0.ɵɵadvance();
            i0.ɵɵproperty("ngIf", ctx.activeTab === "runs");
            i0.ɵɵadvance();
            i0.ɵɵproperty("ngIf", ctx.activeTab === "suites");
        } }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i5.DefaultValueAccessor, i5.NumberValueAccessor, i5.NgControlStatus, i5.NgModel, i6.DialogContainerDirective, i7.ButtonComponent, i4.JsonPipe, i4.DatePipe], styles: [".test-form[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  background: #f8f9fa;\n}\n\n\n\n.test-header[_ngcontent-%COMP%] {\n  background: white;\n  border-bottom: 1px solid #e0e0e0;\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}\n\n.header-left[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 16px;\n}\n\n.test-icon[_ngcontent-%COMP%] {\n  width: 56px;\n  height: 56px;\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: white;\n  font-size: 24px;\n}\n\n.test-info[_ngcontent-%COMP%]   h1[_ngcontent-%COMP%] {\n  margin: 0 0 8px 0;\n  font-size: 24px;\n  font-weight: 600;\n  color: #333;\n}\n\n.test-meta[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 12px;\n  border-radius: 12px;\n  color: white;\n  font-size: 12px;\n  font-weight: 600;\n}\n\n.test-type[_ngcontent-%COMP%] {\n  font-size: 14px;\n  color: #666;\n}\n\n.header-actions[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 8px;\n}\n\n.test-description[_ngcontent-%COMP%] {\n  padding: 16px;\n  background: #f8f9fa;\n  border-radius: 8px;\n  margin-bottom: 16px;\n}\n\n.test-description[_ngcontent-%COMP%]   p[_ngcontent-%COMP%] {\n  margin: 0;\n  color: #666;\n  line-height: 1.5;\n}\n\n.metrics-bar[_ngcontent-%COMP%] {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 16px;\n}\n\n.metric-card[_ngcontent-%COMP%] {\n  background: #f5f7fa;\n  border-radius: 8px;\n  padding: 12px;\n  text-align: center;\n}\n\n.metric-label[_ngcontent-%COMP%] {\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  color: #999;\n  margin-bottom: 4px;\n}\n\n.metric-value[_ngcontent-%COMP%] {\n  font-size: 16px;\n  font-weight: 600;\n  color: #333;\n}\n\n\n\n.tabs-container[_ngcontent-%COMP%] {\n  background: white;\n  border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs[_ngcontent-%COMP%] {\n  display: flex;\n  padding: 0 20px;\n  overflow-x: auto;\n}\n\n.tab[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 16px 20px;\n  border: none;\n  background: transparent;\n  border-bottom: 3px solid transparent;\n  color: #666;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.tab[_ngcontent-%COMP%]:hover {\n  color: #2196f3;\n  background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active[_ngcontent-%COMP%] {\n  color: #2196f3;\n  border-bottom-color: #2196f3;\n}\n\n.tab[_ngcontent-%COMP%]   i[_ngcontent-%COMP%] {\n  font-size: 16px;\n}\n\n.tab-badge[_ngcontent-%COMP%] {\n  background: #e0e0e0;\n  color: #666;\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: #e3f2fd;\n  color: #2196f3;\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}\n\n.info-section[_ngcontent-%COMP%], \n.json-section[_ngcontent-%COMP%], \n.config-section[_ngcontent-%COMP%] {\n  background: white;\n  border-radius: 12px;\n  padding: 20px;\n}\n\n.info-section[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%], \n.json-section[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%], \n.config-section[_ngcontent-%COMP%]   h3[_ngcontent-%COMP%] {\n  margin: 0 0 16px 0;\n  font-size: 18px;\n  font-weight: 600;\n  color: #333;\n}\n\n.info-grid[_ngcontent-%COMP%], \n.config-grid[_ngcontent-%COMP%] {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 16px;\n}\n\n.info-item[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%], \n.config-item[_ngcontent-%COMP%]   label[_ngcontent-%COMP%] {\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  color: #999;\n}\n\n.info-value[_ngcontent-%COMP%] {\n  font-size: 14px;\n  color: #333;\n  word-wrap: break-word;\n}\n\n.config-input[_ngcontent-%COMP%] {\n  padding: 8px 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-size: 14px;\n}\n\n.config-input[_ngcontent-%COMP%]:focus {\n  outline: none;\n  border-color: #2196f3;\n  box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n.json-tabs[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 16px;\n  border-bottom: 2px solid #e0e0e0;\n}\n\n.json-tab[_ngcontent-%COMP%] {\n  padding: 10px 20px;\n  border: none;\n  background: transparent;\n  color: #666;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: all 0.2s ease;\n}\n\n.json-tab[_ngcontent-%COMP%]:hover {\n  color: #2196f3;\n}\n\n.json-tab.active[_ngcontent-%COMP%] {\n  color: #2196f3;\n  border-bottom-color: #2196f3;\n}\n\n.json-content[_ngcontent-%COMP%] {\n  background: #1e1e1e;\n  border-radius: 8px;\n  padding: 16px;\n  max-height: 400px;\n  overflow-y: auto;\n}\n\n.json-content[_ngcontent-%COMP%]   pre[_ngcontent-%COMP%] {\n  margin: 0;\n  font-family: 'Courier New', monospace;\n  font-size: 13px;\n  line-height: 1.5;\n  color: #e0e0e0;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n\n.json-editor[_ngcontent-%COMP%] {\n  width: 100%;\n  padding: 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-family: 'Courier New', monospace;\n  font-size: 13px;\n  resize: vertical;\n}\n\n.json-editor[_ngcontent-%COMP%]:focus {\n  outline: none;\n  border-color: #2196f3;\n  box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n\n\n.runs-list[_ngcontent-%COMP%], \n.suites-list[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.run-item[_ngcontent-%COMP%], \n.suite-item[_ngcontent-%COMP%] {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 16px;\n  background: white;\n  border: 2px solid transparent;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.run-item[_ngcontent-%COMP%]:hover, \n.suite-item[_ngcontent-%COMP%]:hover {\n  background: #e3f2fd;\n  border-color: #90caf9;\n}\n\n.run-icon[_ngcontent-%COMP%], \n.suite-icon[_ngcontent-%COMP%] {\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 8px;\n  color: white;\n  font-size: 18px;\n  flex-shrink: 0;\n}\n\n.suite-icon[_ngcontent-%COMP%] {\n  background: #ff9800;\n}\n\n.run-content[_ngcontent-%COMP%], \n.suite-content[_ngcontent-%COMP%] {\n  flex: 1;\n}\n\n.run-header[_ngcontent-%COMP%], \n.suite-name[_ngcontent-%COMP%] {\n  font-size: 14px;\n  font-weight: 600;\n  color: #333;\n  margin-bottom: 4px;\n}\n\n.run-id[_ngcontent-%COMP%] {\n  margin-right: 12px;\n}\n\n.run-status[_ngcontent-%COMP%] {\n  font-weight: 700;\n}\n\n.run-meta[_ngcontent-%COMP%], \n.suite-meta[_ngcontent-%COMP%] {\n  display: flex;\n  gap: 12px;\n  font-size: 12px;\n  color: #666;\n}\n\n.run-item[_ngcontent-%COMP%]    > i[_ngcontent-%COMP%], \n.suite-item[_ngcontent-%COMP%]    > i[_ngcontent-%COMP%] {\n  color: #999;\n  font-size: 14px;\n}\n\n\n\n.no-data[_ngcontent-%COMP%] {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 60px 20px;\n  color: #999;\n  text-align: center;\n  background: white;\n  border-radius: 12px;\n}\n\n.no-data[_ngcontent-%COMP%]   i[_ngcontent-%COMP%] {\n  font-size: 48px;\n  margin-bottom: 16px;\n  opacity: 0.3;\n}\n\n.no-data[_ngcontent-%COMP%]   p[_ngcontent-%COMP%] {\n  margin: 0;\n  font-size: 14px;\n}\n\n\n\n@media (max-width: 1200px) {\n  .metrics-bar[_ngcontent-%COMP%] {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .info-grid[_ngcontent-%COMP%], \n   .config-grid[_ngcontent-%COMP%] {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 768px) {\n  .metrics-bar[_ngcontent-%COMP%] {\n    grid-template-columns: 1fr;\n  }\n\n  .header-content[_ngcontent-%COMP%] {\n    flex-direction: column;\n    gap: 16px;\n  }\n\n  .tabs[_ngcontent-%COMP%] {\n    overflow-x: auto;\n  }\n}"], changeDetection: 0 }); }
};
TestFormComponentExtended = __decorate([
    RegisterClass(BaseFormComponent, 'MJ: Tests')
], TestFormComponentExtended);
export { TestFormComponentExtended };
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TestFormComponentExtended, [{
        type: Component,
        args: [{ selector: 'mj-test-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"test-form\" kendoDialogContainer>\n  <!-- Header Section -->\n  <div class=\"test-header\">\n    <div class=\"header-content\">\n      <div class=\"header-left\">\n        <div class=\"test-icon\" [style.background-color]=\"getStatusColor()\">\n          <i class=\"fas fa-flask\"></i>\n        </div>\n        <div class=\"test-info\">\n          <h1>{{ record.Name }}</h1>\n          <div class=\"test-meta\">\n            <span class=\"status-badge\" [style.background-color]=\"getStatusColor()\">\n              <i class=\"fas\" [ngClass]=\"getStatusIcon()\"></i>\n              {{ record.Status }}\n            </span>\n            <span class=\"test-type\">{{ record.Type }}</span>\n          </div>\n        </div>\n      </div>\n      <div class=\"header-actions\">\n        <button kendoButton (click)=\"runTest()\" icon=\"play\">\n          Run Test\n        </button>\n        <button kendoButton (click)=\"refresh()\" icon=\"sync\">\n          Refresh\n        </button>\n      </div>\n    </div>\n\n    <!-- Test Description -->\n    <div class=\"test-description\" *ngIf=\"record.Description\">\n      <p>{{ record.Description }}</p>\n    </div>\n\n    <!-- Metrics Bar -->\n    <div class=\"metrics-bar\" *ngIf=\"testRunsLoaded && testRuns.length > 0\">\n      <div class=\"metric-card\">\n        <div class=\"metric-label\">Total Runs</div>\n        <div class=\"metric-value\">{{ testRuns.length }}</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-label\">Pass Rate</div>\n        <div class=\"metric-value\">{{ getPassRate().toFixed(1) }}%</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-label\">Avg Cost</div>\n        <div class=\"metric-value\">{{ formatCost(getAverageCost()) }}</div>\n      </div>\n      <div class=\"metric-card\">\n        <div class=\"metric-label\">Avg Duration</div>\n        <div class=\"metric-value\">{{ formatDuration(getAverageDuration()) }}</div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Tabs -->\n  <div class=\"tabs-container\">\n    <div class=\"tabs\">\n      <button class=\"tab\" [class.active]=\"activeTab === 'overview'\" (click)=\"changeTab('overview')\">\n        <i class=\"fas fa-th-large\"></i>\n        <span>Overview</span>\n      </button>\n      <button class=\"tab\" [class.active]=\"activeTab === 'config'\" (click)=\"changeTab('config')\">\n        <i class=\"fas fa-sliders-h\"></i>\n        <span>Configuration</span>\n      </button>\n      <button class=\"tab\" [class.active]=\"activeTab === 'runs'\" (click)=\"changeTab('runs')\">\n        <i class=\"fas fa-list\"></i>\n        <span>Test Runs</span>\n        <span class=\"tab-badge\" *ngIf=\"testRunsLoaded\">{{ testRuns.length }}</span>\n      </button>\n      <button class=\"tab\" [class.active]=\"activeTab === 'suites'\" (click)=\"changeTab('suites')\">\n        <i class=\"fas fa-layer-group\"></i>\n        <span>Test Suites</span>\n        <span class=\"tab-badge\" *ngIf=\"suiteTestsLoaded\">{{ suiteTests.length }}</span>\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      <!-- Basic Information -->\n      <div class=\"info-section\">\n        <h3>Test 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\">Type</div>\n            <div class=\"info-value\">{{ record.Type }}</div>\n          </div>\n          <div class=\"info-item\">\n            <div class=\"info-label\">Status</div>\n            <div class=\"info-value\">{{ record.Status }}</div>\n          </div>\n          <div class=\"info-item\">\n            <div class=\"info-label\">Priority</div>\n            <div class=\"info-value\">{{ record.Priority || 'N/A' }}</div>\n          </div>\n          <div class=\"info-item\">\n            <div class=\"info-label\">Estimated Duration</div>\n            <div class=\"info-value\">{{ record.EstimatedDurationSeconds ? formatDuration(record.EstimatedDurationSeconds) : 'N/A' }}</div>\n          </div>\n          <div class=\"info-item\">\n            <div class=\"info-label\">Estimated Cost</div>\n            <div class=\"info-value\">{{ record.EstimatedCostUSD ? formatCost(record.EstimatedCostUSD) : 'N/A' }}</div>\n          </div>\n          <div class=\"info-item\">\n            <div class=\"info-label\">Repeat Count</div>\n            <div class=\"info-value\">{{ record.RepeatCount || 1 }}</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>\n      </div>\n\n      <!-- JSON Data Views -->\n      <div class=\"json-section\">\n        <h3>Test Definition</h3>\n        <div class=\"json-tabs\">\n          <button class=\"json-tab\" [class.active]=\"activeJsonView === 'input'\" (click)=\"setJsonView('input')\">\n            Input Definition\n          </button>\n          <button class=\"json-tab\" [class.active]=\"activeJsonView === 'expected'\" (click)=\"setJsonView('expected')\">\n            Expected Outcomes\n          </button>\n          <button class=\"json-tab\" [class.active]=\"activeJsonView === 'config'\" (click)=\"setJsonView('config')\">\n            Configuration\n          </button>\n          <button class=\"json-tab\" [class.active]=\"activeJsonView === 'tags'\" (click)=\"setJsonView('tags')\">\n            Tags\n          </button>\n        </div>\n        <div class=\"json-content\">\n          <pre>{{ getJsonData() | json }}</pre>\n        </div>\n      </div>\n    </div>\n\n    <!-- Configuration Tab -->\n    <div class=\"config-tab\" *ngIf=\"activeTab === 'config'\">\n      <div class=\"config-section\">\n        <h3>Execution Settings</h3>\n        <div class=\"config-grid\">\n          <div class=\"config-item\">\n            <label>Priority</label>\n            <input type=\"number\" [(ngModel)]=\"record.Priority\" class=\"config-input\" />\n          </div>\n          <div class=\"config-item\">\n            <label>Repeat Count</label>\n            <input type=\"number\" [(ngModel)]=\"record.RepeatCount\" class=\"config-input\" />\n          </div>\n          <div class=\"config-item\">\n            <label>Estimated Duration (seconds)</label>\n            <input type=\"number\" [(ngModel)]=\"record.EstimatedDurationSeconds\" class=\"config-input\" />\n          </div>\n          <div class=\"config-item\">\n            <label>Estimated Cost (USD)</label>\n            <input type=\"number\" step=\"0.000001\" [(ngModel)]=\"record.EstimatedCostUSD\" class=\"config-input\" />\n          </div>\n        </div>\n      </div>\n\n      <div class=\"config-section\">\n        <h3>Input Definition (JSON)</h3>\n        <textarea class=\"json-editor\" [(ngModel)]=\"record.InputDefinition\" rows=\"10\"></textarea>\n      </div>\n\n      <div class=\"config-section\">\n        <h3>Expected Outcomes (JSON)</h3>\n        <textarea class=\"json-editor\" [(ngModel)]=\"record.ExpectedOutcomes\" rows=\"10\"></textarea>\n      </div>\n\n      <div class=\"config-section\">\n        <h3>Configuration (JSON)</h3>\n        <textarea class=\"json-editor\" [(ngModel)]=\"record.Configuration\" rows=\"10\"></textarea>\n      </div>\n\n      <div class=\"config-section\">\n        <h3>Tags (JSON Array)</h3>\n        <textarea class=\"json-editor\" [(ngModel)]=\"record.Tags\" rows=\"5\"></textarea>\n      </div>\n    </div>\n\n    <!-- Test Runs Tab -->\n    <div class=\"runs-tab\" *ngIf=\"activeTab === 'runs'\">\n      <div class=\"runs-list\" *ngIf=\"testRuns.length > 0\">\n        <div class=\"run-item\" *ngFor=\"let run of testRuns\" (click)=\"openTestRun(run.ID)\">\n          <div class=\"run-icon\" [style.background-color]=\"run.Status === 'Passed' ? '#4caf50' : run.Status === 'Failed' ? '#f44336' : '#ff9800'\">\n            <i class=\"fas\" [class.fa-check]=\"run.Status === 'Passed'\" [class.fa-times]=\"run.Status === 'Failed'\" [class.fa-exclamation]=\"run.Status === 'Error'\"></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]=\"run.Status === 'Passed' ? '#4caf50' : run.Status === 'Failed' ? '#f44336' : '#ff9800'\">{{ run.Status }}</span>\n            </div>\n            <div class=\"run-meta\">\n              <span>{{ run.StartedAt | date:'short' }}</span>\n              <span *ngIf=\"run.DurationSeconds\">{{ formatDuration(run.DurationSeconds) }}</span>\n              <span *ngIf=\"run.CostUSD\">{{ formatCost(run.CostUSD) }}</span>\n              <span *ngIf=\"run.Score != null\">Score: {{ run.Score.toFixed(4) }}</span>\n            </div>\n          </div>\n          <i class=\"fas fa-chevron-right\"></i>\n        </div>\n      </div>\n\n      <div class=\"no-data\" *ngIf=\"testRunsLoaded && testRuns.length === 0\">\n        <i class=\"fas fa-inbox\"></i>\n        <p>No test runs found for this test</p>\n      </div>\n    </div>\n\n    <!-- Test Suites Tab -->\n    <div class=\"suites-tab\" *ngIf=\"activeTab === 'suites'\">\n      <div class=\"suites-list\" *ngIf=\"suiteTests.length > 0\">\n        <div class=\"suite-item\" *ngFor=\"let suiteTest of suiteTests\" (click)=\"openTestSuite(suiteTest.SuiteID)\">\n          <div class=\"suite-icon\">\n            <i class=\"fas fa-folder\"></i>\n          </div>\n          <div class=\"suite-content\">\n            <div class=\"suite-name\">{{ suiteTest.Suite }}</div>\n            <div class=\"suite-meta\">\n              <span>Sequence: {{ suiteTest.Sequence }}</span>\n            </div>\n          </div>\n          <i class=\"fas fa-chevron-right\"></i>\n        </div>\n      </div>\n\n      <div class=\"no-data\" *ngIf=\"suiteTestsLoaded && suiteTests.length === 0\">\n        <i class=\"fas fa-inbox\"></i>\n        <p>This test is not part of any test suite</p>\n      </div>\n    </div>\n  </div>\n</div>\n", styles: [".test-form {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  background: #f8f9fa;\n}\n\n/* Header */\n.test-header {\n  background: white;\n  border-bottom: 1px solid #e0e0e0;\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}\n\n.header-left {\n  display: flex;\n  gap: 16px;\n}\n\n.test-icon {\n  width: 56px;\n  height: 56px;\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: white;\n  font-size: 24px;\n}\n\n.test-info h1 {\n  margin: 0 0 8px 0;\n  font-size: 24px;\n  font-weight: 600;\n  color: #333;\n}\n\n.test-meta {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n}\n\n.status-badge {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 12px;\n  border-radius: 12px;\n  color: white;\n  font-size: 12px;\n  font-weight: 600;\n}\n\n.test-type {\n  font-size: 14px;\n  color: #666;\n}\n\n.header-actions {\n  display: flex;\n  gap: 8px;\n}\n\n.test-description {\n  padding: 16px;\n  background: #f8f9fa;\n  border-radius: 8px;\n  margin-bottom: 16px;\n}\n\n.test-description p {\n  margin: 0;\n  color: #666;\n  line-height: 1.5;\n}\n\n.metrics-bar {\n  display: grid;\n  grid-template-columns: repeat(4, 1fr);\n  gap: 16px;\n}\n\n.metric-card {\n  background: #f5f7fa;\n  border-radius: 8px;\n  padding: 12px;\n  text-align: center;\n}\n\n.metric-label {\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  color: #999;\n  margin-bottom: 4px;\n}\n\n.metric-value {\n  font-size: 16px;\n  font-weight: 600;\n  color: #333;\n}\n\n/* Tabs */\n.tabs-container {\n  background: white;\n  border-bottom: 1px solid #e0e0e0;\n}\n\n.tabs {\n  display: flex;\n  padding: 0 20px;\n  overflow-x: auto;\n}\n\n.tab {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 16px 20px;\n  border: none;\n  background: transparent;\n  border-bottom: 3px solid transparent;\n  color: #666;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.tab:hover {\n  color: #2196f3;\n  background: rgba(33, 150, 243, 0.05);\n}\n\n.tab.active {\n  color: #2196f3;\n  border-bottom-color: #2196f3;\n}\n\n.tab i {\n  font-size: 16px;\n}\n\n.tab-badge {\n  background: #e0e0e0;\n  color: #666;\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: #e3f2fd;\n  color: #2196f3;\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}\n\n.info-section,\n.json-section,\n.config-section {\n  background: white;\n  border-radius: 12px;\n  padding: 20px;\n}\n\n.info-section h3,\n.json-section h3,\n.config-section h3 {\n  margin: 0 0 16px 0;\n  font-size: 18px;\n  font-weight: 600;\n  color: #333;\n}\n\n.info-grid,\n.config-grid {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 16px;\n}\n\n.info-item,\n.config-item {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n}\n\n.info-label,\n.config-item label {\n  font-size: 12px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n  color: #999;\n}\n\n.info-value {\n  font-size: 14px;\n  color: #333;\n  word-wrap: break-word;\n}\n\n.config-input {\n  padding: 8px 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-size: 14px;\n}\n\n.config-input:focus {\n  outline: none;\n  border-color: #2196f3;\n  box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n.json-tabs {\n  display: flex;\n  gap: 8px;\n  margin-bottom: 16px;\n  border-bottom: 2px solid #e0e0e0;\n}\n\n.json-tab {\n  padding: 10px 20px;\n  border: none;\n  background: transparent;\n  color: #666;\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  border-bottom: 3px solid transparent;\n  margin-bottom: -2px;\n  transition: all 0.2s ease;\n}\n\n.json-tab:hover {\n  color: #2196f3;\n}\n\n.json-tab.active {\n  color: #2196f3;\n  border-bottom-color: #2196f3;\n}\n\n.json-content {\n  background: #1e1e1e;\n  border-radius: 8px;\n  padding: 16px;\n  max-height: 400px;\n  overflow-y: auto;\n}\n\n.json-content pre {\n  margin: 0;\n  font-family: 'Courier New', monospace;\n  font-size: 13px;\n  line-height: 1.5;\n  color: #e0e0e0;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n\n.json-editor {\n  width: 100%;\n  padding: 12px;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  font-family: 'Courier New', monospace;\n  font-size: 13px;\n  resize: vertical;\n}\n\n.json-editor:focus {\n  outline: none;\n  border-color: #2196f3;\n  box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1);\n}\n\n/* Runs Tab */\n.runs-list,\n.suites-list {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n}\n\n.run-item,\n.suite-item {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 16px;\n  background: white;\n  border: 2px solid transparent;\n  border-radius: 8px;\n  cursor: pointer;\n  transition: all 0.2s ease;\n}\n\n.run-item:hover,\n.suite-item:hover {\n  background: #e3f2fd;\n  border-color: #90caf9;\n}\n\n.run-icon,\n.suite-icon {\n  width: 40px;\n  height: 40px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  border-radius: 8px;\n  color: white;\n  font-size: 18px;\n  flex-shrink: 0;\n}\n\n.suite-icon {\n  background: #ff9800;\n}\n\n.run-content,\n.suite-content {\n  flex: 1;\n}\n\n.run-header,\n.suite-name {\n  font-size: 14px;\n  font-weight: 600;\n  color: #333;\n  margin-bottom: 4px;\n}\n\n.run-id {\n  margin-right: 12px;\n}\n\n.run-status {\n  font-weight: 700;\n}\n\n.run-meta,\n.suite-meta {\n  display: flex;\n  gap: 12px;\n  font-size: 12px;\n  color: #666;\n}\n\n.run-item > i,\n.suite-item > i {\n  color: #999;\n  font-size: 14px;\n}\n\n/* No Data State */\n.no-data {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  padding: 60px 20px;\n  color: #999;\n  text-align: center;\n  background: white;\n  border-radius: 12px;\n}\n\n.no-data i {\n  font-size: 48px;\n  margin-bottom: 16px;\n  opacity: 0.3;\n}\n\n.no-data p {\n  margin: 0;\n  font-size: 14px;\n}\n\n/* Responsive */\n@media (max-width: 1200px) {\n  .metrics-bar {\n    grid-template-columns: repeat(2, 1fr);\n  }\n\n  .info-grid,\n  .config-grid {\n    grid-template-columns: 1fr;\n  }\n}\n\n@media (max-width: 768px) {\n  .metrics-bar {\n    grid-template-columns: 1fr;\n  }\n\n  .header-content {\n    flex-direction: column;\n    gap: 16px;\n  }\n\n  .tabs {\n    overflow-x: auto;\n  }\n}\n"] }]
    }], () => [{ type: i0.ElementRef }, { type: i1.SharedService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i3.TestingDialogService }], null); })();
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestFormComponentExtended, { className: "TestFormComponentExtended", filePath: "src/lib/custom/Tests/test-form.component.ts", lineNumber: 27 }); })();
export function LoadTestFormComponentExtended() {
    // Prevents tree-shaking
}
LoadTestFormComponentExtended();
//# sourceMappingURL=test-form.component.js.map