import { DndDropEvent } from 'ngx-drag-drop'; import { EventEmitter, OnInit, OnChanges, SimpleChanges, DoCheck, ChangeDetectorRef, ElementRef } from '@angular/core'; import { StepGroupConfig, TestCaseStepConfig, NormalStepConfig, LoopStepConfig, ConditionStepConfig, ConditionBranch } from '../test-case-step.models'; import { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data'; import * as i0 from "@angular/core"; export declare class TestCaseStepGroupComponent implements OnInit, OnChanges, DoCheck { private cdr; config: StepGroupConfig; id: string; stepNumber: number | string; /** Array index from parent renderer - use for editInDepth (stepNumber "10.3" parses wrong) */ index?: number; groupName: string; description?: string; reusable: boolean; nestedSteps: TestCaseStepConfig[]; expanded: boolean; isNested: boolean; isInsideLoop: boolean; isInsideForLoop: boolean; testCaseTestDataId?: number | string; isInsideStepGroup: boolean; isReorder: boolean; /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */ isParentSkipped: boolean; editable: boolean; /** Visual indentation level for nested structures (passed down from renderer). */ nestingLevel: number; selected: boolean; isDuplicating: boolean; loading: boolean; /** Options for the data profile dropdown */ dataProfileOptions: any[]; /** Indicates if more data profiles are available for loading */ hasMoreDataProfiles: boolean; /** Loading state for data profiles */ isLoadingDataProfiles: boolean; /** Natural text actions options for while loop condition */ naturalTextActionsOptions: any[]; /** Current test case id (from portal). Used to hide the reusable nested-steps hint when viewing the step group's own test case (`stepGroupId`). */ currentTestCaseId?: number | string; /** Show "Add Step Between" button above nested steps */ addStepBetweenAbove: boolean; /** Show "Add Step Between" button below nested steps */ addStepBetweenBelow: boolean; /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */ addStepBetween: boolean; private previousNestedStepsLength; private previousNestedStepsReference; viewDetailsTrigger?: ElementRef; constructor(cdr: ChangeDetectorRef); /** Base left padding for step rows (matches px-4 = 16px) plus 24px per nesting level (matches pl-10 = 40px at level 1). */ getRowPaddingLeftPx(): number; /** * When reusable, show a banner that nested steps must be edited in the step group's source test case—except when * the user is already on that test case (currentTestCaseId === stepGroupId). */ shouldShowReusableNestedEditBanner(): boolean; toggleExpanded: EventEmitter<{ config: StepGroupConfig; expanded: boolean; }>; groupNameChange: EventEmitter; descriptionChange: EventEmitter; reusableChange: EventEmitter; nestedStepChange: EventEmitter<{ step: TestCaseStepConfig; index: number; }>; addStep: EventEmitter; deleteStep: EventEmitter; openExternal: EventEmitter<{ step: TestCaseStepConfig; }>; edit: EventEmitter; editInDepth: EventEmitter<{ step: TestCaseStepConfig; index: number; }>; link: EventEmitter; duplicate: EventEmitter; delete: EventEmitter; viewDetails: EventEmitter; dndDropInZone: EventEmitter<{ event: DndDropEvent; targetList: TestCaseStepConfig[]; }>; /** Emit when more data profiles need to be loaded */ loadMoreDataProfiles: EventEmitter; /** Emit when data profile search query changes */ searchDataProfiles: EventEmitter; /** Emit when a nested step is updated (e.g., Apply button clicked in loop-step edit mode) */ stepUpdate: EventEmitter; /** Re-emit addStepBetweenClick from nested renderers */ addStepBetweenClick: EventEmitter<{ step: TestCaseStepConfig; index: number; position: 'ABOVE' | 'BELOW'; }>; /** Re-emit addStepForLoop from nested loops so N-level nesting works (empty loop add step). */ addStepForLoop: EventEmitter<{ loopStepConfig: LoopStepConfig; }>; selectionChange: EventEmitter; deleteBranch: EventEmitter; onDndDrop(event: DndDropEvent): void; ngOnInit(): void; ngOnChanges(changes: SimpleChanges): void; ngDoCheck(): void; private updateFromConfig; /** True when this step group has at least one child step (used to hide "0 steps" badge). */ hasSteps(): boolean; /** Max length for start/end step number in summary; beyond this use local indices (1 to count). */ private static readonly MAX_STEP_NUMBER_DISPLAY_LENGTH; /** * Step count is derived only from the child step array length. * Runs on every render (no expand/collapse dependency). Used for initial load and all nesting levels. * For deeply nested steps with long numbers, shows "Steps 1-N (N steps)" using local indices. */ getStepsSummary(): string; /** START GROUP marker: first nested step's display step number (matches row numbering). */ getStartGroupMarkerStepDisplay(): string; /** END GROUP marker: last nested step's display step number. */ getEndGroupMarkerStepDisplay(): string; onToggleExpanded(): void; onGroupNameChange(value: string): void; onDescriptionChange(value: string): void; onReusableChange(checked: boolean): void; onNestedStepChange(step: TestCaseStepConfig, index: number): void; /** Re-emit openExternal from nested step group so redirect works for step groups inside step groups. */ onNestedOpenExternal(payload: { step: TestCaseStepConfig; }): void; onNestedToggleExpanded(event: boolean | { config: TestCaseStepConfig; expanded: boolean; }, step: TestCaseStepConfig, index: number): void; onAddStep(): void; onDeleteStep(payloadOrIndex: any, index?: number): void; /** Re-emit edit from nested step so the portal can open edit modal (same as root level). */ onNestedEdit(event: { step: TestCaseStepConfig; index: number; }): void; /** Re-emit duplicate from nested step so the portal can duplicate (same as root level). */ onNestedDuplicate(event: any, step: TestCaseStepConfig): void; onViewDetails(event?: MouseEvent): void; onOpenExternal(): void; onEdit(): void; onLink(): void; onDuplicate(): void; onDelete(): void; onSkipToggle(): void; onSelectionChange(checked: boolean): void; isNormalStep(step: TestCaseStepConfig): step is NormalStepConfig; isLoopStep(step: TestCaseStepConfig): step is LoopStepConfig; isConditionStep(step: TestCaseStepConfig): step is ConditionStepConfig; isStepGroup(step: TestCaseStepConfig): step is StepGroupConfig; onAddBranch(): void; onDeleteBranch(branch: any): void; onNestedConditionAddBranch(nestedStep: ConditionStepConfig, index: number): void; onNestedConditionDeleteBranch(nestedStep: ConditionStepConfig, branch: any, index: number): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }