@cqa-lib/cqa-ui 1.1.269 → 1.1.270
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/esm2020/lib/execution-screen/api-step/api-step.component.mjs +31 -1
- package/esm2020/lib/execution-screen/basic-step/basic-step.component.mjs +31 -1
- package/esm2020/lib/execution-screen/db-verification-step/db-verification-step.component.mjs +31 -1
- package/esm2020/lib/execution-screen/live-execution-step/live-execution-step.component.mjs +31 -1
- package/esm2020/lib/execution-screen/loop-step/loop-step.component.mjs +31 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +150 -0
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +150 -0
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/execution-screen/api-step/api-step.component.d.ts +1 -0
- package/lib/execution-screen/basic-step/basic-step.component.d.ts +1 -0
- package/lib/execution-screen/db-verification-step/db-verification-step.component.d.ts +1 -0
- package/lib/execution-screen/live-execution-step/live-execution-step.component.d.ts +1 -0
- package/lib/execution-screen/loop-step/loop-step.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -9238,6 +9238,7 @@ class BasicStepComponent extends BaseStepComponent {
|
|
|
9238
9238
|
: (subStep.value ? parseFloat(subStep.value) : 30);
|
|
9239
9239
|
this.clearCountdownTimer();
|
|
9240
9240
|
this.waitLocatorGroupEntry = Object.assign(Object.assign({}, subStep), { remainingSeconds: timeoutSeconds, status: 'running' });
|
|
9241
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
9241
9242
|
this.processedSubSteps.push(this.waitLocatorGroupEntry);
|
|
9242
9243
|
// Tick down every second
|
|
9243
9244
|
this.countdownIntervalId = setInterval(() => {
|
|
@@ -9267,6 +9268,7 @@ class BasicStepComponent extends BaseStepComponent {
|
|
|
9267
9268
|
const newText = subStep.description || subStep.text || subStep.title;
|
|
9268
9269
|
if (newText)
|
|
9269
9270
|
this.waitLocatorGroupEntry.description = newText;
|
|
9271
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
9270
9272
|
}
|
|
9271
9273
|
else {
|
|
9272
9274
|
// No active group – push FIND_LOCATOR normally once countdown is cleared
|
|
@@ -9290,6 +9292,7 @@ class BasicStepComponent extends BaseStepComponent {
|
|
|
9290
9292
|
if (newText)
|
|
9291
9293
|
this.waitLocatorGroupEntry.description = newText;
|
|
9292
9294
|
this.waitLocatorGroupEntry.status = 'success';
|
|
9295
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
9293
9296
|
this.waitLocatorGroupEntry.remainingSeconds = null;
|
|
9294
9297
|
this.clearCountdownTimer();
|
|
9295
9298
|
this.waitLocatorGroupEntry = null;
|
|
@@ -9366,6 +9369,33 @@ class BasicStepComponent extends BaseStepComponent {
|
|
|
9366
9369
|
this.countdownIntervalId = null;
|
|
9367
9370
|
}
|
|
9368
9371
|
}
|
|
9372
|
+
addDurationToWaitLocatorGroupEntry(subStep) {
|
|
9373
|
+
if (!this.waitLocatorGroupEntry) {
|
|
9374
|
+
return;
|
|
9375
|
+
}
|
|
9376
|
+
const rawDuration = subStep === null || subStep === void 0 ? void 0 : subStep.duration;
|
|
9377
|
+
let delta = 0;
|
|
9378
|
+
if (typeof rawDuration === 'number') {
|
|
9379
|
+
delta = rawDuration;
|
|
9380
|
+
}
|
|
9381
|
+
else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {
|
|
9382
|
+
const parsed = parseFloat(rawDuration);
|
|
9383
|
+
delta = Number.isFinite(parsed) ? parsed : 0;
|
|
9384
|
+
}
|
|
9385
|
+
if (delta <= 0) {
|
|
9386
|
+
return;
|
|
9387
|
+
}
|
|
9388
|
+
const currentRaw = this.waitLocatorGroupEntry.duration;
|
|
9389
|
+
let current = 0;
|
|
9390
|
+
if (typeof currentRaw === 'number') {
|
|
9391
|
+
current = currentRaw;
|
|
9392
|
+
}
|
|
9393
|
+
else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {
|
|
9394
|
+
const parsedCurrent = parseFloat(currentRaw);
|
|
9395
|
+
current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;
|
|
9396
|
+
}
|
|
9397
|
+
this.waitLocatorGroupEntry.duration = current + delta;
|
|
9398
|
+
}
|
|
9369
9399
|
processSubStepsForRunResult() {
|
|
9370
9400
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
9371
9401
|
const allSubSteps = (this.subSteps || []);
|
|
@@ -10801,6 +10831,7 @@ class LoopStepComponent extends BaseStepComponent {
|
|
|
10801
10831
|
: (subStep.value ? parseFloat(subStep.value) : 30);
|
|
10802
10832
|
this.clearCountdownTimer();
|
|
10803
10833
|
this.waitLocatorGroupEntry = Object.assign(Object.assign({}, subStep), { remainingSeconds: timeoutSeconds, status: 'running' });
|
|
10834
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
10804
10835
|
this.processedSubSteps.push(this.waitLocatorGroupEntry);
|
|
10805
10836
|
// Tick down every second
|
|
10806
10837
|
this.countdownIntervalId = setInterval(() => {
|
|
@@ -10830,6 +10861,7 @@ class LoopStepComponent extends BaseStepComponent {
|
|
|
10830
10861
|
const newText = subStep.description || subStep.text || subStep.title;
|
|
10831
10862
|
if (newText)
|
|
10832
10863
|
this.waitLocatorGroupEntry.description = newText;
|
|
10864
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
10833
10865
|
}
|
|
10834
10866
|
else {
|
|
10835
10867
|
// No active group – push FIND_LOCATOR normally once countdown is cleared
|
|
@@ -10853,6 +10885,7 @@ class LoopStepComponent extends BaseStepComponent {
|
|
|
10853
10885
|
if (newText)
|
|
10854
10886
|
this.waitLocatorGroupEntry.description = newText;
|
|
10855
10887
|
this.waitLocatorGroupEntry.status = 'success';
|
|
10888
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
10856
10889
|
this.waitLocatorGroupEntry.remainingSeconds = null;
|
|
10857
10890
|
this.clearCountdownTimer();
|
|
10858
10891
|
this.waitLocatorGroupEntry = null;
|
|
@@ -10929,6 +10962,33 @@ class LoopStepComponent extends BaseStepComponent {
|
|
|
10929
10962
|
this.countdownIntervalId = null;
|
|
10930
10963
|
}
|
|
10931
10964
|
}
|
|
10965
|
+
addDurationToWaitLocatorGroupEntry(subStep) {
|
|
10966
|
+
if (!this.waitLocatorGroupEntry) {
|
|
10967
|
+
return;
|
|
10968
|
+
}
|
|
10969
|
+
const rawDuration = subStep === null || subStep === void 0 ? void 0 : subStep.duration;
|
|
10970
|
+
let delta = 0;
|
|
10971
|
+
if (typeof rawDuration === 'number') {
|
|
10972
|
+
delta = rawDuration;
|
|
10973
|
+
}
|
|
10974
|
+
else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {
|
|
10975
|
+
const parsed = parseFloat(rawDuration);
|
|
10976
|
+
delta = Number.isFinite(parsed) ? parsed : 0;
|
|
10977
|
+
}
|
|
10978
|
+
if (delta <= 0) {
|
|
10979
|
+
return;
|
|
10980
|
+
}
|
|
10981
|
+
const currentRaw = this.waitLocatorGroupEntry.duration;
|
|
10982
|
+
let current = 0;
|
|
10983
|
+
if (typeof currentRaw === 'number') {
|
|
10984
|
+
current = currentRaw;
|
|
10985
|
+
}
|
|
10986
|
+
else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {
|
|
10987
|
+
const parsedCurrent = parseFloat(currentRaw);
|
|
10988
|
+
current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;
|
|
10989
|
+
}
|
|
10990
|
+
this.waitLocatorGroupEntry.duration = current + delta;
|
|
10991
|
+
}
|
|
10932
10992
|
processSubStepsForRunResult() {
|
|
10933
10993
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
10934
10994
|
if (!this.selectedIteration || !this.selectedIteration.subSteps) {
|
|
@@ -12970,6 +13030,7 @@ class ApiStepComponent extends BaseStepComponent {
|
|
|
12970
13030
|
: (action.value ? parseFloat(action.value) : 30);
|
|
12971
13031
|
this.clearCountdownTimer();
|
|
12972
13032
|
this.waitLocatorGroupEntry = Object.assign(Object.assign({}, action), { remainingSeconds: timeoutSeconds, status: 'running' });
|
|
13033
|
+
this.addDurationToWaitLocatorGroupEntry(action);
|
|
12973
13034
|
this.processedInitialActions.push(this.waitLocatorGroupEntry);
|
|
12974
13035
|
// Tick down every second
|
|
12975
13036
|
this.countdownIntervalId = setInterval(() => {
|
|
@@ -12999,6 +13060,7 @@ class ApiStepComponent extends BaseStepComponent {
|
|
|
12999
13060
|
const newText = action.description || action.text || action.title;
|
|
13000
13061
|
if (newText)
|
|
13001
13062
|
this.waitLocatorGroupEntry.description = newText;
|
|
13063
|
+
this.addDurationToWaitLocatorGroupEntry(action);
|
|
13002
13064
|
}
|
|
13003
13065
|
else {
|
|
13004
13066
|
// No active group – push FIND_LOCATOR normally once countdown is cleared
|
|
@@ -13022,6 +13084,7 @@ class ApiStepComponent extends BaseStepComponent {
|
|
|
13022
13084
|
if (newText)
|
|
13023
13085
|
this.waitLocatorGroupEntry.description = newText;
|
|
13024
13086
|
this.waitLocatorGroupEntry.status = 'success';
|
|
13087
|
+
this.addDurationToWaitLocatorGroupEntry(action);
|
|
13025
13088
|
this.waitLocatorGroupEntry.remainingSeconds = null;
|
|
13026
13089
|
this.clearCountdownTimer();
|
|
13027
13090
|
this.waitLocatorGroupEntry = null;
|
|
@@ -13098,6 +13161,33 @@ class ApiStepComponent extends BaseStepComponent {
|
|
|
13098
13161
|
this.countdownIntervalId = null;
|
|
13099
13162
|
}
|
|
13100
13163
|
}
|
|
13164
|
+
addDurationToWaitLocatorGroupEntry(action) {
|
|
13165
|
+
if (!this.waitLocatorGroupEntry) {
|
|
13166
|
+
return;
|
|
13167
|
+
}
|
|
13168
|
+
const rawDuration = action === null || action === void 0 ? void 0 : action.duration;
|
|
13169
|
+
let delta = 0;
|
|
13170
|
+
if (typeof rawDuration === 'number') {
|
|
13171
|
+
delta = rawDuration;
|
|
13172
|
+
}
|
|
13173
|
+
else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {
|
|
13174
|
+
const parsed = parseFloat(rawDuration);
|
|
13175
|
+
delta = Number.isFinite(parsed) ? parsed : 0;
|
|
13176
|
+
}
|
|
13177
|
+
if (delta <= 0) {
|
|
13178
|
+
return;
|
|
13179
|
+
}
|
|
13180
|
+
const currentRaw = this.waitLocatorGroupEntry.duration;
|
|
13181
|
+
let current = 0;
|
|
13182
|
+
if (typeof currentRaw === 'number') {
|
|
13183
|
+
current = currentRaw;
|
|
13184
|
+
}
|
|
13185
|
+
else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {
|
|
13186
|
+
const parsedCurrent = parseFloat(currentRaw);
|
|
13187
|
+
current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;
|
|
13188
|
+
}
|
|
13189
|
+
this.waitLocatorGroupEntry.duration = current + delta;
|
|
13190
|
+
}
|
|
13101
13191
|
onJumpToTimestamp(event) {
|
|
13102
13192
|
var _a, _b, _c, _d, _e;
|
|
13103
13193
|
event.stopPropagation();
|
|
@@ -13741,6 +13831,7 @@ class LiveExecutionStepComponent extends BaseStepComponent {
|
|
|
13741
13831
|
: (subStep.value ? parseFloat(subStep.value) : 30);
|
|
13742
13832
|
this.clearCountdownTimer();
|
|
13743
13833
|
this.waitLocatorGroupEntry = Object.assign(Object.assign({}, subStep), { isRunning: true, remainingSeconds: timeoutSeconds, status: 'pending' });
|
|
13834
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
13744
13835
|
this.processedSubSteps.push(this.waitLocatorGroupEntry);
|
|
13745
13836
|
// Tick down every second
|
|
13746
13837
|
this.countdownIntervalId = setInterval(() => {
|
|
@@ -13771,6 +13862,7 @@ class LiveExecutionStepComponent extends BaseStepComponent {
|
|
|
13771
13862
|
const newText = subStep.text || subStep.description || subStep.title;
|
|
13772
13863
|
if (newText)
|
|
13773
13864
|
this.waitLocatorGroupEntry.text = newText;
|
|
13865
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
13774
13866
|
}
|
|
13775
13867
|
else {
|
|
13776
13868
|
// No active group – push FIND_LOCATOR normally once countdown is cleared
|
|
@@ -13795,6 +13887,7 @@ class LiveExecutionStepComponent extends BaseStepComponent {
|
|
|
13795
13887
|
this.waitLocatorGroupEntry.text = newText;
|
|
13796
13888
|
this.waitLocatorGroupEntry.isRunning = false;
|
|
13797
13889
|
this.waitLocatorGroupEntry.status = 'success';
|
|
13890
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
13798
13891
|
this.waitLocatorGroupEntry.remainingSeconds = null;
|
|
13799
13892
|
this.clearCountdownTimer();
|
|
13800
13893
|
this.waitLocatorGroupEntry = null;
|
|
@@ -13874,6 +13967,33 @@ class LiveExecutionStepComponent extends BaseStepComponent {
|
|
|
13874
13967
|
this.countdownIntervalId = null;
|
|
13875
13968
|
}
|
|
13876
13969
|
}
|
|
13970
|
+
addDurationToWaitLocatorGroupEntry(subStep) {
|
|
13971
|
+
if (!this.waitLocatorGroupEntry) {
|
|
13972
|
+
return;
|
|
13973
|
+
}
|
|
13974
|
+
const rawDuration = subStep === null || subStep === void 0 ? void 0 : subStep.duration;
|
|
13975
|
+
let delta = 0;
|
|
13976
|
+
if (typeof rawDuration === 'number') {
|
|
13977
|
+
delta = rawDuration;
|
|
13978
|
+
}
|
|
13979
|
+
else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {
|
|
13980
|
+
const parsed = parseFloat(rawDuration);
|
|
13981
|
+
delta = Number.isFinite(parsed) ? parsed : 0;
|
|
13982
|
+
}
|
|
13983
|
+
if (delta <= 0) {
|
|
13984
|
+
return;
|
|
13985
|
+
}
|
|
13986
|
+
const currentRaw = this.waitLocatorGroupEntry.duration;
|
|
13987
|
+
let current = 0;
|
|
13988
|
+
if (typeof currentRaw === 'number') {
|
|
13989
|
+
current = currentRaw;
|
|
13990
|
+
}
|
|
13991
|
+
else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {
|
|
13992
|
+
const parsedCurrent = parseFloat(currentRaw);
|
|
13993
|
+
current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;
|
|
13994
|
+
}
|
|
13995
|
+
this.waitLocatorGroupEntry.duration = current + delta;
|
|
13996
|
+
}
|
|
13877
13997
|
}
|
|
13878
13998
|
LiveExecutionStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: LiveExecutionStepComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
13879
13999
|
LiveExecutionStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: LiveExecutionStepComponent, selector: "cqa-live-execution-step", inputs: { id: "id", testStepResultId: "testStepResultId", stepNumber: "stepNumber", title: "title", status: "status", isDebug: "isDebug", debugPointSet: "debugPointSet", addStepMenuOptions: "addStepMenuOptions", stepMoreMenuOptions: "stepMoreMenuOptions", duration: "duration", expanded: "expanded", subSteps: "subSteps", stepDeleted: "stepDeleted" }, outputs: { debugPointChange: "debugPointChange", editStep: "editStep", addStepOptionSelect: "addStepOptionSelect", stepMoreOptionSelect: "stepMoreOptionSelect" }, host: { classAttribute: "cqa-ui-root cqa-w-full" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-font-inter cqa-w-full\">\n <!-- Header -->\n <div\n class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n (click)=\"toggle()\"\n style=\"border-bottom: '1px solid #F3F4F6'\"\n >\n <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-rounded-full hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" fill=\"#C63535\"/>\n </svg>\n <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#C63535\" stroke-width=\"1.5\" fill=\"none\"/>\n </svg>\n </button>\n </div>\n <!-- Status Icon -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n <!-- Success -->\n <svg *ngIf=\"status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Failed -->\n <svg *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Pending -->\n <svg *ngIf=\"status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <!-- Running - Show spinner -->\n <svg *ngIf=\"status.toLowerCase() === 'running'\" class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n <!-- Skipped -->\n <span *ngIf=\"status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n skip_next\n </span>\n </div>\n\n <!-- Step Number and Title -->\n <div class=\"cqa-font-semibold cqa-flex-1 cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\" style=\"word-break: break-word;\">\n <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n Deleted\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n <div *ngIf=\"isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n </button>\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n </button>\n <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n </button>\n <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n <button mat-menu-item *ngFor=\"let opt of stepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n </mat-menu>\n </div>\n <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF] cqa-font-medium\">\n {{ formatDuration(duration) }}\n </span>\n <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n </div>\n\n <!-- Expanded Content -->\n <div *ngIf=\"isExpanded && hasSubSteps\">\n <!-- Sub-steps -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n <!-- Single loop: render all entries in chronological order -->\n <ng-container *ngFor=\"let subStep of processedSubSteps; trackBy: trackBySubStepId\">\n <!-- AI_AUTO_HEAL result entries: render with ai-agent-step style -->\n <cqa-ai-logs-with-reasoning\n *ngIf=\"subStep.isAiAutoHealResult\"\n [status]=\"subStep.status\"\n [text]=\"subStep.text\"\n [description]=\"subStep.description\"\n [reasoning]=\"subStep.reasoning\"\n [duration]=\"subStep.duration\">\n </cqa-ai-logs-with-reasoning>\n\n <!-- Regular sub-steps (non-AI_AUTO_HEAL) -->\n <div\n *ngIf=\"!subStep.isAiAutoHealResult\"\n class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n \n <!-- Sub-step Status Icon or Loader -->\n <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-3 cqa-h-3\">\n <!-- Loader when running -->\n <svg *ngIf=\"subStep.isRunning\" class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n </svg>\n \n <!-- Success Icon when complete -->\n <svg *ngIf=\"!subStep.isRunning && (subStep?.status?.toLowerCase() === 'passed' || subStep?.status?.toLowerCase() === 'success')\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <svg *ngIf=\"!subStep.isRunning && subStep?.status?.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n\n <!-- Sub-step Description (text from socket) with typing animation -->\n <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n <span style=\"display: inline-flex; align-items: baseline; flex-wrap: wrap;\">\n <ngx-typed-js \n *ngIf=\"subStep.isRunning && subStep.text\"\n [strings]=\"[subStep.text]\"\n [typeSpeed]=\"30\"\n [showCursor]=\"false\"\n [fadeOut]=\"false\"\n style=\"display: inline;\">\n <span class=\"typing\"></span>\n </ngx-typed-js>\n <span *ngIf=\"!subStep.isRunning\" style=\"display: inline;\">{{ subStep.text }}</span>\n <!-- Countdown remaining for WAIT_FOR_LOCATOR group -->\n <span *ngIf=\"subStep.remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\" style=\"display: inline;\">({{ subStep.remainingSeconds }}s remaining)</span>\n </span>\n </span>\n <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#6A7282] cqa-font-medium\" style=\"white-space: pre-line;\">\n {{ formatDuration(subStep.duration || 0) }}\n </span>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n\n", components: [{ type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i2$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: AiLogsWithReasoningComponent, selector: "cqa-ai-logs-with-reasoning", inputs: ["status", "text", "description", "reasoning", "duration"] }, { type: i4$1.NgxTypedJsComponent, selector: "ngx-typed-js", inputs: ["cursorColor", "strings", "stringsElement", "typeSpeed", "startDelay", "backSpeed", "smartBackspace", "shuffle", "backDelay", "fadeOut", "fadeOutClass", "fadeOutDelay", "loop", "loopCount", "showCursor", "cursorChar", "autoInsertCss", "attr", "bindInputFocusEvents", "contentType"], outputs: ["completed", "preStringTyped", "stringTyped", "lastStringBackspaced", "typingPaused", "typingResumed", "reset", "stopped", "started", "destroyed"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
@@ -18628,6 +18748,7 @@ class DbVerificationStepComponent extends BaseStepComponent {
|
|
|
18628
18748
|
: (subStep.value ? parseFloat(subStep.value) : 30);
|
|
18629
18749
|
this.clearCountdownTimer();
|
|
18630
18750
|
this.waitLocatorGroupEntry = Object.assign(Object.assign({}, subStep), { remainingSeconds: timeoutSeconds, status: 'running' });
|
|
18751
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
18631
18752
|
this.processedSubSteps.push(this.waitLocatorGroupEntry);
|
|
18632
18753
|
this.countdownIntervalId = setInterval(() => {
|
|
18633
18754
|
if (this.waitLocatorGroupEntry) {
|
|
@@ -18654,6 +18775,7 @@ class DbVerificationStepComponent extends BaseStepComponent {
|
|
|
18654
18775
|
const newText = subStep.description || subStep.text || subStep.title;
|
|
18655
18776
|
if (newText)
|
|
18656
18777
|
this.waitLocatorGroupEntry.description = newText;
|
|
18778
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
18657
18779
|
}
|
|
18658
18780
|
else {
|
|
18659
18781
|
this.processedSubSteps.push(Object.assign({}, subStep));
|
|
@@ -18674,6 +18796,7 @@ class DbVerificationStepComponent extends BaseStepComponent {
|
|
|
18674
18796
|
if (newText)
|
|
18675
18797
|
this.waitLocatorGroupEntry.description = newText;
|
|
18676
18798
|
this.waitLocatorGroupEntry.status = 'success';
|
|
18799
|
+
this.addDurationToWaitLocatorGroupEntry(subStep);
|
|
18677
18800
|
this.waitLocatorGroupEntry.remainingSeconds = null;
|
|
18678
18801
|
this.clearCountdownTimer();
|
|
18679
18802
|
this.waitLocatorGroupEntry = null;
|
|
@@ -18742,6 +18865,33 @@ class DbVerificationStepComponent extends BaseStepComponent {
|
|
|
18742
18865
|
this.countdownIntervalId = null;
|
|
18743
18866
|
}
|
|
18744
18867
|
}
|
|
18868
|
+
addDurationToWaitLocatorGroupEntry(subStep) {
|
|
18869
|
+
if (!this.waitLocatorGroupEntry) {
|
|
18870
|
+
return;
|
|
18871
|
+
}
|
|
18872
|
+
const rawDuration = subStep === null || subStep === void 0 ? void 0 : subStep.duration;
|
|
18873
|
+
let delta = 0;
|
|
18874
|
+
if (typeof rawDuration === 'number') {
|
|
18875
|
+
delta = rawDuration;
|
|
18876
|
+
}
|
|
18877
|
+
else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {
|
|
18878
|
+
const parsed = parseFloat(rawDuration);
|
|
18879
|
+
delta = Number.isFinite(parsed) ? parsed : 0;
|
|
18880
|
+
}
|
|
18881
|
+
if (delta <= 0) {
|
|
18882
|
+
return;
|
|
18883
|
+
}
|
|
18884
|
+
const currentRaw = this.waitLocatorGroupEntry.duration;
|
|
18885
|
+
let current = 0;
|
|
18886
|
+
if (typeof currentRaw === 'number') {
|
|
18887
|
+
current = currentRaw;
|
|
18888
|
+
}
|
|
18889
|
+
else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {
|
|
18890
|
+
const parsedCurrent = parseFloat(currentRaw);
|
|
18891
|
+
current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;
|
|
18892
|
+
}
|
|
18893
|
+
this.waitLocatorGroupEntry.duration = current + delta;
|
|
18894
|
+
}
|
|
18745
18895
|
processSubStepsForRunResult() {
|
|
18746
18896
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
18747
18897
|
const allSubSteps = (this.subSteps || []);
|