@cqa-lib/cqa-ui 1.1.334 → 1.1.335
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/code-editor/code-editor.component.mjs +267 -0
- package/esm2020/lib/code-editor/code-editor.styles.mjs +56 -0
- package/esm2020/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.mjs +26 -4
- package/esm2020/lib/ui-kit.module.mjs +17 -4
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/cqa-lib-cqa-ui.mjs +368 -21
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +373 -21
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/code-editor/code-editor.component.d.ts +66 -0
- package/lib/code-editor/code-editor.styles.d.ts +7 -0
- package/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.d.ts +7 -0
- package/lib/ui-kit.module.d.ts +84 -82
- package/package.json +3 -1
- package/public-api.d.ts +1 -0
- package/styles.css +1 -1
|
@@ -34,7 +34,7 @@ import * as i9 from '@angular/material/table';
|
|
|
34
34
|
import { MatTableModule } from '@angular/material/table';
|
|
35
35
|
import * as i15 from '@angular/material/input';
|
|
36
36
|
import { MatInputModule } from '@angular/material/input';
|
|
37
|
-
import * as i1$
|
|
37
|
+
import * as i1$7 from '@angular/cdk/overlay';
|
|
38
38
|
import { OverlayContainer, OverlayConfig, OverlayModule } from '@angular/cdk/overlay';
|
|
39
39
|
import * as i3 from '@angular/cdk/portal';
|
|
40
40
|
import { TemplatePortal, CdkPortalOutlet, ComponentPortal, PortalModule } from '@angular/cdk/portal';
|
|
@@ -48,6 +48,8 @@ import * as momentImport from 'moment';
|
|
|
48
48
|
import 'daterangepicker';
|
|
49
49
|
import * as i6 from 'ngx-drag-drop';
|
|
50
50
|
import { DndModule } from 'ngx-drag-drop';
|
|
51
|
+
import * as i1$6 from 'ngx-monaco-editor';
|
|
52
|
+
import { MonacoEditorModule } from 'ngx-monaco-editor';
|
|
51
53
|
import { filter } from 'rxjs/operators';
|
|
52
54
|
import { Subject, BehaviorSubject } from 'rxjs';
|
|
53
55
|
|
|
@@ -18366,6 +18368,323 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
18366
18368
|
args: ['trixEditor', { static: false }]
|
|
18367
18369
|
}] } });
|
|
18368
18370
|
|
|
18371
|
+
/**
|
|
18372
|
+
* Code editor styles as a string for use in component `styles` arrays.
|
|
18373
|
+
* Matches step-builder-custom-code form styling (custom-input, custom-textarea).
|
|
18374
|
+
* Using a string constant avoids Angular's style compiler receiving non-string values
|
|
18375
|
+
* (e.g. from styleUrls resolution in Storybook), which causes "input.match is not a function".
|
|
18376
|
+
*/
|
|
18377
|
+
const CODE_EDITOR_STYLES = `
|
|
18378
|
+
.cqa-code-editor-container {
|
|
18379
|
+
min-height: 200px;
|
|
18380
|
+
height: 200px;
|
|
18381
|
+
border: 1px solid #e5e7eb;
|
|
18382
|
+
border-radius: 6px;
|
|
18383
|
+
overflow: hidden;
|
|
18384
|
+
display: flex;
|
|
18385
|
+
flex-direction: column;
|
|
18386
|
+
background: #fff;
|
|
18387
|
+
transition: border-color 0.2s, box-shadow 0.2s;
|
|
18388
|
+
}
|
|
18389
|
+
.cqa-code-editor-container:focus-within {
|
|
18390
|
+
border-color: #3b82f6;
|
|
18391
|
+
box-shadow: 0 0 0 1px #3b82f6;
|
|
18392
|
+
}
|
|
18393
|
+
.cqa-code-editor-container.cqa-has-errors {
|
|
18394
|
+
border-color: #ef4444;
|
|
18395
|
+
}
|
|
18396
|
+
.cqa-code-editor-container.cqa-has-errors:focus-within {
|
|
18397
|
+
border-color: #ef4444;
|
|
18398
|
+
box-shadow: 0 0 0 1px #ef4444;
|
|
18399
|
+
}
|
|
18400
|
+
.cqa-code-editor-container .cqa-monaco-editor,
|
|
18401
|
+
.cqa-code-editor-container ngx-monaco-editor {
|
|
18402
|
+
flex: 1;
|
|
18403
|
+
min-height: 0;
|
|
18404
|
+
}
|
|
18405
|
+
.cqa-code-editor-container ::ng-deep .monaco-editor {
|
|
18406
|
+
height: 100% !important;
|
|
18407
|
+
}
|
|
18408
|
+
.cqa-code-editor-fallback .cqa-code-editor-textarea {
|
|
18409
|
+
width: 100%;
|
|
18410
|
+
height: 100%;
|
|
18411
|
+
min-height: 180px;
|
|
18412
|
+
padding: 12px;
|
|
18413
|
+
font-family: Monaco, Menlo, "Ubuntu Mono", Consolas, monospace;
|
|
18414
|
+
font-size: 13px;
|
|
18415
|
+
line-height: 1.5;
|
|
18416
|
+
border: none;
|
|
18417
|
+
resize: none;
|
|
18418
|
+
outline: none;
|
|
18419
|
+
background: #fff;
|
|
18420
|
+
color: #0a0a0a;
|
|
18421
|
+
}
|
|
18422
|
+
.cqa-code-editor-fallback .cqa-code-editor-textarea::placeholder {
|
|
18423
|
+
color: #9ca3af;
|
|
18424
|
+
}
|
|
18425
|
+
`;
|
|
18426
|
+
|
|
18427
|
+
/** Maps custom code step language values to Monaco editor language IDs */
|
|
18428
|
+
const MONACO_LANGUAGE_MAP = {
|
|
18429
|
+
javascript: 'javascript',
|
|
18430
|
+
typescript: 'typescript',
|
|
18431
|
+
python: 'python',
|
|
18432
|
+
java: 'java',
|
|
18433
|
+
ruby: 'ruby',
|
|
18434
|
+
go: 'go',
|
|
18435
|
+
rust: 'rust',
|
|
18436
|
+
csharp: 'csharp',
|
|
18437
|
+
};
|
|
18438
|
+
class CodeEditorComponent {
|
|
18439
|
+
constructor() {
|
|
18440
|
+
this.value = '';
|
|
18441
|
+
this.language = 'javascript';
|
|
18442
|
+
this.label = '';
|
|
18443
|
+
this.required = false;
|
|
18444
|
+
this.placeholder = '// Write your code here...';
|
|
18445
|
+
this.fullWidth = true;
|
|
18446
|
+
this.ariaLabel = '';
|
|
18447
|
+
this.minHeight = '200px';
|
|
18448
|
+
this.readOnly = false;
|
|
18449
|
+
/** External error messages (e.g. from form validation). Shown alongside syntax errors. */
|
|
18450
|
+
this.errors = [];
|
|
18451
|
+
/** When true, use a plain textarea instead of Monaco (e.g. for Storybook where Monaco may not load) */
|
|
18452
|
+
this.useFallback = false;
|
|
18453
|
+
this.valueChange = new EventEmitter();
|
|
18454
|
+
this.validationChange = new EventEmitter();
|
|
18455
|
+
this.blur = new EventEmitter();
|
|
18456
|
+
this.codeValue = '';
|
|
18457
|
+
this.validationErrors = [];
|
|
18458
|
+
this.editorOptions = {};
|
|
18459
|
+
this.editorInstance = null;
|
|
18460
|
+
this.markersSubscription = null;
|
|
18461
|
+
this.fallbackSyntaxTimer = null;
|
|
18462
|
+
this.monacoMarkersTimer = null;
|
|
18463
|
+
}
|
|
18464
|
+
ngOnInit() {
|
|
18465
|
+
this.codeValue = this.value ?? '';
|
|
18466
|
+
this.updateEditorOptions();
|
|
18467
|
+
if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
|
|
18468
|
+
this.scheduleFallbackSyntaxCheck(this.codeValue);
|
|
18469
|
+
}
|
|
18470
|
+
}
|
|
18471
|
+
ngOnDestroy() {
|
|
18472
|
+
if (this.fallbackSyntaxTimer)
|
|
18473
|
+
clearTimeout(this.fallbackSyntaxTimer);
|
|
18474
|
+
if (this.monacoMarkersTimer) {
|
|
18475
|
+
clearTimeout(this.monacoMarkersTimer);
|
|
18476
|
+
this.monacoMarkersTimer = null;
|
|
18477
|
+
}
|
|
18478
|
+
this.markersSubscription?.();
|
|
18479
|
+
}
|
|
18480
|
+
ngOnChanges(changes) {
|
|
18481
|
+
if (changes['value'] && changes['value'].currentValue !== undefined) {
|
|
18482
|
+
const newVal = changes['value'].currentValue ?? '';
|
|
18483
|
+
// Only update when value actually changed - avoids overwriting user input during typing
|
|
18484
|
+
if (newVal !== this.codeValue) {
|
|
18485
|
+
this.codeValue = newVal;
|
|
18486
|
+
if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
|
|
18487
|
+
this.scheduleFallbackSyntaxCheck(newVal);
|
|
18488
|
+
}
|
|
18489
|
+
}
|
|
18490
|
+
}
|
|
18491
|
+
// Only update editor options when language or readOnly changes - value changes must NOT
|
|
18492
|
+
// recreate editorOptions or ngx-monaco-editor will re-init and dispose the editor,
|
|
18493
|
+
// causing "Canceled" errors from Monaco's async operations (word highlighting, etc.)
|
|
18494
|
+
if (changes['language'] || changes['readOnly']) {
|
|
18495
|
+
this.updateEditorOptions();
|
|
18496
|
+
}
|
|
18497
|
+
}
|
|
18498
|
+
updateEditorOptions() {
|
|
18499
|
+
const monacoLang = MONACO_LANGUAGE_MAP[this.language] || this.language || 'plaintext';
|
|
18500
|
+
const hasDiagnostics = ['javascript', 'typescript'].includes(monacoLang);
|
|
18501
|
+
this.editorOptions = {
|
|
18502
|
+
theme: 'vs',
|
|
18503
|
+
language: monacoLang,
|
|
18504
|
+
minimap: { enabled: false },
|
|
18505
|
+
scrollBeyondLastLine: false,
|
|
18506
|
+
automaticLayout: true,
|
|
18507
|
+
fontSize: 13,
|
|
18508
|
+
lineNumbers: 'on',
|
|
18509
|
+
roundedSelection: false,
|
|
18510
|
+
readOnly: this.readOnly,
|
|
18511
|
+
cursorStyle: 'line',
|
|
18512
|
+
wordWrap: 'on',
|
|
18513
|
+
// useWorker: false - Monaco workers require AMD loader (define) which fails in
|
|
18514
|
+
// bundled environments (Storybook, some webpack setups). Running in main thread
|
|
18515
|
+
// avoids "define is not defined" and worker creation errors.
|
|
18516
|
+
...(hasDiagnostics ? { quickSuggestions: true } : {}),
|
|
18517
|
+
useWorker: false,
|
|
18518
|
+
};
|
|
18519
|
+
}
|
|
18520
|
+
onCodeChange(newValue) {
|
|
18521
|
+
this.codeValue = newValue;
|
|
18522
|
+
this.valueChange.emit(newValue);
|
|
18523
|
+
if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
|
|
18524
|
+
this.scheduleFallbackSyntaxCheck(newValue);
|
|
18525
|
+
}
|
|
18526
|
+
}
|
|
18527
|
+
onFallbackInput(event) {
|
|
18528
|
+
const target = event.target;
|
|
18529
|
+
const newValue = target?.value ?? '';
|
|
18530
|
+
this.codeValue = newValue;
|
|
18531
|
+
this.valueChange.emit(newValue);
|
|
18532
|
+
if (['javascript', 'typescript'].includes(this.language)) {
|
|
18533
|
+
this.scheduleFallbackSyntaxCheck(newValue);
|
|
18534
|
+
}
|
|
18535
|
+
}
|
|
18536
|
+
/** Debounced syntax check for fallback mode - avoids running on every keystroke */
|
|
18537
|
+
scheduleFallbackSyntaxCheck(code) {
|
|
18538
|
+
if (this.fallbackSyntaxTimer)
|
|
18539
|
+
clearTimeout(this.fallbackSyntaxTimer);
|
|
18540
|
+
this.fallbackSyntaxTimer = setTimeout(() => {
|
|
18541
|
+
this.fallbackSyntaxTimer = null;
|
|
18542
|
+
this.checkFallbackSyntax(code);
|
|
18543
|
+
}, 300);
|
|
18544
|
+
}
|
|
18545
|
+
/** Syntax validation for fallback (textarea) mode - JS/TS only */
|
|
18546
|
+
checkFallbackSyntax(code) {
|
|
18547
|
+
if (!['javascript', 'typescript'].includes(this.language)) {
|
|
18548
|
+
this.validationErrors = [];
|
|
18549
|
+
this.validationChange.emit(this.validationErrors);
|
|
18550
|
+
return;
|
|
18551
|
+
}
|
|
18552
|
+
if (!code || !code.trim()) {
|
|
18553
|
+
this.validationErrors = [];
|
|
18554
|
+
this.validationChange.emit(this.validationErrors);
|
|
18555
|
+
return;
|
|
18556
|
+
}
|
|
18557
|
+
try {
|
|
18558
|
+
new Function(code);
|
|
18559
|
+
this.validationErrors = [];
|
|
18560
|
+
}
|
|
18561
|
+
catch (e) {
|
|
18562
|
+
if (e instanceof SyntaxError) {
|
|
18563
|
+
const err = e;
|
|
18564
|
+
const line = err.lineNumber ?? 1;
|
|
18565
|
+
this.validationErrors = [{
|
|
18566
|
+
message: err.message || 'Syntax error',
|
|
18567
|
+
severity: 'error',
|
|
18568
|
+
lineNumber: line,
|
|
18569
|
+
column: err.columnNumber,
|
|
18570
|
+
}];
|
|
18571
|
+
}
|
|
18572
|
+
else {
|
|
18573
|
+
this.validationErrors = [];
|
|
18574
|
+
}
|
|
18575
|
+
}
|
|
18576
|
+
this.validationChange.emit(this.validationErrors);
|
|
18577
|
+
}
|
|
18578
|
+
onEditorInit(editor) {
|
|
18579
|
+
this.editorInstance = editor;
|
|
18580
|
+
this.setupMarkersListener(editor);
|
|
18581
|
+
editor.onDidBlurEditorWidget?.(() => this.blur.emit());
|
|
18582
|
+
if (['javascript', 'typescript'].includes(this.language)) {
|
|
18583
|
+
this.scheduleFallbackSyntaxCheck(this.codeValue);
|
|
18584
|
+
}
|
|
18585
|
+
}
|
|
18586
|
+
setupMarkersListener(editor) {
|
|
18587
|
+
this.markersSubscription?.();
|
|
18588
|
+
const model = editor.getModel?.();
|
|
18589
|
+
if (!model?.uri)
|
|
18590
|
+
return;
|
|
18591
|
+
const win = window;
|
|
18592
|
+
const checkMarkers = () => {
|
|
18593
|
+
try {
|
|
18594
|
+
if (!win.monaco?.editor?.getModelMarkers)
|
|
18595
|
+
return;
|
|
18596
|
+
const markers = win.monaco.editor.getModelMarkers({ resource: model.uri }) || [];
|
|
18597
|
+
const monacoErrors = markers
|
|
18598
|
+
.filter((m) => m.severity === 8) // 8 = Error in Monaco
|
|
18599
|
+
.map((m) => ({
|
|
18600
|
+
message: m.message || 'Syntax error',
|
|
18601
|
+
severity: 'error',
|
|
18602
|
+
lineNumber: m.startLineNumber || 1,
|
|
18603
|
+
column: m.startColumn,
|
|
18604
|
+
}));
|
|
18605
|
+
// Only update from Monaco when it has markers - otherwise keep fallback results
|
|
18606
|
+
// (Monaco may not produce markers when useWorker: false in bundled environments)
|
|
18607
|
+
if (monacoErrors.length > 0) {
|
|
18608
|
+
this.validationErrors = monacoErrors;
|
|
18609
|
+
this.validationChange.emit(this.validationErrors);
|
|
18610
|
+
}
|
|
18611
|
+
}
|
|
18612
|
+
catch {
|
|
18613
|
+
// Monaco may not be loaded yet
|
|
18614
|
+
}
|
|
18615
|
+
};
|
|
18616
|
+
const disposeMarkers = win.monaco?.editor?.onDidChangeMarkers?.(() => {
|
|
18617
|
+
checkMarkers();
|
|
18618
|
+
});
|
|
18619
|
+
const scheduleCheckMarkers = () => {
|
|
18620
|
+
if (this.monacoMarkersTimer)
|
|
18621
|
+
clearTimeout(this.monacoMarkersTimer);
|
|
18622
|
+
this.monacoMarkersTimer = setTimeout(() => {
|
|
18623
|
+
this.monacoMarkersTimer = null;
|
|
18624
|
+
checkMarkers();
|
|
18625
|
+
}, 400);
|
|
18626
|
+
};
|
|
18627
|
+
editor.onDidChangeModelContent?.(scheduleCheckMarkers);
|
|
18628
|
+
setTimeout(checkMarkers, 600);
|
|
18629
|
+
this.markersSubscription = () => {
|
|
18630
|
+
if (this.monacoMarkersTimer) {
|
|
18631
|
+
clearTimeout(this.monacoMarkersTimer);
|
|
18632
|
+
this.monacoMarkersTimer = null;
|
|
18633
|
+
}
|
|
18634
|
+
disposeMarkers?.dispose?.();
|
|
18635
|
+
};
|
|
18636
|
+
}
|
|
18637
|
+
get hasValidationErrors() {
|
|
18638
|
+
return this.validationErrors.length > 0;
|
|
18639
|
+
}
|
|
18640
|
+
get hasErrors() {
|
|
18641
|
+
return (this.errors?.length ?? 0) > 0 || this.hasValidationErrors;
|
|
18642
|
+
}
|
|
18643
|
+
/** All error messages: external errors + syntax errors formatted as strings */
|
|
18644
|
+
get allErrorMessages() {
|
|
18645
|
+
const external = this.errors ?? [];
|
|
18646
|
+
const syntax = this.validationErrors.map((e) => `Line ${e.lineNumber}: ${e.message}`);
|
|
18647
|
+
return [...external, ...syntax];
|
|
18648
|
+
}
|
|
18649
|
+
}
|
|
18650
|
+
CodeEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CodeEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18651
|
+
CodeEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: CodeEditorComponent, selector: "cqa-code-editor", inputs: { value: "value", language: "language", label: "label", required: "required", placeholder: "placeholder", fullWidth: "fullWidth", ariaLabel: "ariaLabel", minHeight: "minHeight", readOnly: "readOnly", errors: "errors", useFallback: "useFallback" }, outputs: { valueChange: "valueChange", validationChange: "validationChange", blur: "blur" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "monacoEditorRef", first: true, predicate: ["monacoEditor"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-w-full\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label\n *ngIf=\"label\"\n class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <!-- Fallback: plain textarea when Monaco is not available (e.g. Storybook) -->\n <div\n *ngIf=\"useFallback\"\n class=\"cqa-code-editor-container cqa-code-editor-fallback cqa-w-full\"\n [class.cqa-has-errors]=\"hasErrors\"\n [style.height]=\"minHeight\"\n [style.min-height]=\"minHeight\">\n <textarea\n class=\"cqa-code-editor-textarea\"\n [value]=\"codeValue\"\n (input)=\"onFallbackInput($event)\"\n (blur)=\"blur.emit()\"\n [placeholder]=\"placeholder\"\n [readonly]=\"readOnly\"\n [attr.aria-label]=\"ariaLabel || label || 'Code editor'\"\n [attr.aria-invalid]=\"hasErrors\"\n [attr.aria-required]=\"required\">\n </textarea>\n </div>\n <!-- Monaco editor (used in main app) -->\n <div\n *ngIf=\"!useFallback\"\n class=\"cqa-code-editor-container cqa-w-full\"\n [class.cqa-has-errors]=\"hasErrors\"\n [style.height]=\"minHeight\"\n [style.min-height]=\"minHeight\">\n <ngx-monaco-editor\n #monacoEditor\n class=\"cqa-monaco-editor\"\n [options]=\"editorOptions\"\n [ngModel]=\"codeValue\"\n (ngModelChange)=\"onCodeChange($event)\"\n (onInit)=\"onEditorInit($event)\">\n </ngx-monaco-editor>\n </div>\n\n <!-- Error messages (same style as custom-textarea) -->\n <div *ngIf=\"hasErrors\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of allErrorMessages\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n</div>\n", styles: [".cqa-code-editor-container{min-height:200px;height:200px;border:1px solid #e5e7eb;border-radius:6px;overflow:hidden;display:flex;flex-direction:column;background:#fff;transition:border-color .2s,box-shadow .2s}.cqa-code-editor-container:focus-within{border-color:#3b82f6;box-shadow:0 0 0 1px #3b82f6}.cqa-code-editor-container.cqa-has-errors{border-color:#ef4444}.cqa-code-editor-container.cqa-has-errors:focus-within{border-color:#ef4444;box-shadow:0 0 0 1px #ef4444}.cqa-code-editor-container .cqa-monaco-editor,.cqa-code-editor-container ngx-monaco-editor{flex:1;min-height:0}.cqa-code-editor-container ::ng-deep .monaco-editor{height:100%!important}.cqa-code-editor-fallback .cqa-code-editor-textarea{width:100%;height:100%;min-height:180px;padding:12px;font-family:Monaco,Menlo,Ubuntu Mono,Consolas,monospace;font-size:13px;line-height:1.5;border:none;resize:none;outline:none;background:#fff;color:#0a0a0a}.cqa-code-editor-fallback .cqa-code-editor-textarea::placeholder{color:#9ca3af}\n"], components: [{ type: i1$6.EditorComponent, selector: "ngx-monaco-editor", inputs: ["options", "model"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
18652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CodeEditorComponent, decorators: [{
|
|
18653
|
+
type: Component,
|
|
18654
|
+
args: [{ selector: 'cqa-code-editor', styles: [CODE_EDITOR_STYLES], host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-w-full\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n <label\n *ngIf=\"label\"\n class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n {{ label }}\n <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n\n <!-- Fallback: plain textarea when Monaco is not available (e.g. Storybook) -->\n <div\n *ngIf=\"useFallback\"\n class=\"cqa-code-editor-container cqa-code-editor-fallback cqa-w-full\"\n [class.cqa-has-errors]=\"hasErrors\"\n [style.height]=\"minHeight\"\n [style.min-height]=\"minHeight\">\n <textarea\n class=\"cqa-code-editor-textarea\"\n [value]=\"codeValue\"\n (input)=\"onFallbackInput($event)\"\n (blur)=\"blur.emit()\"\n [placeholder]=\"placeholder\"\n [readonly]=\"readOnly\"\n [attr.aria-label]=\"ariaLabel || label || 'Code editor'\"\n [attr.aria-invalid]=\"hasErrors\"\n [attr.aria-required]=\"required\">\n </textarea>\n </div>\n <!-- Monaco editor (used in main app) -->\n <div\n *ngIf=\"!useFallback\"\n class=\"cqa-code-editor-container cqa-w-full\"\n [class.cqa-has-errors]=\"hasErrors\"\n [style.height]=\"minHeight\"\n [style.min-height]=\"minHeight\">\n <ngx-monaco-editor\n #monacoEditor\n class=\"cqa-monaco-editor\"\n [options]=\"editorOptions\"\n [ngModel]=\"codeValue\"\n (ngModelChange)=\"onCodeChange($event)\"\n (onInit)=\"onEditorInit($event)\">\n </ngx-monaco-editor>\n </div>\n\n <!-- Error messages (same style as custom-textarea) -->\n <div *ngIf=\"hasErrors\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div *ngFor=\"let error of allErrorMessages\" class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n {{ error }}\n </span>\n </div>\n </div>\n</div>\n" }]
|
|
18655
|
+
}], propDecorators: { value: [{
|
|
18656
|
+
type: Input
|
|
18657
|
+
}], language: [{
|
|
18658
|
+
type: Input
|
|
18659
|
+
}], label: [{
|
|
18660
|
+
type: Input
|
|
18661
|
+
}], required: [{
|
|
18662
|
+
type: Input
|
|
18663
|
+
}], placeholder: [{
|
|
18664
|
+
type: Input
|
|
18665
|
+
}], fullWidth: [{
|
|
18666
|
+
type: Input
|
|
18667
|
+
}], ariaLabel: [{
|
|
18668
|
+
type: Input
|
|
18669
|
+
}], minHeight: [{
|
|
18670
|
+
type: Input
|
|
18671
|
+
}], readOnly: [{
|
|
18672
|
+
type: Input
|
|
18673
|
+
}], errors: [{
|
|
18674
|
+
type: Input
|
|
18675
|
+
}], useFallback: [{
|
|
18676
|
+
type: Input
|
|
18677
|
+
}], valueChange: [{
|
|
18678
|
+
type: Output
|
|
18679
|
+
}], validationChange: [{
|
|
18680
|
+
type: Output
|
|
18681
|
+
}], blur: [{
|
|
18682
|
+
type: Output
|
|
18683
|
+
}], monacoEditorRef: [{
|
|
18684
|
+
type: ViewChild,
|
|
18685
|
+
args: ['monacoEditor', { static: false }]
|
|
18686
|
+
}] } });
|
|
18687
|
+
|
|
18369
18688
|
class CustomToggleComponent {
|
|
18370
18689
|
constructor() {
|
|
18371
18690
|
this.checked = false;
|
|
@@ -20031,14 +20350,14 @@ class CustomEditStepService {
|
|
|
20031
20350
|
return editStepRef;
|
|
20032
20351
|
}
|
|
20033
20352
|
}
|
|
20034
|
-
CustomEditStepService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, deps: [{ token: i1$
|
|
20353
|
+
CustomEditStepService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
20035
20354
|
CustomEditStepService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, providedIn: 'root' });
|
|
20036
20355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CustomEditStepService, decorators: [{
|
|
20037
20356
|
type: Injectable,
|
|
20038
20357
|
args: [{
|
|
20039
20358
|
providedIn: 'root',
|
|
20040
20359
|
}]
|
|
20041
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
20360
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
20042
20361
|
|
|
20043
20362
|
/** Sentinel returned from afterClosed() when user clicked "Edit in depth". */
|
|
20044
20363
|
const ELEMENT_POPUP_EDIT_IN_DEPTH = Symbol('ElementPopupEditInDepth');
|
|
@@ -20867,14 +21186,14 @@ class ElementPopupService {
|
|
|
20867
21186
|
return editStepRef;
|
|
20868
21187
|
}
|
|
20869
21188
|
}
|
|
20870
|
-
ElementPopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupService, deps: [{ token: i1$
|
|
21189
|
+
ElementPopupService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
20871
21190
|
ElementPopupService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupService, providedIn: 'root' });
|
|
20872
21191
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementPopupService, decorators: [{
|
|
20873
21192
|
type: Injectable,
|
|
20874
21193
|
args: [{
|
|
20875
21194
|
providedIn: 'root',
|
|
20876
21195
|
}]
|
|
20877
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
21196
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
20878
21197
|
|
|
20879
21198
|
class TestDataModalRef {
|
|
20880
21199
|
constructor(overlayRef) {
|
|
@@ -21372,14 +21691,14 @@ class TestDataModalService {
|
|
|
21372
21691
|
return modalRef;
|
|
21373
21692
|
}
|
|
21374
21693
|
}
|
|
21375
|
-
TestDataModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataModalService, deps: [{ token: i1$
|
|
21694
|
+
TestDataModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataModalService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21376
21695
|
TestDataModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataModalService, providedIn: 'root' });
|
|
21377
21696
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestDataModalService, decorators: [{
|
|
21378
21697
|
type: Injectable,
|
|
21379
21698
|
args: [{
|
|
21380
21699
|
providedIn: 'root',
|
|
21381
21700
|
}]
|
|
21382
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
21701
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
21383
21702
|
|
|
21384
21703
|
class TestCaseNormalStepComponent {
|
|
21385
21704
|
constructor(customEditStep, elementPopup, testDataModal, cdr, ngZone, sanitizer) {
|
|
@@ -25466,12 +25785,12 @@ class TestCaseApiStepComponent {
|
|
|
25466
25785
|
}
|
|
25467
25786
|
onSelectionChange(checked) { this.selected = checked; this.selectionChange.emit(checked); }
|
|
25468
25787
|
}
|
|
25469
|
-
TestCaseApiStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseApiStepComponent, deps: [{ token: i1$
|
|
25788
|
+
TestCaseApiStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseApiStepComponent, deps: [{ token: i1$7.OverlayContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
25470
25789
|
TestCaseApiStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TestCaseApiStepComponent, selector: "cqa-test-case-api-step", inputs: { config: "config", stepNumber: "stepNumber", method: "method", endpoint: "endpoint", description: "description", baseUrl: "baseUrl", headersCount: "headersCount", hasBody: "hasBody", saveTo: "saveTo", selected: "selected", disabled: "disabled", isNested: "isNested", isInsideLoop: "isInsideLoop", isInsideStepGroup: "isInsideStepGroup", expanded: "expanded", isReorder: "isReorder", isDuplicating: "isDuplicating", environmentOptions: "environmentOptions", httpMethodOptions: "httpMethodOptions", headerNameOptions: "headerNameOptions" }, outputs: { edit: "edit", editInDepth: "editInDepth", link: "link", duplicate: "duplicate", delete: "delete", moreOptions: "moreOptions", viewDetails: "viewDetails", selectionChange: "selectionChange", toggleExpanded: "toggleExpanded" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "editModalBackdropRef", first: true, predicate: ["editModalBackdrop"], descendants: true }], ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col\" style=\"border-top: 1px solid #E5E7EB;\">\n <div\n [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : 'cqa-px-4')\">\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"!isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\" [ngModel]=\"selected\" [disabled]=\"disabled\" (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\" [class.cqa-border-[#3F43EE]]=\"selected\" id=\"check\" />\n <span\n class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\" [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </label>\n </div>\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n <span title=\"API\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#D1FAE5] cqa-text-[#059669]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.08333 7H9.91667M9.91667 7L7.58333 4.66667M9.91667 7L7.58333 9.33333\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M7 12.8333C10.2217 12.8333 12.8333 10.2217 12.8333 7C12.8333 3.77834 10.2217 1.16667 7 1.16667C3.77834 1.16667 1.16667 3.77834 1.16667 7C1.16667 10.2217 3.77834 12.8333 7 12.8333Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <div class=\"cqa-flex-grow cqa-flex cqa-flex-col cqa-gap-1\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-justify-between\">\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ getDisplayText() }}</span>\n <a *ngIf=\"description && description.trim() !== ''\" href=\"#\" (click)=\"onViewDetails($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-2 cqa-no-underline\">\n {{ expanded ? 'Hide Details' : 'View Details' }}\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n <!-- Expanded details: light yellow box with method, URL, headers, body, save to -->\n <div *ngIf=\"expanded\"\n [class]=\"'cqa-py-1 cqa-px-3 cqa-rounded-lg cqa-border cqa-border-solid cqa-bg-[#FEFCE8] cqa-border-[#FFF085]' + (isInsideLoop ? ' cqa-ml-10' : '')\">\n <div\n class=\"cqa-text-[#6B7280] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-8\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-text-[#733E0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-normal\">{{method }}</span>\n <span>{{ baseUrl || 'https://api.example.com' }}</span>\n </div>\n <span class=\"cqa-text-[#111827]\">{{ endpoint }}</span>\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span>Headers: {{ headersCount ?? 0 }}</span>\n <span>Body: {{ hasBody ? 'Yes' : 'No' }}</span>\n <span>Save to: {{ saveTo || '\u2014' }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <div *ngIf=\"!isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-3 cqa-px-[7px]\">\n <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9.55208 2.1128C9.7843 1.88058 10.0993 1.75012 10.4277 1.75012C10.7561 1.75012 11.071 1.88058 11.3033 2.1128C11.5355 2.34502 11.6659 2.65998 11.6659 2.98838C11.6659 3.31679 11.5355 3.63175 11.3033 3.86397L4.29742 10.8704C4.15864 11.0092 3.9871 11.1107 3.79867 11.1656L2.12333 11.6544C2.07314 11.669 2.01993 11.6699 1.96928 11.6569C1.91863 11.6439 1.8724 11.6176 1.83543 11.5806C1.79846 11.5437 1.7721 11.4974 1.75913 11.4468C1.74615 11.3961 1.74703 11.3429 1.76167 11.2927L2.2505 9.61738C2.30546 9.42916 2.40698 9.25783 2.54567 9.11922L9.55208 2.1128Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.00065 9.91671H3.66732C2.78326 9.91671 1.93542 9.60942 1.3103 9.06244C0.685174 8.51545 0.333984 7.77359 0.333984 7.00004C0.333984 6.22649 0.685174 5.48463 1.3103 4.93765C1.93542 4.39066 2.78326 4.08337 3.66732 4.08337H5.00065\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M9 4.08337H10.3333C11.2174 4.08337 12.0652 4.39066 12.6904 4.93765C13.3155 5.48463 13.6667 6.22649 13.6667 7.00004C13.6667 7.77359 13.3155 8.51545 12.6904 9.06244C12.0652 9.60942 11.2174 9.91671 10.3333 9.91671H9\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.666 4.66663H5.83268C5.18835 4.66663 4.66602 5.18896 4.66602 5.83329V11.6666C4.66602 12.311 5.18835 12.8333 5.83268 12.8333H11.666C12.3103 12.8333 12.8327 12.311 12.8327 11.6666V5.83329C12.8327 5.18896 12.3103 4.66663 11.666 4.66663Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M2.33268 9.33329C1.69102 9.33329 1.16602 8.80829 1.16602 8.16663V2.33329C1.16602 1.69163 1.69102 1.16663 2.33268 1.16663H8.16602C8.80768 1.16663 9.33268 1.69163 9.33268 2.33329\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\n <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\"\n class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.0827 3.5V11.6667C11.0827 12.25 10.4993 12.8333 9.91602 12.8333H4.08268C3.49935 12.8333 2.91602 12.25 2.91602 11.6667V3.5\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M4.66602 3.49996V2.33329C4.66602 1.74996 5.24935 1.16663 5.83268 1.16663H8.16602C8.74935 1.16663 9.33268 1.74996 9.33268 2.33329V3.49996\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n </div>\n</div>", styles: [".step-actions{opacity:0;transition:opacity .15s ease}.step-row:hover .step-actions{opacity:1}.step-row{vertical-align:middle;letter-spacing:normal}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "date": i2.DatePipe } });
|
|
25471
25790
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TestCaseApiStepComponent, decorators: [{
|
|
25472
25791
|
type: Component,
|
|
25473
25792
|
args: [{ selector: 'cqa-test-case-api-step', host: { class: 'cqa-ui-root' }, styles: [STEP_ROW_ACTIONS_STYLES], template: "<div class=\"cqa-flex cqa-flex-col\" style=\"border-top: 1px solid #E5E7EB;\">\n <div\n [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 ' + (isInsideLoop && isInsideStepGroup ? 'cqa-pl-20 cqa-pr-4' : (isInsideLoop || isInsideStepGroup) ? 'cqa-pl-10 cqa-pr-4' : 'cqa-px-4')\">\n <div class=\"cqa-inline-flex cqa-items-center\">\n <!-- Drag Handle Icon (when isReorder is true and not inside step group - steps inside step groups cannot be reordered) -->\n <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-mr-2 cqa-cursor-move cqa-text-[#6B7280] hover:cqa-text-[#111827]\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"currentColor\"/>\n </svg>\n </div>\n <!-- Checkbox (when isReorder is false and not inside step group - hide for steps inside step groups) -->\n <label *ngIf=\"!isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n <input type=\"checkbox\" [ngModel]=\"selected\" [disabled]=\"disabled\" (ngModelChange)=\"onSelectionChange($event)\"\n class=\"cqa-h-4 cqa-w-4 cqa-cursor-pointer cqa-transition-all cqa-appearance-none cqa-rounded shadow hover:cqa-shadow-md cqa-border cqa-border-solid cqa-border-slate-300 cqa-flex-shrink-0\"\n [class.cqa-bg-[#3F43EE]]=\"selected\" [class.cqa-border-[#3F43EE]]=\"selected\" id=\"check\" />\n <span\n class=\"cqa-absolute cqa-text-white cqa-top-1/2 cqa-left-1/2 cqa--translate-x-1/2 cqa--translate-y-1/2 cqa-pointer-events-none cqa-flex cqa-items-center cqa-justify-center\"\n [class.cqa-opacity-0]=\"!selected\" [class.cqa-opacity-100]=\"selected\">\n <svg width=\"12\" height=\"13\" viewBox=\"0 0 12 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n </label>\n </div>\n <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n <span title=\"API\"\n class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#D1FAE5] cqa-text-[#059669]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.08333 7H9.91667M9.91667 7L7.58333 4.66667M9.91667 7L7.58333 9.33333\" stroke=\"currentColor\"\n stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M7 12.8333C10.2217 12.8333 12.8333 10.2217 12.8333 7C12.8333 3.77834 10.2217 1.16667 7 1.16667C3.77834 1.16667 1.16667 3.77834 1.16667 7C1.16667 10.2217 3.77834 12.8333 7 12.8333Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n <div class=\"cqa-flex-grow cqa-flex cqa-flex-col cqa-gap-1\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-justify-between\">\n <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ getDisplayText() }}</span>\n <a *ngIf=\"description && description.trim() !== ''\" href=\"#\" (click)=\"onViewDetails($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-2 cqa-no-underline\">\n {{ expanded ? 'Hide Details' : 'View Details' }}\n <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\"\n fill=\"#3F43EE\" />\n </svg>\n </a>\n </div>\n <!-- Expanded details: light yellow box with method, URL, headers, body, save to -->\n <div *ngIf=\"expanded\"\n [class]=\"'cqa-py-1 cqa-px-3 cqa-rounded-lg cqa-border cqa-border-solid cqa-bg-[#FEFCE8] cqa-border-[#FFF085]' + (isInsideLoop ? ' cqa-ml-10' : '')\">\n <div\n class=\"cqa-text-[#6B7280] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-8\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span class=\"cqa-text-[#733E0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-normal\">{{method }}</span>\n <span>{{ baseUrl || 'https://api.example.com' }}</span>\n </div>\n <span class=\"cqa-text-[#111827]\">{{ endpoint }}</span>\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <span>Headers: {{ headersCount ?? 0 }}</span>\n <span>Body: {{ hasBody ? 'Yes' : 'No' }}</span>\n <span>Save to: {{ saveTo || '\u2014' }}</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n <div *ngIf=\"!isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-3 cqa-px-[7px]\">\n <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M9.55208 2.1128C9.7843 1.88058 10.0993 1.75012 10.4277 1.75012C10.7561 1.75012 11.071 1.88058 11.3033 2.1128C11.5355 2.34502 11.6659 2.65998 11.6659 2.98838C11.6659 3.31679 11.5355 3.63175 11.3033 3.86397L4.29742 10.8704C4.15864 11.0092 3.9871 11.1107 3.79867 11.1656L2.12333 11.6544C2.07314 11.669 2.01993 11.6699 1.96928 11.6569C1.91863 11.6439 1.8724 11.6176 1.83543 11.5806C1.79846 11.5437 1.7721 11.4974 1.75913 11.4468C1.74615 11.3961 1.74703 11.3429 1.76167 11.2927L2.2505 9.61738C2.30546 9.42916 2.40698 9.25783 2.54567 9.11922L9.55208 2.1128Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.00065 9.91671H3.66732C2.78326 9.91671 1.93542 9.60942 1.3103 9.06244C0.685174 8.51545 0.333984 7.77359 0.333984 7.00004C0.333984 6.22649 0.685174 5.48463 1.3103 4.93765C1.93542 4.39066 2.78326 4.08337 3.66732 4.08337H5.00065\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M9 4.08337H10.3333C11.2174 4.08337 12.0652 4.39066 12.6904 4.93765C13.3155 5.48463 13.6667 6.22649 13.6667 7.00004C13.6667 7.77359 13.3155 8.51545 12.6904 9.06244C12.0652 9.60942 11.2174 9.91671 10.3333 9.91671H9\"\n stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button> -->\n <button\n type=\"button\"\n (click)=\"onDuplicate(); $event.stopPropagation()\"\n [disabled]=\"isDuplicating\"\n [attr.title]=\"isDuplicating ? 'Duplicating...' : 'Duplicate'\"\n class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-60 disabled:cqa-cursor-not-allowed\"\n >\n <svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M11.666 4.66663H5.83268C5.18835 4.66663 4.66602 5.18896 4.66602 5.83329V11.6666C4.66602 12.311 5.18835 12.8333 5.83268 12.8333H11.666C12.3103 12.8333 12.8327 12.311 12.8327 11.6666V5.83329C12.8327 5.18896 12.3103 4.66663 11.666 4.66663Z\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M2.33268 9.33329C1.69102 9.33329 1.16602 8.80829 1.16602 8.16663V2.33329C1.16602 1.69163 1.69102 1.16663 2.33268 1.16663H8.16602C8.80768 1.16663 9.33268 1.69163 9.33268 2.33329\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n <svg *ngIf=\"isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-label=\"Duplicating\">\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-opacity=\"0.2\" stroke-width=\"2\"></circle>\n <path d=\"M14 8A6 6 0 0 0 8 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 8 8\" to=\"360 8 8\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n </path>\n </svg>\n </button>\n <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\"\n class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path\n d=\"M11.0827 3.5V11.6667C11.0827 12.25 10.4993 12.8333 9.91602 12.8333H4.08268C3.49935 12.8333 2.91602 12.25 2.91602 11.6667V3.5\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path\n d=\"M4.66602 3.49996V2.33329C4.66602 1.74996 5.24935 1.16663 5.83268 1.16663H8.16602C8.74935 1.16663 9.33268 1.74996 9.33268 2.33329V3.49996\"\n stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n <path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" />\n </svg>\n </button>\n </div>\n <!-- Created Date (from API) - last so aligned across all steps, format: 25 Feb 2026 -->\n <span *ngIf=\"config.createdDate\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-ml-auto cqa-flex-shrink-0\">\n {{ config.createdDate | date:'d MMM yyyy' }}\n </span>\n </div>\n </div>\n</div>" }]
|
|
25474
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
25793
|
+
}], ctorParameters: function () { return [{ type: i1$7.OverlayContainer }]; }, propDecorators: { editModalBackdropRef: [{
|
|
25475
25794
|
type: ViewChild,
|
|
25476
25795
|
args: ['editModalBackdrop']
|
|
25477
25796
|
}], config: [{
|
|
@@ -35183,6 +35502,7 @@ class StepBuilderCustomCodeComponent {
|
|
|
35183
35502
|
this.templateVariables = [];
|
|
35184
35503
|
this.advancedSettingsVariables = [];
|
|
35185
35504
|
this.advancedExpanded = true;
|
|
35505
|
+
this.codeValidationErrors = [];
|
|
35186
35506
|
this.customCodeForm = this.fb.group({
|
|
35187
35507
|
language: ['', Validators.required],
|
|
35188
35508
|
code: ['', Validators.required],
|
|
@@ -35373,6 +35693,27 @@ class StepBuilderCustomCodeComponent {
|
|
|
35373
35693
|
toggleAdvanced() {
|
|
35374
35694
|
this.advancedExpanded = !this.advancedExpanded;
|
|
35375
35695
|
}
|
|
35696
|
+
onCodeValueChange(value) {
|
|
35697
|
+
this.customCodeForm.get('code')?.setValue(value, { emitEvent: false });
|
|
35698
|
+
}
|
|
35699
|
+
onCodeValidationChange(errors) {
|
|
35700
|
+
this.codeValidationErrors = errors || [];
|
|
35701
|
+
}
|
|
35702
|
+
get hasCodeSyntaxErrors() {
|
|
35703
|
+
return this.codeValidationErrors.length > 0;
|
|
35704
|
+
}
|
|
35705
|
+
/** Form validation errors for the code field (e.g. "Code is required") - passed to code editor [errors] */
|
|
35706
|
+
get codeFieldErrors() {
|
|
35707
|
+
const codeControl = this.customCodeForm.get('code');
|
|
35708
|
+
if (!codeControl?.invalid || !codeControl?.touched)
|
|
35709
|
+
return [];
|
|
35710
|
+
const err = codeControl.errors;
|
|
35711
|
+
if (!err)
|
|
35712
|
+
return [];
|
|
35713
|
+
if (err['required'])
|
|
35714
|
+
return ['Code is required'];
|
|
35715
|
+
return [];
|
|
35716
|
+
}
|
|
35376
35717
|
onCreateStep() {
|
|
35377
35718
|
if (this.customCodeForm.valid) {
|
|
35378
35719
|
// Sync advanced variables from form to array
|
|
@@ -35403,10 +35744,10 @@ class StepBuilderCustomCodeComponent {
|
|
|
35403
35744
|
}
|
|
35404
35745
|
}
|
|
35405
35746
|
StepBuilderCustomCodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderCustomCodeComponent, deps: [{ token: i1$1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
35406
|
-
StepBuilderCustomCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderCustomCodeComponent, selector: "cqa-step-builder-custom-code", inputs: { languageOptions: "languageOptions", template: "template", setTemplateVariables: "setTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", initialCode: "initialCode", initialLanguage: "initialLanguage", initialMetadata: "initialMetadata", initialDescription: "initialDescription", isEditMode: "isEditMode" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code
|
|
35747
|
+
StepBuilderCustomCodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StepBuilderCustomCodeComponent, selector: "cqa-step-builder-custom-code", inputs: { languageOptions: "languageOptions", template: "template", setTemplateVariables: "setTemplateVariables", setAdvancedSettingsVariables: "setAdvancedSettingsVariables", initialCode: "initialCode", initialLanguage: "initialLanguage", initialMetadata: "initialMetadata", initialDescription: "initialDescription", isEditMode: "isEditMode" }, outputs: { createStep: "createStep", cancelled: "cancelled" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code Editor -->\n <div class=\"cqa-mb-3\">\n <cqa-code-editor\n [label]=\"'Code'\"\n [required]=\"true\"\n [value]=\"customCodeForm.get('code')?.value\"\n [language]=\"customCodeForm.get('language')?.value || 'javascript'\"\n [minHeight]=\"'220px'\"\n [fullWidth]=\"true\"\n [errors]=\"codeFieldErrors\"\n (valueChange)=\"onCodeValueChange($event)\"\n (validationChange)=\"onCodeValidationChange($event)\"\n (blur)=\"customCodeForm.get('code')?.markAsTouched()\">\n </cqa-code-editor>\n </div>\n\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Template Variables Section -->\n <div *ngIf=\"templateVariables && templateVariables.length > 0\" class=\"cqa-mb-4\">\n <!-- Template Variables Form Fields -->\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap cqa-mb-4\">\n <ng-container *ngFor=\"let variable of templateVariables\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"variable.type === 'boolean'\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n {{ variable.label }}\n </label>\n <mat-slide-toggle\n [checked]=\"variablesForm.get(variable.name)?.value || variable.value || false\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n </div>\n </ng-container>\n \n <!-- Non-boolean, non-custom_code variables -->\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type' || variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"advancedSettingsVariables.length > 0\" class=\"cqa-mb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"isEditMode ? 'Save Changes' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!customCodeForm.valid || hasCodeSyntaxErrors\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", components: [{ type: DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: CodeEditorComponent, selector: "cqa-code-editor", inputs: ["value", "language", "label", "required", "placeholder", "fullWidth", "ariaLabel", "minHeight", "readOnly", "errors", "useFallback"], outputs: ["valueChange", "validationChange", "blur"] }, { type: CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3$4.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: AdvancedVariablesFormComponent, selector: "cqa-advanced-variables-form", inputs: ["advancedVariables", "advancedVariableForm"], outputs: ["variableBooleanChange", "variableValueChange"] }, { type: ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
35407
35748
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepBuilderCustomCodeComponent, decorators: [{
|
|
35408
35749
|
type: Component,
|
|
35409
|
-
args: [{ selector: 'cqa-step-builder-custom-code', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code
|
|
35750
|
+
args: [{ selector: 'cqa-step-builder-custom-code', host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full\">\n <!-- Header -->\n <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n Custom Code Step\n </h2>\n\n <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n \n\n <!-- Language Dropdown -->\n <div class=\"cqa-mb-3\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Language<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n </label>\n <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"customCodeForm\" [config]=\"getLanguageConfig()\">\n </cqa-dynamic-select>\n </div>\n\n <!-- Code Editor -->\n <div class=\"cqa-mb-3\">\n <cqa-code-editor\n [label]=\"'Code'\"\n [required]=\"true\"\n [value]=\"customCodeForm.get('code')?.value\"\n [language]=\"customCodeForm.get('language')?.value || 'javascript'\"\n [minHeight]=\"'220px'\"\n [fullWidth]=\"true\"\n [errors]=\"codeFieldErrors\"\n (valueChange)=\"onCodeValueChange($event)\"\n (validationChange)=\"onCodeValidationChange($event)\"\n (blur)=\"customCodeForm.get('code')?.markAsTouched()\">\n </cqa-code-editor>\n </div>\n\n <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n <!-- Metadata Input -->\n <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Metadata\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('metadata')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('metadata')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n\n <!-- Description Input -->\n <div class=\"cqa-w-1/2 cqa-pl-2\">\n <label class=\"cqa-leading-[100%] cqa-block cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n Description\n </label>\n <cqa-custom-input\n [placeholder]=\"'Text Input'\"\n [value]=\"customCodeForm.get('description')?.value\"\n [fullWidth]=\"true\"\n (valueChange)=\"customCodeForm.get('description')?.setValue($event)\">\n </cqa-custom-input>\n </div>\n </div>\n\n <!-- Template Variables Section -->\n <div *ngIf=\"templateVariables && templateVariables.length > 0\" class=\"cqa-mb-4\">\n <!-- Template Variables Form Fields -->\n <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap cqa-mb-4\">\n <ng-container *ngFor=\"let variable of templateVariables\">\n <!-- Boolean variables with mat-slide-toggle -->\n <ng-container *ngIf=\"variable.type === 'boolean'\">\n <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n {{ variable.label }}\n </label>\n <mat-slide-toggle\n [checked]=\"variablesForm.get(variable.name)?.value || variable.value || false\"\n (change)=\"onVariableBooleanChange(variable.name, $event.checked)\"\n color=\"primary\">\n </mat-slide-toggle>\n </div>\n </ng-container>\n \n <!-- Non-boolean, non-custom_code variables -->\n <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean'\">\n <ng-container *ngIf=\"(variable.name === 'type' || variable.name === 'scrollTo'); else defaultInput\">\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-dynamic-select [form]=\"variablesForm\" [config]=\"getSelectConfig(variable)\">\n </cqa-dynamic-select>\n </div>\n </ng-container>\n <ng-template #defaultInput>\n <div class=\"cqa-flex cqa-flex-col\" style=\"width: calc(50% - 12px);\">\n <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n {{ variable.label }}\n </label>\n <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n </cqa-custom-input>\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- Advanced Settings Variables Form -->\n <div *ngIf=\"advancedSettingsVariables.length > 0\" class=\"cqa-mb-4\">\n <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n <button type=\"button\"\n class=\"cqa-flex cqa-w-full cqa-items-center cqa-justify-between cqa-gap-2 cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mb-1.5\"\n (click)=\"toggleAdvanced()\">\n <span class=\"cqa-text-[10px]\">Advanced</span>\n <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"advancedExpanded\">\n expand_more\n </mat-icon>\n </button>\n <div *ngIf=\"advancedExpanded\" class=\"cqa-mt-2\">\n <cqa-advanced-variables-form \n [advancedVariables]=\"advancedSettingsVariables\"\n [advancedVariableForm]=\"advancedVariablesForm\"\n (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\">\n </cqa-advanced-variables-form>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n <cqa-button class=\"cqa-w-1/2 cqa-rounded-[10px]\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n (clicked)=\"onCancel()\">\n </cqa-button>\n <cqa-button class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"isEditMode ? 'Save Changes' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n [disabled]=\"!customCodeForm.valid || hasCodeSyntaxErrors\"\n (clicked)=\"onCreateStep()\">\n </cqa-button>\n </div>\n</div>\n\n", styles: [] }]
|
|
35410
35751
|
}], ctorParameters: function () { return [{ type: i1$1.FormBuilder }]; }, propDecorators: { languageOptions: [{
|
|
35411
35752
|
type: Input
|
|
35412
35753
|
}], template: [{
|
|
@@ -38267,6 +38608,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
38267
38608
|
FailedStepCardComponent,
|
|
38268
38609
|
CustomInputComponent,
|
|
38269
38610
|
CustomTextareaComponent,
|
|
38611
|
+
CodeEditorComponent,
|
|
38270
38612
|
CustomToggleComponent,
|
|
38271
38613
|
FileUploadComponent,
|
|
38272
38614
|
AiReasoningComponent,
|
|
@@ -38308,6 +38650,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
38308
38650
|
StepBuilderConditionComponent,
|
|
38309
38651
|
StepBuilderDatabaseComponent,
|
|
38310
38652
|
StepBuilderAiAgentComponent,
|
|
38653
|
+
CodeEditorComponent,
|
|
38311
38654
|
StepBuilderCustomCodeComponent,
|
|
38312
38655
|
StepBuilderRecordStepComponent,
|
|
38313
38656
|
StepBuilderDocumentGenerationTemplateStepComponent,
|
|
@@ -38348,7 +38691,8 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
38348
38691
|
PortalModule,
|
|
38349
38692
|
ScrollingModule,
|
|
38350
38693
|
NgxTypedJsModule,
|
|
38351
|
-
DndModule
|
|
38694
|
+
DndModule,
|
|
38695
|
+
MonacoEditorModule], exports: [ButtonComponent,
|
|
38352
38696
|
SearchBarComponent,
|
|
38353
38697
|
AutocompleteComponent,
|
|
38354
38698
|
SegmentControlComponent,
|
|
@@ -38418,6 +38762,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
38418
38762
|
FailedStepCardComponent,
|
|
38419
38763
|
CustomInputComponent,
|
|
38420
38764
|
CustomTextareaComponent,
|
|
38765
|
+
CodeEditorComponent,
|
|
38421
38766
|
CustomToggleComponent,
|
|
38422
38767
|
FileUploadComponent,
|
|
38423
38768
|
AiReasoningComponent,
|
|
@@ -38458,6 +38803,7 @@ UiKitModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "1
|
|
|
38458
38803
|
StepBuilderConditionComponent,
|
|
38459
38804
|
StepBuilderDatabaseComponent,
|
|
38460
38805
|
StepBuilderAiAgentComponent,
|
|
38806
|
+
CodeEditorComponent,
|
|
38461
38807
|
StepBuilderCustomCodeComponent,
|
|
38462
38808
|
StepBuilderRecordStepComponent,
|
|
38463
38809
|
StepBuilderDocumentGenerationTemplateStepComponent,
|
|
@@ -38537,7 +38883,8 @@ UiKitModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "1
|
|
|
38537
38883
|
PortalModule,
|
|
38538
38884
|
ScrollingModule,
|
|
38539
38885
|
NgxTypedJsModule,
|
|
38540
|
-
DndModule
|
|
38886
|
+
DndModule,
|
|
38887
|
+
MonacoEditorModule
|
|
38541
38888
|
]] });
|
|
38542
38889
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: UiKitModule, decorators: [{
|
|
38543
38890
|
type: NgModule,
|
|
@@ -38614,6 +38961,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
38614
38961
|
FailedStepCardComponent,
|
|
38615
38962
|
CustomInputComponent,
|
|
38616
38963
|
CustomTextareaComponent,
|
|
38964
|
+
CodeEditorComponent,
|
|
38617
38965
|
CustomToggleComponent,
|
|
38618
38966
|
FileUploadComponent,
|
|
38619
38967
|
AiReasoningComponent,
|
|
@@ -38655,6 +39003,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
38655
39003
|
StepBuilderConditionComponent,
|
|
38656
39004
|
StepBuilderDatabaseComponent,
|
|
38657
39005
|
StepBuilderAiAgentComponent,
|
|
39006
|
+
CodeEditorComponent,
|
|
38658
39007
|
StepBuilderCustomCodeComponent,
|
|
38659
39008
|
StepBuilderRecordStepComponent,
|
|
38660
39009
|
StepBuilderDocumentGenerationTemplateStepComponent,
|
|
@@ -38698,7 +39047,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
38698
39047
|
PortalModule,
|
|
38699
39048
|
ScrollingModule,
|
|
38700
39049
|
NgxTypedJsModule,
|
|
38701
|
-
DndModule
|
|
39050
|
+
DndModule,
|
|
39051
|
+
MonacoEditorModule
|
|
38702
39052
|
],
|
|
38703
39053
|
exports: [
|
|
38704
39054
|
ButtonComponent,
|
|
@@ -38771,6 +39121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
38771
39121
|
FailedStepCardComponent,
|
|
38772
39122
|
CustomInputComponent,
|
|
38773
39123
|
CustomTextareaComponent,
|
|
39124
|
+
CodeEditorComponent,
|
|
38774
39125
|
CustomToggleComponent,
|
|
38775
39126
|
FileUploadComponent,
|
|
38776
39127
|
AiReasoningComponent,
|
|
@@ -38811,6 +39162,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
38811
39162
|
StepBuilderConditionComponent,
|
|
38812
39163
|
StepBuilderDatabaseComponent,
|
|
38813
39164
|
StepBuilderAiAgentComponent,
|
|
39165
|
+
CodeEditorComponent,
|
|
38814
39166
|
StepBuilderCustomCodeComponent,
|
|
38815
39167
|
StepBuilderRecordStepComponent,
|
|
38816
39168
|
StepBuilderDocumentGenerationTemplateStepComponent,
|
|
@@ -38992,14 +39344,14 @@ class DialogService {
|
|
|
38992
39344
|
});
|
|
38993
39345
|
}
|
|
38994
39346
|
}
|
|
38995
|
-
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, deps: [{ token: i1$
|
|
39347
|
+
DialogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38996
39348
|
DialogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, providedIn: 'root' });
|
|
38997
39349
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DialogService, decorators: [{
|
|
38998
39350
|
type: Injectable,
|
|
38999
39351
|
args: [{
|
|
39000
39352
|
providedIn: 'root',
|
|
39001
39353
|
}]
|
|
39002
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
39354
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
39003
39355
|
|
|
39004
39356
|
/**
|
|
39005
39357
|
* Opens the Step Details Drawer (Edit In Depth) as a right-side drawer overlay.
|
|
@@ -39057,12 +39409,12 @@ class StepDetailsDrawerService {
|
|
|
39057
39409
|
return drawerRef;
|
|
39058
39410
|
}
|
|
39059
39411
|
}
|
|
39060
|
-
StepDetailsDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsDrawerService, deps: [{ token: i1$
|
|
39412
|
+
StepDetailsDrawerService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsDrawerService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39061
39413
|
StepDetailsDrawerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsDrawerService, providedIn: 'root' });
|
|
39062
39414
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsDrawerService, decorators: [{
|
|
39063
39415
|
type: Injectable,
|
|
39064
39416
|
args: [{ providedIn: 'root' }]
|
|
39065
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
39417
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
39066
39418
|
|
|
39067
39419
|
/**
|
|
39068
39420
|
* Configuration for Step Details Drawer (Edit In Depth).
|
|
@@ -39394,14 +39746,14 @@ class StepDetailsModalService {
|
|
|
39394
39746
|
return modalRef;
|
|
39395
39747
|
}
|
|
39396
39748
|
}
|
|
39397
|
-
StepDetailsModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsModalService, deps: [{ token: i1$
|
|
39749
|
+
StepDetailsModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsModalService, deps: [{ token: i1$7.Overlay }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
39398
39750
|
StepDetailsModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsModalService, providedIn: 'root' });
|
|
39399
39751
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StepDetailsModalService, decorators: [{
|
|
39400
39752
|
type: Injectable,
|
|
39401
39753
|
args: [{
|
|
39402
39754
|
providedIn: 'root',
|
|
39403
39755
|
}]
|
|
39404
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
39756
|
+
}], ctorParameters: function () { return [{ type: i1$7.Overlay }, { type: i0.Injector }]; } });
|
|
39405
39757
|
|
|
39406
39758
|
const moment = momentImport.default || momentImport;
|
|
39407
39759
|
/** Default status value -> dot color. Override via BuildTestCaseDetailsOptions. */
|
|
@@ -39595,5 +39947,5 @@ function buildTestCaseDetailsFromApi(data, options) {
|
|
|
39595
39947
|
* Generated bundle index. Do not edit.
|
|
39596
39948
|
*/
|
|
39597
39949
|
|
|
39598
|
-
export { ADVANCED_SUBFIELDS_BY_TYPE, ADVANCED_TOGGLE_KEYS, AIActionStepComponent, AIAgentStepComponent, API_EDIT_STEP_LABELS, ActionMenuButtonComponent, AddPrerequisiteCasesSectionComponent, AdvancedVariablesFormComponent, AiDebugAlertComponent, AiLogsWithReasoningComponent, AiReasoningComponent, ApiEditStepComponent, ApiStepComponent, AutocompleteComponent, BadgeComponent, BasicStepComponent, BreakpointsModalComponent, ButtonComponent, CUSTOM_EDIT_STEP_DATA, CUSTOM_EDIT_STEP_EDIT_IN_DEPTH, CUSTOM_EDIT_STEP_REF, CUSTOM_ELEMENT_POPUP_REF, ChartCardComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CreateStepGroupComponent, CustomEditStepComponent, CustomEditStepRef, CustomEditStepService, CustomInputComponent, CustomTextareaComponent, CustomToggleComponent, DEFAULT_METADATA_COLOR, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DeleteStepsComponent, DetailDrawerComponent, DetailDrawerTabComponent, DetailDrawerTabContentDirective, DetailSidePanelComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, ELEMENT_POPUP_DATA, ELEMENT_POPUP_EDIT_IN_DEPTH, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, ElementFormComponent, ElementListComponent, ElementPopupComponent, ElementPopupRef, ElementPopupService, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, ExportCodeModalComponent, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MainStepCollapseComponent, MetricsCardComponent, NetworkRequestComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, ProgressIndicatorComponent, ProgressTextCardComponent, RESULT_COLORS, RecordingBannerComponent, ReviewRecordedStepsModalComponent, RunHistoryCardComponent, STATUS_COLORS, STEP_DETAILS_DRAWER_DATA, STEP_DETAILS_DRAWER_REF, STEP_DETAILS_FIELDS_BY_TYPE, STEP_DETAILS_FIELD_META, STEP_DETAILS_MODAL_DATA, STEP_DETAILS_MODAL_REF, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SessionChangesModalComponent, SimulatorComponent, StepBuilderActionComponent, StepBuilderAiAgentComponent, StepBuilderConditionComponent, StepBuilderCustomCodeComponent, StepBuilderDatabaseComponent, StepBuilderDocumentComponent, StepBuilderDocumentGenerationTemplateStepComponent, StepBuilderGroupComponent, StepBuilderLoopComponent, StepBuilderRecordStepComponent, StepDetailsDrawerComponent, StepDetailsDrawerRef, StepDetailsDrawerService, StepDetailsModalComponent, StepDetailsModalRef, StepDetailsModalService, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, TEST_CASE_DETAILS_FIELD_MAP, TEST_CASE_DETAILS_SELECT_KEYS, TEST_DATA_MODAL_DATA, TEST_DATA_MODAL_EDIT_IN_DEPTH, TEST_DATA_MODAL_REF, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TemplateVariablesFormComponent, TestCaseAiAgentStepComponent, TestCaseAiVerifyStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsComponent, TestCaseDetailsEditComponent, TestCaseDetailsRendererComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseRestoreSessionStepComponent, TestCaseScreenshotStepComponent, TestCaseScrollStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestCaseVerifyUrlStepComponent, TestDataModalComponent, TestDataModalRef, TestDataModalService, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, WorkspaceSelectorComponent, buildTestCaseDetailsFromApi, getDynamicFieldsFromLegacyConfig, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, getStepDetailsStepType, humanizeVariableKey, isAiAgentStepConfig, isAiVerifyStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isRestoreSessionStepConfig, isScreenshotStepConfig, isScrollStepConfig, isStepGroupConfig, isUploadStepConfig, isVerifyUrlStepConfig, mapApiVariablesToDynamicFields };
|
|
39950
|
+
export { ADVANCED_SUBFIELDS_BY_TYPE, ADVANCED_TOGGLE_KEYS, AIActionStepComponent, AIAgentStepComponent, API_EDIT_STEP_LABELS, ActionMenuButtonComponent, AddPrerequisiteCasesSectionComponent, AdvancedVariablesFormComponent, AiDebugAlertComponent, AiLogsWithReasoningComponent, AiReasoningComponent, ApiEditStepComponent, ApiStepComponent, AutocompleteComponent, BadgeComponent, BasicStepComponent, BreakpointsModalComponent, ButtonComponent, CUSTOM_EDIT_STEP_DATA, CUSTOM_EDIT_STEP_EDIT_IN_DEPTH, CUSTOM_EDIT_STEP_REF, CUSTOM_ELEMENT_POPUP_REF, ChartCardComponent, CodeEditorComponent, ColumnVisibilityComponent, CompareRunsComponent, ConditionStepComponent, ConfigurationCardComponent, ConsoleAlertComponent, CoverageModuleCardComponent, CreateStepGroupComponent, CustomEditStepComponent, CustomEditStepRef, CustomEditStepService, CustomInputComponent, CustomTextareaComponent, CustomToggleComponent, DEFAULT_METADATA_COLOR, DEFAULT_PRIORITY_COLOR_CONFIG, DEFAULT_STATUS_COLOR_CONFIG, DIALOG_DATA, DIALOG_REF, DashboardHeaderComponent, DaterangepickerComponent, DaterangepickerDirective, DbQueryExecutionItemComponent, DbVerificationStepComponent, DeleteStepsComponent, DetailDrawerComponent, DetailDrawerTabComponent, DetailDrawerTabContentDirective, DetailSidePanelComponent, DialogComponent, DialogRef, DialogService, DocumentVerificationStepComponent, DropdownButtonComponent, DynamicCellContainerDirective, DynamicCellTemplateDirective, DynamicFilterComponent, DynamicHeaderTemplateDirective, DynamicSelectFieldComponent, DynamicTableComponent, ELEMENT_POPUP_DATA, ELEMENT_POPUP_EDIT_IN_DEPTH, EMPTY_STATE_IMAGES, EMPTY_STATE_PRESETS, ElementFormComponent, ElementListComponent, ElementPopupComponent, ElementPopupRef, ElementPopupService, EmptyStateComponent, ErrorModalComponent, ExecutionResultModalComponent, ExportCodeModalComponent, FailedStepCardComponent, FailedStepComponent, FailedTestCasesCardComponent, FileDownloadStepComponent, FileUploadComponent, FullTableLoaderComponent, HeatErrorMapCellComponent, InsightCardComponent, ItemListComponent, IterationsLoopComponent, JumpToStepModalComponent, LiveConversationComponent, LiveExecutionStepComponent, LoopStepComponent, MONACO_LANGUAGE_MAP, MainStepCollapseComponent, MetricsCardComponent, NetworkRequestComponent, OtherButtonComponent, PRIORITY_COLORS, PaginationComponent, ProgressIndicatorComponent, ProgressTextCardComponent, RESULT_COLORS, RecordingBannerComponent, ReviewRecordedStepsModalComponent, RunHistoryCardComponent, STATUS_COLORS, STEP_DETAILS_DRAWER_DATA, STEP_DETAILS_DRAWER_REF, STEP_DETAILS_FIELDS_BY_TYPE, STEP_DETAILS_FIELD_META, STEP_DETAILS_MODAL_DATA, STEP_DETAILS_MODAL_REF, SearchBarComponent, SegmentControlComponent, SelectedFiltersComponent, SelfHealAnalysisComponent, SessionChangesModalComponent, SimulatorComponent, StepBuilderActionComponent, StepBuilderAiAgentComponent, StepBuilderConditionComponent, StepBuilderCustomCodeComponent, StepBuilderDatabaseComponent, StepBuilderDocumentComponent, StepBuilderDocumentGenerationTemplateStepComponent, StepBuilderGroupComponent, StepBuilderLoopComponent, StepBuilderRecordStepComponent, StepDetailsDrawerComponent, StepDetailsDrawerRef, StepDetailsDrawerService, StepDetailsModalComponent, StepDetailsModalRef, StepDetailsModalService, StepGroupComponent, StepProgressCardComponent, StepRendererComponent, StepStatusCardComponent, StepTypes, TEST_CASE_DETAILS_FIELD_MAP, TEST_CASE_DETAILS_SELECT_KEYS, TEST_DATA_MODAL_DATA, TEST_DATA_MODAL_EDIT_IN_DEPTH, TEST_DATA_MODAL_REF, TableActionToolbarComponent, TableDataLoaderComponent, TableTemplateComponent, TailwindOverlayContainer, TemplateVariablesFormComponent, TestCaseAiAgentStepComponent, TestCaseAiVerifyStepComponent, TestCaseApiStepComponent, TestCaseConditionStepComponent, TestCaseCustomCodeStepComponent, TestCaseDatabaseStepComponent, TestCaseDetailsComponent, TestCaseDetailsEditComponent, TestCaseDetailsRendererComponent, TestCaseLoopStepComponent, TestCaseNormalStepComponent, TestCaseRestoreSessionStepComponent, TestCaseScreenshotStepComponent, TestCaseScrollStepComponent, TestCaseStepGroupComponent, TestCaseUploadStepComponent, TestCaseVerifyUrlStepComponent, TestDataModalComponent, TestDataModalRef, TestDataModalService, TestDistributionCardComponent, UiKitModule, UpdatedFailedStepComponent, ViewMoreFailedStepButtonComponent, VisualComparisonComponent, VisualDifferenceModalComponent, WorkspaceSelectorComponent, buildTestCaseDetailsFromApi, getDynamicFieldsFromLegacyConfig, getEmptyStatePreset, getMetadataColor, getMetadataValueStyle, getStepDetailsStepType, humanizeVariableKey, isAiAgentStepConfig, isAiVerifyStepConfig, isApiStepConfig, isConditionStepConfig, isCustomCodeStepConfig, isDatabaseStepConfig, isLoopStepConfig, isNormalStepConfig, isRestoreSessionStepConfig, isScreenshotStepConfig, isScrollStepConfig, isStepGroupConfig, isUploadStepConfig, isVerifyUrlStepConfig, mapApiVariablesToDynamicFields };
|
|
39599
39951
|
//# sourceMappingURL=cqa-lib-cqa-ui.mjs.map
|