{"version":3,"file":"cqa-lib-cqa-ui.mjs","sources":["../../../src/lib/button/button.component.ts","../../../src/lib/button/button.component.html","../../../src/lib/search-bar/search-bar.component.ts","../../../src/lib/search-bar/search-bar.component.html","../../../src/lib/autocomplete/autocomplete.component.ts","../../../src/lib/autocomplete/autocomplete.component.html","../../../src/lib/segment-control/segment-control.component.ts","../../../src/lib/segment-control/segment-control.component.html","../../../src/lib/dialog/dialog.component.ts","../../../src/lib/dialog/dialog.component.html","../../../src/lib/table/dynamic-table/dynamic-cell.directive.ts","../../../src/lib/full-table-loader/full-table-loader.component.ts","../../../src/lib/full-table-loader/full-table-loader.component.html","../../../src/lib/table-data-loader/table-data-loader.component.ts","../../../src/lib/table-data-loader/table-data-loader.component.html","../../../src/lib/table/dynamic-table/dynamic-cell-container.directive.ts","../../../src/lib/table/dynamic-table/dynamic-table.component.ts","../../../src/lib/table/dynamic-table/dynamic-table.component.html","../../../src/lib/pagination/pagination.component.ts","../../../src/lib/pagination/pagination.component.html","../../../src/lib/action-menu/action-menu.component.ts","../../../src/lib/action-menu/action-menu.component.html","../../../src/lib/other-button/other-button.component.ts","../../../src/lib/other-button/other-button.component.html","../../../src/lib/dynamic-select/dynamic-select-field.component.ts","../../../src/lib/dynamic-select/dynamic-select-field.component.html","../../../src/lib/filters/daterangepicker/daterangepicker.directive.ts","../../../src/lib/filters/daterangepicker/daterangepicker.component.ts","../../../src/lib/filters/dynamic-filter/dynamic-filter.component.ts","../../../src/lib/filters/dynamic-filter/dynamic-filter.component.html","../../../src/lib/column-visibility/column-visibility.component.ts","../../../src/lib/column-visibility/column-visibility.component.html","../../../src/lib/table-action-toolbar/table-action-toolbar.component.ts","../../../src/lib/table-action-toolbar/table-action-toolbar.component.html","../../../src/lib/dashboards/metrics-card/metrics-block.component.ts","../../../src/lib/dashboards/metrics-card/metrics-block.component.html","../../../src/lib/dashboards/metrics-card/metrics-card.component.ts","../../../src/lib/dashboards/metrics-card/metrics-card.component.html","../../../src/lib/assets/images/image-assets.constants.ts","../../../src/lib/empty-state/empty-state-presets.constants.ts","../../../src/lib/empty-state/empty-state.component.ts","../../../src/lib/empty-state/empty-state.component.html","../../../src/lib/dashboards/chart-card/chart-card.component.ts","../../../src/lib/dashboards/chart-card/chart-card.component.html","../../../src/lib/dashboards/progress-text-card/progress-text-card.component.ts","../../../src/lib/dashboards/progress-text-card/progress-text-card.component.html","../../../src/lib/dashboards/workspace-selector/workspace-selector.component.ts","../../../src/lib/dashboards/workspace-selector/workspace-selector.component.html","../../../src/lib/dashboards/dashboard-header/dashboard-header.component.ts","../../../src/lib/dashboards/dashboard-header/dashboard-header.component.html","../../../src/lib/dashboards/coverage-module-card/coverage-module-card.component.ts","../../../src/lib/dashboards/coverage-module-card/coverage-module-card.component.html","../../../src/lib/dashboards/test-distribution-card/test-distribution-card.component.ts","../../../src/lib/dashboards/test-distribution-card/test-distribution-card.component.html","../../../src/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.ts","../../../src/lib/dashboards/failed-test-cases-card/failed-test-cases-card.component.html","../../../src/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.ts","../../../src/lib/add-prerequisite-cases-section/add-prerequisite-cases-section.component.html","../../../src/lib/selected-filters/selected-filters.component.ts","../../../src/lib/selected-filters/selected-filters.component.html","../../../src/lib/utils/metadata-colors.util.ts","../../../src/lib/badge/badge.component.ts","../../../src/lib/badge/badge.component.html","../../../src/lib/dashboards/insight-card/insight-card.component.ts","../../../src/lib/dashboards/insight-card/insight-card.component.html","../../../src/lib/dropdown-button/dropdown-button.component.ts","../../../src/lib/dropdown-button/dropdown-button.component.html","../../../src/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.ts","../../../src/lib/dashboards/heat-error-map-cell/heat-error-map-cell.component.html","../../../src/lib/custom-input/custom-input.component.ts","../../../src/lib/custom-input/custom-input.component.html","../../../src/lib/export-code-modal/export-code-modal.component.ts","../../../src/lib/export-code-modal/export-code-modal.component.html","../../../src/lib/templates/table-template.component.ts","../../../src/lib/templates/table-template.component.html","../../../src/lib/templates/modular-table-template/modular-table-template.models.ts","../../../src/lib/templates/modular-table-template/dialogs/move-to-folder-dialog.component.ts","../../../src/lib/templates/modular-table-template/dialogs/new-folder-dialog.component.ts","../../../src/lib/templates/modular-table-template/dialogs/delete-folder-dialog.component.ts","../../../src/lib/dialog/dialog-ref.ts","../../../src/lib/dialog/dialog.tokens.ts","../../../src/lib/dialog/dialog.service.ts","../../../src/lib/templates/modular-table-template/directives/folder-drop.directive.ts","../../../src/lib/templates/modular-table-template/directives/folder-drag.directive.ts","../../../src/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.ts","../../../src/lib/templates/modular-table-template/folder-sidebar/folder-sidebar.component.html","../../../src/lib/templates/modular-table-template/modular-table-template.component.ts","../../../src/lib/templates/modular-table-template/modular-table-template.component.html","../../../src/lib/test-suite/test-suite.models.ts","../../../src/lib/test-suite/move-test-suite-dialog/move-test-suite-dialog.component.ts","../../../src/lib/dialogs/name-prompt-modal.component.ts","../../../src/lib/dialogs/name-prompt-modal.component.html","../../../src/lib/templates/modular-table-template/directives/row-drag.directive.ts","../../../src/lib/utils/tw-overlay-container.ts","../../../src/lib/sidebar/profile-menu/profile-menu.models.ts","../../../src/lib/sidebar/sidebar.models.ts","../../../src/lib/sidebar/nav-item.component.ts","../../../src/lib/sidebar/nav-item.component.html","../../../src/lib/sidebar/nav-sub-item.component.ts","../../../src/lib/sidebar/nav-sub-item.component.html","../../../src/lib/sidebar/nav-menu.component.ts","../../../src/lib/sidebar/nav-menu.component.html","../../../src/lib/pipes/safe-html.pipe.ts","../../../src/lib/sidebar/profile-menu/profile-menu.component.ts","../../../src/lib/sidebar/profile-menu/profile-menu.component.html","../../../src/lib/sidebar/workspace-menu/workspace-menu.component.ts","../../../src/lib/sidebar/workspace-menu/workspace-menu.component.html","../../../src/lib/sidebar/sidebar.component.ts","../../../src/lib/sidebar/sidebar.component.html","../../../src/lib/execution-screen/step-registry.token.ts","../../../src/lib/execution-screen/execution-step.models.ts","../../../src/lib/execution-screen/base-step.component.ts","../../../src/lib/execution-screen/ai-logs-with-reasoning/ai-logs-with-reasoning.component.ts","../../../src/lib/execution-screen/ai-logs-with-reasoning/ai-logs-with-reasoning.component.html","../../../src/lib/execution-screen/step-renderer/step-renderer.component.ts","../../../src/lib/execution-screen/self-heal-analysis/self-heal-analysis.component.ts","../../../src/lib/execution-screen/self-heal-analysis/self-heal-analysis.component.html","../../../src/lib/execution-screen/view-more-failed-step-button/view-more-failed-step-button.component.ts","../../../src/lib/execution-screen/view-more-failed-step-button/view-more-failed-step-button.component.html","../../../src/lib/visual-difference-modal/visual-difference-modal.component.ts","../../../src/lib/visual-difference-modal/visual-difference-modal.component.html","../../../src/lib/execution-screen/visual-comparison/visual-comparison.component.ts","../../../src/lib/execution-screen/visual-comparison/visual-comparison.component.html","../../../src/lib/execution-screen/updated-failed-step/updated-failed-step.component.ts","../../../src/lib/execution-screen/updated-failed-step/updated-failed-step.component.html","../../../src/lib/execution-screen/basic-step/basic-step.component.ts","../../../src/lib/execution-screen/basic-step/basic-step.component.html","../../../src/lib/execution-screen/step-group/step-group.component.ts","../../../src/lib/execution-screen/step-group/step-group.component.html","../../../src/lib/execution-screen/loop-step/loop-step.component.ts","../../../src/lib/execution-screen/loop-step/loop-step.component.html","../../../src/lib/execution-screen/condition-step/condition-step.component.ts","../../../src/lib/execution-screen/condition-step/condition-step.component.html","../../../src/lib/execution-screen/failed-step/failed-step.component.ts","../../../src/lib/execution-screen/failed-step/failed-step.component.html","../../../src/lib/execution-screen/ai-agent-step/ai-agent-step.component.ts","../../../src/lib/execution-screen/ai-agent-step/ai-agent-step.component.html","../../../src/lib/execution-screen/ai-action-step/ai-action-step.component.ts","../../../src/lib/execution-screen/ai-action-step/ai-action-step.component.html","../../../src/lib/execution-screen/api-step/api-step.component.ts","../../../src/lib/execution-screen/api-step/api-step.component.html","../../../src/lib/execution-screen/file-download-step/file-download-step.component.ts","../../../src/lib/execution-screen/file-download-step/file-download-step.component.html","../../../src/lib/execution-screen/document-verification-step/document-verification-step.component.ts","../../../src/lib/execution-screen/document-verification-step/document-verification-step.component.html","../../../src/lib/execution-screen/live-execution-step/live-execution-step.component.ts","../../../src/lib/execution-screen/live-execution-step/live-execution-step.component.html","../../../src/lib/execution-screen/jump-to-step-modal/jump-to-step-modal.component.ts","../../../src/lib/execution-screen/jump-to-step-modal/jump-to-step-modal.component.html","../../../src/lib/execution-screen/breakpoints-modal/breakpoints-modal.component.ts","../../../src/lib/execution-screen/breakpoints-modal/breakpoints-modal.component.html","../../../src/lib/execution-screen/recording-banner/recording-banner.component.ts","../../../src/lib/execution-screen/recording-banner/recording-banner.component.html","../../../src/lib/execution-screen/review-recorded-steps-modal/review-recorded-steps-modal.component.ts","../../../src/lib/execution-screen/review-recorded-steps-modal/review-recorded-steps-modal.component.html","../../../src/lib/execution-screen/main-step-collapse/main-step-collapse.component.ts","../../../src/lib/execution-screen/main-step-collapse/main-step-collapse.component.html","../../../src/lib/simulator/simulator.component.ts","../../../src/lib/simulator/simulator.component.html","../../../src/lib/console-alert/console-alert.component.ts","../../../src/lib/console-alert/console-alert.component.html","../../../src/lib/ai-debug-alert/ai-debug-alert.component.ts","../../../src/lib/ai-debug-alert/ai-debug-alert.component.html","../../../src/lib/network-request/network-request.component.ts","../../../src/lib/network-request/network-request.component.html","../../../src/lib/run-history-card/run-history-card.component.ts","../../../src/lib/run-history-card/run-history-card.component.html","../../../src/lib/ai-prompt-card/ai-prompt-card.component.ts","../../../src/lib/ai-prompt-card/ai-prompt-card.component.html","../../../src/lib/configuration-card/configuration-card.component.ts","../../../src/lib/configuration-card/configuration-card.component.html","../../../src/lib/compare-runs/view-compare-button.component.ts","../../../src/lib/compare-runs/test-case-link-cell.component.ts","../../../src/lib/compare-runs/compare-runs.component.ts","../../../src/lib/compare-runs/compare-runs.component.html","../../../src/lib/iterations-loop/iterations-loop.component.ts","../../../src/lib/iterations-loop/iterations-loop.component.html","../../../src/lib/failed-step-card/failed-step-card.component.ts","../../../src/lib/failed-step-card/failed-step-card.component.html","../../../src/lib/mixed-variable-input/mixed-variable-input.component.ts","../../../src/lib/mixed-variable-input/mixed-variable-input.component.html","../../../src/lib/custom-textarea/custom-textarea.component.ts","../../../src/lib/custom-textarea/custom-textarea.component.html","../../../src/lib/code-editor/code-editor.styles.ts","../../../src/lib/code-editor/code-editor.component.ts","../../../src/lib/code-editor/code-editor.component.html","../../../src/lib/custom-toggle/custom-toggle.component.ts","../../../src/lib/custom-toggle/custom-toggle.component.html","../../../src/lib/file-upload/file-upload.component.ts","../../../src/lib/file-upload/file-upload.component.html","../../../src/lib/ai-reasoning/ai-reasoning.component.ts","../../../src/lib/ai-reasoning/ai-reasoning.component.html","../../../src/lib/execution-result-modal/execution-result-modal.component.ts","../../../src/lib/execution-result-modal/execution-result-modal.component.html","../../../src/lib/execution-screen/session-changes-modal/session-changes-modal.component.ts","../../../src/lib/execution-screen/session-changes-modal/session-changes-modal.component.html","../../../src/lib/error-modal/error-modal.component.ts","../../../src/lib/error-modal/error-modal.component.html","../../../src/lib/session-restoration-dialog/session-restoration-dialog.component.ts","../../../src/lib/session-restoration-dialog/session-restoration-dialog.component.html","../../../src/lib/capture-video-dialog/capture-video-dialog.component.ts","../../../src/lib/capture-video-dialog/capture-video-dialog.component.html","../../../src/lib/progress-indicator/progress-indicator.component.ts","../../../src/lib/progress-indicator/progress-indicator.component.html","../../../src/lib/step-progress-card/step-progress-card.component.ts","../../../src/lib/step-progress-card/step-progress-card.component.html","../../../src/lib/step-status-card/step-status-card.component.ts","../../../src/lib/step-status-card/step-status-card.component.html","../../../src/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.ts","../../../src/lib/execution-screen/db-query-execution-item/db-query-execution-item.component.html","../../../src/lib/execution-screen/db-verification-step/db-verification-step.component.ts","../../../src/lib/execution-screen/db-verification-step/db-verification-step.component.html","../../../src/lib/test-case-details/step-row-actions.styles.ts","../../../src/lib/test-case-details/custom-edit-step/custom-edit-step-data.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal-data.ts","../../../src/lib/test-case-details/custom-edit-step/custom-edit-step-ref.ts","../../../src/lib/test-case-details/custom-edit-step/custom-edit-step.component.ts","../../../src/lib/test-case-details/custom-edit-step/custom-edit-step.component.html","../../../src/lib/test-case-details/custom-edit-step/custom-edit-step.service.ts","../../../src/lib/test-case-details/element-popup/element-popup-data.ts","../../../src/lib/test-case-details/element-popup/element-popup-ref.ts","../../../src/lib/test-case-details/element-popup/element-form/element-form.component.ts","../../../src/lib/test-case-details/element-popup/element-form/element-form.component.html","../../../src/lib/test-case-details/element-list/element-list.component.ts","../../../src/lib/test-case-details/element-list/element-list.component.html","../../../src/lib/test-case-details/element-popup/element-popup.component.ts","../../../src/lib/test-case-details/element-popup/element-popup.component.html","../../../src/lib/test-case-details/element-popup/element-popup.service.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal-ref.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal-environment.model.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal-parameter.model.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal.component.ts","../../../src/lib/test-case-details/test-data-modal/test-data-modal.component.html","../../../src/lib/test-case-details/test-data-modal/test-data-modal.service.ts","../../../src/lib/test-case-details/normal-step/normal-step.component.ts","../../../src/lib/test-case-details/normal-step/normal-step.component.html","../../../src/lib/test-case-details/test-case-step.models.ts","../../../src/lib/test-case-details/test-case-step-components.token.ts","../../../src/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.ts","../../../src/lib/test-case-details/test-case-details-renderer/test-case-details-renderer.component.html","../../../src/lib/test-case-details/loop-step/loop-step.component.ts","../../../src/lib/test-case-details/loop-step/loop-step.component.html","../../../src/lib/test-case-details/condition-step/condition-step.component.ts","../../../src/lib/test-case-details/condition-step/condition-step.component.html","../../../src/lib/test-case-details/step-group/step-group.component.ts","../../../src/lib/test-case-details/step-group/step-group.component.html","../../../src/lib/test-case-details/api-step/api-step.component.ts","../../../src/lib/test-case-details/api-step/api-step.component.html","../../../src/lib/test-case-details/database-step/database-step.component.ts","../../../src/lib/test-case-details/database-step/database-step.component.html","../../../src/lib/test-case-details/ai-agent-step/ai-agent-step.component.ts","../../../src/lib/test-case-details/ai-agent-step/ai-agent-step.component.html","../../../src/lib/test-case-details/ai-verify-step/ai-verify-step.component.ts","../../../src/lib/test-case-details/ai-verify-step/ai-verify-step.component.html","../../../src/lib/test-case-details/upload-step/upload-step.component.ts","../../../src/lib/test-case-details/upload-step/upload-step.component.html","../../../src/lib/test-case-details/screenshot-step/screenshot-step.component.ts","../../../src/lib/test-case-details/screenshot-step/screenshot-step.component.html","../../../src/lib/test-case-details/scroll-step/scroll-step.component.ts","../../../src/lib/test-case-details/scroll-step/scroll-step.component.html","../../../src/lib/test-case-details/verify-url-step/verify-url-step.component.ts","../../../src/lib/test-case-details/verify-url-step/verify-url-step.component.html","../../../src/lib/test-case-details/restore-session-step/restore-session-step.component.ts","../../../src/lib/test-case-details/restore-session-step/restore-session-step.component.html","../../../src/lib/test-case-details/custom-code-step/custom-code-step.component.ts","../../../src/lib/test-case-details/custom-code-step/custom-code-step.component.html","../../../src/lib/item-list/item-list.component.ts","../../../src/lib/item-list/item-list.component.html","../../../src/lib/test-case-details/create-step-group/create-step-group.component.ts","../../../src/lib/test-case-details/create-step-group/create-step-group.component.html","../../../src/lib/test-case-details/delete-steps/delete-steps.component.ts","../../../src/lib/test-case-details/delete-steps/delete-steps.component.html","../../../src/lib/test-case-details/run-execution-alert/run-execution-alert.component.ts","../../../src/lib/test-case-details/run-execution-alert/run-execution-alert.component.html","../../../src/lib/step-builder/advanced-variables-form/advanced-variables-form.component.ts","../../../src/lib/step-builder/advanced-variables-form/advanced-variables-form.component.html","../../../src/lib/test-case-details/api-edit-step/api-edit-step.component.ts","../../../src/lib/test-case-details/api-edit-step/api-edit-step.component.html","../../../src/lib/live-conversation/live-conversation.component.ts","../../../src/lib/live-conversation/live-conversation.component.html","../../../src/lib/pipes/camel-to-title.pipe.ts","../../../src/lib/step-builder/template-variables-form/template-variables-form.component.ts","../../../src/lib/step-builder/template-variables-form/template-variables-form.component.html","../../../src/lib/step-builder/step-builder-action/step-builder-action.component.ts","../../../src/lib/step-builder/step-builder-action/step-builder-action.component.html","../../../src/lib/step-builder/step-builder-loop/step-builder-loop.component.ts","../../../src/lib/step-builder/step-builder-loop/step-builder-loop.component.html","../../../src/lib/step-builder/step-builder-condition/step-builder-condition.component.ts","../../../src/lib/step-builder/step-builder-condition/step-builder-condition.component.html","../../../src/lib/step-builder/step-builder-database/step-builder-database.component.ts","../../../src/lib/step-builder/step-builder-database/step-builder-database.component.html","../../../src/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.ts","../../../src/lib/step-builder/step-builder-ai-agent/step-builder-ai-agent.component.html","../../../src/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.ts","../../../src/lib/step-builder/step-builder-custom-code/step-builder-custom-code.component.html","../../../src/lib/step-builder/step-builder-record-step/step-builder-record-step.component.ts","../../../src/lib/step-builder/step-builder-record-step/step-builder-record-step.component.html","../../../src/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.ts","../../../src/lib/step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component.html","../../../src/lib/step-builder/step-builder-document/step-builder-document.component.ts","../../../src/lib/step-builder/step-builder-document/step-builder-document.component.html","../../../src/lib/detail-side-panel/detail-side-panel.styles.ts","../../../src/lib/detail-side-panel/detail-side-panel.component.ts","../../../src/lib/detail-side-panel/detail-side-panel.component.html","../../../src/lib/detail-drawer/detail-drawer-tab-content.directive.ts","../../../src/lib/detail-drawer/detail-drawer-tab/detail-drawer-tab.component.ts","../../../src/lib/detail-drawer/detail-drawer.component.ts","../../../src/lib/detail-drawer/detail-drawer.component.html","../../../src/lib/radio-card-group/radio-card-group.component.ts","../../../src/lib/radio-card-group/radio-card-group.component.html","../../../src/lib/test-case-details/api-mocking-card/api-mocking-card.component.ts","../../../src/lib/test-case-details/api-mocking-card/api-mocking-card.component.html","../../../src/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.ts","../../../src/lib/test-case-details/test-case-details-edit/test-case-details-edit.component.html","../../../src/lib/test-case-details/test-case-details.component.ts","../../../src/lib/test-case-details/test-case-details.component.html","../../../src/lib/step-builder/step-builder-group/step-builder-group.component.ts","../../../src/lib/step-builder/step-builder-group/step-builder-group.component.html","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer-ref.ts","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer-data.ts","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer.component.ts","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer.component.html","../../../src/lib/test-case-details/step-details-modal/step-details-modal-data.ts","../../../src/lib/test-case-details/step-details-modal/step-details-modal-ref.ts","../../../src/lib/test-case-details/step-details-modal/step-details-modal.component.ts","../../../src/lib/test-case-details/step-details-modal/step-details-modal.component.html","../../../src/lib/execution-screen/condition-debug-step/condition-debug-step.component.ts","../../../src/lib/execution-screen/condition-debug-step/condition-debug-step.component.html","../../../src/lib/execution-screen/condition-debug-step/condition-branch-editor.component.ts","../../../src/lib/execution-screen/condition-debug-step/condition-branch-editor.component.html","../../../src/lib/questionnaire-list/questionnaire-list.component.ts","../../../src/lib/questionnaire-list/questionnaire-list.component.html","../../../src/lib/change-history/change-history.component.ts","../../../src/lib/change-history/change-history.component.html","../../../src/lib/version-history/version-history-list/version-history-list.component.ts","../../../src/lib/version-history/version-history-list/version-history-list.component.html","../../../src/lib/version-history/version-history-compare/version-history-compare.component.ts","../../../src/lib/version-history/version-history-compare/version-history-compare.component.html","../../../src/lib/version-history/version-history-detail/version-history-detail.component.ts","../../../src/lib/version-history/version-history-detail/version-history-detail.component.html","../../../src/lib/version-history/version-history-restore-confirm/version-history-restore-confirm.component.ts","../../../src/lib/version-history/version-history-restore-confirm/version-history-restore-confirm.component.html","../../../src/lib/version-history/new-version-history-detail/new-version-history-detail.component.ts","../../../src/lib/version-history/new-version-history-detail/new-version-history-detail.component.html","../../../src/lib/stepper/stepper.component.ts","../../../src/lib/stepper/stepper.component.html","../../../src/lib/viewport-selector/viewport-selector.component.ts","../../../src/lib/viewport-selector/viewport-selector.component.html","../../../src/lib/sub-steps-confirmation-dialog/sub-steps-confirmation-dialog.component.ts","../../../src/lib/sub-steps-confirmation-dialog/sub-steps-confirmation-dialog.component.html","../../../src/lib/permission-toggle/permission-toggle.component.ts","../../../src/lib/new-global-variable-dialog/new-global-variable-dialog.component.ts","../../../src/lib/new-global-variable-dialog/new-global-variable-dialog.component.html","../../../src/lib/new-environment-dialog/new-environment-dialog.models.ts","../../../src/lib/new-environment-dialog/new-environment-dialog.component.ts","../../../src/lib/new-environment-dialog/new-environment-dialog.component.html","../../../src/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.ts","../../../src/lib/new-environment-variable-dialog/new-environment-variable-dialog.component.html","../../../src/lib/new-db-config-dialog/new-db-config-dialog.component.ts","../../../src/lib/new-db-config-dialog/new-db-config-dialog.component.html","../../../src/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.ts","../../../src/lib/new-test-data-profile-dialog/new-test-data-profile-dialog.component.html","../../../src/lib/manage-columns-dialog/manage-columns-dialog.component.ts","../../../src/lib/manage-columns-dialog/manage-columns-dialog.component.html","../../../src/lib/audit-log-drawer/audit-log-drawer.models.ts","../../../src/lib/audit-log-drawer/audit-log-entry-card.component.ts","../../../src/lib/audit-log-drawer/audit-log-entry-card.component.html","../../../src/lib/audit-log-drawer/audit-log-drawer.component.ts","../../../src/lib/audit-log-drawer/audit-log-drawer.component.html","../../../src/lib/assign-environments-dialog/assign-environments-dialog.component.ts","../../../src/lib/assign-environments-dialog/assign-environments-dialog.component.html","../../../src/lib/ui-kit.module.ts","../../../src/lib/audit-log-drawer/audit-log-drawer.service.ts","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer.service.ts","../../../src/lib/test-case-details/step-details-drawer/step-details-drawer-field.config.ts","../../../src/lib/test-case-details/step-details-modal/step-details-modal.service.ts","../../../src/lib/test-case-details/test-case-details.models.ts","../../../src/cqa-lib-cqa-ui.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\n\nexport type ButtonVariant = 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n@Component({\n  selector: 'cqa-button',\n  templateUrl: './button.component.html',\n  styleUrls: []\n})\nexport class ButtonComponent {\n  @Input() variant: ButtonVariant = 'filled';\n  @Input() btnSize: ButtonSize = 'lg';\n  @Input() disabled: boolean = false;\n  /** When true, shows an indeterminate spinner and blocks interaction (same visual treatment as disabled). */\n  @Input() loading: boolean = false;\n  @Input() icon?: string;\n      @Input() iconPosition: 'start' | 'end' = 'start';\n      @Input() fullWidth: boolean = false;\n  @Input() iconColor?: string;\n  @Input() type: 'button' | 'submit' | 'reset' = 'button';\n  @Input() text?: string;\n  @Input() customClass?: string;\n  /** Inline styles as a string (e.g., \"width: 100px; height: 50px;\") */\n  @Input() inlineStyles?: string;\n  /** Optional tooltip text; if falsy, tooltip is disabled */\n  @Input() tooltip?: string;\n  /** Tooltip position; mirrors MatTooltipPosition */\n  @Input() tooltipPosition: 'below' | 'above' | 'left' | 'right' = 'below';\n  @Output() clicked = new EventEmitter<MouseEvent>();\n\n  // Internal state tracking\n  isHovered: boolean = false;\n  isFocused: boolean = false;\n  isPressed: boolean = false;\n\n  get hasIcon(): boolean {\n    return !!this.icon;\n  }\n\n  get interactionLocked(): boolean {\n    return this.disabled || this.loading;\n  }\n\n  get spinnerDiameter(): number {\n    switch (this.btnSize) {\n      case 'sm':\n        return 12;\n      case 'md':\n        return 16;\n      case 'lg':\n      default:\n        return 18;\n    }\n  }\n\n  get buttonClasses(): string {\n    const baseClasses = [\n      'cqa-inline-flex',\n      'cqa-items-center',\n      'cqa-justify-center',\n      'cqa-font-medium',\n      'cqa-border',\n    ];\n\n    baseClasses.push(...this.sizeClasses);\n\n    if (this.interactionLocked) {\n      baseClasses.push('cqa-cursor-not-allowed');\n    }\n\n    if (this.fullWidth) {\n      baseClasses.push('cqa-w-full');\n    }\n\n    // Add variant and state specific classes\n    const variantClasses = this.getVariantClasses();\n    \n    return [...baseClasses, ...variantClasses, ...(this.customClass ? [this.customClass] : [])].join(' ');\n  }\n\n  private get sizeClasses(): string[] {\n    switch (this.btnSize) {\n      case 'sm':\n        return ['cqa-py-[2px]', 'cqa-text-[10px]', 'cqa-leading-[14px]', 'cqa-rounded-[5px]', 'cqa-gap-1'];\n      case 'md':\n        return ['cqa-py-[6px]', 'cqa-text-[11px]', 'cqa-leading-[16px]', 'cqa-rounded-[6px]', 'cqa-gap-1.5'];\n      case 'lg':\n      default:\n        return ['cqa-py-[10px]', 'cqa-text-[12.3px]', 'cqa-leading-[17.5px]', 'cqa-rounded-[8px]', 'cqa-gap-2'];\n    }\n  }\n\n  private getVariantClasses(): string[] {\n    const classes: string[] = [];\n    const blocked = this.interactionLocked;\n\n    if (this.variant === 'filled') {\n      if (blocked) {\n        classes.push('cqa-bg-primary-muted');\n      } else {\n        classes.push('cqa-bg-primary cqa-text-white');\n        if (this.isHovered) {\n          classes.push('cqa-bg-primary-hover');\n        }\n      }\n    } else if (this.variant === 'grey-solid') {\n      // Neutral grey solid style\n      if (blocked) {\n        classes.push('cqa-bg-grey-400', 'cqa-border', 'cqa-border-solid', 'cqa-border-primary-muted');\n      } else {\n        classes.push('cqa-bg-grey-400', 'cqa-border', 'cqa-border-solid', 'cqa-border-primary-muted');\n        if (this.isHovered) {\n          classes.push('cqa-bg-grey-200');\n        }\n      }\n    } else if (this.variant === 'outlined') {\n      if (blocked) {\n        classes.push('cqa-bg-transparent', 'cqa-border', 'cqa-border-solid', 'cqa-border-primary-muted');\n      } else {\n        if (this.isFocused) {\n          classes.push('cqa-bg-primary-surface-alt', 'cqa-border', 'cqa-border-solid', '!cqa-border-primary-hover', 'cqa-shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');\n        } else if (this.isHovered || this.isPressed) {\n          classes.push('cqa-bg-primary-surface', 'cqa-border', 'cqa-border-solid', '!cqa-border-primary');\n        } else {\n          classes.push('cqa-bg-transparent', 'cqa-border', 'cqa-border-solid', 'cqa-border-slate');\n        }\n      }\n    } else if (this.variant === 'text') {\n      if (blocked) {\n        classes.push('cqa-bg-transparent', 'cqa-border-none');\n      } else {\n        classes.push('cqa-bg-transparent', 'cqa-border-none');\n        if (this.isHovered || this.isFocused || this.isPressed) {\n          classes.push('cqa-bg-primary-surface');\n        }\n      }\n    } else if (this.variant === 'elevated') {\n      if (blocked) {\n        classes.push('cqa-bg-primary-muted', 'cqa-shadow-none');\n      } else {\n        if (this.isFocused) {\n          classes.push('cqa-bg-primary-surface-alt', 'cqa-shadow-[0px_4px_4px_rgba(0,0,0,0.25)]');\n        } else if (this.isPressed) {\n          classes.push('cqa-bg-primary-surface', 'cqa-shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n        } else if (this.isHovered) {\n          classes.push('cqa-bg-primary-surface-alt', 'cqa-shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_2px_6px_2px_rgba(0,0,0,0.15)]');\n        } else {\n          classes.push('cqa-bg-primary-surface', 'cqa-shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n        }\n      }\n    } else if (this.variant === 'tonal') {\n      if (blocked) {\n        classes.push('cqa-bg-primary-muted');\n      } else {\n        if (this.isHovered) {\n          classes.push('cqa-bg-tonal-hover', 'cqa-shadow-[0px_1px_2px_rgba(0,0,0,0.3),0px_1px_3px_1px_rgba(0,0,0,0.15)]');\n        } else {\n          classes.push('cqa-bg-primary-surface-alt');\n        }\n      }\n    }\n\n    return classes;\n  }\n\n  get textClass(): string {\n    if (this.interactionLocked) {\n      if (this.variant === 'outlined' || this.variant === 'text') {\n        return 'cqa-text-ink';\n      }\n      return 'cqa-text-ink-muted';\n    }\n\n    switch (this.variant) {\n      case 'filled':\n        return 'cqa-text-surface-default';\n      case 'grey-solid':\n        return 'cqa-text-black-100';\n      case 'outlined':\n        if (this.isFocused || this.isHovered || this.isPressed) {\n          return '!cqa-text-primary-hover';\n        }\n        return 'cqa-text-slate';\n      case 'text':\n      case 'elevated':\n        return 'cqa-text-primary-hover';\n      case 'tonal':\n        return 'cqa-text-ink';\n      default:\n        return '';\n    }\n  }\n\n  @HostListener('mouseenter')\n  onMouseEnter() {\n    if (!this.interactionLocked) {\n      this.isHovered = true;\n    }\n  }\n\n  @HostListener('mouseleave')\n  onMouseLeave() {\n    this.isHovered = false;\n    this.isPressed = false;\n  }\n\n  @HostListener('mousedown')\n  onMouseDown() {\n    if (!this.interactionLocked) {\n      this.isPressed = true;\n    }\n  }\n\n  @HostListener('mouseup')\n  onMouseUp() {\n    this.isPressed = false;\n  }\n\n  @HostListener('focus')\n  onFocus() {\n    if (!this.interactionLocked) {\n      this.isFocused = true;\n    }\n  }\n\n  @HostListener('blur')\n  onBlur() {\n    this.isFocused = false;\n    this.isPressed = false;\n  }\n\n  onClick(event: MouseEvent) {\n    if (!this.interactionLocked) {\n      this.clicked.emit(event);\n    }\n  }\n\n  get buttonStyles(): string {\n    const baseStyle = 'pointer-events: auto;';\n    return this.inlineStyles ? `${baseStyle} ${this.inlineStyles}` : baseStyle;\n  }\n\n  get paddingClasses(): string {\n    const hasTextAndIconStart = this.text && this.icon && this.iconPosition === 'start';\n    const hasTextAndIconEnd = this.text && this.icon && this.iconPosition === 'end';\n    const hasTextOnly = this.text && !this.icon;\n    const hasIconOnly = !this.text && this.icon;\n\n    switch (this.btnSize) {\n      case 'sm':\n        if (hasTextAndIconStart) return 'cqa-pr-[8px] cqa-pl-[8px]';\n        if (hasTextAndIconEnd) return 'cqa-pl-[8px] cqa-pr-[8px]';\n        if (hasTextOnly) return 'cqa-px-[8px]';\n        if (hasIconOnly) return 'cqa-px-[8px]';\n        return 'cqa-px-[8px]';\n      \n      case 'md':\n        if (hasTextAndIconStart) return 'cqa-pr-[16px] cqa-pl-[16px]';\n        if (hasTextAndIconEnd) return 'cqa-pl-[16px] cqa-pr-[16px]';\n        if (hasTextOnly) return 'cqa-px-[16px]';\n        if (hasIconOnly) return 'cqa-px-[16px]';\n        return 'cqa-px-[16px]';\n      \n      case 'lg':\n      default:\n        if (hasTextAndIconStart) return 'cqa-pr-[24px] cqa-pl-[16px]';\n        if (hasTextAndIconEnd) return 'cqa-pl-[24px] cqa-pr-[16px]';\n        if (hasTextOnly) return 'cqa-px-[24px]';\n        if (hasIconOnly) return 'cqa-px-[12px]';\n        return 'cqa-px-[24px]';\n    }\n  }\n\n  get iconClasses(): string {\n    switch (this.btnSize) {\n      case 'sm':\n        return '!cqa-w-[10px] !cqa-h-[10px] !cqa-text-[10px]';\n      case 'md':\n        return '!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]';\n      case 'lg':\n      default:\n        return '!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]';\n    }\n  }\n}\n\n","<div class=\"cqa-ui-root\">\n  <button\n    [style]=\"buttonStyles\"\n    [matTooltip]=\"tooltip || ''\"\n    [matTooltipDisabled]=\"!tooltip\"\n    [matTooltipPosition]=\"tooltipPosition\"\n    [ngClass]=\"[\n      paddingClasses,\n      buttonClasses,\n      textClass\n    ]\"\n    [type]=\"type\"\n    [disabled]=\"interactionLocked\"\n    [attr.aria-disabled]=\"interactionLocked\"\n    [attr.aria-busy]=\"loading\"\n    (click)=\"onClick($event)\"\n  >\n\n    <mat-spinner\n      *ngIf=\"loading\"\n      [diameter]=\"spinnerDiameter\"\n      strokeWidth=\"2\"\n      mode=\"indeterminate\"\n      class=\"cqa-inline-block cqa-flex-shrink-0 cqa-mr-1.5\"\n    ></mat-spinner>\n\n    <mat-icon *ngIf=\"!loading && icon && iconPosition === 'start'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n      {{ icon }}\n    </mat-icon>\n\n    <!-- Dynamic text support -->\n    <span *ngIf=\"text\">{{text}}</span>\n\n    <ng-content *ngIf=\"!text\"></ng-content>\n\n    <mat-icon *ngIf=\"!loading && icon && iconPosition === 'end'\" [ngClass]=\"iconClasses\" [style.color]=\"iconColor\">\n      {{ icon }}\n    </mat-icon>\n\n  </button>\n</div>","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\ntype SearchBarSize = 'sm' | 'md' | 'lg';\n\n@Component({\n  selector: 'cqa-search-bar',\n  templateUrl: './search-bar.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class SearchBarComponent implements OnChanges {\n\n  /** Placeholder text for the input */\n  @Input() placeholder = 'Search';\n\n  /** Initial value or externally controlled value */\n  @Input() value = '';\n\n  /** Disable interactions */\n  @Input() disabled = false;\n\n  /** Whether the clear button should be visible when there is text */\n  @Input() showClear = true;\n\n  /** Accessible label for the input */\n  @Input() ariaLabel = 'Search';\n\n  /** Automatically focus the input when rendered */\n  @Input() autoFocus = false;\n\n  /** Search bar size */\n  @Input() size: SearchBarSize = 'md';\n\n  /** Stretch to fill container width */\n  @Input() fullWidth = false;\n\n  /** Emit on value changes (e.g. for two-way binding) */\n  @Output() valueChange = new EventEmitter<string>();\n\n  /** Emit when user submits search (Enter key or form submit) */\n  @Output() search = new EventEmitter<string>();\n\n  /** Emit when the value is cleared via the clear button */\n  @Output() cleared = new EventEmitter<void>();\n\n  inputValue = '';\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['value'] && changes['value'].currentValue !== undefined) {\n      const newValue = changes['value'].currentValue ?? '';\n      if (newValue !== this.inputValue) {\n        this.inputValue = newValue;\n      }\n    }\n  }\n\n  readonly widthClasses: Record<SearchBarSize, string> = {\n    sm: 'cqa-w-[295px]',\n    md: 'cqa-w-[395px]',\n    lg: 'cqa-w-[495px]',\n  };\n\n  onInput(event: Event): void {\n    const target = event.target as HTMLInputElement | null;\n    const nextValue = target?.value ?? '';\n    this.inputValue = nextValue;\n    this.valueChange.emit(this.inputValue);\n  }\n\n  onSubmit(event: Event): void {\n    event.preventDefault();\n    if (this.disabled) {\n      return;\n    }\n\n    this.search.emit(this.inputValue.trim());\n  }\n\n  clear(): void {\n    if (this.disabled || this.inputValue === '') {\n      return;\n    }\n\n    this.inputValue = '';\n    this.valueChange.emit('');\n    this.cleared.emit();\n  }\n}\n","<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n  [style.width]=\"fullWidth ? '100%' : 'auto'\">\n  <form\n    class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-6 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n    [ngClass]=\"fullWidth ? 'cqa-w-full' : widthClasses[size]\" (submit)=\"onSubmit($event)\">\n    <span class=\"cqa-flex-none cqa-flex cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4\"\n      [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n      <mat-icon class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\" [style.width.px]=\"16\"\n        [style.height.px]=\"16\" [style.fontSize.px]=\"16\" [style.color]=\"disabled ? 'rgba(156,163,175,0.38)' : '#99999E'\" [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n        search\n      </mat-icon>\n    </span>\n\n    <input\n      type=\"text\"\n      class=\"cqa-flex-1 cqa-min-w-[180px] cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n      [placeholder]=\"placeholder\"\n      [value]=\"inputValue\"\n      (input)=\"onInput($event)\"\n      [disabled]=\"disabled\"\n      [attr.aria-label]=\"ariaLabel\"\n      autocomplete=\"off\"\n      autocapitalize=\"none\"\n      spellcheck=\"false\"\n      [attr.autofocus]=\"autoFocus ? '' : null\"\n    />\n\n    <button *ngIf=\"showClear && inputValue\" type=\"button\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n      (click)=\"clear()\" [disabled]=\"disabled\" aria-label=\"Clear search\">\n      <mat-icon class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\" [style.width.px]=\"16\"\n        [style.height.px]=\"16\" [style.fontSize.px]=\"16\" [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n        close\n      </mat-icon>\n    </button>\n  </form>\n</div>","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { CqaAutocompleteOption } from './autocomplete.model';\n\ntype AutocompleteSize = 'sm' | 'md' | 'lg';\n\n@Component({\n  selector: 'cqa-autocomplete',\n  templateUrl: './autocomplete.component.html',\n  host: { class: 'cqa-ui-root' },\n})\nexport class AutocompleteComponent implements OnInit, OnChanges {\n  /** Placeholder text for the input */\n  @Input() placeholder = 'Search or select...';\n\n  /** Options shown in the dropdown (filtered by input when open) */\n  @Input() options: CqaAutocompleteOption[] = [];\n\n  /** Initial or controlled value (displayed in the input) */\n  @Input() value = '';\n\n  /** Disable the input */\n  @Input() disabled = false;\n\n  /** Whether to show the clear button when there is text */\n  @Input() showClear = true;\n\n  /** Accessible label for the input */\n  @Input() ariaLabel = 'Auto-complete';\n\n  /** Auto focus the input when rendered */\n  @Input() autoFocus = false;\n\n  /** Size variant (matches search bar widths) */\n  @Input() size: AutocompleteSize = 'md';\n\n  /** Stretch to full width of container */\n  @Input() fullWidth = false;\n\n  /** Use compact padding (4px) instead of default (24px) for the input field */\n  @Input() compact = false;\n\n  /** Emit when the input value changes (e.g. for two-way binding) */\n  @Output() valueChange = new EventEmitter<string>();\n\n  /** Emit when an option is selected from the list (value from option) */\n  @Output() optionSelect = new EventEmitter<CqaAutocompleteOption>();\n\n  /** Emit when the value is cleared via the clear button */\n  @Output() cleared = new EventEmitter<void>();\n\n  inputValue = '';\n  panelOpen = false;\n  private blurTimeout: ReturnType<typeof setTimeout> | null = null;\n\n  ngOnInit(): void {\n    // Initialize inputValue from value input\n    if (this.value !== undefined && this.value !== null && this.value !== '') {\n      this.inputValue = String(this.value);\n    } else {\n      this.inputValue = '';\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['value']) {\n      const newValue = changes['value'].currentValue;\n      if (newValue !== undefined && newValue !== null && newValue !== '') {\n        const stringValue = String(newValue);\n        if (stringValue !== this.inputValue) {\n          this.inputValue = stringValue;\n        }\n      } else {\n        // Clear input if value is empty/null/undefined\n        if (this.inputValue !== '') {\n          this.inputValue = '';\n        }\n      }\n    }\n  }\n\n  readonly widthClasses: Record<AutocompleteSize, string> = {\n    sm: 'cqa-w-[295px]',\n    md: 'cqa-w-[395px]',\n    lg: 'cqa-w-[495px]',\n  };\n\n  get displayOptions(): CqaAutocompleteOption[] {\n    const list = this.options ?? [];\n    const q = (this.inputValue ?? '').toLowerCase().trim();\n    if (!q) {\n      return list;\n    }\n    return list.filter((opt) => {\n      const label = (opt.label ?? opt.value ?? '').toLowerCase();\n      return label.includes(q);\n    });\n  }\n\n  onInput(event: Event): void {\n    const target = event.target as HTMLInputElement | null;\n    const nextValue = target?.value ?? '';\n    this.inputValue = nextValue;\n    this.valueChange.emit(this.inputValue);\n    this.panelOpen = true;\n  }\n\n  onFocus(): void {\n    if (this.blurTimeout) {\n      clearTimeout(this.blurTimeout);\n      this.blurTimeout = null;\n    }\n    this.panelOpen = true;\n  }\n\n  onBlur(): void {\n    this.blurTimeout = setTimeout(() => {\n      this.panelOpen = false;\n      this.blurTimeout = null;\n    }, 150);\n  }\n\n  selectOption(option: CqaAutocompleteOption): void {\n    const displayLabel = option.label ?? option.value;\n    this.inputValue = displayLabel;\n    this.valueChange.emit(this.inputValue);\n    this.optionSelect.emit(option);\n    this.panelOpen = false;\n  }\n\n  clear(): void {\n    if (this.disabled || this.inputValue === '') {\n      return;\n    }\n    this.inputValue = '';\n    this.valueChange.emit('');\n    this.cleared.emit();\n    this.panelOpen = false;\n  }\n\n  getOptionLabel(option: CqaAutocompleteOption): string {\n    return option.label ?? option.value ?? '';\n  }\n\n  trackByValue(_index: number, option: CqaAutocompleteOption): string {\n    return option.value;\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    this.panelOpen = false;\n  }\n}\n","<div\n  class=\"cqa-autocomplete-root cqa-relative\"\n  [style.display]=\"fullWidth ? 'block' : 'inline-block'\"\n  [style.width]=\"fullWidth ? '100%' : 'auto'\">\n  <!-- Field: same styling as search bar -->\n  <div\n    class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-py-3 cqa-text-[14px] cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-transition-colors\"\n    [ngClass]=\"[fullWidth ? 'cqa-w-full' : widthClasses[size], compact ? 'cqa-px-1' : 'cqa-px-6']\">\n    <input\n      type=\"text\"\n      class=\"cqa-flex-1 cqa-min-w-0 cqa-border-none cqa-outline-none cqa-bg-transparent placeholder:cqa-text-gray-300 disabled:cqa-text-gray-400 disabled:cqa-cursor-not-allowed cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-align-middle cqa-text-black-100\"\n      [placeholder]=\"placeholder\"\n      [value]=\"inputValue\"\n      (input)=\"onInput($event)\"\n      (focus)=\"onFocus()\"\n      (blur)=\"onBlur()\"\n      [disabled]=\"disabled\"\n      [attr.aria-label]=\"ariaLabel\"\n      [attr.aria-expanded]=\"panelOpen\"\n      aria-autocomplete=\"list\"\n      aria-haspopup=\"listbox\"\n      autocomplete=\"off\"\n      autocapitalize=\"none\"\n      spellcheck=\"false\"\n      [attr.autofocus]=\"autoFocus ? '' : null\"\n    />\n    <button\n      *ngIf=\"showClear && inputValue\"\n      type=\"button\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-p-0 cqa-w-4 cqa-h-4 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 cqa-hover:cqa-text-gray-700 disabled:cqa-text-gray-300 cqa-transition-colors cqa-leading-none\"\n      (click)=\"clear()\"\n      [disabled]=\"disabled\"\n      aria-label=\"Clear\">\n      <mat-icon\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-leading-none cqa-p-0\"\n        [style.width.px]=\"16\"\n        [style.height.px]=\"16\"\n        [style.fontSize.px]=\"16\"\n        [ngClass]=\"{ 'cqa-opacity-[0.38]': disabled }\">\n        close\n      </mat-icon>\n    </button>\n  </div>\n  <!-- List box: below field, same width as field -->\n  <ul\n    *ngIf=\"panelOpen\"\n    role=\"listbox\"\n    class=\"cqa-autocomplete-list cqa-absolute cqa-left-0 cqa-right-0 cqa-top-full cqa-mt-1 cqa-py-1 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-shadow-sm cqa-max-h-[240px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-z-[1100] cqa-list-none cqa-m-0 cqa-p-0\"\n    [class.cqa-w-full]=\"fullWidth\">\n    <li\n      *ngFor=\"let option of displayOptions; trackBy: trackByValue\"\n      role=\"option\"\n      (mousedown)=\"selectOption(option); $event.preventDefault()\"\n      class=\"cqa-px-4 cqa-py-2 cqa-text-[12.3px] cqa-leading-none cqa-tracking-normal cqa-text-black-100 cqa-cursor-pointer cqa-font-['SF_Pro_Text'] hover:cqa-bg-gray-100 cqa-transition-colors\">\n      {{ getOptionLabel(option) }}\n    </li>\n    <li\n      *ngIf=\"displayOptions.length === 0\"\n      class=\"cqa-px-4 cqa-py-3 cqa-text-[12.3px] cqa-text-gray-400 cqa-cursor-default\">\n      No matches\n    </li>\n  </ul>\n</div>\n","import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnDestroy,\n  OnChanges,\n  Output,\n  QueryList,\n  SimpleChanges,\n  ViewChild,\n  ViewChildren,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nexport type SegmentOption = {\n  label: string;\n  value: string;\n  disabled?: boolean;\n  icon?: string;\n  tooltip?: string;\n  count?: number;\n};\n\n@Component({\n  selector: 'cqa-segment-control',\n  templateUrl: './segment-control.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class SegmentControlComponent implements OnChanges, AfterViewInit, OnDestroy {\n\n  @Input() segments: SegmentOption[] = [\n    { label: 'Tab Group', value: 'tab-group-1' },\n    { label: 'Tab Group', value: 'tab-group-2' },\n  ];\n\n  /**\n   * The currently selected segment value.\n   * If not provided, defaults to the first enabled segment.\n   */\n  @Input() value?: string;\n  @Input() disabled = false;\n  @Input() containerBgColor = '';\n\n  /** When true, the control stretches to fill its parent and buttons share equal width. */\n  @Input() fullWidth = false;\n\n  @Input() size: 'md' | 'lg' = 'md';\n\n  @HostBinding('style.display') get hostDisplay() { return this.fullWidth ? 'block' : null; }\n  @HostBinding('style.width') get hostWidth() { return this.fullWidth ? '100%' : null; }\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @ViewChildren('segmentButton') segmentButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n  @ViewChild('segmentContainer') segmentContainer?: ElementRef<HTMLDivElement>;\n\n  indicatorStyle: Record<string, string> = {};\n  indicatorVisible = false;\n  private buttonChangesSub?: Subscription;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['segments'] || changes['value']) {\n      this.ensureSelectedValue();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.buttonChangesSub = this.segmentButtons.changes.subscribe(() => this.updateIndicator());\n    this.ensureSelectedValue();\n    this.updateIndicator();\n  }\n\n  ngOnDestroy(): void {\n    this.buttonChangesSub?.unsubscribe?.();\n  }\n\n  trackByValue(_index: number, option: SegmentOption): string {\n    return option.value;\n  }\n\n  isSelected(option: SegmentOption): boolean {\n    return option.value === this.value;\n  }\n\n  select(option: SegmentOption, index: number): void {\n    if (this.disabled || option.disabled) {\n      return;\n    }\n\n    const nextValue = option.value;\n    if (nextValue !== this.value) {\n      this.value = nextValue;\n      this.valueChange.emit(nextValue);\n    }\n\n    this.focusButton(index);\n    this.updateIndicator();\n  }\n\n  onKeyDown(event: KeyboardEvent, currentIndex: number): void {\n    if (this.disabled) {\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowRight':\n      case 'ArrowDown':\n        event.preventDefault();\n        this.moveSelection(1, currentIndex);\n        break;\n      case 'ArrowLeft':\n      case 'ArrowUp':\n        event.preventDefault();\n        this.moveSelection(-1, currentIndex);\n        break;\n      case 'Home':\n        event.preventDefault();\n        this.selectFirstEnabled();\n        break;\n      case 'End':\n        event.preventDefault();\n        this.selectLastEnabled();\n        break;\n      case ' ':\n      case 'Enter':\n        event.preventDefault();\n        this.select(this.segments[currentIndex], currentIndex);\n        break;\n      default:\n        break;\n    }\n  }\n\n  private moveSelection(step: 1 | -1, startIndex: number): void {\n    const enabledIndexes = this.getEnabledIndexes();\n    if (enabledIndexes.length === 0) {\n      return;\n    }\n\n    const currentEnabledIndex = enabledIndexes.indexOf(startIndex);\n    const fallbackIndex = this.getSelectedIndex(enabledIndexes);\n    const baseIndex = currentEnabledIndex >= 0 ? currentEnabledIndex : fallbackIndex;\n    const nextPosition = (baseIndex + step + enabledIndexes.length) % enabledIndexes.length;\n    const targetIndex = enabledIndexes[nextPosition];\n\n    this.select(this.segments[targetIndex], targetIndex);\n  }\n\n  private selectFirstEnabled(): void {\n    const enabledIndexes = this.getEnabledIndexes();\n    if (enabledIndexes.length > 0) {\n      const index = enabledIndexes[0];\n      this.select(this.segments[index], index);\n      this.updateIndicator();\n    }\n  }\n\n  private selectLastEnabled(): void {\n    const enabledIndexes = this.getEnabledIndexes();\n    if (enabledIndexes.length > 0) {\n      const index = enabledIndexes[enabledIndexes.length - 1];\n      this.select(this.segments[index], index);\n      this.updateIndicator();\n    }\n  }\n\n  private getEnabledIndexes(): number[] {\n    return this.segments\n      .map((option, index) => ({ option, index }))\n      .filter(({ option }) => !option.disabled)\n      .map(({ index }) => index);\n  }\n\n  private getSelectedIndex(enabledIndexes: number[]): number {\n    const current = this.segments.findIndex((option) => option.value === this.value && !option.disabled);\n    if (current >= 0) {\n      return enabledIndexes.indexOf(current);\n    }\n\n    return 0;\n  }\n\n  /**\n   * Ensures a valid value is selected.\n   * If no value is provided or the value is invalid, defaults to the first enabled segment.\n   */\n  private ensureSelectedValue(): void {\n    const enabled = this.segments.filter((option) => !option.disabled);\n    if (enabled.length === 0) {\n      this.value = undefined;\n      return;\n    }\n\n    // If no value is set, or value doesn't exist in segments, default to first enabled segment\n    if (!this.value || !this.segments.some((option) => option.value === this.value)) {\n      const firstEnabledValue = enabled[0].value;\n      // Only emit if value actually changed\n      if (this.value !== firstEnabledValue) {\n        this.value = firstEnabledValue;\n        this.valueChange.emit(this.value);\n      }\n      const index = this.segments.findIndex((option) => option.value === firstEnabledValue);\n      if (index >= 0) {\n        this.focusButton(index);\n        this.updateIndicator(index);\n      }\n      return;\n    }\n\n    // If the selected value is disabled, switch to first enabled segment\n    const selected = this.segments.find((option) => option.value === this.value);\n    if (selected?.disabled) {\n      const firstEnabledValue = enabled[0].value;\n      // Only emit if value actually changed\n      if (this.value !== firstEnabledValue) {\n        this.value = firstEnabledValue;\n        this.valueChange.emit(this.value);\n      }\n      const index = this.segments.findIndex((option) => option.value === firstEnabledValue);\n      if (index >= 0) {\n        this.focusButton(index);\n        this.updateIndicator(index);\n      }\n      return;\n    }\n    \n    this.updateIndicator();\n  }\n\n  private focusButton(index: number): void {\n    queueMicrotask(() => {\n      const button = this.segmentButtons?.get(index)?.nativeElement;\n      button?.focus();\n    });\n  }\n\n  private updateIndicator(preferredIndex?: number): void {\n    queueMicrotask(() => {\n      const container = this.segmentContainer?.nativeElement;\n      const buttons = this.segmentButtons?.toArray() ?? [];\n      if (!container || buttons.length === 0) {\n        this.indicatorVisible = false;\n        this.indicatorStyle = {};\n        return;\n      }\n\n      const index = preferredIndex ?? buttons.findIndex((button, idx) => this.segments[idx]?.value === this.value);\n      if (index === -1) {\n        this.indicatorVisible = false;\n        this.indicatorStyle = {};\n        return;\n      }\n\n      const buttonEl = buttons[index]?.nativeElement;\n      if (!buttonEl) {\n        this.indicatorVisible = false;\n        this.indicatorStyle = {};\n        return;\n      }\n\n      const containerRect = container.getBoundingClientRect();\n      const buttonRect = buttonEl.getBoundingClientRect();\n      const offsetLeft = buttonEl.offsetLeft;\n      const offsetTop = buttonEl.offsetTop;\n      const width = buttonEl.offsetWidth;\n      const height = buttonEl.offsetHeight;\n\n      const isDisabled = this.disabled || this.segments[index]?.disabled;\n      this.indicatorStyle = {\n        width: `${width}px`,\n        height: `${height}px`,\n        left: `${offsetLeft}px`,\n        top: `${offsetTop}px`,\n        backgroundColor: isDisabled ? '#9BA0F4' : '#3F43EE',\n      };\n      this.indicatorVisible = true;\n    });\n  }\n\n  get isIndicatorVisible(): boolean {\n    return this.indicatorVisible;\n  }\n}\n","<div class=\"cqa-ui-root\" [style.display]=\"fullWidth ? 'block' : 'inline-block'\" [style.width]=\"fullWidth ? '100%' : null\">\n  <div\n    #segmentContainer\n    class=\"cqa-relative cqa-flex-row cqa-items-start cqa-bg-surface-light cqa-rounded-[8px]\"\n    [ngClass]=\"[\n      fullWidth ? 'cqa-flex' : 'cqa-inline-flex',\n      size === 'lg' ? 'cqa-h-[40px] cqa-p-[4px]' : 'cqa-h-[31.5px] cqa-p-[3.5px]'\n    ]\"\n    role=\"tablist\"\n    [attr.aria-disabled]=\"disabled || null\"\n    [ngStyle]=\"containerBgColor ? {'background-color': containerBgColor} : null\"\n  >\n    <div\n      class=\"cqa-absolute cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-pointer-events-none\"\n      [class.cqa-opacity-0]=\"!isIndicatorVisible\" [ngStyle]=\"indicatorStyle\" aria-hidden=\"true\"></div>\n\n    <button *ngFor=\"let segment of segments; index as index; trackBy: trackByValue\" #segmentButton type=\"button\"\n      role=\"tab\"\n      class=\"cqa-relative cqa-z-0 cqa-flex cqa-flex-col cqa-justify-center cqa-items-center cqa-rounded-[8px] cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-whitespace-nowrap cqa-text-center focus:cqa-outline-none focus-visible:cqa-outline-none focus-visible:cqa-ring-0 focus-visible:cqa-ring-offset-0\"\n      [ngClass]=\"{\n        'cqa-flex-1 cqa-min-w-0': fullWidth,\n        'cqa-flex-none': !fullWidth,\n        'cqa-text-white cqa-font-medium': isSelected(segment),\n        'cqa-text-muted': !isSelected(segment) && !(disabled || segment.disabled),\n        'cqa-cursor-not-allowed': disabled || segment.disabled,\n        'cqa-text-disabled': (disabled || segment.disabled) && !isSelected(segment),\n        'cqa-hover:cqa-text-black': !isSelected(segment) && !disabled && !segment.disabled,\n        'cqa-px-[16px] cqa-py-[6px] cqa-h-[32px]': size === 'lg',\n        'cqa-px-[14px] cqa-py-[3.5px] cqa-h-[25px]': size !== 'lg'\n      }\" [disabled]=\"disabled || segment.disabled\" [attr.aria-selected]=\"isSelected(segment)\"\n      [attr.tabindex]=\"!disabled && !segment.disabled ? (isSelected(segment) ? 0 : -1) : -1\"\n      (click)=\"select(segment, index)\" (keydown)=\"onKeyDown($event, index)\">\n      <span\n        class=\"cqa-flex cqa-gap-1 cqa-items-center cqa-justify-center cqa-h-[18px] cqa-font-['Inter'] cqa-font-normal cqa-text-[12px] cqa-leading-[12px] cqa-text-center cqa-align-middle\">\n        \n      <mat-icon *ngIf=\"segment?.icon\" class=\"!cqa-w-[12px] !cqa-h-[12px] !cqa-text-[12px]\" >\n        {{ segment?.icon }}\n      </mat-icon>\n\n      {{ segment.label }}\n\n      <span *ngIf=\"segment?.count != null\"\n        class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-ml-1 cqa-px-[6px] cqa-rounded-full cqa-text-[10px] cqa-leading-[14px] cqa-font-semibold cqa-min-w-[16px]\"\n        [ngClass]=\"isSelected(segment) ? 'cqa-bg-white cqa-text-[#3F43EE]' : 'cqa-bg-[#E5E7EB] cqa-text-[#475569]'\">\n        {{ segment.count }}\n      </span>\n\n      <span *ngIf=\"segment?.tooltip\"\n        style=\"display: inline-flex; align-items: center; justify-content: center; margin-left: 4px; cursor: help;\"\n        [matTooltip]=\"segment.tooltip\"\n        matTooltipPosition=\"above\"\n        matTooltipShowDelay=\"0\"\n        (click)=\"$event.stopPropagation()\">\n        <mat-icon style=\"width: 14px; height: 14px; font-size: 14px; opacity: 0.8;\">info</mat-icon>\n      </span>\n    </span>\n  </button>\n</div>","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ComponentRef,\n  TemplateRef,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport { CdkPortalOutlet, ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { DialogButtonAlignment, DialogButtonConfig, DialogConfig, DialogContentConfig } from './dialog.models';\nimport { ButtonVariant } from '../button/button.component';\nimport { DialogRef } from './dialog-ref';\n\n@Component({\n  selector: 'cqa-dialog',\n  templateUrl: './dialog.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' },\n})\nexport class DialogComponent<TResult = unknown> {\n\n  @ViewChild(CdkPortalOutlet, { static: true }) portalOutlet?: CdkPortalOutlet;\n\n  config!: DialogConfig<DialogContentConfig, TResult>;\n  dialogRef!: DialogRef<TResult>;\n\n  contentAttached = false;\n\n  constructor(private readonly viewContainerRef: ViewContainerRef, private readonly cdr: ChangeDetectorRef) {}\n\n  attachTemplate(template: TemplateRef<unknown>, context?: Record<string, unknown>): void {\n    if (!this.portalOutlet) {\n      return;\n    }\n\n    const templateContext =\n      context ??\n      {\n        $implicit: this.config?.data,\n        data: this.config?.data,\n      };\n    const portal = new TemplatePortal(template, this.viewContainerRef, templateContext);\n    this.portalOutlet.attachTemplatePortal(portal);\n    this.markContentAttached();\n  }\n\n  attachComponent(component: ComponentPortal<unknown>): ComponentRef<unknown> | undefined {\n    if (!this.portalOutlet) {\n      return undefined;\n    }\n\n    const componentRef = this.portalOutlet.attachComponentPortal(component);\n    this.markContentAttached();\n    return componentRef;\n  }\n\n  async onButtonClick(button: DialogButtonConfig<TResult>): Promise<void> {\n    const closeOnClick = button.closeOnClick ?? true;\n    let handlerResult: TResult | false | void | Promise<TResult | false | void> = undefined;\n\n    if (button.handler) {\n      handlerResult = button.handler(this.dialogRef);\n    }\n\n    const resolved = handlerResult instanceof Promise ? await handlerResult : handlerResult;\n\n    if (!closeOnClick || resolved === false) {\n      return;\n    }\n\n    this.dialogRef.close(resolved as TResult | undefined);\n  }\n\n  get buttonAlignmentClass(): string {\n    const alignment = this.config?.buttonAlignment ?? 'right';\n    return this.mapAlignmentToClass(alignment);\n  }\n\n  get panelClassList(): string[] {\n    const baseClasses = [\n      'cqa-relative',\n      'cqa-w-full',\n      'cqa-bg-white',\n      'cqa-rounded-2xl',\n      'cqa-shadow-md',\n      'cqa-border',\n      'cqa-border-border-default',\n      'cqa-p-6',\n      'cqa-text-left',\n    ];\n\n    const custom = this.config?.panelClass;\n\n    if (!custom) {\n      return baseClasses;\n    }\n\n    return Array.isArray(custom) ? [...baseClasses, ...custom] : [...baseClasses, custom];\n  }\n\n  get panelStyles(): Record<string, string | undefined> {\n    return {\n      width: this.config?.width,\n      maxWidth: this.config?.maxWidth ?? '480px',\n    };\n  }\n\n  buttonVariant(button: DialogButtonConfig<TResult>): ButtonVariant {\n    const role = this.normalizeRole(button.role);\n\n    switch (role) {\n      case 'secondary':\n        return 'outlined';\n      case 'text':\n        return 'text';\n      case 'tonal':\n        return 'tonal';\n      case 'elevated':\n        return 'elevated';\n      case 'filled':\n      case 'primary':\n      case 'warn':\n      default:\n        return 'filled';\n    }\n  }\n\n  isButtonDisabled(button: DialogButtonConfig<TResult>): boolean {\n    const d = button.disabled;\n    if (typeof d === 'function') {\n      try { return !!d(this.dialogRef); } catch { return false; }\n    }\n    return !!d;\n  }\n\n  isButtonLoading(button: DialogButtonConfig<TResult>): boolean {\n    const l = button.loading;\n    if (typeof l === 'function') {\n      try { return !!l(this.dialogRef); } catch { return false; }\n    }\n    return !!l;\n  }\n\n  buttonHostClasses(button: DialogButtonConfig<TResult>): string[] {\n    const role = this.normalizeRole(button.role);\n\n    if (role === 'warn') {\n      return ['cqa-dialog-btn-warn'];\n    }\n\n    return [];\n  }\n\n  private mapAlignmentToClass(alignment: DialogButtonAlignment): string {\n    switch (alignment) {\n      case 'left':\n        return 'cqa-justify-start';\n      case 'center':\n        return 'cqa-justify-center';\n      case 'right':\n      default:\n        return 'cqa-justify-end';\n    }\n  }\n\n  private markContentAttached(): void {\n    this.contentAttached = true;\n    this.cdr.markForCheck();\n  }\n\n  private normalizeRole(role: string | undefined): string {\n    return (role ?? 'secondary').trim().split(/\\s+/)[0];\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-flex cqa-w-full cqa-justify-center cqa-px-4 sm:cqa-px-6\">\n    <div [ngClass]=\"panelClassList\" [ngStyle]=\"panelStyles\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-5\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n          <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-dialog\">\n            {{ config.title }}\n          </h2>\n\n          <p *ngIf=\"config.description\" class=\"cqa-text-sm cqa-leading-6 cqa-text-dialog-secondary\">\n            {{ config.description }}\n          </p>\n\n          <div *ngIf=\"config.warning\"\n            class=\"cqa-rounded-xl cqa-border cqa-border-red-200 cqa-bg-red-50 cqa-px-4 cqa-py-3 cqa-text-sm cqa-leading-5 cqa-text-red-700\">\n            {{ config.warning }}\n          </div>\n        </div>\n\n        <div class=\"cqa-text-sm cqa-text-dialog\" [class.hidden]=\"!contentAttached\">\n          <ng-template cdkPortalOutlet></ng-template>\n        </div>\n\n        <div class=\"cqa-mt-4 cqa-flex cqa-flex-wrap cqa-gap-3\" [ngClass]=\"buttonAlignmentClass\">\n          <cqa-button *ngFor=\"let button of config.buttons\" type=\"button\" [variant]=\"buttonVariant(button)\"\n            [disabled]=\"isButtonDisabled(button)\"\n            [loading]=\"isButtonLoading(button)\"\n            [ngClass]=\"buttonHostClasses(button)\" (clicked)=\"onButtonClick(button)\">\n            {{ button.label }}\n          </cqa-button>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>","import { Directive, Input, TemplateRef } from \"@angular/core\";\n\n@Directive({\n  selector: \"ng-template[dynamicCell]\"\n})\nexport class DynamicCellTemplateDirective {\n  @Input(\"dynamicCell\") name!: string;\n  constructor(public template: TemplateRef<any>) {}\n}\n\n@Directive({\n  selector: \"ng-template[dynamicHeader]\"\n})\nexport class DynamicHeaderTemplateDirective {\n  @Input(\"dynamicHeader\") name!: string;\n  constructor(public template: TemplateRef<any>) {}\n}\n\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-full-table-loader',\n  templateUrl: './full-table-loader.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-full-table-loader' }\n})\nexport class FullTableLoaderComponent {\n  @Input() label: string = 'Loading...';\n}\n\n\n","<div\n  class=\"table-loading-overlay cqa-absolute cqa-top-0 cqa-bottom-0 cqa-left-0 cqa-right-0 cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-z-[1000]\">\n  <div\n    class=\"blur-backdrop cqa-absolute cqa-top-0 cqa-bottom-0 cqa-left-0 cqa-right-0 cqa-bg-white/70 cqa-backdrop-blur-[4px] cqa-z-[1]\">\n  </div>\n  <div\n    class=\"loading-spinner cqa-flex cqa-flex-row cqa-items-center cqa-justify-center cqa-gap-3 cqa-text-center cqa-relative cqa-z-20 cqa-bg-white cqa-py-4 cqa-px-6 cqa-rounded-xl cqa-shadow-lg\">\n    <svg class=\"cqa-animate-spin cqa-text-primary\" width=\"32\" height=\"32\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\"\n      viewBox=\"0 0 24 24\">\n      <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n      <path class=\"cqa-opacity-75\" fill=\"currentColor\"\n        d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\">\n      </path>\n    </svg>\n    <span class=\"cqa-text-primary\">{{ label }}</span>\n  </div>\n</div>\n\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-table-data-loader',\n  templateUrl: './table-data-loader.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-table-data-loader' }\n})\nexport class TableDataLoaderComponent {\n  @Input() label: string = 'Loading...';\n  @Input() size: number = 24;\n}\n\n\n","<div class=\"loading-spinner-simple cqa-py-2 cqa-flex cqa-flex-row cqa-items-center cqa-justify-center cqa-gap-3 cqa-text-center\">\n  <svg class=\"cqa-animate-spin cqa-text-primary\" [attr.width]=\"size\" [attr.height]=\"size\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n    <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n    <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n  </svg>\n  <span class=\"cqa-text-primary\">{{ label }}</span>\n  </div>\n\n\n","import { Directive, ViewContainerRef, Input, OnInit, OnDestroy, OnChanges, SimpleChanges, ComponentRef, Type, ChangeDetectorRef } from '@angular/core';\nimport { ComponentRenderConfig } from './component-render-config.interface';\n\n@Directive({\n  selector: '[cqaCellContainer]',\n  exportAs: 'cqaCellContainer'\n})\nexport class DynamicCellContainerDirective implements OnInit, OnChanges, OnDestroy {\n  @Input() componentConfig?: Type<any> | ComponentRenderConfig;\n  @Input() row?: any;\n  @Input() column?: any;\n  @Input() rowIndex?: number;\n  @Input() colId?: string;\n  \n  private componentRef?: ComponentRef<any>;\n  private initialized = false;\n  private isApplyingInputChanges = false;\n\n  constructor(\n    public viewContainerRef: ViewContainerRef,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    if (this.componentConfig && !this.initialized) {\n      this.createComponent();\n      this.initialized = true;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (\n      this.componentRef &&\n      this.componentConfig &&\n      (changes['componentConfig'] || changes['row'] || changes['column'] || changes['rowIndex'] || changes['colId'])\n    ) {\n      if (this.isApplyingInputChanges) {\n        return;\n      }\n      this.isApplyingInputChanges = true;\n      try {\n        // Refresh component inputs when config or row context changes.\n        const inputs = this.getComponentInputs(this.componentConfig);\n        Object.keys(inputs).forEach(inputKey => {\n          if (this.componentRef?.instance && inputKey in this.componentRef.instance) {\n            (this.componentRef.instance as any)[inputKey] = inputs[inputKey];\n          }\n        });\n        // Avoid synchronous detectChanges inside ngOnChanges to prevent re-entrant CD loops.\n        this.componentRef.changeDetectorRef.markForCheck();\n        this.cdr.markForCheck();\n      } finally {\n        this.isApplyingInputChanges = false;\n      }\n    } else if (changes['componentConfig'] && this.componentConfig && !this.initialized) {\n      // Create component if it wasn't created yet\n      this.createComponent();\n      this.initialized = true;\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.componentRef) {\n      this.componentRef.destroy();\n      this.componentRef = undefined;\n    }\n  }\n\n  private createComponent(): void {\n    if (!this.componentConfig || !this.viewContainerRef) return;\n\n    try {\n      const componentClass = this.getComponentClass(this.componentConfig);\n      const inputs = this.getComponentInputs(this.componentConfig);\n      const outputs = this.getComponentOutputs(this.componentConfig);\n\n      // Clear any existing content\n      this.viewContainerRef.clear();\n\n      // Create the component\n      this.componentRef = this.viewContainerRef.createComponent(componentClass);\n      \n      // Set inputs immediately after creation, before any change detection\n      // Use Object.assign to set all inputs at once\n      if (this.componentRef?.instance && Object.keys(inputs).length > 0) {\n        Object.assign(this.componentRef.instance, inputs);\n      }\n\n      // Subscribe to outputs\n      Object.keys(outputs).forEach(outputKey => {\n        if (this.componentRef?.instance && outputKey in this.componentRef.instance) {\n          const output = (this.componentRef.instance as any)[outputKey];\n          if (output && typeof output.subscribe === 'function') {\n            output.subscribe((event: any) => {\n              const handler = outputs[outputKey];\n              if (handler) handler(event);\n            });\n          }\n        }\n      });\n\n      // Schedule checks without forcing nested synchronous cycles.\n      this.componentRef.changeDetectorRef.markForCheck();\n      this.cdr.markForCheck();\n    } catch (err) {\n      console.error('Failed to create component in table cell:', err);\n    }\n  }\n\n  private getComponentClass(value: Type<any> | ComponentRenderConfig): Type<any> {\n    if (typeof value === 'function') {\n      return value;\n    }\n    if (typeof value === 'object' && value.component) {\n      return value.component;\n    }\n    throw new Error('Invalid component value');\n  }\n\n  private getComponentInputs(value: Type<any> | ComponentRenderConfig): { [key: string]: any } {\n    if (typeof value === 'object' && value.inputs) {\n      return value.inputs;\n    }\n    return {};\n  }\n\n  private getComponentOutputs(value: Type<any> | ComponentRenderConfig): { [key: string]: (event: any) => void } {\n    if (typeof value === 'object' && value.outputs) {\n      return value.outputs;\n    }\n    return {};\n  }\n}\n\n","import { Component, ContentChild, ContentChildren, Input, QueryList, TemplateRef, EventEmitter, Output, ViewChild, ViewContainerRef, ComponentRef, Type, OnDestroy, ChangeDetectorRef, OnChanges, SimpleChanges, ChangeDetectionStrategy } from \"@angular/core\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport { DndDropEvent } from \"ngx-drag-drop\";\nimport { DynamicCellTemplateDirective, DynamicHeaderTemplateDirective } from \"./dynamic-cell.directive\";\nimport { ComponentRenderConfig } from \"./component-render-config.interface\";\n\nexport { ComponentRenderConfig } from \"./component-render-config.interface\";\n\nconst DYNAMIC_TABLE_REORDER_STYLES = `\n  .reorder-handle-cell { width: 44px; }\n  .reorder-handle-icon { display: inline-flex; align-items: center; justify-content: center; color: #6B7280; }\n  .cqa-row-draggable { cursor: grab; }\n  .cqa-row-draggable:active { cursor: grabbing; }\n  .cqa-row-draggable.dndDragging { opacity: 0.5; }\n  .cqa-row-draggable.dndDraggingSource { opacity: 0.3; }\n  tr.cqa-row-drop-above > td { box-shadow: inset 0 3px 0 0 #3F43EE; }\n  tr.cqa-row-drop-below > td { box-shadow: inset 0 -3px 0 0 #3F43EE; }\n`;\n\nexport interface DynamicTableColumn {\n  fieldId: string;\n  fieldName?: string;\n  fieldValue?: string;\n  /**\n   * Optional custom renderer invoked when no projected cell template is provided.\n   * Returns the string/number/HTML string/Component class/ComponentRenderConfig to display for the given row.\n   * HTML strings will be sanitized and rendered safely.\n   * Component classes will be dynamically instantiated.\n   */\n  render?: (row: any, column: DynamicTableColumn) => string | number | SafeHtml | Type<any> | ComponentRenderConfig;\n  isDefault?: boolean;\n  sortable?: boolean;\n  isShow?: boolean;\n  // New configuration fields to unify layout logic\n  weight?: number; // relative weight for dynamic share\n  fixedPx?: number; // fixed width in px (e.g. checkbox/actions)\n  /** Minimum width in px — applied to both the header cell and every body cell of this column. */\n  minWidth?: number;\n  responsive?: { xs?: boolean; sm?: boolean; md?: boolean }; // hide at specific breakpoints\n  align?: 'left' | 'center' | 'right';\n}\n\n@Component({\n  selector: \"app-dynamic-table\",\n  templateUrl: \"./dynamic-table.component.html\",\n  styles: [DYNAMIC_TABLE_REORDER_STYLES],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicTableComponent implements OnDestroy, OnChanges {\n  @Input() data: any[] = [];\n  @Input() columns: DynamicTableColumn[] = [];\n  /**\n   * Optional configuration object used when no custom empty template is provided.\n   */\n  @Input() emptyState?: { title?: string; description?: string; imageUrl?: string; actions?: any[] };\n  // Optional override; if omitted we compute from columns\n  @Input() gridTemplateColumns?: string;\n  // Breakpoint-aware sizing; provide from parent to avoid extra listeners\n  @Input() screenWidth?: number;\n  // Enable built-in select-all behavior for a 'checkbox' column\n  @Input() enableSelectAll: boolean = true;\n  // Optional predicate to control whether a row is selectable.\n  // If not provided, all rows are selectable (backward compatible behavior).\n  @Input() rowSelectable?: (row: any) => boolean;\n  // Enable simple client-side sorting when clicking sortable headers (no custom header)\n  @Input() enableLocalSort: boolean = true;\n  // Backward-compat loading flag (applies to both loaders if specific flags not provided)\n  \n  // New: controls the full table overlay loader\n  @Input() isTableLoading?: boolean;\n  // New: controls the inline data loader above the table\n  @Input() isTableDataLoading?: boolean;\n  // Emit sort changes so parent can perform server-side sort if desired\n  @Output() sortChange = new EventEmitter<{ fieldId: string; fieldValue?: string; direction: 'asc' | 'desc' | null }>();\n\n  // Optional getter for JSON path per cell. When provided, double-clicking a cell copies the path.\n  @Input() cellJsonPathGetter?: (rowIndex: number, colId: string, row: any) => string;\n\n  // Optional handler called when a JSON path is copied from a table cell\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: string }) => void;\n\n  /**\n   * When true, renders a drag-handle column as the leftmost cell and enables\n   * row drag-and-drop reordering via ngx-drag-drop. Off by default so existing\n   * consumers are unaffected.\n   */\n  @Input() enableRowReorder: boolean = false;\n  /** Tooltip for the drag handle icon. */\n  @Input() reorderHandleTooltip: string = 'Drag to reorder';\n  /**\n   * Emitted after a successful row drop. `orderedData` is a freshly allocated\n   * array reflecting the new order — parents should assign it back to `[data]`\n   * rather than relying on in-place mutation.\n   */\n  @Output() rowReorder = new EventEmitter<{ previousIndex: number; currentIndex: number; orderedData: any[] }>();\n\n  /** Index of the row the cursor is currently hovering during a reorder drag. */\n  dropHoverIndex: number | null = null;\n  /** Whether the cursor is in the top or bottom half of the hovered row. */\n  dropPosition: 'above' | 'below' | null = null;\n  /** The row currently being dragged — used to suppress the indicator on the source row. */\n  private draggedRow: any = null;\n\n  @ContentChildren(DynamicCellTemplateDirective) cellTemplates!: QueryList<DynamicCellTemplateDirective>;\n  @ContentChildren(DynamicHeaderTemplateDirective) headerTemplates!: QueryList<DynamicHeaderTemplateDirective>;\n  // Allow consumers to project a custom empty-state template using a template ref name\n  // e.g. <ng-template #emptyTableTpl>Custom empty UI</ng-template>\n  @ContentChild('emptyTableTpl', { read: TemplateRef }) emptyTableTpl?: TemplateRef<any>;\n\n  // Map to store component references for cleanup: rowIndex_colId -> ComponentRef\n  private componentRefs = new Map<string, ComponentRef<any>>();\n\n  // Caches for expensive getters\n  visibleColumns: DynamicTableColumn[] = [];\n  computedData: any[] = [];\n  computedGridTemplate: string = '';\n  computedColumnWidths: string[] = [];\n  /**\n   * Hard floor on the `<table>` width = sum of every visible column's minimum (fixed\n   * widths + dynamic columns' `minWidth`). With `table-layout: fixed; width: 100%;` set\n   * by consumers, `<col>` widths become advisory once the container is narrower than\n   * the column-width sum — the browser silently shrinks them. Pinning `min-width` on\n   * the table itself prevents that compaction; the consumer's `overflow-x: auto`\n   * wrapper then scrolls horizontally instead of squishing columns to zero width.\n   */\n  computedTableMinWidth = 0;\n\n  // Cache for sanitized HTML to avoid redundant innerHTML renders\n  private htmlCache = new Map<string, SafeHtml>();\n\n  constructor(\n    private sanitizer: DomSanitizer,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['columns'] || changes['screenWidth']) {\n      this.updateVisibleColumns();\n      this.updateGridTemplate();\n    }\n    if (changes['data'] || changes['columns'] || changes['enableLocalSort']) {\n      this.updateComputedData();\n    }\n  }\n\n  ngOnDestroy(): void {\n    // Clean up all dynamically created components\n    this.componentRefs.forEach(ref => ref.destroy());\n    this.componentRefs.clear();\n    this.htmlCache.clear();\n  }\n\n  private get isXs(): boolean {\n    const w = this.screenWidth || window.innerWidth;\n    return w <= 480;\n  }\n  private get isSm(): boolean {\n    const w = this.screenWidth || window.innerWidth;\n    return w <= 768;\n  }\n  private get isMd(): boolean {\n    const w = this.screenWidth || window.innerWidth;\n    return w <= 992;\n  }\n\n  private updateVisibleColumns(): void {\n    const responsiveFilter = (c: DynamicTableColumn) => {\n      const r = c?.responsive || {};\n      if (r.xs && this.isXs) return false;\n      if (r.sm && this.isSm) return false;\n      if (r.md && this.isMd) return false;\n      return true;\n    };\n    this.visibleColumns = (this.columns || []).filter(c => c.isShow !== false).filter(responsiveFilter);\n  }\n\n  getHeaderTemplate(colId: string): TemplateRef<any> | null {\n    const tpl = this.headerTemplates?.find(t => t.name === colId);\n    return tpl ? tpl.template : null;\n  }\n\n  getCellTemplate(colId: string): TemplateRef<any> | null {\n    const tpl = this.cellTemplates?.find(t => t.name === colId);\n    return tpl ? tpl.template : null;\n  }\n\n  getRenderedValue(row: any, column: DynamicTableColumn): any {\n    if (column?.render && typeof column.render === 'function') {\n      try {\n        return column.render(row, column);\n      } catch (err) {\n        console.warn('DynamicTable render function threw an error for column', column?.fieldId, err);\n        return '';\n      }\n    }\n    return this.getCellValue(row, column?.fieldValue);\n  }\n\n  /**\n   * Checks if the rendered value is a component class or component config\n   */\n  isComponent(value: any): boolean {\n    if (!value) return false;\n    // Check if it's a component class (has @Component decorator metadata)\n    if (typeof value === 'function' && value.prototype) {\n      return true;\n    }\n    // Check if it's a ComponentRenderConfig\n    if (typeof value === 'object' && value.component && typeof value.component === 'function') {\n      return true;\n    }\n    return false;\n  }\n\n  /**\n   * Gets the component class from a render value (could be class or config)\n   */\n  getComponentClass(value: Type<any> | ComponentRenderConfig): Type<any> {\n    if (typeof value === 'function') {\n      return value;\n    }\n    if (typeof value === 'object' && value.component) {\n      return value.component;\n    }\n    throw new Error('Invalid component value');\n  }\n\n  /**\n   * Gets component inputs from a render value\n   */\n  getComponentInputs(value: Type<any> | ComponentRenderConfig): { [key: string]: any } {\n    if (typeof value === 'object' && value.inputs) {\n      return value.inputs;\n    }\n    return {};\n  }\n\n  /**\n   * Gets component outputs from a render value\n   */\n  getComponentOutputs(value: Type<any> | ComponentRenderConfig): { [key: string]: (event: any) => void } {\n    if (typeof value === 'object' && value.outputs) {\n      return value.outputs;\n    }\n    return {};\n  }\n\n  /**\n   * Initializes a component in a ViewContainerRef (called from template)\n   */\n  initComponent(\n    vcr: ViewContainerRef,\n    renderedValue: Type<any> | ComponentRenderConfig,\n    row: any,\n    column: DynamicTableColumn,\n    rowIndex: number,\n    colId: string\n  ): boolean {\n    if (!vcr) return false;\n    \n    const key = `${rowIndex}_${colId}`;\n    \n    // If component already exists for this cell, don't recreate\n    if (this.componentRefs.has(key)) {\n      return true;\n    }\n\n    try {\n      const componentClass = this.getComponentClass(renderedValue);\n      const inputs = this.getComponentInputs(renderedValue);\n      const outputs = this.getComponentOutputs(renderedValue);\n\n      // Create the component\n      const componentRef = vcr.createComponent(componentClass);\n      \n      // Set inputs\n      Object.keys(inputs).forEach(inputKey => {\n        if (componentRef.instance && inputKey in componentRef.instance) {\n          (componentRef.instance as any)[inputKey] = inputs[inputKey];\n        }\n      });\n\n      // Subscribe to outputs\n      Object.keys(outputs).forEach(outputKey => {\n        if (componentRef.instance && outputKey in componentRef.instance) {\n          const output = (componentRef.instance as any)[outputKey];\n          if (output && typeof output.subscribe === 'function') {\n            output.subscribe((event: any) => {\n              const handler = outputs[outputKey];\n              if (handler) handler(event);\n            });\n          } else if (output && typeof output.emit === 'function') {\n            // For EventEmitter, wrap the emit to call the handler\n            const originalEmit = output.emit.bind(output);\n            (componentRef.instance as any)[outputKey] = {\n              emit: (event: any) => {\n                originalEmit(event);\n                const handler = outputs[outputKey];\n                if (handler) handler(event);\n              },\n              subscribe: output.subscribe.bind(output)\n            };\n          }\n        }\n      });\n\n      // Mark for change detection\n      componentRef.changeDetectorRef.markForCheck();\n      \n      // Store reference for cleanup\n      this.componentRefs.set(key, componentRef);\n      return true;\n    } catch (err) {\n      console.error('Failed to create component in table cell:', err);\n      return false;\n    }\n  }\n\n  /**\n   * Checks if the rendered value is an HTML string that should be rendered with innerHTML\n   */\n  isHtmlString(value: any): boolean {\n    if (typeof value !== 'string') return false;\n    // Faster check: if it contains an opening tag pattern near the start\n    // or just has any brackets. Wrapping in a regex with [\\s\\S]* is very slow.\n    return value.includes('<') && /<[a-z/][^>]*>/i.test(value);\n  }\n\n  /**\n   * Sanitizes HTML string for safe rendering with caching\n   */\n  getSanitizedHtml(value: string): SafeHtml {\n    let cached = this.htmlCache.get(value);\n    if (!cached) {\n      cached = this.sanitizer.bypassSecurityTrustHtml(value);\n      this.htmlCache.set(value, cached);\n      \n      // Simple cache eviction\n      if (this.htmlCache.size > 1000) {\n        const firstKey = this.htmlCache.keys().next().value;\n        if (firstKey !== undefined) {\n          this.htmlCache.delete(firstKey);\n        }\n      }\n    }\n    return cached;\n  }\n\n  getCellValue(row: any, path?: string): any {\n    if (!row || !path) return \"\";\n    const parts = path.split(\".\");\n    let current = row;\n    for (const part of parts) {\n      if (current == null) return \"\";\n      current = current[part];\n    }\n    return current ?? \"\";\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  onRowDragStart(row: any): void {\n    if (!this.enableRowReorder) return;\n    this.draggedRow = row;\n  }\n\n  onRowDragEnd(): void {\n    this.draggedRow = null;\n    this.clearDropIndicator();\n  }\n\n  /**\n   * Fires continuously while a drag is over a row. Computes whether the cursor\n   * is in the top or bottom half of the row and updates the indicator state.\n   * Suppresses the indicator on the dragged row itself.\n   */\n  onRowDragOver(event: Event, rowIndex: number): void {\n    if (!this.enableRowReorder) return;\n    const drag = event as DragEvent;\n    drag.preventDefault();\n    const row = this.computedData?.[rowIndex];\n    if (this.draggedRow && row === this.draggedRow) {\n      if (this.dropHoverIndex !== null || this.dropPosition !== null) {\n        this.dropHoverIndex = null;\n        this.dropPosition = null;\n        this.cdr.markForCheck();\n      }\n      return;\n    }\n    const el = drag.currentTarget as HTMLElement | null;\n    if (!el) return;\n    const rect = el.getBoundingClientRect();\n    const midY = rect.top + rect.height / 2;\n    const pos: 'above' | 'below' = drag.clientY < midY ? 'above' : 'below';\n    if (this.dropHoverIndex !== rowIndex || this.dropPosition !== pos) {\n      this.dropHoverIndex = rowIndex;\n      this.dropPosition = pos;\n      this.cdr.markForCheck();\n    }\n  }\n\n  /** Clears the indicator when the cursor leaves the tbody entirely. */\n  onTbodyDragLeave(event: Event): void {\n    if (!this.enableRowReorder) return;\n    const drag = event as DragEvent;\n    const tbody = drag.currentTarget as HTMLElement | null;\n    const related = drag.relatedTarget as Node | null;\n    if (!tbody || !related || !tbody.contains(related)) {\n      this.clearDropIndicator();\n    }\n  }\n\n  private clearDropIndicator(): void {\n    if (this.dropHoverIndex !== null || this.dropPosition !== null) {\n      this.dropHoverIndex = null;\n      this.dropPosition = null;\n      this.cdr.markForCheck();\n    }\n  }\n\n  /**\n   * Handles a row drop from ngx-drag-drop. Prefers the tracked dragover position\n   * (which the user can see live via the insertion line) over `event.index` when\n   * computing the final insert slot. Emits a fresh array — does not mutate `data`.\n   */\n  onRowDndDrop(event: DndDropEvent): void {\n    if (!this.enableRowReorder) return;\n    const dragged = event?.data;\n    if (dragged == null) {\n      this.clearDropIndicator();\n      return;\n    }\n    const source = this.computedData || [];\n    let previousIndex = source.indexOf(dragged);\n    if (previousIndex < 0 && dragged && dragged.id != null) {\n      previousIndex = source.findIndex(r => r && r.id === dragged.id);\n    }\n    if (previousIndex < 0) {\n      this.clearDropIndicator();\n      return;\n    }\n\n    // Prefer the indicator position (what the user just saw) over event.index.\n    let insertIndex: number;\n    if (this.dropHoverIndex != null && this.dropPosition) {\n      insertIndex = this.dropPosition === 'above' ? this.dropHoverIndex : this.dropHoverIndex + 1;\n    } else if (typeof event.index === 'number') {\n      insertIndex = event.index;\n    } else {\n      insertIndex = source.length;\n    }\n\n    const next = [...source];\n    next.splice(previousIndex, 1);\n    // Removing the source above the target shifts later items up by one.\n    if (previousIndex < insertIndex) insertIndex -= 1;\n    if (insertIndex < 0) insertIndex = 0;\n    if (insertIndex > next.length) insertIndex = next.length;\n\n    this.clearDropIndicator();\n    this.draggedRow = null;\n\n    if (insertIndex === previousIndex) return;\n    next.splice(insertIndex, 0, dragged);\n    this.rowReorder.emit({ previousIndex, currentIndex: insertIndex, orderedData: next });\n  }\n\n  copyCellJsonPath(path: string, event: Event, source: string = 'dbQueryResponse'): void {\n    if (!path) return;\n    event.preventDefault();\n    event.stopPropagation();\n    navigator.clipboard.writeText(path).then(() => {\n      // Call the handler if provided\n      if (this.onJsonPathCopiedHandler) {\n        try {\n          this.onJsonPathCopiedHandler({ path, source });\n        } catch (handlerError) {\n          console.error('Error in onJsonPathCopiedHandler:', handlerError);\n        }\n      }\n    }).catch(err => {\n      console.error('Failed to copy jsonPath:', err);\n      // Still call the handler even on failure (similar to api-step pattern)\n      if (this.onJsonPathCopiedHandler) {\n        try {\n          this.onJsonPathCopiedHandler({ path, source });\n        } catch (handlerError) {\n          console.error('Error in onJsonPathCopiedHandler:', handlerError);\n        }\n      }\n    });\n  }\n\n  // Compute grid-template-columns string from column config\n  private updateGridTemplate(): void {\n    const cols = this.visibleColumns;\n    if (!cols?.length) {\n      this.computedGridTemplate = '';\n      this.computedColumnWidths = [];\n      return;\n    }\n    \n    const fixedPx = cols.reduce((sum, c) => sum + (c.fixedPx || 0), 0);\n    const dynamicCols = cols.filter(c => !c.fixedPx);\n    const totalWeight = dynamicCols.reduce((sum, c) => sum + (c.weight || 1), 0) || 1;\n\n    // Floor on the table itself = every column's minimum width contribution. Fixed\n    // columns contribute `fixedPx`; dynamic columns contribute `minWidth` (or 0 when\n    // unset). The template binds this via `[style.min-width.px]` on the <table> so\n    // narrow containers force horizontal scroll instead of squishing columns to 0.\n    this.computedTableMinWidth = cols.reduce(\n      (sum, c) => sum + (c.fixedPx && c.fixedPx > 0 ? c.fixedPx : (c.minWidth || 0)),\n      0,\n    );\n\n    this.computedColumnWidths = cols.map(c => {\n      if (c.fixedPx && c.fixedPx > 0) {\n        // Fixed-width columns still respect minWidth in the (rare) case the consumer\n        // configured both — `max(fixed, min)` picks whichever is larger.\n        return c.minWidth && c.minWidth > c.fixedPx\n          ? `max(${c.fixedPx}px, ${c.minWidth}px)`\n          : `${c.fixedPx}px`;\n      }\n      const share = (c.weight || 1) / totalWeight;\n      const dynamicWidth = `calc((100% - ${fixedPx}px) * ${share.toFixed(4)})`;\n      // Dynamic-share columns can collapse to ~0 when the table is narrower than\n      // (sum of fixed widths) + the share they'd compute to. Using CSS `max()` floors\n      // the column at `minWidth` so it grows naturally as the table widens but never\n      // shrinks below the configured pixel minimum. With `table-layout: fixed`, the\n      // <col> width is authoritative — without max() here the cell-level `min-width`\n      // we set on <th>/<td> is ignored and columns visually disappear at narrow widths.\n      return c.minWidth && c.minWidth > 0\n        ? `max(${c.minWidth}px, ${dynamicWidth})`\n        : dynamicWidth;\n    });\n\n    if (this.gridTemplateColumns) {\n      this.computedGridTemplate = this.gridTemplateColumns;\n    } else {\n      this.computedGridTemplate = this.computedColumnWidths.join(' ');\n    }\n  }\n\n  // Selection helpers\n  isRowSelectable(row: any): boolean {\n    if (!row) return false;\n    if (typeof this.rowSelectable !== 'function') return true;\n    try {\n      return !!this.rowSelectable(row);\n    } catch {\n      return true;\n    }\n  }\n\n  get allSelected(): boolean {\n    const rows = (this.data || []).filter((r) => this.isRowSelectable(r));\n    if (!rows.length) return false;\n    return rows.every(r => !!r?.isSelected);\n  }\n\n  get someSelected(): boolean {\n    const rows = (this.data || []).filter((r) => this.isRowSelectable(r));\n    if (!rows.length) return false;\n    const anySelected = rows.some(r => !!r?.isSelected);\n    return anySelected && !this.allSelected;\n  }\n\n  onSelectAllChange(event: Event): void {\n    const target = event.target as HTMLInputElement;\n    this.toggleSelectAll(target.checked);\n  }\n\n  onRowSelectChange(event: Event, row: any): void {\n    if (!this.isRowSelectable(row)) {\n      row.isSelected = false;\n      return;\n    }\n    const target = event.target as HTMLInputElement;\n    row.isSelected = target.checked;\n  }\n\n  toggleSelectAll(checked: boolean): void {\n    const rows = this.data || [];\n    for (const row of rows) {\n      if (row) {\n        row.isSelected = this.isRowSelectable(row) ? checked : false;\n      }\n    }\n  }\n\n  // ===== Sorting support =====\n  private _sortActive?: string;\n  private _sortDirection: 'asc' | 'desc' | null = null;\n\n  private updateComputedData(): void {\n    const source = this.data || [];\n    if (!this.enableLocalSort || !this._sortActive || !this._sortDirection) {\n      this.computedData = source;\n      return;\n    }\n    const col = this.visibleColumns.find(c => c.fieldId === this._sortActive);\n    if (!col || !col.fieldValue) {\n      this.computedData = source;\n      return;\n    }\n    const dir = this._sortDirection === 'asc' ? 1 : -1;\n    const fieldPath = col.fieldValue;\n    const out = [...source];\n    out.sort((a, b) => dir * this.compareValues(this.getCellValue(a, fieldPath), this.getCellValue(b, fieldPath)));\n    this.computedData = out;\n  }\n\n  // Computed loading flags to support backward compatibility\n  get showTableLoading(): boolean {\n    return this.isTableLoading ?? false;\n  }\n\n  get showTableDataLoading(): boolean {\n    return this.isTableDataLoading ?? false;\n  }\n\n  // True when table has no data and is not currently loading — used to show an empty state\n  get isEmpty(): boolean {\n    const anyLoading = this.showTableLoading || this.showTableDataLoading;\n    return !anyLoading && (!(this.data && this.data.length) || this.data.length === 0);\n  }\n\n  isSortedAsc(colId: string): boolean {\n    return this._sortActive === colId && this._sortDirection === 'asc';\n  }\n\n  isSortedDesc(colId: string): boolean {\n    return this._sortActive === colId && this._sortDirection === 'desc';\n  }\n\n  toggleSort(col: DynamicTableColumn): void {\n    if (!col?.sortable) return;\n    const colId = col.fieldId;\n    if (this._sortActive !== colId) {\n      this._sortActive = colId;\n      this._sortDirection = 'asc';\n    } else {\n      // cycle asc -> desc -> null -> asc\n      if (this._sortDirection === 'asc') this._sortDirection = 'desc';\n      else if (this._sortDirection === 'desc') this._sortDirection = null;\n      else this._sortDirection = 'asc';\n    }\n    this.updateComputedData();\n    this.sortChange.emit({ fieldId: this._sortActive, fieldValue: col.fieldValue, direction: this._sortDirection });\n  }\n\n  private compareValues(a: any, b: any): number {\n    if (a == null && b == null) return 0;\n    if (a == null) return 1; // nulls last in asc (handled by dir multiplier)\n    if (b == null) return -1;\n\n    const numA = typeof a === 'number' ? a : Number(a);\n    const numB = typeof b === 'number' ? b : Number(b);\n    const aIsNum = !isNaN(numA) && a !== '' && a !== null && a !== false;\n    const bIsNum = !isNaN(numB) && b !== '' && b !== null && b !== false;\n    if (aIsNum && bIsNum) {\n      if (numA < numB) return -1;\n      if (numA > numB) return 1;\n      return 0;\n    }\n\n    // Date detection: attempt parse when both values are strings and parseable\n    if (typeof a === 'string' && typeof b === 'string') {\n      const tsA = Date.parse(a);\n      const tsB = Date.parse(b);\n      if (!isNaN(tsA) && !isNaN(tsB)) {\n        if (tsA < tsB) return -1;\n        if (tsA > tsB) return 1;\n        return 0;\n      }\n      // localeCompare, case-insensitive\n      return a.localeCompare(b, undefined, { sensitivity: 'base', numeric: true });\n    }\n\n    // Fallback to string comparison\n    const sa = String(a);\n    const sb = String(b);\n    return sa.localeCompare(sb, undefined, { sensitivity: 'base', numeric: true });\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-relative\" [class.cqa-max-h-[100px]]=\"showTableLoading\">\n    <cqa-full-table-loader *ngIf=\"showTableLoading\"></cqa-full-table-loader>\n    <cqa-table-data-loader *ngIf=\"showTableDataLoading\"></cqa-table-data-loader>\n    <table class=\"table-inner cqa-w-full cqa-border cqa-border-solid cqa-border-gray-200\"\n           [class.is-loading]=\"true\"\n           [style.min-width.px]=\"computedTableMinWidth || null\"\n           *ngIf=\"!showTableLoading\">\n      <colgroup>\n        <col *ngIf=\"enableRowReorder\" style=\"width: 44px\" />\n        <ng-container *ngFor=\"let width of computedColumnWidths; trackBy: trackByIndex\">\n          <col [style.width]=\"width\" />\n        </ng-container>\n      </colgroup>\n\n      <thead *ngIf=\"data?.length\">\n        <tr class=\"table-header cqa-items-center\">\n          <th\n            *ngIf=\"enableRowReorder\"\n            class=\"header-cell reorder-handle-cell cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-bg-[#eff0f7] cqa-text-center\"\n            aria-label=\"Reorder\">\n            <span class=\"cqa-sr-only\">Reorder</span>\n          </th>\n          <ng-container *ngFor=\"let col of visibleColumns; trackBy: trackByIndex\">\n            <th\n              class=\"header-cell cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-bg-[#eff0f7]\"\n              [style.min-width.px]=\"col.minWidth\"\n              [ngClass]=\"[\n                col.fieldId + '-cell',\n                col.align === 'center' ? 'cqa-text-center' : col.align === 'right' ? 'cqa-text-right' : 'cqa-text-left'\n              ]\">\n              <!-- Built-in select-all for checkbox column when enabled and no custom header template -->\n              <ng-container\n                *ngIf=\"col.fieldId === 'checkbox' && enableSelectAll && !getHeaderTemplate(col.fieldId); else headerTplOrDefault\">\n                <div class=\"custom-checkbox\">\n                  <input type=\"checkbox\" id=\"checkbox\" aria-label=\"Select all rows\" [checked]=\"allSelected\"\n                  [indeterminate]=\"someSelected\" (change)=\"onSelectAllChange($event)\" class=\"hidden-checkbox\" />\n                  <label for=\"checkbox\" class=\"custom-checkbox-label\"></label>\n                </div>\n              </ng-container>\n              <ng-template #headerTplOrDefault>\n                <ng-container *ngIf=\"getHeaderTemplate(col.fieldId) as headerTpl; else defaultHeader\">\n                  <ng-container *ngTemplateOutlet=\"headerTpl\"></ng-container>\n                </ng-container>\n                <ng-template #defaultHeader>\n                  <ng-container *ngIf=\"col.sortable; else plainHeader\">\n                    <button type=\"button\" class=\"header-text cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-0\"\n                      (click)=\"toggleSort(col)\" [attr.aria-label]=\"'Sort by ' + (col.fieldName || col.fieldId)\">\n                      <span class=\"cqa-text-[12.3px] cqa-leading-[17.5px] cqa-text-[#0A0A0A] cqa-font-medium\">{{\n                        col.fieldName }}</span>\n                      <span *ngIf=\"isSortedAsc(col.fieldId)\">▲</span>\n                      <span *ngIf=\"isSortedDesc(col.fieldId)\">▼</span>\n                    </button>\n                  </ng-container>\n                  <ng-template #plainHeader>\n                    <span class=\"header-text\">{{ col.fieldName }}</span>\n                  </ng-template>\n                </ng-template>\n              </ng-template>\n            </th>\n          </ng-container>\n        </tr>\n      </thead>\n\n      <tbody class=\"table-body cqa-w-full\"\n        [dndDropzone]=\"['cqa-row']\"\n        [dndDisableIf]=\"!enableRowReorder\"\n        dndEffectAllowed=\"move\"\n        (dragleave)=\"onTbodyDragLeave($event)\"\n        (dndDrop)=\"onRowDndDrop($event)\">\n        <tr class=\"table-row cqa-bg-surface-default hover:cqa-bg-surface-hover\"\n          *ngFor=\"let row of computedData; let rowIndex = index; trackBy: trackByIndex\"\n          [class.selected]=\"row?.isSelected\"\n          [class.cqa-row-draggable]=\"enableRowReorder\"\n          [class.cqa-row-drop-above]=\"dropHoverIndex === rowIndex && dropPosition === 'above'\"\n          [class.cqa-row-drop-below]=\"dropHoverIndex === rowIndex && dropPosition === 'below'\"\n          [dndDraggable]=\"row\"\n          [dndDisableIf]=\"!enableRowReorder\"\n          dndEffectAllowed=\"move\"\n          dndType=\"cqa-row\"\n          (dndStart)=\"onRowDragStart(row)\"\n          (dndEnd)=\"onRowDragEnd()\"\n          (dragover)=\"onRowDragOver($event, rowIndex)\">\n          <td *ngIf=\"enableRowReorder\" class=\"cell reorder-handle-cell cqa-px-[10.5px] cqa-py-[11px] cqa-text-center\" [attr.title]=\"reorderHandleTooltip\">\n            <span class=\"reorder-handle-icon\" aria-hidden=\"true\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <circle cx=\"6\" cy=\"3\" r=\"1.25\" fill=\"currentColor\"></circle>\n                <circle cx=\"10\" cy=\"3\" r=\"1.25\" fill=\"currentColor\"></circle>\n                <circle cx=\"6\" cy=\"8\" r=\"1.25\" fill=\"currentColor\"></circle>\n                <circle cx=\"10\" cy=\"8\" r=\"1.25\" fill=\"currentColor\"></circle>\n                <circle cx=\"6\" cy=\"13\" r=\"1.25\" fill=\"currentColor\"></circle>\n                <circle cx=\"10\" cy=\"13\" r=\"1.25\" fill=\"currentColor\"></circle>\n              </svg>\n            </span>\n          </td>\n          <ng-container *ngFor=\"let col of visibleColumns; trackBy: trackByIndex\">\n            <td class=\"cell cqa-px-[10.5px] cqa-py-[11px]\"\n              [style.min-width.px]=\"col.minWidth\"\n              [ngClass]=\"[\n                col.fieldId + '-cell',\n                col.align === 'center' ? 'cqa-text-center' : col.align === 'right' ? 'cqa-text-right' : 'cqa-text-left',\n                cellJsonPathGetter && col.fieldId !== 'checkbox' && col.fieldId !== 'actions' ? 'cqa-cursor-pointer' : ''\n              ]\"\n              (dblclick)=\"cellJsonPathGetter && col?.fieldId !== 'checkbox' && col?.fieldId !== 'actions' && copyCellJsonPath(cellJsonPathGetter(rowIndex, col?.fieldId, row), $event, 'dbQueryResponse')\">\n              <!-- Built-in checkbox cell when no custom template is provided -->\n              <ng-container *ngIf=\"col.fieldId === 'checkbox' && !getCellTemplate(col.fieldId); else regularCell\">\n                <div class=\"custom-checkbox\" [ngClass]=\"[\n                  col.align === 'center' ? 'cqa-flex cqa-justify-center' : col.align === 'right' ? 'cqa-flex cqa-justify-end' : ''\n                ]\">\n                  <input\n                    type=\"checkbox\"\n                    class=\"hidden-checkbox\"\n                    [attr.id]=\"'row-checkbox-' + rowIndex\"\n                    aria-label=\"Select row\"\n                    [checked]=\"row?.isSelected\"\n                    [disabled]=\"!isRowSelectable(row)\"\n                    (change)=\"onRowSelectChange($event, row)\" />\n                  <label\n                    class=\"custom-checkbox-label\"\n                    [style.opacity]=\"!isRowSelectable(row) ? '0.45' : null\"\n                    [style.cursor]=\"!isRowSelectable(row) ? 'not-allowed' : null\"\n                    [style.pointer-events]=\"!isRowSelectable(row) ? 'none' : null\"\n                    [attr.for]=\"'row-checkbox-' + rowIndex\">\n                  </label>\n                </div>\n              </ng-container>\n              <ng-template #regularCell>\n                <ng-container *ngIf=\"getCellTemplate(col.fieldId) as cellTpl; else defaultCell\">\n                  <ng-container\n                    *ngTemplateOutlet=\"cellTpl; context: {$implicit: row, row: row, value: getCellValue(row, col.fieldValue)}\"></ng-container>\n                </ng-container>\n                <ng-template #defaultCell>\n                  <ng-container *ngIf=\"getRenderedValue(row, col) as renderedValue\">\n                    <ng-container *ngIf=\"isComponent(renderedValue); else nonComponentCell\">\n                      <ng-container \n                        cqaCellContainer \n                        #cellContainer=\"cqaCellContainer\"\n                        [componentConfig]=\"renderedValue\"\n                        [row]=\"row\"\n                        [column]=\"col\"\n                        [rowIndex]=\"rowIndex\"\n                        [colId]=\"col.fieldId\">\n                      </ng-container>\n                    </ng-container>\n                    <ng-template #nonComponentCell>\n                      <ng-container *ngIf=\"isHtmlString(renderedValue); else textCell\">\n                        <div class=\"cqa-text-xs cqa-leading-[17px]\" [innerHTML]=\"getSanitizedHtml(renderedValue)\" [ngClass]=\"[\n                        col.align === 'center' ? 'cqa-flex cqa-justify-center' : col.align === 'right' ? 'cqa-flex cqa-justify-end' : ''\n                      ]\"></div>\n                      </ng-container>\n                      <ng-template #textCell>\n                        <span class=\"cqa-text-xs cqa-text-[#374151]\" [ngClass]=\"[\n                        col.align === 'center' ? 'cqa-flex cqa-justify-center' : col.align === 'right' ? 'cqa-flex cqa-justify-end' : ''\n                      ]\">{{ renderedValue }}</span>\n                      </ng-template>\n                    </ng-template>\n                  </ng-container>\n                </ng-template>\n              </ng-template>\n            </td>\n          </ng-container>\n        </tr>\n      </tbody>\n    </table>\n  </div>\n</div>","import { Component, EventEmitter, Input, Output, HostListener, ViewChild, ElementRef } from '@angular/core';\n\nexport interface PaginationChange {\n  pageIndex: number;\n  pageSize: number;\n}\n\n@Component({\n  selector: 'cqa-pagination',\n  templateUrl: './pagination.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class PaginationComponent {\n  @Input() totalElements: number = 0;\n  @Input() totalPages?: number | null;\n  @Input() pageIndex: number = 0; // 0-based\n  @Input() pageSize: number = 10;\n  @Input() pageItemCount: number = 0; // number of items currently rendered on this page\n  @Input() pageSizeOptions: number[] = [10, 20, 40, 60, 80];\n  @Input() pageSizeMenuDirection: 'auto' | 'up' | 'down' = 'auto';\n\n  @Output() pageIndexChange = new EventEmitter<number>();\n  @Output() pageSizeChange = new EventEmitter<number>();\n  @Output() paginate = new EventEmitter<PaginationChange>();\n\n  // Local UI state for custom page-size dropdown\n  pageSizeOpen = false;\n  pageSizeMenuPosition: 'up' | 'down' = 'down';\n\n  @ViewChild('pageSizeDropdownContainer', { static: false }) pageSizeDropdownContainer!: ElementRef;\n\n  pagesOption = {\n    placeholder: 'Choose page',\n    disabled: false,\n    multiple: false,\n    searchable: false,\n    options: [\n      { id: 1, name: '10' },\n      { id: 2, name: '20' },\n      { id: 3, name: '30' },\n      { id: 4, name: '40' },\n    ],\n  }\n  \n\n  get computedTotalPages(): number {\n    if (this.totalPages != null && this.totalPages > 0) {\n      return this.totalPages;\n    }\n    if (this.pageSize > 0 && this.totalElements >= 0) {\n      return Math.max(1, Math.ceil(this.totalElements / this.pageSize));\n    }\n    return 0;\n  }\n\n  getStartItem(): number {\n    if (!this.totalElements) {\n      return 0;\n    }\n    return this.pageIndex * this.pageSize + 1;\n  }\n\n  getEndItem(): number {\n    const end = this.getStartItem() + this.pageItemCount - 1;\n    if (end < 0) {\n      return 0;\n    }\n    return Math.min(end, this.totalElements);\n  }\n\n  get showRangeAndControls(): boolean {\n    return this.totalElements > this.pageSize;\n  }\n\n  togglePageSizeMenu(): void {\n    this.pageSizeOpen = !this.pageSizeOpen;\n    if (this.pageSizeOpen) {\n      this.updatePageSizeMenuPosition();\n    }\n  }\n\n  private updatePageSizeMenuPosition(): void {\n    if (this.pageSizeMenuDirection === 'up' || this.pageSizeMenuDirection === 'down') {\n      this.pageSizeMenuPosition = this.pageSizeMenuDirection;\n      return;\n    }\n\n    if (!this.pageSizeDropdownContainer?.nativeElement) {\n      this.pageSizeMenuPosition = 'down';\n      return;\n    }\n\n    const triggerRect = this.pageSizeDropdownContainer.nativeElement.getBoundingClientRect();\n    const viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n    const estimatedOptionHeight = 32;\n    const estimatedMenuHeight = Math.min(170, this.pageSizeOptions.length * estimatedOptionHeight + 10);\n    const gap = 8;\n    const requiredSpace = estimatedMenuHeight + gap;\n    const spaceBelow = viewportHeight - triggerRect.bottom;\n\n    this.pageSizeMenuPosition = spaceBelow >= requiredSpace ? 'down' : 'up';\n  }\n\n  @HostListener('window:resize')\n  onWindowResize(): void {\n    if (this.pageSizeOpen) {\n      this.updatePageSizeMenuPosition();\n    }\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    if (this.pageSizeOpen) {\n      if (this.pageSizeDropdownContainer?.nativeElement) {\n        const clickedInside = this.pageSizeDropdownContainer.nativeElement.contains(event.target as Node);\n        if (!clickedInside) {\n          this.pageSizeOpen = false;\n        }\n      } else {\n        this.pageSizeOpen = false;\n      }\n    }\n  }\n\n  selectPageSize(size: number): void {\n    if (this.pageSize !== size) {\n      this.pageSize = size;\n      this.onPageSizeChange();\n    }\n    this.pageSizeOpen = false;\n  }\n\n  onPageSizeChange(): void {\n    this.pageIndex = 0;\n    this.pageSizeChange.emit(this.pageSize);\n    this.pageIndexChange.emit(this.pageIndex);\n    this.paginate.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n  }\n\n  goToPage(index: number): void {\n    const lastIndex = Math.max(0, this.computedTotalPages - 1);\n    const next = Math.max(0, Math.min(index, lastIndex));\n    if (next === this.pageIndex) {\n      return;\n    }\n    this.pageIndex = next;\n    this.pageIndexChange.emit(this.pageIndex);\n    this.paginate.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n  }\n}\n\n\n","<!-- Bottom Pagination -->\n<div class=\"cqa-ui-root\" >\n  <div class=\"table-footer-pagination cqa-text-grey-300 cqa-text-[12.3px] cqa-leading-[17.5px] cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-flex-wrap cqa-bg-surface-default cqa-px-[21px] cqa-py-[15px]\" *ngIf=\"pageItemCount && totalElements\">\n    <div class=\"pagination-info cqa-flex cqa-items-center cqa-gap-[7px] cqa-relative\">\n      <span class=\"rows-label\">Rows per page</span>\n      <div class=\"cqa-relative\" #pageSizeDropdownContainer>\n        <!-- Custom Select Trigger -->\n        <button\n          type=\"button\"\n          class=\"cqa-inline-flex cqa-items-center cqa-gap-[19px] cqa-bg-white cqa-text-black-100 cqa-rounded-[5px] cqa-px-[11.5px] cqa-py-[6.75px]\"\n          (click)=\"togglePageSizeMenu()\"\n          [attr.aria-expanded]=\"pageSizeOpen\"\n          aria-haspopup=\"listbox\"\n        >\n          {{ pageSize }}\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.5\"><path d=\"M3.5 5.25L7 8.75L10.5 5.25\" stroke=\"#717182\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g></svg>\n        </button>\n        <!-- Dropdown Menu -->\n        <div\n          *ngIf=\"pageSizeOpen\"\n          class=\"cqa-absolute cqa-z-[100] cqa-left-0 cqa-w-[75px] cqa-max-h-[170px] cqa-overflow-auto cqa-rounded-lg cqa-border cqa-border-[#E5E7EB] cqa-bg-white cqa-shadow-[0px_4px_6px_-1px_rgba(0,0,0,0.1)] cqa-p-[5px]\"\n          [style.top]=\"pageSizeMenuPosition === 'down' ? 'calc(100% + 8px)' : null\"\n          [style.bottom]=\"pageSizeMenuPosition === 'up' ? 'calc(100% + 8px)' : null\"\n          role=\"listbox\"\n          [attr.aria-activedescendant]=\"'pagesize-' + pageSize\"\n        >\n          <button\n            *ngFor=\"let size of pageSizeOptions\"\n            type=\"button\"\n            class=\"cqa-w-full cqa-px-2 cqa-py-[6px] hover:cqa-bg-[#F7F8FA] cqa-text-left cqa-rounded-md cqa-text-black-100\"\n            [attr.id]=\"'pagesize-' + size\"\n            role=\"option\"\n            [attr.aria-selected]=\"pageSize === size\"\n            (click)=\"selectPageSize(size)\"\n          >\n            {{ size }}\n          </button>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"pagination-right cqa-flex cqa-items-center cqa-gap-[21px]\" *ngIf=\"showRangeAndControls\">\n      <div class=\"pagination-range\">\n        {{ getStartItem() }}&ndash;{{ getEndItem() }} of {{ totalElements }}\n      </div>\n      <div class=\"pagination-controls cqa-flex cqa-items-stretch cqa-gap-[3.5px]\">\n        <button class=\"pagination-btn cqa-w-[28px] cqa-h-[28px] cqa-min-w-[28px] cqa-rounded-[5px] cqa-border cqa-border-[#E5E7EB] cqa-bg-[#F7F8FA] cqa-flex cqa-items-center cqa-justify-center\" [disabled]=\"pageIndex === 0\" (click)=\"goToPage(pageIndex - 1)\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.75 10.5L5.25 7L8.75 3.5\" stroke=\"#838384\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </button>\n        <button class=\"pagination-btn cqa-w-[28px] cqa-h-[28px] cqa-min-w-[28px] cqa-rounded-[5px] cqa-border cqa-border-[#E5E7EB] cqa-bg-[#F7F8FA] cqa-flex cqa-items-center cqa-justify-center\" [disabled]=\"pageIndex >= computedTotalPages - 1\" (click)=\"goToPage(pageIndex + 1)\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.25 10.5L8.75 7L5.25 3.5\" stroke=\"#838384\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </button>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface ActionMenuRow {\n  id: number | string;\n  [key: string]: any;\n}\n\nexport interface CqaActionItem {\n  /** Unique identifier for the action, e.g. 'view', 'edit', 'delete', 'duplicate' */\n  id: string;\n  /** Visible label in the menu */\n  label: string;\n  /** Optional Material icon name (e.g. 'edit', 'delete') */\n  icon?: string;\n  /** If false, hide this action (defaults to true) */\n  show?: boolean;\n  /** Disable the action */\n  disabled?: boolean;\n  /** Optional additional CSS classes for the <button mat-menu-item> */\n  class?: string;\n  /** Optional tooltip text */\n  tooltip?: string;\n}\n\n@Component({\n  selector: 'cqa-action-menu-button',\n  templateUrl: './action-menu.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class ActionMenuButtonComponent {\n  @Input() row?: ActionMenuRow;\n  /** Optional list of dynamic actions; if provided, these will be rendered instead of default actions */\n  @Input() actions: CqaActionItem[] = [];\n\n  @Output() view = new EventEmitter<number | string>();\n  @Output() edit = new EventEmitter<ActionMenuRow>();\n  @Output() delete = new EventEmitter<ActionMenuRow>();\n  /** Generic event emitter for dynamic actions */\n  @Output() actionClick = new EventEmitter<{ action: string; row?: ActionMenuRow }>();\n\n  navigateToTestCase(id?: number | string): void {\n    if (id === undefined || id === null) return;\n    this.view.emit(id);\n  }\n\n  editTestCase(row?: ActionMenuRow): void {\n    if (!row) return;\n    this.edit.emit(row);\n  }\n\n  deleteTestCase(row?: ActionMenuRow): void {\n    if (!row) return;\n    this.delete.emit(row);\n  }\n\n  onActionSelect(action: CqaActionItem): void {\n    if (action?.disabled) return;\n    this.actionClick.emit({ action: action.id, row: this.row });\n  }\n}\n\n","<div class=\"cqa-ui-root\">\n  <button class=\"action-menu-btn\" [matMenuTriggerFor]=\"actionMenu\" (click)=\"$event.stopPropagation()\" mat-icon-button\n    type=\"button\" aria-label=\"More actions\">\n    <mat-icon>more_horiz</mat-icon>\n  </button>\n\n  <mat-menu #actionMenu=\"matMenu\" class=\"action-menu\" xPosition=\"after\" yPosition=\"below\" hasBackdrop=\"true\">\n    <!-- Dynamic actions (if provided) -->\n    <ng-container *ngIf=\"actions?.length; else defaultActions\">\n      <button\n        mat-menu-item\n        *ngFor=\"let a of actions\"\n        [disabled]=\"a.disabled\"\n        [class]=\"a.class\"\n        (click)=\"onActionSelect(a)\"\n        [matTooltip]=\"a.tooltip || ''\"\n        [matTooltipDisabled]=\"!a.tooltip\"\n        matTooltipPosition=\"above\">\n        <mat-icon *ngIf=\"a.icon\">{{ a.icon }}</mat-icon>\n        <span>{{ a.label }}</span>\n      </button>\n    </ng-container>\n\n    <!-- Backward-compatible defaults -->\n    <ng-template #defaultActions>\n      <button mat-menu-item (click)=\"navigateToTestCase(row?.id)\">\n        <mat-icon>visibility</mat-icon>\n        <span>View</span>\n      </button>\n      <button mat-menu-item (click)=\"editTestCase(row)\">\n        <mat-icon>edit_square</mat-icon>\n        <span>Edit</span>\n      </button>\n      <button mat-menu-item (click)=\"deleteTestCase(row)\" class=\"delete-menu-item\">\n        <mat-icon>delete</mat-icon>\n        <span>Delete</span>\n      </button>\n    </ng-template>\n  </mat-menu>\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface OtherButtonItem {\n  label: string;\n  icon?: string;\n  classes?: string | string[] | Record<string, boolean>;\n  colorClass?: string | string[] | Record<string, boolean>;\n  disabled?: boolean;\n  type?: 'button' | 'submit' | 'reset';\n  value?: any;\n}\n\n@Component({\n  selector: 'cqa-other-button',\n  templateUrl: './other-button.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class OtherButtonComponent {\n  // Single button API (backwards compatible)\n  @Input() icon: string = '';\n  @Input() label: string = '';\n  @Input() classes: string | string[] | Record<string, boolean> = '';\n  @Input() colorClass: string | string[] | Record<string, boolean> = '';\n  @Input() buttonClass: string = '';\n  @Input() disabled: boolean = false;\n  @Input() type: 'button' | 'submit' | 'reset' = 'button';\n\n  // Group buttons API (new)\n  @Input() buttons: OtherButtonItem[] | null = null;\n  /** Extra classes for the button group container */\n  @Input() groupClass: string | string[] | Record<string, boolean> = '';\n  /** Gap utility class; defaults to Tailwind spacing applied in template */\n  @Input() gapClass: string = 'cqa-gap-2';\n  /** When true, allows wrapping to next line on smaller screens */\n  @Input() wrap: boolean = true;\n\n  @Output() clicked = new EventEmitter<MouseEvent>();\n  /** Emits the config of the clicked button in a group, along with the event */\n  @Output() buttonClick = new EventEmitter<{ event: MouseEvent; item: OtherButtonItem }>();\n\n  onClick(event: MouseEvent): void {\n    if (this.disabled) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.clicked.emit(event);\n  }\n\n  onItemClick(event: MouseEvent, item: OtherButtonItem): void {\n    if (item?.disabled) {\n      event.preventDefault();\n      event.stopPropagation();\n      return;\n    }\n    this.buttonClick.emit({ event, item });\n  }\n}\n\n","<div class=\"cqa-ui-root\" >\n  <!-- Group rendering if buttons are provided -->\n  <ng-container *ngIf=\"buttons?.length; else singleButton\">\n    <div class=\"cqa-inline-flex cqa-items-center\" [ngClass]=\"[wrap ? 'cqa-flex-wrap' : '', gapClass, groupClass]\">\n      <button *ngFor=\"let b of buttons\"\n        [type]=\"b.type || 'button'\"\n        class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-[5.75px] cqa-px-[11.5px] cqa-rounded-[5px] cqa-text-[12.3px] cqa-leading-[17.5px] cqa-font-medium cqa-border\"\n        [ngClass]=\"[b.classes || classes, buttonClass, b.colorClass || colorClass]\"\n        [disabled]=\"b.disabled\"\n        (click)=\"onItemClick($event, b)\">\n        <mat-icon *ngIf=\"b.icon || icon\" class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">{{ b.icon || icon }}</mat-icon>\n        <span>{{ b.label }}</span>\n      </button>\n    </div>\n  </ng-container>\n\n  <!-- Single button (backwards compatible) -->\n  <ng-template #singleButton>\n    <button [type]=\"type\"\n      class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-[5.75px] cqa-px-[11.5px] cqa-rounded-[5px] cqa-text-[12.3px] cqa-leading-[17.5px] cqa-font-medium cqa-border\"\n      [ngClass]=\"[classes, buttonClass, colorClass]\" [disabled]=\"disabled\" (click)=\"onClick($event)\">\n      <mat-icon *ngIf=\"icon\" class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">{{ icon }}</mat-icon>\n      <span>{{ label }}</span>\n    </button>\n  </ng-template>\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit, OnChanges, SimpleChanges, ViewChild, ElementRef, HostListener, Output, EventEmitter } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { MatSelect, MatSelectChange } from '@angular/material/select';\n\n// Local option model (previously imported from removed cqa-select component)\nexport interface SelectOption {\n  id?: any;\n  value?: any;\n  name?: string;\n  label?: string;\n  /** e.g. MOBILE, BROWSER — shown as a leading icon in the dropdown when set */\n  testType?: string;\n  statusColor?: string;\n  durationFormatted?: string;\n  runNumberLabel?: string;\n  hasHourRun?: boolean;\n  hasMinuteRun?: boolean;\n  runDateLabel?: string;\n}\n\nexport interface DynamicSelectFieldConfig {\n  key: string;\n  label?: string;\n  placeholder?: string;\n  displayLabelAsInnerHtml?: boolean;\n  disabled?: boolean;\n  multiple?: boolean;\n  searchable?: boolean;\n  /** Controls how selection indicator is shown for multi-select options. */\n  optionStyle?: 'checkmark' | 'checkbox';\n  /** Show a 'Select All' option at the top (multi-select only). */\n  showSelectAll?: boolean;\n  /** Custom label for the 'Select All' option. Defaults to 'All'. */\n  selectAllLabel?: string;\n  /** If true, close the panel when an option is selected (useful for multi-select in headers). */\n  closeOnSelect?: boolean;\n  /** Provide a default selected value (or array for multi-select) if the control has no value yet. */\n  selectedValue?: any | any[];\n  /** Optional callback invoked whenever the selection changes. */\n  onChange?: (value: any, event?: MatSelectChange) => void;\n  /** Enable server-side search mode; component will emit search instead of local filtering. */\n  serverSearch?: boolean;\n  /**\n   * When true, triggers an initial search emit on panel open (serverSearch mode only).\n   * Defaults to false so opening the dropdown does NOT call the API.\n   */\n  initialFetchOnOpen?: boolean;\n  /** Indicates more results are available for infinite scroll. */\n  hasMore?: boolean;\n  /** Optional loading flag controlled by consumer to show loading state. */\n  isLoading?: boolean;\n  /** Optional callback for server-side search when query changes. */\n  onSearch?: (query: string) => void;\n  /** If true, renders testType icons (mobile/web/other) before labels. */\n  showTestTypeIcon?: boolean;\n  /** Optional callback when more data is requested (infinite scroll). */\n  onLoadMore?: (query?: string) => void;\n  /** Optional regex pattern or function to highlight parts of option text. */\n  highlightPattern?: RegExp | string | ((text: string) => string);\n  /** When true (and searchable), allows adding the current search text as a new option via an \"Add '<value>'\" choice. */\n  allowCustomValue?: boolean;\n  options: SelectOption[];\n  isCompareRuns?: boolean;\n  valueBy?: string;\n  /** Optional extra CSS class appended to the mat-select panel (use for scoped overlay targeting). */\n  extraPanelClass?: string;\n}\n\n@Component({\n  selector: 'cqa-dynamic-select',\n  templateUrl: './dynamic-select-field.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DynamicSelectFieldComponent implements OnInit, OnChanges {\n  readonly SELECT_ALL_VALUE: string = '__select_all__';\n  readonly ADD_CUSTOM_VALUE_PREFIX: string = '__add_custom__:';\n  @Input() form!: FormGroup;\n  @Input() config!: DynamicSelectFieldConfig;\n  @Output() selectionChange = new EventEmitter<{ key: string; value: any; event: MatSelectChange }>();\n  @Output() selectClick = new EventEmitter<void>();\n  /** Emits when user types in search box (useful for server search) */\n  @Output() searchChange = new EventEmitter<{ key: string; query: string }>();\n  /** Emits when the component requests more data for the current query */\n  @Output() loadMore = new EventEmitter<{ key: string; query: string }>();\n  /** Emits when the user chooses to add a custom value (allowCustomValue: true). Consumer should add the value to options and set the control value. */\n  @Output() addCustomValue = new EventEmitter<{ key: string; value: string }>();\n\n  @ViewChild('selectRef', { static: false }) selectRef?: MatSelect;\n  @ViewChild('host', { static: false, read: ElementRef }) hostEl?: ElementRef<HTMLElement>;\n\n  // Must be public for template access in Angular's strict template checking mode\n  searchTextByKey: Record<string, string> = {};\n  private outsideCleanup?: () => void;\n  private loadMoreObserver?: IntersectionObserver;\n  private lastOptionsLength = 0;\n  loadingMore = false;\n  private panelScrollEl?: HTMLElement;\n  private documentKeydownListener?: (event: KeyboardEvent) => void;\n  /**\n   * Guard to ensure load-more is only triggered after the user has scrolled\n   * at least once since opening the panel. Prevents auto-load on open.\n   */\n  private hasScrolledSinceOpen = false;\n  /**\n   * True when the load-more sentinel is currently in view. Used to trigger only when\n   * the sentinel transitions from out-of-view to in-view (user scrolled to bottom again),\n   * not when it stays in view after new data arrives (which would cause repeated API calls).\n   */\n  private sentinelCurrentlyInView = false;\n  private onPanelScroll = () => {\n    this.hasScrolledSinceOpen = true;\n    if (!this.config?.hasMore || this.loadingMore) return;\n    const el = this.panelScrollEl;\n    if (!el) return;\n    const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 48; // ~3 option rows\n    if (nearBottom && !this.sentinelCurrentlyInView) {\n      this.sentinelCurrentlyInView = true;\n      this.loadingMore = true;\n      const key = this.config?.key || '';\n      const q = this.searchTextByKey[key] || '';\n      this.loadMore.emit({ key, query: q });\n      try { this.config.onLoadMore?.(q); } catch {}\n    } else if (!nearBottom) {\n      this.sentinelCurrentlyInView = false;\n    }\n  };\n\n  ngOnInit(): void {\n    if (!this.config || !this.config.key) {\n      throw new Error('cqa-dynamic-select: input \"config.key\" is required.');\n    }\n    this.applySelectedValueIfNeeded();\n    this.syncDisabledState();\n    this.lastOptionsLength = (this.config?.options || []).length;\n  }\n\n  get displayPlaceholder(): string | undefined {\n    const key = this.config?.key;\n    if (!key || !this.form) return this.config?.placeholder;\n    const controlValue = this.form.get(key)?.value;\n    return this.hasExistingValue(controlValue) ? undefined : this.config?.placeholder;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('config' in changes || 'form' in changes) {\n      this.syncDisabledState();\n    }\n    if ('config' in changes) {\n      // When config changes (including toggling multiple), ensure control value shape matches\n      this.syncControlValueForMultipleMode();\n      this.applySelectedValueIfNeeded();\n      // Sync loadingMore with config.isLoading when provided by parent\n      // This allows parent to control loading state (e.g., during load more operations)\n      if (this.config?.isLoading !== undefined) {\n        this.loadingMore = this.config.isLoading;\n      }\n      // Reset loadingMore when new options arrive (options length increased)\n      const len = (this.config?.options || []).length;\n      if (len > this.lastOptionsLength) {\n        // Reset loading state when new data arrives, unless parent explicitly says still loading\n        if (this.config?.isLoading === false) {\n          this.loadingMore = false;\n        } else if (this.config?.isLoading === undefined) {\n          // Only auto-reset if parent doesn't control loading state\n          this.loadingMore = false;\n        }\n      }\n      this.lastOptionsLength = len;\n      // If consumer indicates no more results, clear loading state and any observers\n      if (!this.config?.hasMore) {\n        // Clear loading state when no more results, unless parent explicitly says still loading\n        if (this.config?.isLoading === false) {\n          this.loadingMore = false;\n        } else if (this.config?.isLoading === undefined) {\n          this.loadingMore = false;\n        }\n        if (this.loadMoreObserver) {\n          try { this.loadMoreObserver.disconnect(); } catch {}\n          this.loadMoreObserver = undefined;\n        }\n      }\n      // If panel is open and hasMore is true, ensure the sentinel is being observed.\n      if (this.selectRef?.panelOpen && this.config?.hasMore) {\n        setTimeout(() => this.setupLoadMoreObserver(), 0);\n      }\n    }\n    if ('form' in changes && !changes['form'].firstChange) {\n      this.applySelectedValueIfNeeded();\n    }\n  }\n\n  get panelClass(): string {\n    return `ctc-select-panel ${this.isMultiple ? 'multiple' : ''} ${this.config?.isCompareRuns ? 'compare-runs-select-panel' : ''} ${this.config?.extraPanelClass ?? ''}`.trim();\n  }\n\n  get isMultiple(): boolean {\n    return this.toBoolean(this.config?.multiple);\n  }\n\n  get singleSelectedDisplayLabel(): string {\n    const key = this.config?.key;\n    if (!key || !this.form || this.isMultiple) return '';\n    const controlValue = this.form.get(key)?.value;\n    if (controlValue === null || controlValue === undefined || controlValue === '') return '';\n    const matchedOption = (this.config?.options || []).find(\n      (opt) => this.getOptionValue(opt) === controlValue || String(this.getOptionValue(opt)) === String(controlValue)\n    );\n    if (matchedOption) {\n      return String(matchedOption.name ?? matchedOption.label ?? matchedOption.value ?? matchedOption.id ?? '');\n    }\n    return String(controlValue);\n  }\n\n  /** Resolved option for single-select trigger (icon + label). */\n  get singleSelectedOption(): SelectOption | null {\n    const key = this.config?.key;\n    if (!key || !this.form || this.isMultiple) return null;\n    const controlValue = this.form.get(key)?.value;\n    if (controlValue === null || controlValue === undefined || controlValue === '') return null;\n    const matched = (this.config?.options || []).find(\n      (opt) => this.getOptionValue(opt) === controlValue || String(this.getOptionValue(opt)) === String(controlValue)\n    );\n    return matched ?? null;\n  }\n\n  /**\n   * Maps API testType strings to icon variants. Unknown non-empty values use 'other'.\n   */\n  testTypeIconKind(opt: SelectOption | null | undefined): 'mobile' | 'web' | 'other' | null {\n    const raw = opt?.testType;\n    if (raw == null || String(raw).trim() === '') return null;\n    const u = String(raw).trim().toUpperCase();\n    if (u === 'MOBILE') return 'mobile';\n    if (u === 'BROWSER' || u === 'WEB') return 'web';\n    return 'other';\n  }\n\n  get isDisabled(): boolean {\n    return this.toBoolean(this.config?.disabled);\n  }\n  \n  get useCheckboxStyle(): boolean {\n    return this.isMultiple && (this.config?.optionStyle === 'checkbox');\n  }\n  \n  get allSelected(): boolean {\n    if (!this.isMultiple) return false;\n    const key = this.config?.key;\n    if (!key || !this.form) return false;\n    const control = this.form.get(key);\n    if (!control) return false;\n    const selected = control.value as any[];\n    const allIds = this.getAllOptionIds();\n    if (!Array.isArray(selected)) return false;\n    if (!allIds.length) return false;\n    return allIds.every(id => selected.includes(id));\n  }\n\n  private toBoolean(value: unknown): boolean {\n    if (typeof value === 'string') {\n      const v = value.trim().toLowerCase();\n      if (v === 'true' || v === '1') return true;\n      if (v === 'false' || v === '0' || v === '') return false;\n      return true; // any other non-empty string treated as truthy\n    }\n    if (typeof value === 'number') {\n      return value !== 0;\n    }\n    return !!value;\n  }\n\n  /**\n   * Get the value for an option based on the valueBy property.\n   * If valueBy is provided, use that property from the option.\n   * Otherwise, fall back to id ?? value (default behavior).\n   * Must be public for template access.\n   */\n  getOptionValue(opt: SelectOption): any {\n    if (this.config?.valueBy) {\n      // Use the property specified by valueBy\n      return (opt as any)[this.config.valueBy];\n    }\n    // Default behavior: use id ?? value\n    return opt.id ?? opt.value;\n  }\n\n  /**\n   * Sync the form control's disabled state from config.\n   * Use the FormControl API instead of [disabled] in the template to avoid Angular's\n   * \"changed after checked\" / reactive forms disabled-attribute warning.\n   */\n  private syncDisabledState(): void {\n    const key = this.config?.key;\n    if (!key || !this.form) return;\n    const control = this.form.get(key);\n    if (!control) return;\n    const shouldDisable = this.toBoolean(this.config?.disabled);\n    if (shouldDisable) {\n      control.disable({ emitEvent: false });\n    } else {\n      control.enable({ emitEvent: false });\n    }\n  }\n\n  private syncControlValueForMultipleMode(): void {\n    const key = this.config?.key;\n    if (!key || !this.form) return;\n    const control = this.form.get(key);\n    if (!control) return;\n    const currentValue = control.value;\n    if (this.isMultiple) {\n      if (currentValue == null) return;\n      if (Array.isArray(currentValue)) return;\n      control.setValue([currentValue], { emitEvent: false });\n    } else {\n      if (!Array.isArray(currentValue)) return;\n      control.setValue(currentValue.length ? currentValue[0] : null, { emitEvent: false });\n    }\n  }\n\n  private applySelectedValueIfNeeded(): void {\n    const key = this.config?.key;\n    if (!key || !this.form) return;\n    const control = this.form.get(key);\n    if (!control) return;\n    const selectedValue = this.config?.selectedValue;\n    const currentValue = control.value;\n    \n    // If there's an existing value, don't override it\n    if (this.hasExistingValue(currentValue)) {\n      return;\n    }\n    \n    // For multi-select: if currentValue is an empty array [], this is an explicit user choice to clear\n    // Don't restore from selectedValue - respect the user's decision to deselect all\n    if (this.isMultiple && Array.isArray(currentValue) && currentValue.length === 0) {\n      return;\n    }\n    \n    if (selectedValue === undefined || selectedValue === null) {\n      return;\n    }\n\n    if (this.isMultiple) {\n      const normalized = (Array.isArray(selectedValue) ? selectedValue : [selectedValue]).filter(\n        (val) => val !== undefined,\n      );\n      if (!normalized.length) return;\n      control.setValue(normalized, { emitEvent: false });\n    } else {\n      const normalized = Array.isArray(selectedValue)\n        ? (selectedValue.length ? selectedValue[0] : undefined)\n        : selectedValue;\n      if (normalized === undefined) return;\n      control.setValue(normalized, { emitEvent: false });\n    }\n  }\n\n  private hasExistingValue(value: any): boolean {\n    if (value === null || value === undefined) {\n      return false;\n    }\n    if (Array.isArray(value)) {\n      return value.some((val) => val !== null && val !== undefined && val !== '');\n    }\n    if (typeof value === 'string') {\n      return value.trim().length > 0;\n    }\n    return true;\n  }\n\n  isOptionSelected(opt: SelectOption): boolean {\n    const key = this.config?.key;\n    if (!key || !this.form) return false;\n    const control = this.form.get(key);\n    if (!control) return false;\n    const controlValue = control.value;\n    const optionValue = this.getOptionValue(opt);\n    if (this.isMultiple) {\n      if (!Array.isArray(controlValue)) return false;\n      return controlValue.includes(optionValue);\n    }\n    return controlValue === optionValue;\n  }\n\n  private getAllOptionIds(): any[] {\n    const options = this.config?.options || [];\n    return options.map(o => this.getOptionValue(o)).filter(v => v !== undefined);\n  }\n\n  onToggleSelectAll(select: MatSelect): void {\n    const key = this.config?.key;\n    if (!key || !this.form) return;\n    const control = this.form.get(key);\n    if (!control) return;\n    const allIds = this.getAllOptionIds();\n    if (!allIds.length) return;\n    if (this.allSelected) {\n      control.setValue([], { emitEvent: true });\n    } else {\n      control.setValue(allIds, { emitEvent: true });\n    }\n    // Keep panel open for continued selections in multi-select\n    try { select.open(); } catch {}\n  }\n\n  onSelectOpenedChange(opened: boolean, _select: MatSelect): void {\n    if (opened) {\n      // Emit click event when select is opened (clicked)\n      this.selectClick.emit();\n      // Reset loadingMore when opening if options already exist (don't show loader on initial open)\n      if ((this.config?.options || []).length > 0) {\n        this.loadingMore = false;\n      }\n      // Ensure we only trigger load-more after a real user scroll\n      this.hasScrolledSinceOpen = false;\n    }\n    \n    if (!opened) {\n      // Reset search text on close so the next open shows full list\n      if (this.config?.key) {\n        this.searchTextByKey[this.config.key] = '';\n      }\n      // Ensure any previous custom listeners are cleared (legacy compatibility)\n      if (this.outsideCleanup) {\n        this.outsideCleanup();\n        this.outsideCleanup = undefined;\n      }\n      // Remove document keyboard listener\n      if (this.documentKeydownListener) {\n        document.removeEventListener('keydown', this.documentKeydownListener);\n        this.documentKeydownListener = undefined;\n      }\n      // Disconnect load-more observer if any\n      if (this.loadMoreObserver) {\n        try { this.loadMoreObserver.disconnect(); } catch {}\n        this.loadMoreObserver = undefined;\n      }\n      // Remove scroll listener if attached\n      if (this.panelScrollEl) {\n        try { this.panelScrollEl.removeEventListener('scroll', this.onPanelScroll); } catch {}\n        this.panelScrollEl = undefined;\n      }\n      // Reset load-more state when closing\n      this.loadingMore = false;\n      this.sentinelCurrentlyInView = false;\n      return;\n    }\n\n    // Focus the search box if enabled\n    if (this.config?.searchable) {\n      setTimeout(() => {\n        const input = document.querySelector<HTMLInputElement>('.ts-select-search-input');\n        input?.focus();\n      }, 0);\n    }\n\n    // Server-search: reset search and refetch full list when panel opens so user always sees a fresh list.\n    if (this.config?.serverSearch) {\n      const key = this.config.key;\n      this.searchTextByKey[key] = '';\n      try { this.config.onSearch?.(''); } catch {}\n      this.searchChange.emit({ key, query: '' });\n    } else if (this.toBoolean(this.config?.initialFetchOnOpen)) {\n      // Non-server-search: optional initial fetch on open when explicitly requested.\n      const key = this.config.key;\n      const q = this.searchTextByKey[key] || '';\n      try { this.config.onSearch?.(q); } catch {}\n      this.searchChange.emit({ key, query: q });\n    }\n\n    this.sentinelCurrentlyInView = false;\n    this.hasScrolledSinceOpen = false;\n    // Setup infinite scroll observer on sentinel\n    setTimeout(() => this.setupLoadMoreObserver(), 0);\n    // Also attach a scroll listener fallback for reliable load-more triggers\n    setTimeout(() => {\n      try {\n        const panels = Array.from(document.querySelectorAll('.mat-select-panel')) as HTMLElement[];\n        this.panelScrollEl = panels.length ? panels[panels.length - 1] : undefined;\n        if (this.panelScrollEl) {\n          this.panelScrollEl.addEventListener('scroll', this.onPanelScroll, { passive: true });\n        }\n      } catch {}\n    }, 0);\n    \n    // Setup document-level keyboard listener while the panel is open.\n    // Needed to reliably intercept key combos (e.g. Ctrl/Cmd+A) that can trigger Angular Material typeahead\n    // and accidentally activate the \"Select All\" option in multi-selects.\n    this.setupDocumentKeydownListener();\n  }\n\n  onSearch(key: string, value: string): void {\n    this.searchTextByKey[key] = value ?? '';\n    if (this.config?.serverSearch) {\n      // For server-side search, emit instead of local filtering\n      try { this.config.onSearch?.(value ?? ''); } catch {}\n      this.searchChange.emit({ key, query: value ?? '' });\n      // Reset internal paging state\n      this.loadingMore = false;\n      this.lastOptionsLength = (this.config?.options || []).length;\n    }\n  }\n\n  /**\n   * Handles keyboard events on the search input to enable navigation with arrow keys\n   * and selection with Enter key, while still allowing typing in the search box.\n   */\n  onSearchInputKeydown(event: KeyboardEvent): void {\n    const key = event.key;\n\n    // Prevent Ctrl/Cmd + A from triggering mat-select typeahead/select-all behavior\n    // when the dropdown uses checkbox-style multi-select.\n    if ((event.ctrlKey || event.metaKey) && key.toLowerCase() === 'a') {\n      event.preventDefault();\n      event.stopPropagation();\n      event.stopImmediatePropagation();\n      return;\n    }\n    \n    // Handle navigation and selection keys\n    if (key === 'ArrowUp' || key === 'ArrowDown') {\n      // Stop the event completely before doing anything\n      event.preventDefault();\n      event.stopPropagation();\n      event.stopImmediatePropagation();\n      \n      // Navigate immediately (synchronously) to prevent Angular Material from processing\n      this.navigateOptions(key === 'ArrowDown' ? 1 : -1);\n      \n      // Blur the search input after navigation to allow subsequent arrow keys to work naturally\n      const input = event.target as HTMLInputElement;\n      if (input) {\n        // Use requestAnimationFrame to blur after our navigation completes\n        requestAnimationFrame(() => {\n          input.blur();\n        });\n      }\n      return;\n    }\n    \n    if (key === 'Enter') {\n      event.preventDefault();\n      // Blur the search input\n      const input = event.target as HTMLInputElement;\n      if (input) {\n        input.blur();\n      }\n      // Find and select the active option\n      setTimeout(() => {\n        const panel = document.querySelector('.mat-select-panel');\n        if (panel) {\n          const activeOption = panel.querySelector('.mat-option.mat-active:not(.mat-option-disabled)') as HTMLElement;\n          if (activeOption) {\n            activeOption.click();\n          } else {\n            // If no active option, try to select the first enabled option\n            const firstOption = panel.querySelector('.mat-option:not(.mat-option-disabled):not(.ts-select-search)') as HTMLElement;\n            if (firstOption) {\n              firstOption.click();\n            }\n          }\n        }\n      }, 10);\n      return;\n    }\n    \n    // For Escape, allow it to propagate (mat-select will close the panel)\n    if (key === 'Escape') {\n      return;\n    }\n    \n    // For all other keys (typing), stop propagation to allow search input to work normally\n    event.stopPropagation();\n  }\n\n  public onSelectKeydown(event: KeyboardEvent): void {\n    // Hard-block Ctrl/Cmd + A so it can't trigger Angular Material typeahead\n    // that may end up selecting the \"All\" option in checkbox-style multi-selects.\n    if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'a' && this.isMultiple) {\n      event.preventDefault();\n      event.stopPropagation();\n      event.stopImmediatePropagation();\n    }\n  }\n\n  /**\n   * Manually navigates through options when arrow keys are pressed from search input.\n   * @param direction 1 for down, -1 for up\n   */\n  private navigateOptions(direction: 1 | -1): void {\n    const panel = document.querySelector('.mat-select-panel');\n    if (!panel) return;\n\n    // Get all enabled, non-disabled options (excluding search input)\n    const allOptions = Array.from(\n      panel.querySelectorAll('.mat-option:not(.mat-option-disabled):not(.ts-select-search)')\n    ) as HTMLElement[];\n\n    if (allOptions.length === 0) return;\n\n    // Find currently active option\n    let currentIndex = allOptions.findIndex(opt => opt.classList.contains('mat-active'));\n\n    // If no active option, start at the first one (for down) or last one (for up)\n    if (currentIndex === -1) {\n      currentIndex = direction === 1 ? -1 : allOptions.length;\n    }\n\n    // Calculate next index\n    const nextIndex = currentIndex + direction;\n\n    // Bounds check\n    if (nextIndex < 0 || nextIndex >= allOptions.length) {\n      return;\n    }\n\n    // Remove active class from all options\n    allOptions.forEach(opt => opt.classList.remove('mat-active'));\n\n    // Add active class to the target option\n    const targetOption = allOptions[nextIndex];\n    targetOption.classList.add('mat-active');\n    \n    // Scroll the option into view if needed\n    targetOption.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n    \n    // Focus the option so Angular Material's keyboard manager can handle subsequent arrow keys\n    // Focusing an option doesn't trigger selection in Angular Material - only click/Enter does\n    // Use setTimeout to ensure the DOM is updated first\n    setTimeout(() => {\n      targetOption.focus();\n    }, 0);\n  }\n\n  /**\n   * Returns the currently selected option ids for the configured control.\n   */\n  private getSelectedIdsForKey(key: string): any[] {\n    if (!key || !this.form) return [];\n    const control = this.form.get(key);\n    if (!control) return [];\n    const value = control.value;\n    if (this.isMultiple) {\n      return Array.isArray(value) ? value : [];\n    }\n    return value !== undefined && value !== null ? [value] : [];\n  }\n\n  /** Programmatically close the select panel if open */\n  public closePanel(): void {\n    try {\n      this.selectRef?.close();\n    } catch {}\n  }\n\n  filteredOptions(c: DynamicSelectFieldConfig): SelectOption[] {\n    const t = (this.searchTextByKey[c.key] || '').toLowerCase().trim();\n    // In server-side mode, return options as-is (parent provides list)\n    if (c.serverSearch) return c.options || [];\n    // When not searching, return full list to preserve original ordering\n    if (!t) return c.options || [];\n\n    const allOptions = c.options || [];\n    const baseFiltered = allOptions.filter((opt) => {\n      const text = String(opt.name ?? opt.label ?? opt.value ?? '').toLowerCase();\n      return text.includes(t);\n    });\n\n    // Ensure currently selected option(s) are always visible while searching\n    const selectedIds = this.getSelectedIdsForKey(c.key);\n    if (!selectedIds.length) {\n      return baseFiltered;\n    }\n\n    const valueOf = (o: SelectOption) => this.getOptionValue(o);\n    const selectedOptions = allOptions.filter(o => selectedIds.includes(valueOf(o)));\n\n    // Merge selected options (keeping their original order) with filtered ones, de-duplicated\n    const seen = new Set<any>();\n    const merged: SelectOption[] = [];\n    for (const o of selectedOptions) {\n      const val = valueOf(o);\n      if (val === undefined) continue;\n      if (!seen.has(val)) {\n        seen.add(val);\n        merged.push(o);\n      }\n    }\n    for (const o of baseFiltered) {\n      const val = valueOf(o);\n      if (val === undefined) continue;\n      if (!seen.has(val)) {\n        seen.add(val);\n        merged.push(o);\n      }\n    }\n    return merged;\n  }\n\n  /** When allowCustomValue is true and the user has typed a value that is not in options, returns that value for the \"Add\" option. */\n  get customValueToAdd(): string | null {\n    const c = this.config;\n    if (!c?.key || !this.toBoolean(c.searchable) || !this.toBoolean(c.allowCustomValue)) return null;\n    const t = (this.searchTextByKey[c.key] || '').trim();\n    if (!t) return null;\n    const opts = c.options || [];\n    const lower = t.toLowerCase();\n    const alreadyExists = opts.some((o) => {\n      const v = String(o.name ?? o.label ?? o.value ?? o.id ?? '').toLowerCase();\n      return v === lower;\n    });\n    return alreadyExists ? null : t;\n  }\n\n  get showAddCustomOption(): boolean {\n    return this.customValueToAdd !== null;\n  }\n\n  get addCustomSentinelValue(): string {\n    const v = this.customValueToAdd;\n    return v != null ? `${this.ADD_CUSTOM_VALUE_PREFIX}${v}` : '';\n  }\n\n  // Close when an option is selected if requested. Always close for single-select.\n  onSelectionChange(event: MatSelectChange, select: MatSelect): void {\n    // Handle add-custom-value sentinel (allowCustomValue)\n    const raw = event.value;\n    const sentinelInArray = Array.isArray(raw)\n      ? raw.find((v: any) => typeof v === 'string' && v.startsWith(this.ADD_CUSTOM_VALUE_PREFIX))\n      : null;\n    const isAddCustom =\n      (typeof raw === 'string' && raw.startsWith(this.ADD_CUSTOM_VALUE_PREFIX)) || sentinelInArray != null;\n\n    if (isAddCustom) {\n      const sentinelStr = typeof raw === 'string' ? raw : sentinelInArray;\n      const value = String(sentinelStr).slice(this.ADD_CUSTOM_VALUE_PREFIX.length);\n      const key = this.config?.key;\n      if (key && this.form) {\n        const control = this.form.get(key);\n        if (control) {\n          if (this.isMultiple && Array.isArray(control.value)) {\n            const filtered = (control.value as any[]).filter(\n              (v: any) => typeof v !== 'string' || !v.startsWith(this.ADD_CUSTOM_VALUE_PREFIX)\n            );\n            control.setValue(filtered, { emitEvent: false });\n          } else {\n            control.setValue(null, { emitEvent: false });\n          }\n        }\n      }\n      this.addCustomValue.emit({ key: key ?? '', value });\n      if (this.config?.searchable && this.config?.key) {\n        this.searchTextByKey[this.config.key] = '';\n      }\n      try { select.close(); } catch {}\n      return;\n    }\n    // Handle select-all sentinel in multi-select\n    if (this.isMultiple && Array.isArray(event.value) && event.value.includes(this.SELECT_ALL_VALUE)) {\n      // Remove sentinel and toggle all\n      const key = this.config?.key;\n      if (key && this.form) {\n        const control = this.form.get(key);\n        // Toggle based on current state\n        this.onToggleSelectAll(select);\n        // Ensure sentinel is not present\n        if (control) {\n          const filtered = (control.value as any[]).filter(v => v !== this.SELECT_ALL_VALUE);\n          control.setValue(filtered, { emitEvent: false });\n        }\n      }\n      // Do not proceed with normal close logic for select-all\n      return;\n    }\n    // Let Angular Material auto-close for single-select.\n    // For multi-select, close only if explicitly requested.\n    const shouldClose = this.isMultiple ? !!this.config?.closeOnSelect : false;\n    if (shouldClose) {\n      try {\n        select.close();\n      } catch {}\n    }\n    // If searchable, clear the search after selection so reopening works predictably\n    if (this.config?.searchable && this.config?.key) {\n      this.searchTextByKey[this.config.key] = '';\n    }\n\n    if (typeof this.config?.onChange === 'function') {\n      try {\n        this.config.onChange(event.value, event);\n      } catch (error) {\n        console.error('cqa-dynamic-select onChange handler error:', error);\n      }\n    }\n\n    this.selectionChange.emit({\n      key: this.config?.key,\n      value: event.value,\n      event,\n    });\n  }\n\n  @HostListener('document:click', ['$event'])\n  handleDocumentClick(event: MouseEvent): void {\n    // Close when clicking outside of the trigger and outside of the open panel\n    if (!this.selectRef?.panelOpen) {\n      return;\n    }\n    const target = event.target as HTMLElement | null;\n    if (!target) return;\n    // If click is inside the component host, ignore\n    if (this.hostEl?.nativeElement && this.hostEl.nativeElement.contains(target)) {\n      return;\n    }\n    // Use composedPath() to capture the event dispatch path at the time of the click,\n    // before any DOM mutations triggered by selection-change handlers (e.g. options list\n    // rebuild). Without this, when an option is un-checked the consumer may reassign\n    // config (new reference) which causes Angular to re-render and detach the original\n    // click-target node, making el.contains(target) return false even for in-panel clicks.\n    const eventPath: EventTarget[] = (event.composedPath ? event.composedPath() : []);\n    const panelEls = Array.from(document.querySelectorAll('.mat-select-panel')) as HTMLElement[];\n    const clickInsidePanel = panelEls.some(\n      (el) => el.contains(target) || eventPath.includes(el as EventTarget)\n    );\n    if (clickInsidePanel) {\n      return;\n    }\n    try {\n      this.selectRef.close();\n    } catch {}\n  }\n\n  /**\n   * Highlights text based on the configured highlightPattern.\n   * Returns HTML string with highlighted portions wrapped in <span class=\"highlight\">.\n   */\n  highlightText(text: string): string {\n    if (!text || !this.config?.highlightPattern) {\n      return this.escapeHtml(text);\n    }\n\n    const pattern = this.config.highlightPattern;\n\n    // If it's a function, use it directly\n    if (typeof pattern === 'function') {\n      return pattern(text);\n    }\n\n    // Convert string pattern to RegExp if needed\n    let regex: RegExp;\n    if (typeof pattern === 'string') {\n      try {\n        regex = new RegExp(pattern, 'gi');\n      } catch (e) {\n        console.warn('Invalid highlight pattern:', pattern);\n        return this.escapeHtml(text);\n      }\n    } else {\n      regex = pattern;\n    }\n\n    // Escape HTML first, then apply highlighting\n    const escaped = this.escapeHtml(text);\n    return escaped.replace(regex, (match) => `<span class=\"cqa-text-primary\">${match}</span>`);\n  }\n\n  /**\n   * Escapes HTML special characters to prevent XSS.\n   */\n  private escapeHtml(text: string): string {\n    if (!text) return '';\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n\n  /**\n   * Checks if highlighting is enabled for this component.\n   */\n  get hasHighlighting(): boolean {\n    return !!this.config?.highlightPattern;\n  }\n\n  /**\n   * Sets up a document-level keyboard listener to handle arrow key navigation\n   * when the panel is open and the search input is not focused.\n   */\n  private setupDocumentKeydownListener(): void {\n    if (this.documentKeydownListener) {\n      document.removeEventListener('keydown', this.documentKeydownListener);\n    }\n    \n    this.documentKeydownListener = (event: KeyboardEvent) => {\n      // Only handle if panel is open\n      if (!this.selectRef?.panelOpen) {\n        return;\n      }\n      \n      // Don't handle if the search input is focused (it has its own handler)\n      const activeElement = document.activeElement;\n      if (activeElement && activeElement.classList.contains('ts-select-search-input')) {\n        return;\n      }\n      \n      // Don't handle if user is typing in another input\n      if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {\n        return;\n      }\n      \n      // Check if the event is related to our select panel\n      const target = event.target as HTMLElement;\n      const panel = document.querySelector('.mat-select-panel');\n      if (!panel) {\n        return;\n      }\n      \n      // Only handle if the event target is within our component or the panel\n      const isInOurComponent = this.hostEl?.nativeElement?.contains(target) || panel.contains(target);\n      if (!isInOurComponent && target !== document.body && target !== document.documentElement) {\n        return;\n      }\n\n      // Prevent Ctrl/Cmd + A from triggering mat-select typeahead/select-all behavior\n      // (often ends up selecting the \"All\" option and selecting everything).\n      if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'a' && this.isMultiple) {\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        return;\n      }\n\n      // Only handle arrow keys and Enter\n      if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown' && event.key !== 'Enter') {\n        return;\n      }\n      \n      // Handle arrow keys for navigation\n      if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n        // Check if an option is currently focused - if so, let Angular Material handle it\n        const focusedOption = panel.querySelector('.mat-option:focus');\n        if (focusedOption) {\n          // Let Angular Material handle it naturally when an option is focused\n          return;\n        }\n        \n        // Only intercept when no option is focused (e.g., after blurring search input)\n        // Stop the event completely to prevent Angular Material from also processing it\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        this.navigateOptions(event.key === 'ArrowDown' ? 1 : -1);\n        return;\n      }\n      \n      // Handle Enter for selection\n      if (event.key === 'Enter') {\n        event.preventDefault();\n        event.stopPropagation();\n        event.stopImmediatePropagation();\n        if (panel) {\n          const activeOption = panel.querySelector('.mat-option.mat-active:not(.mat-option-disabled)') as HTMLElement;\n          if (activeOption) {\n            activeOption.click();\n          }\n        }\n        return;\n      }\n    };\n    \n    document.addEventListener('keydown', this.documentKeydownListener, true);\n  }\n\n  private setupLoadMoreObserver(): void {\n    // Only if consumer indicates more data is available\n    if (!this.config?.hasMore) return;\n    // Find sentinel option rendered in the open panel\n    const sentinel = document.querySelector('.mat-select-panel .mat-option.load-more-sentinel') as HTMLElement | null;\n    if (!sentinel) return;\n    if (this.loadMoreObserver) {\n      try { this.loadMoreObserver.disconnect(); } catch {}\n      this.loadMoreObserver = undefined;\n    }\n    // Use the sentinel's closest panel as the root to avoid picking a wrong panel\n    const panelRoot = sentinel.closest('.mat-select-panel') as Element | null;\n    this.loadMoreObserver = new IntersectionObserver((entries) => {\n      for (const entry of entries) {\n        if (entry.isIntersecting) {\n          // Only trigger when sentinel just came into view (user scrolled to bottom).\n          // If it was already in view (e.g. after new data appended), do not trigger again.\n          const wasOutOfView = !this.sentinelCurrentlyInView;\n          this.sentinelCurrentlyInView = true;\n          if (wasOutOfView && this.hasScrolledSinceOpen && !this.loadingMore && this.config?.hasMore) {\n            this.loadingMore = true;\n            const key = this.config?.key || '';\n            const q = this.searchTextByKey[key] || '';\n            this.loadMore.emit({ key, query: q });\n            try { this.config.onLoadMore?.(q); } catch {}\n          }\n        } else {\n          // Sentinel left view (user scrolled up) – allow next load more when they scroll down again\n          this.sentinelCurrentlyInView = false;\n        }\n      }\n    }, { root: panelRoot, threshold: 0.1 });\n    try { this.loadMoreObserver.observe(sentinel); } catch {}\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <ng-container [formGroup]=\"form\">\n    <label *ngIf=\"config.label\"\n      class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n      config.label }}</label>\n    <mat-form-field #host class=\"mat-select-custom cqa-w-full\" appearance=\"fill\">\n      <mat-select #selectRef=\"matSelect\" [placeholder]=\"displayPlaceholder\" [multiple]=\"isMultiple\"\n        disableOptionCentering [panelClass]=\"panelClass\" [formControlName]=\"config.key\"\n        (openedChange)=\"onSelectOpenedChange($event, selectRef)\" (selectionChange)=\"onSelectionChange($event, selectRef)\"\n        (keydown)=\"onSelectKeydown($event)\">\n        <mat-select-trigger *ngIf=\"!isMultiple && singleSelectedDisplayLabel\">\n          <span class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0\">\n            <ng-container *ngIf=\"config?.showTestTypeIcon\">\n              <ng-container *ngTemplateOutlet=\"optionTestTypeIconTpl; context: { kind: testTypeIconKind(singleSelectedOption) }\"></ng-container>\n            </ng-container>\n            <span class=\"cqa-min-w-0\" [innerHTML]=\"singleSelectedDisplayLabel\"></span>\n          </span>\n        </mat-select-trigger>\n\n        <mat-option *ngIf=\"config.searchable\" class=\"ts-select-search\" disabled>\n          <input class=\"ts-select-search-input cqa-text-black-100\" type=\"text\" [value]=\"searchTextByKey[config.key] || ''\"\n            (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\"\n            (keydown)=\"onSearchInputKeydown($event)\" (input)=\"onSearch(config.key, $any($event.target).value)\"\n            placeholder=\"Search...\" />\n        </mat-option>\n        \n        <mat-option [ngClass]=\"{'checkmark': config.optionStyle === 'checkmark','checkbox': config.optionStyle !== 'checkmark','mat-selected': allSelected}\" [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngIf=\"isMultiple && config.showSelectAll\" [value]=\"SELECT_ALL_VALUE\">\n          <ng-container *ngIf=\"useCheckboxStyle; else selectAllDefaultTpl\">\n            <span class=\"cqa-flex cqa-items-center\">\n              <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n                [ngStyle]=\"allSelected ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n                <svg *ngIf=\"allSelected\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </span>\n              <span class=\"cqa-min-w-0\">{{ config.selectAllLabel || 'All' }}</span>\n            </span>\n          </ng-container>\n          <ng-template #selectAllDefaultTpl>\n            {{ config.selectAllLabel || 'All' }}\n          </ng-template>\n        </mat-option>\n\n        <mat-option *ngIf=\"showAddCustomOption\" [value]=\"addCustomSentinelValue\" class=\"cqa-text-primary\">\n          New\n        </mat-option>\n\n        <mat-option [class]=\"config.optionStyle == 'checkmark' ? 'checkmark' : 'checkbox'\" *ngFor=\"let opt of filteredOptions(config)\" [value]=\"getOptionValue(opt)\" [title]=\"opt.name ?? opt.label ?? opt.value\">\n          <ng-container *ngIf=\"config.isCompareRuns\">   \n            <ng-container *ngIf=\"useCheckboxStyle; else compareRunsDefaultOptionTpl\">\n              <span class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-compare-runs-item\">\n                <span class=\"cqa-flex cqa-items-center\">\n                  <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n                    [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n                    <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    </svg>\n                  </span>\n                  <span\n                    class=\"cqa-min-w-0 cqa-compare-runs\"\n                    *ngIf=\"hasHighlighting\"\n                    [style.color]=\"opt.statusColor || null\"\n                    [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                  <ng-container *ngIf=\"!hasHighlighting\">\n                    <span\n                      class=\"cqa-min-w-0 cqa-compare-runs\"\n                      *ngIf=\"opt.runNumberLabel && opt.runDateLabel; else checkboxDefaultLabel\">\n                      <span [style.color]=\"opt.statusColor || null\">{{ opt.runNumberLabel }}</span>\n                      <span class=\"cqa-text-[#6B7280]\"> {{ opt.runDateLabel }}&nbsp;</span>\n                    </span>\n                    <ng-template #checkboxDefaultLabel>\n                      <span\n                        class=\"cqa-min-w-0 cqa-compare-runs\"\n                        [style.color]=\"opt.statusColor || null\">\n                        {{ opt.name ?? opt.label ?? opt.value }}\n                      </span>\n                    </ng-template>\n                  </ng-container>\n                </span>\n                <span\n                  *ngIf=\"opt.durationFormatted\"\n                  class=\"cqa-flex cqa-items-center cqa-justify-start cqa-gap-1 cqa-text-[12px] cqa-text-[#6B7280] cqa-flex-shrink-0 cqa-whitespace-nowrap cqa-max-w-[80px]\" \n                  [ngClass]=\"{\n                    'cqa-min-w-[82px]': opt?.hasHourRun,\n                    'cqa-min-w-[66px]': !opt?.hasHourRun && opt?.hasMinuteRun,\n                    'cqa-min-w-[40px]': !opt?.hasHourRun && !opt?.hasMinuteRun\n                  }\">\n                  <svg class=\"cqa-min-w-[12px] cqa-max-w-[12px]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"#9CA3AF\" stroke-width=\"1\"/>\n                    <path d=\"M6 3.5V6L7.5 7\" stroke=\"#4B5563\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  </svg>\n                  <span>{{ opt.durationFormatted }}</span>\n                </span>\n              </span>\n            </ng-container>\n            <ng-template #compareRunsDefaultOptionTpl>\n              <span class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-compare-runs-item\">\n                <span\n                  class=\"cqa-min-w-0 cqa-compare-runs\"\n                  *ngIf=\"hasHighlighting\"\n                  [style.color]=\"opt.statusColor || null\"\n                  [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                <ng-container *ngIf=\"!hasHighlighting\">\n                  <span\n                    class=\"cqa-min-w-0 cqa-compare-runs\"\n                    *ngIf=\"opt.runNumberLabel && opt.runDateLabel; else defaultLabel\">\n                    <span [style.color]=\"opt.statusColor || null\">{{ opt.runNumberLabel }}</span>\n                    <span class=\"cqa-text-[#6B7280]\"> {{ opt.runDateLabel }}&nbsp;</span>\n                  </span>\n                  <ng-template #defaultLabel>\n                    <span\n                      class=\"cqa-min-w-0 cqa-compare-runs\"\n                      [style.color]=\"opt.statusColor || null\">\n                      {{ opt.name ?? opt.label ?? opt.value }}\n                    </span>\n                  </ng-template>\n                </ng-container>\n                <span\n                  *ngIf=\"opt.durationFormatted\"\n                  class=\"cqa-flex cqa-items-center cqa-justify-start cqa-gap-1 cqa-text-[12px] cqa-text-[#6B7280] cqa-flex-shrink-0 cqa-whitespace-nowrap cqa-max-w-[80px]\" \n                  [ngClass]=\"{\n                    'cqa-min-w-[82px]': opt?.hasHourRun,\n                    'cqa-min-w-[66px]': !opt?.hasHourRun && opt?.hasMinuteRun,\n                    'cqa-min-w-[40px]': !opt?.hasHourRun && !opt?.hasMinuteRun\n                  }\">\n                  <svg class=\"cqa-min-w-[12px] cqa-max-w-[12px]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <circle cx=\"6\" cy=\"6\" r=\"4.5\" stroke=\"#9CA3AF\" stroke-width=\"1\"/>\n                    <path d=\"M6 3.5V6L7.5 7\" stroke=\"#4B5563\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                  </svg>\n                  <span>{{ opt.durationFormatted }}</span>\n                </span>\n              </span>\n            </ng-template>\n          </ng-container>\n          <ng-container *ngIf=\"!config.isCompareRuns\">\n            <ng-container *ngIf=\"useCheckboxStyle; else defaultOptionTpl\">\n              <ng-container *ngIf=\"config?.showTestTypeIcon; else checkboxNoIconTpl\">\n                <span class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-min-w-0\">\n                  <ng-container *ngTemplateOutlet=\"optionTestTypeIconTpl; context: { kind: testTypeIconKind(opt) }\"></ng-container>\n                  <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n                    [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n                    <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    </svg>\n                  </span>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"config?.displayLabelAsInnerHtml\" [innerHTML]=\"opt.label ?? opt.name ?? opt.value\"></span>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"!config?.displayLabelAsInnerHtml && hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"!config?.displayLabelAsInnerHtml && !hasHighlighting\">\n                    {{ opt.name ?? opt.label ?? opt.value }}\n                  </span>\n                </span>\n              </ng-container>\n              <ng-template #checkboxNoIconTpl>\n                <span class=\"cqa-flex cqa-items-center\">\n                  <span class=\"cqa-w-4 cqa-h-4 cqa-flex-shrink-0 cqa-rounded-[4px] cqa-border cqa-border-[#D1D5DB] cqa-mr-2 cqa-flex cqa-items-center cqa-justify-center cqa-border-solid\"\n                    [ngStyle]=\"isOptionSelected(opt) ? {'background-color':'#4F46E5','border-color':'#4F46E5'} : {}\">\n                    <svg *ngIf=\"isOptionSelected(opt)\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    </svg>\n                  </span>\n                  <span *ngIf=\"config?.displayLabelAsInnerHtml\" [innerHTML]=\"opt.label ?? opt.name ?? opt.value\"></span>\n                  <span *ngIf=\"!config?.displayLabelAsInnerHtml && hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                  <span *ngIf=\"!config?.displayLabelAsInnerHtml && !hasHighlighting\">\n                    {{ opt.name ?? opt.label ?? opt.value }}\n                  </span>\n                </span>\n              </ng-template>\n            </ng-container>\n            <ng-template #defaultOptionTpl>\n              <ng-container *ngIf=\"config?.showTestTypeIcon; else defaultNoIconTpl\">\n                <span class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0\">\n                  <ng-container *ngTemplateOutlet=\"optionTestTypeIconTpl; context: { kind: testTypeIconKind(opt) }\"></ng-container>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"config?.displayLabelAsInnerHtml\" [innerHTML]=\"opt.label ?? opt.name ?? opt.value\"></span>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"!config?.displayLabelAsInnerHtml && hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                  <span class=\"cqa-min-w-0\" *ngIf=\"!config?.displayLabelAsInnerHtml && !hasHighlighting\">\n                    {{ opt.name ?? opt.label ?? opt.value }}\n                  </span>\n                </span>\n              </ng-container>\n              <ng-template #defaultNoIconTpl>\n                <span *ngIf=\"config?.displayLabelAsInnerHtml\" [innerHTML]=\"opt.label ?? opt.name ?? opt.value\"></span>\n                <span *ngIf=\"!config?.displayLabelAsInnerHtml && hasHighlighting\" [innerHTML]=\"highlightText(opt.name ?? opt.label ?? opt.value)\"></span>\n                <span *ngIf=\"!config?.displayLabelAsInnerHtml && !hasHighlighting\">\n                  {{ opt.name ?? opt.label ?? opt.value }}\n                </span>\n              </ng-template>\n            </ng-template>\n          </ng-container>\n        </mat-option>\n        \n        <!-- No results state (only when not loading and no options) -->\n        <mat-option disabled *ngIf=\"!(config?.options?.length || 0) && !(config?.isLoading || loadingMore)\">\n          No results\n        </mat-option>\n        <!-- Infinite scroll sentinel (serverSearch or explicit hasMore) -->\n        <mat-option disabled class=\"load-more-sentinel\" *ngIf=\"config?.hasMore\">\n          <span *ngIf=\"loadingMore || config?.isLoading\">Loading...</span>\n          <span *ngIf=\"!loadingMore && !config?.isLoading\">Scroll to load more…</span>\n        </mat-option>\n      </mat-select>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <!-- Inline spinner shown when loading more (infinite scroll) or when config.isLoading is true -->\n        <svg *ngIf=\"loadingMore || config?.isLoading\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n             xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n          <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n            <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n                              dur=\"0.8s\" repeatCount=\"indefinite\"/>\n          </path>\n        </svg>\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </div>\n      </mat-form-field>\n  </ng-container>\n\n  <ng-template #optionTestTypeIconTpl let-kind=\"kind\">\n    <span *ngIf=\"kind === 'mobile'\" class=\"cqa-inline-flex cqa-flex-shrink-0 cqa-items-center\" aria-hidden=\"true\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n        <path d=\"M6 5a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2v-14\"/>\n        <path d=\"M11 4h2\"/>\n        <path d=\"M12 17v.01\"/>\n      </svg>\n    </span>\n    <span *ngIf=\"kind === 'web'\" class=\"cqa-inline-flex cqa-flex-shrink-0 cqa-items-center\" aria-hidden=\"true\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/>\n        <path d=\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\"/>\n        <path d=\"M3.6 9h16.8\"/>\n        <path d=\"M3.6 15h16.8\"/>\n        <path d=\"M11.5 3a17 17 0 0 0 0 18\"/>\n        <path d=\"M12.5 3a17 17 0 0 1 0 18\"/>\n      </svg>\n    </span>\n    <span *ngIf=\"kind === 'other'\" class=\"cqa-inline-flex cqa-flex-shrink-0 cqa-items-center\" aria-hidden=\"true\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M4 6.5h16v11H4z\" stroke=\"#9CA3AF\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n        <path d=\"M8 6.5V5h8v1.5\" stroke=\"#9CA3AF\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n      </svg>\n    </span>\n  </ng-template>\n</div>","import { Directive, ElementRef, Input, Output, EventEmitter, OnInit, OnDestroy, OnChanges, SimpleChanges, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport * as jquery from 'jquery';\nimport * as momentImport from 'moment';\nimport 'daterangepicker';\n\n// Normalize module default/namespace interop for both ESM and CJS builds.\nconst $: any = (jquery as any).default || (jquery as any);\nconst moment: any = (momentImport as any).default || (momentImport as any);\n\n// Ensure globals are present for the daterangepicker plugin registration.\nif (typeof window !== 'undefined') {\n  (window as any).jQuery = (window as any).jQuery || $;\n  (window as any).$ = (window as any).$ || $;\n  (window as any).moment = (window as any).moment || moment;\n}\n\nexport interface DateRangePickerOptions {\n  startDate?: Date | string;\n  endDate?: Date | string;\n  minDate?: Date | string;\n  maxDate?: Date | string;\n  locale?: any;\n  ranges?: any;\n  opens?: 'left' | 'right' | 'center';\n  drops?: 'down' | 'up' | 'auto';\n  buttonClasses?: string;\n  applyButtonClasses?: string;\n  cancelButtonClasses?: string;\n  autoApply?: boolean;\n  alwaysShowCalendars?: boolean;\n  showDropdowns?: boolean;\n  showWeekNumbers?: boolean;\n  showISOWeekNumbers?: boolean;\n  singleDatePicker?: boolean;\n  timePicker?: boolean;\n  timePicker24Hour?: boolean;\n  timePickerIncrement?: number;\n  timePickerSeconds?: boolean;\n  linkedCalendars?: boolean;\n  autoUpdateInput?: boolean;\n  isInvalidDate?: (date: Date) => boolean;\n  isCustomDate?: (date: Date) => string | boolean;\n  parentEl?: string | HTMLElement;\n}\n\n@Directive({\n  selector: '[cqaDaterangepicker]',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DaterangepickerDirective),\n      multi: true\n    }\n  ]\n})\nexport class DaterangepickerDirective implements OnInit, OnDestroy, OnChanges, ControlValueAccessor {\n  @Input() options: DateRangePickerOptions = {};\n  @Input() startDate?: Date | string;\n  @Input() endDate?: Date | string;\n  @Input() minDate?: Date | string;\n  @Input() maxDate?: Date | string;\n  @Input() parentEl?: string | HTMLElement;\n  @Output() datesUpdated = new EventEmitter<{ startDate: Date | null; endDate: Date | null }>();\n  @Output() cancelClicked = new EventEmitter<void>();\n  @Output() applyClicked = new EventEmitter<{ startDate: Date | null; endDate: Date | null }>();\n\n  private pickerInstance: any;\n  private onChange = (value: any) => {};\n  private onTouched = () => {};\n\n  /**\n   * Safely update the input text to avoid \"Invalid date\" or \"undefined\" strings.\n   */\n  private updateInputValue(start: any, end: any): void {\n    if (typeof (window as any).moment === 'undefined') return;\n    const m = (window as any).moment;\n    const format = (this.options?.locale && this.options.locale.format) || 'MM/DD/YYYY';\n    const separator = (this.options?.locale && this.options.locale.separator) || ' - ';\n\n    const hasStart = start && m.isMoment(start);\n    const hasEnd = end && m.isMoment(end);\n\n    if (hasStart && hasEnd) {\n      try {\n        const text = `${start.format(format)}${separator}${end.format(format)}`;\n        $(this.el.nativeElement).val(text);\n      } catch {}\n    } else {\n      try {\n        $(this.el.nativeElement).val('');\n      } catch {}\n    }\n  }\n\n  constructor(private el: ElementRef) {}\n\n  ngOnInit(): void {\n    this.initDaterangepicker();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.pickerInstance) {\n      if (changes['startDate'] || changes['endDate']) {\n        this.updateDates();\n      }\n      if (changes['minDate'] || changes['maxDate']) {\n        this.updateMinMaxDates();\n      }\n      if (changes['options']) {\n        this.destroyPicker();\n        this.initDaterangepicker();\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroyPicker();\n  }\n\n  private initDaterangepicker(): void {\n    if (typeof $ === 'undefined' || typeof ($.fn as any).daterangepicker === 'undefined') {\n      console.error('jQuery and daterangepicker must be loaded');\n      return;\n    }\n\n    // Check if moment.js is available\n    if (typeof (window as any).moment === 'undefined') {\n      console.error('moment.js must be loaded for daterangepicker to work');\n      return;\n    }\n\n    // Resolve parent element to scope styles; allow override via options.parentEl, else use body.\n    const resolvedParentEl = this.parentEl || this.options?.parentEl || 'body';\n\n    const baseOptions: DateRangePickerOptions = {\n      opens: 'left',\n      drops: 'down',\n      autoApply: true,\n      autoUpdateInput: false, // we manage the input ourselves to prevent \"Invalid date\"\n      locale: {\n        format: 'MM/DD/YYYY',\n        separator: ' - ',\n        applyLabel: 'Apply',\n        cancelLabel: 'Cancel',\n        fromLabel: 'From',\n        toLabel: 'To',\n        customRangeLabel: 'Custom',\n        weekLabel: 'W',\n        daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n        monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n        firstDay: 0\n      },\n      parentEl: resolvedParentEl as any\n    };\n\n    // Merge options but force-disable plugin autoUpdateInput to avoid invalid values.\n    const defaultOptions: DateRangePickerOptions = {\n      ...baseOptions,\n      ...this.options,\n      locale: {\n        ...baseOptions.locale,\n        ...(this.options?.locale || {})\n      },\n      autoUpdateInput: false\n    };\n\n    // Convert Date objects to moment objects for daterangepicker\n    const toMoment = (d: Date | string | null | undefined): any => {\n      if (!d) return null;\n      if (typeof d === 'string') {\n        const lower = d.trim().toLowerCase();\n        if (lower === 'undefined' || lower === 'null' || lower === '') return null;\n      }\n      if (moment.isMoment && moment.isMoment(d)) return d;\n      const date = typeof d === 'string' ? new Date(d) : d;\n      if (date instanceof Date && !isNaN(date.getTime())) {\n        return moment(date);\n      }\n      return null;\n    };\n    \n    const startMoment = toMoment(this.startDate);\n    const endMoment = toMoment(this.endDate);\n    const minMoment = toMoment(this.minDate);\n    const maxMoment = toMoment(this.maxDate);\n    \n    if (startMoment) defaultOptions.startDate = startMoment;\n    if (endMoment) defaultOptions.endDate = endMoment;\n    if (minMoment) defaultOptions.minDate = minMoment;\n    if (maxMoment) defaultOptions.maxDate = maxMoment;\n\n    // If no initial dates, ensure the input is blank before plugin init.\n    if (!startMoment && !endMoment) {\n      try { $(this.el.nativeElement).val(''); } catch {}\n    }\n\n    // Initialize the picker\n    $(this.el.nativeElement).daterangepicker(defaultOptions, (start: any, end: any, label: string) => {\n      const startDate = start ? start.toDate() : null;\n      const endDate = end ? end.toDate() : null;\n      \n      this.onChange({ start: startDate, end: endDate });\n      this.datesUpdated.emit({ startDate, endDate });\n      this.applyClicked.emit({ startDate, endDate });\n      this.updateInputValue(start, end);\n    });\n\n    this.pickerInstance = $(this.el.nativeElement).data('daterangepicker');\n\n    // Ensure the overlay gets the styling scope class if not already present.\n    if (this.pickerInstance?.container) {\n      const c = this.pickerInstance.container;\n      if (!c.hasClass('cqa-ui-daterange-picker')) {\n        c.addClass('cqa-ui-daterange-picker');\n      }\n    }\n\n    // Handle cancel event\n    $(this.el.nativeElement).on('cancel.daterangepicker', () => {\n      this.cancelClicked.emit();\n      this.updateInputValue(null, null);\n    });\n\n    // Update initial value if provided\n    this.updateDates();\n  }\n\n  private updateDates(): void {\n    if (!this.pickerInstance) return;\n    if (typeof (window as any).moment === 'undefined') return;\n\n    const moment = (window as any).moment;\n    \n    // Convert Date objects to moment objects\n    const toMoment = (d: Date | string | null | undefined): any => {\n      if (!d) return null;\n      if (typeof d === 'string') {\n        const lower = d.trim().toLowerCase();\n        if (lower === 'undefined' || lower === 'null' || lower === '') return null;\n      }\n      if (moment.isMoment && moment.isMoment(d)) return d;\n      const date = typeof d === 'string' ? new Date(d) : d;\n      if (date instanceof Date && !isNaN(date.getTime())) {\n        return moment(date);\n      }\n      return null;\n    };\n    \n    const startMoment = toMoment(this.startDate);\n    const endMoment = toMoment(this.endDate);\n    \n    if (startMoment) {\n      this.pickerInstance.setStartDate(startMoment);\n    }\n    \n    if (endMoment) {\n      this.pickerInstance.setEndDate(endMoment);\n    }\n    \n    // Update input text to reflect current values\n    this.updateInputValue(startMoment, endMoment);\n  }\n\n  private updateMinMaxDates(): void {\n    if (!this.pickerInstance) return;\n    if (typeof (window as any).moment === 'undefined') return;\n\n    const moment = (window as any).moment;\n    \n    // Convert Date objects to moment objects\n    const toMoment = (d: Date | string | null | undefined): any => {\n      if (!d) return null;\n      if (moment.isMoment && moment.isMoment(d)) return d;\n      const date = typeof d === 'string' ? new Date(d) : d;\n      if (date instanceof Date && !isNaN(date.getTime())) {\n        return moment(date);\n      }\n      return null;\n    };\n    \n    const minMoment = toMoment(this.minDate);\n    const maxMoment = toMoment(this.maxDate);\n    \n    if (minMoment) {\n      this.pickerInstance.setMinDate(minMoment);\n    }\n    if (maxMoment) {\n      this.pickerInstance.setMaxDate(maxMoment);\n    }\n  }\n\n  private destroyPicker(): void {\n    if (this.pickerInstance && typeof $ !== 'undefined') {\n      $(this.el.nativeElement).off('cancel.daterangepicker');\n      $(this.el.nativeElement).data('daterangepicker')?.remove();\n      this.pickerInstance = null;\n    }\n  }\n\n  // ControlValueAccessor implementation\n  writeValue(value: { start: Date | null; end: Date | null } | null): void {\n    if (value && (value.start || value.end)) {\n      // Validate dates before setting\n      const isValidDate = (d: Date | null): boolean => {\n        return d !== null && d instanceof Date && !isNaN(d.getTime());\n      };\n      \n      this.startDate = (value.start && isValidDate(value.start)) ? value.start : undefined;\n      this.endDate = (value.end && isValidDate(value.end)) ? value.end : undefined;\n      this.updateDates();\n    } else if (value === null || (value && !value.start && !value.end)) {\n      this.startDate = undefined;\n      this.endDate = undefined;\n      if (this.pickerInstance) {\n        try {\n          const m = (window as any).moment;\n          if (m) {\n            // Reset picker internals to a safe value instead of null to avoid \"Invalid date\"\n            this.pickerInstance.setStartDate(m());\n            this.pickerInstance.setEndDate(m());\n          }\n          this.updateInputValue(null, null);\n        } catch {}\n      }\n    }\n  }\n\n  registerOnChange(fn: (value: any) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (this.el.nativeElement) {\n      this.el.nativeElement.disabled = isDisabled;\n    }\n  }\n}\n\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnInit, OnDestroy, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DaterangepickerDirective, DateRangePickerOptions } from './daterangepicker.directive';\n\n@Component({\n  selector: 'cqa-daterangepicker',\n  template: `\n    <div class=\"cqa-ui-root\">\n      <label *ngIf=\"label\" class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">\n        {{ label }}\n      </label>\n      <div class=\"cqa-daterangepicker-wrapper cqa-ui-daterange-picker\">\n        <input\n          #inputRef\n          type=\"text\"\n          class=\"cqa-daterangepicker-input\"\n          [placeholder]=\"placeholder || 'Start Date - End Date'\"\n          [readonly]=\"true\"\n          [disabled]=\"disabled\"\n          cqaDaterangepicker\n          [options]=\"pickerOptions\"\n          [startDate]=\"startDate\"\n          [endDate]=\"endDate\"\n          [minDate]=\"minDate\"\n          [maxDate]=\"maxDate\"\n          (datesUpdated)=\"onDatesUpdated($event)\"\n          (cancelClicked)=\"onCancel()\"\n          (applyClicked)=\"onApply($event)\"\n        />\n        <button\n          type=\"button\"\n          class=\"cqa-daterangepicker-icon\"\n          (click)=\"openPicker()\"\n          [disabled]=\"disabled\"\n          aria-label=\"Open date range picker\"\n        >\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M5.33398 1.33203V3.9987\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                      <path d=\"M10.666 1.33203V3.9987\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                      <path\n                        d=\"M12.6667 2.66797H3.33333C2.59695 2.66797 2 3.26492 2 4.0013V13.3346C2 14.071 2.59695 14.668 3.33333 14.668H12.6667C13.403 14.668 14 14.071 14 13.3346V4.0013C14 3.26492 13.403 2.66797 12.6667 2.66797Z\"\n                        stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                      <path d=\"M2 6.66797H14\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n                        stroke-linejoin=\"round\" />\n                    </svg>\n        </button>\n      </div>\n    </div>\n  `,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DaterangepickerComponent),\n      multi: true\n    }\n  ]\n})\nexport class DaterangepickerComponent implements OnInit, OnDestroy, ControlValueAccessor {\n  @Input() label?: string;\n  @Input() placeholder?: string;\n  @Input() disabled = false;\n  @Input() startDate?: Date | string;\n  @Input() endDate?: Date | string;\n  @Input() minDate?: Date | string;\n  @Input() maxDate?: Date | string;\n  @Input() ranges?: any;\n  @Input() autoApply = false;\n  @Input() alwaysShowCalendars = false;\n  @Input() opens: 'left' | 'right' | 'center' = 'center';\n  @Input() drops: 'down' | 'up' | 'auto' = 'down';\n  @Input() isInvalidDate?: (date: Date) => boolean;\n  @Input() parentEl?: string | HTMLElement;\n\n  @Output() datesUpdated = new EventEmitter<{ startDate: Date | null; endDate: Date | null }>();\n  @Output() cancelClicked = new EventEmitter<void>();\n  @Output() applyClicked = new EventEmitter<{ startDate: Date | null; endDate: Date | null }>();\n\n  @ViewChild('inputRef', { static: true }) inputRef!: ElementRef<HTMLInputElement>;\n\n  pickerOptions: DateRangePickerOptions = {};\n\n  private onChange = (value: { start: Date | null; end: Date | null } | null) => {};\n  private onTouched = () => {};\n\n  ngOnInit(): void {\n    this.pickerOptions = {\n      startDate: this.startDate ? new Date(this.startDate) : undefined,\n      endDate: this.endDate ? new Date(this.endDate) : undefined,\n      minDate: this.minDate ? new Date(this.minDate) : undefined,\n      maxDate: this.maxDate ? new Date(this.maxDate) : undefined,\n      ranges: this.ranges,\n      autoApply: this.autoApply,\n      alwaysShowCalendars: this.alwaysShowCalendars,\n      opens: this.opens,\n      drops: this.drops,\n      isInvalidDate: this.isInvalidDate,\n      parentEl: this.parentEl,\n      locale: {\n        format: 'MM/DD/YYYY',\n        separator: ' - ',\n        applyLabel: 'Apply',\n        cancelLabel: 'Cancel',\n        fromLabel: 'From',\n        toLabel: 'To',\n        customRangeLabel: 'Custom',\n        weekLabel: 'W',\n        daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n        monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n        firstDay: 0\n      }\n    };\n  }\n\n  ngOnDestroy(): void {\n    // Cleanup handled by directive\n  }\n\n  onDatesUpdated(event: { startDate: Date | null; endDate: Date | null }): void {\n    this.startDate = event.startDate || undefined;\n    this.endDate = event.endDate || undefined;\n    this.onChange({ start: event.startDate, end: event.endDate });\n    this.datesUpdated.emit(event);\n  }\n\n  onCancel(): void {\n    this.cancelClicked.emit();\n  }\n\n  onApply(event: { startDate: Date | null; endDate: Date | null }): void {\n    this.applyClicked.emit(event);\n  }\n\n  // ControlValueAccessor implementation\n  writeValue(value: { start: Date | null; end: Date | null } | null): void {\n    if (value) {\n      this.startDate = value.start || undefined;\n      this.endDate = value.end || undefined;\n    } else {\n      this.startDate = undefined;\n      this.endDate = undefined;\n    }\n  }\n\n  registerOnChange(fn: (value: { start: Date | null; end: Date | null } | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  openPicker(): void {\n    if (this.disabled || !this.inputRef?.nativeElement) return;\n    this.inputRef.nativeElement.focus();\n    this.inputRef.nativeElement.click();\n  }\n}\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, ViewChildren, QueryList } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';\nimport { DynamicSelectFieldComponent } from '../../dynamic-select/dynamic-select-field.component';\n\ntype FilterType = 'select' | 'date-range-picker';\n\nexport interface DynamicFilterOption {\n  id?: number | string;\n  name?: string;\n  value?: any;\n  label?: string;\n}\n\nexport interface DynamicFilterItem {\n  label: string;\n  placeholder?: string;\n  type: FilterType;\n  key: string;\n  opens?: 'left' | 'right' | 'center';\n  drops?: 'down' | 'up' | 'auto';\n  options?: DynamicFilterOption[];\n  multiple?: boolean;\n  disabled?: boolean;\n  hidden?: boolean;\n  searchable?: boolean;\n  optionStyle?: 'checkmark' | 'checkbox';\n  showSelectAll?: boolean;\n  selectAllLabel?: string;\n  selectedValue?: any | any[];\n  // Server-driven select support (passthrough to cqa-dynamic-select)\n  serverSearch?: boolean;\n  /** More results available server-side for infinite scroll */\n  hasMore?: boolean;\n  /** External loading state for async fetching */\n  isLoading?: boolean;\n  /** Callback when search text changes (server mode) */\n  onSearch?: (query: string) => void;\n  /** Callback when more data is requested (infinite scroll) */\n  onLoadMore?: (query?: string) => void;\n  selectedStartDate?: Date | string;\n  selectedEndDate?: Date | string;\n  onDateChange?: (value: { start: Date | null; end: Date | null }, event?: MatDatepickerInputEvent<Date> | Event) => void;\n  parentEl?: string | HTMLElement;\n}\n\nexport interface DynamicFilterValues {\n  [key: string]: any;\n}\n\n@Component({\n  selector: 'cqa-dynamic-filter',\n  templateUrl: './dynamic-filter.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class DynamicFilterComponent implements OnChanges, OnDestroy {\n  @Input() config: DynamicFilterItem[] = [];\n  @Input() model: DynamicFilterValues = {};\n  @Input() showFilterPanel: boolean = true;\n  @Input() buttonLayout: 'left' | 'right' | 'bottom' = 'bottom';\n  @Output() filtersApplied = new EventEmitter<DynamicFilterValues>();\n  @Output() filtersChanged = new EventEmitter<DynamicFilterValues>();\n  @Output() resetAction = new EventEmitter<void>();\n  @Output() onApplyFilterClick = new EventEmitter<DynamicFilterValues>();\n  @Output() onResetFilterClick = new EventEmitter<void>();\n\n  form: FormGroup = this.fb.group({});\n  maxDate = new Date();\n  searchTextByKey: Record<string, string> = {};\n  private selectOutsideCleanup = new Map<any, () => void>();\n  hasSelectedFilters = false;\n  @ViewChildren(DynamicSelectFieldComponent) selectComponents?: QueryList<DynamicSelectFieldComponent>;\n  private formValueChangesSub?: Subscription;\n\n  constructor(private readonly fb: FormBuilder) {\n    // Ensure maxDate is the end of today, so any future dates are disallowed\n    this.maxDate = this.endOfDay(new Date());\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['config'] || changes['model']) {\n      this.buildForm();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.formValueChangesSub?.unsubscribe();\n  }\n\n  onDateChange(event: MatDatepickerInputEvent<Date> | Event, key: string): void {\n    this.invokeDateRangeChange(key, event);\n  }\n\n  // NGX DateRangePicker integration\n  ngxDateRangeByKey: Record<string, any> = {};\n  ngxRanges: any = {}; // Using 'any' to avoid Dayjs type mismatch - library accepts Date objects at runtime\n  ngxLocale = { customRangeLabel: 'Custom range' };\n  // Disable all dates after today in the ngx datepicker\n  disableFutureDates = (m: any): boolean => {\n    try {\n      const d: Date = m && typeof m.toDate === 'function' ? m.toDate() : new Date(m);\n      return d.getTime() > this.maxDate.getTime();\n    } catch {\n      return false;\n    }\n  };\n  onNgxDatesUpdated(e: any, key: string): void {\n    const group = this.getDateGroup(key);\n    if (!group) return;\n    const clamp = (d: Date | null) => (d && d.getTime() > this.maxDate.getTime() ? this.maxDate : d);\n    const startRaw = e?.startDate ? (typeof e.startDate.toDate === 'function' ? e.startDate.toDate() : new Date(e.startDate)) : null;\n    const endRaw = e?.endDate ? (typeof e.endDate.toDate === 'function' ? e.endDate.toDate() : new Date(e.endDate)) : null;\n    const start = clamp(startRaw);\n    const end = clamp(endRaw);\n    group.patchValue({ start, end }, { emitEvent: true });\n    const serialized = this.serialize();\n    this.hasSelectedFilters = Object.keys(serialized).length > 0;\n    if (start && end && group.valid) {\n      this.apply();\n    } else {\n      this.filtersChanged.emit(serialized);\n    }\n  }\n\n  private buildForm(): void {\n    this.formValueChangesSub?.unsubscribe();\n    const ctrls: Record<string, any> = {};\n    (this.config || []).forEach(c => {\n      if (c.hidden) return;\n      if (c.type === 'date-range-picker') {\n        const initialRange = this.getInitialDateRangeValue(c);\n        ctrls[c.key] = this.fb.group({\n          start: new FormControl(initialRange.start),\n          end: new FormControl(initialRange.end),\n        });\n        // initialize ngx model display\n        this.ngxDateRangeByKey[c.key] = {\n          startDate: initialRange.start || null,\n          endDate: initialRange.end || null\n        };\n      } else {\n        const initial = this.resolveInitialSelectValue(c);\n        if (c.multiple) {\n          const value = Array.isArray(initial) ? initial : (initial != null ? [initial] : []);\n          ctrls[c.key] = new FormControl(value);\n        } else {\n          ctrls[c.key] = new FormControl(this.coerceToSingleValue(initial));\n        }\n      }\n    });\n    this.form = this.fb.group(ctrls);\n    // initialize apply button state based on initial values\n    this.hasSelectedFilters = Object.keys(this.serialize()).length > 0;\n    // build common ranges for ngx datepicker\n    this.ngxRanges = this.buildNgxRanges();\n    this.formValueChangesSub = this.form.valueChanges.subscribe(() => {\n      const serialized = this.serialize();\n      this.hasSelectedFilters = Object.keys(serialized).length > 0;\n      this.filtersChanged.emit(serialized);\n    });\n  }\n\n  onSelectOpenedChange(opened: boolean, select: any): void {\n    if (opened) {\n      setTimeout(() => {\n        const onDocDown = (e: MouseEvent) => {\n          const panel = document.querySelector('.cdk-overlay-pane .mat-select-panel') as HTMLElement | null;\n          const target = e.target as Node | null;\n          const originEl = (select?._elementRef?.nativeElement as HTMLElement) || null;\n          const insidePanel = !!(panel && target && panel.contains(target));\n          const insideOrigin = !!(originEl && target && originEl.contains(target));\n          if (!insidePanel && !insideOrigin) {\n            select.close();\n          }\n        };\n        document.addEventListener('mousedown', onDocDown, true);\n        this.selectOutsideCleanup.set(select, () => document.removeEventListener('mousedown', onDocDown, true));\n      }, 0);\n    } else {\n      const cleanup = this.selectOutsideCleanup.get(select);\n      if (cleanup) cleanup();\n      this.selectOutsideCleanup.delete(select);\n    }\n  }\n\n  onSearch(key: string, text: string): void {\n    this.searchTextByKey[key] = (text || '').toLowerCase();\n  }\n\n  filteredOptions(item: DynamicFilterItem): DynamicFilterOption[] {\n    const options = item?.options || [];\n    const q = (this.searchTextByKey[item.key] || '').trim();\n    if (!q) return options;\n    return options.filter(opt => {\n      const name = (opt.name ?? opt.label ?? String(opt.value ?? '')).toLowerCase();\n      return name.includes(q);\n    });\n  }\n\n  getDateGroup(key: string): FormGroup {\n    return this.form.get(key) as FormGroup;\n  }\n\n  getSelectConfig(item: DynamicFilterItem): DynamicSelectFieldConfig {\n    return {\n      key: item.key,\n      label: item.label,\n      placeholder: item.placeholder,\n      disabled: item.disabled,\n      multiple: item.multiple,\n      searchable: item.searchable,\n      optionStyle: item.optionStyle,\n      showSelectAll: item.showSelectAll,\n      selectAllLabel: item.selectAllLabel,\n      selectedValue: item.selectedValue,\n      serverSearch: item.serverSearch,\n      hasMore: item.hasMore,\n      isLoading: item.isLoading,\n      onSearch: item.onSearch,\n      onLoadMore: item.onLoadMore,\n      options: item.options || []\n    };\n  }\n\n  apply(): void {\n    this.closeAllOpenSelects();\n    const filterValues = this.serialize();\n    this.filtersApplied.emit(filterValues);\n    this.onApplyFilterClick.emit(filterValues);\n  }\n\n  reset(): void {\n    this.closeAllOpenSelects();\n    Object.keys(this.form.controls).forEach(key => {\n      const ctrl = this.form.get(key);\n      if (ctrl instanceof FormGroup) {\n        ctrl.get('start')?.setValue(undefined);\n        ctrl.get('end')?.setValue(undefined);\n        // Clear the date range picker display model\n        if (this.ngxDateRangeByKey[key]) {\n          this.ngxDateRangeByKey[key] = {\n            startDate: null,\n            endDate: null\n          };\n        }\n        this.invokeDateRangeChange(key);\n      } else {\n        ctrl?.setValue(undefined);\n      }\n    });\n    this.resetAction.emit();\n    this.onResetFilterClick.emit();\n    const serialized = this.serialize();\n    this.hasSelectedFilters = Object.keys(serialized).length > 0;\n    this.filtersChanged.emit(serialized);\n  }\n\n  /** Close any open MatSelect panels before primary actions to avoid double-click issues */\n  preparePrimaryAction(): void {\n    this.closeAllOpenSelects();\n  }\n\n  private closeAllOpenSelects(): void {\n    try {\n      this.selectComponents?.forEach(c => c.closePanel());\n    } catch {}\n  }\n\n  private serialize(): DynamicFilterValues {\n    const result: DynamicFilterValues = {};\n    (this.config || []).forEach(c => {\n      const ctrl = this.form.get(c.key);\n      if (!ctrl) return;\n      let val: any = ctrl instanceof FormGroup ? (ctrl as FormGroup).getRawValue() : ctrl.value;\n      if (c.type === 'date-range-picker') {\n        const start = val?.start; const end = val?.end;\n        if (start || end) result[c.key] = { start, end };\n      } else {\n        if (val !== undefined && val !== null && (Array.isArray(val) ? val.length > 0 : val !== '')) {\n          result[c.key] = val;\n        }\n      }\n    });\n    return result;\n  }\n\n  private resolveInitialSelectValue(item: DynamicFilterItem): any {\n    if (this.model && Object.prototype.hasOwnProperty.call(this.model, item.key)) {\n      return this.model[item.key];\n    }\n    if (item.selectedValue !== undefined) {\n      return item.selectedValue;\n    }\n    return undefined;\n  }\n\n  private coerceToSingleValue(value: any): any {\n    if (value === null || value === undefined) return undefined;\n    if (Array.isArray(value)) {\n      return value.length ? value[0] : undefined;\n    }\n    return value;\n  }\n\n  private getInitialDateRangeValue(item: DynamicFilterItem): { start: Date | null; end: Date | null } {\n    const modelValue = this.model?.[item.key];\n    const startSource = modelValue?.start ?? item.selectedStartDate ?? null;\n    const endSource = modelValue?.end ?? item.selectedEndDate ?? null;\n    const start = this.normalizeDateValue(startSource);\n    const end = this.normalizeDateValue(endSource);\n    const clamp = (d: Date | null) => (d && d.getTime() > this.maxDate.getTime() ? this.maxDate : d);\n    return { start: clamp(start), end: clamp(end) };\n  }\n\n  private normalizeDateValue(value: any): Date | null {\n    if (!value) return null;\n    if (value instanceof Date && !isNaN(value.getTime())) {\n      return value;\n    }\n    const parsed = new Date(value);\n    return isNaN(parsed.getTime()) ? null : parsed;\n  }\n\n  private invokeDateRangeChange(key: string, event?: MatDatepickerInputEvent<Date> | Event): void {\n    const item = (this.config || []).find(cfg => cfg.key === key);\n    if (!item?.onDateChange) return;\n    const dateGroup = this.getDateGroup(key);\n    if (!dateGroup) return;\n    const { start, end } = dateGroup.getRawValue() || {};\n    item.onDateChange(\n      {\n        start: this.normalizeDateValue(start),\n        end: this.normalizeDateValue(end),\n      },\n      event\n    );\n  }\n\n  // Mat date range picker overlay preset helpers\n  applyPresetToGroup(key: string, presetKey: 'today' | 'last7days' | 'last30days' | 'last90days' | 'thismonth' | 'lastmonth'): void {\n    const dateGroup = this.getDateGroup(key);\n    if (!dateGroup) return;\n    const { start, end } = this.getPresetDates(presetKey);\n    dateGroup.patchValue({ start, end });\n    this.filtersChanged.emit(this.serialize());\n    this.invokeDateRangeChange(key);\n  }\n\n  private getPresetDates(presetKey: 'today' | 'last7days' | 'last30days' | 'last90days' | 'thismonth' | 'lastmonth'): { start: Date; end: Date } {\n    const today = new Date();\n    const clampToEndOfToday = (d: Date) => { const nd = new Date(d); nd.setHours(23,59,59,999); return nd; };\n    switch (presetKey) {\n      case 'today':\n        return { start: today, end: today };\n      case 'last7days': {\n        const start = new Date(); start.setDate(start.getDate() - 6);\n        return { start, end: today };\n      }\n      case 'last30days': {\n        const start = new Date(); start.setDate(start.getDate() - 29);\n        return { start, end: today };\n      }\n      case 'last90days': {\n        const start = new Date(); start.setDate(start.getDate() - 89);\n        return { start, end: today };\n      }\n      case 'thismonth': {\n        const start = new Date(today.getFullYear(), today.getMonth(), 1);\n        return { start, end: today };\n      }\n      case 'lastmonth': {\n        const start = new Date(today.getFullYear(), today.getMonth() - 1, 1);\n        const end = new Date(today.getFullYear(), today.getMonth(), 0);\n        return { start, end: clampToEndOfToday(end) };\n      }\n    }\n  }\n  private startOfDay(d: Date): Date { const nd = new Date(d); nd.setHours(0,0,0,0); return nd; }\n  private endOfDay(d: Date): Date { const nd = new Date(d); nd.setHours(23,59,59,999); return nd; }\n  private startOfMonth(year: number, month: number): Date { return new Date(year, month, 1, 0,0,0,0); }\n  private endOfMonth(year: number, month: number): Date { return new Date(year, month + 1, 0, 23,59,59,999); }\n  private buildNgxRanges(): Record<string, [Date, Date]> {\n    const today = new Date();\n    const last7Start = new Date(); last7Start.setDate(last7Start.getDate() - 6);\n    const last30Start = new Date(); last30Start.setDate(last30Start.getDate() - 29);\n    const last90Start = new Date(); last90Start.setDate(last90Start.getDate() - 89);\n    const thisMonthStart = this.startOfMonth(today.getFullYear(), today.getMonth());\n    const lastMonthStart = this.startOfMonth(today.getFullYear(), today.getMonth() - 1);\n    const lastMonthEnd = this.endOfMonth(today.getFullYear(), today.getMonth() - 1);\n    return {\n      'Today': [this.startOfDay(today), this.endOfDay(today)],\n      'Last 7 Days': [this.startOfDay(last7Start), this.endOfDay(today)],\n      'Last 30 Days': [this.startOfDay(last30Start), this.endOfDay(today)],\n      'Last 90 Days': [this.startOfDay(last90Start), this.endOfDay(today)],\n      'This Month': [this.startOfDay(thisMonthStart), this.endOfDay(today)],\n      'Last Month': [this.startOfDay(lastMonthStart), this.endOfDay(lastMonthEnd)],\n    };\n  }\n  onDaterangepickerChange(event: { startDate: Date | null; endDate: Date | null }, key: string): void {\n    const group = this.getDateGroup(key);\n    if (!group) return;\n    \n    group.patchValue({\n      start: event.startDate,\n      end: event.endDate\n    }, { emitEvent: true });\n    \n    const serialized = this.serialize();\n    this.hasSelectedFilters = Object.keys(serialized).length > 0;\n    this.filtersChanged.emit(serialized);\n    this.invokeDateRangeChange(key);\n  }\n\n  onDaterangepickerApply(event: { startDate: Date | null; endDate: Date | null }, key: string): void {\n    this.onDaterangepickerChange(event, key);\n    // Optionally trigger apply action\n    const serialized = this.serialize();\n    if (event.startDate && event.endDate) {\n      // Don't auto-apply, let user click Apply Filter button\n    }\n  }\n\n  getDaterangepickerRanges(): any {\n    // Use the existing getPresetDates logic to ensure consistency\n    const todayPreset = this.getPresetDates('today');\n    const last7Preset = this.getPresetDates('last7days');\n    const last30Preset = this.getPresetDates('last30days');\n    const last90Preset = this.getPresetDates('last90days');\n    const thisMonthPreset = this.getPresetDates('thismonth');\n    const lastMonthPreset = this.getPresetDates('lastmonth');\n    \n    return {\n      'Today': [todayPreset.start, this.endOfDay(todayPreset.end)],\n      'Last 7 Days': [last7Preset.start, this.endOfDay(last7Preset.end)],\n      'Last 30 Days': [last30Preset.start, this.endOfDay(last30Preset.end)],\n      'Last 90 Days': [last90Preset.start, this.endOfDay(last90Preset.end)],\n      'This Month': [thisMonthPreset.start, this.endOfDay(thisMonthPreset.end)],\n      'Last Month': [lastMonthPreset.start, this.endOfDay(lastMonthPreset.end)]\n    };\n  }\n\n  getDateValidationError(key: string): string | null {\n    const dateGroup = this.getDateGroup(key);\n    if (!dateGroup) return null;\n\n    const startCtrl = dateGroup.controls['start'];\n    const endCtrl = dateGroup.controls['end'];\n    const startVal = startCtrl?.value;\n    const endVal = endCtrl?.value;\n\n    if (!startVal && !endVal) return null;\n\n    if (startVal && !endVal) return `Please select an end date`;\n    if (!startVal && endVal) return `Please select a start date`;\n\n    if (dateGroup.invalid) {\n      const config = this.config?.find(c => c.key === key);\n      return config ? `${config.label} is invalid` : 'Date range is invalid';\n    }\n\n    return null;\n  }\n\n  // Dynamic Date Picker Integration Methods removed (component no longer used)\n}\n\n\n","<div class=\"cqa-ui-root cqa-ui-daterange-picker\">\n  <div class=\"cqa-filter cqa-mb-[28px]\" *ngIf=\"showFilterPanel\" style=\"height: auto;\">\n    <!-- Bottom Layout: Current design with selectors in grid and buttons below -->\n    <ng-container *ngIf=\"buttonLayout === 'bottom'\">\n      <form class=\"ts-form cqa-grid lg:cqa-grid-cols-4 md:cqa-grid-cols-2 cqa-gap-4 cqa-relative\" [formGroup]=\"form\"\n        (keydown.enter)=\"(false)\" novalidate=\"novalidate\">\n        <ng-container *ngFor=\"let c of config\">\n          <ng-container *ngIf=\"!c.hidden\">\n            <div class=\"form-group cus-range-select cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width cqa-w-full\">\n              <!-- Select -->\n              <ng-container *ngIf=\"c.type === 'select'\">\n                <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n              </ng-container>\n\n              <!-- Date Range Picker -->\n              <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n                <cqa-daterangepicker\n                  [label]=\"c.label\"\n                  [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n                  [disabled]=\"c.disabled || false\"\n                  [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n                  [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n                  [minDate]=\"undefined\"\n                  [maxDate]=\"maxDate\"\n                  [ranges]=\"getDaterangepickerRanges()\"\n                  [autoApply]=\"true\"\n                  [alwaysShowCalendars]=\"true\"\n                  [opens]=\"c.opens || 'center'\"\n                  [drops]=\"c.drops || 'auto'\"\n                  [parentEl]=\"c.parentEl\"\n                  (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n                  (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n                </cqa-daterangepicker>\n                <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n                  {{ getDateValidationError(c.key) }}\n                </mat-error>\n              </ng-container>\n            </div>\n          </ng-container>\n        </ng-container>\n      </form>\n\n      <div class=\"cqa-flex cqa-justify-end cqa-items-stretch cqa-gap-2 cqa-mt-4\">\n        <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n        <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\" [disabled]=\"!hasSelectedFilters\">Reset</cqa-button>\n      </div>\n    </ng-container>\n\n    <!-- Right Layout: Buttons on leftmost side, selectors on rightmost side -->\n    <ng-container *ngIf=\"buttonLayout === 'right'\">\n      <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n        (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n        <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-first cqa-mr-auto\">\n          <cqa-button variant=\"filled\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n          <cqa-button variant=\"outlined\" (clicked)=\"reset()\" [disabled]=\"!hasSelectedFilters\">Reset</cqa-button>\n        </div>\n        <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-justify-end cqa-order-last cqa-ml-auto\">\n          <ng-container *ngFor=\"let c of config\">\n          <ng-container *ngIf=\"!c.hidden\">\n            <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n              <!-- Select -->\n              <ng-container *ngIf=\"c.type === 'select'\">\n                <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n              </ng-container>\n\n              <!-- Date Range (Daterangepicker) --> \n              <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n                <cqa-daterangepicker\n                  [label]=\"c.label\"\n                  [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n                  [disabled]=\"c.disabled || false\"\n                  [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n                  [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n                  [minDate]=\"undefined\"\n                  [maxDate]=\"maxDate\"\n                  [ranges]=\"getDaterangepickerRanges()\"\n                  [autoApply]=\"true\"\n                  [alwaysShowCalendars]=\"true\"\n                  [opens]=\"c.opens || 'center'\"\n                  [drops]=\"c.drops || 'auto'\"\n                  [parentEl]=\"c.parentEl\"\n                  (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n                  (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n                </cqa-daterangepicker>\n                <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n                  {{ getDateValidationError(c.key) }}\n                </mat-error>\n              </ng-container>\n            </div>\n          </ng-container>\n        </ng-container>\n        </div>\n      </form>\n    </ng-container>\n\n    <!-- Left Layout: Selectors on leftmost side, buttons on rightmost side -->\n    <ng-container *ngIf=\"buttonLayout === 'left'\">\n      <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n        (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n        <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-order-first cqa-mr-auto\">\n          <ng-container *ngFor=\"let c of config\">\n          <ng-container *ngIf=\"!c.hidden\">\n            <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n              <!-- Select -->\n              <ng-container *ngIf=\"c.type === 'select'\">\n                <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n              </ng-container>\n\n              <!-- Date Range (Daterangepicker) --> \n              <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n                <cqa-daterangepicker\n                  [label]=\"c.label\"\n                  [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n                  [disabled]=\"c.disabled || false\"\n                  [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n                  [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n                  [minDate]=\"undefined\"\n                  [maxDate]=\"maxDate\"\n                  [ranges]=\"getDaterangepickerRanges()\"\n                  [autoApply]=\"true\"\n                  [alwaysShowCalendars]=\"true\"\n                  [opens]=\"c.opens || 'center'\"\n                  [drops]=\"c.drops || 'auto'\"\n                  [parentEl]=\"c.parentEl\"\n                  (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n                  (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n                </cqa-daterangepicker>\n                <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n                  {{ getDateValidationError(c.key) }}\n                </mat-error>\n              </ng-container>\n            </div>\n          </ng-container>\n        </ng-container>\n        </div>\n        <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-last cqa-ml-auto\">\n          <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n          <cqa-button variant=\"outlined\"  (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\" [disabled]=\"!hasSelectedFilters\">Reset</cqa-button>\n        </div>\n      </form>\n    </ng-container>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nexport interface ColumnVisibilityConfig {\n  type?: boolean;\n  priority?: boolean;\n  result?: boolean;\n  status?: boolean;\n  labels?: boolean;\n  createdBy?: boolean;\n  createdAt?: boolean;\n  updatedAt?: boolean;\n  lastRun?: boolean;\n  // Allow additional keys\n  [key: string]: any;\n}\n\n@Component({\n  selector: 'cqa-column-visibility',\n  templateUrl: './column-visibility.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class ColumnVisibilityComponent implements OnChanges {\n  @Input() isStepGroup: boolean = false;\n  // Dynamic columns (preferred). Each item defines the id used as key and the label to render.\n  @Input() columns: Array<{ id: string; label: string }> = [];\n  // Start with an empty visibility map; keys will be added from 'columns'\n  @Input() columnVisibility: ColumnVisibilityConfig = {};\n  @Input() selectedAutoRefreshInterval: number = 0; // 0 = Off\n\n  @Output() columnVisibilityChange = new EventEmitter<ColumnVisibilityConfig>();\n  @Output() autoRefreshChange = new EventEmitter<number>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // When dynamic columns change, ensure we have keys in the visibility map\n    if (changes['columns'] && Array.isArray(this.columns) && this.columns.length) {\n      for (const col of this.columns) {\n        if (this.columnVisibility[col.id] === undefined) {\n          this.columnVisibility[col.id] = true;\n        }\n      }\n    }\n  }\n\n  get areAllColumnsSelected(): boolean {\n    const keys = this.getTogglableKeys();\n    return keys.every(k => !!this.columnVisibility[k]);\n  }\n\n  toggleAllColumns(checked: boolean): void {\n    const keys = this.getTogglableKeys();\n    for (const k of keys) {\n      this.columnVisibility[k] = checked;\n    }\n    this.saveColumnPreferences();\n  }\n\n  saveColumnPreferences(): void {\n    this.columnVisibilityChange.emit({ ...this.columnVisibility });\n  }\n\n  onAutoRefreshChange(): void {\n    this.autoRefreshChange.emit(this.selectedAutoRefreshInterval);\n  }\n\n  private getTogglableKeys(): string[] {\n    return Array.isArray(this.columns) ? this.columns.map(c => c.id) : [];\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <cqa-button\n    variant=\"grey-solid\"\n    icon=\"settings\"\n    [matMenuTriggerFor]=\"settingsMenu\"\n    aria-label=\"Settings\"\n    [tooltip]=\"'Column settings'\"\n    tooltipPosition=\"below\">\n  </cqa-button>\n\n  <mat-menu #settingsMenu=\"matMenu\" class=\"cqa-table-settings-menu\">\n    <div class=\"settings-menu-content cqa-p-[17px]\" (click)=\"$event.stopPropagation()\">\n      <div class=\"settings-section cqa-mb-3\">\n        <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Show Columns</h4>\n        <div class=\"settings-options cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n          <mat-checkbox [checked]=\"areAllColumnsSelected\" (change)=\"toggleAllColumns($event.checked)\"\n            class=\"select-all-checkbox\">\n            {{ areAllColumnsSelected ? 'Unselect All' : 'Select All' }}\n          </mat-checkbox>\n          <!-- Dynamic column list -->\n          <ng-container *ngIf=\"columns?.length\">\n            <mat-checkbox *ngFor=\"let col of columns\" [(ngModel)]=\"columnVisibility[col.id]\"\n              (change)=\"saveColumnPreferences()\">\n              {{ col.label }}\n            </mat-checkbox>\n          </ng-container>\n        </div>\n      </div>\n\n      <div class=\"settings-section\">\n        <h4 class=\"settings-title cqa-font-bold cqa-text-[14px] cqa-leading-[20px] cqa-mb-2\">Auto refresh every</h4>\n        <div class=\"refresh-options\">\n          <mat-radio-group [(ngModel)]=\"selectedAutoRefreshInterval\" (change)=\"onAutoRefreshChange()\"\n            class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-text-[14px] cqa-leading-[20px]\">\n            <label><mat-radio-button [value]=\"10000\">10 Seconds</mat-radio-button></label>\n            <label><mat-radio-button [value]=\"20000\">20 Seconds</mat-radio-button></label>\n            <label><mat-radio-button [value]=\"30000\">30 Seconds</mat-radio-button></label>\n            <label><mat-radio-button [value]=\"0\">Off</mat-radio-button></label>\n          </mat-radio-group>\n        </div>\n      </div>\n    </div>\n  </mat-menu>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface TableAction {\n  id: string;\n  label: string;\n  icon: string;\n  tooltip?: string;\n  show?: (context: { selected: any[] }) => boolean;\n  disabled?: (context: { selected: any[] }) => boolean;\n  onClick?: (context: { id: string; selected: any[] }) => void;\n  action?: (context: { id: string; selected: any[] }) => void; // Support 'action' as an alias for onClick\n}\n\n@Component({\n  selector: 'cqa-table-action-toolbar',\n  templateUrl: './table-action-toolbar.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class TableActionToolbarComponent {\n  @Input() selectedItems: any[] = [];\n  @Input() actions: TableAction[] = [];\n\n  /** When true, show a \"Select all\" checkbox next to the selection count (e.g. for test case details). */\n  @Input() showSelectAll: boolean = false;\n  /** Bound to the Select all checkbox when showSelectAll is true. */\n  @Input() allSelected: boolean = false;\n  /** When true, show a dismiss (X) button at the end of the toolbar. */\n  @Input() showDismiss: boolean = false;\n\n  @Output() actionClick = new EventEmitter<{ id: string; selected: any[] }>();\n  @Output() selectAllChange = new EventEmitter<boolean>();\n  @Output() dismiss = new EventEmitter<void>();\n\n  /** Cooldown ms to prevent double-click from firing the same action twice */\n  private lastActionEmit: { id: string; time: number } | null = null;\n  private static readonly ACTION_COOLDOWN_MS = 500;\n\n  get hasSelection(): boolean {\n    return (this.selectedItems?.length || 0) > 0;\n  }\n\n  get isSingleSelection(): boolean {\n    return this.selectedItems?.length === 1;\n  }\n\n  get selectionLabel(): string {\n    const n = this.selectedItems?.length || 0;\n    return n === 1 ? '1 selected' : `${n} selected`;\n  }\n\n  visibleActions(): TableAction[] {\n    const ctx = { selected: this.selectedItems || [] };\n    return (this.actions || []).filter(a => (a.show ? a.show(ctx) : true));\n  }\n\n  isDisabled(action: TableAction): boolean {\n    const ctx = { selected: this.selectedItems || [] };\n    return action.disabled ? !!action.disabled(ctx) : false;\n  }\n\n  /**\n   * Keep first click actionable by preventing pointer down from being used only for focus transfer.\n   */\n  onActionMouseDown(event: MouseEvent, action: TableAction): void {\n    if (this.isDisabled(action) || event.button !== 0) {\n      return;\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    this.onAction(action);\n  }\n\n  onAction(action: TableAction): void {\n    if (this.isDisabled(action)) {\n      return;\n    }\n    const now = Date.now();\n    if (\n      this.lastActionEmit &&\n      this.lastActionEmit.id === action.id &&\n      now - this.lastActionEmit.time < TableActionToolbarComponent.ACTION_COOLDOWN_MS\n    ) {\n      return;\n    }\n    this.lastActionEmit = { id: action.id, time: now };\n    const context = { id: action.id, selected: this.selectedItems || [] };\n    if (action.onClick) {\n      action.onClick(context);\n    } else if (action.action) {\n      action.action(context);\n    }\n    this.actionClick.emit(context);\n  }\n\n  onSelectAllChange(checked: boolean): void {\n    this.selectAllChange.emit(checked);\n  }\n\n  onDismiss(): void {\n    this.dismiss.emit();\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div\n    class=\"action-toolbar cqa-flex cqa-items-center cqa-justify-center xl:cqa-justify-between cqa-gap-2 cqa-flex-wrap cqa-py-[15.5px] sm:cqa-px-[34px] cqa-px-[20px] cqa-bg-primary cqa-text-white cqa-rounded-[7px] cqa-shadow-md\"\n    *ngIf=\"hasSelection\">\n    <div class=\"action-toolbar-left cqa-flex cqa-items-center cqa-gap-2 cqa-text-[14px] cqa-leading-[21px] cqa-font-medium\">\n      <ng-container *ngIf=\"showSelectAll\">\n        <label class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-cursor-pointer cqa-select-none\">\n          <input type=\"checkbox\" [checked]=\"allSelected\" (change)=\"onSelectAllChange($any($event.target).checked)\"\n            class=\"select-all cqa-w-4 cqa-h-4 cqa-rounded cqa-border cqa-border-white cqa-bg-transparent hover:cqa-bg-transparent cqa-accent-primary\" />\n          <span>Select all</span>\n        </label>\n        <span class=\"cqa-border-l cqa-border-white/50 cqa-pl-2 cqa-border-solid cqa-self-stretch cqa-flex cqa-items-center\">{{ selectionLabel }}</span>\n      </ng-container>\n      <span *ngIf=\"!showSelectAll\">{{ selectionLabel }}</span>\n    </div>\n    <div class=\"action-toolbar-right cqa-flex cqa-items-center cqa-gap-[7px]\">\n      <ng-container *ngFor=\"let action of visibleActions()\">\n        <div [attr.aria-disabled]=\"isDisabled(action)\" [class.cqa-opacity-50]=\"isDisabled(action)\" [class.cqa-cursor-not-allowed]=\"isDisabled(action)\"\n          (mousedown)=\"onActionMouseDown($event, action)\"\n          class=\"cqa-flex cqa-items-center cqa-gap-[8.75px] cqa-py-[5px] cqa-px-[8.75px] cqa-cursor-pointer cqa-text-[12.3px] cqa-leading-[17.5px] cqa-font-medium hover:cqa-bg-white/10 cqa-rounded\">\n          <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">{{ action.icon }}</mat-icon>\n          <span class=\"md:cqa-flex cqa-hidden\">{{ action.label }}</span>\n        </div>\n      </ng-container>\n      <button *ngIf=\"showDismiss\" type=\"button\" (click)=\"onDismiss()\" class=\"cqa-p-1 cqa-rounded hover:cqa-bg-white/10 cqa-flex cqa-items-center cqa-justify-center\"\n        title=\"Dismiss\" aria-label=\"Dismiss\">\n        <mat-icon class=\"!cqa-w-[20px] !cqa-h-[20px] !cqa-text-[20px]\">close</mat-icon>\n      </button>\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { MetricsCardItem } from './metrics-card-item.interface';\n\n@Component({\n  selector: 'cqa-metrics-block',\n  templateUrl: './metrics-block.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { \n    class: 'cqa-ui-root',\n    '[class.cqa-flex-1]': 'true',\n    '[class.cqa-min-w-0]': 'true'\n  }\n})\nexport class MetricsBlockComponent {\n  @Input() item!: MetricsCardItem;\n  @Input() progress: string = '0%';\n  @Input() layout: string = '1';\n  @Input() itemslength: string = '0';\n\n  formatPercent(value?: number): string {\n    if (value === undefined || value === null || Number.isNaN(value)) return '';\n    const sign = value > 0 ? '+' : value < 0 ? '' : '';\n    return `${sign}${value}%`;\n  }\n\n  percentClass(value?: number): string {\n    if (value === undefined || value === null || Number.isNaN(value)) return 'cqa-text-[#6B7280]';\n    if (value > 0) return 'cqa-text-[#10B981]';\n    if (value < 0) return 'cqa-text-[#EF4444]';\n    return 'cqa-text-[#6B7280]';\n  }\n\n  handleClick(event: Event): void {\n    if (this.item.onClick) {\n      this.item.onClick(this.item, event);\n    }\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div\n    [ngClass]=\"[layout === '1'\n    ? 'cqa-flex cqa-justify-center cqa-items-center cqa-py-3 md:cqa-pt-1 md:cqa-pb-0.5 cqa-px-5 cqa-gap-3 cqa-w-full cqa-flex-1 cqa-min-w-0 md:cqa-h-[62px] cqa-border-b-0 cqa-border-[#E5E7EB]'\n    : 'cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-py-3 md:cqa-py-1 lg:cqa-px-5 cqa-px-2 cqa-w-full cqa-flex-1 cqa-min-w-0 md:cqa-h-[53px]', itemslength == item.id ? 'cqa-border-l md:cqa-border-l-0 md:cqa-border-l' : '' , item.id == '1' && layout === '1' ? 'cqa-border-l md:cqa-border-r' : '', item.onClick ? 'cqa-cursor-pointer cqa-transition-colors hover:cqa-bg-gray-50' : '']\"\n    (click)=\"handleClick($event)\"\n    [attr.title]=\"null\">\n    <ng-container *ngIf=\"layout === '1'; else layout2\">\n      <!-- [ngClass]=\"{ 'border-l md:border-l-0': itemslength == item.id }\" -->\n      <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-h-10 cqa-min-w-[40px] cqa-rounded-[10px]\"\n        [ngClass]=\"item.accentBgClass || 'cqa-bg-[#EEF2FF]'\">\n        <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\" [ngClass]=\"item.iconColorClass || 'cqa-text-[#3F43EE]'\"\n          *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n      </div>\n      <div class=\"cqa-flex cqa-flex-col cqa-items-start cqa-gap-0.5 cqa-w-full cqa-h-auto cqa-flex-1 cqa-min-w-0\" [attr.title]=\"null\">\n        <div class=\"cqa-w-full cqa-h-4 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-font-inter cqa-text-[#6A7282] cqa-truncate\" [attr.title]=\"null\">{{ item.label\n          }}</div>\n        <div class=\"cqa-w-full cqa-h-7 cqa-gap-2 cqa-flex cqa-min-w-0\"\n          [ngClass]=\"item.subtext ? 'cqa-justify-between cqa-items-center' : 'cqa-justify-start cqa-items-center'\">\n          <div\n            class=\"cqa-text-[20px] cqa-leading-[28px] cqa-font-semibold cqa-font-inter cqa-tracking-[-0.449219px] cqa-text-[#101828] cqa-flex-shrink-0\" [attr.title]=\"null\">\n            {{ item.value | number }}</div>\n          <div *ngIf=\"item.subtext\"\n            class=\"cqa-text-[12px] cqa-leading-4 cqa-font-inter cqa-text-[#6A7282] cqa-truncate cqa-hidden sm:cqa-block cqa-min-w-0\" [attr.title]=\"null\">{{\n            item.subtext }}</div>\n        </div>\n        <div class=\"cqa-w-full cqa-h-1 cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex-shrink-0\">\n          <div class=\"cqa-h-full cqa-rounded-full\" [ngClass]=\"item.colorClass || 'cqa-bg-[#3F43EE]'\"\n            [style.width]=\"progress\"></div>\n        </div>\n      </div>\n    </ng-container>\n    <ng-template #layout2>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n        <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[16px]\" [ngClass]=\"item.iconColorClass || 'cqa-text-[#3F43EE]'\"\n          *ngIf=\"item.icon\">{{ item.icon }}</mat-icon>\n        <span class=\"cqa-text-[12px] cqa-leading-4 cqa-font-inter cqa-text-[#6B7280]\" [attr.title]=\"null\">{{ item.label }}</span>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-w-full cqa-justify-between\">\n        <h6 class=\"cqa-text-[16px] cqa-leading-7 cqa-tracking-[-0.45px] cqa-font-inter cqa-text-[#111827]\" [attr.title]=\"null\">{{ item.value | number }}\n        </h6>\n        <span *ngIf=\"item.percent !== undefined\" class=\"cqa-text-[10px] cqa-leading-4 cqa-font-inter\"\n          [ngClass]=\"percentClass(item.percent)\" [attr.title]=\"null\">{{ formatPercent(item.percent) }}</span>\n      </div>\n    </ng-template>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { MetricsCardItem } from './metrics-card-item.interface';\n\n@Component({\n  selector: 'cqa-metrics-card',\n  templateUrl: './metrics-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class MetricsCardComponent {\n  @Input() icon: string = 'text_snippet';\n  @Input() title: string = '';\n  @Input() total: number | string = 0;\n  @Input() items: MetricsCardItem[] = [];\n  @Input() cardClass: string = '';\n  @Input() layout: string = '1';\n  @Input() totalPercent?: number; // Optional overall percent delta for layout 2\n  @Input() onTotalClick?: (event?: Event) => void; // Optional click handler for total block\n  @Output() totalClick = new EventEmitter<Event>(); // Output event for total block click\n  \n  get isTotalClickable(): boolean {\n    // Show pointer if an input handler is provided or an output listener is bound\n    try {\n      return !!this.onTotalClick || (this.totalClick as any)?.observers?.length > 0;\n    } catch {\n      return !!this.onTotalClick;\n    }\n  }\n\n  progressWidth(item: MetricsCardItem): string {\n    const max = item.max ?? this.inferMax();\n    if (!max || max <= 0) return '0%';\n    const pct = Math.max(0, Math.min(100, (item.value / max) * 100));\n    return pct.toFixed(1) + '%';\n  }\n\n  private inferMax(): number {\n    const maxFromItems = this.items.reduce((m, it) => Math.max(m, it.value), 0);\n    return maxFromItems || 1;\n  }\n\n  formatPercent(value?: number): string {\n    if (value === undefined || value === null || Number.isNaN(value)) return '';\n    const sign = value > 0 ? '+' : value < 0 ? '' : '';\n    return `${sign}${value}%`;\n  }\n\n  percentClass(value?: number): string {\n    if (value === undefined || value === null || Number.isNaN(value)) return 'cqa-text-[#6B7280]';\n    if (value > 0) return 'cqa-text-[#10B981]'; // green\n    if (value < 0) return 'cqa-text-[#EF4444]'; // red\n    return 'cqa-text-[#6B7280]'; // neutral\n  }\n\n  handleTotalClick(event: Event): void {\n    // Always emit the event, even if no handler is provided\n    this.totalClick.emit(event);\n    // Call the input handler if provided\n    if (this.onTotalClick) {\n      this.onTotalClick(event);\n    }\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div *ngIf=\"layout === '1'\"\n    class=\"cqa-w-full cqa-box-border cqa-flex cqa-flex-col cqa-items-start cqa-px-px cqa-pb-px md:cqa-h-[63px] cqa-bg-white cqa-border-t-2 cqa-border-r cqa-border-b-0 cqa-border-l cqa-border-solid cqa-border-[#3F43EE] cqa-rounded-[10px] cqa-flex-none cqa-order-0 cqa-self-stretch cqa-grow-0\"\n    [ngClass]=\"cardClass\">\n    <!-- Metric blocks -->\n    <div\n      class=\"cqa-flex-1 cqa-w-full cqa-grid cqa-grid-cols-2 sm:cqa-grid-cols-2 md:cqa-grid-cols-4 cqa-border cqa-border-[#E5E7EB] cqa-rounded-[10px] cqa-overflow-hidden\">\n      <!-- Left total block -->\n      <div\n        class=\"cqa-flex cqa-flex-col cqa-justify-center cqa-items-start cqa-py-3 md:cqa-pt-1 md:cqa-pb-0.5 cqa-px-6 cqa-gap-1 cqa-w-full sm:cqa-w-[100%] md:cqa-w-[180px] lg:cqa-w-[290px] md:cqa-h-[61px] cqa-border-b cqa-border-[#E5E7EB] sm:cqa-border-b-0 sm:cqa-border-r\"\n        [ngClass]=\"{'cqa-cursor-pointer cqa-transition-colors hover:cqa-bg-gray-50': isTotalClickable}\"\n        (click)=\"handleTotalClick($event)\"\n        [attr.title]=\"null\">\n        <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-medium cqa-font-inter cqa-text-[#6A7282]\" [attr.title]=\"null\"> {{ title }} </span>\n        <h3 class=\"cqa-text-[30px] cqa-leading-[36px] cqa-font-bold cqa-font-inter cqa-tracking-[0.395508px] cqa-text-[#101828]\" [attr.title]=\"null\"> {{\n          total | number }} </h3>\n      </div>\n      <ng-container *ngFor=\"let it of items; let i = index\">\n        <div class=\"cqa-flex cqa-items-stretch cqa-border-b cqa-border-[#E5E7EB] md:cqa-border-b-0 cqa-min-w-0\" [attr.title]=\"null\">\n          <div class=\"cqa-hidden sm:cqa-block md:cqa-block cqa-w-[1px] cqa-bg-[#E5E7EB] cqa-flex-shrink-0\"></div>\n          <cqa-metrics-block [item]=\"it\" [itemslength]=\"items.length.toString()\"\n            [progress]=\"progressWidth(it)\" class=\"cqa-flex-1 cqa-min-w-0\">\n          </cqa-metrics-block>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n\n  <div *ngIf=\"layout === '2'\"\n    class=\"cqa-w-full cqa-box-border cqa-flex cqa-flex-col cqa-items-start cqa-px-px cqa-pb-px cqa-bg-white cqa-flex-none cqa-order-0 cqa-self-stretch cqa-grow-0\"\n    [ngClass]=\"cardClass\">\n    <div\n      class=\"cqa-flex cqa-flex-col md:cqa-flex-row cqa-flex-wrap cqa-items-stretch cqa-w-full cqa-rounded-none cqa-flex-none cqa-order-0 cqa-self-stretch cqa-grow-0 cqa-gap-4\">\n      <!-- Left total block -->\n      <div\n        class=\"cqa-flex cqa-flex-col cqa-justify-center cqa-items-start cqa-py-3 md:cqa-py-1 cqa-px-4 sm:cqa-px-6 cqa-gap-1 cqa-w-full sm:cqa-w-[100%] md:cqa-w-[240px] lg:cqa-w-[290px] cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-relative cqa-overflow-hidden before:cqa-content-[''] before:cqa-bg-[#4C4C51] before:cqa-h-[2px] before:cqa-w-full before:cqa-absolute before:cqa-top-0 before:cqa-left-0 cqa-h-auto\"\n        [ngClass]=\"{'cqa-cursor-pointer cqa-transition-colors hover:cqa-bg-gray-50': isTotalClickable}\"\n        (click)=\"handleTotalClick($event)\"\n        [attr.title]=\"null\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-justify-between cqa-w-full\">\n          <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-[#6B7280]\">{{ icon }}</mat-icon>\n          <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-4 cqa-font-inter\" [attr.title]=\"null\">{{ title }}</span>\n          <div class=\"cqa-flex cqa-items-end cqa-gap-2 cqa-ml-auto\">\n            <h4 class=\"cqa-text-[28px] cqa-leading-7 cqa-tracking-[-0.45px] cqa-font-inter cqa-text-[#111827]\" [attr.title]=\"null\">{{ total | number }}\n            </h4>\n            <span *ngIf=\"totalPercent !== undefined\" class=\"cqa-text-[10px] cqa-leading-4 cqa-font-inter\"\n              [ngClass]=\"percentClass(totalPercent)\" [attr.title]=\"null\">{{ formatPercent(totalPercent) }}</span>\n          </div>\n        </div>\n\n      </div>\n      <!-- Metric blocks -->\n      <div [ngClass]=\"'cqa-grid-cols-' + items.length + ' lg:cqa-grid-cols-' + items.length\"\n        class=\"cqa-flex-1 cqa-w-full cqa-grid md:cqa-grid-cols-3 cqa-gap-2 md:cqa-gap-3 cqa-items-center cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-relative cqa-overflow-hidden\">\n        <span class=\"cqa-h-[2px] cqa-w-full cqa-absolute cqa-top-0 cqa-left-0\"\n          [style.background]=\"'linear-gradient(90deg, #3B82F6 0%, rgba(0, 0, 0, 0) 100%)'\"></span>\n        <cqa-metrics-block *ngFor=\"let it of items; let i = index\" [item]=\"it\" [layout]=\"layout\" [attr.title]=\"null\">\n        </cqa-metrics-block>\n      </div>\n    </div>\n  </div>\n</div>","/**\n * Image assets constants for the UI library\n * \n * Place your image files in src/lib/assets/images/ and reference them here\n * \n * Usage in components:\n * import { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\n * imageUrl: EMPTY_STATE_IMAGES.TEST_CASE\n */\n\nexport const EMPTY_STATE_IMAGES = {\n  // Test Case icon (document with gear)\n  TEST_CASE: 'assets/images/TestCaseIcon.png',\n  \n  // Search/Debug icon (magnifying glass with question mark)\n  SEARCH_DEBUG: 'assets/images/SearchIcon.png',\n  \n  // Upload/Folder icon (folder with upload arrow and plus)\n  UPLOAD_FOLDER: 'assets/images/FilesIcon.png',\n\n  // Dashboard overview\n  DASHBOARD: 'assets/images/DashboardIcon.png',\n  \n  // Checklist/Add icon (clipboard with plus)\n  CHECKLIST_ADD: 'assets/images/StepsIcon.png',\n  \n  // Document/Gear icon (document with gear overlay)\n  DOCUMENT_GEAR: 'assets/images/document-gear-icon.svg',\n  \n  // Analytics/Chart icon (bar chart)\n  ANALYTICS_CHART: 'assets/images/ReportsIcon.png',\n  \n  // Default empty state icon\n  DEFAULT: 'assets/images/SearchIcon.png',\n\n  // Compare runs empty state icon\n  COMPARE_RUNS: 'assets/images/CompareRunsIcon.png',\n\n  // No-folders empty state (folder card with accent dots)\n  EMPTY_FOLDER_STATE: 'assets/images/EmptyFolderState.png',\n} as const;\n\nexport type EmptyStateImageKey = keyof typeof EMPTY_STATE_IMAGES;\n\n","import { EmptyStateAction } from './empty-state.component';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\n\nexport type EmptyStatePresetKey =\n  | 'reports'\n  | 'nothingToDisplay'\n  | 'analytics'\n  | 'steps'\n  | 'testCases'\n  | 'files';\n\nexport interface EmptyStatePreset {\n  title: string;\n  description: string;\n  imageUrl: string;\n  actions: EmptyStateAction[];\n}\n\nexport const EMPTY_STATE_PRESETS: Record<EmptyStatePresetKey, EmptyStatePreset> = {\n  reports: {\n    title: 'No Reports Generated',\n    description:\n      'Execute test suites or upload results to generate reports. Transform raw data into actionable insights with beautiful visualizations.',\n    imageUrl: EMPTY_STATE_IMAGES.ANALYTICS_CHART,\n    actions: [\n      { label: 'View Test Suites', variant: 'filled' },\n      { label: 'Upload Results', variant: 'outlined' },\n    ],\n  },\n  nothingToDisplay: {\n    title: 'Nothing to Display',\n    description:\n      'There\\'s currently no data available for this view. Try adjusting your filters or refresh to see the latest updates.',\n    imageUrl: EMPTY_STATE_IMAGES.SEARCH_DEBUG,\n    actions: [{ label: 'Refresh', variant: 'filled' }],\n  },\n  analytics: {\n    title: 'No Data Available Yet',\n    description:\n      'Run or upload your first test to see your analytics and trends here. Watch your quality metrics come to life with real-time insights.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: [{ label: 'Run Test Suite', variant: 'filled' }],\n  },\n  steps: {\n    title: 'No Steps Added Yet',\n    description:\n      'Add your first test step to define the actions for this test case. Build comprehensive test scenarios with our intuitive step builder.',\n    imageUrl: EMPTY_STATE_IMAGES.CHECKLIST_ADD,\n    actions: [{ label: 'Add Step', variant: 'filled' }],\n  },\n  testCases: {\n    title: 'No Test Cases Created Yet',\n    description:\n      'Start by creating your first test case to begin your automation journey. Our AI-powered platform will guide you through every step.',\n    imageUrl: EMPTY_STATE_IMAGES.TEST_CASE,\n    actions: [{ label: 'Create Test Case', variant: 'filled' }],\n  },\n  files: {\n    title: 'No Files Imported',\n    description:\n      'Upload requirement or test case files to start generating test cases. Supports CSV, Excel, Mp4 and JSON formats for seamless integration.',\n    imageUrl: EMPTY_STATE_IMAGES.UPLOAD_FOLDER,\n    actions: [\n      { label: 'Import File', variant: 'filled' },\n      { label: 'View Examples', variant: 'outlined' },\n    ],\n  },\n};\n\n/**\n * Get an empty state preset by key\n * @param key - The preset key\n * @returns The preset configuration\n */\nexport function getEmptyStatePreset(key: EmptyStatePresetKey): EmptyStatePreset {\n  return EMPTY_STATE_PRESETS[key];\n}\n\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { EmptyStatePresetKey, getEmptyStatePreset } from './empty-state-presets.constants';\n\nexport interface EmptyStateAction {\n  label: string;\n  variant?: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal';\n  icon?: string;\n  iconPosition?: 'start' | 'end';\n  disabled?: boolean;\n  onClick?: () => void;\n  action?: () => void; // Support 'action' as an alias for onClick\n}\n\n@Component({\n  selector: 'cqa-empty-state',\n  templateUrl: './empty-state.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class EmptyStateComponent implements OnChanges {\n  @Input() preset?: EmptyStatePresetKey;\n  @Input() imageUrl?: string; // URL for image\n  @Input() title: string = '';\n  @Input() description: string = '';\n  @Input() actions: EmptyStateAction[] = [];\n\n  @Output() actionClick = new EventEmitter<EmptyStateAction>();\n\n  private _imageUrl?: string;\n  private _title: string = '';\n  private _description: string = '';\n  private _actions: EmptyStateAction[] = [];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.preset) {\n      // Use preset configuration\n      const presetConfig = getEmptyStatePreset(this.preset);\n      this._title = presetConfig.title;\n      this._description = presetConfig.description;\n      this._imageUrl = this.resolveImagePath(presetConfig.imageUrl);\n      this._actions = [...presetConfig.actions];\n    } else {\n      // Use manual inputs if preset is not set\n      this._title = this.title;\n      this._description = this.description;\n      this._imageUrl = this.imageUrl ? this.resolveImagePath(this.imageUrl) : undefined;\n      this._actions = this.actions;\n    }\n  }\n\n  /**\n   * Resolves image path to work both in development and when consumed from node_modules\n   * Tries multiple path strategies to find the image\n   */\n  private resolveImagePath(imagePath: string): string {\n    // If the path is already absolute or starts with http/https, return as-is\n    if (imagePath.startsWith('http://') || imagePath.startsWith('https://') || imagePath.startsWith('/')) {\n      return imagePath;\n    }\n\n    // If path already includes node_modules, return as-is\n    if (imagePath.includes('node_modules')) {\n      return imagePath;\n    }\n\n    // Standard approach: return the path as-is\n    // The consuming application should copy assets from node_modules/@cqa-lib/cqa-ui/src/lib/assets/images/\n    // to its own assets/images/ folder via angular.json configuration\n    // This is the recommended Angular library pattern\n    return imagePath;\n  }\n\n  get displayTitle(): string {\n    return this.preset ? this._title : this.title;\n  }\n\n  get displayDescription(): string {\n    return this.preset ? this._description : this.description;\n  }\n\n  get displayImageUrl(): string | undefined {\n    return this.preset ? this._imageUrl : this.imageUrl;\n  }\n\n  get displayActions(): EmptyStateAction[] {\n    return this.preset ? this._actions : this.actions;\n  }\n\n  onActionClick(action: EmptyStateAction, event: MouseEvent) {\n    if (!action.disabled) {\n      if (action.onClick) {\n        action.onClick();\n      } else if (action.action) {\n        action.action();\n      }\n      this.actionClick.emit(action);\n    }\n  }\n}\n\n","<div class=\"cqa-ui-root\" style=\"width: 100%; height: 100%; min-height: 200px; display: flex; flex-direction: column; align-items: center; justify-content: center; padding-top: 2rem; padding-bottom: 2rem; padding-left: 1rem; padding-right: 1rem;\">\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-6 cqa-items-center cqa-max-w-md cqa-w-full\">\n    <!-- Icon Container -->\n    <div *ngIf=\"displayImageUrl\" class=\"cqa-relative cqa-shrink-0 cqa-w-24 cqa-h-24 md:cqa-w-32 md:cqa-h-32\">\n      <!-- Main Icon Container with Gradient Background and Shadow -->\n      <div class=\"cqa-relative cqa-rounded-3xl cqa-w-full cqa-h-full cqa-shadow-sm\">\n        <div class=\"cqa-absolute cqa-inset-0 cqa-bg-gradient-to-br cqa-from-indigo-500 cqa-to-violet-950 cqa-rounded-3xl cqa-opacity-10\"></div>\n        <!-- Icon/Image centered inside on top layer - fully opaque -->\n        <div class=\"cqa-absolute cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-rounded-3xl\">\n          <div class=\"cqa-w-3/4 cqa-h-3/4 cqa-flex cqa-items-center cqa-justify-center cqa-relative\">\n            <img [src]=\"displayImageUrl\" alt=\"\" class=\"cqa-block cqa-max-w-full cqa-max-h-full cqa-w-full cqa-h-full cqa-object-contain\" />\n          </div>\n        </div>\n      </div>\n      <!-- Decorative Dots -->\n      <div class=\"cqa-absolute cqa-rounded-full cqa-bg-primary-300 cqa-opacity-[0.815] cqa-hidden md:cqa-block\" style=\"right: -4px; top: -4px; width: 12px; height: 12px; z-index: 20;\"></div>\n      <div class=\"cqa-absolute cqa-rounded-full cqa-bg-primary-300 cqa-opacity-[0.695] cqa-hidden md:cqa-block\" style=\"left: -4px; bottom: -4px; width: 10px; height: 10px; z-index: 20;\"></div>\n    </div>\n\n    <!-- Content Container -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-items-center cqa-w-full\">\n      <!-- Title and Description -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-items-center cqa-w-full\">\n        <!-- Title -->\n        <div *ngIf=\"displayTitle\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-w-full\">\n          <h3 class=\"cqa-font-inter cqa-text-base md:cqa-text-lg cqa-font-medium cqa-leading-tight cqa-text-center cqa-text-neutral-900 cqa-px-2\">\n            {{ displayTitle }}\n          </h3>\n        </div>\n        <!-- Description -->\n        <div *ngIf=\"displayDescription\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-w-full\">\n          <p class=\"cqa-font-inter cqa-font-medium cqa-text-sm cqa-leading-snug cqa-text-center cqa-text-neutral-500 cqa-px-2\">\n            {{ displayDescription }}\n          </p>\n        </div>\n      </div>\n\n      <!-- Action Buttons -->\n      <div\n        *ngIf=\"displayActions && displayActions.length > 0\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-full cqa-flex-wrap\"\n        [ngClass]=\"displayActions.length > 1 ? 'cqa-flex-row cqa-gap-3' : 'cqa-flex-col'\"\n      >\n        <cqa-button\n          *ngFor=\"let action of displayActions\"\n          [variant]=\"action.variant || 'filled'\"\n          [icon]=\"action.icon\"\n          [iconPosition]=\"action.iconPosition || 'start'\"\n          [disabled]=\"action.disabled\"\n          (clicked)=\"onActionClick(action, $event)\"\n          class=\"cqa-w-full md:cqa-w-auto\"\n        >\n          {{ action.label }}\n        </cqa-button>\n      </div>\n    </div>\n  </div>\n</div>\n\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { EmptyStateConfig } from '../../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';\n\n@Component({\n  selector: 'cqa-chart-card',\n  templateUrl: './chart-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class ChartCardComponent {\n  @Input() title: string = 'Chart';\n  @Input() subtitle?: string;\n  @Input() cardClass: string = '';\n  @Input() height?: string; // Custom height for the chart area (e.g., '300px', '400px', 'auto')\n  /** Info tooltip text to display on hover of info icon */\n  @Input() info?: string;\n  /** Show empty state instead of content */\n  @Input() isEmpty: boolean = false;\n  /** Empty state configuration */\n  @Input() emptyStateConfig: EmptyStateConfig = {\n    title: 'No chart data',\n    description: 'There is no data available to display.',\n    imageUrl: EMPTY_STATE_IMAGES.ANALYTICS_CHART,\n    actions: []\n  };\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div\n    class=\"cqa-border cqa-border-solid cqa-border-border-default cqa-rounded-[8px] cqa-shadow-card cqa-h-full\"\n    [ngClass]=\"cardClass\">\n    <!-- Header -->\n    <div class=\"cqa-px-[16px] cqa-py-4\">\n      <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-flex-wrap\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <div class=\"cqa-text-[16px] cqa-leading-6 cqa-font-inter cqa-text-[#111827] cqa-font-medium\">{{ title }}</div>\n          <mat-icon \n            *ngIf=\"info\" \n            class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-cursor-help cqa-flex-shrink-0\"\n            [matTooltip]=\"info\"\n            matTooltipPosition=\"above\"\n            style=\"color: #64748B;\">\n            info\n          </mat-icon>\n        </div>\n        <!-- Chart actions slot (segments) -->\n        <ng-content select=\"[chart-actions]\"></ng-content>\n      </div>\n      <div *ngIf=\"subtitle\" class=\"cqa-text-[12px] cqa-leading-4 cqa-font-inter cqa-text-[#6A7282] cqa-mt-0.5\">{{ subtitle }}</div>\n    </div>\n\n    <!-- Chart/content area -->\n    <div class=\"cqa-px-[13px]\">\n      <div class=\"cqa-w-full cqa-chart-card-area\">\n        <!-- Empty State -->\n        <ng-container *ngIf=\"isEmpty\">\n          <cqa-empty-state\n            [title]=\"emptyStateConfig.title\"\n            [description]=\"emptyStateConfig.description\"\n            [imageUrl]=\"emptyStateConfig.imageUrl\"\n            [actions]=\"emptyStateConfig.actions\"\n            (actionClick)=\"$event.onClick?.()\"\n          ></cqa-empty-state>\n        </ng-container>\n        \n        <!-- Default Content -->\n        <ng-container *ngIf=\"!isEmpty\">\n          <div class=\"cqa-w-full cqa-h-full\">\n            <ng-content></ng-content>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'cqa-progress-text-card',\n  templateUrl: './progress-text-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class ProgressTextCardComponent {\n  @Input() value: number = 0; // 0 - 100\n  @Input() label: string = 'Test Success Rate';\n  @Input() deltaPercent?: number; // e.g., +8\n  @Input() deltaSuffix: string = 'since last run';\n  @Input() cardClass: string = '';\n  /** Emitted when the card is clicked */\n  @Output() cardClick = new EventEmitter<void>();\n\n  get percentText(): string {\n    const v = Math.max(0, Math.min(100, Number(this.value) || 0));\n    return `${v}%`;\n  }\n\n  get fillWidth(): string {\n    const v = Math.max(0, Math.min(100, Number(this.value) || 0));\n    return v + '%';\n  }\n\n  deltaClass(): string {\n    if (this.deltaPercent === undefined || this.deltaPercent === null || Number.isNaN(this.deltaPercent)) {\n      return 'cqa-text-[#6B7280]';\n    }\n    if (this.deltaPercent > 0) return 'cqa-text-[#0B9D68]';\n    if (this.deltaPercent < 0) return 'cqa-text-[#EF4444]';\n    return 'cqa-text-[#6B7280]';\n  }\n\n  onCardClick(): void {\n    this.cardClick.emit();\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div\n    class=\"cqa-cursor-pointer cqa-w-full cqa-box-border cqa-flex cqa-flex-col cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-rounded-[10px] cqa-p-4 sm:cqa-p-5 cqa-cursor-pointer cqa-transition-shadow cqa-duration-200 hover:cqa-shadow-md\"\n    [ngClass]=\"cardClass\"\n    (click)=\"onCardClick()\">\n    <div class=\"cqa-flex cqa-items-baseline cqa-gap-2\">\n      <div\n        class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-font-inter cqa-tracking-[-0.3px] cqa-text-[#111827]\">\n        {{ percentText }}</div>\n      <div class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-inter cqa-text-[#111827]\">{{ label }}</div>\n    </div>\n    <div class=\"cqa-mt-4 cqa-mb-2 cqa-w-full cqa-h-[14px] cqa-bg-[#E5E7EB] cqa-rounded-full cqa-overflow-hidden\">\n      <div class=\"cqa-h-full cqa-rounded-full\" [style.width]=\"fillWidth\"\n        [style.background]=\"'linear-gradient(90deg, #DD5A38 0%, #F59E0B 40%, #10B981 100%)'\">\n      </div>\n    </div>\n    <div class=\"cqa-text-[12px] cqa-leading-5 cqa-font-inter\" [ngClass]=\"deltaClass()\" *ngIf=\"deltaPercent !== undefined\">\n      {{ deltaPercent > 0 ? '+' : ''}}{{ deltaPercent }}% {{ deltaSuffix }}\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, Input, OnInit, OnChanges, SimpleChanges, ViewChild, ElementRef, HostListener, Output, EventEmitter } from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { SelectOption } from '../../dynamic-select/dynamic-select-field.component';\n\nexport interface WorkspaceSelectorConfig {\n  key?: string;\n  label?: string;\n  placeholder?: string;\n  disabled?: boolean;\n  searchable?: boolean;\n  /** If true, close the panel when an option is selected. */\n  closeOnSelect?: boolean;\n  /** Provide a default selected value if the control has no value yet. */\n  selectedValue?: any;\n  /** Optional callback invoked whenever the selection changes. */\n  onChange?: (value: any) => void;\n  /** Enable server-side search mode; component will emit search instead of local filtering. */\n  serverSearch?: boolean;\n  /**\n   * When true, triggers an initial search emit on panel open (serverSearch mode only).\n   * Defaults to false so opening the dropdown does NOT call the API.\n   */\n  initialFetchOnOpen?: boolean;\n  /** Indicates more results are available for infinite scroll. */\n  hasMore?: boolean;\n  /** Optional loading flag controlled by consumer to show loading state. */\n  isLoading?: boolean;\n  /** Optional callback for server-side search when query changes. */\n  onSearch?: (query: string) => void;\n  /** Optional callback when more data is requested (infinite scroll). */\n  onLoadMore?: (query?: string) => void;\n  /** Optional regex pattern or function to highlight parts of option text. */\n  highlightPattern?: RegExp | string | ((text: string) => string);\n  options: SelectOption[];\n  valueBy?: string;\n  /** Item size for virtual scroll (default: 48) */\n  itemSize?: number;\n  /** Viewport height for virtual scroll in pixels (default: 300) */\n  viewportHeight?: number;\n}\n\n@Component({\n  selector: 'cqa-workspace-selector',\n  templateUrl: './workspace-selector.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class WorkspaceSelectorComponent implements OnInit, OnChanges {\n  @Input() form?: FormGroup;\n  @Input() config!: WorkspaceSelectorConfig;\n  /** Direct value binding - selected workspace object. Use this instead of form control. */\n  @Input() value?: any;\n  /** Emits the selected workspace object when selection changes */\n  @Output() valueChange = new EventEmitter<any>();\n  @Output() selectionChange = new EventEmitter<{ key: string; value: any; option?: SelectOption }>();\n  @Output() selectClick = new EventEmitter<void>();\n  /** Emits when user types in search box (useful for server search) */\n  @Output() searchChange = new EventEmitter<{ key: string; query: string }>();\n  /** Emits when the component requests more data for the current query */\n  @Output() loadMore = new EventEmitter<{ key: string; query: string }>();\n\n  @ViewChild('host', { static: false, read: ElementRef }) hostEl?: ElementRef<HTMLElement>;\n  @ViewChild('dropdownPanel', { static: false }) dropdownPanel?: ElementRef<HTMLElement>;\n  @ViewChild('viewport', { static: false }) viewport?: any;\n\n  // Internal form control if no form is provided\n  internalForm: FormGroup;\n  internalControl: FormControl;\n\n  searchText: string = '';\n  isOpen: boolean = false;\n  loadingMore = false;\n  private lastOptionsLength = 0;\n  private hasScrolledSinceOpen = false;\n  private panelScrollEl?: HTMLElement;\n\n  private onPanelScroll = () => {\n    this.hasScrolledSinceOpen = true;\n    if (!this.config?.hasMore || this.loadingMore) return;\n    const el = this.panelScrollEl;\n    if (!el) return;\n    const nearBottom = el.scrollTop + el.clientHeight >= el.scrollHeight - 48;\n    if (nearBottom) {\n      this.loadingMore = true;\n      const key = this.config?.key || '';\n      const q = this.searchText || '';\n      this.loadMore.emit({ key, query: q });\n      try { this.config.onLoadMore?.(q); } catch {}\n    }\n  };\n\n  constructor() {\n    this.internalControl = new FormControl();\n    this.internalForm = new FormGroup({\n      value: this.internalControl\n    });\n  }\n\n  ngOnInit(): void {\n    if (!this.config) {\n      throw new Error('cqa-workspace-selector: input \"config\" is required.');\n    }\n    this.syncValueFromInput();\n    this.applySelectedValueIfNeeded();\n    this.syncDisabledState();\n    this.lastOptionsLength = (this.config?.options || []).length;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ('config' in changes || 'form' in changes || 'value' in changes) {\n      this.syncDisabledState();\n    }\n    if ('value' in changes && !this.form) {\n      // Sync internal control when value changes (for direct binding mode)\n      this.syncValueFromInput();\n    }\n    if ('config' in changes) {\n      this.syncControlValueForMultipleMode();\n      this.applySelectedValueIfNeeded();\n      if (this.config?.isLoading !== undefined) {\n        this.loadingMore = this.config.isLoading;\n      }\n      const len = (this.config?.options || []).length;\n      if (len > this.lastOptionsLength) {\n        if (this.config?.isLoading === false) {\n          this.loadingMore = false;\n        } else if (this.config?.isLoading === undefined) {\n          this.loadingMore = false;\n        }\n      }\n      this.lastOptionsLength = len;\n      if (!this.config?.hasMore) {\n        if (this.config?.isLoading === false) {\n          this.loadingMore = false;\n        } else if (this.config?.isLoading === undefined) {\n          this.loadingMore = false;\n        }\n      }\n    }\n    if ('form' in changes && !changes['form'].firstChange) {\n      this.applySelectedValueIfNeeded();\n    }\n  }\n\n  private syncValueFromInput(): void {\n    if (!this.form && this.value !== undefined) {\n      // Sync the internal control with the direct value binding\n      // Ensure value is not an array (single selection only)\n      if (Array.isArray(this.value)) {\n        this.value = this.value.length ? this.value[0] : null;\n      }\n      this.internalControl.setValue(this.value ?? null, { emitEvent: false });\n    }\n  }\n\n  get currentForm(): FormGroup {\n    return this.form || this.internalForm;\n  }\n\n  get controlKey(): string {\n    return this.config?.key || 'value';\n  }\n\n  get currentControl(): FormControl {\n    return this.currentForm.get(this.controlKey) as FormControl || this.internalControl;\n  }\n\n  /** Get current value - from form control if form provided, otherwise from direct value binding */\n  get currentValue(): any {\n    if (this.form) {\n      return this.currentControl.value;\n    }\n    // Ensure value is not an array (single selection only)\n    if (Array.isArray(this.value)) {\n      return this.value.length ? this.value[0] : null;\n    }\n    return this.value ?? null;\n  }\n\n  /** Set current value - to form control if form provided, otherwise update direct value */\n  set currentValue(val: any) {\n    if (this.form) {\n      this.currentControl.setValue(val, { emitEvent: false });\n    } else {\n      // Ensure value is not an array (single selection only)\n      this.value = Array.isArray(val) ? (val.length ? val[0] : null) : val;\n      // Sync internal control for display purposes\n      this.internalControl.setValue(this.value, { emitEvent: false });\n    }\n  }\n\n  get isDisabled(): boolean {\n    return this.toBoolean(this.config?.disabled);\n  }\n\n  get displayPlaceholder(): string | undefined {\n    const currentVal = this.currentValue;\n    return this.hasExistingValue(currentVal) ? undefined : (this.config?.placeholder || 'Select...');\n  }\n\n  get displayValue(): string {\n    const value = this.currentValue;\n    if (value == null) return '';\n    \n    // If value is already a SelectOption-like object with name/label, use it directly\n    if (typeof value === 'object' && value !== null) {\n      const workspaceObj = value as any;\n      if (workspaceObj.name || workspaceObj.label) {\n        return workspaceObj.name ?? workspaceObj.label ?? String(workspaceObj.value ?? workspaceObj.id ?? '');\n      }\n    }\n    \n    // Otherwise, look up the value in options list\n    const option = this.config?.options?.find(opt => this.getOptionValue(opt) === value);\n    return option ? this.getOptionLabel(option) : String(value);\n  }\n\n  get itemSize(): number {\n    return this.config?.itemSize || 35;\n  }\n\n  get viewportHeight(): number {\n    // If viewportHeight is explicitly set in config, use it\n    if (this.config?.viewportHeight !== undefined) {\n      return this.config.viewportHeight;\n    }\n    \n    // Otherwise, calculate based on number of options\n    const optionCount = this.displayedOptions.length;\n    const maxHeight = 300; // Maximum height\n    const minHeight = 100; // Minimum height\n    const calculatedHeight = optionCount * this.itemSize;\n    \n    // Return calculated height, but clamp between min and max\n    return Math.min(Math.max(calculatedHeight, minHeight), maxHeight);\n  }\n\n  get displayedOptions(): SelectOption[] {\n    return this.filteredOptions();\n  }\n\n  private toBoolean(value: unknown): boolean {\n    if (typeof value === 'string') {\n      const v = value.trim().toLowerCase();\n      if (v === 'true' || v === '1') return true;\n      if (v === 'false' || v === '0' || v === '') return false;\n      return true;\n    }\n    if (typeof value === 'number') {\n      return value !== 0;\n    }\n    return !!value;\n  }\n\n  getOptionValue(opt: SelectOption | null | undefined): any {\n    if (!opt) return undefined;\n    if (this.config?.valueBy) {\n      return (opt as any)[this.config.valueBy];\n    }\n    return opt.id ?? opt.value;\n  }\n\n  getOptionLabel(opt: SelectOption): string {\n    return opt.name ?? opt.label ?? opt.value ?? '';\n  }\n\n  private syncDisabledState(): void {\n    const shouldDisable = this.toBoolean(this.config?.disabled);\n    if (this.form) {\n      if (shouldDisable) {\n        this.currentControl.disable({ emitEvent: false });\n      } else {\n        this.currentControl.enable({ emitEvent: false });\n      }\n    }\n    // For direct value binding, disabled state is handled via [disabled] binding in template\n  }\n\n  private syncControlValueForMultipleMode(): void {\n    // No longer needed - single selection only\n    const currentVal = this.currentValue;\n    if (Array.isArray(currentVal)) {\n      this.currentValue = currentVal.length ? currentVal[0] : null;\n    }\n  }\n\n  private applySelectedValueIfNeeded(): void {\n    const currentVal = this.currentValue;\n    if (this.hasExistingValue(currentVal)) {\n      return;\n    }\n    // Check both config.selectedValue and direct value input\n    const selectedValue = this.value !== undefined ? this.value : this.config?.selectedValue;\n    if (selectedValue === undefined || selectedValue === null) {\n      return;\n    }\n\n    // Ensure selectedValue is not an array (single selection only)\n    const normalized = Array.isArray(selectedValue)\n      ? (selectedValue.length ? selectedValue[0] : undefined)\n      : selectedValue;\n    if (normalized === undefined) return;\n    this.currentValue = normalized;\n  }\n\n  private hasExistingValue(value: any): boolean {\n    if (value === null || value === undefined) {\n      return false;\n    }\n    if (Array.isArray(value)) {\n      return value.some((val) => val !== null && val !== undefined && val !== '');\n    }\n    if (typeof value === 'string') {\n      return value.trim().length > 0;\n    }\n    return true;\n  }\n\n  isOptionSelected(opt: SelectOption): boolean {\n    const currentVal = this.currentValue;\n    if (currentVal == null) return false;\n    \n    const optionValue = this.getOptionValue(opt);\n    \n    // If currentVal is an object with id/value, extract it for comparison\n    if (typeof currentVal === 'object' && currentVal !== null) {\n      const workspaceObj = currentVal as any;\n      const currentId = this.config?.valueBy \n        ? workspaceObj[this.config.valueBy]\n        : (workspaceObj.id ?? workspaceObj.value);\n      return currentId === optionValue;\n    }\n    \n    // Otherwise, compare directly\n    return currentVal === optionValue;\n  }\n\n  filteredOptions(): SelectOption[] {\n    const t = this.searchText.toLowerCase().trim();\n    const allOptions = this.config.options || [];\n\n    if (this.config?.serverSearch) {\n      // For server search, return all options as-is (server handles filtering)\n      return allOptions;\n    }\n    \n    if (!t) {\n      // No search - return all options\n      return allOptions;\n    }\n\n    // Local search - filter options by search text only\n    return allOptions.filter((opt) => {\n      const text = this.getOptionLabel(opt).toLowerCase();\n      return text.includes(t);\n    });\n  }\n\n  private getSelectedIds(): any[] {\n    const value = this.currentValue;\n    return value !== undefined && value !== null ? [value] : [];\n  }\n\n  onOptionClick(opt: SelectOption): void {\n    if (this.isDisabled) return;\n    \n    // Emit the full option object (with name, id, etc.) instead of just the value\n    // This allows the parent to receive the complete workspace object\n    const newValue = opt;\n    const selectedOption = opt;\n    \n    // Close dropdown after selection (unless closeOnSelect is false)\n    if (this.config?.closeOnSelect !== false) {\n      this.closeDropdown();\n    }\n    \n    // Update value\n    if (this.form) {\n      this.currentControl.setValue(newValue, { emitEvent: true });\n    } else {\n      this.value = newValue;\n      this.syncValueFromInput();\n    }\n    \n    this.onSelectionChange(newValue, selectedOption);\n  }\n\n  onSelectionChange(newValue?: any, selectedOption?: SelectOption): void {\n    const value = newValue !== undefined ? newValue : this.currentValue;\n    \n    // Emit valueChange for two-way binding\n    this.valueChange.emit(value);\n    \n    if (typeof this.config?.onChange === 'function') {\n      try {\n        this.config.onChange(value);\n      } catch (error) {\n        console.error('cqa-workspace-selector onChange handler error:', error);\n      }\n    }\n    \n    this.selectionChange.emit({\n      key: this.config?.key || '',\n      value,\n      option: selectedOption,\n    });\n  }\n\n  onSearchInput(value: string): void {\n    this.searchText = value ?? '';\n    if (this.config?.serverSearch) {\n      try { this.config.onSearch?.(value ?? ''); } catch {}\n      this.searchChange.emit({ key: this.config?.key || '', query: value ?? '' });\n      this.loadingMore = false;\n      this.lastOptionsLength = (this.config?.options || []).length;\n    }\n  }\n\n  toggleDropdown(): void {\n    if (this.isDisabled) return;\n    if (this.isOpen) {\n      this.closeDropdown();\n    } else {\n      this.openDropdown();\n    }\n  }\n\n  openDropdown(): void {\n    if (this.isDisabled) return;\n    this.isOpen = true;\n    this.selectClick.emit();\n    this.hasScrolledSinceOpen = false;\n    \n    if ((this.config?.options || []).length > 0) {\n      this.loadingMore = false;\n    }\n\n    if (this.config?.serverSearch && this.toBoolean(this.config?.initialFetchOnOpen)) {\n      const q = this.searchText || '';\n      try { this.config.onSearch?.(q); } catch {}\n      this.searchChange.emit({ key: this.config?.key || '', query: q });\n    }\n\n    setTimeout(() => {\n      this.setupScrollListener();\n      if (this.config?.searchable) {\n        const input = this.dropdownPanel?.nativeElement?.querySelector<HTMLInputElement>('.workspace-search-input');\n        input?.focus();\n      }\n    }, 0);\n  }\n\n  closeDropdown(): void {\n    this.isOpen = false;\n    this.searchText = '';\n    if (this.panelScrollEl) {\n      try { this.panelScrollEl.removeEventListener('scroll', this.onPanelScroll); } catch {}\n      this.panelScrollEl = undefined;\n    }\n    this.loadingMore = false;\n  }\n\n  private setupScrollListener(): void {\n    if (!this.config?.hasMore) return;\n    const panel = this.dropdownPanel?.nativeElement?.querySelector('.workspace-options-container') as HTMLElement;\n    if (panel) {\n      this.panelScrollEl = panel;\n      panel.addEventListener('scroll', this.onPanelScroll, { passive: true });\n    }\n  }\n\n  onScrolledIndexChange(index: number): void {\n    this.hasScrolledSinceOpen = true;\n    if (!this.config?.hasMore || this.loadingMore) return;\n    const viewport = this.viewport?.elementRef?.nativeElement;\n    if (!viewport) return;\n    const itemCount = this.displayedOptions.length;\n    const visibleItems = Math.ceil(viewport.clientHeight / this.itemSize);\n    if (index + visibleItems >= itemCount - 1) {\n      this.loadingMore = true;\n      const key = this.config?.key || '';\n      const q = this.searchText || '';\n      this.loadMore.emit({ key, query: q });\n      try { this.config.onLoadMore?.(q); } catch {}\n    }\n  }\n\n  trackByOption = (index: number, opt: SelectOption | null | undefined): any => {\n    if (!opt) return `index-${index}`;\n    // Use a simple identifier that doesn't require calling methods\n    return opt.id ?? opt.value ?? `option-${index}`;\n  }\n\n  highlightText(text: string): string {\n    if (!text || !this.config?.highlightPattern) {\n      return this.escapeHtml(text);\n    }\n\n    const pattern = this.config.highlightPattern;\n    if (typeof pattern === 'function') {\n      return pattern(text);\n    }\n\n    let regex: RegExp;\n    if (typeof pattern === 'string') {\n      try {\n        regex = new RegExp(pattern, 'gi');\n      } catch (e) {\n        console.warn('Invalid highlight pattern:', pattern);\n        return this.escapeHtml(text);\n      }\n    } else {\n      regex = pattern;\n    }\n\n    const escaped = this.escapeHtml(text);\n    return escaped.replace(regex, (match) => `<span class=\"cqa-text-primary\">${match}</span>`);\n  }\n\n  private escapeHtml(text: string): string {\n    if (!text) return '';\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n\n  get hasHighlighting(): boolean {\n    return !!this.config?.highlightPattern;\n  }\n\n  @HostListener('document:click', ['$event'])\n  handleDocumentClick(event: MouseEvent): void {\n    if (!this.isOpen) return;\n    const target = event.target as HTMLElement | null;\n    if (!target) return;\n    if (this.hostEl?.nativeElement && this.hostEl.nativeElement.contains(target)) {\n      return;\n    }\n    this.closeDropdown();\n  }\n}\n\n","<div class=\"cqa-ui-root\" #host>\n  <ng-container [formGroup]=\"currentForm\">\n    <label *ngIf=\"config.label\"\n      class=\"form-label cqa-text-[#374151] cqa-text-[14px] cqa-font-medium cqa-block cqa-leading-[1.4] cqa-mb-2\">{{\n      config.label }}</label>\n    \n    <div class=\"workspace-selector-wrapper cqa-relative cqa-w-full\">\n      <!-- Trigger Button -->\n      <button\n        type=\"button\"\n        class=\"workspace-selector-trigger cqa-w-full cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-border-solid cqa-border cqa-border-[#D1D5DB] cqa-rounded-[8px] cqa-bg-white cqa-text-left cqa-cursor-pointer hover:cqa-border-[#9CA3AF] focus:cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#4F46E5] focus:cqa-ring-offset-1 disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\"\n        [disabled]=\"isDisabled\"\n        (click)=\"toggleDropdown()\"\n        [attr.aria-expanded]=\"isOpen\"\n        aria-haspopup=\"listbox\">\n        <span class=\"cqa-flex-1 cqa-truncate cqa-text-[14px] cqa-text-[#0A0A0A]\"\n          [class.cqa-text-[#9CA3AF]]=\"!displayValue\">\n          {{ displayValue || displayPlaceholder }}\n        </span>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-shrink-0\">\n          <svg *ngIf=\"loadingMore || config?.isLoading\" width=\"16\" height=\"16\" viewBox=\"0 0 50 50\" aria-label=\"loading\"\n               xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-animate-spin\">\n            <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"/>\n            <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n              <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\"\n                                dur=\"0.8s\" repeatCount=\"indefinite\"/>\n            </path>\n          </svg>\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n               [class.cqa-rotate-180]=\"isOpen\">\n            <path d=\"M4 6L8 10L12 6\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n          </svg>\n        </div>\n      </button>\n\n      <!-- Dropdown Panel -->\n      <div\n        #dropdownPanel\n        *ngIf=\"isOpen\"\n        class=\"workspace-selector-panel cqa-absolute cqa-z-50 cqa-w-full cqa-mt-1 cqa-bg-white cqa-border cqa-border-[#D1D5DB] cqa-rounded-[8px] cqa-shadow-lg cqa-overflow-hidden\">\n        \n        <!-- Search Input -->\n        <div *ngIf=\"config.searchable\" class=\"workspace-search-container cqa-p-2 cqa-border-b cqa-border-[#E5E7EB]\">\n          <input\n            type=\"text\"\n            class=\"workspace-search-input cqa-w-full cqa-px-3 cqa-py-2 cqa-border cqa-border-[#D1D5DB] cqa-rounded-[6px] cqa-text-[14px] cqa-text-[#0A0A0A] focus:cqa-outline-none\"\n            placeholder=\"Search...\"\n            [value]=\"searchText\"\n            (input)=\"onSearchInput($any($event.target).value)\"\n            (click)=\"$event.stopPropagation()\"\n            (mousedown)=\"$event.stopPropagation()\"\n            (keydown)=\"$event.stopPropagation()\" />\n        </div>\n\n        <!-- Options Container with Virtual Scroll -->\n        <div class=\"workspace-options-container\">\n          <!-- No results state -->\n          <div *ngIf=\"displayedOptions.length === 0 && !(config?.isLoading || loadingMore)\"\n            class=\"cqa-px-4 cqa-py-3 cqa-text-[14px] cqa-text-[#9CA3AF] cqa-text-center\">\n            No results\n          </div>\n\n          <cdk-virtual-scroll-viewport\n            *ngIf=\"displayedOptions.length > 0\"\n            #viewport\n            [itemSize]=\"itemSize\"\n            minBufferPx=\"200\"\n            maxBufferPx=\"400\"\n            [style.height.px]=\"viewportHeight\"\n            style=\"width: 100%; display: block; overflow: auto;\"\n            (scrolledIndexChange)=\"onScrolledIndexChange($event)\">\n            \n            <div\n              *cdkVirtualFor=\"let opt of displayedOptions; trackBy: trackByOption\"\n              class=\"workspace-option cqa-px-4 cqa-py-3 cqa-cursor-pointer hover:cqa-bg-[#F3F4F6] cqa-border-b cqa-border-[#E5E7EB] last:cqa-border-b-0\"\n              [style.height.px]=\"itemSize\"\n              [style.display]=\"'flex'\"\n              [style.align-items]=\"'center'\"\n              [class.cqa-bg-[#F3F4F6]]=\"isOptionSelected(opt)\"\n              [class.cqa-bg-[#EEF2FF]]=\"isOptionSelected(opt)\"\n              (click)=\"onOptionClick(opt)\">\n              <span class=\"cqa-text-[14px] cqa-text-[#0A0A0A]\"\n                *ngIf=\"hasHighlighting\"\n                [innerHTML]=\"highlightText(getOptionLabel(opt))\"></span>\n              <span class=\"cqa-text-[14px] cqa-text-[#0A0A0A]\"\n                *ngIf=\"!hasHighlighting\">\n                {{ getOptionLabel(opt) }}\n              </span>\n            </div>\n          </cdk-virtual-scroll-viewport>\n\n          <!-- Loading more indicator -->\n          <div *ngIf=\"config?.hasMore && (loadingMore || config?.isLoading) && displayedOptions.length > 0\"\n            class=\"cqa-px-4 cqa-py-3 cqa-text-[14px] cqa-text-[#6B7280] cqa-text-center cqa-border-t cqa-border-[#E5E7EB]\">\n            Loading...\n          </div>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n</div>\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { WorkspaceSelectorConfig } from '../workspace-selector/workspace-selector.component';\n\nexport interface HeaderSelectOption {\n  id?: any;\n  value?: any;\n  name?: string;\n  label?: string;\n}\n\n@Component({\n  selector: 'cqa-dashboard-header',\n  templateUrl: './dashboard-header.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class DashboardHeaderComponent {\n  @Input() title: string = '';\n  @Input() badgeText?: string;\n  @Input() badgeClass: string = 'bg-[#D1FAE5] text-[#065F46]';\n  @Input() headerClass: string = '';\n  @Input() showHeader: boolean = true;\n  @Input() showLogo: boolean = true;\n  @Input() logoUrl?: string;\n  @Input() showHelpIcon: boolean = true;\n  @Input() helpIconTooltip: string = 'Help';\n  @Output() helpIconClick = new EventEmitter<void>();\n  @Input() showPlusIcon: boolean = false;\n  @Output() plusIconClick = new EventEmitter<void>();\n\n  // Optional workspace select on the right\n  @Input() workspaceOptions: HeaderSelectOption[] = [];\n  @Input() workspacePlaceholder: string = 'Workspace';\n  @Input() workspaceDisabled: boolean = false;\n  @Input() workspaceValue?: any;\n  @Input() workspaceSearchable: boolean = false;\n  // Server-side search/load-more support for workspace select\n  @Input() workspaceServerSearch: boolean = false;\n  @Input() workspaceHasMore: boolean = false;\n  @Input() workspaceIsLoading: boolean = false;\n  @Input() workspaceCloseOnSelect: boolean = false;\n  @Input() workspaceOnSearch?: (query: string) => void;\n  @Input() workspaceOnLoadMore?: (query?: string) => void;\n  @Input() workspaceItemSize?: number;\n  @Input() workspaceValueBy?: string;\n  @Input() workspaceViewportHeight?: number;\n  @Output() workspaceSearch = new EventEmitter<string>();\n  @Output() workspaceLoadMore = new EventEmitter<string>();\n  @Input() showWorkspaceSelector: boolean = true;\n  @Output() workspaceValueChange = new EventEmitter<any>();\n  @Output() workspaceSelectClick = new EventEmitter<void>();\n\n  workspaceForm: FormGroup = new FormGroup({\n    workspace: new FormControl(),\n  });\n\n  ngOnInit(): void {\n    this.syncFormFromInput();\n    this.workspaceForm.get('workspace')?.valueChanges.subscribe((v) => {\n      this.workspaceValue = v;\n      this.workspaceValueChange.emit(v);\n    });\n  }\n\n  ngOnChanges(_changes: SimpleChanges): void {\n    this.syncFormFromInput();\n  }\n\n  get workspaceConfig(): WorkspaceSelectorConfig {\n    return {\n      key: 'workspace',\n      placeholder: this.workspacePlaceholder,\n      disabled: this.workspaceDisabled,\n      searchable: this.workspaceSearchable,\n      serverSearch: this.workspaceServerSearch,\n      hasMore: this.workspaceHasMore,\n      isLoading: this.workspaceIsLoading,\n      closeOnSelect: this.workspaceCloseOnSelect,\n      itemSize: this.workspaceItemSize,\n      valueBy: this.workspaceValueBy,\n      viewportHeight: this.workspaceViewportHeight,\n      onSearch: (q: string) => {\n        try { this.workspaceOnSearch?.(q); } catch {}\n        this.workspaceSearch.emit(q);\n      },\n      onLoadMore: (q?: string) => {\n        try { this.workspaceOnLoadMore?.(q); } catch {}\n        this.workspaceLoadMore.emit(q || '');\n      },\n      selectedValue: this.workspaceValue,\n      options: this.workspaceOptions,\n    };\n  }\n\n  private syncFormFromInput(): void {\n    const ctrl = this.workspaceForm.get('workspace');\n    if (!ctrl) return;\n    const val = this.workspaceValue;\n    // Single selection only - normalize array to single value\n    const normalized = Array.isArray(val) ? (val.length ? val[0] : undefined) : val;\n    ctrl.setValue(normalized, { emitEvent: false });\n  }\n\n  onWorkspaceValueChange(value: any): void {\n    this.workspaceValue = value;\n    this.workspaceValueChange.emit(value);\n  }\n\n  onWorkspaceSelectionChange(event: { key: string; value: any; option?: any }): void {\n    // event.value is the full workspace object with name, id, etc.\n    this.workspaceValue = event.value;\n    this.workspaceValueChange.emit(event.value);\n  }\n\n  onWorkspaceSearchChange(event: { key: string; query: string }): void {\n    try { this.workspaceOnSearch?.(event.query); } catch {}\n    this.workspaceSearch.emit(event.query);\n  }\n\n  onWorkspaceLoadMore(event: { key: string; query: string }): void {\n    try { this.workspaceOnLoadMore?.(event.query); } catch {}\n    this.workspaceLoadMore.emit(event.query);\n  }\n}\n\n\n","<div class=\"cqa-ui-root\" *ngIf=\"showHeader\">\n  <div\n    class=\"cqa-w-full cqa-flex cqa-items-center cqa-justify-between cqa-bg-white cqa-pr-6 cqa-pl-2 lg:cqa-px-6 lg:cqa-py-[6px] cqa-py-2 cqa-border-b cqa-border-default cqa-shadow-header\"\n    [ngClass]=\"headerClass\">\n    <!-- Left branding block -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0\">\n      <div class=\"cqa-pr-4 lg:cqa-hidden cqa-gap-2 md:cqa-flex cqa-hidden\">\n        <!-- <cqa-button variant=\"filled\" icon=\"\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n          <svg width=\"31\" height=\"22\" viewBox=\"0 0 31 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M5.16675 11H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path d=\"M5.16675 16.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path d=\"M5.16675 5.5H25.8334\" stroke=\"white\" stroke-width=\"1.83333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n          </svg>\n        </cqa-button> -->\n        <!-- <span class=\"cqa-border-l cqa-border-primary-surface cqa-hidden md:cqa-flex\"></span> -->\n        <cqa-button *ngIf=\"showPlusIcon\" variant=\"filled\" icon=\"\" class=\"cqa-hidden md:cqa-flex\" [customClass]=\"'!cqa-rounded-[10px] !cqa-p-[7px] !cqa-min-w-[47px]'\">\n          <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M4.58337 11H17.4167\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path d=\"M11 4.58301V17.4163\" stroke=\"white\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n          </svg>\n        </cqa-button>\n      </div>\n      <!-- Optional projected logo -->\n      <img *ngIf=\"showLogo && logoUrl\" [src]=\"logoUrl\" alt=\"Logo\" class=\"cqa-w-9 cqa-h-9 cqa-object-contain\" />\n      <svg *ngIf=\"showLogo && !logoUrl\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n        xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n        <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" fill=\"url(#pattern0_6303_22035)\" />\n        <rect x=\"0.5\" y=\"0.5\" width=\"31\" height=\"31\" rx=\"15.5\" stroke=\"#D8D9FC\" />\n        <defs>\n          <pattern id=\"pattern0_6303_22035\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\">\n            <use xlink:href=\"#image0_6303_22035\" transform=\"scale(0.005)\" />\n          </pattern>\n          <image id=\"image0_6303_22035\" width=\"200\" height=\"200\" preserveAspectRatio=\"none\"\n            xlink:href=\"data:image/jpeg;base64,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\" />\n        </defs>\n      </svg>\n\n      <!-- Title + optional badge -->\n      <div class=\"cqa-items-end cqa-gap-3 cqa-min-w-0 cqa-hidden md:cqa-flex\">\n        <div\n          class=\"cqa-truncate cqa-text-[#22223B] cqa-font-extrabold cqa-text-[32px] cqa-font-nunito-sans cqa-leading-[1]\">\n          {{ title }}</div>\n        <span *ngIf=\"badgeText\"\n          class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-lg cqa-text-[12px] cqa-font-medium cqa-leading-4 cqa-whitespace-nowrap cqa-text-[#007A55] cqa-bg-[#D0FAE5] cqa-border cqa-border-[#A4F4CF]\"\n          [ngClass]=\"badgeClass\">{{ badgeText }}</span>\n      </div>\n    </div>\n\n    <!-- Right controls/actions -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1 cqa-justify-end\">\n      <!-- Optional workspace select -->\n      <div *ngIf=\"showWorkspaceSelector\" class=\"header-dropdown\">\n        <cqa-workspace-selector \n          [form]=\"workspaceForm\" \n          [config]=\"workspaceConfig\" \n          [value]=\"workspaceValue\"\n          (valueChange)=\"onWorkspaceValueChange($event)\"\n          (selectionChange)=\"onWorkspaceSelectionChange($event)\"\n          (selectClick)=\"workspaceSelectClick.emit()\"\n          (searchChange)=\"onWorkspaceSearchChange($event)\"\n          (loadMore)=\"onWorkspaceLoadMore($event)\">\n        </cqa-workspace-selector>\n      </div>\n\n      <!-- Help icon button -->\n      <button \n        *ngIf=\"showHelpIcon\" \n        mat-icon-button \n        [matTooltip]=\"helpIconTooltip || 'Help'\"\n        [matTooltipDisabled]=\"!helpIconTooltip\"\n        matTooltipPosition=\"below\"\n        matTooltipShowDelay=\"300\"\n        (click)=\"helpIconClick.emit()\" \n        class=\"cqa-flex cqa-items-center\">\n        <mat-icon style=\"height: 36px; width: 36px; pointer-events: none;\">\n          <svg width=\"36\" height=\"36\" viewBox=\"0 0 36 36\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M0 18C0 8.05888 8.05888 0 18 0C27.9411 0 36 8.05888 36 18C36 27.9411 27.9411 36 18 36C8.05888 36 0 27.9411 0 18Z\" fill=\"#D8D9FC\" fill-opacity=\"0.3\"/>\n            <path d=\"M18.0001 28.4163C23.9832 28.4163 28.8334 23.7526 28.8334 17.9997C28.8334 12.2467 23.9832 7.58301 18.0001 7.58301C12.017 7.58301 7.16675 12.2467 7.16675 17.9997C7.16675 23.7526 12.017 28.4163 18.0001 28.4163Z\" stroke=\"#3F43EE\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M14.8474 14.8751C15.1021 14.1789 15.6048 13.5919 16.2665 13.218C16.9282 12.844 17.7062 12.7073 18.4627 12.8321C19.2192 12.9569 19.9053 13.335 20.3996 13.8996C20.8939 14.4642 21.1644 15.1788 21.1632 15.9168C21.1632 18.0001 17.9132 19.0418 17.9132 19.0418\" stroke=\"#3F43EE\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M18 23.208H18.01\" stroke=\"#3F43EE\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </mat-icon>\n      </button>\n\n      <ng-content></ng-content>\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, OnDestroy } from '@angular/core';\n\nexport type CoverageStatus = 'success' | 'error' | 'neutral';\n\nexport interface CoverageItem {\n  /** Row label, e.g. \"Input Validation\" */\n  label: string;\n  /** Value in percent (0-100) */\n  percent: number;\n  /** Visual status to colorize the bar/text */\n  status?: CoverageStatus;\n}\n\n@Component({\n  selector: 'cqa-coverage-module-card',\n  templateUrl: './coverage-module-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class CoverageModuleCardComponent implements OnDestroy {\n  /** Card title, e.g. \"AI Ask\" */\n  @Input() title: string = 'Coverage';\n  /** Number of issues to display next to title */\n  @Input() issues: number = 0;\n  /** Optional \"View\" action visibility */\n  @Input() showViewAction: boolean = true;\n  /** Layout option: 'default' or 'mobile' */\n  @Input() layout: 'default' | 'mobile' = 'default';\n  /** Middle metrics: left group */\n  @Input() positiveCount: number = 0;\n  @Input() negativeCount: number = 0;\n  @Input() edgeCaseCount: number = 0;\n  @Input() positiveLabel: string = 'Positive';\n  @Input() negativeLabel: string = 'Negative';\n  @Input() edgeCaseLabel: string = 'Edge Case';\n  /** Middle metrics: right group */\n  @Input() aiCount: number = 0;\n  @Input() humanCount: number = 0;\n  @Input() aiLabel: string = 'AI';\n  @Input() humanLabel: string = 'Human';\n  /** Rows of coverage with percentage bars */\n  @Input() items: CoverageItem[] = [];\n  /** CTA button label */\n  @Input() ctaText: string = 'AI Coverage';\n  /** Disable CTA */\n  @Input() ctaDisabled: boolean = false;\n  /** Generation duration in milliseconds (default ~12s) */\n  @Input() generationMs: number = 200;\n  /** Whether the component is currently generating (configurable) */\n  @Input() isGenerating: boolean = false;\n  /** Whether the generation has completed (configurable) */\n  @Input() isGenerated: boolean = false;\n\n  @Output() view = new EventEmitter<void>();\n  @Output() issuesClicked = new EventEmitter<void>();\n  @Output() ctaClicked = new EventEmitter<void>();\n  /** Emits when the AI coverage area is clicked */\n  @Output() aiCoverageClick = new EventEmitter<void>();\n  /** Emits when the Positive count/label is clicked */\n  @Output() positiveClicked = new EventEmitter<void>();\n  /** Emits when the Negative count/label is clicked */\n  @Output() negativeClicked = new EventEmitter<void>();\n  /** Emits when the Edge Case count/label is clicked */\n  @Output() edgeCaseClicked = new EventEmitter<void>();\n  private generationTimerId?: number;\n\n  statusColorClass(item: CoverageItem): string {\n    const status = item.status ?? 'neutral';\n    switch (status) {\n      case 'success':\n        return 'cqa-bg-[#10B981]'; // green\n      case 'error':\n        return 'cqa-bg-[#EF4444]'; // red\n      default:\n        return 'cqa-bg-[#3B82F6]'; // blue\n    }\n  }\n\n  textColorClass(item: CoverageItem): string {\n    const status = item.status ?? 'neutral';\n    switch (status) {\n      case 'success':\n        return 'cqa-text-[#10B981]';\n      case 'error':\n        return 'cqa-text-[#EF4444]';\n      default:\n        return 'cqa-text-[#374151]';\n    }\n  }\n\n  formatPercent(pct: number): string {\n    if (pct === undefined || pct === null || Number.isNaN(pct)) return '0%';\n    const clamped = Math.max(0, Math.min(100, pct));\n    return `${clamped}%`;\n  }\n\n  /** Computed CTA button class to switch to light green after generation */\n  get ctaButtonClass(): string {\n    const base = 'cqa-w-full cqa-text-[14px] cqa-leading-[20px] cqa-font-semibold';\n    if (this.isGenerated) {\n      // light green background, dark green text, subtle green border\n      return `${base} cqa-bg-[#D1FAE5] cqa-text-[#065F46] cqa-border-[#A7F3D0]`;\n    }\n    if(this.isGenerating) {\n      return `${base} cqa-bg-primary-surface cqa-text-primary`;\n    }\n    return base;\n  }\n\n  onAiCoverageClick(): void {\n    if (this.isGenerating) {\n      return;\n    }\n    this.ctaClicked.emit();\n    this.aiCoverageClick.emit();\n\n    // Start generating state\n    this.isGenerated = false;\n    this.isGenerating = true;\n\n    // Clear any existing timer defensively\n    if (this.generationTimerId !== undefined) {\n      clearTimeout(this.generationTimerId);\n    }\n    \n    this.generationTimerId = window.setTimeout(() => {\n      this.isGenerating = false;\n      this.isGenerated = true;\n      this.generationTimerId = undefined;\n    }, this.generationMs);\n  }\n\n  ngOnDestroy(): void {\n    if (this.generationTimerId !== undefined) {\n      clearTimeout(this.generationTimerId);\n      this.generationTimerId = undefined;\n    }\n  }\n}\n\n\n","<div class=\"cqa-ui-root\" style=\"height: 100%;\">\n  <div\n    class=\"cqa-w-full cqa-h-full cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-py-[10px] md:cqa-px-[17px] cqa-px-3 cqa-shadow-card cqa-flex cqa-flex-col\">\n    <!-- Header -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3 cqa-shrink-0 cqa-min-h-[28px]\">\n      <h3 class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-font-inter cqa-text-dialog cqa-flex-shrink\">{{ title }}</h3>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-shrink-0 cqa-flex-nowrap\">\n          <span (click)=\"issuesClicked.emit()\"\n            class=\"cqa-cursor-pointer cqa-px-[10px] cqa-py-[4px] cqa-text-[12px] cqa-leading-[16px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-full cqa-bg-warning-light cqa-text-danger cqa-whitespace-nowrap cqa-flex-shrink-0\">\n            {{ issues }} {{ issues === 1 ? 'issue' : 'issues' }}\n          </span>\n          <button type=\"button\"\n            class=\"cqa-text-[14px] cqa-leading-[20px] cqa-font-inter cqa-text-primary cqa-flex cqa-items-center cqa-gap-1 cqa-whitespace-nowrap cqa-flex-shrink-0\"\n            *ngIf=\"showViewAction\" (click)=\"view.emit()\">\n            View\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M6 12L10 8L6 4\" stroke=\"#4F46E5\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n                stroke-linejoin=\"round\" />\n            </svg>\n          </button>\n        </div>\n      </div>\n\n    <!-- Default Layout: Middle metrics row -->\n    <ng-container *ngIf=\"layout === 'default'\">\n      <div class=\"cqa-grid md:cqa-grid-cols-4 cqa-grid-cols-2 cqa-gap-3 cqa-mb-4 cqa-py-2\" style=\"border-top: 1px solid #F3F4F6; border-bottom: 1px solid #F3F4F6; border-left: none; border-right: none;\">\n        <!-- Left: Positive / Negative / Edge Case -->\n        <div class=\"cqa-text-center cqa-cursor-pointer\" (click)=\"positiveClicked.emit()\">\n          <div class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-text-[#059669]\">{{ positiveCount }}</div>\n          <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-dialog-muted\">{{ positiveLabel }}</div>\n        </div>\n        <div class=\"cqa-text-center cqa-cursor-pointer\" (click)=\"negativeClicked.emit()\">\n          <div class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-text-[#EF4444]\">{{ negativeCount }}</div>\n          <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-dialog-muted\">{{ negativeLabel }}</div>\n        </div>\n        <div class=\"cqa-text-center cqa-cursor-pointer\" (click)=\"edgeCaseClicked.emit()\">\n          <div class=\"cqa-text-[18px] cqa-leading-[28px] cqa-font-bold cqa-text-[#F59E0B]\">{{ edgeCaseCount }}</div>\n          <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-dialog-muted\">{{ edgeCaseLabel }}</div>\n        </div>\n\n        <!-- Right: AI / Human -->\n        <div class=\"cqa-text-center cqa-flex cqa-items-center cqa-justify-center cqa-flex-col\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-items-center cqa-justify-center cqa-w-[60px] cqa-cursor-pointer\">\n              <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-bold cqa-font-inter cqa-text-primary cqa-flex cqa-items-center cqa-gap-[2px]\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_7415_11751)\"><path d=\"M4.9685 7.75012C4.92386 7.57709 4.83367 7.41918 4.70731 7.29282C4.58095 7.16646 4.42304 7.07626 4.25 7.03162L1.1825 6.24062C1.13017 6.22577 1.08411 6.19425 1.05131 6.15085C1.01851 6.10744 1.00076 6.05453 1.00076 6.00012C1.00076 5.94572 1.01851 5.89281 1.05131 5.8494C1.08411 5.806 1.13017 5.77448 1.1825 5.75962L4.25 4.96812C4.42298 4.92353 4.58085 4.83341 4.7072 4.70714C4.83356 4.58088 4.92378 4.42307 4.9685 4.25012L5.7595 1.18262C5.7742 1.13008 5.80569 1.0838 5.84916 1.05082C5.89263 1.01785 5.94569 1 6.00025 1C6.05481 1 6.10787 1.01785 6.15134 1.05082C6.19481 1.0838 6.2263 1.13008 6.241 1.18262L7.0315 4.25012C7.07614 4.42316 7.16633 4.58107 7.29269 4.70743C7.41905 4.83379 7.57696 4.92399 7.75 4.96862L10.8175 5.75912C10.8703 5.77367 10.9168 5.80513 10.9499 5.84866C10.9831 5.8922 11.001 5.94541 11.001 6.00012C11.001 6.05484 10.9831 6.10805 10.9499 6.15159C10.9168 6.19512 10.8703 6.22657 10.8175 6.24112L7.75 7.03162C7.57696 7.07626 7.41905 7.16646 7.29269 7.29282C7.16633 7.41918 7.07614 7.57709 7.0315 7.75012L6.2405 10.8176C6.2258 10.8702 6.19431 10.9165 6.15084 10.9494C6.10737 10.9824 6.05431 11.0002 5.99975 11.0002C5.94519 11.0002 5.89213 10.9824 5.84866 10.9494C5.80519 10.9165 5.7737 10.8702 5.759 10.8176L4.9685 7.75012Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 1.5V3.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11 2.5H9\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8.5V9.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.5 9H1.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><defs><clipPath id=\"clip0_7415_11751\"><rect width=\"12\" height=\"12\" fill=\"white\"/></clipPath></defs></svg>\n                {{ aiLabel }}\n              </span>\n              <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-font-bold cqa-font-inter cqa-text-dialog\">{{ aiCount }}</span>\n            </div>\n            <div class=\"cqa-bg-primary-surface cqa-w-[2px] cqa-h-full cqa-mx-[3.5px]\"></div>\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-items-center cqa-justify-center cqa-w-[60px]\">\n              <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-bold cqa-font-inter cqa-text-dialog-secondary cqa-flex cqa-items-center cqa-gap-[2px]\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 10.5V9.5C9.5 8.96957 9.28929 8.46086 8.91421 8.08579C8.53914 7.71071 8.03043 7.5 7.5 7.5H4.5C3.96957 7.5 3.46086 7.71071 3.08579 8.08579C2.71071 8.46086 2.5 8.96957 2.5 9.5V10.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 5.5C7.10457 5.5 8 4.60457 8 3.5C8 2.39543 7.10457 1.5 6 1.5C4.89543 1.5 4 2.39543 4 3.5C4 4.60457 4.89543 5.5 6 5.5Z\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                {{ humanLabel }}\n              </span>\n              <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-font-bold cqa-font-inter cqa-text-dialog\">{{ humanCount }}</span>\n            </div>\n          </div>\n          <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-dialog-muted cqa-pt-[2px] cqa-pb-1\">Coverage</div>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Mobile Layout: Stacked metrics -->\n    <ng-container *ngIf=\"layout === 'mobile'\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-4 cqa-py-2\" style=\"border-top: 1px solid #F3F4F6; border-bottom: 1px solid #F3F4F6; border-left: none; border-right: none;\">\n        <!-- First row: Positive / Negative / Edge Case -->\n        <div class=\"cqa-grid cqa-grid-cols-5 cqa-gap-2\">\n          <div class=\"cqa-col-span-1 cqa-text-center cqa-cursor-pointer\" (click)=\"positiveClicked.emit()\">\n            <div class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#059669]\">{{ positiveCount }}</div>\n            <div class=\"cqa-text-[11px] cqa-leading-[14px] cqa-text-dialog-muted\">{{ positiveLabel }}</div>\n          </div>\n          <div class=\"cqa-col-span-1\"></div>\n          <div class=\"cqa-col-span-1 cqa-text-center cqa-cursor-pointer\" (click)=\"negativeClicked.emit()\">\n            <div class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#EF4444]\">{{ negativeCount }}</div>\n            <div class=\"cqa-text-[11px] cqa-leading-[14px] cqa-text-dialog-muted\">{{ negativeLabel }}</div>\n          </div>\n          <div class=\"cqa-col-span-1\"></div>\n          <div class=\"cqa-col-span-1 cqa-text-center cqa-cursor-pointer\" (click)=\"edgeCaseClicked.emit()\">\n            <div class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#F59E0B]\">{{ edgeCaseCount }}</div>\n            <div class=\"cqa-text-[11px] cqa-leading-[14px] cqa-text-dialog-muted\">{{ edgeCaseLabel }}</div>\n          </div>\n        </div>\n        <!-- Separator -->\n        <div class=\"cqa-w-full cqa-h-[1px] cqa-bg-[#F3F4F6]\"></div>\n        <!-- Second row: AI / Human (aligned between Positive-Negative and Negative-Edge Case) -->\n        <div class=\"cqa-grid cqa-grid-cols-5 cqa-gap-2\">\n          <div class=\"cqa-col-span-1\"></div>\n          <div class=\"cqa-col-span-1 cqa-text-center\">\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-items-center cqa-justify-center\">\n              <span class=\"cqa-text-[11px] cqa-leading-[14px] cqa-font-bold cqa-text-primary cqa-flex cqa-items-center cqa-gap-[2px]\">\n                <svg width=\"10\" height=\"10\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_7415_11751)\"><path d=\"M4.9685 7.75012C4.92386 7.57709 4.83367 7.41918 4.70731 7.29282C4.58095 7.16646 4.42304 7.07626 4.25 7.03162L1.1825 6.24062C1.13017 6.22577 1.08411 6.19425 1.05131 6.15085C1.01851 6.10744 1.00076 6.05453 1.00076 6.00012C1.00076 5.94572 1.01851 5.89281 1.05131 5.8494C1.08411 5.806 1.13017 5.77448 1.1825 5.75962L4.25 4.96812C4.42298 4.92353 4.58085 4.83341 4.7072 4.70714C4.83356 4.58088 4.92378 4.42307 4.9685 4.25012L5.7595 1.18262C5.7742 1.13008 5.80569 1.0838 5.84916 1.05082C5.89263 1.01785 5.94569 1 6.00025 1C6.05481 1 6.10787 1.01785 6.15134 1.05082C6.19481 1.0838 6.2263 1.13008 6.241 1.18262L7.0315 4.25012C7.07614 4.42316 7.16633 4.58107 7.29269 4.70743C7.41905 4.83379 7.57696 4.92399 7.75 4.96862L10.8175 5.75912C10.8703 5.77367 10.9168 5.80513 10.9499 5.84866C10.9831 5.8922 11.001 5.94541 11.001 6.00012C11.001 6.05484 10.9831 6.10805 10.9499 6.15159C10.9168 6.19512 10.8703 6.22657 10.8175 6.24112L7.75 7.03162C7.57696 7.07626 7.41905 7.16646 7.29269 7.29282C7.16633 7.41918 7.07614 7.57709 7.0315 7.75012L6.2405 10.8176C6.2258 10.8702 6.19431 10.9165 6.15084 10.9494C6.10737 10.9824 6.05431 11.0002 5.99975 11.0002C5.94519 11.0002 5.89213 10.9824 5.84866 10.9494C5.80519 10.9165 5.7737 10.8702 5.759 10.8176L4.9685 7.75012Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 1.5V3.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11 2.5H9\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8.5V9.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.5 9H1.5\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g><defs><clipPath id=\"clip0_7415_11751\"><rect width=\"12\" height=\"12\" fill=\"white\"/></clipPath></defs></svg>\n                {{ aiLabel }}\n              </span>\n              <span class=\"cqa-text-[13px] cqa-leading-[18px] cqa-font-bold cqa-text-dialog\">{{ aiCount }}</span>\n            </div>\n          </div>\n          <div class=\"cqa-col-span-1\"></div>\n          <div class=\"cqa-col-span-1 cqa-text-center\">\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-items-center cqa-justify-center\">\n              <span class=\"cqa-text-[11px] cqa-leading-[14px] cqa-font-bold cqa-text-dialog-secondary cqa-flex cqa-items-center cqa-gap-[2px]\">\n                <svg width=\"10\" height=\"10\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 10.5V9.5C9.5 8.96957 9.28929 8.46086 8.91421 8.08579C8.53914 7.71071 8.03043 7.5 7.5 7.5H4.5C3.96957 7.5 3.46086 7.71071 3.08579 8.08579C2.71071 8.46086 2.5 8.96957 2.5 9.5V10.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 5.5C7.10457 5.5 8 4.60457 8 3.5C8 2.39543 7.10457 1.5 6 1.5C4.89543 1.5 4 2.39543 4 3.5C4 4.60457 4.89543 5.5 6 5.5Z\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                {{ humanLabel }}\n              </span>\n              <span class=\"cqa-text-[13px] cqa-leading-[18px] cqa-font-bold cqa-text-dialog\">{{ humanCount }}</span>\n            </div>\n          </div>\n          <div class=\"cqa-col-span-1\"></div>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Body -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3 cqa-flex-1\">\n      <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <span class=\"cqa-w-[45%] cqa-text-[12px] cqa-leading-[16px] cqa-text-dialog-secondary cqa-flex cqa-items-center cqa-gap-2 cqa-shrink-0\">\n          <svg *ngIf=\"it.status=='success'\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-shrink-0\"><path d=\"M12.8333 6.46309V6.99976C12.8326 8.25767 12.4253 9.48165 11.6721 10.4892C10.9189 11.4967 9.86025 12.2337 8.65396 12.5904C7.44767 12.947 6.1584 12.9042 4.97844 12.4683C3.79848 12.0323 2.79105 11.2266 2.10639 10.1714C1.42174 9.11611 1.09654 7.8678 1.17931 6.61261C1.26208 5.35742 1.74837 4.16262 2.56566 3.20638C3.38295 2.25015 4.48746 1.58373 5.71444 1.30651C6.94143 1.02929 8.22515 1.15612 9.37417 1.66809\" stroke=\"#10B981\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.25 6.41634L7 8.16634L12.8333 2.33301\" stroke=\"#10B981\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          <svg *ngIf=\"it.status=='error'\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-shrink-0\"><path d=\"M7 12.8337C10.2217 12.8337 12.8333 10.222 12.8333 7.00033C12.8333 3.77866 10.2217 1.16699 7 1.16699C3.77834 1.16699 1.16666 3.77866 1.16666 7.00033C1.16666 10.222 3.77834 12.8337 7 12.8337Z\" stroke=\"#EF4444\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 4.66699V7.00033\" stroke=\"#EF4444\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 9.33301H7.00583\" stroke=\"#EF4444\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          {{ it.label }}\n        </span>\n        <div class=\"cqa-w-[45%] cqa-h-[6px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-shrink-0\">\n          <div class=\"cqa-h-full cqa-rounded-full\" [ngClass]=\"statusColorClass(it)\"\n            [style.width]=\"formatPercent(it.percent)\"></div>\n        </div>\n        <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-bold cqa-shrink-0\" [ngClass]=\"textColorClass(it)\">{{\n          formatPercent(it.percent) }}</span>\n      </div>\n    </div>\n\n    <!-- Footer -->\n     <cqa-button variant=\"filled\" [customClass]=\"ctaButtonClass\" (click)=\"onAiCoverageClick()\" class=\"cqa-mt-auto\">\n      <ng-container *ngIf=\"!isGenerating; else generatingTpl\">\n        <svg *ngIf=\"isGenerated\" width=\"18\" height=\"18\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.8333 6.46309V6.99976C12.8326 8.25767 12.4253 9.48165 11.6721 10.4892C10.9189 11.4967 9.86025 12.2337 8.65396 12.5904C7.44767 12.947 6.1584 12.9042 4.97844 12.4683C3.79848 12.0323 2.79105 11.2266 2.10639 10.1714C1.42174 9.11611 1.09654 7.8678 1.17931 6.61261C1.26208 5.35742 1.74837 4.16262 2.56566 3.20638C3.38295 2.25015 4.48746 1.58373 5.71444 1.30651C6.94143 1.02929 8.22515 1.15612 9.37417 1.66809\" stroke=\"#10B981\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.25 6.41634L7 8.16634L12.8333 2.33301\" stroke=\"#10B981\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        {{ ctaText }}\n        <svg *ngIf=\"!isGenerating && !isGenerated\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M9 3V15M3 9H15\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n        <svg *ngIf=\"isGenerated\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M9 3V15M3 9H15\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </ng-container>\n      <ng-template #generatingTpl>\n        <span class=\"cqa-inline-flex cqa-items-center cqa-gap-2\">\n          <svg *ngIf=\"!isGenerated\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\">\n            <circle cx=\"9\" cy=\"9\" r=\"7\" stroke-width=\"2\" stroke-opacity=\"0.25\"/>\n            <path d=\"M16 9a7 7 0 0 1-7 7\" stroke-width=\"2\">\n              <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 9 9\" to=\"360 9 9\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n            </path>\n          </svg>\n          <svg *ngIf=\"isGenerated\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" stroke=\"currentColor\">\n            <circle cx=\"9\" cy=\"9\" r=\"7\" stroke-width=\"2\" stroke-opacity=\"0.25\"/>\n            <path d=\"M16 9a7 7 0 0 1-7 7\" stroke-width=\"2\">\n              <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 9 9\" to=\"360 9 9\" dur=\"0.8s\" repeatCount=\"indefinite\"/>\n            </path>\n          </svg>\n          Generating\n        </span>\n      </ng-template>\n    </cqa-button>\n  </div>\n</div>","import { ChangeDetectionStrategy,  Component, Input, Output, EventEmitter } from '@angular/core';\n\nexport interface DistributionSegment {\n  label: string;\n  value: number;\n  /** Tailwind-like class or hex bg color */\n  colorClass?: string;\n}\n\nexport interface DistributionChildItem {\n  label: string;\n  value: number;\n  colorClass?: string;\n}\n\nexport interface DistributionItem {\n  icon?: string;\n  label: string;\n  value: number;\n  colorClass?: string; // used for icon/accent if desired\n  children?: DistributionChildItem[];\n}\n\n@Component({\n  selector: 'cqa-test-distribution-card',\n  templateUrl: './test-distribution-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class TestDistributionCardComponent {\n\n  @Input() title: string = 'Test Distribution';\n  @Input() segments: DistributionSegment[] = [];\n  @Input() items: DistributionItem[] = [];\n  @Output() itemClick = new EventEmitter<DistributionItem>();\n  @Output() childClick = new EventEmitter<{ parent: DistributionItem; child: DistributionChildItem }>();\n\n  private canvas: HTMLCanvasElement = document.createElement('canvas');\n  private context: CanvasRenderingContext2D | null = this.canvas.getContext('2d');\n  segmentHPadding: number = 4;\n\n  totalSegments(): number {\n    return this.visibleSegments.reduce((sum, s) => sum + (s.value || 0), 0) || 1;\n  }\n\n  segmentWidth(segment: DistributionSegment): string {\n    const total = this.totalSegments();\n    const segments = this.visibleSegments;\n    const minWidthPct = 8; // Minimum 8% to ensure label is visible\n    \n    // Calculate natural percentages for all segments\n    const naturalWidths = segments.map(s => ({\n      segment: s,\n      naturalPct: (s.value / total) * 100,\n      needsMinimum: (s.value / total) * 100 < minWidthPct\n    }));\n    \n    // Count how many segments need minimum width\n    const segmentsNeedingMinimum = naturalWidths.filter(w => w.needsMinimum).length;\n    const totalMinimumWidth = segmentsNeedingMinimum * minWidthPct;\n    \n    // Find current segment\n    const currentWidth = naturalWidths.find(w => w.segment === segment);\n    if (!currentWidth) {\n      return '0%';\n    }\n    \n    // If this segment needs minimum, give it minimum width\n    if (currentWidth.needsMinimum) {\n      return minWidthPct + '%';\n    }\n    \n    // For segments that don't need minimum, distribute remaining space proportionally\n    // Remaining space = 100% - (segments needing minimum * minWidthPct)\n    const remainingSpace = 100 - totalMinimumWidth;\n    const segmentsAboveMinimum = naturalWidths.filter(w => !w.needsMinimum);\n    const totalNaturalAboveMinimum = segmentsAboveMinimum.reduce((sum, w) => sum + w.naturalPct, 0);\n    \n    // If there's no natural space above minimum, just use natural percentage\n    if (totalNaturalAboveMinimum === 0) {\n      return Math.max(minWidthPct, currentWidth.naturalPct) + '%';\n    }\n    \n    // Scale the natural percentage to fit in remaining space\n    const scaledPct = (currentWidth.naturalPct / totalNaturalAboveMinimum) * remainingSpace;\n    \n    return Math.max(minWidthPct, scaledPct) + '%';\n  }\n\n  segmentMinWidth(segment: DistributionSegment): string {\n    if (!this.context) {\n      return '0px';\n    }\n    this.context.font = '12px Inter';\n\n    const width = this.context.measureText(segment.label).width;\n    return `${width + this.segmentHPadding * 2}px`;\n  }\n\n  segmentColor(segment: DistributionSegment, fallback: string): string {\n    return segment.colorClass || fallback;\n  }\n\n  getChildIcon(label: string): string | null {\n    const normalizedLabel = label.toLowerCase().trim();\n    if (normalizedLabel === 'ios' || normalizedLabel === 'apple') {\n      return 'apple';\n    } else if (normalizedLabel === 'android') {\n      return 'android';\n    }\n    return null;\n  }\n\n  getItemIconColor(item: DistributionItem): string {\n    // Return color based on label or use default\n    const label = item.label.toLowerCase();\n    if (label === 'web') {\n      return '#4F46E5';\n    } else if (label === 'mobile') {\n      return '#9333EA';\n    } else if (label === 'api') {\n      return '#059669';\n    }\n    return '#4F46E5'; // default\n  }\n\n  /**\n   * Filter segments to only show those with value > 0\n   */\n  get visibleSegments(): DistributionSegment[] {\n    return this.segments.filter(segment => segment.value > 0);\n  }\n\n  onItemClick(item: DistributionItem, event: Event): void {\n    event.stopPropagation();\n    this.itemClick.emit(item);\n  }\n\n  onChildClick(parent: DistributionItem, child: DistributionChildItem, event: Event): void {\n    event.stopPropagation();\n    this.childClick.emit({ parent, child });\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-bg-white cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-border-default cqa-py-[14.5px] cqa-px-[17px] cqa-shadow-card\">\n    <!-- Title -->\n    <h3 class=\"cqa-text-[16px] cqa-leading-6 cqa-font-inter cqa-text-[#111827] cqa-mb-2\">{{ title }}</h3>\n\n    <!-- Stacked segments pill -->\n    <div class=\"cqa-w-full cqa-h-[24px] cqa-rounded-full cqa-bg-[#F3F4F6] cqa-overflow-hidden cqa-flex cqa-mb-2\">\n      <ng-container *ngFor=\"let s of visibleSegments; let i = index; let last = last\">\n        <div\n          class=\"cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\"\n          #segmentEl\n          [ngClass]=\"[\n            segmentColor(s, i === 0 ? 'cqa-bg-[#4F46E5]' : i === segments.length - 1 ? 'cqa-bg-[#059669]' : 'cqa-bg-[#9333EA]'),\n            i === 0 ? 'cqa-rounded-l-full' : '',\n            last ? 'cqa-rounded-r-full' : ''\n          ]\" [style.width]=\"segmentWidth(s)\" \n          [style.min-width]=\"segmentMinWidth(s)\"\n          class=\"cqa-h-full cqa-flex cqa-font-inter cqa-items-center cqa-justify-center cqa-text-white cqa-text-[12px] cqa-leading-[16px]\">\n          {{ s?.label || '' }}\n        </div>\n      </ng-container>\n    </div>\n\n    <!-- Items list -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n      <div *ngFor=\"let it of items\" class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\">\n        <!-- Parent row -->\n        <div \n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-cursor-pointer cqa-transition cqa-hover:cqa-opacity-80\"\n          (click)=\"onItemClick(it, $event)\">\n          <div class=\"cqa-flex cqa-items-center\">\n            <span class=\"cqa-w-[4px] cqa-h-[12px] cqa-rounded-full\" [style.background-color]=\"getItemIconColor(it)\"></span>\n            <div class=\"cqa-ml-[8px] cqa-mr-[6px]\">\n              <mat-icon *ngIf=\"it.icon\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\" [style.color]=\"getItemIconColor(it)\">\n                {{ it.icon }}\n              </mat-icon>\n            </div>\n            <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-font-inter cqa-text-dialog-muted\">{{ it.label }}</span>\n          </div>\n          <div class=\"cqa-text-[12px] cqa-leading-4 cqa-font-bold cqa-font-inter\">{{ it.value | number }}</div>\n        </div>\n\n        <!-- Children rows -->\n        <div *ngIf=\"it.children?.length\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <div *ngFor=\"let ch of it.children\"\n            class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-1 cqa-rounded-[4px] cqa-bg-[#F9FAFB] cqa-cursor-pointer cqa-transition cqa-hover:cqa-bg-[#F3F4F6]\"\n            (click)=\"onChildClick(it, ch, $event)\">\n            <div class=\"cqa-flex cqa-items-center cqa-text-[10px] cqa-leading-[15px] cqa-font-inter cqa-text-[#4B5563]\">\n              <ng-container *ngIf=\"getChildIcon(ch.label) as icon\">\n                <ng-container [ngSwitch]=\"icon\">\n                  <svg *ngSwitchCase=\"'apple'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n                    <path fill=\"currentColor\" d=\"M16.365 1.43c0 1.182-.435 2.014-1.086 2.845-.823.99-1.982 1.707-3.078 1.6-.13-1.115.433-2.154 1.09-2.87.825-.925 2.196-1.59 3.07-1.575-.003.003.003 0 .003 0zm3.217 6.094c-.086-.067-2.684-1.598-5.468-.507-1.332.53-2.429.542-3.788.006-1.997-.8-3.635.156-3.735.208-.083.044-1.948 1.143-2.4 3.667-.43 2.375.6 4.92 1.4 6.52.723 1.421 1.704 3.126 3.067 3.07 1.35-.053 1.78-.883 3.323-.883 1.542 0 1.92.883 3.36.853 1.44-.026 2.352-1.443 3.073-2.855.674-1.324.963-2.603.983-2.668-.021-.009-1.88-.72-1.903-2.854-.021-1.786 1.463-2.64 1.534-2.682z\"/>\n                  </svg>\n                  <svg *ngSwitchCase=\"'android'\" class=\"cqa-w-[14px] cqa-h-[14px] cqa-ml-2 cqa-mr-1\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n                    <path fill=\"currentColor\" d=\"M17.6 9.48l1.42-2.46a.5.5 0 10-.86-.5l-1.44 2.52A11 11 0 0016 7h-8c-.24 0-.48.01-.72.04L5.84 6.5a.5.5 0 00-.86.5l1.42 2.46A7 7 0 004 15h.5a1.5 1.5 0 001.5-1.5V10h1v9.5A1.5 1.5 0 008.5 21h1a1.5 1.5 0 001.5-1.5V17h2v2.5A1.5 1.5 0 0014.5 21h1a1.5 1.5 0 001.5-1.5V10h1v3.5A1.5 1.5 0 0019.5 15H20a7 7 0 00-2.4-5.52zM9 5a.75.75 0 11-1.5 0A.75.75 0 019 5zm7.5 0a.75.75 0 11-1.5 0 .75.75 0 011.5 0z\"/>\n                  </svg>\n                </ng-container>\n              </ng-container>\n              <div class=\"cqa-pr-1\" [ngClass]=\"getChildIcon(ch.label) ? 'cqa-pl-0' : 'cqa-pl-2'\">{{ ch.label }}</div>\n            </div>\n            <span class=\"cqa-font-bold cqa-font-inter cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px]\">{{ ch.value }}</span>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>","import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'cqa-failed-test-cases-card',\n  templateUrl: './failed-test-cases-card.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' }\n})\nexport class FailedTestCasesCardComponent {\n  /** E.g., \"C-62: Upload Content\" */\n  @Input() title: string = 'Failed Test Case';\n  /** Full title text to copy (if different from displayed title) */\n  @Input() fullTitle?: string;\n  /** Number of failures to display in the pill */\n  @Input() failures: number = 0;\n  /** Pill label (e.g., \"failures\") */\n  @Input() failuresLabel: string = 'failures';\n  /** Optional custom class for the pill background */\n  @Input() pillClass: string = 'cqa-bg-[#F15F5F] cqa-text-[#FAFAFA]';\n  /** Root cause text; when empty, show a default message */\n  @Input() rootCause?: string;\n  /** Root cause label (left part, emphasized) */\n  @Input() rootCauseLabel: string = 'Root cause';\n  /** If false, hide the root cause row */\n  @Input() showRootCause: boolean = true;\n  /** Last failed text (e.g., \"2 hours ago\") */\n  @Input() lastFailed?: string;\n  /** Label for timestamp */\n  @Input() lastFailedLabel: string = 'Last failed';\n  /** Optional extra class for the outer card */\n  @Input() cardClass: string = '';\n  /** Left border accent class */\n  @Input() leftAccentClass: string = 'cqa-border-l-[4px]';\n  /** Optional tags to render under the title */\n  @Input() tags: string[] = [];\n  /** Minimum number of tags to display before showing count */\n  @Input() minTags: number = 3;\n  /** Emitted when the card is clicked */\n  @Output() cardClick = new EventEmitter<void>();\n\n  get rootCauseDisplay(): string {\n    if (!this.rootCause || !this.rootCause.trim().length) {\n      return 'No root cause available';\n    }\n    // Trim and return the root cause text\n    return this.rootCause.trim();\n  }\n\n  get visibleTags(): string[] {\n    if (!this.tags || this.tags.length <= this.minTags) {\n      return this.tags || [];\n    }\n    return this.tags.slice(0, this.minTags);\n  }\n\n  get overflowTagsCount(): number {\n    if (!this.tags || this.tags.length <= this.minTags) {\n      return 0;\n    }\n    return this.tags.length - this.minTags;\n  }\n\n  onCardClick(): void {\n    this.cardClick.emit();\n  }\n\n  onCopyTitle(event: Event): void {\n    event.stopPropagation(); // Prevent card click from firing\n    \n    // Use fullTitle if provided, otherwise use title\n    const textToCopy = this.fullTitle || this.title;\n    \n    if (navigator.clipboard && textToCopy) {\n      navigator.clipboard.writeText(textToCopy).catch((err) => {\n        console.error('Failed to copy title:', err);\n        // Fallback for older browsers\n        this.fallbackCopyToClipboard(textToCopy);\n      });\n    } else {\n      // Fallback for browsers without clipboard API\n      this.fallbackCopyToClipboard(textToCopy);\n    }\n  }\n\n  private fallbackCopyToClipboard(text: string): void {\n    const textArea = document.createElement('textarea');\n    textArea.value = text;\n    textArea.style.position = 'fixed';\n    textArea.style.left = '-999999px';\n    textArea.style.top = '-999999px';\n    document.body.appendChild(textArea);\n    textArea.focus();\n    textArea.select();\n    \n    try {\n      document.execCommand('copy');\n    } catch (err) {\n      console.error('Fallback copy failed:', err);\n    } finally {\n      document.body.removeChild(textArea);\n    }\n  }\n}\n\n\n","<div class=\"cqa-ui-root\" style=\"height: 100%\">\n  <div class=\"cqa-w-full cqa-h-full cqa-bg-[#FEF2F240] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-border-l-[#EF4444] cqa-rounded-[10px] cqa-p-[10px] cqa-pl-[20px] cqa-cursor-pointer cqa-transition-shadow cqa-duration-200 hover:cqa-shadow-md\n    cqa-flex cqa-flex-col cqa-justify-between\"\n    [ngClass]=\"[leftAccentClass, cardClass]\"\n    (click)=\"onCardClick()\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n      <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2 cqa-flex-wrap\">\n        <!-- Title with Copy Button -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-1 cqa-min-w-0\">\n          <h3 class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-font-inter cqa-text-[#1A1A1A] cqa-truncate\">{{ title }}</h3>\n          <button\n            type=\"button\"\n            class=\"cqa-inline-flex cqa-cursor-pointer cqa-outline-none cqa-bg-transparent cqa-border-none cqa-p-1 cqa-items-center cqa-justify-center cqa-min-w-[20px] cqa-min-h-[20px] cqa-flex-shrink-0 cqa-text-[#6B7280] hover:cqa-text-[#1A1A1A] cqa-transition-colors\"\n            (click)=\"onCopyTitle($event)\"\n            [attr.aria-label]=\"'Copy title'\"\n            title=\"Copy title\"\n          >\n            <mat-icon class=\"cqa-w-4 cqa-h-4 cqa-text-[16px] cqa-leading-[16px]\">content_copy</mat-icon>\n          </button>\n        </div>\n\n        <!-- Failures pill -->\n        <span class=\"cqa-px-[11px] cqa-py-[3px] cqa-rounded-full cqa-text-[12px] cqa-leading-[16px] cqa-font-medium cqa-font-inter cqa-tracking-[0.3px]\"\n          [ngClass]=\"pillClass\">\n          {{ failures | number }} {{ failuresLabel }}\n        </span>\n      </div>\n\n      <!-- Tags -->\n      <div *ngIf=\"tags?.length\" class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n        <span\n          *ngFor=\"let tag of visibleTags\"\n          class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-border-solid cqa-rounded-full cqa-bg-white cqa-border cqa-border-[#E5E7EB] cqa-text-[#1F1F24] cqa-text-[11px] cqa-leading-[14px] cqa-font-semibold cqa-font-inter cqa-px-[10px] cqa-py-[4px]\">\n          {{ tag }}\n        </span>\n        <span\n          *ngIf=\"overflowTagsCount > 0\"\n          class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-border-solid cqa-rounded-full cqa-bg-white cqa-border cqa-border-[#E5E7EB] cqa-text-[#1F1F24] cqa-text-[11px] cqa-leading-[14px] cqa-font-semibold cqa-font-inter cqa-px-[10px] cqa-py-[4px]\">\n          +{{ overflowTagsCount }}\n        </span>\n      </div>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap cqa-mt-2\">\n      <!-- Root cause -->\n      <div *ngIf=\"showRootCause\" class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-inter cqa-text-[#F15F5F] cqa-flex-1 cqa-min-w-0 cqa-mr-2 cqa-truncate\">\n        <span class=\"cqa-font-semibold\">{{ rootCauseLabel }}: </span>{{ rootCauseDisplay }}\n      </div>\n\n      <!-- Timestamp -->\n      <div *ngIf=\"lastFailed\"\n        class=\"cqa-py-[3px] cqa-flex cqa-items-center cqa-gap-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-font-inter cqa-text-dialog-muted\">\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#6B7280\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#6B7280\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        <span>{{ lastFailedLabel }}: {{ lastFailed }}</span>\n      </div>\n    </div>\n  </div>\n</div>","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  ContentChild,\n  TemplateRef,\n  ChangeDetectorRef,\n} from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { DynamicSelectFieldConfig, SelectOption } from '../dynamic-select/dynamic-select-field.component';\n\nexport interface PrerequisiteRow {\n  key: string;\n}\n\n/** Emitted when any prerequisite select changes - contains all current selections */\nexport interface PrerequisiteSelection {\n  key: string;\n  value: unknown;\n}\n\n@Component({\n  selector: 'cqa-add-prerequisite-cases-section',\n  templateUrl: './add-prerequisite-cases-section.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root cqa-add-prerequisite-cases-section-host' },\n})\nexport class AddPrerequisiteCasesSectionComponent {\n  /** Whether the section is expanded (showing the form) */\n  @Input() expanded = false;\n\n  /** Form group containing controls for each row (keyed by row.key) */\n  @Input() form!: FormGroup;\n\n  /** Array of row descriptors, each with a unique key */\n  @Input() rows: PrerequisiteRow[] = [];\n\n  /**\n   * Prerequisite options from API (e.g. test cases to choose from).\n   * Passed to getSelectConfig when building the config for each row.\n   */\n  @Input() options: SelectOption[] = [];\n\n  /**\n   * Function to get the dynamic select config for a given row index.\n   * Receives optional options (from this.options when provided).\n   * Each row can have different options. To avoid duplicates, exclude options\n   * already selected in other rows (keep current row's selection so it displays).\n   */\n  @Input() getSelectConfig!: (index: number, options?: SelectOption[]) => DynamicSelectFieldConfig;\n\n  /** Section label (e.g. \"Prerequisite Cases\") */\n  @Input() label = 'Prerequisite Cases';\n\n  /** Tooltip for the info icon */\n  @Input() infoTooltip = 'Add prerequisite test cases that must run before this test case';\n\n  /** Text for the \"Add Another\" button */\n  @Input() addAnotherText = 'Add Another';\n\n  /** Text for the Update button */\n  @Input() updateText = 'Update';\n\n  /** Text for the Cancel button */\n  @Input() cancelText = 'Cancel';\n\n  /** Text for the collapsed \"Add\" trigger */\n  @Input() addTriggerText = 'Add Prerequisite';\n\n  /** When true, hide Add Prerequisite button even if rows are empty (e.g. when collapsing after update with existing prerequisites) */\n  @Input() hideAddPrerequisite = false;\n\n  /** When provided, controls Update button disabled state. Use for dirty-state validation (enable when form changed). When undefined, falls back to !allRowsHaveValues(). */\n  @Input() updateDisabled: boolean | undefined = undefined;\n\n  /** When true, Update button is disabled and shows a loader (API in progress) */\n  @Input() isUpdating = false;\n\n  /** When true, prerequisite dropdown uses server-side search and load more (emit searchOptions / loadMoreOptions). */\n  @Input() enableServerSearch = false;\n  /** Per-row: whether more options are available for load more. Key = row index. */\n  @Input() hasMoreOptions: Record<number, boolean> = {};\n  /** Per-row: true while options are loading for that dropdown. Key = row index. */\n  @Input() isLoadingOptions: Record<number, boolean> = {};\n\n  /** Validation message shown when Add Another/Update are disabled (not all rows have values) */\n  @Input() selectFirstValidationMessage = 'Please select a prerequisite for each row first, then click Add Another.';\n\n  /** Optional custom template for the select slot. Use ng-template #selectBody with let-row, let-index, let-form, let-config. */\n  @ContentChild('selectBody', { read: TemplateRef }) selectBodyTpl?: TemplateRef<{\n    $implicit: PrerequisiteRow;\n    index: number;\n    form: FormGroup;\n    config: DynamicSelectFieldConfig;\n  }>;\n\n  @Output() expandedChange = new EventEmitter<boolean>();\n  @Output() addRow = new EventEmitter<void>();\n  @Output() removeRow = new EventEmitter<number>();\n  @Output() rowsReordered = new EventEmitter<PrerequisiteRow[]>();\n  /** Emitted when Update button is clicked */\n  @Output() update = new EventEmitter<void>();\n  /** Emitted when Cancel button is clicked */\n  @Output() cancel = new EventEmitter<void>();\n  /** Emitted when a single row's selection changes */\n  @Output() selectionChange = new EventEmitter<{ key: string; value: unknown; index: number }>();\n  /** Emitted when user searches in prerequisite dropdown (server search). Parent should fetch options and update options input. */\n  @Output() searchOptions = new EventEmitter<{ index: number; query: string }>();\n  /** Emitted when user scrolls to load more options. Parent should append to options and set hasMoreOptions. */\n  @Output() loadMoreOptions = new EventEmitter<{ index: number; query: string }>();\n  /** Emitted when any select changes - returns all current prerequisite selections in order */\n  @Output() prerequisitesChange = new EventEmitter<PrerequisiteSelection[]>();\n\n  /** Set to true when user clicks Add Another while invalid - shows validation message */\n  showAddAnotherValidation = false;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  toggleExpanded(show: boolean): void {\n    this.expanded = show;\n    this.expandedChange.emit(show);\n  }\n\n  /** Called when user clicks \"Add Prerequisite\" with no rows - expands and adds first row */\n  onAddPrerequisiteClick(): void {\n    this.toggleExpanded(true);\n    this.addRow.emit();\n  }\n\n  onAddRow(): void {\n    // Allow adding first row when empty (no validation needed)\n    if (this.rows.length > 0 && !this.allRowsHaveValues()) {\n      this.showAddAnotherValidation = true;\n      this.cdr.markForCheck();\n      return;\n    }\n    this.showAddAnotherValidation = false;\n    this.addRow.emit();\n  }\n\n  onRemoveRow(index: number): void {\n    this.removeRow.emit(index);\n  }\n\n  onDndDrop(event: DndDropEvent): void {\n    if (event.data == null || event.index == null) return;\n    const dropRow = event.data as PrerequisiteRow;\n    let dropIndex = event.index;\n    const currentIndex = this.rows.findIndex((r) => r.key === dropRow.key);\n    if (currentIndex < 0) return;\n    if (currentIndex === dropIndex) return;\n\n    const newRows = [...this.rows];\n    newRows.splice(currentIndex, 1);\n    // If moving forward, dropIndex shifts after removal\n    if (currentIndex < dropIndex) {\n      dropIndex--;\n    }\n    newRows.splice(dropIndex, 0, dropRow);\n    this.rowsReordered.emit(newRows);\n    this.cdr.markForCheck();\n  }\n\n  trackByKey(_i: number, row: PrerequisiteRow): string {\n    return row.key;\n  }\n\n  onUpdate(): void {\n    if (this.isUpdating) return;\n    this.update.emit();\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n  }\n\n  onSelectionChange(event: { key: string; value: unknown }, index: number): void {\n    this.selectionChange.emit({ ...event, index });\n    this.emitAllPrerequisites();\n    if (this.allRowsHaveValues()) {\n      this.showAddAnotherValidation = false;\n    }\n    this.cdr.markForCheck();\n  }\n\n  /** True when the row at the given index has a selected value */\n  rowHasValue(index: number): boolean {\n    if (!this.form || !this.rows.length || index < 0 || index >= this.rows.length) return false;\n    const row = this.rows[index];\n    const val = this.form.get(row.key)?.value;\n    return val != null && val !== '';\n  }\n\n  /** True when every row has a non-empty value (no placeholders) */\n  allRowsHaveValues(): boolean {\n    if (!this.form || !this.rows.length) return false;\n    return this.rows.every((row) => {\n      const val = this.form.get(row.key)?.value;\n      return val != null && val !== '';\n    });\n  }\n\n  /** Computed disabled state for Update button. When isUpdating we do not disable (show loader only); use updateDisabled for other cases. */\n  isUpdateDisabled(): boolean {\n    if (this.updateDisabled !== undefined) {\n      return this.updateDisabled;\n    }\n    return false;\n  }\n\n  /** Emits all current prerequisite selections (key + value) in row order */\n  private emitAllPrerequisites(): void {\n    if (!this.form || !this.rows.length) return;\n    const selections: PrerequisiteSelection[] = this.rows.map((row) => ({\n      key: row.key,\n      value: this.form.get(row.key)?.value ?? null,\n    }));\n    this.prerequisitesChange.emit(selections);\n  }\n\n  getConfig(index: number): DynamicSelectFieldConfig {\n    const opts = this.options?.length ? this.options : undefined;\n    const base = this.getSelectConfig?.(index, opts) ?? { key: `row_${index}`, options: this.options ?? [] };\n    if (this.enableServerSearch) {\n      return {\n        ...base,\n        searchable: true,\n        serverSearch: true,\n        initialFetchOnOpen: true,\n        hasMore: this.hasMoreOptions[index] ?? false,\n        isLoading: this.isLoadingOptions[index] ?? false,\n        onSearch: (q) => this.searchOptions.emit({ index, query: q ?? '' }),\n        onLoadMore: (q) => this.loadMoreOptions.emit({ index, query: q ?? '' }),\n      };\n    }\n    return base;\n  }\n}\n","<!-- Add Prerequisite trigger - only when collapsed and no rows (user must click to expand); hide when parent has prerequisites -->\n<ng-container *ngIf=\"rows.length === 0 && !expanded && !hideAddPrerequisite\">\n  <div\n    class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2  cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n    (click)=\"onAddPrerequisiteClick()\">\n    <mat-icon class=\"cqa-text-[12px] cqa-w-[12px] cqa-h-[12px] cqa-text-[#3F43EE]\">add</mat-icon>\n    <span class=\"cqa-font-regular cqa-font-inter cqa-text-sm cqa-text-[#3F43EE]\">{{ addTriggerText }}</span>\n  </div>\n</ng-container>\n\n<!-- Collapsed summary when we have rows but expanded=false -->\n<ng-container *ngIf=\"rows.length > 0 && !expanded\">\n  <div\n    class=\"cqa-border-2 cqa-border-dashed cqa-border-[#D8D9FC] cqa-rounded-lg cqa-p-1.5 cqa-mt-4 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-between cqa-min-h-[27px] cqa-hover:cqa-border-[#9ca3af] cqa-hover:cqa-bg-[#f9fafb] cqa-active:cqa-border-[#6366f1] cqa-active:cqa-bg-[#eff6ff]\"\n    (click)=\"toggleExpanded(true)\">\n    <span class=\"cqa-text-[#4a5565] cqa-font-normal cqa-font-inter cqa-text-xs\">{{ rows.length }} prerequisite{{ rows.length !== 1 ? 's' : '' }}</span>\n    <mat-icon class=\"cqa-text-[14px] cqa-w-[14px] cqa-h-[14px] cqa-text-[#4a5565]\">expand_more</mat-icon>\n  </div>\n</ng-container>\n\n<!-- Expanded form - when expanded=true (with or without rows; no Add Prerequisite trigger) -->\n<ng-container *ngIf=\"expanded\">\n  <div class=\"cqa-p-3 cqa-bg-white cqa-border cqa-border-[#e5e7eb] cqa-rounded-lg\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-mb-3\">\n      <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-leading-none\">{{ label }}</label>\n      <mat-icon class=\"cqa-inline-flex cqa-mt-1 cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-text-sm cqa-text-[#6b7280] cqa-cursor-help cqa-flex-shrink-0\" [matTooltip]=\"infoTooltip\" matTooltipPosition=\"above\" matTooltipShowDelay=\"300\">info</mat-icon>\n      <button\n        type=\"button\"\n        class=\"cqa-ml-auto cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-p-0 cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n        (click)=\"toggleExpanded(false)\"\n        matTooltip=\"Close\">\n        <mat-icon class=\"cqa-text-xl cqa-w-5 cqa-h-5\">expand_less</mat-icon>\n      </button>\n    </div>\n\n    <div\n      class=\"prerequisite-drop-list cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-3\"\n      [dndDropzone]=\"['prerequisite-row']\"\n      dndEffectAllowed=\"move\"\n      dndDragoverClass=\"dndDragover\"\n      (dndDrop)=\"onDndDrop($event)\">\n      <div dndPlaceholderRef class=\"prerequisite-drag-placeholder\">Drop here</div>\n      <div\n        *ngFor=\"let row of rows; let i = index; trackBy: trackByKey\"\n        class=\"prerequisite-drag-item cqa-flex cqa-items-center cqa-gap-2\"\n        [dndDraggable]=\"row\"\n        [dndDisableIf]=\"rows.length <= 1\"\n        dndEffectAllowed=\"move\"\n        dndType=\"prerequisite-row\">\n        <!-- 9-dot grid drag handle (only when multiple rows to reorder) -->\n        <div *ngIf=\"rows.length > 1\" dndHandle class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-center cqa-cursor-grab cqa-text-[#6B7280] cqa-hover:cqa-text-[#111827] active:cqa-cursor-grabbing\" matTooltip=\"Drag to reorder\">\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\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <!-- Custom template (e.g. parent-provided cqa-dynamic-select) -->\n        <ng-container *ngIf=\"selectBodyTpl\">\n          <ng-container\n            *ngTemplateOutlet=\"selectBodyTpl; context: {\n              $implicit: row,\n              index: i,\n              form: form,\n              config: getConfig(i)\n            }\">\n          </ng-container>\n        </ng-container>\n        <!-- Default: built-in cqa-dynamic-select -->\n        <cqa-dynamic-select\n          *ngIf=\"!selectBodyTpl && form\"\n          [form]=\"form\"\n          [config]=\"getConfig(i)\"\n          (selectionChange)=\"onSelectionChange($event, i)\">\n        </cqa-dynamic-select>\n      </div>\n\n      <button\n        *ngIf=\"rowHasValue(i)\"\n        type=\"button\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-min-w-[32px] cqa-bg-transparent cqa-border-none cqa-rounded-md cqa-text-[#6b7280] cqa-cursor-pointer cqa-p-0 cqa-hover:cqa-bg-[#f3f4f6] cqa-hover:cqa-text-[#374151]\"\n        (click)=\"onRemoveRow(i)\"\n        matTooltip=\"Remove Prerequisite\">\n        <mat-icon class=\"cqa-text-lg cqa-w-[18px] cqa-h-[18px]\">close</mat-icon>\n      </button>\n    </div>\n    </div>\n\n    <div *ngIf=\"showAddAnotherValidation && !allRowsHaveValues()\" class=\"cqa-text-xs cqa-text-[#dc2626] cqa-mb-2\">\n      {{ selectFirstValidationMessage }}\n    </div>\n    <!-- Add Prerequisite button only in empty state; hide when parent has prerequisites (e.g. collapsing after update) -->\n    <div\n      *ngIf=\"rows.length === 0 && !hideAddPrerequisite\"\n      class=\"cqa-border-2 cqa-border-dashed cqa-border-[#ccccff] cqa-rounded-lg cqa-p-3 cqa-mb-3 cqa-bg-white cqa-cursor-pointer cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-min-h-[40px] cqa-w-full cqa-hover:cqa-border-[#9999ee] cqa-hover:cqa-bg-[#f8f8ff] cqa-active:cqa-border-[#7c7ce0] cqa-active:cqa-bg-[#eff6ff]\"\n      (click)=\"onAddRow()\">\n      <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-text-[#3b82f6]\">add</mat-icon>\n      <span class=\"cqa-font-medium cqa-font-inter cqa-text-sm cqa-text-[#3b82f6]\">{{ addTriggerText }}</span>\n    </div>\n    <!-- Add Another link when we already have at least one row -->\n    <button\n      *ngIf=\"rows.length > 0 && !hideAddPrerequisite\"\n      type=\"button\"\n      class=\"cqa-mb-3 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer cqa-font-inter cqa-text-sm cqa-text-[#4242DB] cqa-hover:cqa-underline\"\n      (click)=\"onAddRow()\">\n      <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px]\">add</mat-icon>\n      <span>{{ addAnotherText }}</span>\n    </button>\n    <div class=\"cqa-flex cqa-gap-3 cqa-justify-end\">\n      <button\n        type=\"button\"\n        class=\"cqa-py-2.5 cqa-px-4 cqa-bg-white cqa-text-[#374151] cqa-border cqa-border-[#d1d5db] cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-cursor-pointer cqa-hover:cqa-bg-[#f9fafb]\"\n        (click)=\"onCancel()\">\n        {{ cancelText }}\n      </button>\n      <button\n        type=\"button\"\n        class=\"cqa-py-2.5 cqa-px-4 cqa-rounded-md cqa-text-sm cqa-font-semibold cqa-border-none cqa-cursor-pointer disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed cqa-bg-[#1a56db] cqa-text-white cqa-hover:cqa-bg-[#1647b8] disabled:cqa-bg-[#1a56db] cqa-flex cqa-items-center cqa-justify-center cqa-gap-2\"\n        [style.pointer-events]=\"isUpdating ? 'none' : 'auto'\"\n        [style.cursor]=\"isUpdating ? 'not-allowed' : 'pointer'\"\n        [disabled]=\"isUpdateDisabled()\"\n        (click)=\"onUpdate()\">\n        <mat-spinner *ngIf=\"isUpdating\" diameter=\"16\" class=\"cqa-inline-block update-spinner-white\"></mat-spinner>\n        <span>{{ updateText }}</span>\n      </button>\n    </div>\n  </div>\n</ng-container>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface SelectedFilterChip {\n  key?: string;\n  label?: string;\n  text: string;\n  fullText?: string;\n  hasMore?: boolean;\n}\n\n@Component({\n  selector: 'cqa-selected-filters',\n  templateUrl: './selected-filters.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' },\n})\nexport class SelectedFiltersComponent {\n  @Input() filterApplied = false;\n  @Input() chips: SelectedFilterChip[] = [];\n  /** Optional defaults that cannot be removed by the user */\n  @Input() defaultChips: SelectedFilterChip[] = [];\n  /** Allows consumers to override styling for default chips */\n  @Input() defaultChipClass = 'cqa-border-[#CBD5F5] cqa-bg-[#F4F6FE]';\n\n  @Output() removeChip = new EventEmitter<SelectedFilterChip>();\n  @Output() clearAll = new EventEmitter<void>();\n  @Output() onClearAll = new EventEmitter<void>();\n\n  get hasSelectedChips(): boolean {\n    return Array.isArray(this.chips) && this.chips.length > 0;\n  }\n\n  get hasAnyChips(): boolean {\n    return this.hasSelectedChips || (Array.isArray(this.defaultChips) && this.defaultChips.length > 0);\n  }\n\n  removeSelectedChip(event: Event, chip: SelectedFilterChip): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.removeChip.emit(chip);\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <!-- Hidden element to ensure Tailwind detects default chip classes -->\n  <div class=\"cqa-border-[#CBD5F5] cqa-bg-[#F4F6FE] cqa-hidden\"></div>\n  <div class=\"cqa-w-full cqa-flex cqa-flex-wrap cqa-justify-end cqa-gap-2 cqa-mb-3\"\n    *ngIf=\"filterApplied && hasAnyChips\">\n    <!-- Default (non-removable) chips -->\n    <div\n      class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-rounded-full cqa-border cqa-text-[#4B5563] cqa-border-[#CBD5F5] cqa-bg-[#F4F6FE]\"\n      [ngClass]=\"defaultChipClass\"\n      *ngFor=\"let chip of defaultChips\"\n      [matTooltip]=\"chip.hasMore ? chip.fullText : ''\"\n      [matTooltipDisabled]=\"!chip.hasMore\"\n      matTooltipPosition=\"above\">\n      <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-medium\">{{ chip.label || chip.key }}:</span>\n      <span class=\"cqa-text-[12px] cqa-leading-[16px]\">{{ chip.text }}</span>\n    </div>\n\n    <!-- User-selected chips -->\n    <div\n      class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-rounded-full cqa-border cqa-border-success-100 cqa-bg-primary-surface\"\n      *ngFor=\"let chip of chips\">\n      <span class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-medium cqa-text-primary\">{{ chip.label || chip.key\n        }}:</span>\n      <span\n        class=\"cqa-text-[12px] cqa-leading-[16px]\"\n        [matTooltip]=\"chip.hasMore ? chip.fullText : ''\"\n        [matTooltipDisabled]=\"!chip.hasMore\"\n        matTooltipPosition=\"above\"\n      >{{ chip.text }}</span>\n      <button type=\"button\"\n        class=\"cqa-ml-1 cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-full cqa-border cqa-border-transparent hover:cqa-bg-[#EEF2FF]\"\n        (pointerdown)=\"removeSelectedChip($event, chip)\"\n        (click)=\"$event.preventDefault(); $event.stopPropagation()\"\n        aria-label=\"Remove filter\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 12 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M8.625 2.875L3.375 8.125\" stroke=\"#3F43EE\" stroke-width=\"0.875\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M3.375 2.875L8.625 8.125\" stroke=\"#3F43EE\" stroke-width=\"0.875\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </button>\n    </div>\n\n    <button type=\"button\" class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-grey-300 hover:cqa-underline\"\n      *ngIf=\"hasSelectedChips\"\n      (click)=\"clearAll.emit(); onClearAll.emit()\">\n      Clear All\n    </button>\n  </div>\n</div>","/**\n * Utility for getting consistent colors for metadata values\n * Used across Status, Priority, and Result fields\n * \n * Colors are defined here and also exported in metadata-colors.constants.js for tailwind.config.js\n */\n\n// Color constants (also exported in metadata-colors.constants.js for Tailwind)\nconst PRIORITY_COLOR_VALUES = {\n  critical: '#DC2626', // Red - danger color\n  major: '#C10007',     // Dark red\n  medium: '#CA8A04',    // Yellow-600\n  minor: '#2563EB',     // Blue-600\n  'not-set': '#101828', // Default dark\n};\n\nconst RESULT_COLOR_VALUES = {\n  passed: '#16A34A',      // Green-600\n  failed: '#DC2626',      // Red - danger color\n  aborted: '#EA580C',     // Orange-600\n  'in-review': '#2563EB', // Blue-600\n  'not-executed': '#101828', // Default dark\n};\n\nconst STATUS_COLOR_VALUES = {\n  active: '#16A34A',     // Green-600\n  inactive: '#6B7280',   // Gray-500\n  pending: '#CA8A04',    // Yellow-600\n  completed: '#16A34A',  // Green-600\n};\n\nconst DEFAULT_METADATA_COLOR_VALUE = '#101828';\n\nexport type MetadataKey = 'priority' | 'result' | 'status';\n\nexport interface MetadataColorMap {\n  [key: string]: string;\n}\n\n/**\n * Color mappings for Priority values\n */\nexport const PRIORITY_COLORS: MetadataColorMap = {\n  'critical': PRIORITY_COLOR_VALUES.critical,\n  'major': PRIORITY_COLOR_VALUES.major,\n  'medium': PRIORITY_COLOR_VALUES.medium,\n  'minor': PRIORITY_COLOR_VALUES.minor,\n  'not set': PRIORITY_COLOR_VALUES['not-set'],\n};\n\n/**\n * Color mappings for Result values\n */\nexport const RESULT_COLORS: MetadataColorMap = {\n  'passed': RESULT_COLOR_VALUES.passed,\n  'failed': RESULT_COLOR_VALUES.failed,\n  'aborted': RESULT_COLOR_VALUES.aborted,\n  'in review': RESULT_COLOR_VALUES['in-review'],\n  'not executed': RESULT_COLOR_VALUES['not-executed'],\n};\n\n/**\n * Color mappings for Status values\n */\nexport const STATUS_COLORS: MetadataColorMap = {\n  'active': STATUS_COLOR_VALUES.active,\n  'inactive': STATUS_COLOR_VALUES.inactive,\n  'pending': STATUS_COLOR_VALUES.pending,\n  'completed': STATUS_COLOR_VALUES.completed,\n};\n\n/**\n * Default color for metadata values\n */\nexport const DEFAULT_METADATA_COLOR = DEFAULT_METADATA_COLOR_VALUE;\n\n/**\n * Gets the color for a metadata value based on its key and value\n * @param key - The metadata key (priority, result, or status)\n * @param value - The metadata value (string or object with value property)\n * @returns Color hex code as a string\n */\nexport function getMetadataColor(\n  key: string,\n  value: string | { label: string; value: string; highlight?: boolean }\n): string {\n  // Extract the actual value\n  const actualValue = typeof value === 'string' ? value : value.value;\n  const normalizedValue = actualValue.toLowerCase().trim();\n  const normalizedKey = key.toLowerCase().trim();\n\n  // Get color based on key\n  let colorMap: MetadataColorMap | undefined;\n\n  switch (normalizedKey) {\n    case 'priority':\n      colorMap = PRIORITY_COLORS;\n      break;\n    case 'result':\n      colorMap = RESULT_COLORS;\n      break;\n    case 'status':\n      colorMap = STATUS_COLORS;\n      break;\n    default:\n      return DEFAULT_METADATA_COLOR;\n  }\n\n  // Return color for the value, or default if not found\n  return colorMap[normalizedValue] || DEFAULT_METADATA_COLOR;\n}\n\n/**\n * Gets inline style object for metadata value color\n * @param key - The metadata key\n * @param value - The metadata value\n * @returns Style object with color property\n */\nexport function getMetadataValueStyle(\n  key: string,\n  value: string | { label: string; value: string; highlight?: boolean }\n): { [key: string]: string } {\n  return { color: getMetadataColor(key, value) };\n}\n\n","import { Component, Input } from '@angular/core';\n\nexport type BadgeVariant = 'warning' | 'error' | 'info' | 'success' | 'default' | 'outline';\nexport type BadgeSize = 'extra-small' | 'small' | 'medium';\nexport type BadgeType = 'default' | 'keyValue';\n\n@Component({\n  selector: 'cqa-badge',\n  templateUrl: './badge.component.html',\n  styleUrls: []\n})\nexport class BadgeComponent {\n  @Input() type: BadgeType = 'default';\n  @Input() label: string = '';\n  @Input() icon?: string;\n  @Input() iconLibrary: 'mat' | 'fa' = 'mat';\n  @Input() variant: BadgeVariant = 'default';\n  @Input() size: BadgeSize = 'medium';\n  @Input() backgroundColor?: string;\n  @Input() textColor?: string;\n  @Input() borderColor?: string;\n  @Input() iconBackgroundColor?: string;\n  @Input() iconColor?: string;\n  @Input() iconSize?: number;\n  /** Inline styles as a string (e.g., \"width: 100px; height: 50px;\") */\n  @Input() inlineStyles?: string;\n  // KeyValue type specific inputs\n  @Input() key?: string;\n  @Input() value?: string;\n  @Input() keyTextColor?: string;\n  @Input() valueTextColor?: string;\n  @Input() isLoading: boolean = false; // Input to control spinning icon\n  @Input() fullWidth = false;\n  @Input() centerContent = false;\n  /** Optional native tooltip (title) shown on hover */\n  @Input() title?: string;\n\n  get containerStyles(): { [key: string]: string } {\n    if (this.fullWidth) {\n      return {\n        display: 'block',\n        width: '100%'\n      };\n    }\n\n    return {\n      display: 'inline-block'\n    };\n  }\n\n  get badgeClasses(): string {\n    const baseClasses = [\n      'cqa-inline-flex',\n      'cqa-items-center',\n      'cqa-justify-center',\n      'cqa-rounded-[6px]',\n      'cqa-font-normal'\n    ];\n    \n    // Add size-specific classes\n    if (this.size === 'extra-small') {\n      baseClasses.push('cqa-text-[8px]', 'cqa-leading-[12px]', 'cqa-py-[2px]', 'cqa-px-[4px]', 'cqa-rounded-[4px]');\n    } else if (this.size === 'small') {\n      baseClasses.push('cqa-text-xs', 'cqa-leading-[17px]', 'cqa-py-[2px]', 'cqa-px-2');\n    } else {\n      // medium (default)\n      baseClasses.push('cqa-text-sm', 'cqa-leading-[17px]', 'cqa-py-[4px]', 'cqa-px-3');\n    }\n    \n    if (this.borderColor) {\n      baseClasses.push('cqa-border', 'cqa-border-solid');\n    }\n    \n    // Only apply variant-specific Tailwind classes if custom colors are not provided\n    if (!this.backgroundColor && !this.textColor) {\n      switch (this.variant) {\n        case 'error':\n          return [...baseClasses, 'cqa-bg-[#FCD9D9]', 'cqa-text-[#9F2A2A]'].join(' ');\n        case 'warning':\n          return [...baseClasses, 'cqa-bg-[#FFF9E9]', 'cqa-text-[#7E6012]'].join(' ');\n        case 'info':\n          return [...baseClasses, 'cqa-bg-blue-100', 'cqa-text-blue-800'].join(' ');\n        case 'success':\n          return [...baseClasses, 'cqa-bg-green-100', 'cqa-text-green-800'].join(' ');\n        case 'outline':\n          return [...baseClasses, 'cqa-bg-transparent', 'cqa-text-gray-800'].join(' ');\n        default:\n          return [...baseClasses, 'cqa-bg-gray-100', 'cqa-text-gray-800'].join(' ');\n      }\n    }\n    \n    // If custom colors are provided, only return base classes\n    return baseClasses.join(' ');\n  }\n\n  get badgeStyles(): { [key: string]: string } {\n    const styles: { [key: string]: string } = {};\n    \n    if (this.backgroundColor) {\n      styles['background-color'] = this.backgroundColor;\n    } else if (this.variant === 'outline') {\n      styles['background-color'] = 'transparent';\n    }\n    \n    if (this.textColor) {\n      styles['color'] = this.textColor;\n    }\n    \n    if (this.borderColor) {\n      styles['border-color'] = this.borderColor;\n      styles['border-width'] = '1px';\n      styles['border-style'] = 'solid';\n    }\n\n    if (this.centerContent) {\n      styles['display'] = 'flex';\n      styles['width'] = '100%';\n      styles['justify-content'] = 'center';\n    }\n    \n    return styles;\n  }\n\n  get iconContainerClasses(): string {\n    const baseClasses = [\n      'cqa-inline-flex',\n      'cqa-items-center',\n      'cqa-justify-center',\n      'cqa-flex-shrink-0'\n    ];\n\n    if(this.size === 'extra-small') {\n      baseClasses.push('cqa-mr-1');\n    } else {\n      baseClasses.push('cqa-mr-1.5');\n    }\n    \n    // No circular background for any variant - just return base classes\n    return baseClasses.join(' ');\n  }\n\n  get iconContainerStyles(): { [key: string]: string } {\n    const styles: { [key: string]: string } = {\n      'display': 'inline-flex',\n      'align-items': 'center',\n      'justify-content': 'center'\n    };\n    \n    // No circular background - only apply custom icon background color if explicitly provided\n    if (this.iconBackgroundColor) {\n      styles['background-color'] = this.iconBackgroundColor;\n      // If custom background is provided, add circle dimensions\n      styles['width'] = '16px';\n      styles['height'] = '16px';\n      styles['min-width'] = '16px';\n      styles['min-height'] = '16px';\n      styles['border-radius'] = '50%';\n    }\n    \n    return styles;\n  }\n\n  get iconClasses(): string {\n    const baseClasses: string[] = [];\n    // Add spin class if isLoading is true\n    if (this.isLoading) {\n      baseClasses.push('cqa-animate-spin');\n    }\n    // Only apply white text class if custom icon color is not provided\n    if (!this.iconColor) {\n      baseClasses.push('cqa-text-white');\n    }\n    return baseClasses.join(' ');\n  }\n\n  get iconStyles(): { [key: string]: string } {\n    let iconSize = '14px';\n    if (this.size === 'extra-small') {\n      iconSize = '10px';\n    } else if (this.size === 'small') {\n      iconSize = '12px';\n    }\n    // Custom iconSize overrides size-based defaults\n    if (this.iconSize && !isNaN(this.iconSize)) {\n      iconSize = `${this.iconSize}px`;\n    }\n\n    const styles: { [key: string]: string } = {\n      'font-size': iconSize,\n      'width': iconSize,\n      'height': iconSize,\n      'line-height': iconSize\n    };\n    \n    if (this.iconColor) {\n      styles['color'] = this.iconColor;\n    } else {\n      // Use variant-specific text color for icon (no white background anymore)\n      switch (this.variant) {\n        case 'error':\n          styles['color'] = '#991B1B'; // red-800\n          break;\n        case 'warning':\n          styles['color'] = '#854D0E'; // yellow-800\n          break;\n        case 'info':\n          styles['color'] = '#1E40AF'; // blue-800\n          break;\n        case 'success':\n          styles['color'] = '#166534'; // green-800\n          break;\n        default:\n          styles['color'] = this.textColor || '#374151'; // gray-700 default\n      }\n    }\n    \n    return styles;\n  }\n}\n\n","<div class=\"cqa-ui-root\" [ngStyle]=\"containerStyles\">\n  <span \n    [ngClass]=\"badgeClasses\" \n    [ngStyle]=\"badgeStyles\"\n    [style.background-color]=\"backgroundColor\"\n    [style.color]=\"textColor\"\n    [style.border-color]=\"borderColor\"\n    [attr.style]=\"inlineStyles\"\n    [attr.title]=\"title\"\n    class=\"cqa-font-inter cqa-font-normal\">\n    <!-- Default type: icon + label -->\n    <ng-container *ngIf=\"type === 'default'\">\n      <span \n        *ngIf=\"icon\" \n        [ngClass]=\"iconContainerClasses\"\n        [ngStyle]=\"iconContainerStyles\">\n        <mat-icon \n          *ngIf=\"iconLibrary === 'mat'\"\n          [ngClass]=\"iconClasses\"\n          [ngStyle]=\"iconStyles\">{{ icon }}</mat-icon>\n        <i \n          *ngIf=\"iconLibrary === 'fa'\"\n          [ngClass]=\"iconClasses + ' ' + icon\"\n          [ngStyle]=\"iconStyles\"></i>\n      </span>\n      {{ label }}\n    </ng-container>\n    \n    <!-- KeyValue type: key + value with different colors -->\n    <ng-container *ngIf=\"type === 'keyValue'\">\n      <span \n        *ngIf=\"icon\" \n        [ngClass]=\"iconContainerClasses\"\n        [ngStyle]=\"iconContainerStyles\">\n        <mat-icon \n          *ngIf=\"iconLibrary === 'mat'\"\n          [ngClass]=\"iconClasses\"\n          [ngStyle]=\"iconStyles\">{{ icon }}</mat-icon>\n        <i \n          *ngIf=\"iconLibrary === 'fa'\"\n          [ngClass]=\"iconClasses + ' ' + icon\"\n          [ngStyle]=\"iconStyles\"></i>\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-gap-[6px]\">\n        <span [style.color]=\"keyTextColor\">{{ key }}:</span>\n        <span [style.color]=\"valueTextColor\">{{ value }}</span>\n      </div>\n    </ng-container>\n  </span>\n</div>\n\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { getMetadataValueStyle as getMetadataColorStyle } from '../../utils/metadata-colors.util';\nimport { BadgeComponent } from '../../badge/badge.component';\n\n// Use BadgeComponent inputs directly instead of a separate interface\nexport type InsightBadge = Pick<BadgeComponent, 'label' | 'icon' | 'variant'>;\n\nexport interface InsightMetadata {\n  [key: string]: string | { label: string; value: string; highlight?: boolean; isKeyClickable?: boolean };\n}\n\ninterface InternalInsightSection {\n  id: string;\n  title: string;\n  variant: 'warning' | 'error' | 'default';\n  reason: string;\n  actionButtonLabel: string;\n  expanded?: boolean;\n}\n\n@Component({\n  selector: 'cqa-insight-card',\n  templateUrl: './insight-card.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class InsightCardComponent {\n  private readonly metadataDetailsId = 'cqa-insight-metadata-details';\n  private readonly sectionHeaderIdPrefix = 'cqa-insight-section-header';\n  private readonly sectionContentIdPrefix = 'cqa-insight-section-body';\n\n  @Input() title: string = '';\n  @Input() description: string = '';\n  /** Show/hide the AI suggestion main button */\n  @Input() showAiSuggestionButton: boolean = true;\n  private _badges: InsightBadge[] = [];\n  @Input()\n  set badges(value: InsightBadge[]) {\n    this._badges = value;\n  }\n  get badges(): InsightBadge[] {\n    return this._badges;\n  }\n  @Input() metadata?: InsightMetadata;\n  @Input() prerequisiteSection?: string;\n  @Input() testDataSection?: string;\n  @Input() metadataExpanded: boolean = true;\n  @Input() isPrerequisiteMissing: boolean = false;\n  @Input() isTestDataMissing: boolean = false;\n\n  // Track expanded state for sections\n  private sectionExpandedState: Map<string, boolean> = new Map();\n  \n  // Loading state for main action\n  isApplying: boolean = false;\n\n  @Output() metadataToggle = new EventEmitter<boolean>();\n  @Output() sectionToggle = new EventEmitter<{ id: string; expanded: boolean }>();\n  @Output() sectionActionClick = new EventEmitter<string>();\n  @Output() onApplySuggestionClick = new EventEmitter<void>();\n  @Output() onAttachPrerequisitesClick = new EventEmitter<void>();\n  @Output() onImportTestDataClick = new EventEmitter<void>();\n  @Output() metadataKeyClick = new EventEmitter<string>();\n\n  toggleMetadata(): void {\n    this.metadataExpanded = !this.metadataExpanded;\n    this.metadataToggle.emit(this.metadataExpanded);\n  }\n\n  toggleSection(section: InternalInsightSection): void {\n    const currentState = this.getSectionExpandedState(section.id);\n    const newState = !currentState;\n    this.sectionExpandedState.set(section.id, newState);\n    section.expanded = newState;\n    this.sectionToggle.emit({ id: section.id, expanded: newState });\n  }\n\n  onSectionAction(sectionId: string): void {\n    this.sectionActionClick.emit(sectionId);\n    \n    // Emit specific events for known actions\n    if (sectionId === 'prerequisite') {\n      this.onAttachPrerequisitesClick.emit();\n    } else if (sectionId === 'test-data') {\n      this.onImportTestDataClick.emit();\n    }\n  }\n\n  get visibleBadges(): InsightBadge[] {\n    const visible: InsightBadge[] = [];\n    if (this.isPrerequisiteMissing) {\n      visible.push({ label: 'Prerequisite Missing', variant: 'warning' });\n    }\n    if (this.isTestDataMissing) {\n      visible.push({ label: 'Test Data Missing', variant: 'error' });\n    }\n    // Also include any custom badges\n    if (this.badges) {\n      visible.push(...this.badges);\n    }\n    return visible;\n  }\n\n  get visibleSections(): InternalInsightSection[] {\n    const visible: InternalInsightSection[] = [];\n\n    if (this.isPrerequisiteMissing) {\n      visible.push(\n        this.createSection({\n          id: 'prerequisite',\n          title: 'Prerequisite Missing',\n          variant: 'warning',\n          reason: this.prerequisiteSection || 'Prerequisite data is missing.',\n          actionButtonLabel: 'Attach Prerequisites',\n        })\n      );\n    }\n\n    if (this.isTestDataMissing) {\n      visible.push(\n        this.createSection({\n          id: 'test-data',\n          title: 'Test Data Missing',\n          variant: 'error',\n          reason: this.testDataSection || 'Test data is missing.',\n          actionButtonLabel: 'Import Test Data',\n        })\n      );\n    }\n\n    return visible;\n  }\n\n  async onMainAction(): Promise<void> {\n    if (this.isApplying) {\n      return; // Prevent multiple clicks\n    }\n    \n    this.isApplying = true;\n    \n    try {\n      this.onApplySuggestionClick.emit();\n    } finally {\n      // Reset loading state after action completes\n      // If you need to keep the loading state longer, call resetApplyingState() manually\n      // after your async operation completes\n      this.isApplying = false;\n    }\n  }\n\n  // Method to reset loading state (can be called externally if needed)\n  resetApplyingState(): void {\n    this.isApplying = false;\n  }\n\n  // Removed getBadgeClasses - now using BadgeComponent\n\n  trackSectionById(_index: number, section: InternalInsightSection): string {\n    return section.id;\n  }\n\n  getSectionBorderClass(section: InternalInsightSection): string {\n    switch (section.variant) {\n      case 'warning':\n        return 'cqa-border-l-4 cqa-border-l-yellow-500';\n      case 'error':\n        return 'cqa-border-l-4 cqa-border-l-red-500';\n      default:\n        return 'cqa-border-l-4 cqa-border-l-gray-500';\n    }\n  }\n\n  getMetadataValueClasses(key: string, value: string | { label: string; value: string; highlight?: boolean }): string {\n    // Base classes for all values (font-size: 14px, line-height: 18px, font-weight: 400)\n    return 'cqa-font-normal cqa-leading-[18px] cqa-tracking-normal';\n  }\n\n  getMetadataValue(value: string | { label: string; value: string; highlight?: boolean }): string {\n    if (typeof value === 'string') {\n      return value;\n    }\n    return value.value;\n  }\n\n  isKeyClickable(value: string | { label: string; value: string; highlight?: boolean; isKeyClickable?: boolean }): boolean {\n    if (typeof value === 'string') {\n      return false;\n    }\n    return !!value.isKeyClickable;\n  }\n\n  onKeyClick(key: string, value: string | { label: string; value: string; highlight?: boolean; isKeyClickable?: boolean }): void {\n    if (this.isKeyClickable(value)) {\n      this.metadataKeyClick.emit(key);\n    }\n  }\n\n  getMetadataValueStyle(key: string, value: string | { label: string; value: string; highlight?: boolean }): { [key: string]: string } {\n    // Use the shared utility function for consistent colors\n    return getMetadataColorStyle(key, value);\n  }\n\n  getSectionTitleClasses(section: InternalInsightSection): string {\n    const baseClasses = ['cqa-text-sm', 'cqa-leading-[17px]', 'cqa-font-semibold'];\n    \n    switch (section.variant) {\n      case 'warning':\n        return [...baseClasses, 'cqa-text-[#78350F]'].join(' ');\n      case 'error':\n        return [...baseClasses, 'cqa-text-[#881337]'].join(' ');\n\n      default:\n        return [...baseClasses, 'cqa-text-ink'].join(' ');\n    }\n  }\n\n  getSectionIconColor(section: InternalInsightSection): string {\n    switch (section.variant) {\n      case 'warning':\n        return 'cqa-text-[#78350F]';\n      case 'error':\n        return 'cqa-text-[#881337]';\n      default:\n        return 'cqa-text-gray-400';\n    }\n  }\n\n  getSectionHeaderId(section: InternalInsightSection): string {\n    return `${this.sectionHeaderIdPrefix}-${section.id}`;\n  }\n\n  getSectionContentId(section: InternalInsightSection): string {\n    return `${this.sectionContentIdPrefix}-${section.id}`;\n  }\n\n  getMetadataDetailsId(): string {\n    return this.metadataDetailsId;\n  }\n\n  private getSectionExpandedState(sectionId: string): boolean {\n    return this.sectionExpandedState.has(sectionId)\n      ? this.sectionExpandedState.get(sectionId)!\n      : true;\n  }\n\n  private createSection(config: Omit<InternalInsightSection, 'expanded'>): InternalInsightSection {\n    const expanded = this.getSectionExpandedState(config.id);\n    return {\n      ...config,\n      expanded,\n    };\n  }\n}\n\n\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-font-inter cqa-flex cqa-flex-col cqa-gap-4 cqa-px-[21px] cqa-py-3 cqa-border cqa-border-solid cqa-border-[#ECECEC] cqa-rounded-xl cqa-shadow-card\">\n    <!-- Section 1: Badges -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[1.5]\" *ngIf=\"visibleBadges.length > 0\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M14.4866 12.0005L9.15329 2.66714C9.037 2.46194 8.86836 2.29127 8.66457 2.17252C8.46078 2.05378 8.22915 1.99121 7.99329 1.99121C7.75743 1.99121 7.52579 2.05378 7.322 2.17252C7.11822 2.29127 6.94958 2.46194 6.83329 2.66714L1.49995 12.0005C1.38241 12.204 1.32077 12.4351 1.32129 12.6701C1.32181 12.9052 1.38447 13.136 1.50292 13.339C1.62136 13.5421 1.79138 13.7102 1.99575 13.8264C2.20011 13.9425 2.43156 14.0026 2.66662 14.0005H13.3333C13.5672 14.0002 13.797 13.9385 13.9995 13.8213C14.202 13.7042 14.3701 13.5359 14.487 13.3332C14.6038 13.1306 14.6653 12.9007 14.6653 12.6668C14.6652 12.4329 14.6036 12.2031 14.4866 12.0005Z\" stroke=\"#E2AC20\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8 6V8.66667\" stroke=\"#E2AC20\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8 11.333H8.00667\" stroke=\"#E2AC20\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n        <cqa-badge \n          *ngFor=\"let badge of visibleBadges\" \n          [label]=\"badge.label\"\n          [icon]=\"badge.icon\"\n          [variant]=\"badge.variant || 'default'\"\n        ></cqa-badge>\n      </div>\n    </div>\n\n    <!-- Section 2: Title & Description -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n      <h2 class=\"cqa-font-medium cqa-text-lg cqa-leading-[22px] cqa-text-title\">\n        {{ title }}\n      </h2>\n      <p class=\"cqa-text-base cqa-font-normal cqa-text-description\">\n        {{ description }}\n      </p>\n    </div>\n\n  <!-- Section 3: Metadata Section (always visible) -->\n  <div *ngIf=\"metadata\" class=\"cqa-flex cqa-flex-col cqa-gap-4\">\n    <div\n      class=\"cqa-cursor-pointer cqa-bg-surface-default cqa-rounded-[10px] cqa-px-4 cqa-py-3 cqa-border-t cqa-border-solid cqa-border-t-primary-surface\"\n      [attr.id]=\"getMetadataDetailsId()\"\n      role=\"region\"\n    >\n      <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-[25px]\">\n        <ng-container *ngFor=\"let item of metadata | keyvalue; let last = last\">\n          <div \n            class=\"cqa-flex cqa-items-center cqa-gap-[6px]\"\n            [class.clickable-key-container]=\"isKeyClickable(item.value)\"\n            (click)=\"onKeyClick(item.key, item.value)\">\n            <span class=\"cqa-text-xs cqa-font-normal cqa-font-inter cqa-text-metadata-key\">\n              {{ item.key }}:\n            </span>\n            <span \n              [ngClass]=\"item.key != 'ID' ? 'cqa-text-primary' : ''\"\n              [ngClass]=\"getMetadataValueClasses(item.key, item.value)\" \n              [ngStyle]=\"item.key != 'ID' ? getMetadataValueStyle(item.key, item.value) : {}\"\n              class=\" cqa-text-primary cqa-font-normal cqa-leading-[18px] cqa-font-inter cqa-text-sm\">\n              {{ getMetadataValue(item.value) }}\n            </span>\n          </div>\n          <div *ngIf=\"!last\" class=\"cqa-h-4 cqa-w-px cqa-bg-gray-200\"></div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Section 4: Metadata toggle -->\n    <button\n      *ngIf=\"metadata && (isPrerequisiteMissing || isTestDataMissing)\"\n      type=\"button\"\n      class=\"cqa-text-sm cqa-text-primary cqa-inline-flex cqa-font-inter cqa-items-center cqa-gap-[6px]\"\n      (click)=\"toggleMetadata()\"\n      [attr.aria-expanded]=\"metadataExpanded\"\n      [attr.aria-controls]=\"getMetadataDetailsId()\"\n    >\n      <span>{{ metadataExpanded ? 'Hide details' : 'Show details' }}</span>\n      <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-[14px] cqa-leading-[14px]\">\n        {{ metadataExpanded ? 'expand_less' : 'expand_more' }}\n      </mat-icon>\n    </button>\n\n  </div>\n\n  <!-- Section 5: Sections (toggle visibility) -->\n  <ng-container *ngIf=\"visibleSections as sections\">\n    <div *ngIf=\"metadataExpanded && sections.length\" class=\"cqa-flex cqa-flex-col cqa-gap-4\">\n      <div\n        *ngFor=\"let section of sections; trackBy: trackSectionById\"\n        class=\"cqa-border-l-4 cqa-border-solid cqa-rounded-[10px] cqa-overflow-hidden\"\n        [ngClass]=\"getSectionBorderClass(section)\"\n      >\n        <div class=\"cqa-p-[10px] cqa-pl-[20px] cqa-flex cqa-flex-col cqa-gap-3\">\n          <!-- Section Title with Toggle Button aligned right -->\n          <div class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-w-full\">\n            <h3\n              [ngClass]=\"getSectionTitleClasses(section)\"\n              class=\"cqa-grow\"\n              [attr.id]=\"getSectionHeaderId(section)\"\n            >\n              {{ section.title }}\n            </h3>\n            <button\n              type=\"button\"\n              class=\"cqa-inline-flex cqa-cursor-pointer cqa-outline-none cqa-bg-transparent cqa-border-none cqa-p-1 cqa-items-center cqa-justify-center cqa-min-w-[24px] cqa-min-h-[24px] cqa-ml-auto\"\n              (click)=\"toggleSection(section)\"\n              [attr.aria-expanded]=\"section.expanded !== false\"\n              [attr.aria-controls]=\"getSectionContentId(section)\"\n              [attr.aria-label]=\"section.expanded !== false ? 'Collapse section' : 'Expand section'\"\n            >\n              <mat-icon\n                [ngClass]=\"getSectionIconColor(section)\"\n                class=\"cqa-w-4 cqa-h-4 cqa-text-[16px] cqa-leading-[16px]\"\n              >\n                {{ section.expanded !== false ? 'expand_less' : 'expand_more' }}\n              </mat-icon>\n            </button>\n          </div>\n\n          <!-- Collapsible Content: Reason and Action Button -->\n          <div\n            *ngIf=\"section.expanded !== false\"\n            class=\"cqa-flex cqa-flex-col cqa-gap-[10px]\"\n            [attr.id]=\"getSectionContentId(section)\"\n            role=\"region\"\n            [attr.aria-labelledby]=\"getSectionHeaderId(section)\"\n          >\n            <!-- Reason -->\n            <p class=\"cqa-text-sm cqa-font-normal cqa-leading-[18px] cqa-text-neutral-600\">\n              Reason: {{ section.reason }}\n            </p>\n            \n            <!-- Action Button -->\n            <div>\n              <cqa-button\n                variant=\"outlined\"\n                (clicked)=\"onSectionAction(section.id)\"\n                [customClass]=\"'cqa-py-[9px] cqa-text-[14px] cqa-leading-[17px] cqa-border-slate cqa-text-slate cqa-transition cqa-duration-150 cqa-ease-in-out hover:cqa-border-primary hover:cqa-text-primary hover:cqa-bg-primary-surface'\"\n              >\n                {{ section.actionButtonLabel }}\n              </cqa-button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n  \n  <cqa-button\n      *ngIf=\"showAiSuggestionButton\"\n      variant=\"filled\"\n      (clicked)=\"onMainAction()\"\n      [disabled]=\"isApplying\"\n      [customClass]=\"'!cqa-w-full !cqa-text-[14px] !cqa-leading-[20px] !cqa-font-semibold'\"\n    >\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.01882 0C9.12979 0.0454767 9.17718 0.15653 9.22261 0.259691C9.24539 0.319799 9.26628 0.380234 9.28657 0.44115C9.29452 0.464493 9.30246 0.487836 9.31065 0.511886C9.41613 0.826009 9.51008 1.1435 9.60457 1.46076C9.62593 1.53238 9.64739 1.60397 9.66885 1.67557C9.7781 2.04007 9.88654 2.4048 9.99438 2.76969C10.0095 2.82093 10.0247 2.87218 10.0398 2.92342C10.0826 3.0679 10.1252 3.21239 10.1677 3.35694C10.2573 3.66239 10.3495 3.96695 10.4476 4.27002C10.4561 4.29653 10.4647 4.32305 10.4735 4.35036C10.7284 5.12999 11.0896 5.82875 11.6818 6.42393C11.6965 6.4394 11.7111 6.45488 11.7262 6.47083C11.979 6.72875 12.3034 6.93541 12.6276 7.10221C12.6441 7.11085 12.6606 7.11948 12.6776 7.12838C13.6317 7.61851 14.779 7.83407 15.8124 8.12101C16.2652 8.24681 16.7166 8.37658 17.1663 8.51206C17.1979 8.52157 17.2296 8.53107 17.2612 8.54055C17.3557 8.5689 17.45 8.59774 17.5442 8.62694C17.5662 8.63358 17.5882 8.64023 17.6108 8.64707C17.7406 8.68812 17.8648 8.73658 17.9713 8.82054C18.0038 8.88837 18.0038 8.88837 17.995 8.95619C17.8913 9.05472 17.7884 9.10092 17.6516 9.14599C17.632 9.15264 17.6124 9.1593 17.5923 9.16615C17.3612 9.24366 17.127 9.31149 16.8925 9.37871C16.8444 9.39261 16.7963 9.40651 16.7482 9.42042C16.4514 9.50603 16.1542 9.5898 15.8566 9.67263C15.4646 9.78175 15.0733 9.89268 14.6823 10.0049C14.6182 10.0232 14.5541 10.0416 14.49 10.0598C14.1534 10.1557 13.8185 10.2551 13.4863 10.3642C13.4587 10.3732 13.4312 10.3822 13.4028 10.3915C12.2902 10.7616 11.4422 11.4522 10.9114 12.462C10.6253 13.0295 10.4565 13.6432 10.2843 14.2489C10.2377 14.4124 10.1882 14.5749 10.1381 14.7374C10.0988 14.8652 10.0604 14.9933 10.023 15.1216C10.0185 15.1369 10.0141 15.1522 10.0095 15.1679C9.98788 15.2419 9.96638 15.3159 9.94503 15.3899C9.89039 15.5776 9.83156 15.7637 9.77111 15.9498C9.66383 16.2804 9.5662 16.6135 9.46917 16.947C9.32288 17.4491 9.32288 17.4491 9.23993 17.6905C9.23443 17.7067 9.22893 17.7229 9.22326 17.7396C9.19298 17.8256 9.16183 17.9047 9.10453 17.9774C9.01734 17.9958 9.01734 17.9958 8.93901 18C8.84946 17.8752 8.79016 17.7542 8.74265 17.6102C8.73574 17.5897 8.72882 17.5693 8.7217 17.5483C8.63368 17.285 8.55502 17.0189 8.47634 16.7529C8.45832 16.6921 8.44022 16.6313 8.42211 16.5705C8.2872 16.1173 8.15451 15.6635 8.02202 15.2096C7.47014 12.9645 7.47014 12.9645 6.078 11.1493C6.05569 11.1319 6.03338 11.1145 6.01039 11.0966C5.09826 10.398 3.89667 10.1394 2.7963 9.83627C2.52415 9.76124 2.2521 9.68587 1.98006 9.61046C1.95628 9.60386 1.95628 9.60386 1.93201 9.59714C1.53962 9.48834 1.14735 9.37925 0.756448 9.26566C0.739911 9.26089 0.723375 9.25612 0.706338 9.25121C0.105798 9.07767 0.105798 9.07767 0.00129307 8.95619C-0.00166252 8.90108 -0.00166252 8.90108 0.0249378 8.84315C0.134167 8.7408 0.240153 8.69696 0.38432 8.65238C0.405194 8.64567 0.426068 8.63897 0.447574 8.63206C0.511506 8.61164 0.575577 8.59169 0.639702 8.57183C0.658001 8.56609 0.676301 8.56035 0.695155 8.55443C0.82457 8.51385 0.95445 8.47479 1.08452 8.43618C1.11648 8.42665 1.11648 8.42665 1.14909 8.41693C1.70454 8.25174 2.26361 8.09801 2.82252 7.94392C3.23899 7.82909 3.65476 7.71236 4.06921 7.59097C4.08825 7.58542 4.1073 7.57987 4.12692 7.57415C5.087 7.29393 6.02557 6.89632 6.64547 6.1074C6.65475 6.09569 6.66403 6.08399 6.6736 6.07194C7.36395 5.1963 7.63315 4.13145 7.93391 3.09241C8.03285 2.75069 8.13298 2.40929 8.23345 2.06798C8.26127 1.97347 8.28906 1.87894 8.31673 1.78439C8.42788 1.40458 8.5407 1.02528 8.66 0.647727C8.67116 0.612372 8.68227 0.577001 8.69333 0.541614C8.86035 0.00797522 8.86035 0.00797522 9.01882 0Z\" fill=\"#FBFCFF\"/><path d=\"M14.4719 1.11069C14.5805 1.22817 14.6022 1.36624 14.636 1.51625C14.7487 1.98751 14.8786 2.42084 15.3293 2.6946C15.6074 2.84167 15.9389 2.90859 16.247 2.9718C16.3771 2.99902 16.4869 3.03515 16.5985 3.1074C16.6236 3.14555 16.6236 3.14555 16.6221 3.21197C16.5963 3.29273 16.5736 3.31878 16.5054 3.37165C16.4308 3.39549 16.4308 3.39549 16.3413 3.41404C16.3075 3.42147 16.2736 3.42898 16.2398 3.43656C16.2217 3.44058 16.2036 3.4446 16.1849 3.44874C15.6339 3.57062 15.6339 3.57062 15.1576 3.84645C15.1421 3.85837 15.1267 3.87029 15.1107 3.88257C14.7703 4.16959 14.6983 4.64703 14.5958 5.04699C14.59 5.06896 14.5841 5.09092 14.578 5.11355C14.573 5.133 14.5679 5.15244 14.5627 5.17248C14.5405 5.23185 14.5176 5.27057 14.4719 5.31607C14.3447 5.33152 14.3447 5.33152 14.2828 5.31607C14.1843 5.24309 14.1623 5.15997 14.1366 5.04828C14.1322 5.03099 14.1279 5.01369 14.1235 4.99587C14.1098 4.94064 14.0965 4.88531 14.0833 4.82996C13.9796 4.39891 13.8625 3.976 13.449 3.72333C13.1258 3.55101 12.7329 3.46951 12.3717 3.4037C12.2727 3.38399 12.216 3.3592 12.1547 3.28121C12.1414 3.20208 12.1414 3.20208 12.1547 3.12294C12.2489 3.02971 12.348 3.00696 12.4754 2.97881C12.5156 2.9693 12.5557 2.95973 12.5958 2.9501C12.6165 2.94516 12.6372 2.94022 12.6586 2.93512C12.7642 2.90911 12.8689 2.87995 12.9734 2.85021C12.9924 2.84494 13.0114 2.83967 13.031 2.83424C13.2436 2.77346 13.4271 2.69571 13.5971 2.5577C13.6129 2.54523 13.6288 2.53276 13.6451 2.5199C13.9096 2.29228 13.9995 1.95032 14.081 1.63124C14.0873 1.60702 14.0935 1.5828 14.0999 1.55784C14.1123 1.50918 14.1244 1.46046 14.1363 1.4117C14.1449 1.37776 14.1449 1.37776 14.1535 1.34315C14.1585 1.32288 14.1635 1.30261 14.1686 1.28172C14.1904 1.21719 14.219 1.16652 14.2591 1.11069C14.3362 1.07385 14.3903 1.0905 14.4719 1.11069Z\" fill=\"#FBFCFF\"/><path d=\"M3.59089 12.4942C3.61902 12.4944 3.61902 12.4944 3.64772 12.4946C3.84954 12.5004 3.98609 12.5623 4.13472 12.692C4.30767 12.8707 4.38753 13.0722 4.38299 13.313C4.36357 13.5082 4.24316 13.6787 4.09547 13.8107C3.92163 13.9448 3.74626 13.9892 3.52411 13.983C3.33681 13.9621 3.1606 13.877 3.02785 13.749C2.86276 13.5336 2.8145 13.3361 2.83869 13.0707C2.88867 12.8618 3.03274 12.6923 3.21701 12.5733C3.34502 12.5113 3.44798 12.493 3.59089 12.4942Z\" fill=\"#FBFCFF\"/></svg>\n      {{ isApplying ? 'Applying suggestion' : 'Apply suggestion' }}\n    </cqa-button>\n  </div>\n</div>\n \n","import { Component, Input, Output, EventEmitter, HostListener, ElementRef, ViewChild } from '@angular/core';\n\nexport interface DropdownOption {\n  label: string;\n  value: any;\n  disabled?: boolean;\n}\n\n@Component({\n  selector: 'cqa-dropdown-button',\n  templateUrl: './dropdown-button.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class DropdownButtonComponent {\n  @Input() label: string = 'Select an option';\n  @Input() options: DropdownOption[] = [];\n  @Input() selectedValue?: any;\n  @Input() disabled: boolean = false;\n  @Input() placeholder?: string;\n  \n  @Output() selectionChange = new EventEmitter<any>();\n  @Output() opened = new EventEmitter<void>();\n  @Output() closed = new EventEmitter<void>();\n\n  @ViewChild('dropdownContainer', { static: false }) dropdownContainer?: ElementRef;\n  @ViewChild('buttonElement', { static: false }) buttonElement?: ElementRef;\n\n  isOpen: boolean = false;\n  private clickInside: boolean = false;\n\n  get displayLabel(): string {\n    if (this.selectedValue !== undefined && this.selectedValue !== null) {\n      const selectedOption = this.options.find(opt => opt.value === this.selectedValue);\n      return selectedOption ? selectedOption.label : this.label;\n    }\n    return this.placeholder || this.label;\n  }\n\n  get buttonClasses(): string {\n    const baseClasses = [\n      'cqa-h-9',\n      'cqa-px-3',\n      'cqa-py-2',\n      'cqa-bg-gray-100',\n      'cqa-rounded-[5px]',\n      'cqa-outline',\n      'cqa-outline-1',\n      'cqa-outline-offset-[-1px]',\n      'cqa-outline-gray-200',\n      'cqa-inline-flex',\n      'cqa-justify-center',\n      'cqa-items-center',\n      'cqa-gap-1',\n      'cqa-cursor-pointer',\n      'cqa-transition-colors'\n    ];\n\n    if (this.disabled) {\n      baseClasses.push('cqa-opacity-50', 'cqa-cursor-not-allowed');\n    } else {\n      baseClasses.push('cqa-hover:cqa-bg-gray-200');\n    }\n\n    if (this.isOpen) {\n      baseClasses.push('cqa-bg-gray-200');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  get labelClasses(): string {\n    return [\n      'cqa-text-center',\n      'cqa-justify-center',\n      'cqa-text-gray-950',\n      'cqa-text-xs',\n      'cqa-font-medium',\n      'cqa-leading-4'\n    ].join(' ');\n  }\n\n  get arrowClasses(): string {\n    const baseClasses = [\n      'cqa-w-4',\n      'cqa-h-4',\n      'cqa-relative',\n      'cqa-transition-transform'\n    ];\n\n    if (this.isOpen) {\n      baseClasses.push('cqa-rotate-180');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  toggleDropdown(event?: MouseEvent): void {\n    if (this.disabled) return;\n    \n    if (event) {\n      event.stopPropagation();\n      event.preventDefault();\n      this.clickInside = true;\n    }\n    \n    this.isOpen = !this.isOpen;\n    \n    // Reset clickInside flag after a short delay\n    setTimeout(() => {\n      this.clickInside = false;\n      if (this.isOpen) {\n        this.opened.emit();\n      } else {\n        this.closed.emit();\n      }\n    }, 100);\n  }\n\n  selectOption(option: DropdownOption, event?: MouseEvent): void {\n    if (option.disabled) return;\n    \n    if (event) {\n      event.stopPropagation();\n      this.clickInside = true;\n    }\n    \n    this.selectedValue = option.value;\n    this.isOpen = false;\n    this.selectionChange.emit(option.value);\n    this.closed.emit();\n    \n    // Reset flag after selection\n    setTimeout(() => {\n      this.clickInside = false;\n    }, 100);\n  }\n\n  getButtonWidth(): number {\n    if (this.buttonElement?.nativeElement) {\n      const width = this.buttonElement.nativeElement.offsetWidth;\n      return width > 0 ? width : 150; // Fallback to 150px if width is 0\n    }\n    return 150; // Default fallback width\n  }\n\n  getOptionClasses(option: DropdownOption): string {\n    const baseClasses = [\n      'cqa-p-1.5',\n      'cqa-rounded-md',\n      'cqa-inline-flex',\n      'cqa-justify-start',\n      'cqa-items-center',\n      'cqa-cursor-pointer',\n      'cqa-transition-colors'\n    ];\n\n    if (option.disabled) {\n      baseClasses.push('cqa-opacity-50', 'cqa-cursor-not-allowed');\n    } else {\n      baseClasses.push('cqa-hover:cqa-bg-gray-50');\n    }\n\n    if (this.selectedValue === option.value) {\n      baseClasses.push('cqa-bg-primary-surface');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    // Ignore if click was inside the component (button click)\n    if (this.clickInside) {\n      return;\n    }\n    \n    // Use a longer delay to ensure dropdown has time to render\n    setTimeout(() => {\n      if (!this.isOpen) return;\n      \n      const target = event.target as HTMLElement;\n      \n      // Check if click is inside the component container\n      if (this.dropdownContainer?.nativeElement?.contains(target)) {\n        return;\n      }\n      \n      // Close dropdown if click is outside\n      this.isOpen = false;\n      this.closed.emit();\n    }, 200);\n  }\n}\n\n","<div class=\"cqa-ui-root\" #dropdownContainer style=\"position: relative; display: inline-block; width: auto;\">\n  <button\n    #buttonElement\n    type=\"button\"\n    [class]=\"buttonClasses\"\n    [disabled]=\"disabled\"\n    (click)=\"toggleDropdown($event)\"\n    [attr.aria-expanded]=\"isOpen\"\n    [attr.aria-haspopup]=\"true\"\n  >\n    <div [class]=\"labelClasses\">\n      {{ displayLabel }}\n    </div>\n    <div [class]=\"arrowClasses\">\n      <svg\n        class=\"cqa-w-2 cqa-h-1 cqa-absolute cqa-left-[4px] cqa-top-[6px]\"\n        viewBox=\"0 0 8 4\"\n        fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n      >\n        <path\n          d=\"M0 0L4 4L8 0\"\n          stroke=\"#0B0B0C\"\n          stroke-width=\"1.33\"\n          stroke-linecap=\"round\"\n          stroke-linejoin=\"round\"\n        />\n      </svg>\n    </div>\n  </button>\n\n  <!-- Dropdown Menu -->\n  <div\n    *ngIf=\"isOpen && options && options.length > 0\"\n    class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-p-1.5 cqa-bg-white cqa-rounded-lg cqa-shadow-[0px_2px_4px_-2px_rgba(0,0,0,0.10)] cqa-shadow-md cqa-outline cqa-outline-1 cqa-outline-offset-[-1px] cqa-outline-gray-200 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-z-[9999] cqa-w-auto cqa-max-w-[350px]\"\n  >\n    <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5 cqa-w-full\">\n      <div\n        *ngFor=\"let option of options\"\n        (click)=\"selectOption(option, $event)\"\n        [class]=\"getOptionClasses(option)\"\n        class=\"cqa-w-full cqa-whitespace-nowrap\"\n      >\n        <div class=\"cqa-w-6 cqa-h-4 cqa-pr-2 cqa-inline-flex cqa-flex-col cqa-justify-center cqa-items-center\">\n          <mat-icon\n            *ngIf=\"selectedValue === option.value\"\n            class=\"cqa-w-4 cqa-h-4 cqa-text-primary cqa-text-base cqa-leading-4\"\n          >check</mat-icon>\n        </div>\n        <div class=\"cqa-flex-1 cqa-inline-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n          <div class=\"cqa-justify-center cqa-text-gray-950 cqa-text-sm cqa-font-normal cqa-leading-5 cqa-font-geist\">\n            {{ option.label }}\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input } from '@angular/core';\n\nexport type HeatErrorMapCellType = 'smoke' | 'sanity' | 'regression' | 'revisit';\n\n@Component({\n  selector: 'cqa-heat-error-map-cell',\n  templateUrl: './heat-error-map-cell.component.html',\n  styleUrls: [],\n  host: {\n    class: 'cqa-block cqa-w-full cqa-ui-root',\n  },\n})\nexport class HeatErrorMapCellComponent {\n  @Input() type: HeatErrorMapCellType = 'smoke';\n  @Input() cases: number = 0;\n  @Input() defects: number = 0;\n  @Input() progress: number = 0; // Progress value from 0 to 100\n\n  get backgroundColorStyle(): { [key: string]: string } {\n    switch (this.type) {\n      case 'smoke':\n        return { 'background-color': '#F4A07A' }; // orange-300\n      case 'sanity':\n        return { 'background-color': '#FFD465' }; // amber-300\n      case 'regression':\n        return { 'background-color': '#A8E6CF' }; // emerald-200\n      case 'revisit':\n        return { 'background-color': '#F0F0F0' }; // zinc-100\n      default:\n        return { 'background-color': '#F4A07A' }; // orange-300\n    }\n  }\n\n  get progressWidth(): string {\n    // Clamp progress between 0 and 100\n    const clampedProgress = Math.max(0, Math.min(100, this.progress));\n    return `${clampedProgress}%`;\n  }\n}\n\n\n","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n  <div class=\"cqa-w-full cqa-min-h-24 cqa-self-stretch cqa-flex cqa-flex-col cqa-rounded-2xl cqa-justify-start cqa-items-start cqa-gap-4 cqa-p-4\" [ngStyle]=\"backgroundColorStyle\">\n    <!-- section 1 -->\n    <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-px\">\n      <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n        <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-base cqa-font-bold cqa-leading-5 cqa-font-geist\">\n          {{ cases }} cases\n        </div>\n      </div>\n      <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start\">\n        <div class=\"cqa-self-stretch cqa-justify-center cqa-text-gray-900 cqa-text-xs cqa-font-normal cqa-leading-4 cqa-font-geist\">\n          {{ defects }} defects\n        </div>\n      </div>\n    </div>\n    <!-- section 2 -->\n    <div class=\"cqa-self-stretch cqa-h-1 cqa-relative cqa-rounded-full cqa-overflow-hidden cqa-bg-white/70\">\n      <div \n        class=\"cqa-h-1 cqa-left-0 cqa-top-0 cqa-absolute cqa-bg-red-500 cqa-rounded-full\"\n        [style.width]=\"progressWidth\"\n      ></div>\n    </div>\n  </div>\n</div>\n\n\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\ntype InputType = 'text' | 'password' | 'email' | 'number' | 'tel' | 'url';\ntype InputSize = 'sm' | 'md' | 'lg';\n\n@Component({\n  selector: 'cqa-custom-input',\n  templateUrl: './custom-input.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class CustomInputComponent implements OnChanges {\n\n  @Input() inputId?: string;\n\n  @Input() label = '';\n\n  @Input() type: InputType = 'text';\n\n  @Input() placeholder = '';\n\n  @Input() value = '';\n\n  @Input() disabled = false;\n\n  @Input() errors: string[] = [];\n\n  @Input() required = false;\n\n  @Input() ariaLabel = '';\n\n  @Input() size: InputSize = 'md';\n\n  @Input() fullWidth = false;\n\n  @Input() maxLength?: number;\n\n  @Input() showCharCount = false;\n\n  @Input() inputInlineStyle?: string;\n\n  @Input() labelInlineStyle?: string;\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Output() blurred = new EventEmitter<FocusEvent>();\n\n  @Output() focused = new EventEmitter<FocusEvent>();\n\n  @Output() enterPressed = new EventEmitter<string>();\n\n  inputValue = '';\n  isFocused = false;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['value'] && changes['value'].currentValue !== undefined) {\n      let newValue = changes['value'].currentValue ?? '';\n      \n      if (this.maxLength && newValue.length > this.maxLength) {\n        newValue = newValue.substring(0, this.maxLength);\n      }\n      \n      if (newValue !== this.inputValue) {\n        this.inputValue = newValue;\n      }\n    }\n  }\n\n  get hasError(): boolean {\n    return this.errors && this.errors.length > 0;\n  }\n\n  get inputSizeClasses(): string {\n    switch (this.size) {\n      case 'sm':\n        return 'cqa-px-3 cqa-py-2 cqa-text-xs';\n      case 'md':\n        return 'cqa-px-4 cqa-py-2.5 cqa-text-sm';\n      case 'lg':\n        return 'cqa-px-5 cqa-py-3 cqa-text-base';\n      default:\n        return 'cqa-px-4 cqa-py-2.5 cqa-text-sm';\n    }\n  }\n\n  get labelSizeClasses(): string {\n    switch (this.size) {\n      case 'sm':\n        return 'cqa-text-xs cqa-mb-1';\n      case 'md':\n        return 'cqa-text-sm cqa-mb-1.5';\n      case 'lg':\n        return 'cqa-text-base cqa-mb-2';\n      default:\n        return 'cqa-text-sm cqa-mb-1.5';\n    }\n  }\n\n  onInput(event: Event): void {\n    const target = event.target as HTMLInputElement | null;\n    let nextValue = target?.value ?? '';\n    \n    if (this.showCharCount && this.maxLength && nextValue.length > this.maxLength) {\n      nextValue = nextValue.substring(0, this.maxLength);\n      if (target) {\n        target.value = nextValue;\n      }\n    }\n    \n    this.inputValue = nextValue;\n    this.valueChange.emit(this.inputValue);\n  }\n\n  onFocus(event: FocusEvent): void {\n    this.isFocused = true;\n    this.focused.emit(event);\n  }\n\n  onBlur(event: FocusEvent): void {\n    this.isFocused = false;\n    this.blurred.emit(event);\n  }\n\n  onKeyDown(event: KeyboardEvent): void {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      this.enterPressed.emit(this.inputValue.trim());\n    }\n  }\n\n  get inputStyles(): string {\n    return this.inputInlineStyle || '';\n  }\n\n  get labelStyles(): string {\n    return this.labelInlineStyle || '';\n  }\n}\n\n","<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n  <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n    <label \n      *ngIf=\"label\"\n      class=\"cqa-font-medium cqa-text-[#374151]\"\n      [ngClass]=\"labelSizeClasses\"\n      [style]=\"labelStyles\">\n      {{ label }}\n      <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n    </label>\n\n    <div class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n      <input\n        [attr.id]=\"inputId\"\n        [attr.name]=\"inputId\"\n        [type]=\"type\"\n        class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none {{ inputSizeClasses }}\"\n        [ngClass]=\"{\n          'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n          'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n          'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n          'cqa-outline-none': true\n        }\"\n        [style]=\"inputStyles\"\n        [placeholder]=\"placeholder\"\n        [value]=\"inputValue\"\n        (input)=\"onInput($event)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n        (keydown)=\"onKeyDown($event)\"\n        [disabled]=\"disabled\"\n        [attr.aria-label]=\"ariaLabel || label\"\n        [attr.aria-invalid]=\"hasError\"\n        [attr.aria-required]=\"required\"\n        autocomplete=\"off\"\n      />\n    </div>\n\n    <div *ngIf=\"showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n      <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n        {{ inputValue.length }}/{{ maxLength }}\n      </span>\n    </div>\n\n    <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n      <div *ngFor=\"let error of errors\" 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</div>\n\n","import { Component, Input, Output, EventEmitter, Inject, Optional } from '@angular/core';\nimport { FormControl, Validators } from '@angular/forms';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface TestCase {\n  id?: number;\n  name?: string;\n}\n\nexport interface ExportCodeModalData {\n  count?: number;\n  cases?: TestCase[];\n  disabled?: boolean;\n}\n\n@Component({\n  selector: 'cqa-export-code-modal',\n  templateUrl: './export-code-modal.component.html',\n  styleUrls: []\n})\nexport class ExportCodeModalComponent {\n  @Input() isOpen: boolean = false;\n  @Input() cases: TestCase[] = [];\n  @Input() disabled: boolean = false;\n\n  @Output() closeModal = new EventEmitter<void>();\n  @Output() export = new EventEmitter<{ type: 'local' | 'email'; emails?: string[]; framework: 'WEBDRIVER_IO' | 'SELENIUM_JAVA' }>();\n\n  public exportOnLocal: boolean = true;\n  public framework: 'WEBDRIVER_IO' | 'SELENIUM_JAVA' = 'WEBDRIVER_IO';\n  public emailList: string[] = [];\n  public emailInputControl: FormControl;\n  public showEmailError: boolean = false;\n  public isDialogMode: boolean = false;\n\n  constructor(\n    @Optional() @Inject(MAT_DIALOG_DATA) public modalData?: ExportCodeModalData,\n    @Optional() private dialogRef?: MatDialogRef<ExportCodeModalComponent>\n  ) {\n    // Initialize email input control with validation\n    this.emailInputControl = new FormControl('', [\n      Validators.email\n    ]);\n\n    // If used with MatDialog, initialize from modalData\n    if (modalData) {\n      this.isDialogMode = true;\n      this.cases = modalData.cases || [];\n      this.disabled = modalData.disabled || false;\n      this.isOpen = true;\n    }\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    \n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.onClose();\n    }\n  }\n\n  onClose(): void {\n    if (this.isDialogMode && this.dialogRef) {\n      this.dialogRef.close();\n    } else {\n      this.closeModal.emit();\n    }\n    // Reset form when closing\n    this.exportOnLocal = true;\n    this.framework = 'WEBDRIVER_IO';\n    this.emailList = [];\n    this.emailInputControl.reset();\n    this.showEmailError = false;\n  }\n\n  addEmail(): void {\n    const email = this.emailInputControl.value?.trim();\n    \n    if (!email) {\n      this.emailInputControl.setErrors({ required: true });\n      this.emailInputControl.markAsTouched();\n      return;\n    }\n\n    if (this.emailInputControl.invalid) {\n      this.emailInputControl.markAsTouched();\n      return;\n    }\n\n    // Check for duplicates\n    if (this.emailList.includes(email)) {\n      this.emailInputControl.setErrors({ duplicate: true });\n      this.emailInputControl.markAsTouched();\n      return;\n    }\n\n    // Add email to list\n    this.emailList.push(email);\n    this.emailInputControl.reset();\n    this.showEmailError = false;\n  }\n\n  removeEmail(index: number): void {\n    if (index >= 0 && index < this.emailList.length) {\n      this.emailList.splice(index, 1);\n    }\n  }\n\n  getEmailErrors(): string[] {\n    if (!this.emailInputControl.touched || !this.emailInputControl.invalid) {\n      return [];\n    }\n    \n    const errors: string[] = [];\n    if (this.emailInputControl.errors?.['required']) {\n      errors.push('Email is required');\n    }\n    if (this.emailInputControl.errors?.['email']) {\n      errors.push('Please enter a valid email address');\n    }\n    if (this.emailInputControl.errors?.['duplicate']) {\n      errors.push('This email address has already been added');\n    }\n    return errors;\n  }\n\n  isExportDisabled(): boolean {\n    if (this.exportOnLocal) {\n      return false;\n    }\n    // For email export, at least one valid email is required\n    return this.emailList.length === 0;\n  }\n\n  handleExport(): void {\n    if (!this.exportOnLocal && this.emailList.length === 0) {\n      this.showEmailError = true;\n      return;\n    }\n\n    // Emit export event with appropriate data\n    const result = this.exportOnLocal\n      ? { type: 'local' as const, framework: this.framework }\n      : { type: 'email' as const, emails: this.emailList, framework: this.framework };\n\n    if (this.isDialogMode && this.dialogRef) {\n      this.dialogRef.close(result);\n    } else {\n      this.export.emit(result);\n    }\n  }\n}\n\n","<div *ngIf=\"isOpen || isDialogMode\"\n  [class.modal-backdrop]=\"!isDialogMode\"\n  [class.cqa-fixed]=\"!isDialogMode\"\n  [class.cqa-inset-0]=\"!isDialogMode\"\n  [class.cqa-bg-black]=\"!isDialogMode\"\n  [class.cqa-bg-opacity-50]=\"!isDialogMode\"\n  [class.cqa-flex]=\"!isDialogMode\"\n  [class.cqa-items-center]=\"!isDialogMode\"\n  [class.cqa-justify-center]=\"!isDialogMode\"\n  [class.cqa-p-4]=\"!isDialogMode\"\n  (click)=\"!isDialogMode && onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[600px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh]\"\n    [style.box-shadow]=\"'0px 8px 8px -4px #10182808'\" \n    (click)=\"!isDialogMode && $event.stopPropagation()\">\n\n    <!-- Sticky Header -->\n    <div class=\"cqa-sticky cqa-top-0 cqa-bg-white cqa-mt-2 cqa-z-10 cqa-px-4 cqa-pt-2 cqa-pb-2\">\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n        <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C]\">\n          Export Code\n        </h2>\n        <cqa-button \n          [variant]=\"'text'\"\n          [icon]=\"'close'\"\n          [btnSize]=\"'md'\"\n          (clicked)=\"onClose()\">\n        </cqa-button>\n      </div>\n    </div>\n\n    <!-- Content -->\n    <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-4 cqa-pb-4\">\n      <!-- Framework Options -->\n      <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2\">Choose automation framework:</p>\n      <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n        <div\n          class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n          [class.cqa-border-[#3f43ee]]=\"framework === 'WEBDRIVER_IO'\"\n          [class.cqa-bg-[#F0F0FF]]=\"framework === 'WEBDRIVER_IO'\"\n          [class.cqa-border-gray-300]=\"framework !== 'WEBDRIVER_IO'\"\n          (click)=\"framework = 'WEBDRIVER_IO'\">\n          <div class=\"cqa-flex cqa-items-center\">\n            <input\n              type=\"radio\"\n              [checked]=\"framework === 'WEBDRIVER_IO'\"\n              (click)=\"$event.stopPropagation()\"\n              name=\"framework\"\n              style=\"pointer-events: none;\"\n              class=\"cqa-mr-2 cqa-cursor-pointer\">\n            <div>\n              <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">WebdriverIO</span>\n            </div>\n          </div>\n        </div>\n\n        <div\n          class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n          [class.cqa-border-[#3f43ee]]=\"framework === 'SELENIUM_JAVA'\"\n          [class.cqa-bg-[#F0F0FF]]=\"framework === 'SELENIUM_JAVA'\"\n          [class.cqa-border-gray-300]=\"framework !== 'SELENIUM_JAVA'\"\n          (click)=\"framework = 'SELENIUM_JAVA'\">\n          <div class=\"cqa-flex cqa-items-center\">\n            <input\n              type=\"radio\"\n              [checked]=\"framework === 'SELENIUM_JAVA'\"\n              name=\"framework\"\n              style=\"pointer-events: none;\"\n              (click)=\"$event.stopPropagation()\"\n              class=\"cqa-mr-2 cqa-cursor-pointer\">\n            <div>\n              <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Selenium Java</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Export Options -->\n      <p class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-2 cqa-mt-3\">Choose how you want to export the test case code:</p>\n      <div class=\"cqa-flex cqa-gap-4 cqa-mb-2\">\n        <div\n          class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n          [class.cqa-border-[#3f43ee]]=\"exportOnLocal\"\n          [class.cqa-bg-[#F0F0FF]]=\"exportOnLocal\"\n          [class.cqa-border-gray-300]=\"!exportOnLocal\"\n          (click)=\"exportOnLocal = true\">\n          <div class=\"cqa-flex cqa-items-center\">\n            <input \n              type=\"radio\" \n              [checked]=\"exportOnLocal\" \n              (click)=\"$event.stopPropagation()\"\n              name=\"exportType\"\n              style=\"pointer-events: none;\"\n              class=\"cqa-mr-2 cqa-cursor-pointer\">\n            <div>\n              <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Download in Local</span>\n            </div>\n          </div>\n        </div>\n        \n        <div \n          class=\"cqa-flex-1 cqa-border cqa-rounded-lg cqa-px-4 cqa-py-1 cqa-cursor-pointer cqa-transition-all\"\n          [class.cqa-border-[#3f43ee]]=\"!exportOnLocal\"\n          [class.cqa-bg-[#F0F0FF]]=\"!exportOnLocal\"\n          [class.cqa-border-gray-300]=\"exportOnLocal\"\n          (click)=\"exportOnLocal = false\">\n          <div class=\"cqa-flex cqa-items-center\">\n            <input \n              type=\"radio\" \n              [checked]=\"!exportOnLocal\" \n              name=\"exportType\"\n              style=\"pointer-events: none;\"\n              (click)=\"$event.stopPropagation()\"\n              class=\"cqa-mr-2 cqa-cursor-pointer\">\n            <div>\n              <span class=\"cqa-block cqa-font-medium cqa-text-[#0B0B0C]\">Via Email</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Email Input Section (only shown when Via Email is selected) -->\n      <div class=\"cqa-mt-2\" *ngIf=\"!exportOnLocal\">\n        <div class=\"cqa-px-4 cqa-py-2 cqa-bg-gray-50 cqa-rounded-lg\">\n          <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Email Addresses:</div>\n          \n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n            <cqa-custom-input\n              class=\"cqa-flex-1\"\n              [type]=\"'email'\"\n              [placeholder]=\"'Type email and press Enter or Add button'\"\n              [value]=\"emailInputControl.value || ''\"\n              [fullWidth]=\"true\"\n              [errors]=\"getEmailErrors()\"\n              (valueChange)=\"emailInputControl.setValue($event)\"\n              (enterPressed)=\"addEmail()\">\n            </cqa-custom-input>\n            <cqa-button \n              [variant]=\"'outlined'\"\n              [icon]=\"'add'\"\n              [btnSize]=\"'lg'\"\n              [disabled]=\"!emailInputControl.valid || !emailInputControl.value?.trim()\"\n              (clicked)=\"addEmail()\">\n            </cqa-button>\n          </div>\n\n          <!-- Email Validation Error for Empty List -->\n          <div class=\"cqa-text-red-600 cqa-text-xs cqa-mb-2\" *ngIf=\"!exportOnLocal && emailList.length === 0 && showEmailError\">\n            At least one email address is required\n          </div>\n\n          <!-- Email Chips -->\n          <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-mt-2\" *ngIf=\"emailList.length > 0\">\n            <div *ngFor=\"let email of emailList; let i = index\" \n                 class=\"cqa-px-2 cqa-py-1 cqa-bg-[#DFDFFD] cqa-border cqa-border-[#DFDFFD] cqa-rounded-md cqa-flex cqa-items-center\">\n              <span class=\"cqa-text-[#6366F1] cqa-text-[12px]\">{{email}}</span>\n              <cqa-button \n                [variant]=\"'text'\"\n                [icon]=\"'close'\"\n                [btnSize]=\"'sm'\"\n                [iconColor]=\"'#6366F1'\"\n                (clicked)=\"removeEmail(i)\">\n              </cqa-button>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Cases List -->\n      <div class=\"cqa-mt-1\" *ngIf=\"cases.length > 0\">\n        <div class=\"cqa-p-4 cqa-bg-gray-50 cqa-rounded-lg\">\n          <div class=\"cqa-font-medium cqa-text-sm cqa-text-[#0B0B0C] cqa-mb-2\">Test Cases to Export ({{cases.length}}):</div>\n          <div class=\"cqa-max-h-[150px] cqa-overflow-y-auto cqa-pr-4\">\n            <div class=\"cqa-py-2 cqa-border-b cqa-border-b-[1px] cqa-border-t-[0px] cqa-border-l-[0px] cqa-border-r-[0px]  cqa-border-solid cqa-border-gray-200 cqa-flex cqa-items-center cqa-gap-2\" *ngFor=\"let case of cases; let i = index\">\n              <span class=\"cqa-font-medium cqa-text-[12px] cqa-text-[#3f43ee] cqa-min-w-[24px]\">{{i + 1}}.</span>\n              <span class=\"cqa-flex-1 cqa-text-[12px] cqa-text-[#0B0B0C]\">{{case.name || 'Unnamed Test Case'}}</span>\n              <span class=\"cqa-text-xs cqa-text-gray-500\" *ngIf=\"case.id\">(TC-{{case.id}})</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Footer -->\n    <div class=\"cqa-px-4 cqa-py-3 cqa-border-t cqa-border-gray-200 cqa-flex cqa-justify-end cqa-gap-3\">\n      <cqa-button \n        [variant]=\"'outlined'\"\n        [text]=\"'Cancel'\"\n        (clicked)=\"onClose()\">\n      </cqa-button>\n      <cqa-button \n        [variant]=\"'filled'\"\n        [text]=\"exportOnLocal ? 'Export' : 'Send'\"\n        [disabled]=\"disabled || isExportDisabled()\"\n        (clicked)=\"handleExport()\">\n      </cqa-button>\n    </div>\n  </div>\n</div>\n\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n  OnDestroy,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { DynamicFilterItem, DynamicFilterComponent } from '../filters/dynamic-filter/dynamic-filter.component';\nimport { DynamicTableColumn } from '../table/dynamic-table/dynamic-table.component';\nimport { ColumnVisibilityConfig } from '../column-visibility/column-visibility.component';\nimport { TableAction } from '../table-action-toolbar/table-action-toolbar.component';\nimport { EmptyStateConfig } from '../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\n\n@Component({\n  selector: 'cqa-table-template',\n  templateUrl: './table-template.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableTemplateComponent implements OnInit, OnChanges, OnDestroy {\n  // Search bar inputs\n  @Input() searchPlaceholder: string = 'Search components';\n  @Input() searchValue: string = '';\n  @Input() showClear: boolean = true;\n  @Input() showSearchBar: boolean = true;\n  @Input() showExportButton: boolean = false;\n  @Input() isExporting: boolean = false;\n  // Search bar outputs\n  @Output() onSearchChange = new EventEmitter<string>();\n  @Output() onExportClick = new EventEmitter<{ type: 'local' | 'email'; emails?: string[]; framework?: 'WEBDRIVER_IO' | 'SELENIUM_JAVA'; selectedItems: any[] } | void>();\n  // Filter outputs\n  @Output() onApplyFilterClick = new EventEmitter<any>();\n  @Output() onResetFilterClick = new EventEmitter<void>();\n  @Output() onClearAll = new EventEmitter<void>();\n  @Output() removeChip = new EventEmitter<any>();\n\n  // Filter inputs\n  @Input() filterConfig: DynamicFilterItem[] = [];\n  @Input() filterModel: Record<string, any> = {};\n  @Input() showFilterPanel: boolean = false;\n  @Input() showFilterButton: boolean = true;\n\n  // Other buttons input (array of button templates/components)\n  @Input() otherButtons: TemplateRef<any>[] = [];\n  \n  // Other dropdown buttons input (array of dropdown button templates/components)\n  @Input() otherDropDownButtons: TemplateRef<any>[] = [];\n  \n  // Other select dropdown buttons input (array of select dropdown button templates/components)\n  @Input() otherSelectDropDownButtons: TemplateRef<any>[] = [];\n  \n  // Legacy single button inputs (deprecated, kept for backward compatibility)\n  /** @deprecated Use otherButtons array instead */\n  @Input() otherButtonLabel: string = 'Other Button';\n  /** @deprecated Use otherButtons array instead */\n  @Input() otherButtonVariant: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid' = 'filled';\n  /** @deprecated Use otherButtons array instead */\n  @Input() showOtherButton: boolean = true;\n  \n  // Action menu button (three-dot menu in table rows)\n  @Input() showActionButton: boolean = true;\n\n  // Settings and refresh buttons\n  @Input() showSettingsButton: boolean = true;\n  @Input() showAutoRefreshButton: boolean = true;\n\n  // View-mode toggle (List | Modular). Hidden by default for backward compatibility.\n  @Input() showViewModeToggle: boolean = false;\n  @Input() viewMode: 'list' | 'modular' = 'list';\n  @Input() viewModeLabels: { list: string; modular: string } = { list: 'List', modular: 'Modular' };\n  @Output() viewModeChange = new EventEmitter<'list' | 'modular'>();\n\n  // Stable reference fed to <cqa-segment-control [segments]>. A getter here\n  // allocates a new array each CD tick, which the segment control then sees as\n  // a changed Input — its updateIndicator runs inside a queueMicrotask, the\n  // zone re-ticks via onMicrotaskEmpty, and the loop pegs CPU at 100% with\n  // HTTP requests starved. Rebuilt only when viewModeLabels actually changes.\n  viewModeSegments: Array<{ label: string; value: string; icon?: string }> = [\n    { label: 'List', value: 'list', icon: 'view_list' },\n    { label: 'Modular', value: 'modular', icon: 'folder' },\n  ];\n\n  onViewModeChange(value: string): void {\n    const next = value === 'modular' ? 'modular' : 'list';\n    if (next !== this.viewMode) {\n      this.viewMode = next;\n      this.viewModeChange.emit(next);\n    }\n  }\n\n  // Data input\n  @Input() data: any[] = [];\n\n  // Empty state inputs\n  @Input() isEmptyState: boolean = false;\n  @Input() emptyStateConfig: EmptyStateConfig = {\n    title: 'No Data Available Yet',\n    description: 'Run or upload your first test to see your analytics and trends here. Watch your quality metrics come to life with real-time insights.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: [{ label: 'Run Test Suite', variant: 'filled' }],\n  };\n\n  // Action bar inputs\n  @Input() actions: TableAction[] = [\n    { \n      id: 'delete', \n      label: 'Delete', \n      icon: 'delete', \n      tooltip: 'Delete selected',\n      onClick: (context) => {\n        console.log('Delete action clicked:', context);\n      }\n    },\n    { \n      id: 'edit', \n      label: 'Edit', \n      icon: 'edit', \n      tooltip: 'Edit selected',\n      onClick: (context) => {\n        console.log('Edit action clicked:', context);\n      }\n    },\n    { \n      id: 'add-tag', \n      label: 'Add Tag', \n      icon: 'local_offer', \n      tooltip: 'Add tags',\n      onClick: (context) => {\n        console.log('Add tag action clicked:', context);\n      }\n    },\n    { \n      id: 'remove-tag', \n      label: 'Remove Tag', \n      icon: 'label_off', \n      tooltip: 'Remove tags',\n      onClick: (context) => {\n        console.log('Remove tag action clicked:', context);\n      }\n    },\n  ];\n\n  // Chips inputs\n  @Input() chips: Array<{ key?: string; label?: string; text: string; fullText?: string; hasMore?: boolean }> = [];\n  @Input() filterApplied: boolean = false;\n\n  // Table inputs\n  @Input() columns: DynamicTableColumn[] = [];\n  @Input() rowSelectable?: (row: any) => boolean;\n  @Input() selectedAutoRefreshInterval: number = 0;\n  @Input() pageIndex: number = 0;\n  @Input() pageSize: number = 10;\n  @Input() pageSizeOptions: number[] = [10, 20, 40, 60, 80];\n  @Input() pageSizeMenuDirection: 'auto' | 'up' | 'down' = 'auto';\n  // Server-side pagination controls\n  @Input() serverSidePagination: boolean = false;\n  @Input() totalElements: number = 0;\n  @Output() pageChange = new EventEmitter<{ pageIndex: number; pageSize: number }>();\n  /**\n   * When false, header sort does not reorder rows locally (use with serverSidePagination + sortChange).\n   * Default true for backward compatibility.\n   */\n  @Input() enableLocalSort: boolean = true;\n  @Output() sortChange = new EventEmitter<{\n    fieldId: string;\n    fieldValue?: string;\n    direction: 'asc' | 'desc' | null;\n  }>();\n  // Loader controls (passed down to dynamic table)\n  @Input() isTableLoading?: boolean;\n  @Input() isTableDataLoading?: boolean;\n  // Backward-compatibility flag; if provided, dynamic table will use it when specific flags are undefined\n\n  // Optional getter for JSON path per cell. When provided, double-clicking a cell copies the path.\n  @Input() cellJsonPathGetter?: (rowIndex: number, colId: string, row: any) => string;\n\n  // Optional handler called when a JSON path is copied from a table cell\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: string }) => void;\n\n  // Selected items (full objects) for maintaining selection across pagination (server-side)\n  @Input() selectedItems: any[] = [];\n\n  /** When true, the action toolbar renders the \"Select all\" affordance. */\n  @Input() showSelectAllInToolbar: boolean = false;\n  /** When true, the action toolbar renders the dismiss (×) affordance. */\n  @Input() showDismissInToolbar: boolean = false;\n  /** Bound to the toolbar's \"Select all\" checkbox — drives the checked state. */\n  @Input() allSelectedInToolbar: boolean = false;\n\n  // Internal state for column visibility\n  private _columnVisibility: ColumnVisibilityConfig = {};\n  private _cachedVisibilityColumns: Array<{ id: string; label: string }> = [];\n  filteredRows: any[] = [];\n  pagedRows: any[] = [];\n\n  constructor(private cdr: ChangeDetectorRef) {}\n  private pendingFilters: any;\n  private appliedFilters: any;\n  private autoRefreshTimer?: ReturnType<typeof setInterval>;\n  @Output() onReload = new EventEmitter<void>();\n  @Output() onAutoRefreshClick = new EventEmitter<void>();\n  @Output() columnVisibilityChange = new EventEmitter<ColumnVisibilityConfig>();\n  @Output() autoRefreshIntervalChange = new EventEmitter<number>();\n\n  // ---------------------------------------------------------------------------\n  // Bulk action toolbar passthrough — mirrors every output the inner\n  // `cqa-table-action-toolbar` exposes, so consumers wire a single component.\n  // ---------------------------------------------------------------------------\n  /** Fires when a bulk action (delete / edit / tag / …) is invoked on the selection. */\n  @Output() bulkActionClick = new EventEmitter<{ id: string; selected: any[] }>();\n  /** Fires when the toolbar's \"Select all\" affordance is toggled (requires `showSelectAllInToolbar`). */\n  @Output() bulkSelectAllChange = new EventEmitter<boolean>();\n  /** Fires when the toolbar's dismiss (×) affordance is clicked (requires `showDismissInToolbar`). */\n  @Output() bulkDismiss = new EventEmitter<void>();\n  /** Fires whenever the component internally mutates `selectedItems` (e.g. dismiss clears it). */\n  @Output() selectedItemsChange = new EventEmitter<any[]>();\n  @ViewChild(DynamicFilterComponent) dynamicFilterComponent?: DynamicFilterComponent;\n\n  // Derived columns with visibility applied.\n  computedColumns: DynamicTableColumn[] = [];\n  // Auto-generated visibility columns from columns input\n  visibilityColumns: Array<{ id: string; label: string }> = [];\n\n  private updateComputedColumns(): void {\n    const visibility = this._columnVisibility || {};\n    const source = this.columns || [];\n    this.computedColumns = source.map(col => {\n      if (['checkbox', 'actions'].includes(col.fieldId)) {\n        return col;\n      }\n      const show = visibility[col.fieldId];\n      return { ...col, isShow: show !== false };\n    });\n    this.cdr.markForCheck();\n  }\n\n  private updateVisibilityColumns(): void {\n    this._cachedVisibilityColumns = this.mapVisibilityColumns();\n    this.visibilityColumns = this._cachedVisibilityColumns;\n    this.cdr.markForCheck();\n  }\n\n  // Controlled column visibility: parent can seed and push updates.\n  @Input() set columnVisibility(cfg: ColumnVisibilityConfig | undefined) {\n    if (cfg) {\n      this._columnVisibility = { ...cfg };\n      this.updateComputedColumns();\n      this.cdr.markForCheck();\n    }\n  }\n  get columnVisibility(): ColumnVisibilityConfig {\n    return this._columnVisibility;\n  }\n  ngOnInit(): void {\n    this.initializeComponent();\n    this.updateComputedColumns();\n    this.updateVisibilityColumns();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] || changes['isEmptyState']) {\n      this.initializeComponent();\n    }\n    if (changes['columns']) {\n      this.initializeColumnVisibility();\n      this.updateComputedColumns();\n      this.updateVisibilityColumns();\n    }\n    if (changes['selectedItems'] || changes['data']) {\n      this.restoreSelectionState();\n    }\n    if (changes['viewModeLabels']) {\n      this.viewModeSegments = [\n        { label: this.viewModeLabels.list, value: 'list', icon: 'view_list' },\n        { label: this.viewModeLabels.modular, value: 'modular', icon: 'folder' },\n      ];\n    }\n  }\n\n  private initializeComponent(): void {\n    if (this.isEmptyState) {\n      this.filteredRows = [];\n      this.pagedRows = [];\n      return;\n    }\n\n    // In server-side mode, assume incoming data is already a page slice\n    if (this.serverSidePagination) {\n      this.filteredRows = [...this.data];\n      this.pagedRows = [...this.filteredRows];\n      this.initializeColumnVisibility();\n      this.restoreSelectionState();\n      return;\n    }\n\n    this.filteredRows = [...this.data];\n    this.applyPagination();\n    this.initializeColumnVisibility();\n    this.updateComputedColumns();\n    this.restoreSelectionState();\n  }\n\n  /**\n   * Get selected IDs from selectedItems (objects)\n   */\n  private getSelectedIds(): Set<number> {\n    if (this.selectedItems && this.selectedItems.length > 0) {\n      return new Set(this.selectedItems.map(item => Number(item.id)).filter(id => !isNaN(id)));\n    }\n    return new Set();\n  }\n\n  private restoreSelectionState(): void {\n    const selectedIdsSet = this.getSelectedIds();\n\n    if (selectedIdsSet.size === 0) {\n      // If no selected IDs, clear all selection states\n      if (this.pagedRows) {\n        this.pagedRows.forEach(row => {\n          if (row) {\n            (row as any).isSelected = false;\n          }\n        });\n      }\n      return;\n    }\n\n    // Restore selection state based on selectedItems\n    if (this.pagedRows) {\n      this.pagedRows.forEach(row => {\n        if (row && row.id !== undefined) {\n          (row as any).isSelected = selectedIdsSet.has(Number(row.id));\n        }\n      });\n    }\n\n    // Also update filteredRows for consistency\n    if (this.filteredRows) {\n      this.filteredRows.forEach(row => {\n        if (row && row.id !== undefined) {\n          (row as any).isSelected = selectedIdsSet.has(Number(row.id));\n        }\n      });\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  private initializeColumnVisibility(): void {\n    // Cache visibility columns to avoid creating new arrays on every change detection\n    this._cachedVisibilityColumns = this.mapVisibilityColumns();\n    // Seed visibility state from each column's isShow (default to true) so consumers\n    // can pre-apply persisted preferences via columns[i].isShow.\n    const source = this.columns || [];\n    for (const col of this._cachedVisibilityColumns) {\n      if (this._columnVisibility[col.id] === undefined) {\n        const srcCol = source.find(c => c.fieldId === col.id);\n        this._columnVisibility[col.id] = srcCol && srcCol.isShow === false ? false : true;\n      }\n    }\n  }\n\n  get anyRowSelected(): boolean {\n    // Check if there are any selected items (either on current page or across all pages via selectedItems)\n    const hasSelectedOnPage = !!(this.pagedRows && this.pagedRows.some(r => !!(r as any).isSelected));\n    const selectedIdsSet = this.getSelectedIds();\n    const hasSelectedAcrossPages = selectedIdsSet.size > 0;\n    return hasSelectedOnPage || hasSelectedAcrossPages;\n  }\n\n  get currentSelectedItems(): any[] {\n    // If selectedItems (full objects) are provided, use them directly\n    // This ensures all selected items are returned, including those from other pages\n    if (this.selectedItems && this.selectedItems.length > 0) {\n      return this.selectedItems;\n    }\n    // Fallback: For client-side pagination or when selectedItems is not provided,\n    // filter pagedRows to get selected items from current page only\n    if (!this.pagedRows || this.pagedRows.length === 0) {\n      return [];\n    }\n\n    const selectedIdsSet = this.getSelectedIds();\n    \n    // Filter rows that are selected\n    return this.pagedRows\n      .filter(r => {\n        if (!r || r.id === undefined) return false;\n        const rowId = Number(r.id);\n        // Include if either:\n        // 1. The row has isSelected = true (current page selection)\n        // 2. The row's ID is in selectedItems (selected on other pages or restored selection)\n        return !!(r as any).isSelected || selectedIdsSet.has(rowId);\n      });\n  }\n\n  /** Toolbar `actionClick` handler — emits upward as `bulkActionClick`. */\n  actionClick(event: { id: string; selected: any[] }): void {\n    this.bulkActionClick.emit(event);\n  }\n\n  /** Toolbar `selectAllChange` handler — selects every filtered row locally and emits. */\n  onToolbarSelectAll(checked: boolean): void {\n    this.selectedItems = checked ? [...this.filteredRows] : [];\n    this.restoreSelectionState();\n    this.selectedItemsChange.emit([...this.selectedItems]);\n    this.bulkSelectAllChange.emit(checked);\n    this.cdr.markForCheck();\n  }\n\n  /** Toolbar `dismiss` handler — clears selection locally so the toolbar closes. */\n  onToolbarDismiss(): void {\n    this.selectedItems = [];\n    this.restoreSelectionState();\n    this.selectedItemsChange.emit([]);\n    this.bulkDismiss.emit();\n    this.cdr.markForCheck();\n  }\n\n  view(id: number | string): void {\n    console.log('View', id);\n  }\n\n  edit(row: any): void {\n    console.log('Edit', row);\n  }\n\n  delete(row: any): void {\n    console.log('Delete', row);\n  }\n\n  toggleFilter(): void {\n    this.showFilterPanel = !this.showFilterPanel;\n  }\n\n  onColumnVisibilityChange(cfg: ColumnVisibilityConfig): void {\n    this._columnVisibility = { ...cfg };\n    this.updateComputedColumns();\n    this.cdr.markForCheck();\n    this.columnVisibilityChange.emit({ ...cfg });\n  }\n\n  onAutoRefreshChange(intervalMs: number): void {\n    this.selectedAutoRefreshInterval = intervalMs;\n    this.setupAutoRefresh(intervalMs);\n    this.autoRefreshIntervalChange.emit(intervalMs);\n    this.triggerReload();\n  }\n\n  valueChange(value: string): void {\n    console.log('Value changed', value);\n    this.onSearchChange.emit(value);\n  }\n\n  search(value: string): void {\n    console.log('Search', value);\n  }\n\n  cleared(): void {\n    console.log('Cleared');\n  }\n\n  onEmptyAction(action: any) {\n    if (action?.label === 'Show filters') {\n      this.toggleFilter();\n    }\n  }\n\n  onFiltersChanged(current: any): void {\n    // Defer applying filters and updating chips until Apply Filter is clicked\n    this.pendingFilters = current;\n  }\n\n  onFiltersApplied(applied: any): void {\n    this.showFilterPanel = false;\n    const effective = applied ?? this.pendingFilters ?? {};\n    this.appliedFilters = effective;\n    this.filteredRows = this.data.filter(r => this.passFilters(effective, r));\n    this.pageIndex = 0;\n    this.applyPagination();\n    const chips: Array<{ key?: string; label?: string; text: string; fullText?: string; hasMore?: boolean }> = [];\n    if (effective) {\n      for (const key of Object.keys(effective)) {\n        const value = effective[key];\n        if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) continue;\n        \n        // Find the filter config item for this key\n        const filterConfigItem = this.filterConfig?.find(c => c.key === key);\n        const options = filterConfigItem?.options || [];\n        \n        // Helper function to find display text from options\n        const getDisplayText = (val: any): string => {\n          // If value is already an object with name/label, use it\n          if (val && typeof val === 'object' && (val.name || val.label || val.value)) {\n            return val.name ?? val.label ?? String(val.value ?? val);\n          }\n          \n          // Look up the option in the config\n          const option = options.find((opt: any) => {\n            const optId = opt.id ?? opt.value;\n            const optValue = opt.value;\n            const valStr = String(val);\n            return String(optId) === valStr || String(optValue) === valStr;\n          });\n          \n          if (option) {\n            return option.name ?? option.label ?? String(option.value ?? val);\n          }\n          \n          // Fallback to the raw value\n          return String(val);\n        };\n        \n        let text = '';\n        let label = filterConfigItem?.label;\n        \n        if (Array.isArray(value)) {\n          text = value.map((v: any) => getDisplayText(v)).join(', ');\n        } else if (typeof value === 'object') {\n          if ('start' in value || 'end' in value) {\n            const s = value.start ? new Date(value.start).toLocaleDateString() : '';\n            const e = value.end ? new Date(value.end).toLocaleDateString() : '';\n            text = [s, e].filter(Boolean).join(' - ');\n          } else {\n            text = getDisplayText(value);\n          }\n        } else {\n          text = getDisplayText(value);\n        }\n        chips.push({ key, label, text, fullText: text, hasMore: text.length > 30 });\n      }\n    }\n    this.chips = chips;\n    this.filterApplied = this.chips.length > 0;\n  }\n\n  handleResetFilterClick(): void {\n    // Clear chips and reset filtered data when reset is clicked\n    this.pendingFilters = undefined;\n    this.chips = [];\n    this.filterApplied = false;\n    this.filteredRows = [...this.data];\n    this.pageIndex = 0;\n    this.applyPagination();\n    this.onResetFilterClick.emit();\n  }\n\n  handleRefreshClick(): void {\n    this.onAutoRefreshClick.emit();\n    this.triggerReload();\n  }\n\n  private triggerReload(): void {\n    const effective = this.appliedFilters ?? {};\n    this.filteredRows = this.data.filter(r => this.passFilters(effective, r));\n    this.pageIndex = 0;\n    this.applyPagination();\n    this.onReload.emit();\n  }\n\n  private setupAutoRefresh(intervalMs: number): void {\n    this.clearAutoRefresh();\n    if (intervalMs && intervalMs > 0) {\n      this.autoRefreshTimer = setInterval(() => {\n        this.triggerReload();\n      }, intervalMs);\n    }\n  }\n\n  private clearAutoRefresh(): void {\n    if (this.autoRefreshTimer) {\n      clearInterval(this.autoRefreshTimer);\n      this.autoRefreshTimer = undefined;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearAutoRefresh();\n  }\n\n  onPaginate(e: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = e.pageIndex;\n    this.pageSize = e.pageSize;\n    if (this.serverSidePagination) {\n      this.pageChange.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n      return;\n    }\n    this.applyPagination();\n  }\n\n  onPageSizeChange(size: number): void {\n    this.pageSize = size;\n    this.pageIndex = 0;\n    if (this.serverSidePagination) {\n      this.pageChange.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n      return;\n    }\n    this.applyPagination();\n  }\n\n  onRemoveChip(chip: any): void {\n    this.chips = this.chips.filter(c => c !== chip);\n    this.filterApplied = this.chips.length > 0;\n    // Emit event to parent component (same pattern as execution tab)\n    this.removeChip.emit(chip);\n  }\n\n  onClearAllChips(): void {\n    this.chips = [];\n    this.filterApplied = false;\n    // Reset the dynamic-filter component form when clearing all chips\n    if (this.dynamicFilterComponent) {\n      this.dynamicFilterComponent.reset();\n    }\n  }\n\n  private applyPagination(): void {\n    if (this.serverSidePagination) {\n      // Server mode: parent supplies already-paginated data\n      this.pagedRows = [...this.filteredRows];\n      return;\n    }\n    const start = this.pageIndex * this.pageSize;\n    const end = start + this.pageSize;\n    this.pagedRows = this.filteredRows.slice(start, end);\n  }\n\n  private mapVisibilityColumns(): Array<{ id: string; label: string }> {\n    return (this.columns || [])\n      .filter(c => c.isDefault === false)\n      .map(c => ({ id: c.fieldId, label: c.fieldName || c.fieldId }));\n  }\n\n  private normalizeDate(d: any): number | null {\n    if (!d) return null;\n    const ts = Date.parse(d);\n    return isNaN(ts) ? null : ts;\n  }\n\n  private passFilters(filters: any, row: any): boolean {\n    if (!filters) return true;\n    if (filters.status && Array.isArray(filters.status) && filters.status.length) {\n      if (!filters.status.includes(row.status)) return false;\n    }\n    if (filters.priority && Array.isArray(filters.priority) && filters.priority.length) {\n      if (!filters.priority.includes(row.priorityName)) return false;\n    }\n    if (filters.testType && Array.isArray(filters.testType) && filters.testType.length) {\n      if (!filters.testType.includes(row.testType)) return false;\n    }\n    if (filters.created_date && (filters.created_date.start || filters.created_date.end)) {\n      const startTs = this.normalizeDate(filters.created_date.start);\n      const endTs = this.normalizeDate(filters.created_date.end);\n      const rowTs = this.normalizeDate(row.createdAt);\n      if (rowTs != null) {\n        if (startTs != null && rowTs < startTs) return false;\n        if (endTs != null && rowTs > endTs) return false;\n      }\n    }\n    return true;\n  }\n\n  trackByTemplateRef(index: number): number {\n    return index;\n  }\n\n  trackByDropdownTemplateRef(index: number): number {\n    return index;\n  }\n\n  trackBySelectDropdownTemplateRef(index: number): number {\n    return index;\n  }\n\n  // Export modal state\n  isExportModalOpen: boolean = false;\n\n  exportCodeClick(): void {\n    // Get selected items\n    const selectedItems = this.currentSelectedItems;\n    if (selectedItems.length === 0) {\n      // Emit event to parent to handle the case when no items are selected\n      this.onExportClick.emit();\n      return;\n    }\n    this.isExportModalOpen = true;\n  }\n\n  closeExportModal(): void {\n    this.isExportModalOpen = false;\n  }\n\n  onExportModalExport(result: { type: 'local' | 'email'; emails?: string[]; framework: 'WEBDRIVER_IO' | 'SELENIUM_JAVA' }): void {\n    this.isExportModalOpen = false;\n    // Emit event to parent with export result\n    this.onExportClick.emit({\n      type: result.type,\n      emails: result.emails,\n      framework: result.framework,\n      selectedItems: this.currentSelectedItems\n    });\n  }\n\n  get selectedCasesForExport(): Array<{ id?: number; name?: string }> {\n    return this.currentSelectedItems.map(item => ({\n      id: item.id,\n      name: item.name || item.title || 'Unnamed'\n    }));\n  }\n  get arrowClasses(): string {\n    const baseClasses = [\n      'cqa-w-4',\n      'cqa-h-4',\n      'cqa-relative',\n      'cqa-transition-transform'\n    ];\n\n    if (this.showFilterPanel) {\n      baseClasses.push('cqa-rotate-180');\n    }\n\n    return baseClasses.join(' ');\n  }\n}\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-w-full cqa-flex cqa-flex-col cqa-relative\">\n    <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n      <cqa-search-bar\n        *ngIf=\"showSearchBar\"\n        [placeholder]=\"searchPlaceholder\"\n        [value]=\"searchValue\"\n        [showClear]=\"showClear\"\n        (valueChange)=\"valueChange($event)\"\n        (search)=\"search($event)\"\n        (cleared)=\"cleared()\"\n      ></cqa-search-bar>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n        <cqa-button\n        *ngIf=\"showExportButton\"\n        variant=\"grey-solid\"\n        icon=\"open_in_new\"\n        [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n        [disabled]=\"isExporting\"\n        (clicked)=\"exportCodeClick()\"\n      >\n        <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n      </cqa-button>\n      \n      <!-- Export Code Modal -->\n      <cqa-export-code-modal\n        *ngIf=\"showExportButton\"\n        [isOpen]=\"isExportModalOpen\"\n        [cases]=\"selectedCasesForExport\"\n        [disabled]=\"false\"\n        (closeModal)=\"closeExportModal()\"\n        (export)=\"onExportModalExport($event)\">\n      </cqa-export-code-modal>\n         <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n        </ng-container>\n\n        <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n        </ng-container>\n        \n        <cqa-button\n          *ngIf=\"showFilterButton\"\n          variant=\"grey-solid\"\n          icon=\"add\"\n          (clicked)=\"toggleFilter()\"\n        >\n        <span class=\"cqa-flex cqa-items-center cqa-gap-1\">\n          Filter          \n           <div [class]=\"arrowClasses\">\n            <svg\n              class=\"cqa-w-2 cqa-h-1 cqa-absolute cqa-left-[4px] cqa-top-[6px]\"\n              viewBox=\"0 0 8 4\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M0 0L4 4L8 0\"\n                stroke=\"#0B0B0C\"\n                stroke-width=\"1.33\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </div>\n        </span>\n        </cqa-button>\n        <cqa-column-visibility\n          *ngIf=\"showSettingsButton\"\n          [columns]=\"visibilityColumns\"\n          [columnVisibility]=\"columnVisibility\"\n          [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n          (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n          (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n        ></cqa-column-visibility>\n        <cqa-button\n          *ngIf=\"showAutoRefreshButton\"\n          variant=\"grey-solid\"\n          icon=\"refresh\"\n          (clicked)=\"handleRefreshClick()\"\n          [tooltip]=\"'Refresh'\"\n          tooltipPosition=\"below\"\n        ></cqa-button>\n        <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n        </ng-container>\n        <cqa-segment-control\n          *ngIf=\"showViewModeToggle\"\n          size=\"lg\"\n          [segments]=\"viewModeSegments\"\n          [value]=\"viewMode\"\n          (valueChange)=\"onViewModeChange($event)\"\n        ></cqa-segment-control>\n      </div>\n    </div>\n\n    <cqa-selected-filters \n      [filterApplied]=\"filterApplied\"\n      [chips]=\"chips\"\n      (removeChip)=\"onRemoveChip($event)\"\n      (clearAll)=\"onClearAllChips()\"\n      (onClearAll)=\"onClearAll.emit()\"\n    >\n    </cqa-selected-filters>\n\n    <cqa-dynamic-filter\n      *ngIf=\"showFilterPanel\"\n      [config]=\"filterConfig\"\n      [model]=\"filterModel\"\n      [showFilterPanel]=\"showFilterPanel\"\n      (filtersChanged)=\"onFiltersChanged($event)\"\n      (filtersApplied)=\"onFiltersApplied($event)\"\n      (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n      (onResetFilterClick)=\"handleResetFilterClick()\"\n    >\n    </cqa-dynamic-filter>\n\n    <div class=\"cqa-rounded-[7px] cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\">\n      <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!isEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n        <app-dynamic-table\n          [columns]=\"computedColumns\"\n          [data]=\"pagedRows\"\n          [rowSelectable]=\"rowSelectable\"\n          [enableLocalSort]=\"enableLocalSort\"\n          [isTableLoading]=\"isTableLoading\"\n          [isTableDataLoading]=\"isTableDataLoading\"\n          [cellJsonPathGetter]=\"cellJsonPathGetter\"\n          [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n          (sortChange)=\"sortChange.emit($event)\">\n          <ng-template #emptyTableTpl>\n            <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n              <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n              <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n              <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n              <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n            </div>\n          </ng-template>\n        </app-dynamic-table>\n      </ng-container>\n\n      <ng-template #storyEmptyTpl>\n        <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n          <cqa-empty-state\n            *ngIf=\"isEmptyState\"\n            [title]=\"emptyStateConfig.title\"\n            [description]=\"emptyStateConfig.description\"\n            [imageUrl]=\"emptyStateConfig.imageUrl\"\n            [actions]=\"emptyStateConfig.actions\"\n            (actionClick)=\"onEmptyAction($event)\"\n          >\n          </cqa-empty-state>\n        </div>\n      </ng-template>\n\n    </div>\n\n    <cqa-pagination\n      [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n      [pageIndex]=\"pageIndex\"\n      [pageSize]=\"pageSize\"\n      [pageSizeOptions]=\"pageSizeOptions\"\n      [pageSizeMenuDirection]=\"pageSizeMenuDirection\"\n      [pageItemCount]=\"pagedRows.length\"\n      (paginate)=\"onPaginate($event)\"\n      (pageSizeChange)=\"onPageSizeChange($event)\"\n    >\n    </cqa-pagination>\n\n    <div *ngIf=\"anyRowSelected\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\" >\n      <cqa-table-action-toolbar\n        [selectedItems]=\"selectedItems && selectedItems.length > 0 ? selectedItems : currentSelectedItems\"\n        [actions]=\"actions\"\n        [showSelectAll]=\"showSelectAllInToolbar\"\n        [allSelected]=\"allSelectedInToolbar\"\n        [showDismiss]=\"showDismissInToolbar\"\n        (actionClick)=\"actionClick($event)\"\n        (selectAllChange)=\"onToolbarSelectAll($event)\"\n        (dismiss)=\"onToolbarDismiss()\"\n      ></cqa-table-action-toolbar>\n    </div>\n    \n  </div>\n</div>\n\n","export interface FolderNode {\n  id: number;\n  name: string;\n  /** Direct test-case count — cases with `folderId === this.id`. Rendered as the row badge. */\n  count?: number;\n  /** Total test-case count including all descendants. Rendered as a tooltip on the folder row. */\n  totalCount?: number;\n  color?: string;\n  children?: FolderNode[];\n  /** Backend hint: true when this node has at least one direct child. Drives\n   *  the sidebar chevron under lazy loading, so the affordance shows even\n   *  before `children` has been fetched. */\n  hasChildren?: boolean;\n  /** Backend-reported total number of direct children. The sidebar shows a\n   *  \"Load more\" row when `(children?.length ?? 0) < totalChildren`. */\n  totalChildren?: number;\n  /** Last 0-based page already fetched into `children`. `undefined` means the\n   *  subtree has not been loaded yet — the host should fetch on first expand. */\n  loadedPages?: number;\n  /** True while a children-page fetch is in flight, so the sidebar can render\n   *  a spinner row and the host can suppress duplicate requests. */\n  childrenLoading?: boolean;\n}\n\nexport type FolderIdAccessor = (row: any) => number | null | undefined;\n\nexport interface ModularConfig {\n  showSidebar: boolean;\n  showBreadcrumb: boolean;\n  showFolderGrid: boolean;\n  showUnorganizedSection: boolean;\n  showSubfolderSection: boolean;\n  showCounts: boolean;\n  allowCreateFolder: boolean;\n  allowRenameFolder: boolean;\n  allowDeleteFolder: boolean;\n  allowDuplicateFolder: boolean;\n  allowNestedFolders: boolean;\n  allowTestDragDrop: boolean;\n  allowBulkSelection: boolean;\n  /**\n   * When true, the table renders a folder column (icon + folder name) and lists it in the\n   * settings dropdown. Default visibility on first init follows `viewMode`: shown in list,\n   * hidden in modular. Once the user toggles it the choice persists.\n   */\n  showFolderColumn: boolean;\n}\n\nexport const DEFAULT_MODULAR_CONFIG: ModularConfig = {\n  showSidebar: true,\n  showBreadcrumb: true,\n  showFolderGrid: true,\n  showUnorganizedSection: true,\n  showSubfolderSection: true,\n  showCounts: true,\n  allowCreateFolder: true,\n  allowRenameFolder: true,\n  allowDeleteFolder: true,\n  allowDuplicateFolder: false,\n  allowNestedFolders: true,\n  allowTestDragDrop: true,\n  allowBulkSelection: true,\n  showFolderColumn: true,\n};\n\n/**\n * Reserved fieldId for the auto-injected folder column. Hosts should avoid\n * defining a column with this id of their own.\n */\nexport const FOLDER_COLUMN_FIELD_ID = 'folder';\n\nexport interface ModularLabels {\n  folders: string;\n  organized: string;\n  unorganized: string;\n  newFolder: string;\n  searchFoldersPlaceholder: string;\n  allFolders: string;\n  subfoldersIn: string;\n  moveToFolder: string;\n  addTag: string;\n  delete: string;\n  selectAll: string;\n  testsCountSingular: string;\n  testsCountPlural: string;\n  foldersCountSingular: string;\n  foldersCountPlural: string;\n  subfolderCountSingular: string;\n  subfolderCountPlural: string;\n  oneSubfolder: string;\n  subfoldersCount: string;\n  clearFilter: string;\n  moveDialogTitle: string;\n  moveDialogCancel: string;\n  moveDialogConfirm: string;\n  moveDialogRoot: string;\n  moveDialogDescriptionSingular: string;\n  moveDialogDescriptionPlural: string;\n\n  // New Folder dialog\n  newFolderDialogTitle: string;\n  newFolderDialogDescription: string;\n  newFolderDialogNameLabel: string;\n  newFolderDialogNamePlaceholder: string;\n  newFolderDialogParentLabel: string;\n  newFolderDialogParentNone: string;\n  newFolderDialogColorLabel: string;\n  newFolderDialogCancel: string;\n  newFolderDialogConfirm: string;\n  newFolderDialogNameRequiredError: string;\n  newFolderDialogNameMaxLengthError: string;\n\n  // Folder row context menu (right-click / ellipsis)\n  folderMenuCreateSubfolder: string;\n  folderMenuRename: string;\n  folderMenuMove: string;\n  folderMenuDuplicate: string;\n  folderMenuDelete: string;\n\n  // Delete Folder dialog\n  deleteFolderDialogTitle: string;\n  deleteFolderDialogBodyTemplate: string;\n  deleteFolderDialogBodyTestCaseSingular: string;\n  deleteFolderDialogBodyTestCasePlural: string;\n  deleteFolderDialogBodyStepGroupSingular: string;\n  deleteFolderDialogBodyStepGroupPlural: string;\n  deleteFolderDialogBodyJoin: string;\n  deleteFolderDialogMoveToParentTitle: string;\n  deleteFolderDialogMoveToParentDescription: string;\n  deleteFolderDialogMoveToUnorganizedTitle: string;\n  deleteFolderDialogMoveToUnorganizedDescription: string;\n  deleteFolderDialogCancel: string;\n  deleteFolderDialogConfirm: string;\n\n  // Auto-derived empty states (shown when pagedRows is empty and host did not set isEmptyState)\n  emptyNoTestsInFolderTitle: string;\n  emptyNoTestsInFolderDescription: string;\n\n  /** Header label for the auto-injected folder column. */\n  folderColumnLabel: string;\n  /** Cell label for rows with no folderId (i.e. the \"Unorganized\" bucket). */\n  unorganizedRowLabel: string;\n  /** Shown in the folder sidebar when the search input filters out every folder. */\n  noFoldersFound: string;\n  /** Helper line shown under the empty-folder-list state, hinting at the create action. */\n  noFoldersEmptyDescription: string;\n  /** Sidebar folder-row hover tooltip count line. `{n}` is the descendant total\n   *  (FolderNode.totalCount). The host swaps the noun for \"step group\" when in\n   *  step-group mode by overriding these two keys. The full tooltip is composed\n   *  as `${node.name}\\n${tpl.replace('{n}', total)}`. */\n  folderTooltipTotalSingular: string;\n  folderTooltipTotalPlural: string;\n}\n\nexport const DEFAULT_MODULAR_LABELS: ModularLabels = {\n  folders: 'Folders',\n  organized: 'Organized',\n  unorganized: 'Unorganized',\n  newFolder: 'New folder',\n  searchFoldersPlaceholder: 'Search folders...',\n  allFolders: 'All folders',\n  subfoldersIn: 'Subfolders in',\n  moveToFolder: 'Move to folder',\n  addTag: 'Add Tag',\n  delete: 'Delete',\n  selectAll: 'Select all',\n  testsCountSingular: '1 test',\n  testsCountPlural: '{n} tests',\n  foldersCountSingular: '1 folder',\n  foldersCountPlural: '{n} folders',\n  subfolderCountSingular: '1 subfolder',\n  subfolderCountPlural: '{n} subfolders',\n  oneSubfolder: '1 subfolder',\n  subfoldersCount: '{n} subfolders',\n  clearFilter: 'Clear filter',\n  moveDialogTitle: 'Move to Folder',\n  moveDialogCancel: 'Cancel',\n  moveDialogConfirm: 'Move here',\n  moveDialogRoot: 'Unorganized',\n  moveDialogDescriptionSingular: 'Moving 1 test case — select destination',\n  moveDialogDescriptionPlural: 'Moving {n} test cases — select destination',\n\n  newFolderDialogTitle: 'New Folder',\n  newFolderDialogDescription: 'Rename any time by double-clicking in the tree',\n  newFolderDialogNameLabel: 'Folder name',\n  newFolderDialogNamePlaceholder: 'e.g. Checkout Flow, User Auth, Payment Tests',\n  newFolderDialogParentLabel: 'Parent folder (optional)',\n  newFolderDialogParentNone: 'None',\n  newFolderDialogColorLabel: 'Folder color (optional)',\n  newFolderDialogCancel: 'Cancel',\n  newFolderDialogConfirm: 'Create folder',\n  newFolderDialogNameRequiredError: 'Folder name is required',\n  newFolderDialogNameMaxLengthError: 'Folder name cannot exceed 20 characters',\n\n  folderMenuCreateSubfolder: 'Create subfolder',\n  folderMenuRename: 'Rename',\n  folderMenuMove: 'Move folder',\n  folderMenuDuplicate: 'Duplicate folder',\n  folderMenuDelete: 'Delete folder',\n\n  deleteFolderDialogTitle: 'Delete folder',\n  deleteFolderDialogBodyTemplate: 'This folder contains {items}. What should happen to them?',\n  deleteFolderDialogBodyTestCaseSingular: '1 test case',\n  deleteFolderDialogBodyTestCasePlural: '{n} test cases',\n  deleteFolderDialogBodyStepGroupSingular: '1 step group',\n  deleteFolderDialogBodyStepGroupPlural: '{n} step groups',\n  deleteFolderDialogBodyJoin: 'and',\n  deleteFolderDialogMoveToParentTitle: 'Move to parent folder',\n  deleteFolderDialogMoveToParentDescription: 'Move them one level up — nothing is lost',\n  deleteFolderDialogMoveToUnorganizedTitle: 'Move to Unorganized',\n  deleteFolderDialogMoveToUnorganizedDescription: 'Move them to the Unorganized section',\n  deleteFolderDialogCancel: 'Cancel',\n  deleteFolderDialogConfirm: 'Delete folder',\n\n  emptyNoTestsInFolderTitle: 'No Test Case Found',\n  emptyNoTestsInFolderDescription: 'This folder does not contain any test cases yet.',\n\n  folderColumnLabel: 'Folder',\n  unorganizedRowLabel: 'Unorganized',\n  noFoldersFound: 'No Folders Found',\n  noFoldersEmptyDescription: 'Click the + icon above to create your first folder.',\n  folderTooltipTotalSingular: '1 total test case including subfolders',\n  folderTooltipTotalPlural: '{n} total test cases including subfolders',\n};\n\n/**\n * Emitted after a successful inline folder rename. Carries the full renamed node\n * (with the new name already applied) plus its parent id, so hosts can issue\n * a complete update request (e.g. `PUT /test_case_folders/{id}`) without a\n * secondary lookup against their cached tree.\n */\nexport interface FolderRenamedPayload {\n  folder: FolderNode;\n  parentId: number | null;\n  /** Previous name, useful for undo messages / audit logs. */\n  previousName: string;\n}\n\nexport interface FolderCreatedPayload {\n  parentId: number | null;\n  name: string;\n  color?: string;\n}\n\n/**\n * Delete strategies match the backend `strategy` query param values on\n * `DELETE /test_case_folders/{id}?strategy=…`. Only the two move strategies\n * are covered by the library's internal dialog; `DELETE_IF_EMPTY` is the\n * host's responsibility (precheck `count === 0 && totalCount === 0`).\n */\nexport type FolderDeleteStrategy = 'MOVE_TO_PARENT' | 'MOVE_TO_UNORGANISED';\n\nexport interface FolderDeleteRequestedPayload {\n  id: number;\n  name: string;\n  testCount: number;\n  hasParent: boolean;\n}\n\nexport interface FolderMoveRequestedPayload {\n  id: number;\n  name: string;\n  hasParent: boolean;\n}\n\nexport interface FolderMovedPayload {\n  id: number;\n  newParentId: number | null;\n}\n\nexport interface FolderDuplicateRequestedPayload {\n  id: number;\n  name: string;\n}\n\nexport interface FolderDeletedPayload {\n  id: number;\n  strategy?: FolderDeleteStrategy;\n}\n\nexport interface TestsMovedPayload {\n  testIds: Array<string | number>;\n  targetFolderId: number | null;\n}\n\nexport interface BulkActionInvokedPayload {\n  id: string;\n  selected: any[];\n}\n\nexport interface ReorderLabels {\n  reorderButton: string;\n  cancelButton: string;\n  doneButton: string;\n  savingButton: string;\n  bannerTitle: string;\n  bannerDescription: string;\n}\n\nexport const DEFAULT_REORDER_LABELS: ReorderLabels = {\n  reorderButton: 'Reorder',\n  cancelButton: 'Cancel',\n  doneButton: 'Done',\n  savingButton: 'Saving...',\n  bannerTitle: 'Reorder mode',\n  bannerDescription: 'Drag rows using the handle to rearrange.',\n};\n\nexport interface ReorderSavePayload {\n  orderedItems: any[];\n}\n\nexport const ROW_DRAG_MIME = 'application/x-cqa-test-ids';\n\n/** Custom MIME for folder-row drags in the sidebar. Payload is a JSON-stringified folder id. */\nexport const FOLDER_DRAG_MIME = 'application/x-cqa-folder-id';\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { DEFAULT_MODULAR_LABELS, FolderNode, ModularLabels } from '../modular-table-template.models';\n\ninterface FlatFolderRow {\n  id: number | null;\n  name: string;\n  depth: number;\n  disabled: boolean;\n  hasChildren: boolean;\n  expanded: boolean;\n}\n\n/**\n * Folder-picker body used inside the Move-to-Folder dialog.\n *\n * This component is designed to be usable two ways:\n *\n *  1. **From inside the library** via `DialogService.open({ content: { type: 'component', component: MoveToFolderDialogComponent, inputs: {...} } })`.\n *     The outer `cqa-dialog` provides the title, description, Cancel and \"Move here\"\n *     buttons; the Move button reads `pickedFolderId` via `dialogRef.getComponentInstance()`.\n *\n *  2. **From the host/UI layer directly** once API ownership moves up. The host\n *     renders `<cqa-move-to-folder-dialog>` inside its own modal shell and\n *     listens to `(folderPicked)` (fires on every pick) to drive its own \"Move here\"\n *     button. All visual state lives on `pickedFolderId` so hosts can also two-way\n *     bind if they prefer.\n */\n@Component({\n  selector: 'cqa-move-to-folder-dialog',\n  template: `\n    <!-- Reusable outlined folder icon. Stroke uses currentColor so the row's text color drives the icon. -->\n    <ng-template #folderIconTpl>\n      <svg width=\"17\" height=\"15\" viewBox=\"0 0 17 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" class=\"cqa-flex-shrink-0\">\n        <path d=\"M15.6375 12.6377C15.6375 13.0355 15.4794 13.4171 15.1981 13.6984C14.9168 13.9797 14.5353 14.1377 14.1375 14.1377H2.13745C1.73963 14.1377 1.3581 13.9797 1.07679 13.6984C0.795486 13.4171 0.637451 13.0355 0.637451 12.6377V2.1377C0.637451 1.73987 0.795486 1.35834 1.07679 1.07704C1.3581 0.795731 1.73963 0.637695 2.13745 0.637695H5.88745L7.38745 2.8877H14.1375C14.5353 2.8877 14.9168 3.04573 15.1981 3.32704C15.4794 3.60834 15.6375 3.98987 15.6375 4.3877V12.6377Z\" stroke=\"currentColor\" stroke-width=\"1.275\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </ng-template>\n\n    <!-- Reusable outlined archive/inbox icon for the \"Unorganized\" entry. -->\n    <ng-template #unorganizedIconTpl>\n      <svg width=\"17\" height=\"15\" viewBox=\"0 0 17 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" class=\"cqa-flex-shrink-0\">\n        <path d=\"M14.6875 5.5V12.5C14.6875 13.3 14.0375 14 13.1875 14H3.8125C2.9625 14 2.3125 13.3 2.3125 12.5V5.5M14.6875 5.5L12.7875 1.7C12.5375 1.2 12.0875 1 11.5875 1H5.4125C4.9125 1 4.4625 1.2 4.2125 1.7L2.3125 5.5M14.6875 5.5H2.3125M6.1875 8.5H10.8125\" stroke=\"currentColor\" stroke-width=\"1.275\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </ng-template>\n\n    <div class=\"cqa-flex cqa-flex-col cqa-border-solid cqa-border cqa-border-[#E2E2E3] cqa-rounded-[10px] cqa-py-2 cqa-w-full cqa-overflow-y-auto cqa-bg-white cqa-scrollbar-thin\" [style.height]=\"pickerHeight\">\n      <!-- Unorganized (root / no folder) -->\n      <div\n        role=\"button\"\n        tabindex=\"0\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-transition-colors cqa-text-sm\"\n        [ngClass]=\"isPicked(null) ? 'cqa-bg-indigo-50 cqa-text-indigo-700' : 'cqa-text-neutral-800 hover:cqa-bg-neutral-50'\"\n        [class.cqa-opacity-40]=\"isUnorganizedDisabled\"\n        [class.cqa-cursor-not-allowed]=\"isUnorganizedDisabled\"\n        [attr.aria-disabled]=\"isUnorganizedDisabled || null\"\n        (click)=\"!isUnorganizedDisabled && pick(null)\"\n        (keydown.enter)=\"!isUnorganizedDisabled && pick(null)\"\n        (keydown.space)=\"$event.preventDefault(); !isUnorganizedDisabled && pick(null)\"\n      >\n        <!-- chevron-slot placeholder so all rows line up -->\n        <span class=\"cqa-inline-block cqa-w-5 cqa-h-5 cqa-flex-shrink-0\"></span>\n        <ng-container *ngTemplateOutlet=\"unorganizedIconTpl\"></ng-container>\n        <span>{{ labels.moveDialogRoot }}</span>\n      </div>\n\n      <!-- Folder rows (flattened, depth-indented, collapsible) -->\n      <div\n        *ngFor=\"let row of flatRows; trackBy: trackById\"\n        role=\"button\"\n        tabindex=\"0\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-py-2 cqa-pr-4 cqa-cursor-pointer cqa-transition-colors cqa-text-sm\"\n        [ngClass]=\"isPicked(row.id) ? 'cqa-bg-indigo-50 cqa-text-indigo-700' : 'cqa-text-neutral-800 hover:cqa-bg-neutral-50'\"\n        [class.cqa-opacity-40]=\"row.disabled\"\n        [class.cqa-cursor-not-allowed]=\"row.disabled\"\n        [style.paddingLeft.px]=\"16 + row.depth * 24\"\n        (click)=\"!row.disabled && pick(row.id)\"\n        (keydown.enter)=\"!row.disabled && pick(row.id)\"\n        (keydown.space)=\"!row.disabled && $event.preventDefault(); !row.disabled && pick(row.id)\"\n      >\n        <!-- Chevron toggle for expandable folders (placeholder otherwise so alignment stays) -->\n        <button\n          *ngIf=\"row.hasChildren; else chevronPlaceholder\"\n          type=\"button\"\n          class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5 cqa-flex-shrink-0 cqa-rounded cqa-text-neutral-600 hover:cqa-bg-neutral-100 hover:cqa-text-neutral-900\"\n          [attr.aria-label]=\"row.expanded ? 'Collapse ' + row.name : 'Expand ' + row.name\"\n          (click)=\"toggleExpanded(row.id!, $event)\"\n        >\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"\n               [class.cqa-rotate-90]=\"row.expanded\" style=\"transition: transform 120ms ease;\">\n            <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </button>\n        <ng-template #chevronPlaceholder>\n          <span class=\"cqa-inline-block cqa-w-5 cqa-h-5 cqa-flex-shrink-0\"></span>\n        </ng-template>\n\n        <ng-container *ngTemplateOutlet=\"folderIconTpl\"></ng-container>\n        <span class=\"cqa-truncate\">{{ row.name }}</span>\n      </div>\n    </div>\n  `,\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MoveToFolderDialogComponent implements OnInit, OnChanges {\n  /** Folder tree to pick from. */\n  @Input() folders: FolderNode[] = [];\n  /** Label overrides. */\n  @Input() labels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  /** The folder the tests currently live in — rendered as disabled (can't move into itself). */\n  @Input() currentFolderId: number | null = null;\n  /** Controls which folder is visually selected. Two-way-bind friendly via `pickedFolderIdChange`. */\n  @Input() pickedFolderId: number | null = null;\n  /** Folder ids to expand by default. If not provided, ancestors of `currentFolderId` (or\n   *  `pickedFolderId`, when no current context exists) are expanded. */\n  @Input() initialExpandedIds?: number[];\n\n  /** Disables the top-level \"Unorganized / no folder\" row. Decoupled from `currentFolderId`\n   *  so consumers that reuse this picker for non-move flows (e.g. parent-folder selection\n   *  inside the New Folder dialog) can keep the root option clickable. The move flows wire\n   *  this to `currentFolderId == null`. */\n  @Input() rootDisabled: boolean = false;\n\n  /** CSS height for the scrollable picker container. Lets embedders shrink the picker when\n   *  it shares space with other fields (e.g. inside the New Folder dialog). */\n  @Input() pickerHeight: string = '360px';\n\n  /** Fires whenever the user picks a destination. */\n  @Output() folderPicked = new EventEmitter<number | null>();\n  /** Companion output for banana-in-the-box `[(pickedFolderId)]` binding. */\n  @Output() pickedFolderIdChange = new EventEmitter<number | null>();\n\n  private expandedIds = new Set<number>();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.seedExpandedIds();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['initialExpandedIds'] || changes['currentFolderId'] || changes['pickedFolderId'] || changes['folders']) {\n      this.seedExpandedIds();\n    }\n  }\n\n  private seedExpandedIds(): void {\n    if (this.initialExpandedIds?.length) {\n      this.expandedIds = new Set(this.initialExpandedIds);\n      return;\n    }\n    this.expandedIds = new Set();\n    // Prefer currentFolderId (the disabled \"self\" row) so the user lands on it; fall back\n    // to pickedFolderId so non-move flows (e.g. parent picker) still open with the\n    // pre-selected node visible.\n    const seed = this.currentFolderId != null ? this.currentFolderId : this.pickedFolderId;\n    if (seed != null) {\n      const trail: number[] = [];\n      this.collectAncestors(this.folders, seed, trail);\n      trail.forEach(id => this.expandedIds.add(id));\n    }\n  }\n\n  private collectAncestors(nodes: FolderNode[], targetId: number, acc: number[]): boolean {\n    for (const n of nodes || []) {\n      acc.push(n.id);\n      if (n.id === targetId) return true;\n      if (n.children && this.collectAncestors(n.children, targetId, acc)) return true;\n      acc.pop();\n    }\n    return false;\n  }\n\n  get flatRows(): FlatFolderRow[] {\n    const out: FlatFolderRow[] = [];\n    const walk = (nodes: FolderNode[], depth: number) => {\n      for (const n of nodes || []) {\n        const hasChildren = !!(n.children && n.children.length);\n        const expanded = this.expandedIds.has(n.id);\n        out.push({\n          id: n.id,\n          name: n.name,\n          depth,\n          disabled: n.id === this.currentFolderId,\n          hasChildren,\n          expanded,\n        });\n        if (hasChildren && expanded) walk(n.children!, depth + 1);\n      }\n    };\n    walk(this.folders, 0);\n    return out;\n  }\n\n  isPicked(id: number | null): boolean {\n    return this.pickedFolderId === id;\n  }\n\n  get isUnorganizedDisabled(): boolean {\n    return this.rootDisabled;\n  }\n\n  pick(id: number | null): void {\n    this.pickedFolderId = id;\n    this.folderPicked.emit(id);\n    this.pickedFolderIdChange.emit(id);\n    this.cdr.markForCheck();\n  }\n\n  toggleExpanded(id: number, event: Event): void {\n    event.stopPropagation();\n    if (this.expandedIds.has(id)) {\n      this.expandedIds.delete(id);\n    } else {\n      this.expandedIds.add(id);\n    }\n    this.cdr.markForCheck();\n  }\n\n  trackById = (_: number, row: FlatFolderRow) => row.id ?? -1;\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n} from '@angular/core';\nimport { DEFAULT_MODULAR_LABELS, FolderNode, ModularLabels } from '../modular-table-template.models';\n\nexport const DEFAULT_FOLDER_COLOR = '#99999E';\n\nexport const FOLDER_NAME_MAX_LENGTH = 20;\n\nconst PRESET_FOLDER_COLORS: string[] = [\n  DEFAULT_FOLDER_COLOR,\n  '#4F46E5',\n  '#06B6D4',\n  '#10B981',\n  '#F59E0B',\n  '#EF4444',\n  '#EC4899',\n  '#8B5CF6',\n];\n\n/**\n * Body of the \"New Folder\" dialog.\n *\n * Uses reusable library components (`cqa-custom-input` for the name field,\n * `cqa-move-to-folder-dialog` as an embedded tree picker for the parent folder)\n * so hosts can drop this dialog into their own modal shell without worrying\n * about styling drift. The tree picker handles arbitrarily deep nesting via\n * expand/collapse rather than a flat dropdown of \"A › B › C ›…\" paths.\n *\n * Two integration paths:\n *\n *  1. **From within this library** via `DialogService.open(...)`. The outer\n *     `cqa-dialog` supplies title/description/Cancel/Create-folder buttons; the\n *     Create button reads `name` + `parentId` via `getComponentInstance()`.\n *\n *  2. **Host-driven** — host renders `<cqa-new-folder-dialog>` inside its own\n *     modal and listens to `(submitted)` / `(cancelled)` / `(nameChange)` /\n *     `(parentIdChange)`.\n */\n@Component({\n  selector: 'cqa-new-folder-dialog',\n  template: `\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-5 cqa-w-full\">\n      <!-- Folder name -->\n      <cqa-custom-input\n        [label]=\"labels.newFolderDialogNameLabel\"\n        [required]=\"true\"\n        [placeholder]=\"labels.newFolderDialogNamePlaceholder\"\n        [value]=\"name\"\n        [errors]=\"nameErrors\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"onNameChange($event)\"\n        (enterPressed)=\"submit()\"\n      ></cqa-custom-input>\n\n      <!-- Parent folder — tree picker (handles arbitrarily deep nesting via expand/collapse) -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-neutral-700\">\n          {{ labels.newFolderDialogParentLabel }}\n        </label>\n        <cqa-move-to-folder-dialog\n          [folders]=\"folders\"\n          [labels]=\"parentPickerLabels\"\n          [pickedFolderId]=\"parentId\"\n          [pickerHeight]=\"'240px'\"\n          (pickedFolderIdChange)=\"onParentPicked($event)\"\n        ></cqa-move-to-folder-dialog>\n      </div>\n\n      <!-- Folder color picker temporarily disabled — submitted folders fall\n           back to DEFAULT_FOLDER_COLOR. Re-enable by uncommenting the block\n           below; all inputs/outputs are still wired. -->\n      <!--\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-neutral-700\">\n          {{ labels.newFolderDialogColorLabel }}\n        </label>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-flex-wrap\">\n          <button\n            *ngFor=\"let c of presetColors\"\n            type=\"button\"\n            class=\"cqa-relative cqa-w-7 cqa-h-7 cqa-rounded-full cqa-cursor-pointer cqa-border-0 cqa-p-0 cqa-transition-transform\"\n            [style.backgroundColor]=\"c\"\n            [style.boxShadow]=\"isColor(c) ? ('0 0 0 2px #ffffff, 0 0 0 4px ' + c) : '0 0 0 1px rgba(15, 23, 42, 0.08)'\"\n            (click)=\"onColorChange(c)\"\n            [attr.aria-label]=\"'Set folder color ' + c\"\n            [attr.aria-pressed]=\"isColor(c)\"\n            [title]=\"c\"\n          >\n            <svg\n              *ngIf=\"isColor(c)\"\n              class=\"cqa-absolute cqa-inset-0 cqa-m-auto\"\n              width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\"\n            >\n              <path d=\"M5 12l4.5 4.5L19 7\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </button>\n\n          <label\n            class=\"cqa-relative cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-cursor-pointer cqa-transition-transform\"\n            [style.background]=\"rainbowBorder\"\n            [title]=\"isCustomColor ? ('Custom color (' + color + ')') : 'Pick a custom color'\"\n          >\n            <span\n              class=\"cqa-absolute cqa-flex cqa-items-center cqa-justify-center cqa-rounded-full\"\n              [style.top.px]=\"2\"\n              [style.right.px]=\"2\"\n              [style.bottom.px]=\"2\"\n              [style.left.px]=\"2\"\n              [style.backgroundColor]=\"isCustomColor ? color : '#ffffff'\"\n            >\n              <svg *ngIf=\"!isCustomColor\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M12 5v14M5 12h14\" stroke=\"#525258\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n              </svg>\n              <svg *ngIf=\"isCustomColor\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n                <path d=\"M5 12l4.5 4.5L19 7\" stroke=\"#ffffff\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </span>\n            <input\n              type=\"color\"\n              [value]=\"color\"\n              (input)=\"onColorInputEvent($event)\"\n              class=\"cqa-absolute cqa-inset-0 cqa-w-full cqa-h-full cqa-opacity-0 cqa-cursor-pointer cqa-border-0 cqa-p-0\"\n              aria-label=\"Pick custom folder color\"\n            />\n          </label>\n        </div>\n      </div>\n      -->\n    </div>\n  `,\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NewFolderDialogComponent {\n  // NOTE: `folders` and `labels` are declared as setters (instead of plain @Input fields)\n  // because `DialogService.open(...)` assigns the `inputs` map via direct property\n  // assignment *after* `attachComponent` has already run the component's lifecycle\n  // hooks — direct assignment bypasses `ngOnChanges`, so setters keep derived state\n  // (e.g. `parentPickerLabels`) in sync no matter the assignment order.\n\n  private _folders: FolderNode[] = [];\n  @Input() set folders(value: FolderNode[]) {\n    this._folders = value || [];\n    this.cdr.markForCheck();\n  }\n  get folders(): FolderNode[] { return this._folders; }\n\n  private _labels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  @Input() set labels(value: ModularLabels) {\n    this._labels = value || { ...DEFAULT_MODULAR_LABELS };\n    this.parentPickerLabels = this.buildParentPickerLabels();\n    this.cdr.markForCheck();\n  }\n  get labels(): ModularLabels { return this._labels; }\n\n  @Input() name: string = '';\n\n  /** Tracks whether the user has interacted with the name field, so we don't surface\n   *  the \"required\" error on first paint when the dialog opens with an empty name. */\n  private nameTouched = false;\n\n  readonly maxNameLength = FOLDER_NAME_MAX_LENGTH;\n\n  @Input() parentId: number | null = null;\n\n  @Input() color: string = DEFAULT_FOLDER_COLOR;\n\n  readonly presetColors: string[] = PRESET_FOLDER_COLORS;\n  readonly rainbowBorder: string =\n    'conic-gradient(from 0deg, #ef4444, #f59e0b, #eab308, #10b981, #06b6d4, #4f46e5, #8b5cf6, #ec4899, #ef4444)';\n\n  @Output() nameChange = new EventEmitter<string>();\n  @Output() parentIdChange = new EventEmitter<number | null>();\n  @Output() colorChange = new EventEmitter<string>();\n  @Output() submitted = new EventEmitter<{ name: string; parentId: number | null; color: string }>();\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Labels passed to the embedded tree picker. Re-uses the move-dialog surface but\n   *  rewrites the root row's label so it reads \"(no parent)\" instead of \"Unorganized\"\n   *  for the create-folder context. */\n  parentPickerLabels: ModularLabels = this.buildParentPickerLabels();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  private buildParentPickerLabels(): ModularLabels {\n    return { ...this._labels, moveDialogRoot: this._labels.newFolderDialogParentNone };\n  }\n\n  onNameChange(value: string): void {\n    this.name = value;\n    this.nameTouched = true;\n    this.nameChange.emit(value);\n  }\n\n  onParentPicked(id: number | null): void {\n    // The tree picker emits `null` for the \"(no parent)\" sentinel; numeric otherwise.\n    let next: number | null = null;\n    if (id != null) {\n      const coerced = typeof id === 'number' ? id : Number(id);\n      if (Number.isFinite(coerced)) next = coerced;\n    }\n    this.parentId = next;\n    this.parentIdChange.emit(next);\n  }\n\n  isColor(c: string): boolean {\n    return (this.color || '').toLowerCase() === (c || '').toLowerCase();\n  }\n\n  get isCustomColor(): boolean {\n    const c = (this.color || '').toLowerCase();\n    return !!c && !this.presetColors.some(p => p.toLowerCase() === c);\n  }\n\n  onColorChange(value: string): void {\n    const next = value || DEFAULT_FOLDER_COLOR;\n    if (this.color === next) return;\n    this.color = next;\n    this.colorChange.emit(next);\n    this.cdr.markForCheck();\n  }\n\n  onColorInputEvent(event: Event): void {\n    const target = event.target as HTMLInputElement | null;\n    if (target) this.onColorChange(target.value);\n  }\n\n  /** Errors surfaced under the name field. Only computed once the user has touched\n   *  the input so the dialog doesn't open with a \"required\" error already showing. */\n  get nameErrors(): string[] {\n    if (!this.nameTouched) return [];\n    const trimmed = (this.name || '').trim();\n    const errors: string[] = [];\n    if (!trimmed) {\n      errors.push(this.labels.newFolderDialogNameRequiredError);\n    } else if (trimmed.length > this.maxNameLength) {\n      errors.push(this.labels.newFolderDialogNameMaxLengthError);\n    }\n    return errors;\n  }\n\n  /** Returns true when the current state is a valid submission (non-empty trimmed name\n   *  within the max length). Used by the host to gate the dialog's Create button. */\n  get isValid(): boolean {\n    const trimmed = (this.name || '').trim();\n    return trimmed.length > 0 && trimmed.length <= this.maxNameLength;\n  }\n\n  submit(): void {\n    if (!this.isValid) return;\n    this.submitted.emit({\n      name: (this.name || '').trim(),\n      parentId: this.parentId,\n      color: this.color || DEFAULT_FOLDER_COLOR,\n    });\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  DEFAULT_MODULAR_LABELS,\n  FolderDeleteStrategy,\n  ModularLabels,\n} from '../modular-table-template.models';\n\n/**\n * Body of the \"Delete folder\" dialog — a radio-card picker for what happens to\n * the folder's contained test cases.\n *\n * Designed to be usable two ways:\n *\n *  1. **From within this library** via `DialogService.open(...)`. The outer\n *     `cqa-dialog` supplies the title/Cancel/Delete-folder buttons; the Delete\n *     button reads `strategy` via `getComponentInstance()`.\n *\n *  2. **From the host/UI layer directly** — hosts render this inside their own\n *     modal and observe `(strategyChange)`.\n */\n@Component({\n  selector: 'cqa-delete-folder-dialog',\n  template: `\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n      <p class=\"cqa-text-sm cqa-text-neutral-800 cqa-m-0\">{{ bodyText }}</p>\n\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n        <!-- Option 1: Move to parent folder (hidden when folder has no parent) -->\n        <button\n          *ngIf=\"hasParent\"\n          type=\"button\"\n          class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-text-left cqa-p-4 cqa-rounded-[10px] cqa-border-solid cqa-border cqa-transition-colors cqa-w-full\"\n          [ngClass]=\"strategy === 'MOVE_TO_PARENT' ? 'cqa-border-indigo-500 cqa-bg-indigo-50' : 'cqa-border-[#E2E2E3] hover:cqa-border-neutral-300 cqa-bg-white'\"\n          (click)=\"setStrategy('MOVE_TO_PARENT')\"\n        >\n          <ng-container *ngTemplateOutlet=\"radio; context: { checked: strategy === 'MOVE_TO_PARENT' }\"></ng-container>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n            <span class=\"cqa-text-sm cqa-font-semibold cqa-text-neutral-900\">\n              {{ labels.deleteFolderDialogMoveToParentTitle }}\n            </span>\n            <span class=\"cqa-text-sm cqa-text-neutral-500\">\n              {{ labels.deleteFolderDialogMoveToParentDescription }}\n            </span>\n          </div>\n        </button>\n\n        <!-- Option 2: Move to Unorganized -->\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-text-left cqa-p-4 cqa-rounded-[10px] cqa-border-solid cqa-border cqa-transition-colors cqa-w-full\"\n          [ngClass]=\"strategy === 'MOVE_TO_UNORGANISED' ? 'cqa-border-indigo-500 cqa-bg-indigo-50' : 'cqa-border-[#E2E2E3] hover:cqa-border-neutral-300 cqa-bg-white'\"\n          (click)=\"setStrategy('MOVE_TO_UNORGANISED')\"\n        >\n          <ng-container *ngTemplateOutlet=\"radio; context: { checked: strategy === 'MOVE_TO_UNORGANISED' }\"></ng-container>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n            <span class=\"cqa-text-sm cqa-font-semibold cqa-text-neutral-900\">\n              {{ labels.deleteFolderDialogMoveToUnorganizedTitle }}\n            </span>\n            <span class=\"cqa-text-sm cqa-text-neutral-500\">\n              {{ labels.deleteFolderDialogMoveToUnorganizedDescription }}\n            </span>\n          </div>\n        </button>\n      </div>\n    </div>\n\n    <!-- Reusable radio bullet -->\n    <ng-template #radio let-checked=\"checked\">\n      <span\n        class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5 cqa-rounded-full cqa-border-solid cqa-flex-shrink-0 cqa-mt-0.5\"\n        [ngClass]=\"checked ? 'cqa-border-indigo-600' : 'cqa-border-neutral-400'\"\n        [style.borderWidth]=\"'2px'\"\n      >\n        <span *ngIf=\"checked\" class=\"cqa-w-2.5 cqa-h-2.5 cqa-rounded-full cqa-bg-indigo-600\"></span>\n      </span>\n    </ng-template>\n  `,\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DeleteFolderDialogComponent implements OnInit, OnChanges {\n  @Input() folderName: string = '';\n  @Input() testCount: number = 0;\n  @Input() stepGroupCount: number = 0;\n  @Input() hasParent: boolean = false;\n  @Input() labels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  @Input() strategy: FolderDeleteStrategy = 'MOVE_TO_PARENT';\n\n  @Output() strategyChange = new EventEmitter<FolderDeleteStrategy>();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.normaliseStrategy();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['hasParent']) this.normaliseStrategy();\n  }\n\n  /** If the folder has no parent, the \"move to parent\" option isn't available — fall back. */\n  private normaliseStrategy(): void {\n    if (!this.hasParent && this.strategy === 'MOVE_TO_PARENT') {\n      this.strategy = 'MOVE_TO_UNORGANISED';\n    }\n  }\n\n  get bodyText(): string {\n    const parts: string[] = [];\n    if (this.testCount > 0) {\n      const tpl = this.testCount === 1\n        ? this.labels.deleteFolderDialogBodyTestCaseSingular\n        : this.labels.deleteFolderDialogBodyTestCasePlural;\n      parts.push(tpl.replace('{n}', '' + this.testCount));\n    }\n    if (this.stepGroupCount > 0) {\n      const tpl = this.stepGroupCount === 1\n        ? this.labels.deleteFolderDialogBodyStepGroupSingular\n        : this.labels.deleteFolderDialogBodyStepGroupPlural;\n      parts.push(tpl.replace('{n}', '' + this.stepGroupCount));\n    }\n    const items = parts.join(` ${this.labels.deleteFolderDialogBodyJoin} `);\n    return this.labels.deleteFolderDialogBodyTemplate.replace('{items}', items);\n  }\n\n  setStrategy(value: FolderDeleteStrategy): void {\n    if (this.strategy === value) return;\n    this.strategy = value;\n    this.strategyChange.emit(value);\n    this.cdr.markForCheck();\n  }\n}\n","import { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class DialogRef<TResult = unknown> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n  private componentInstance?: unknown;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => {\n      this.finishClose(undefined);\n    });\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) {\n      return;\n    }\n\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  setComponentInstance(instance: unknown): void {\n    this.componentInstance = instance;\n  }\n\n  getComponentInstance<TComponent>(): TComponent | undefined {\n    return this.componentInstance as TComponent | undefined;\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) {\n      return;\n    }\n\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\n\n","import { InjectionToken } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\nexport const DIALOG_REF = new InjectionToken<DialogRef<any>>('CQA_DIALOG_REF');\nexport const DIALOG_DATA = new InjectionToken<any>('CQA_DIALOG_DATA');\n\n\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { DialogConfig, DialogContentConfig } from './dialog.models';\nimport { DialogRef } from './dialog-ref';\nimport { DialogComponent } from './dialog.component';\nimport { DIALOG_DATA, DIALOG_REF } from './dialog.tokens';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class DialogService {\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  open<TContent extends DialogContentConfig = DialogContentConfig, TResult = unknown>(\n    config: DialogConfig<TContent, TResult>\n  ): DialogRef<TResult> {\n    this.assertValidConfig(config);\n\n    const overlayRef = this.overlay.create(this.buildOverlayConfig(config));\n    const dialogRef = new DialogRef<TResult>(overlayRef);\n\n    const injector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: DIALOG_REF, useValue: dialogRef },\n        { provide: DIALOG_DATA, useValue: config.data },\n      ],\n    });\n\n    const containerPortal = new ComponentPortal(DialogComponent, undefined, injector);\n    const containerRef = overlayRef.attach(containerPortal);\n    const containerInstance = containerRef.instance as DialogComponent<TResult>;\n\n    containerInstance.config = config;\n    containerInstance.dialogRef = dialogRef;\n\n    if (config.content?.type === 'template') {\n      containerInstance.attachTemplate(\n        config.content.template,\n        config.content.context ?? {\n          $implicit: config.data,\n          data: config.data,\n        }\n      );\n    }\n\n    if (config.content?.type === 'component') {\n      const componentPortal = new ComponentPortal(\n        config.content.component,\n        undefined,\n        Injector.create({\n          parent: injector,\n          providers: [\n            { provide: DIALOG_REF, useValue: dialogRef },\n            { provide: DIALOG_DATA, useValue: config.data },\n          ],\n        })\n      );\n\n      const componentRef = containerInstance.attachComponent(componentPortal);\n\n      if (componentRef && config.content.inputs) {\n        Object.entries(config.content.inputs).forEach(([key, value]) => {\n          (componentRef.instance as Record<string, unknown>)[key] = value;\n        });\n        componentRef.changeDetectorRef.markForCheck();\n      }\n\n      if (componentRef) {\n        dialogRef.setComponentInstance(componentRef.instance);\n      }\n    }\n\n    containerRef.changeDetectorRef.markForCheck();\n\n    if (!config.disableClose) {\n      overlayRef.backdropClick().subscribe(() => dialogRef.close());\n      overlayRef\n        .keydownEvents()\n        .pipe(\n          filter((event): event is KeyboardEvent => {\n            return (event as KeyboardEvent).key === 'Escape' || (event as KeyboardEvent).key === 'Esc';\n          })\n        )\n        .subscribe(() => dialogRef.close());\n    }\n\n    return dialogRef;\n  }\n\n  private assertValidConfig<TContent extends DialogContentConfig, TResult>(\n    config: DialogConfig<TContent, TResult>\n  ): void {\n    if (!config.title) {\n      throw new Error('Dialog title is required.');\n    }\n\n    if (!config.buttons || config.buttons.length < 2) {\n      throw new Error('Dialog requires at least two buttons to be provided.');\n    }\n  }\n\n  private buildOverlayConfig<TContent extends DialogContentConfig, TResult>(\n    config: DialogConfig<TContent, TResult>\n  ): OverlayConfig {\n    const panelClass = Array.isArray(config.panelClass)\n      ? config.panelClass\n      : config.panelClass\n      ? [config.panelClass]\n      : [];\n\n    return new OverlayConfig({\n      hasBackdrop: true,\n      backdropClass: ['cdk-overlay-dark-backdrop', 'cqa-dialog-backdrop'],\n      scrollStrategy: this.overlay.scrollStrategies.block(),\n      positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n      width: config.width,\n      maxWidth: config.maxWidth ?? '90vw',\n      panelClass: ['cqa-dialog-panel', ...panelClass],\n    });\n  }\n}\n\n\n","import { Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';\nimport { FOLDER_DRAG_MIME, ROW_DRAG_MIME } from '../modular-table-template.models';\n\n@Directive({\n  selector: '[cqaFolderDrop]',\n})\nexport class FolderDropDirective {\n  /** Folder id this drop target represents. `null` means \"unorganized / root\". */\n  @Input('cqaFolderDrop') targetFolderId: number | null = null;\n  @Input() dropEnabled: boolean = true;\n\n  @Output() testsDropped = new EventEmitter<{ testIds: Array<string | number>; targetFolderId: number | null }>();\n  /** Fires when a folder row is dropped here. `folderId` is the dragged folder's id. */\n  @Output() folderDropped = new EventEmitter<{ folderId: number; targetFolderId: number | null }>();\n\n  @HostBinding('class.cqa-folder-drop-over') isOver = false;\n\n  @HostListener('dragover', ['$event']) onDragOver(event: DragEvent) {\n    if (!this.dropEnabled) return;\n    event.preventDefault();\n    if (event.dataTransfer) {\n      event.dataTransfer.dropEffect = 'move';\n    }\n    this.isOver = true;\n  }\n\n  @HostListener('dragleave') onDragLeave() {\n    this.isOver = false;\n  }\n\n  @HostListener('drop', ['$event']) onDrop(event: DragEvent) {\n    this.isOver = false;\n    if (!this.dropEnabled || !event.dataTransfer) return;\n    event.preventDefault();\n\n    // Folder drops take precedence — the sidebar writes the folder MIME on dragstart.\n    const folderRaw = event.dataTransfer.getData(FOLDER_DRAG_MIME);\n    if (folderRaw) {\n      let folderId: number | null = null;\n      try {\n        const parsed = JSON.parse(folderRaw);\n        if (typeof parsed === 'number' && Number.isFinite(parsed)) folderId = parsed;\n      } catch {\n        return;\n      }\n      if (folderId == null) return;\n      this.folderDropped.emit({ folderId, targetFolderId: this.targetFolderId });\n      return;\n    }\n\n    // Fall through to the test-ids path (unchanged).\n    const raw = event.dataTransfer.getData(ROW_DRAG_MIME) || event.dataTransfer.getData('text/plain');\n    if (!raw) return;\n    let ids: Array<string | number> = [];\n    try {\n      const parsed = JSON.parse(raw);\n      if (Array.isArray(parsed)) ids = parsed;\n    } catch {\n      return;\n    }\n    if (!ids.length) return;\n    this.testsDropped.emit({ testIds: ids, targetFolderId: this.targetFolderId });\n  }\n}\n","import { Directive, HostBinding, HostListener, Input } from '@angular/core';\nimport { FOLDER_DRAG_MIME } from '../modular-table-template.models';\n\n@Directive({\n  selector: '[cqaFolderDrag]',\n})\nexport class FolderDragDirective {\n  /** Folder id being dragged. */\n  @Input('cqaFolderDrag') folderId!: number | null;\n  @Input() dragEnabled: boolean = true;\n\n  @HostBinding('attr.draggable') get draggable() {\n    return this.dragEnabled && this.folderId != null ? 'true' : null;\n  }\n\n  @HostListener('dragstart', ['$event']) onDragStart(event: DragEvent) {\n    if (!this.dragEnabled || this.folderId == null || !event.dataTransfer) return;\n    event.stopPropagation();\n    const payload = JSON.stringify(this.folderId);\n    event.dataTransfer.effectAllowed = 'move';\n    try {\n      event.dataTransfer.setData(FOLDER_DRAG_MIME, payload);\n    } catch {\n      /* some browsers reject custom MIME — fall through */\n    }\n    event.dataTransfer.setData('text/plain', payload);\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  OnDestroy,\n  Output,\n} from '@angular/core';\nimport { ConnectedPosition } from '@angular/cdk/overlay';\nimport {\n  DEFAULT_MODULAR_LABELS,\n  FolderNode,\n  FolderRenamedPayload,\n  ModularLabels,\n} from '../modular-table-template.models';\n\n/** A row in the flattened sidebar tree. `kind` distinguishes real folder rows\n *  from the lazy-load affordances ('loading' spinner, 'load-more' button) that\n *  the `rows` getter interleaves inside an expanded subtree. */\ninterface RenderNode {\n  kind: 'folder' | 'loading' | 'load-more';\n  node: FolderNode;\n  depth: number;\n  visible: boolean;\n  hasChildren: boolean;\n}\n\n@Component({\n  selector: 'cqa-folder-sidebar',\n  templateUrl: './folder-sidebar.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FolderSidebarComponent implements OnDestroy {\n  @Input() folders: FolderNode[] = [];\n  @Input() selectedFolderId: number | null = null;\n  @Input() expandedFolderIds: number[] = [];\n  @Input() unorganizedCount: number = 0;\n  @Input() allowCreate: boolean = true;\n  @Input() allowRename: boolean = true;\n  @Input() allowDelete: boolean = true;\n  @Input() allowMove: boolean = true;\n  @Input() allowDuplicate: boolean = true;\n  @Input() allowDrop: boolean = true;\n  @Input() showCounts: boolean = true;\n  @Input() collapsed: boolean = false;\n  @Input() foldersAccordionExpanded: boolean = true;\n  @Input() labels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  /** When true, the sidebar emits `searchChange` and skips its local name filter\n   *  — the host is expected to swap `folders` with server-side search results.\n   *  Default keeps the legacy client-side behaviour for callers that haven't\n   *  opted into lazy loading yet. */\n  @Input() serverSideSearch: boolean = false;\n  /** Backend-reported total root folders. When `folders.length < rootTotal` the\n   *  sidebar renders a top-level \"Load more\" affordance after the tree. */\n  @Input() rootTotal: number = 0;\n  /** True while a server-side folder-search request is in flight. The sidebar\n   *  shows a spinner next to the search input so the user can tell typing\n   *  has been registered. */\n  @Input() folderSearchLoading: boolean = false;\n  /** True while a root-page fetch is in flight (initial load OR scroll-driven\n   *  pagination). When set with no folders yet, the sidebar shows a centered\n   *  spinner; when set during pagination, a small spinner appears at the\n   *  bottom of the tree. */\n  @Input() rootFoldersLoading: boolean = false;\n  /** Folder ids currently being saved (rename / move / etc). The sidebar renders\n   *  a small spinner in place of the count so the user gets feedback while the\n   *  host's API call is in flight. The host is responsible for adding/removing\n   *  ids around its async call. */\n  @Input() savingFolderIds: Array<number> = [];\n\n  isFolderSaving(id: number): boolean {\n    return this.savingFolderIds?.includes(id) ?? false;\n  }\n\n  folderRowTooltip(node: FolderNode): string | null {\n    const name = node?.name || '';\n    if (node?.totalCount == null) {\n      return name || null;\n    }\n    const tpl = node.totalCount === 1\n      ? this.labels.folderTooltipTotalSingular\n      : this.labels.folderTooltipTotalPlural;\n    const countLine = (tpl || '').replace('{n}', String(node.totalCount));\n    return name ? `${name}\\n${countLine}` : countLine;\n  }\n\n  /** Visual depth indent: linear up to a cap, then quarter-rate beyond, so deep\n   *  trees don't push the row content off the right edge of the panel. */\n  rowIndent(depth: number): number {\n    const step = 16;\n    const cap = 6;\n    const base = 8;\n    if (depth <= cap) return base + depth * step;\n    return base + cap * step + (depth - cap) * 4;\n  }\n\n  @Output() folderSelected = new EventEmitter<number | null>();\n  @Output() folderExpansionToggled = new EventEmitter<{ id: number; expanded: boolean }>();\n  /** Lazy-load: fires when the user expands a node whose children haven't been\n   *  fetched yet (`hasChildren === true && loadedPages === undefined`). Host\n   *  responds by calling its `loadFolderChildren(id, 0)`. */\n  @Output() folderChildrenRequested = new EventEmitter<number>();\n  /** Lazy-load: fires when the user clicks the per-folder \"Load more\" row.\n   *  Host responds by calling `loadFolderChildren(id, nextPage)`. */\n  @Output() folderLoadMoreRequested = new EventEmitter<{ id: number; nextPage: number }>();\n  /** Debounced search-input value. Always emitted; only consumed by hosts that\n   *  set `serverSideSearch=true` to re-fetch the tree from the backend. */\n  @Output() searchChange = new EventEmitter<string>();\n  /** Lazy-load: user clicked the top-level \"Load more\" affordance for roots. */\n  @Output() rootLoadMoreRequested = new EventEmitter<void>();\n  /** Emitted after the host completes folder creation (e.g., inline rename flow). Reserved for future use. */\n  @Output() folderCreated = new EventEmitter<{ parentId: number | null; name: string }>();\n  /** Emitted when the user clicks the \"+\" header button. Host should open a creation modal. */\n  @Output() folderCreateRequested = new EventEmitter<{ parentId: number | null }>();\n  /** Carries the full renamed folder node + parent id so hosts can issue complete update requests. */\n  @Output() folderRenamed = new EventEmitter<FolderRenamedPayload>();\n  @Output() folderDeleted = new EventEmitter<{ id: number }>();\n  /** User picked \"Move folder\" from the context menu. Host opens the folder picker. */\n  @Output() folderMoveRequested = new EventEmitter<{ id: number }>();\n  /** User picked \"Duplicate folder\" from the context menu. Host clones the subtree (tests referenced, not copied). */\n  @Output() folderDuplicateRequested = new EventEmitter<{ id: number }>();\n  @Output() testsDropped = new EventEmitter<{ testIds: Array<string | number>; targetFolderId: number | null }>();\n  /** Fires when a folder row is dropped onto another folder (or the Unorganized row). */\n  @Output() folderDropped = new EventEmitter<{ id: number; newParentId: number | null }>();\n  @Output() collapsedChange = new EventEmitter<boolean>();\n  @Output() foldersAccordionExpandedChange = new EventEmitter<boolean>();\n\n  /** Bound to the search input. Exposed as an Input so hosts can seed/restore\n   *  the visible search term across destroy/re-create cycles (e.g., when the\n   *  sidebar is `*ngIf`'d out by a view-mode toggle and re-mounted later). */\n  @Input() searchValue: string = '';\n  /** Debounce timer for `searchChange` emissions; cleared on each keystroke so\n   *  the host only re-fetches once the user pauses typing. */\n  private searchEmitTimer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly SEARCH_DEBOUNCE_MS = 300;\n  renamingId: number | null = null;\n  renameDraft: string = '';\n  /** Inline rename uses the same name rules as the New Folder dialog. */\n  readonly renameMaxLength: number = 20;\n  /** Transient flag: turns the rename input red briefly when the user keystrokes\n   *  while already at `renameMaxLength`, so the silent maxlength clamp gets a\n   *  visible \"you've hit the cap\" signal. Cleared by `renameLimitFlashTimer`. */\n  renameLimitFlash = false;\n  private renameLimitFlashTimer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly RENAME_LIMIT_FLASH_MS = 600;\n\n  /** Id of the folder whose context menu is open, or null when closed. */\n  contextMenuFolderId: number | null = null;\n  /** Suppress outside-click handling until this timestamp; protects against the\n   *  right-click that opens the menu also being interpreted as an outside click. */\n  private _suppressOutsideClickUntil = 0;\n  /** Viewport-anchored position (client coordinates) for the floating menu.\n   *  Drives the invisible cdkOverlayOrigin anchor; CDK Overlay then picks the\n   *  best of `contextMenuPositions` so the menu never overflows the viewport. */\n  contextMenuPosition: { x: number; y: number } = { x: 0, y: 0 };\n\n  /** Position priority for the CDK-overlay-rendered context menu. CDK tries each\n   *  in order and uses the first one that fits — so the menu opens downward by\n   *  default and flips up / left when too close to the bottom or right edge. */\n  readonly contextMenuPositions: ConnectedPosition[] = [\n    { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n    { originX: 'start', originY: 'top',    overlayX: 'start', overlayY: 'bottom' },\n    { originX: 'end',   originY: 'bottom', overlayX: 'end',   overlayY: 'top' },\n    { originX: 'end',   originY: 'top',    overlayX: 'end',   overlayY: 'bottom' },\n  ];\n\n  /** Pending auto-expand timers while a folder drag is hovered over collapsed rows. */\n  private dragExpandTimers = new Map<number, ReturnType<typeof setTimeout>>();\n  private readonly DRAG_EXPAND_DELAY_MS = 600;\n  /** Id of the folder currently being dragged; used to skip cycle targets and source-hover expansion. */\n  private activeFolderDragId: number | null = null;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  get expandedSet(): Set<number> {\n    return new Set(this.expandedFolderIds || []);\n  }\n\n  /** Flattened, depth-aware list of rows to render in order. Ancestors of matches are kept. */\n  get rows(): RenderNode[] {\n    // Server-side mode: host pre-filters `folders`; we skip the local filter so\n    // results aren't double-filtered (backend may use different fuzzy logic).\n    const localSearch = this.serverSideSearch\n      ? ''\n      : (this.searchValue || '').trim().toLowerCase();\n    const expanded = this.expandedSet;\n    const keepSet = new Set<number>();\n    if (localSearch) {\n      const mark = (nodes: FolderNode[], ancestors: number[]): void => {\n        for (const n of nodes || []) {\n          const matched = (n.name || '').toLowerCase().includes(localSearch);\n          const childAncestors = [...ancestors, n.id];\n          if (matched) {\n            for (const a of ancestors) keepSet.add(a);\n            keepSet.add(n.id);\n          }\n          if (n.children?.length) mark(n.children, childAncestors);\n        }\n      };\n      mark(this.folders, []);\n    }\n\n    const out: RenderNode[] = [];\n    const walk = (nodes: FolderNode[], depth: number, parentVisible: boolean) => {\n      for (const n of nodes || []) {\n        const searchVisible = !localSearch || keepSet.has(n.id);\n        const visible = parentVisible && searchVisible;\n        // Show the chevron when the backend says this folder has children\n        // (lazy-load: children may not be fetched yet) OR when children are\n        // already populated (eager mode for callers that pre-build the tree).\n        const hasChildren = !!n.hasChildren || !!(n.children && n.children.length);\n        out.push({ kind: 'folder', node: n, depth, visible, hasChildren });\n        const expandedBySearch = !!localSearch && keepSet.has(n.id);\n        const isNodeExpanded = expanded.has(n.id) || expandedBySearch;\n        if (!isNodeExpanded || !hasChildren) continue;\n        // Recurse for children that are already in memory.\n        if (n.children?.length) {\n          walk(n.children, depth + 1, visible);\n        }\n        // Append lazy-load affordances at the end of the open subtree:\n        // - 'loading' while a children-page fetch is in flight.\n        // - 'load-more' when more children exist on the backend than we have.\n        if (n.childrenLoading) {\n          out.push({ kind: 'loading', node: n, depth: depth + 1, visible, hasChildren: false });\n        } else if ((n.children?.length ?? 0) < (n.totalChildren ?? 0)) {\n          out.push({ kind: 'load-more', node: n, depth: depth + 1, visible, hasChildren: false });\n        }\n      }\n    };\n    walk(this.folders, 0, true);\n    return out.filter(r => r.visible);\n  }\n\n  isExpanded(id: number): boolean {\n    return this.expandedSet.has(id);\n  }\n\n  isSelected(id: number | null): boolean {\n    if (id == null && this.selectedFolderId == null) return true;\n    return id != null && this.selectedFolderId != null && id === this.selectedFolderId;\n  }\n\n  onToggle(n: FolderNode, event: Event): void {\n    event.stopPropagation();\n    const expanded = !this.isExpanded(n.id);\n    this.folderExpansionToggled.emit({ id: n.id, expanded });\n    // Lazy fetch: if the user is expanding a node whose children haven't been\n    // loaded yet, ask the host to fetch them. Skip when not lazy (loadedPages\n    // already set) or not expanding.\n    if (expanded && n.hasChildren && n.loadedPages == null) {\n      this.folderChildrenRequested.emit(n.id);\n    }\n  }\n\n  /** Search input handler: updates the local `searchValue` immediately (so the\n   *  input stays responsive) and debounces `searchChange` emissions so a host\n   *  doing server-side search fires at most one request per pause. */\n  onSearchInput(term: string): void {\n    this.searchValue = term;\n    if (this.searchEmitTimer) clearTimeout(this.searchEmitTimer);\n    this.searchEmitTimer = setTimeout(() => {\n      this.searchChange.emit(this.searchValue);\n      this.searchEmitTimer = null;\n    }, FolderSidebarComponent.SEARCH_DEBOUNCE_MS);\n  }\n\n  /** Search input clear handler: flushes the debounce so the host sees an\n   *  empty term immediately and can restore the lazy tree. */\n  onSearchClear(): void {\n    this.searchValue = '';\n    if (this.searchEmitTimer) {\n      clearTimeout(this.searchEmitTimer);\n      this.searchEmitTimer = null;\n    }\n    this.searchChange.emit('');\n  }\n\n  /** Lazy-load: user clicked the per-folder \"Load more\" row. The sidebar tracks\n   *  pagination via `node.loadedPages`; the next page is loadedPages + 1. */\n  onLoadMore(n: FolderNode): void {\n    if (n.loadedPages == null) return;\n    this.folderLoadMoreRequested.emit({ id: n.id, nextPage: n.loadedPages + 1 });\n  }\n\n  /** Cached `folders.length` at the moment we last emitted `rootLoadMoreRequested`.\n   *  Used to throttle the scroll-based pagination so we don't re-emit until the\n   *  host has actually appended a new page. */\n  private lastRootLoadEmittedAt: number = -1;\n  /** Threshold (px) for \"near the bottom\" — emit a load-more once the scroll\n   *  position is within this many px of the end. */\n  private static readonly SCROLL_LOAD_THRESHOLD_PX = 64;\n\n  /** Vertical-scroll handler for the root-folder list. Fires `rootLoadMoreRequested`\n   *  when the user scrolls within the threshold of the bottom and more roots\n   *  are available on the backend. Suppressed during sidebar search. */\n  onTreeScroll(event: Event): void {\n    if (this.searchValue?.trim()) return;\n    if (this.folders.length >= this.rootTotal) return;\n    if (this.folders.length === this.lastRootLoadEmittedAt) return;\n    const el = event.target as HTMLElement | null;\n    if (!el) return;\n    const distanceFromBottom = el.scrollHeight - (el.scrollTop + el.clientHeight);\n    if (distanceFromBottom > FolderSidebarComponent.SCROLL_LOAD_THRESHOLD_PX) return;\n    this.lastRootLoadEmittedAt = this.folders.length;\n    this.rootLoadMoreRequested.emit();\n  }\n\n  onSelect(n: FolderNode | null): void {\n    if (this.renamingId != null) return;\n    this.folderSelected.emit(n == null ? null : n.id);\n  }\n\n  onSelectUnorganized(): void {\n    // Sentinel: hosts that keep an \"Unorganized\" bucket can treat a null selection\n    // as \"show unorganized\". If there is already a root (null) selection pattern,\n    // this matches it. Host decides semantics.\n    this.folderSelected.emit(null);\n  }\n\n  beginRename(n: FolderNode, event: Event): void {\n    if (!this.allowRename) return;\n    event.stopPropagation();\n    this.renamingId = n.id;\n    this.renameDraft = n.name;\n    this.cdr.markForCheck();\n    this.focusRenameInput(n.id);\n  }\n\n  /** True when the active rename draft passes the name rules (non-empty, within max length). */\n  get isRenameDraftValid(): boolean {\n    const trimmed = (this.renameDraft || '').trim();\n    return trimmed.length > 0 && trimmed.length <= this.renameMaxLength;\n  }\n\n  commitRename(n: FolderNode): void {\n    // Discard invalid drafts (empty / too long) instead of committing a bad name.\n    // The user sees the red border while editing; on blur we revert to the original.\n    if (!this.isRenameDraftValid) {\n      this.cancelRename();\n      return;\n    }\n    const name = (this.renameDraft || '').trim();\n    if (name !== n.name) {\n      // Emit the full renamed node (with the new name) + parent context so hosts can\n      // call `PUT /test_case_folders/{id}` without re-resolving from their cached tree.\n      const folder: FolderNode = { ...n, name };\n      this.folderRenamed.emit({\n        folder,\n        parentId: this.parentIdOf(n.id),\n        previousName: n.name,\n      });\n    }\n    this.cancelRename();\n  }\n\n  cancelRename(): void {\n    this.renamingId = null;\n    this.renameDraft = '';\n    this.clearRenameLimitFlash();\n    this.cdr.markForCheck();\n  }\n\n  onRenameKey(event: KeyboardEvent, n: FolderNode): void {\n    // Stop bubbling so the row's keydown handler (which treats Space/Enter/Arrows as\n    // selection / tree navigation) can't swallow characters typed into the rename input.\n    event.stopPropagation();\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      // Don't swallow the user's edit on Enter when the draft is invalid — keep\n      // the input open (red border already signals the issue) and let them fix it.\n      if (!this.isRenameDraftValid) return;\n      this.commitRename(n);\n      return;\n    }\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      this.cancelRename();\n      return;\n    }\n    // For any other keystroke, detect \"user is trying to type past maxlength\" and\n    // briefly flash the input red. The browser's `maxlength` attribute already\n    // silently blocks the character; this surfaces a visible \"you've hit the cap\"\n    // signal that would otherwise be missing.\n    if (this.isPrintableKey(event) && this.wouldExceedRenameLimit(event)) {\n      this.triggerRenameLimitFlash();\n    }\n  }\n\n  private isPrintableKey(event: KeyboardEvent): boolean {\n    // Single-character keys are printables (a, B, 1, !, space). Modifier-driven\n    // shortcuts (Ctrl/Meta) shouldn't count — they don't insert text.\n    return event.key.length === 1 && !event.ctrlKey && !event.metaKey && !event.altKey;\n  }\n\n  private wouldExceedRenameLimit(event: KeyboardEvent): boolean {\n    // The new length after the keystroke would be: current - selectionLength + 1.\n    // If a selection covers part of the value, typing replaces that range, so the\n    // net length might still fit under the cap.\n    const target = event.target as HTMLInputElement | null;\n    const start = target?.selectionStart ?? 0;\n    const end = target?.selectionEnd ?? 0;\n    const selectedLen = Math.max(0, end - start);\n    const draftLen = (this.renameDraft || '').length;\n    return draftLen - selectedLen >= this.renameMaxLength;\n  }\n\n  private triggerRenameLimitFlash(): void {\n    this.renameLimitFlash = true;\n    if (this.renameLimitFlashTimer) clearTimeout(this.renameLimitFlashTimer);\n    this.renameLimitFlashTimer = setTimeout(() => {\n      this.renameLimitFlash = false;\n      this.renameLimitFlashTimer = null;\n      this.cdr.markForCheck();\n    }, FolderSidebarComponent.RENAME_LIMIT_FLASH_MS);\n    this.cdr.markForCheck();\n  }\n\n  private clearRenameLimitFlash(): void {\n    if (this.renameLimitFlashTimer) {\n      clearTimeout(this.renameLimitFlashTimer);\n      this.renameLimitFlashTimer = null;\n    }\n    this.renameLimitFlash = false;\n  }\n\n  deleteFolder(n: FolderNode, event: Event): void {\n    if (!this.allowDelete) return;\n    event.stopPropagation();\n    this.folderDeleted.emit({ id: n.id });\n  }\n\n  /**\n   * Opens the folder context menu anchored at the given client coordinates.\n   * Called from both (contextmenu) on the row and (click) on the ellipsis button.\n   * The template renders the menu via cdkConnectedOverlay anchored on an\n   * invisible 0×0 origin at `contextMenuPosition`; CDK's flexible-connected\n   * positioning auto-flips up/left when the preferred placement would overflow\n   * the viewport (e.g. right-clicking the last folder near the bottom edge).\n   */\n  openContextMenu(n: FolderNode, event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.hasAnyContextAction) return;\n    this.contextMenuFolderId = n.id;\n    this.contextMenuPosition = { x: event.clientX, y: event.clientY };\n    // CDK's outside-click dispatcher attaches body-level capture-phase listeners\n    // for click/auxclick/contextmenu. On right-click the contextmenu+auxclick\n    // events fire on the same gesture that opened the menu, which would\n    // immediately close it. Suppress outside-click handling for a short window.\n    this._suppressOutsideClickUntil = Date.now() + 250;\n    this.cdr.markForCheck();\n  }\n\n  onOverlayOutsideClick(): void {\n    if (Date.now() < this._suppressOutsideClickUntil) return;\n    this.closeContextMenu();\n  }\n\n  closeContextMenu(): void {\n    if (this.contextMenuFolderId == null) return;\n    this.contextMenuFolderId = null;\n    this.cdr.markForCheck();\n  }\n\n  /** True when at least one menu entry is enabled — otherwise the trigger is suppressed entirely. */\n  get hasAnyContextAction(): boolean {\n    return this.allowCreate || this.allowRename || this.allowMove || this.allowDuplicate || this.allowDelete;\n  }\n\n  onContextCreateSubfolder(n: FolderNode): void {\n    this.closeContextMenu();\n    if (!this.allowCreate) return;\n    this.folderCreateRequested.emit({ parentId: n.id });\n  }\n\n  onContextRename(n: FolderNode): void {\n    this.closeContextMenu();\n    if (!this.allowRename) return;\n    this.renamingId = n.id;\n    this.renameDraft = n.name;\n    this.cdr.markForCheck();\n    this.focusRenameInput(n.id);\n  }\n\n  onContextMove(n: FolderNode): void {\n    this.closeContextMenu();\n    if (!this.allowMove) return;\n    this.folderMoveRequested.emit({ id: n.id });\n  }\n\n  onContextDuplicate(n: FolderNode): void {\n    this.closeContextMenu();\n    if (!this.allowDuplicate) return;\n    this.folderDuplicateRequested.emit({ id: n.id });\n  }\n\n  onContextDelete(n: FolderNode): void {\n    this.closeContextMenu();\n    if (!this.allowDelete) return;\n    this.folderDeleted.emit({ id: n.id });\n  }\n\n  @HostListener('document:click')\n  onDocumentClick(): void {\n    this.closeContextMenu();\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    this.closeContextMenu();\n  }\n\n  /** Template helper: resolve a folder node by id from the input tree. */\n  folderById(id: number | null): FolderNode | null {\n    if (id == null) return null;\n    const find = (nodes: FolderNode[]): FolderNode | null => {\n      for (const n of nodes || []) {\n        if (n.id === id) return n;\n        if (n.children?.length) {\n          const hit = find(n.children);\n          if (hit) return hit;\n        }\n      }\n      return null;\n    };\n    return find(this.folders);\n  }\n\n  /** Returns the parent id of `id`, or null when `id` is a root folder / not found. */\n  private parentIdOf(id: number): number | null {\n    let result: number | null = null;\n    const walk = (nodes: FolderNode[], parentId: number | null): boolean => {\n      for (const n of nodes || []) {\n        if (n.id === id) {\n          result = parentId;\n          return true;\n        }\n        if (n.children?.length && walk(n.children, n.id)) return true;\n      }\n      return false;\n    };\n    walk(this.folders, null);\n    return result;\n  }\n\n  requestCreate(parentId: number | null = null): void {\n    if (!this.allowCreate) return;\n    this.folderCreateRequested.emit({ parentId });\n  }\n\n  togglePanel(): void {\n    this.collapsed = !this.collapsed;\n    if (this.collapsed) this.searchVisible = false;\n    this.collapsedChange.emit(this.collapsed);\n  }\n\n  toggleFoldersAccordion(): void {\n    this.foldersAccordionExpanded = !this.foldersAccordionExpanded;\n    if (!this.foldersAccordionExpanded) this.searchVisible = false;\n    this.foldersAccordionExpandedChange.emit(this.foldersAccordionExpanded);\n    this.cdr.markForCheck();\n  }\n\n  /** Toggles the inline folder-search input. When closing while a query is active,\n   *  also clear the search so the tree reverts to its full state. */\n  searchVisible: boolean = false;\n  toggleSearchVisible(): void {\n    if (!this.foldersAccordionExpanded && !this.searchVisible) {\n      this.foldersAccordionExpanded = true;\n      this.foldersAccordionExpandedChange.emit(true);\n    }\n    this.searchVisible = !this.searchVisible;\n    if (!this.searchVisible && (this.searchValue || '').trim()) {\n      this.onSearchClear();\n    }\n    this.cdr.markForCheck();\n  }\n\n  rowDropped(targetId: number | null, event: { testIds: Array<string | number>; targetFolderId: number | null }): void {\n    // Directive already emits with the bound folder id, but normalise in case callers\n    // wire raw events.\n    this.testsDropped.emit({ testIds: event.testIds, targetFolderId: targetId });\n  }\n\n  /**\n   * Drop target received a folder drag. Validate against self/descendant cycles and\n   * emit `folderDropped` if the move is legal. Called from the directive's\n   * `(folderDropped)` output on every row and on the Unorganized row.\n   */\n  onFolderRowDropped(targetId: number | null, event: { folderId: number; targetFolderId: number | null }): void {\n    this.clearAllExpandTimers();\n    this.activeFolderDragId = null;\n    const sourceId = event.folderId;\n    if (targetId != null && targetId === sourceId) return;\n    if (targetId != null && this.isDescendantOf(sourceId, targetId)) return;\n    this.folderDropped.emit({ id: sourceId, newParentId: targetId });\n  }\n\n  /** Remember the dragged folder so we can block self-hover expansion and cycle drops. */\n  onFolderDragStart(n: FolderNode): void {\n    this.activeFolderDragId = n.id;\n  }\n\n  onFolderDragEnd(): void {\n    this.activeFolderDragId = null;\n    this.clearAllExpandTimers();\n  }\n\n  /** Schedule an auto-expand for a collapsed folder that has children during drag-hover. */\n  onFolderRowDragOver(row: RenderNode): void {\n    const id = row.node.id;\n    if (!row.hasChildren) return;\n    if (this.isExpanded(id)) return;\n    if (this.activeFolderDragId === id) return; // don't expand the source\n    if (this.dragExpandTimers.has(id)) return;\n    const timer = setTimeout(() => {\n      this.dragExpandTimers.delete(id);\n      if (!this.isExpanded(id)) {\n        this.folderExpansionToggled.emit({ id, expanded: true });\n      }\n    }, this.DRAG_EXPAND_DELAY_MS);\n    this.dragExpandTimers.set(id, timer);\n  }\n\n  onFolderRowDragLeave(row: RenderNode): void {\n    const id = row.node.id;\n    const timer = this.dragExpandTimers.get(id);\n    if (timer != null) {\n      clearTimeout(timer);\n      this.dragExpandTimers.delete(id);\n    }\n  }\n\n  @HostListener('document:dragend')\n  onDocumentDragEnd(): void {\n    this.onFolderDragEnd();\n  }\n\n  /** True when `candidateId` is `sourceId` itself or any descendant of it. */\n  private isDescendantOf(sourceId: number, candidateId: number): boolean {\n    const source = this.folderById(sourceId);\n    if (!source) return false;\n    const stack: FolderNode[] = [source];\n    while (stack.length) {\n      const n = stack.pop()!;\n      if (n.id === candidateId) return true;\n      if (n.children?.length) stack.push(...n.children);\n    }\n    return false;\n  }\n\n  private clearAllExpandTimers(): void {\n    this.dragExpandTimers.forEach(t => clearTimeout(t));\n    this.dragExpandTimers.clear();\n  }\n\n  ngOnDestroy(): void {\n    this.clearAllExpandTimers();\n    this.clearRenameLimitFlash();\n    if (this.searchEmitTimer) {\n      clearTimeout(this.searchEmitTimer);\n      this.searchEmitTimer = null;\n    }\n  }\n\n  trackByRow = (_: number, row: RenderNode) => `${row.kind}_${row.node.id}`;\n\n  onRowKeydown(event: KeyboardEvent, row: RenderNode, index: number): void {\n    const rows = this.rows;\n    switch (event.key) {\n      case 'ArrowDown': {\n        event.preventDefault();\n        const next = rows[index + 1];\n        if (next) this.focusRowElement(next.node.id);\n        break;\n      }\n      case 'ArrowUp': {\n        event.preventDefault();\n        const prev = rows[index - 1];\n        if (prev) this.focusRowElement(prev.node.id);\n        break;\n      }\n      case 'ArrowRight': {\n        if (row.hasChildren && !this.isExpanded(row.node.id)) {\n          event.preventDefault();\n          this.folderExpansionToggled.emit({ id: row.node.id, expanded: true });\n        }\n        break;\n      }\n      case 'ArrowLeft': {\n        if (row.hasChildren && this.isExpanded(row.node.id)) {\n          event.preventDefault();\n          this.folderExpansionToggled.emit({ id: row.node.id, expanded: false });\n        }\n        break;\n      }\n      case 'Enter':\n      case ' ': {\n        event.preventDefault();\n        this.onSelect(row.node);\n        break;\n      }\n    }\n  }\n\n  private focusRowElement(id: number): void {\n    queueMicrotask(() => {\n      const el = document.querySelector<HTMLElement>(`[data-folder-row-id=\"${id}\"]`);\n      el?.focus();\n    });\n  }\n\n  /**\n   * Focuses the inline rename input for the given folder. Uses `setTimeout` (not\n   * microtask) because the input is gated by `*ngIf=\"renamingId === ...\"` and\n   * must survive the next OnPush change-detection cycle before it's in the DOM.\n   */\n  private focusRenameInput(id: number): void {\n    setTimeout(() => {\n      const el = document.querySelector<HTMLInputElement>(`[data-folder-rename-input=\"${id}\"]`);\n      if (!el) return;\n      el.focus();\n      el.select();\n    }, 0);\n  }\n}\n","<!-- Reusable indeterminate loading spinner. Render via\n     <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 14 }\"></ng-container>. -->\n<ng-template #loadingSpinner let-size=\"size\">\n  <svg [attr.width]=\"size || 16\" [attr.height]=\"size || 16\" viewBox=\"0 0 50 50\" aria-label=\"loading\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"></circle>\n    <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n      <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\" dur=\"0.8s\" repeatCount=\"indefinite\"></animateTransform>\n    </path>\n  </svg>\n</ng-template>\n\n<!-- Reusable folder icon. Render via <ng-container *ngTemplateOutlet=\"folderIcon; context: { color: node.color }\"></ng-container>. -->\n<ng-template #folderIcon let-color=\"color\">\n  <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-4 cqa-h-4 cqa-flex-shrink-0\">\n    <svg width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M12.1916 9.85824C12.1916 10.1677 12.0687 10.4644 11.8499 10.6832C11.6311 10.902 11.3343 11.0249 11.0249 11.0249H1.69157C1.38215 11.0249 1.0854 10.902 0.866611 10.6832C0.647819 10.4644 0.524902 10.1677 0.524902 9.85824V1.69157C0.524902 1.38215 0.647819 1.0854 0.866611 0.866611C1.0854 0.647819 1.38215 0.524902 1.69157 0.524902H4.60824L5.7749 2.2749H11.0249C11.3343 2.2749 11.6311 2.39782 11.8499 2.61661C12.0687 2.8354 12.1916 3.13215 12.1916 3.44157V9.85824Z\" [attr.stroke]=\"color || '#99999E'\" stroke-width=\"1.05\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </span>\n</ng-template>\n\n<aside\n  class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-h-full cqa-min-h-0\"\n  [class.cqa-border]=\"!collapsed\"\n  [class.cqa-border-neutral-200]=\"!collapsed\"\n  [class.cqa-rounded-lg]=\"!collapsed\"\n  [style.width.px]=\"collapsed ? 22 : 240\"\n  style=\"overflow: hidden; transition: width 260ms cubic-bezier(0.4, 0, 0.2, 1);\"\n>\n  <!-- Collapsed rail: the entire sidebar becomes a single click target so the\n       slim strip reads as an obvious \"expand me\" handle. -->\n  <button\n    *ngIf=\"collapsed\"\n    type=\"button\"\n    style=\"width: 22px;\"\n    class=\"cqa-group cqa-flex cqa-flex-col cqa-items-center cqa-flex-shrink-0 cqa-h-full cqa-py-2 cqa-gap-3 cqa-bg-neutral-50 cqa-border cqa-border-neutral-200 cqa-text-neutral-500 hover:cqa-bg-indigo-50 hover:cqa-border-indigo-200 hover:cqa-text-indigo-600 focus:cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-indigo-200 cqa-cursor-pointer\"\n    (click)=\"togglePanel()\"\n    [attr.aria-label]=\"'Expand folders panel'\"\n    [title]=\"'Expand folders panel'\"\n  >\n    <mat-icon style=\"font-size:16px;width:16px;height:16px\">chevron_right</mat-icon>\n    <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center\" aria-hidden=\"true\">\n      <svg width=\"13\" height=\"12\" viewBox=\"0 0 13 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M12.1916 9.85824C12.1916 10.1677 12.0687 10.4644 11.8499 10.6832C11.6311 10.902 11.3343 11.0249 11.0249 11.0249H1.69157C1.38215 11.0249 1.0854 10.902 0.866611 10.6832C0.647819 10.4644 0.524902 10.1677 0.524902 9.85824V1.69157C0.524902 1.38215 0.647819 1.0854 0.866611 0.866611C1.0854 0.647819 1.38215 0.524902 1.69157 0.524902H4.60824L5.7749 2.2749H11.0249C11.3343 2.2749 11.6311 2.39782 11.8499 2.61661C12.0687 2.8354 12.1916 3.13215 12.1916 3.44157V9.85824Z\" stroke=\"currentColor\" stroke-width=\"1.05\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </span>\n  </button>\n\n  <div *ngIf=\"!collapsed\" class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-h-0 cqa-pb-2\" style=\"width: 240px;\">\n  <!-- Header (expanded) -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-justify-between cqa-py-1 cqa-px-3\"\n    style=\"border-bottom: 1px solid #E2E2E3; margin-bottom: 8px;\"\n  >\n    <span class=\"cqa-text-sm cqa-font-semibold cqa-text-neutral-900 cqa-py-0.5\">{{ labels.folders }}</span>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n      <button\n        type=\"button\"\n        class=\"cqa-p-1 cqa-rounded hover:cqa-bg-neutral-100 cqa-text-neutral-500\"\n        (click)=\"togglePanel()\"\n        [attr.aria-label]=\"'Collapse folders panel'\"\n        [title]=\"'Collapse folders panel'\"\n      >\n        <mat-icon style=\"font-size:18px;width:18px;height:18px\">keyboard_double_arrow_left</mat-icon>\n      </button>\n      <button\n        type=\"button\"\n        class=\"cqa-p-1 cqa-rounded hover:cqa-bg-neutral-100\"\n        [class.cqa-text-neutral-500]=\"!searchVisible\"\n        [class.cqa-text-indigo-600]=\"searchVisible\"\n        [class.cqa-bg-neutral-100]=\"searchVisible\"\n        (click)=\"toggleSearchVisible()\"\n        [attr.aria-label]=\"searchVisible ? 'Hide folder search' : 'Search folders'\"\n        [attr.aria-pressed]=\"searchVisible\"\n        [title]=\"searchVisible ? 'Hide folder search' : 'Search folders'\"\n      >\n        <mat-icon style=\"font-size:18px;width:18px;height:18px\">search</mat-icon>\n      </button>\n      <button\n        *ngIf=\"allowCreate\"\n        type=\"button\"\n        class=\"cqa-p-1 cqa-rounded hover:cqa-bg-neutral-100 cqa-text-neutral-500\"\n        (click)=\"requestCreate(null)\"\n        [attr.aria-label]=\"labels.newFolder\"\n        [title]=\"labels.newFolder\"\n      >\n        <mat-icon style=\"font-size:18px;width:18px;height:18px\">add</mat-icon>\n      </button>\n    </div>\n  </div>\n\n  <ng-container>\n    <!-- Search (toggled via the search icon in the header) -->\n    <div\n      class=\"cqa-grid\"\n      style=\"transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\"\n      [style.grid-template-rows]=\"searchVisible ? '1fr' : '0fr'\"\n    >\n      <div class=\"cqa-min-h-0\" style=\"overflow: hidden;\">\n        <div class=\"cqa-px-3 cqa-pb-2\">\n          <div class=\"cqa-relative\">\n            <cqa-search-bar\n              size=\"sm\"\n              [fullWidth]=\"true\"\n              [value]=\"searchValue\"\n              [autoFocus]=\"searchVisible\"\n              [placeholder]=\"labels.searchFoldersPlaceholder\"\n              [showClear]=\"true\"\n              (valueChange)=\"onSearchInput($event)\"\n              (cleared)=\"onSearchClear()\"\n            ></cqa-search-bar>\n            <span\n              *ngIf=\"folderSearchLoading\"\n              class=\"cqa-absolute cqa-right-8 cqa-inset-y-0 cqa-flex cqa-items-center\"\n              aria-live=\"polite\"\n              aria-label=\"Searching folders\"\n            >\n              <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 14 }\"></ng-container>\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Organized section header — visually distinct from folder rows so it reads\n         as a view/section toggle rather than a folder item. -->\n    <button\n      type=\"button\"\n      class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-px-3 cqa-py-1 cqa-text-left cqa-text-[#6D6D74] hover:cqa-text-[#3F43EE] focus:cqa-outline-none focus:cqa-text-[#3F43EE] cqa-flex-shrink-0 cqa-uppercase\"\n      (click)=\"toggleFoldersAccordion()\"\n      [attr.aria-expanded]=\"foldersAccordionExpanded\"\n      [attr.aria-label]=\"foldersAccordionExpanded ? 'Collapse organized folders' : 'Expand organized folders'\"\n    >\n      <span class=\"cqa-text-[11px] cqa-font-semibold cqa-tracking-wider\">{{ labels.organized }}</span>\n      <mat-icon\n        style=\"font-size:16px;width:16px;height:16px;transition: transform 200ms ease;\"\n        [style.transform]=\"foldersAccordionExpanded ? 'rotate(0deg)' : 'rotate(-90deg)'\"\n      >expand_more</mat-icon>\n    </button>\n\n    <!-- Tree (folders only — Unorganized sits directly below; tree caps at 60vh and scrolls when overflowing).\n         Scroll-based lazy-loading at the root level: nearing the bottom emits\n         `rootLoadMoreRequested`, which the host responds to by fetching the\n         next page of roots. -->\n    <div\n      class=\"cqa-grid cqa-min-h-0\"\n      style=\"transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\"\n      [style.grid-template-rows]=\"foldersAccordionExpanded ? '1fr' : '0fr'\"\n    >\n      <div class=\"cqa-min-h-0\" style=\"overflow: hidden;\">\n    <div role=\"tree\" class=\"cqa-min-h-0 cqa-max-h-[40vh] cqa-overflow-y-auto cqa-py-1 cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\"\n         (scroll)=\"onTreeScroll($event)\">\n      <!-- Initial-load spinner: only renders when we have no folders yet AND\n           no search active (search has its own inline spinner). -->\n      <div\n        *ngIf=\"rootFoldersLoading && folders.length === 0 && !searchValue?.trim()\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-6\"\n        aria-live=\"polite\"\n      >\n        <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 20 }\"></ng-container>\n      </div>\n      <div\n        *ngIf=\"searchValue?.trim() && rows.length === 0 && !folderSearchLoading\"\n        class=\"cqa-px-3 cqa-py-2 cqa-text-sm cqa-text-neutral-500 cqa-text-center\"\n      >\n        {{ labels.noFoldersFound }}\n      </div>\n      <div\n        *ngIf=\"!rootFoldersLoading && folders.length === 0 && !searchValue?.trim()\"\n        class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-px-4 cqa-py-6 cqa-gap-2\"\n      >\n        <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-h-10 cqa-rounded-full cqa-bg-neutral-100 cqa-text-neutral-400\">\n          <mat-icon style=\"font-size:22px;width:22px;height:22px\">folder_open</mat-icon>\n        </span>\n        <span class=\"cqa-text-sm cqa-font-medium cqa-text-neutral-700\">{{ labels.noFoldersFound }}</span>\n        <span *ngIf=\"allowCreate\" class=\"cqa-text-xs cqa-text-neutral-500 cqa-leading-snug\">\n          {{ labels.noFoldersEmptyDescription }}\n        </span>\n      </div>\n      <ng-container *ngFor=\"let row of rows; let i = index; trackBy: trackByRow\">\n        <!-- Synthetic loading row (lazy fetch in flight) -->\n        <div\n          *ngIf=\"row.kind === 'loading'\"\n          [style.paddingLeft.px]=\"rowIndent(row.depth)\"\n          class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-1.5 cqa-text-sm cqa-text-neutral-500\"\n          aria-live=\"polite\"\n        >\n          <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 14 }\"></ng-container>\n          <span>Loading…</span>\n        </div>\n        <!-- Synthetic load-more row (more children available on backend) -->\n        <button\n          *ngIf=\"row.kind === 'load-more'\"\n          type=\"button\"\n          [style.paddingLeft.px]=\"rowIndent(row.depth)\"\n          class=\"cqa-flex cqa-items-center cqa-w-full cqa-py-1.5 cqa-text-sm cqa-text-indigo-600 hover:cqa-bg-[#D8D9FC] cqa-text-left\"\n          (click)=\"onLoadMore(row.node); $event.stopPropagation()\"\n        >\n          <span>Load more ({{ (row.node.totalChildren ?? 0) - (row.node.children?.length ?? 0) }})</span>\n        </button>\n        <!-- Real folder row -->\n        <div\n          *ngIf=\"row.kind === 'folder'\"\n          role=\"treeitem\"\n          tabindex=\"0\"\n          [attr.aria-expanded]=\"row.hasChildren ? isExpanded(row.node.id) : null\"\n          [attr.aria-selected]=\"isSelected(row.node.id)\"\n          [attr.data-folder-row-id]=\"row.node.id\"\n          [cqaFolderDrop]=\"row.node.id\"\n          [dropEnabled]=\"allowDrop\"\n          (testsDropped)=\"rowDropped(row.node.id, $event)\"\n          (folderDropped)=\"onFolderRowDropped(row.node.id, $event)\"\n          [cqaFolderDrag]=\"row.node.id\"\n          [dragEnabled]=\"allowDrop\"\n          (dragstart)=\"onFolderDragStart(row.node)\"\n          (dragend)=\"onFolderDragEnd()\"\n          (dragover)=\"onFolderRowDragOver(row)\"\n          (dragleave)=\"onFolderRowDragLeave(row)\"\n          (click)=\"onSelect(row.node)\"\n          (contextmenu)=\"openContextMenu(row.node, $event)\"\n          (keydown)=\"onRowKeydown($event, row, i)\"\n          class=\"cqa-group cqa-flex cqa-items-center cqa-gap-1 cqa-pr-3 cqa-py-1.5 cqa-cursor-pointer hover:cqa-bg-[#D8D9FC] focus:cqa-outline-none focus:cqa-bg-[#D8D9FC] cqa-relative\"\n          [style.background-color]=\"renamingId === row.node.id ? '#FFFFFF' : ((isSelected(row.node.id) || contextMenuFolderId === row.node.id) ? '#D8D9FC' : null)\"\n          [style.paddingLeft.px]=\"rowIndent(row.depth)\"\n          [attr.title]=\"folderRowTooltip(row.node)\"\n        >\n          <span\n            *ngIf=\"isSelected(row.node.id)\"\n            class=\"cqa-absolute cqa-left-0 cqa-top-0 cqa-bottom-0 cqa-w-[3px] cqa-bg-indigo-600\"\n          ></span>\n          <button\n            type=\"button\"\n            class=\"cqa-p-0\"\n            [style.color]=\"isSelected(row.node.id) ? '#3F43EE' : '#4C4C51'\"\n            [style.visibility]=\"row.hasChildren ? 'visible' : 'hidden'\"\n            (click)=\"onToggle(row.node, $event)\"\n            [attr.aria-label]=\"isExpanded(row.node.id) ? 'Collapse' : 'Expand'\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">\n              {{ isExpanded(row.node.id) ? 'expand_more' : 'chevron_right' }}\n            </mat-icon>\n          </button>\n          <ng-container *ngTemplateOutlet=\"folderIcon; context: { color: row.node.color }\"></ng-container>\n\n          <ng-container *ngIf=\"renamingId === row.node.id; else nameTpl\">\n            <input\n              type=\"text\"\n              size=\"1\"\n              [attr.data-folder-rename-input]=\"row.node.id\"\n              [attr.maxlength]=\"renameMaxLength\"\n              class=\"cqa-flex-1 cqa-min-w-0 cqa-w-full cqa-px-2 cqa-py-0.5 cqa-rounded cqa-border cqa-bg-white cqa-text-sm cqa-shadow-sm focus:cqa-outline-none focus:cqa-ring-1\"\n              [ngClass]=\"(isRenameDraftValid && !renameLimitFlash)\n                ? 'cqa-border-neutral-300 focus:cqa-border-indigo-400 focus:cqa-ring-indigo-200'\n                : 'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-[#FCA5A5]'\"\n              [attr.aria-invalid]=\"!isRenameDraftValid || renameLimitFlash\"\n              [(ngModel)]=\"renameDraft\"\n              (keydown)=\"onRenameKey($event, row.node)\"\n              (keypress)=\"$event.stopPropagation()\"\n              (keyup)=\"$event.stopPropagation()\"\n              (blur)=\"commitRename(row.node)\"\n              (click)=\"$event.stopPropagation()\"\n            />\n          </ng-container>\n          <ng-template #nameTpl>\n            <span\n              class=\"cqa-flex-1 cqa-text-sm cqa-truncate\"\n              [style.color]=\"isSelected(row.node.id) ? '#3F43EE' : '#4C4C51'\"\n              (dblclick)=\"beginRename(row.node, $event)\"\n            >{{ row.node.name }}</span>\n          </ng-template>\n\n          <!-- Saving indicator: replaces the count while the host's rename/save\n               API call is in flight, so the user gets immediate feedback. -->\n          <span\n            *ngIf=\"isFolderSaving(row.node.id)\"\n            class=\"cqa-flex cqa-items-center cqa-ml-1 cqa-flex-shrink-0\"\n            aria-live=\"polite\"\n            [attr.aria-label]=\"'Saving ' + row.node.name\"\n          >\n            <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 12 }\"></ng-container>\n          </span>\n\n          <!-- Count shown at rest; hidden on row hover when delete is allowed -->\n          <span\n            *ngIf=\"!isFolderSaving(row.node.id) && showCounts && row.node.count != null\"\n            class=\"cqa-text-xs cqa-tabular-nums cqa-ml-1\"\n            [style.color]=\"isSelected(row.node.id) ? '#3F43EE' : '#4C4C51'\"\n            [class.group-hover:cqa-hidden]=\"allowDelete\"\n          >{{ row.node.count }}</span>\n\n          <button\n            *ngIf=\"hasAnyContextAction\"\n            type=\"button\"\n            class=\"cqa-p-0.5 cqa-rounded hover:cqa-bg-neutral-200\"\n            [style.color]=\"isSelected(row.node.id) || contextMenuFolderId === row.node.id ? '#3F43EE' : '#4C4C51'\"\n            [class.cqa-hidden]=\"contextMenuFolderId !== row.node.id\"\n            [class.group-hover:cqa-inline-flex]=\"true\"\n            [class.cqa-inline-flex]=\"contextMenuFolderId === row.node.id\"\n            (click)=\"openContextMenu(row.node, $event)\"\n            [attr.aria-label]=\"'Open actions for ' + row.node.name\"\n            [attr.aria-haspopup]=\"'menu'\"\n            [attr.aria-expanded]=\"contextMenuFolderId === row.node.id\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">more_horiz</mat-icon>\n          </button>\n        </div>\n      </ng-container>\n      <!-- Root-level pagination is now driven by scroll (see `(scroll)` on the\n           tree container above). Per-folder children retain the explicit\n           \"Load more\" button rendered inside the rows loop above, since\n           subtrees aren't independently scrollable. -->\n      <!-- Pagination spinner — visible only when fetching an additional page\n           of roots (folders.length > 0 distinguishes from initial-load case). -->\n      <div\n        *ngIf=\"rootFoldersLoading && folders.length > 0 && !searchValue?.trim()\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-2\"\n        aria-live=\"polite\"\n      >\n        <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 14 }\"></ng-container>\n      </div>\n    </div>\n      </div>\n    </div>\n\n    <!-- Divider between folder tree and pinned Unorganized tab -->\n    <div\n      aria-hidden=\"true\"\n      class=\"cqa-mx-3 cqa-flex-shrink-0\"\n      style=\"height: 1px; background-color: #E5E7EB; margin-top: 6px; margin-bottom: 6px;\"\n    ></div>\n\n    <!-- Unorganized — pinned below the scrollable folder tree so it stays visible regardless of folder count -->\n    <div\n      role=\"treeitem\"\n      tabindex=\"0\"\n      [attr.aria-selected]=\"isSelected(null)\"\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-1.5 cqa-cursor-pointer hover:cqa-bg-[#D8D9FC] focus:cqa-outline-none focus:cqa-bg-[#D8D9FC] cqa-relative cqa-flex-shrink-0\"\n      [style.background-color]=\"isSelected(null) ? '#D8D9FC' : null\"\n      [cqaFolderDrop]=\"null\"\n      [dropEnabled]=\"allowDrop\"\n      (testsDropped)=\"rowDropped(null, $event)\"\n      (folderDropped)=\"onFolderRowDropped(null, $event)\"\n      (click)=\"onSelectUnorganized()\"\n    >\n      <span\n        *ngIf=\"isSelected(null)\"\n        class=\"cqa-absolute cqa-left-0 cqa-top-0 cqa-bottom-0 cqa-w-[3px] cqa-bg-indigo-600\"\n      ></span>\n      <mat-icon [style.color]=\"isSelected(null) ? '#3F43EE' : '#4C4C51'\" style=\"font-size:16px;width:16px;height:16px\">inbox</mat-icon>\n      <span class=\"cqa-flex-1 cqa-text-sm\" [style.color]=\"isSelected(null) ? '#3F43EE' : '#4C4C51'\">{{ labels.unorganized }}</span>\n      <span *ngIf=\"showCounts\" class=\"cqa-text-xs cqa-tabular-nums\" [style.color]=\"isSelected(null) ? '#3F43EE' : '#4C4C51'\">{{ unorganizedCount }}</span>\n    </div>\n\n    <!-- Folder context menu (right-click / ellipsis). A 0×0 fixed-position\n         anchor at the click coords drives a cdkConnectedOverlay; CDK's\n         flexible-connected positioning auto-flips up/left when the menu\n         would overflow the viewport (last-folder-near-bottom case). -->\n    <div #ctxAnchor cdkOverlayOrigin\n         class=\"cqa-fixed cqa-w-0 cqa-h-0 cqa-pointer-events-none\"\n         [style.left.px]=\"contextMenuPosition.x\"\n         [style.top.px]=\"contextMenuPosition.y\"></div>\n\n    <ng-template\n      cdkConnectedOverlay\n      [cdkConnectedOverlayOrigin]=\"ctxAnchor\"\n      [cdkConnectedOverlayOpen]=\"contextMenuFolderId !== null\"\n      [cdkConnectedOverlayPositions]=\"contextMenuPositions\"\n      [cdkConnectedOverlayHasBackdrop]=\"false\"\n      [cdkConnectedOverlayFlexibleDimensions]=\"false\"\n      [cdkConnectedOverlayPush]=\"true\"\n      (overlayOutsideClick)=\"onOverlayOutsideClick()\"\n      (detach)=\"closeContextMenu()\"\n    >\n      <!-- The lib's tailwind config sets important: '.cqa-ui-root', which\n           emits descendant selectors like `.cqa-ui-root .cqa-bg-white`.\n           CDK Overlay teleports this template into the global overlay\n           container (outside the host's cqa-ui-root), so we wrap the menu in\n           an ancestor cqa-ui-root div to re-establish the utility scope. -->\n      <div class=\"cqa-ui-root\">\n      <div\n        role=\"menu\"\n        class=\"cqa-min-w-[180px] cqa-bg-white cqa-border cqa-border-neutral-200 cqa-rounded-md cqa-shadow-lg cqa-py-1\"\n        (click)=\"$event.stopPropagation()\"\n        (contextmenu)=\"$event.preventDefault(); $event.stopPropagation()\"\n      >\n        <ng-container *ngIf=\"folderById(contextMenuFolderId) as menuNode\">\n          <button\n            *ngIf=\"allowCreate\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-w-full cqa-px-3 cqa-py-1.5 cqa-text-sm cqa-text-neutral-800 hover:cqa-bg-indigo-50 cqa-text-left\"\n            (click)=\"onContextCreateSubfolder(menuNode)\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">create_new_folder</mat-icon>\n            <span>{{ labels.folderMenuCreateSubfolder }}</span>\n          </button>\n          <button\n            *ngIf=\"allowRename\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-w-full cqa-px-3 cqa-py-1.5 cqa-text-sm cqa-text-neutral-800 hover:cqa-bg-indigo-50 cqa-text-left\"\n            (click)=\"onContextRename(menuNode)\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">edit</mat-icon>\n            <span>{{ labels.folderMenuRename }}</span>\n          </button>\n          <button\n            *ngIf=\"allowMove\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-w-full cqa-px-3 cqa-py-1.5 cqa-text-sm cqa-text-neutral-800 hover:cqa-bg-indigo-50 cqa-text-left\"\n            (click)=\"onContextMove(menuNode)\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">drive_file_move</mat-icon>\n            <span>{{ labels.folderMenuMove }}</span>\n          </button>\n          <button\n            *ngIf=\"allowDuplicate\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-w-full cqa-px-3 cqa-py-1.5 cqa-text-sm cqa-text-neutral-800 hover:cqa-bg-indigo-50 cqa-text-left\"\n            (click)=\"onContextDuplicate(menuNode)\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">content_copy</mat-icon>\n            <span>{{ labels.folderMenuDuplicate }}</span>\n          </button>\n          <div *ngIf=\"allowDelete && (allowCreate || allowRename || allowMove || allowDuplicate)\" class=\"cqa-h-px cqa-my-1\" style=\"background-color: #E5E7EB;\"></div>\n          <button\n            *ngIf=\"allowDelete\"\n            type=\"button\"\n            role=\"menuitem\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-w-full cqa-px-3 cqa-py-1.5 cqa-text-sm cqa-text-red-600 hover:cqa-bg-red-50 cqa-text-left\"\n            (click)=\"onContextDelete(menuNode)\"\n          >\n            <mat-icon style=\"font-size:16px;width:16px;height:16px\">delete_outline</mat-icon>\n            <span>{{ labels.folderMenuDelete }}</span>\n          </button>\n        </ng-container>\n      </div>\n      </div>\n    </ng-template>\n\n  </ng-container>\n  </div>\n</aside>\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n  OnDestroy,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { DynamicFilterItem, DynamicFilterComponent } from '../../filters/dynamic-filter/dynamic-filter.component';\nimport { DynamicTableColumn } from '../../table/dynamic-table/dynamic-table.component';\nimport { ColumnVisibilityConfig } from '../../column-visibility/column-visibility.component';\nimport { TableAction } from '../../table-action-toolbar/table-action-toolbar.component';\nimport { EmptyStateConfig } from '../../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';\nimport { DialogService } from '../../dialog/dialog.service';\nimport {\n  DEFAULT_MODULAR_CONFIG,\n  DEFAULT_MODULAR_LABELS,\n  DEFAULT_REORDER_LABELS,\n  FOLDER_COLUMN_FIELD_ID,\n  FolderCreatedPayload,\n  FolderDeleteRequestedPayload,\n  FolderDeleteStrategy,\n  FolderDeletedPayload,\n  FolderIdAccessor,\n  FolderNode,\n  FolderRenamedPayload,\n  FolderMoveRequestedPayload,\n  FolderMovedPayload,\n  FolderDuplicateRequestedPayload,\n  ModularConfig,\n  ModularLabels,\n  ReorderLabels,\n  ReorderSavePayload,\n  TestsMovedPayload,\n  BulkActionInvokedPayload,\n} from './modular-table-template.models';\nimport { MoveToFolderDialogComponent } from './dialogs/move-to-folder-dialog.component';\nimport { NewFolderDialogComponent } from './dialogs/new-folder-dialog.component';\nimport { DeleteFolderDialogComponent } from './dialogs/delete-folder-dialog.component';\n\n@Component({\n  selector: 'cqa-modular-table-template',\n  templateUrl: './modular-table-template.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ModularTableTemplateComponent implements OnInit, OnChanges, OnDestroy {\n  // Search bar inputs\n  @Input() searchPlaceholder: string = 'Search components';\n  @Input() searchValue: string = '';\n  @Input() showClear: boolean = true;\n  @Input() showSearchBar: boolean = true;\n  @Input() showExportButton: boolean = false;\n  @Input() isExporting: boolean = false;\n  // Search bar outputs\n  @Output() onSearchChange = new EventEmitter<string>();\n  @Output() onExportClick = new EventEmitter<{ type: 'local' | 'email'; emails?: string[]; framework?: 'WEBDRIVER_IO' | 'SELENIUM_JAVA'; selectedItems: any[] } | void>();\n  // Filter outputs\n  @Output() onApplyFilterClick = new EventEmitter<any>();\n  @Output() onResetFilterClick = new EventEmitter<void>();\n  @Output() onClearAll = new EventEmitter<void>();\n  @Output() removeChip = new EventEmitter<any>();\n\n  // Filter inputs\n  @Input() filterConfig: DynamicFilterItem[] = [];\n  @Input() filterModel: Record<string, any> = {};\n  @Input() showFilterPanel: boolean = false;\n  @Input() showFilterButton: boolean = true;\n\n  // Other buttons input (array of button templates/components)\n  @Input() otherButtons: TemplateRef<any>[] = [];\n  \n  // Other dropdown buttons input (array of dropdown button templates/components)\n  @Input() otherDropDownButtons: TemplateRef<any>[] = [];\n  \n  // Other select dropdown buttons input (array of select dropdown button templates/components)\n  @Input() otherSelectDropDownButtons: TemplateRef<any>[] = [];\n  \n  // Legacy single button inputs (deprecated, kept for backward compatibility)\n  /** @deprecated Use otherButtons array instead */\n  @Input() otherButtonLabel: string = 'Other Button';\n  /** @deprecated Use otherButtons array instead */\n  @Input() otherButtonVariant: 'filled' | 'outlined' | 'text' | 'elevated' | 'tonal' | 'grey-solid' = 'filled';\n  /** @deprecated Use otherButtons array instead */\n  @Input() showOtherButton: boolean = true;\n  \n  // Action menu button (three-dot menu in table rows)\n  @Input() showActionButton: boolean = true;\n\n  // Settings and refresh buttons\n  @Input() showSettingsButton: boolean = true;\n  @Input() showAutoRefreshButton: boolean = true;\n\n  // View-mode toggle (List | Modular). Hidden by default for backward compatibility.\n  @Input() showViewModeToggle: boolean = false;\n  @Input() viewMode: 'list' | 'modular' = 'list';\n  @Input() viewModeLabels: { list: string; modular: string } = { list: 'List', modular: 'Modular' };\n  @Output() viewModeChange = new EventEmitter<'list' | 'modular'>();\n\n  // Stable reference fed to <cqa-segment-control [segments]>. A getter here\n  // allocates a new array each CD tick, which the segment control then sees as\n  // a changed Input — its updateIndicator runs inside a queueMicrotask, the\n  // zone re-ticks via onMicrotaskEmpty, and the loop pegs CPU at 100% with\n  // HTTP requests starved. Rebuilt only when viewModeLabels actually changes.\n  viewModeSegments: Array<{ label: string; value: string; icon?: string }> = [\n    { label: 'List', value: 'list', icon: 'view_list' },\n    { label: 'Modular', value: 'modular', icon: 'folder' },\n  ];\n\n  onViewModeChange(value: string): void {\n    const next = value === 'modular' ? 'modular' : 'list';\n    if (next !== this.viewMode) {\n      this.viewMode = next;\n      this.viewModeChange.emit(next);\n    }\n  }\n\n  // Data input\n  @Input() data: any[] = [];\n\n  // Empty state inputs\n  @Input() isEmptyState: boolean = false;\n  @Input() emptyStateConfig: EmptyStateConfig = {\n    title: 'No Data Available Yet',\n    description: 'Run or upload your first test to see your analytics and trends here. Watch your quality metrics come to life with real-time insights.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: [{ label: 'Run Test Suite', variant: 'filled' }],\n  };\n\n  // Action bar inputs\n  @Input() actions: TableAction[] = [\n    { \n      id: 'delete', \n      label: 'Delete', \n      icon: 'delete', \n      tooltip: 'Delete selected',\n      onClick: (context) => {\n        console.log('Delete action clicked:', context);\n      }\n    },\n    { \n      id: 'edit', \n      label: 'Edit', \n      icon: 'edit', \n      tooltip: 'Edit selected',\n      onClick: (context) => {\n        console.log('Edit action clicked:', context);\n      }\n    },\n    { \n      id: 'add-tag', \n      label: 'Add Tag', \n      icon: 'local_offer', \n      tooltip: 'Add tags',\n      onClick: (context) => {\n        console.log('Add tag action clicked:', context);\n      }\n    },\n    { \n      id: 'remove-tag', \n      label: 'Remove Tag', \n      icon: 'label_off', \n      tooltip: 'Remove tags',\n      onClick: (context) => {\n        console.log('Remove tag action clicked:', context);\n      }\n    },\n  ];\n\n  // Chips inputs\n  @Input() chips: Array<{ key?: string; label?: string; text: string; fullText?: string; hasMore?: boolean }> = [];\n  @Input() filterApplied: boolean = false;\n\n  // Table inputs\n  @Input() columns: DynamicTableColumn[] = [];\n  @Input() rowSelectable?: (row: any) => boolean;\n  @Input() selectedAutoRefreshInterval: number = 0;\n  @Input() pageIndex: number = 0;\n  @Input() pageSize: number = 10;\n  @Input() pageSizeOptions: number[] = [10, 20, 40, 60, 80];\n  @Input() pageSizeMenuDirection: 'auto' | 'up' | 'down' = 'auto';\n  // Server-side pagination controls\n  @Input() serverSidePagination: boolean = false;\n  @Input() totalElements: number = 0;\n  @Output() pageChange = new EventEmitter<{ pageIndex: number; pageSize: number }>();\n  /**\n   * When false, header sort does not reorder rows locally (use with serverSidePagination + sortChange).\n   * Default true for backward compatibility.\n   */\n  @Input() enableLocalSort: boolean = true;\n  @Output() sortChange = new EventEmitter<{\n    fieldId: string;\n    fieldValue?: string;\n    direction: 'asc' | 'desc' | null;\n  }>();\n  // Loader controls (passed down to dynamic table)\n  @Input() isTableLoading?: boolean;\n  @Input() isTableDataLoading?: boolean;\n  // Backward-compatibility flag; if provided, dynamic table will use it when specific flags are undefined\n\n  // Optional getter for JSON path per cell. When provided, double-clicking a cell copies the path.\n  @Input() cellJsonPathGetter?: (rowIndex: number, colId: string, row: any) => string;\n\n  // Optional handler called when a JSON path is copied from a table cell\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: string }) => void;\n\n  // Selected items (full objects) for maintaining selection across pagination (server-side)\n  @Input() selectedItems: any[] = [];\n\n  /**\n   * When true, the action toolbar renders the \"Select all\" affordance. Defaults to false\n   * for now — host opts in. Matches the current product requirement to hide Select All.\n   */\n  @Input() showSelectAllInToolbar: boolean = false;\n  /**\n   * When true, the action toolbar renders the dismiss (×) affordance. Defaults to false\n   * for now — host opts in. Matches the current product requirement to hide Cancel.\n   */\n  @Input() showDismissInToolbar: boolean = false;\n  /** Bound to the toolbar's \"Select all\" checkbox — drives the checked state. */\n  @Input() allSelectedInToolbar: boolean = false;\n\n  // Internal state for column visibility\n  private _columnVisibility: ColumnVisibilityConfig = {};\n  private _cachedVisibilityColumns: Array<{ id: string; label: string }> = [];\n  filteredRows: any[] = [];\n  pagedRows: any[] = [];\n\n  // ============================================================================\n  // Folder / modular inputs\n  // ============================================================================\n  @Input() folders: FolderNode[] = [];\n  /** Host-provided snapshot of root-level folders for the \"Organized\" grid.\n   *  When set, takes precedence over `this.folders` for `rootFolderTiles` so\n   *  the Organized section stays stable while sidebar search swaps `folders`\n   *  to a filtered result set. Mirrors the host-driven fallback pattern used\n   *  by `selectedFolderNode` (subfolders) and `selectedFolderTrail` (breadcrumb). */\n  @Input() rootFolders: FolderNode[] | null = null;\n  @Input() selectedFolderId: number | null = null;\n  @Input() expandedFolderIds: number[] = [];\n  @Input() unorganizedCount: number = 0;\n  @Input() folderIdAccessor: FolderIdAccessor = (row: any) => row?.folderId ?? null;\n  @Input() modularConfig: ModularConfig = { ...DEFAULT_MODULAR_CONFIG };\n  @Input() modularLabels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  @Input() bulkActions: TableAction[] = [];\n  @Input() sidebarCollapsed: boolean = false;\n  /** Controls whether the \"Subfolders in {parent}\" section is expanded.\n   *  Two-way bindable as `[(subfolderSectionExpanded)]`. Defaults to true. */\n  @Input() subfolderSectionExpanded: boolean = true;\n  /** Controls whether the root-view \"Organized\" folder grid is expanded.\n   *  Two-way bindable as `[(organizedSectionExpanded)]`. Defaults to true. */\n  @Input() organizedSectionExpanded: boolean = true;\n  /** Lazy-load: when true, the sidebar emits `searchChange` and skips its\n   *  local name filter so the host can serve search results from the backend. */\n  @Input() serverSideSearch: boolean = false;\n  /** Lazy-load: backend-reported total root folders. Drives the sidebar's\n   *  top-level \"Load more\" affordance when `folders.length < rootTotal`. */\n  @Input() rootTotal: number = 0;\n  /** Lazy-load: true while the host is fetching server-side folder-search\n   *  results. Forwarded to the sidebar so it can render a search spinner. */\n  @Input() folderSearchLoading: boolean = false;\n  /** Seeded value for the sidebar's search input. Exposed so hosts can restore\n   *  an in-flight folder-search across sidebar destroy/re-create cycles (e.g.,\n   *  toggling out of and back into modular view). */\n  @Input() folderSearchValue: string = '';\n  /** Lazy-load: true while a root-page fetch is in flight (initial load OR\n   *  the scroll-driven \"load more\" pagination). Drives the loading indicator\n   *  the modular grid renders at the right edge of the Organized row, and is\n   *  forwarded to the sidebar for its own loading affordance. */\n  @Input() rootFoldersLoading: boolean = false;\n  /** Folder ids whose host-side save (rename / move / etc.) is in flight.\n   *  Forwarded to the sidebar for loading state. */\n  @Input() savingFolderIds: Array<number> = [];\n  /** Override for the currently-selected folder node. Used as a fallback when\n   *  `findFolder(folders, selectedFolderId)` misses — e.g., during sidebar\n   *  search when `folders` holds only the matched results, the selected\n   *  folder may not be among them, but its breadcrumb / header label still\n   *  needs to render. The host owns the lookup against its full folder map. */\n  @Input() selectedFolderNode: FolderNode | null = null;\n  /** Host-provided breadcrumb snapshot for the selected folder. Used as a\n   *  fallback in `breadcrumbTrail` when `buildTrail` against `this.folders`\n   *  yields empty — the canonical case is sidebar search, where `folders`\n   *  is the search-results list and the selected folder's ancestors aren't\n   *  present. The host walks `parentId` chains to build this; partial trails\n   *  are acceptable when ancestors haven't been fetched yet. */\n  @Input() selectedFolderTrail: FolderNode[] | null = null;\n\n  /**\n   * When true (default), the library opens its own Move dialog for convenience\n   * during testing. Hosts taking over API + UX should set this to `false` and\n   * listen on `moveRequested` to render their own.\n   */\n  @Input() useInternalDialogs: boolean = true;\n\n  // ============================================================================\n  // Folder / modular outputs\n  // ============================================================================\n  @Output() folderSelected = new EventEmitter<number | null>();\n  @Output() folderExpansionToggled = new EventEmitter<{ id: number; expanded: boolean }>();\n  /** Lazy-load: re-emitted from the sidebar when the user expands a node whose\n   *  children haven't been fetched yet. Host responds by fetching that subtree. */\n  @Output() folderChildrenRequested = new EventEmitter<number>();\n  /** Lazy-load: re-emitted when the user clicks the per-folder \"Load more\". */\n  @Output() folderLoadMoreRequested = new EventEmitter<{ id: number; nextPage: number }>();\n  /** Lazy-load: re-emitted when the user clicks the top-level \"Load more\". */\n  @Output() rootLoadMoreRequested = new EventEmitter<void>();\n  /** Lazy-load: debounced sidebar-search term. Consumed by hosts that have\n   *  set `serverSideSearch=true` to refetch the tree from the backend. */\n  @Output() folderSearchChange = new EventEmitter<string>();\n  @Output() folderCreated = new EventEmitter<FolderCreatedPayload>();\n  /** Emitted when the user clicks \"+ New folder\"; host should open a creation modal. */\n  @Output() folderCreateRequested = new EventEmitter<{ parentId: number | null }>();\n  @Output() folderRenamed = new EventEmitter<FolderRenamedPayload>();\n  /**\n   * Fires after the user confirms folder deletion via the internal dialog (or\n   * immediately, when `useInternalDialogs` is false and the host drives the UX).\n   * Payload now includes the user's chosen `strategy` for what happens to the\n   * folder's test cases.\n   */\n  @Output() folderDeleted = new EventEmitter<FolderDeletedPayload>();\n  @Output() testsMoved = new EventEmitter<TestsMovedPayload>();\n\n  // ---------------------------------------------------------------------------\n  // Bulk action toolbar surface — naming mirrors cqa-table-template so consumers\n  // get the same events from either component (plus the folder events below).\n  // ---------------------------------------------------------------------------\n\n  /** Fires on raw toolbar action click — *before* any internal dialog opens. */\n  @Output() bulkActionClick = new EventEmitter<{ id: string; selected: any[] }>();\n  /** Fires when the toolbar's \"Select all\" is toggled. */\n  @Output() bulkSelectAllChange = new EventEmitter<boolean>();\n  /** Fires when the toolbar's dismiss (×) is clicked. */\n  @Output() bulkDismiss = new EventEmitter<void>();\n\n  /**\n   * Fires *after* the library-internal move-to-folder dialog resolves with a\n   * user confirmation, OR immediately for non-dialog bulk actions supplied by\n   * the host. Hosts with their own UX should listen on `bulkActionClick` +\n   * `moveRequested` and treat this as the \"confirmed\" signal.\n   */\n  @Output() bulkActionInvoked = new EventEmitter<BulkActionInvokedPayload>();\n\n  @Output() sidebarCollapsedChange = new EventEmitter<boolean>();\n  @Output() subfolderSectionExpandedChange = new EventEmitter<boolean>();\n  @Output() organizedSectionExpandedChange = new EventEmitter<boolean>();\n\n  toggleSubfolderSection(): void {\n    this.subfolderSectionExpanded = !this.subfolderSectionExpanded;\n    this.subfolderSectionExpandedChange.emit(this.subfolderSectionExpanded);\n  }\n\n  toggleOrganizedSection(): void {\n    this.organizedSectionExpanded = !this.organizedSectionExpanded;\n    this.organizedSectionExpandedChange.emit(this.organizedSectionExpanded);\n  }\n\n  // ============================================================================\n  // Row-reorder surface\n  // ============================================================================\n  /** When true, renders a \"Reorder\" button in the toolbar. Host-driven. */\n  @Input() showReorderButton: boolean = false;\n  /**\n   * Host flips this true while its bulk-update API call is in-flight. The\n   * component keeps the reorder UI pinned (\"Saving...\") while true and exits\n   * reorder mode when it flips back to false (the \"future API call\" hook).\n   */\n  @Input() reorderSaving: boolean = false;\n  /** Partial override for the default reorder labels (\"Reorder\", \"Done\", etc.). */\n  @Input() set reorderLabels(partial: Partial<ReorderLabels> | undefined) {\n    this._reorderLabels = { ...DEFAULT_REORDER_LABELS, ...(partial || {}) };\n  }\n  get reorderLabels(): ReorderLabels {\n    return this._reorderLabels;\n  }\n  private _reorderLabels: ReorderLabels = { ...DEFAULT_REORDER_LABELS };\n\n  /** Fires when the user clicks \"Reorder\" and the component enters reorder mode. */\n  @Output() reorderStart = new EventEmitter<void>();\n  /** Fires when the user clicks \"Cancel\" — the original order is already restored. */\n  @Output() reorderCancel = new EventEmitter<void>();\n  /**\n   * Fires when the user clicks \"Done\". Host should take `orderedItems`, call its\n   * bulk-update API, refresh `[data]`, and flip `reorderSaving` back to `false` —\n   * the component will then exit reorder mode.\n   *\n   * Note: for server-side pagination, `orderedItems` is the *current page slice*,\n   * not the full dataset — same as the in-memory view the user was dragging.\n   */\n  @Output() reorderSave = new EventEmitter<ReorderSavePayload>();\n\n  /** Internal — true while the user is in reorder mode. */\n  isReordering: boolean = false;\n  /** Snapshot of `pagedRows` taken on enter; used to revert on cancel. */\n  private reorderSnapshot: any[] | null = null;\n  /** Draft of the reordered rows (current working state). */\n  private reorderDraft: any[] | null = null;\n  /** Auto-refresh interval captured on enter, so we can restore on cancel/done. */\n  private reorderSavedAutoRefresh: number = 0;\n  /** True after Done has been clicked, awaiting the host's `reorderSaving` → false flip. */\n  private reorderAwaitingSaveFlip: boolean = false;\n\n  /**\n   * Fires when the user clicks the \"Move to folder\" bulk action — *before* the\n   * internal dialog opens. Hosts that want to render their own modal should\n   * set `useInternalDialogs = false` and listen here.\n   */\n  @Output() moveRequested = new EventEmitter<{\n    testIds: Array<string | number>;\n    selected: any[];\n    currentFolderId: number | null;\n    folders: FolderNode[];\n  }>();\n\n  /** Fires whenever the component's `selectedItems` changes from within (Select All / Dismiss). */\n  @Output() selectedItemsChange = new EventEmitter<any[]>();\n\n  /**\n   * Fires when the user clicks a folder's delete affordance — *before* the\n   * internal confirmation dialog opens. Hosts owning the UX listen here.\n   * Payload includes `testCount` + `hasParent` so hosts can render the right\n   * options in their own modal.\n   */\n  @Output() folderDeleteRequested = new EventEmitter<FolderDeleteRequestedPayload>();\n\n  /**\n   * Fires when the user picks \"Move folder\" from a folder row's context menu —\n   * *before* any dialog opens. Hosts owning the UX listen here with\n   * `useInternalDialogs = false` and open their own folder picker.\n   */\n  @Output() folderMoveRequested = new EventEmitter<FolderMoveRequestedPayload>();\n  /**\n   * Fires after the user confirms a folder move via the internal picker\n   * (or immediately when `useInternalDialogs = false` and the host drives it).\n   */\n  @Output() folderMoved = new EventEmitter<FolderMovedPayload>();\n  /**\n   * Fires when the user picks \"Duplicate folder\" from a folder row's context menu.\n   * The library doesn't own persistence, so the host is expected to clone the\n   * folder's subtree server-side and *reference* (not copy) the test cases.\n   */\n  @Output() folderDuplicateRequested = new EventEmitter<FolderDuplicateRequestedPayload>();\n\n  constructor(private cdr: ChangeDetectorRef, private dialogService: DialogService) {}\n  private pendingFilters: any;\n  private appliedFilters: any;\n  private autoRefreshTimer?: ReturnType<typeof setInterval>;\n  @Output() onReload = new EventEmitter<void>();\n  @Output() onAutoRefreshClick = new EventEmitter<void>();\n  @Output() columnVisibilityChange = new EventEmitter<ColumnVisibilityConfig>();\n  @Output() autoRefreshIntervalChange = new EventEmitter<number>();\n  @ViewChild(DynamicFilterComponent) dynamicFilterComponent?: DynamicFilterComponent;\n\n  // Derived columns with visibility applied.\n  computedColumns: DynamicTableColumn[] = [];\n  // Auto-generated visibility columns from columns input\n  visibilityColumns: Array<{ id: string; label: string }> = [];\n\n  private updateComputedColumns(): void {\n    const visibility = this._columnVisibility || {};\n    const source = this.columns || [];\n    const mapped = source.map(col => {\n      if (['checkbox', 'actions'].includes(col.fieldId)) {\n        return col;\n      }\n      const show = visibility[col.fieldId];\n      return { ...col, isShow: show !== false };\n    });\n\n    if (this.modularConfig?.showFolderColumn && !mapped.some(c => c.fieldId === FOLDER_COLUMN_FIELD_ID)) {\n      const folderShow = visibility[FOLDER_COLUMN_FIELD_ID];\n      const folderCol: DynamicTableColumn = {\n        ...this.buildFolderColumn(),\n        isShow: folderShow !== false,\n      };\n      // Insert before the trailing 'actions' column when present so the folder\n      // column reads as the last data column rather than after the action menu.\n      const actionsIdx = mapped.findIndex(c => c.fieldId === 'actions');\n      if (actionsIdx >= 0) {\n        mapped.splice(actionsIdx, 0, folderCol);\n      } else {\n        mapped.push(folderCol);\n      }\n    }\n\n    this.computedColumns = mapped;\n    this.cdr.markForCheck();\n  }\n\n  private buildFolderColumn(): DynamicTableColumn {\n    return {\n      fieldId: FOLDER_COLUMN_FIELD_ID,\n      fieldName: this.modularLabels?.folderColumnLabel || 'Folder',\n      // Lets the dynamic table sort/filter on the resolved name without going\n      // through render() — also makes `row.folderName` a first-class field\n      // alongside row.priority etc. for downstream code.\n      fieldValue: 'folderName',\n      sortable: true,\n      // isDefault === false marks the column as \"user-toggleable\" — it shows up\n      // in mapVisibilityColumns and therefore in the settings dropdown.\n      isDefault: false,\n      render: (row: any) => this.renderFolderCell(row),\n    };\n  }\n\n  private resolveFolderName(row: any): string {\n    if (row && typeof row.folderName === 'string' && row.folderName) {\n      return row.folderName;\n    }\n    const folderId = this.folderIdAccessor ? this.folderIdAccessor(row) : row?.folderId;\n    const node = folderId != null ? this.findFolder(this.folders, folderId as number) : null;\n    return node?.name || this.modularLabels?.unorganizedRowLabel || 'Unorganized';\n  }\n\n  /**\n   * Attach a derived `folderName` to each row when the host hasn't supplied\n   * one. Mutates in place so the value is available everywhere the row flows\n   * — sort, filter, column renders, exports — alongside fields like priority.\n   */\n  private enrichRowsWithFolderName(rows: any[]): void {\n    if (!rows || rows.length === 0) return;\n    for (const row of rows) {\n      if (!row || typeof row !== 'object') continue;\n      if (typeof row.folderName === 'string' && row.folderName) continue;\n      row.folderName = this.resolveFolderName(row);\n    }\n  }\n\n  private renderFolderCell(row: any): string {\n    const name = this.resolveFolderName(row);\n    const escaped = name.replace(/[&<>\"']/g, ch => ({\n      '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#39;',\n    } as Record<string, string>)[ch]);\n    return (\n      `<span class=\"cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-text-[#6D6D74]\">` +\n        `<svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">` +\n          `<path d=\"M12.9583 10.4585C12.9583 10.79 12.8266 11.108 12.5921 11.3424C12.3577 11.5768 12.0398 11.7085 11.7083 11.7085H1.70825C1.37673 11.7085 1.05879 11.5768 0.824368 11.3424C0.589948 11.108 0.458252 10.79 0.458252 10.4585V1.7085C0.458252 1.37698 0.589948 1.05903 0.824368 0.824613C1.05879 0.590192 1.37673 0.458496 1.70825 0.458496H4.83325L6.08325 2.3335H11.7083C12.0398 2.3335 12.3577 2.46519 12.5921 2.69961C12.8266 2.93403 12.9583 3.25198 12.9583 3.5835V10.4585Z\" stroke=\"currentColor\" stroke-width=\"0.916667\"/>` +\n        `</svg>` +\n        `<span>${escaped}</span>` +\n      `</span>`\n    );\n  }\n\n  private updateVisibilityColumns(): void {\n    this._cachedVisibilityColumns = this.mapVisibilityColumns();\n    this.visibilityColumns = this._cachedVisibilityColumns;\n    this.cdr.markForCheck();\n  }\n\n  // Controlled column visibility: parent can seed and push updates.\n  @Input() set columnVisibility(cfg: ColumnVisibilityConfig | undefined) {\n    if (cfg) {\n      this._columnVisibility = { ...cfg };\n      this.updateComputedColumns();\n      this.cdr.markForCheck();\n    }\n  }\n  get columnVisibility(): ColumnVisibilityConfig {\n    return this._columnVisibility;\n  }\n  ngOnInit(): void {\n    this.initializeComponent();\n    this.updateComputedColumns();\n    this.updateVisibilityColumns();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['data'] || changes['isEmptyState']) {\n      this.initializeComponent();\n    }\n    if (changes['columns'] || changes['modularConfig'] || changes['modularLabels']) {\n      this.initializeColumnVisibility();\n      this.updateComputedColumns();\n      this.updateVisibilityColumns();\n    }\n    if (changes['folders'] && !changes['folders'].firstChange) {\n      // Folder name lookup lives inside the column's render(); rebuild the\n      // columns array so the dynamic table's OnPush CD picks up the new ref\n      // and re-invokes render() with the latest folders. Also refresh any\n      // rows we've previously enriched so sort/filter on row.folderName\n      // reflects the new folder list.\n      this.enrichRowsWithFolderName(this.data);\n      this.updateComputedColumns();\n    }\n    if (changes['selectedFolderId'] && !changes['selectedFolderId'].firstChange) {\n      // Per the approved plan: clear selection and reset pagination on folder change.\n      this.selectedItems = [];\n      this.pageIndex = 0;\n      this.rebuildFilteredRows();\n      this.applyPagination();\n    }\n    if (changes['viewMode'] && !changes['viewMode'].firstChange) {\n      // Switching between list and modular changes whether the folder filter applies.\n      this.pageIndex = 0;\n      this.rebuildFilteredRows();\n      this.applyPagination();\n    }\n    if (changes['selectedItems'] || changes['data']) {\n      this.restoreSelectionState();\n    }\n    if (changes['viewModeLabels']) {\n      this.viewModeSegments = [\n        { label: this.viewModeLabels.list, value: 'list', icon: 'view_list' },\n        { label: this.viewModeLabels.modular, value: 'modular', icon: 'folder' },\n      ];\n    }\n    if (changes['reorderSaving'] && !changes['reorderSaving'].firstChange) {\n      const nowSaving = !!changes['reorderSaving'].currentValue;\n      // Host finished its bulk-update call — exit reorder mode.\n      if (!nowSaving && this.reorderAwaitingSaveFlip) {\n        this.exitReorderMode();\n      }\n    }\n  }\n\n  private initializeComponent(): void {\n    if (this.isEmptyState) {\n      this.filteredRows = [];\n      this.pagedRows = [];\n      return;\n    }\n\n    this.enrichRowsWithFolderName(this.data);\n\n    // In server-side mode, assume incoming data is already a page slice\n    if (this.serverSidePagination) {\n      this.filteredRows = [...this.data];\n      this.pagedRows = [...this.filteredRows];\n      this.initializeColumnVisibility();\n      this.restoreSelectionState();\n      return;\n    }\n\n    this.rebuildFilteredRows();\n    this.applyPagination();\n    this.initializeColumnVisibility();\n    this.updateComputedColumns();\n    this.restoreSelectionState();\n  }\n\n  /**\n   * Build `filteredRows` from `data` by applying (a) the field filters (status/priority/etc.)\n   * and (b) the folder filter derived from `selectedFolderId` + `folderIdAccessor`.\n   */\n  private rebuildFilteredRows(): void {\n    const effective = this.appliedFilters ?? {};\n    this.filteredRows = this.data.filter(r => this.passFilters(effective, r) && this.passFolder(r));\n  }\n\n  private passFolder(row: any): boolean {\n    // List view ignores folder filtering entirely — behaves like the traditional flat table.\n    if (!this.isModularView) return true;\n    const folderId = this.folderIdAccessor ? this.folderIdAccessor(row) : row?.folderId;\n    // Root view: show only rows that do not belong to any folder (the \"Unorganized\" bucket).\n    // Folder tiles above the table are the entry point to per-folder contents.\n    if (this.selectedFolderId == null) {\n      return folderId == null;\n    }\n    return folderId != null && String(folderId) === String(this.selectedFolderId);\n  }\n\n  /** True when the component should render the modular (folder-aware) UI. */\n  get isModularView(): boolean {\n    return this.viewMode === 'modular';\n  }\n\n  /**\n   * Get selected IDs from selectedItems (objects)\n   */\n  private getSelectedIds(): Set<number> {\n    if (this.selectedItems && this.selectedItems.length > 0) {\n      return new Set(this.selectedItems.map(item => Number(item.id)).filter(id => !isNaN(id)));\n    }\n    return new Set();\n  }\n\n  private restoreSelectionState(): void {\n    const selectedIdsSet = this.getSelectedIds();\n\n    if (selectedIdsSet.size === 0) {\n      // If no selected IDs, clear all selection states\n      if (this.pagedRows) {\n        this.pagedRows.forEach(row => {\n          if (row) {\n            (row as any).isSelected = false;\n          }\n        });\n      }\n      return;\n    }\n\n    // Restore selection state based on selectedItems\n    if (this.pagedRows) {\n      this.pagedRows.forEach(row => {\n        if (row && row.id !== undefined) {\n          (row as any).isSelected = selectedIdsSet.has(Number(row.id));\n        }\n      });\n    }\n\n    // Also update filteredRows for consistency\n    if (this.filteredRows) {\n      this.filteredRows.forEach(row => {\n        if (row && row.id !== undefined) {\n          (row as any).isSelected = selectedIdsSet.has(Number(row.id));\n        }\n      });\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  private initializeColumnVisibility(): void {\n    // Cache visibility columns to avoid creating new arrays on every change detection\n    this._cachedVisibilityColumns = this.mapVisibilityColumns();\n    // Seed visibility state from each column's isShow (default to true) so consumers\n    // can pre-apply persisted preferences via columns[i].isShow.\n    const source = this.columns || [];\n    for (const col of this._cachedVisibilityColumns) {\n      if (this._columnVisibility[col.id] !== undefined) continue;\n      const srcCol = source.find(c => c.fieldId === col.id);\n      if (srcCol) {\n        // Host-supplied column — honour its isShow exactly, including for the\n        // folder column. Hosts wanting view-mode-aware defaults should set\n        // isShow themselves.\n        this._columnVisibility[col.id] = srcCol.isShow !== false;\n        continue;\n      }\n      if (col.id === FOLDER_COLUMN_FIELD_ID) {\n        // Auto-injected folder column (host did not supply one): default to\n        // visible in list view, hidden in modular view. The user's toggle\n        // persists across viewMode flips once seeded.\n        this._columnVisibility[col.id] = this.viewMode === 'list';\n        continue;\n      }\n      this._columnVisibility[col.id] = true;\n    }\n  }\n\n  get anyRowSelected(): boolean {\n    // Check if there are any selected items (either on current page or across all pages via selectedItems)\n    const hasSelectedOnPage = !!(this.pagedRows && this.pagedRows.some(r => !!(r as any).isSelected));\n    const selectedIdsSet = this.getSelectedIds();\n    const hasSelectedAcrossPages = selectedIdsSet.size > 0;\n    return hasSelectedOnPage || hasSelectedAcrossPages;\n  }\n\n  get currentSelectedItems(): any[] {\n    // If selectedItems (full objects) are provided, use them directly\n    // This ensures all selected items are returned, including those from other pages\n    if (this.selectedItems && this.selectedItems.length > 0) {\n      return this.selectedItems;\n    }\n    // Fallback: For client-side pagination or when selectedItems is not provided,\n    // filter pagedRows to get selected items from current page only\n    if (!this.pagedRows || this.pagedRows.length === 0) {\n      return [];\n    }\n\n    const selectedIdsSet = this.getSelectedIds();\n    \n    // Filter rows that are selected\n    return this.pagedRows\n      .filter(r => {\n        if (!r || r.id === undefined) return false;\n        const rowId = Number(r.id);\n        // Include if either:\n        // 1. The row has isSelected = true (current page selection)\n        // 2. The row's ID is in selectedItems (selected on other pages or restored selection)\n        return !!(r as any).isSelected || selectedIdsSet.has(rowId);\n      });\n  }\n\n  actionClick(data: any) {\n    console.log('action toolbar', data);\n  }\n\n  view(id: number | string): void {\n    console.log('View', id);\n  }\n\n  edit(row: any): void {\n    console.log('Edit', row);\n  }\n\n  delete(row: any): void {\n    console.log('Delete', row);\n  }\n\n  toggleFilter(): void {\n    this.showFilterPanel = !this.showFilterPanel;\n  }\n\n  onColumnVisibilityChange(cfg: ColumnVisibilityConfig): void {\n    this._columnVisibility = { ...cfg };\n    this.updateComputedColumns();\n    this.cdr.markForCheck();\n    this.columnVisibilityChange.emit({ ...cfg });\n  }\n\n  onAutoRefreshChange(intervalMs: number): void {\n    this.selectedAutoRefreshInterval = intervalMs;\n    this.setupAutoRefresh(intervalMs);\n    this.autoRefreshIntervalChange.emit(intervalMs);\n    this.triggerReload();\n  }\n\n  valueChange(value: string): void {\n    console.log('Value changed', value);\n    this.onSearchChange.emit(value);\n  }\n\n  search(value: string): void {\n    console.log('Search', value);\n  }\n\n  cleared(): void {\n    console.log('Cleared');\n  }\n\n  onEmptyAction(action: any) {\n    if (action?.label === 'Show filters') {\n      this.toggleFilter();\n    }\n  }\n\n  onFiltersChanged(current: any): void {\n    // Defer applying filters and updating chips until Apply Filter is clicked\n    this.pendingFilters = current;\n  }\n\n  onFiltersApplied(applied: any): void {\n    this.showFilterPanel = false;\n    const effective = applied ?? this.pendingFilters ?? {};\n    this.appliedFilters = effective;\n    this.rebuildFilteredRows();\n    this.pageIndex = 0;\n    this.applyPagination();\n    const chips: Array<{ key?: string; label?: string; text: string; fullText?: string; hasMore?: boolean }> = [];\n    if (effective) {\n      for (const key of Object.keys(effective)) {\n        const value = effective[key];\n        if (value == null || value === '' || (Array.isArray(value) && value.length === 0)) continue;\n        \n        // Find the filter config item for this key\n        const filterConfigItem = this.filterConfig?.find(c => c.key === key);\n        const options = filterConfigItem?.options || [];\n        \n        // Helper function to find display text from options\n        const getDisplayText = (val: any): string => {\n          // If value is already an object with name/label, use it\n          if (val && typeof val === 'object' && (val.name || val.label || val.value)) {\n            return val.name ?? val.label ?? String(val.value ?? val);\n          }\n          \n          // Look up the option in the config\n          const option = options.find((opt: any) => {\n            const optId = opt.id ?? opt.value;\n            const optValue = opt.value;\n            const valStr = String(val);\n            return String(optId) === valStr || String(optValue) === valStr;\n          });\n          \n          if (option) {\n            return option.name ?? option.label ?? String(option.value ?? val);\n          }\n          \n          // Fallback to the raw value\n          return String(val);\n        };\n        \n        let text = '';\n        let label = filterConfigItem?.label;\n        \n        if (Array.isArray(value)) {\n          text = value.map((v: any) => getDisplayText(v)).join(', ');\n        } else if (typeof value === 'object') {\n          if ('start' in value || 'end' in value) {\n            const s = value.start ? new Date(value.start).toLocaleDateString() : '';\n            const e = value.end ? new Date(value.end).toLocaleDateString() : '';\n            text = [s, e].filter(Boolean).join(' - ');\n          } else {\n            text = getDisplayText(value);\n          }\n        } else {\n          text = getDisplayText(value);\n        }\n        chips.push({ key, label, text, fullText: text, hasMore: text.length > 30 });\n      }\n    }\n    this.chips = chips;\n    this.filterApplied = this.chips.length > 0;\n  }\n\n  handleResetFilterClick(): void {\n    // Clear chips and reset filtered data when reset is clicked\n    this.pendingFilters = undefined;\n    this.appliedFilters = undefined;\n    this.chips = [];\n    this.filterApplied = false;\n    this.rebuildFilteredRows();\n    this.pageIndex = 0;\n    this.applyPagination();\n    this.onResetFilterClick.emit();\n  }\n\n  handleRefreshClick(): void {\n    this.onAutoRefreshClick.emit();\n    this.triggerReload();\n  }\n\n  private triggerReload(): void {\n    this.rebuildFilteredRows();\n    this.pageIndex = 0;\n    this.applyPagination();\n    this.onReload.emit();\n  }\n\n  private setupAutoRefresh(intervalMs: number): void {\n    this.clearAutoRefresh();\n    if (intervalMs && intervalMs > 0) {\n      this.autoRefreshTimer = setInterval(() => {\n        this.triggerReload();\n      }, intervalMs);\n    }\n  }\n\n  private clearAutoRefresh(): void {\n    if (this.autoRefreshTimer) {\n      clearInterval(this.autoRefreshTimer);\n      this.autoRefreshTimer = undefined;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearAutoRefresh();\n  }\n\n  onPaginate(e: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = e.pageIndex;\n    this.pageSize = e.pageSize;\n    if (this.serverSidePagination) {\n      this.pageChange.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n      return;\n    }\n    this.applyPagination();\n  }\n\n  onPageSizeChange(size: number): void {\n    this.pageSize = size;\n    this.pageIndex = 0;\n    if (this.serverSidePagination) {\n      this.pageChange.emit({ pageIndex: this.pageIndex, pageSize: this.pageSize });\n      return;\n    }\n    this.applyPagination();\n  }\n\n  onRemoveChip(chip: any): void {\n    this.chips = this.chips.filter(c => c !== chip);\n    this.filterApplied = this.chips.length > 0;\n    // Emit event to parent component (same pattern as execution tab)\n    this.removeChip.emit(chip);\n  }\n\n  onClearAllChips(): void {\n    this.chips = [];\n    this.filterApplied = false;\n    // Reset the dynamic-filter component form when clearing all chips\n    if (this.dynamicFilterComponent) {\n      this.dynamicFilterComponent.reset();\n    }\n  }\n\n  private applyPagination(): void {\n    if (this.serverSidePagination) {\n      // Server mode: parent supplies already-paginated data\n      this.pagedRows = [...this.filteredRows];\n      return;\n    }\n    const start = this.pageIndex * this.pageSize;\n    const end = start + this.pageSize;\n    this.pagedRows = this.filteredRows.slice(start, end);\n  }\n\n  private mapVisibilityColumns(): Array<{ id: string; label: string }> {\n    const items = (this.columns || [])\n      .filter(c => c.isDefault === false)\n      .map(c => ({ id: c.fieldId, label: c.fieldName || c.fieldId }));\n    if (this.modularConfig?.showFolderColumn && !items.some(i => i.id === FOLDER_COLUMN_FIELD_ID)) {\n      items.push({\n        id: FOLDER_COLUMN_FIELD_ID,\n        label: this.modularLabels?.folderColumnLabel || 'Folder',\n      });\n    }\n    return items;\n  }\n\n  private normalizeDate(d: any): number | null {\n    if (!d) return null;\n    const ts = Date.parse(d);\n    return isNaN(ts) ? null : ts;\n  }\n\n  private passFilters(filters: any, row: any): boolean {\n    if (!filters) return true;\n    if (filters.status && Array.isArray(filters.status) && filters.status.length) {\n      if (!filters.status.includes(row.status)) return false;\n    }\n    if (filters.priority && Array.isArray(filters.priority) && filters.priority.length) {\n      if (!filters.priority.includes(row.priorityName)) return false;\n    }\n    if (filters.testType && Array.isArray(filters.testType) && filters.testType.length) {\n      if (!filters.testType.includes(row.testType)) return false;\n    }\n    if (filters.created_date && (filters.created_date.start || filters.created_date.end)) {\n      const startTs = this.normalizeDate(filters.created_date.start);\n      const endTs = this.normalizeDate(filters.created_date.end);\n      const rowTs = this.normalizeDate(row.createdAt);\n      if (rowTs != null) {\n        if (startTs != null && rowTs < startTs) return false;\n        if (endTs != null && rowTs > endTs) return false;\n      }\n    }\n    return true;\n  }\n\n  trackByTemplateRef(index: number): number {\n    return index;\n  }\n\n  trackByDropdownTemplateRef(index: number): number {\n    return index;\n  }\n\n  trackBySelectDropdownTemplateRef(index: number): number {\n    return index;\n  }\n\n  // Export modal state\n  isExportModalOpen: boolean = false;\n\n  exportCodeClick(): void {\n    // Get selected items\n    const selectedItems = this.currentSelectedItems;\n    if (selectedItems.length === 0) {\n      // Emit event to parent to handle the case when no items are selected\n      this.onExportClick.emit();\n      return;\n    }\n    this.isExportModalOpen = true;\n  }\n\n  closeExportModal(): void {\n    this.isExportModalOpen = false;\n  }\n\n  onExportModalExport(result: { type: 'local' | 'email'; emails?: string[]; framework: 'WEBDRIVER_IO' | 'SELENIUM_JAVA' }): void {\n    this.isExportModalOpen = false;\n    // Emit event to parent with export result\n    this.onExportClick.emit({\n      type: result.type,\n      emails: result.emails,\n      framework: result.framework,\n      selectedItems: this.currentSelectedItems\n    });\n  }\n\n  get selectedCasesForExport(): Array<{ id?: number; name?: string }> {\n    return this.currentSelectedItems.map(item => ({\n      id: item.id,\n      name: item.name || item.title || 'Unnamed'\n    }));\n  }\n  get arrowClasses(): string {\n    const baseClasses = [\n      'cqa-w-4',\n      'cqa-h-4',\n      'cqa-relative',\n      'cqa-transition-transform'\n    ];\n\n    if (this.showFilterPanel) {\n      baseClasses.push('cqa-rotate-180');\n    }\n\n    return baseClasses.join(' ');\n  }\n\n  // ============================================================================\n  // Folder / modular helpers\n  // ============================================================================\n\n  /**\n   * Flat list of root-level folders for the \"Organized\" grid on the root view.\n   * Prefers the host-provided `rootFolders` snapshot when set — analogous to\n   * how `subfolderTiles` falls back to `selectedFolderNode` and `breadcrumbTrail`\n   * falls back to `selectedFolderTrail` when `folders` has been swapped to a\n   * search-results list. Falls back to `this.folders` otherwise.\n   */\n  get rootFolderTiles(): FolderNode[] {\n    if (this.rootFolders != null) return this.rootFolders;\n    return this.folders || [];\n  }\n\n  /**\n   * Subfolders of the currently-selected folder (for the \"Subfolders in ...\" grid).\n   */\n  get subfolderTiles(): FolderNode[] {\n    if (this.selectedFolderId == null) return [];\n    const node = this.findFolder(this.folders, this.selectedFolderId);\n    if (node?.children?.length) return node.children;\n    // Fallback: host-provided snapshot when the live tree doesn't contain\n    // the selection (refresh-restore before ancestors are loaded, or sidebar\n    // search where `folders` holds only the matched results).\n    if (this.selectedFolderNode &&\n        String(this.selectedFolderNode.id) === String(this.selectedFolderId)) {\n      return this.selectedFolderNode.children ?? [];\n    }\n    return [];\n  }\n\n  /**\n   * Breadcrumb trail from \"All folders\" down to the currently-selected folder.\n   */\n  get breadcrumbTrail(): FolderNode[] {\n    if (this.selectedFolderId == null) return [];\n    const trail: FolderNode[] = [];\n    this.buildTrail(this.folders, this.selectedFolderId, trail);\n    if (trail.length) return trail;\n    // Fallback: host-provided snapshot survives swaps of `this.folders` (the\n    // canonical case is sidebar search, where the live walk won't find the\n    // selected folder's ancestors among the flat result set).\n    return this.selectedFolderTrail ?? [];\n  }\n\n  private buildTrail(nodes: FolderNode[], targetId: number, acc: FolderNode[]): boolean {\n    for (const n of nodes || []) {\n      acc.push(n);\n      // Use String() coercion for safety in case ids arrive as either number or\n      // string from different API/test data shapes (e.g. raw JSON parse results).\n      if (String(n.id) === String(targetId)) return true;\n      if (n.children && this.buildTrail(n.children, targetId, acc)) return true;\n      acc.pop();\n    }\n    return false;\n  }\n\n  private findFolder(nodes: FolderNode[], targetId: number): FolderNode | null {\n    for (const n of nodes || []) {\n      if (String(n.id) === String(targetId)) return n;\n      const found = n.children ? this.findFolder(n.children, targetId) : null;\n      if (found) return found;\n    }\n    return null;\n  }\n\n  /**\n   * Whether the component is in \"root\" view (no folder selected). Controls which\n   * sections render on the right-hand pane.\n   */\n  get isRootView(): boolean {\n    return this.selectedFolderId == null;\n  }\n\n  /** The currently-selected folder node (or null at root). */\n  get currentFolderNode(): FolderNode | null {\n    if (this.selectedFolderId == null) return null;\n    // Walk the visible tree first; fall back to the host-provided override\n    // when the lookup misses (e.g. during sidebar search, when `folders`\n    // holds only matched results and the selected folder isn't among them).\n    const found = this.findFolder(this.folders, this.selectedFolderId);\n    if (found) return found;\n    if (this.selectedFolderNode && String(this.selectedFolderNode.id) === String(this.selectedFolderId)) {\n      return this.selectedFolderNode;\n    }\n    return null;\n  }\n\n  /** Count of test cases directly under the currently-selected folder (excluding descendants).\n   *  Reads `FolderNode.count` so the header badge matches the sidebar row count\n   *  (folder-sidebar.component.html renders the same `row.node.count`). Using\n   *  `filteredRows.length` here would only reflect the currently-rendered page. */\n  get currentFolderDirectCount(): number {\n    if (this.selectedFolderId == null) return 0;\n    return this.currentFolderNode?.count ?? 0;\n  }\n\n  /**\n   * Renders the empty-state slot when the host explicitly opts in, OR when the\n   * table would otherwise render blank (no loading + no rows). Using a derived\n   * flag keeps the host contract identical to `cqa-table-template` while letting\n   * the modular view show \"No Test Case Found\" out of the box — the earlier ask.\n   */\n  get effectiveIsEmptyState(): boolean {\n    if (this.isEmptyState) return true;\n    if (this.isTableLoading || this.isTableDataLoading) return false;\n    return !this.pagedRows || this.pagedRows.length === 0;\n  }\n\n  /**\n   * Picks the host-provided `emptyStateConfig` when the host flagged the state\n   * itself; otherwise falls back to a library-owned \"No Test Case Found\" config\n   * driven by `modularLabels`.\n   */\n  get effectiveEmptyStateConfig(): EmptyStateConfig {\n    if (this.isEmptyState) return this.emptyStateConfig;\n    return {\n      title: this.modularLabels.emptyNoTestsInFolderTitle,\n      description: this.modularLabels.emptyNoTestsInFolderDescription,\n      imageUrl: EMPTY_STATE_IMAGES.TEST_CASE,\n      actions: [],\n    };\n  }\n\n  onFolderSelected(id: number | null): void {\n    this.selectedFolderId = id;\n    this.selectedItems = [];\n    this.pageIndex = 0;\n    this.rebuildFilteredRows();\n    this.applyPagination();\n    this.folderSelected.emit(id);\n    this.cdr.markForCheck();\n  }\n\n  onFolderExpansionToggled(event: { id: number; expanded: boolean }): void {\n    const set = new Set(this.expandedFolderIds || []);\n    if (event.expanded) {\n      set.add(event.id);\n    } else {\n      set.delete(event.id);\n    }\n    this.expandedFolderIds = Array.from(set);\n    this.folderExpansionToggled.emit(event);\n  }\n\n  /** Tracks the `folders.length` at which we last emitted `rootLoadMoreRequested`\n   *  from the Organized grid scroll, so rapid scroll events don't spam the host\n   *  before it has had a chance to append the next page. */\n  private lastRootGridLoadAt: number = -1;\n  /** Tracks the `currentFolderNode.children.length` at which we last emitted\n   *  `folderLoadMoreRequested` from the Subfolders grid scroll, for the same\n   *  reason as `lastRootGridLoadAt`. */\n  private lastSubfolderGridLoadAt: number = -1;\n  private static readonly GRID_SCROLL_LOAD_THRESHOLD_PX = 96;\n\n  /** Horizontal-scroll handler for the \"Organized\" root tiles. Emits\n   *  `rootLoadMoreRequested` when the user scrolls within\n   *  `GRID_SCROLL_LOAD_THRESHOLD_PX` of the right edge AND more roots are\n   *  available on the backend. Throttled by `lastRootGridLoadAt`.\n   *  Uses `rootFolderTiles.length` (not `folders.length`) so the gate stays\n   *  correct when `rootFolders` decouples the Organized grid from the\n   *  search-filtered `folders` input. */\n  onRootGridScroll(event: Event): void {\n    const loaded = this.rootFolderTiles.length;\n    if (loaded >= this.rootTotal) return;\n    if (loaded === this.lastRootGridLoadAt) return;\n    const el = event.target as HTMLElement | null;\n    if (!el) return;\n    const distanceFromRight = el.scrollWidth - (el.scrollLeft + el.clientWidth);\n    if (distanceFromRight > ModularTableTemplateComponent.GRID_SCROLL_LOAD_THRESHOLD_PX) return;\n    this.lastRootGridLoadAt = loaded;\n    this.rootLoadMoreRequested.emit();\n  }\n\n  /** Horizontal-scroll handler for the \"Subfolders in X\" tiles. Emits\n   *  `folderLoadMoreRequested({ id: selectedFolderId, nextPage })` when the\n   *  user scrolls within threshold of the right edge AND the active folder\n   *  has more children on the backend than have been loaded. */\n  onSubfolderGridScroll(event: Event): void {\n    const node = this.currentFolderNode;\n    if (!node || this.selectedFolderId == null) return;\n    const loaded = node.children?.length ?? 0;\n    const total = node.totalChildren ?? loaded;\n    if (loaded >= total) return;\n    if (loaded === this.lastSubfolderGridLoadAt) return;\n    const el = event.target as HTMLElement | null;\n    if (!el) return;\n    const distanceFromRight = el.scrollWidth - (el.scrollLeft + el.clientWidth);\n    if (distanceFromRight > ModularTableTemplateComponent.GRID_SCROLL_LOAD_THRESHOLD_PX) return;\n    this.lastSubfolderGridLoadAt = loaded;\n    const nextPage = (node.loadedPages ?? -1) + 1;\n    this.folderLoadMoreRequested.emit({ id: this.selectedFolderId, nextPage });\n  }\n\n  onFolderCreated(payload: FolderCreatedPayload): void {\n    this.folderCreated.emit(payload);\n  }\n\n  onFolderCreateRequested(payload: { parentId: number | null }): void {\n    // Emit the \"requested\" event first so a host can intercept when it owns the UX.\n    this.folderCreateRequested.emit(payload);\n    if (!this.useInternalDialogs) return;\n    this.openCreateFolderDialog(payload.parentId);\n  }\n\n  onFolderRenamed(payload: FolderRenamedPayload): void {\n    this.folderRenamed.emit(payload);\n  }\n\n  /**\n   * Wired to the sidebar's `folderDeleted` output — which fires on delete-icon\n   * *click*, not on confirmation. We re-emit a `folderDeleteRequested` event\n   * first (so hosts can intercept) and, when `useInternalDialogs` is enabled,\n   * open the confirmation dialog. `folderDeleted` now only fires after confirm.\n   */\n  onFolderDeleted(payload: { id: number }): void {\n    const ctx = this.buildDeleteContext(payload.id);\n    this.folderDeleteRequested.emit(ctx);\n    if (!this.useInternalDialogs) return;\n    this.openDeleteFolderDialog(ctx);\n  }\n\n  /** Builds the { id, name, testCount, hasParent } payload used by delete events/dialogs. */\n  private buildDeleteContext(folderId: number): FolderDeleteRequestedPayload {\n    const node = this.findFolder(this.folders, folderId);\n    return {\n      id: folderId,\n      name: node?.name ?? '',\n      testCount: this.countTestsInFolder(folderId),\n      hasParent: this.folderHasParent(folderId),\n    };\n  }\n\n  private countTestsInFolder(folderId: number): number {\n    const accessor = this.folderIdAccessor ?? ((r: any) => r?.folderId);\n    return (this.data || []).filter(r => {\n      const id = accessor(r);\n      return id != null && Number(id) === Number(folderId);\n    }).length;\n  }\n\n  /** Returns true when the folder is nested (i.e. not a root-level folder). */\n  private folderHasParent(folderId: number): boolean {\n    return !(this.folders || []).some(n => n.id === folderId);\n  }\n\n  onTestsDropped(event: { testIds: Array<string | number>; targetFolderId: number | null }): void {\n    if (!this.modularConfig.allowTestDragDrop) return;\n    this.testsMoved.emit(event);\n  }\n\n  /**\n   * Folder-to-folder drag-drop. The sidebar has already validated against self/descendant\n   * cycles, so the drop is its own confirmation — we emit `folderMoved` directly without\n   * opening the move dialog. Gated on `allowTestDragDrop` (same flag as test drag-drop).\n   */\n  onFolderDropped(event: { id: number; newParentId: number | null }): void {\n    if (!this.modularConfig.allowTestDragDrop) return;\n    this.folderMoved.emit(event);\n  }\n\n  /**\n   * Sidebar emitted `folderMoveRequested` (user picked \"Move folder\" from the context menu).\n   * We re-emit a richer payload for hosts, and — when running with internal dialogs —\n   * open the existing move-to-folder picker configured for a folder-move (self and\n   * descendants are disabled to prevent cycles).\n   */\n  onFolderMoveRequested(payload: { id: number }): void {\n    const node = this.findFolder(this.folders, payload.id);\n    const ctx: FolderMoveRequestedPayload = {\n      id: payload.id,\n      name: node?.name ?? '',\n      hasParent: this.folderHasParent(payload.id),\n    };\n    this.folderMoveRequested.emit(ctx);\n    if (!this.useInternalDialogs) return;\n    this.openMoveFolderDialog(ctx);\n  }\n\n  /**\n   * Sidebar emitted `folderDuplicateRequested`. The library can't persist —\n   * emit the host-level event so the host clones the subtree server-side.\n   * Test cases should be *referenced* from the new folders, not duplicated.\n   */\n  onFolderDuplicateRequested(payload: { id: number }): void {\n    const node = this.findFolder(this.folders, payload.id);\n    this.folderDuplicateRequested.emit({\n      id: payload.id,\n      name: node?.name ?? '',\n    });\n  }\n\n  onSidebarCollapsedChange(collapsed: boolean): void {\n    this.sidebarCollapsed = collapsed;\n    this.sidebarCollapsedChange.emit(collapsed);\n  }\n\n  toggleSidebar(): void {\n    this.onSidebarCollapsedChange(!this.sidebarCollapsed);\n  }\n\n  /**\n   * Default bulk actions shown in the toolbar merged with any host-supplied\n   * `bulkActions`. Currently only \"Move to folder\" ships by default —\n   * Delete / Add Tag are opt-in per the current product requirement. Hosts\n   * that want them back pass them via `bulkActions`.\n   */\n  get effectiveBulkActions(): TableAction[] {\n    const defaults: TableAction[] = [\n      { id: 'move', label: this.modularLabels.moveToFolder, icon: 'drive_file_move', tooltip: this.modularLabels.moveToFolder },\n    ];\n    const overrides = new Map((this.bulkActions || []).map(a => [a.id, a] as const));\n    const merged = defaults.map(d => overrides.get(d.id) ?? d);\n    for (const extra of this.bulkActions || []) {\n      if (!defaults.some(d => d.id === extra.id)) {\n        merged.push(extra);\n      }\n    }\n    return merged;\n  }\n\n  onBulkAction(event: { id: string; selected: any[] }): void {\n    // Always emit the raw click so hosts owning the UX can intercept early.\n    this.bulkActionClick.emit({ id: event.id, selected: event.selected });\n\n    const selectedIds = (event.selected || []).map(r => r?.id).filter(v => v != null);\n    if (event.id === 'move') {\n      this.openMoveDialog(selectedIds, event.selected);\n      return;\n    }\n    // For non-dialog actions (custom entries from host-supplied `bulkActions`), invoke immediately.\n    this.bulkActionInvoked.emit({ id: event.id, selected: event.selected });\n  }\n\n  onBulkSelectAll(checked: boolean): void {\n    // Apply the action locally so the action toolbar's \"Select all\" works out-of-the-box.\n    // When checked, select every row in the *current* filtered set (i.e. all tests in\n    // the selected folder). When unchecked, clear selection.\n    this.selectedItems = checked ? [...this.filteredRows] : [];\n    this.restoreSelectionState();\n    this.selectedItemsChange.emit([...this.selectedItems]);\n    this.bulkSelectAllChange.emit(checked);\n    this.cdr.markForCheck();\n  }\n\n  onBulkDismiss(): void {\n    // Clear selection AND the per-row isSelected flags so the action toolbar closes\n    // (it's gated on `anyRowSelected`, which reads both selectedItems and row flags).\n    this.selectedItems = [];\n    this.restoreSelectionState();\n    this.selectedItemsChange.emit([]);\n    this.bulkDismiss.emit();\n    this.cdr.markForCheck();\n  }\n\n  private openMoveDialog(testIds: Array<string | number>, selected: any[]): void {\n    // Fire the \"requested\" event first so a host can intercept when it owns the UX.\n    this.moveRequested.emit({\n      testIds,\n      selected,\n      currentFolderId: this.selectedFolderId,\n      folders: this.folders,\n    });\n    if (!this.useInternalDialogs) return;\n\n    const count = testIds.length;\n    const description = (count === 1\n      ? this.modularLabels.moveDialogDescriptionSingular\n      : this.modularLabels.moveDialogDescriptionPlural\n    ).replace('{n}', '' + count);\n    const ref = this.dialogService.open<any, number | null>({\n      title: this.modularLabels.moveDialogTitle,\n      description,\n      width: '500px',\n      content: {\n        type: 'component',\n        component: MoveToFolderDialogComponent,\n        inputs: {\n          folders: this.folders,\n          labels: this.modularLabels,\n          currentFolderId: this.selectedFolderId,\n          // When moving FROM Unorganized, disable the Unorganized destination row.\n          rootDisabled: this.selectedFolderId == null,\n        },\n      },\n      buttons: [\n        { label: this.modularLabels.moveDialogCancel, role: 'secondary', handler: r => r.close(undefined as any) },\n        {\n          label: this.modularLabels.moveDialogConfirm,\n          role: 'primary',\n          handler: r => {\n            const instance = r.getComponentInstance<MoveToFolderDialogComponent>();\n            r.close(instance ? instance.pickedFolderId : null);\n          },\n        },\n      ],\n      buttonAlignment: 'right',\n    });\n    ref.afterClosed().subscribe(targetFolderId => {\n      if (targetFolderId === undefined) return; // cancelled\n      this.testsMoved.emit({ testIds, targetFolderId: targetFolderId ?? null });\n      this.bulkActionInvoked.emit({ id: 'move', selected });\n    });\n  }\n\n  /**\n   * Opens the folder-picker dialog configured for moving a folder (rather than tests).\n   * The source folder itself is marked as the \"current\" folder so it's rendered as\n   * disabled in the picker. On confirm, emits `folderMoved` with the chosen parent.\n   */\n  private openMoveFolderDialog(ctx: FolderMoveRequestedPayload): void {\n    const ref = this.dialogService.open<any, number | null | undefined>({\n      title: this.modularLabels.folderMenuMove,\n      width: '500px',\n      content: {\n        type: 'component',\n        component: MoveToFolderDialogComponent,\n        inputs: {\n          folders: this.folders,\n          labels: this.modularLabels,\n          // Reuse the \"disabled\" treatment: the folder being moved can't be its own destination.\n          currentFolderId: ctx.id,\n        },\n      },\n      buttons: [\n        { label: this.modularLabels.moveDialogCancel, role: 'secondary', handler: r => r.close(undefined as any) },\n        {\n          label: this.modularLabels.moveDialogConfirm,\n          role: 'primary',\n          handler: r => {\n            const instance = r.getComponentInstance<MoveToFolderDialogComponent>();\n            r.close(instance ? instance.pickedFolderId : null);\n          },\n        },\n      ],\n      buttonAlignment: 'right',\n    });\n    ref.afterClosed().subscribe(targetFolderId => {\n      if (targetFolderId === undefined) return; // cancelled\n      this.folderMoved.emit({ id: ctx.id, newParentId: targetFolderId ?? null });\n    });\n  }\n\n  private openCreateFolderDialog(initialParentId: number | null): void {\n    const ref = this.dialogService.open<any, { name: string; parentId: number | null; color: string } | false>({\n      title: this.modularLabels.newFolderDialogTitle,\n      description: this.modularLabels.newFolderDialogDescription,\n      width: '500px',\n      content: {\n        type: 'component',\n        component: NewFolderDialogComponent,\n        inputs: {\n          folders: this.folders,\n          labels: this.modularLabels,\n          name: '',\n          parentId: initialParentId,\n        },\n      },\n      buttons: [\n        { label: this.modularLabels.newFolderDialogCancel, role: 'secondary', handler: r => r.close(false) },\n        {\n          label: this.modularLabels.newFolderDialogConfirm,\n          role: 'primary',\n          handler: r => {\n            const inst = r.getComponentInstance<NewFolderDialogComponent>();\n            if (!inst || !inst.isValid) return false; // keep the dialog open on invalid submit\n            r.close({ name: (inst.name || '').trim(), parentId: inst.parentId, color: inst.color });\n            return;\n          },\n        },\n      ],\n      buttonAlignment: 'right',\n    });\n    ref.afterClosed().subscribe(result => {\n      if (result) {\n        this.folderCreated.emit({ parentId: result.parentId, name: result.name, color: result.color });\n      }\n    });\n  }\n\n  private openDeleteFolderDialog(ctx: FolderDeleteRequestedPayload): void {\n    const ref = this.dialogService.open<any, { strategy: FolderDeleteStrategy } | false>({\n      title: this.modularLabels.deleteFolderDialogTitle,\n      width: '500px',\n      content: {\n        type: 'component',\n        component: DeleteFolderDialogComponent,\n        inputs: {\n          folderName: ctx.name,\n          testCount: ctx.testCount,\n          hasParent: ctx.hasParent,\n          labels: this.modularLabels,\n          strategy: ctx.hasParent ? 'move-to-parent' : 'move-to-unorganized',\n        },\n      },\n      buttons: [\n        { label: this.modularLabels.deleteFolderDialogCancel, role: 'secondary', handler: r => r.close(false) },\n        {\n          label: this.modularLabels.deleteFolderDialogConfirm,\n          role: 'warn',\n          handler: r => {\n            const inst = r.getComponentInstance<DeleteFolderDialogComponent>();\n            r.close(inst ? { strategy: inst.strategy } : false);\n          },\n        },\n      ],\n      buttonAlignment: 'right',\n    });\n    ref.afterClosed().subscribe(result => {\n      if (result) {\n        this.folderDeleted.emit({ id: ctx.id, strategy: result.strategy });\n      }\n    });\n  }\n\n  // ============================================================================\n  // Row-reorder handlers\n  // ============================================================================\n\n  startReorder(): void {\n    if (this.isReordering) return;\n    this.reorderSnapshot = [...(this.pagedRows || [])];\n    this.reorderDraft = [...(this.pagedRows || [])];\n    // Pause auto-refresh while reordering — avoids the timer clobbering the draft.\n    this.reorderSavedAutoRefresh = this.selectedAutoRefreshInterval;\n    if (this.reorderSavedAutoRefresh > 0) {\n      this.setupAutoRefresh(0);\n    }\n    this.isReordering = true;\n    this.reorderAwaitingSaveFlip = false;\n    this.reorderStart.emit();\n    this.cdr.markForCheck();\n  }\n\n  cancelReorder(): void {\n    if (!this.isReordering) return;\n    // Restore the original page order so the user sees the pre-drag state.\n    if (this.reorderSnapshot) {\n      this.pagedRows = [...this.reorderSnapshot];\n    }\n    this.exitReorderMode();\n    this.reorderCancel.emit();\n  }\n\n  saveReorder(): void {\n    if (!this.isReordering) return;\n    const ordered = this.reorderDraft ? [...this.reorderDraft] : [...(this.pagedRows || [])];\n    this.reorderAwaitingSaveFlip = true;\n    this.reorderSave.emit({ orderedItems: ordered });\n    // If the host never flips `reorderSaving` (e.g. synchronous no-op), exit\n    // immediately so the UI doesn't get stuck in \"Saving...\" state.\n    if (!this.reorderSaving) {\n      // Give the host a microtask to flip `reorderSaving` to true — if it\n      // hasn't, assume no async work and exit.\n      Promise.resolve().then(() => {\n        if (this.reorderAwaitingSaveFlip && !this.reorderSaving) {\n          this.exitReorderMode();\n        }\n      });\n    }\n  }\n\n  onRowReorder(event: { previousIndex: number; currentIndex: number; orderedData: any[] }): void {\n    if (!this.isReordering) return;\n    this.reorderDraft = [...event.orderedData];\n    this.pagedRows = this.reorderDraft;\n    this.cdr.markForCheck();\n  }\n\n  private exitReorderMode(): void {\n    this.isReordering = false;\n    this.reorderSnapshot = null;\n    this.reorderDraft = null;\n    this.reorderAwaitingSaveFlip = false;\n    // Restore previously-selected auto-refresh interval (if any).\n    if (this.reorderSavedAutoRefresh > 0) {\n      this.setupAutoRefresh(this.reorderSavedAutoRefresh);\n      this.reorderSavedAutoRefresh = 0;\n    }\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Row-drag payload builder used by the [cqaRowDrag] directive via (buildPayload).\n   */\n  buildRowDragPayload = (row: any): Array<string | number> => {\n    const selected = this.currentSelectedItems;\n    // If the dragged row is part of the current selection, drag the whole selection.\n    const rowId = row?.id;\n    const inSelection = rowId != null && selected.some(s => s?.id === rowId);\n    const ids = (inSelection ? selected : [row]).map(r => r?.id).filter(v => v != null);\n    return ids;\n  };\n}\n","<!-- Reusable folder-icon chip. Render via <ng-container *ngTemplateOutlet=\"folderIconChip; context: { color: f.color }\"></ng-container>. -->\n<ng-template #folderIconChip let-color=\"color\">\n  <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-h-10 cqa-rounded-lg cqa-bg-[#F0F0F1] cqa-text-[#6D6D74] cqa-flex-shrink-0 group-hover:cqa-bg-indigo-50 group-hover:cqa-text-[#3F43EE]\">\n    <svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M12.9583 10.4585C12.9583 10.79 12.8266 11.108 12.5921 11.3424C12.3577 11.5768 12.0398 11.7085 11.7083 11.7085H1.70825C1.37673 11.7085 1.05879 11.5768 0.824368 11.3424C0.589948 11.108 0.458252 10.79 0.458252 10.4585V1.7085C0.458252 1.37698 0.589948 1.05903 0.824368 0.824613C1.05879 0.590192 1.37673 0.458496 1.70825 0.458496H4.83325L6.08325 2.3335H11.7083C12.0398 2.3335 12.3577 2.46519 12.5921 2.69961C12.8266 2.93403 12.9583 3.25198 12.9583 3.5835V10.4585Z\" [attr.stroke]=\"color || 'currentColor'\" stroke-width=\"0.916667\"/>\n    </svg>\n  </span>\n</ng-template>\n\n<!-- Reusable indeterminate loading spinner. Render via\n     <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 20 }\"></ng-container>. -->\n<ng-template #loadingSpinner let-size=\"size\">\n  <svg [attr.width]=\"size || 20\" [attr.height]=\"size || 20\" viewBox=\"0 0 50 50\" aria-label=\"loading\" xmlns=\"http://www.w3.org/2000/svg\">\n    <circle cx=\"25\" cy=\"25\" r=\"20\" stroke=\"#E5E7EB\" stroke-width=\"6\" fill=\"none\"></circle>\n    <path d=\"M45 25a20 20 0 0 0-20-20\" stroke=\"#4F46E5\" stroke-width=\"6\" fill=\"none\" stroke-linecap=\"round\">\n      <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 25 25\" to=\"360 25 25\" dur=\"0.8s\" repeatCount=\"indefinite\"></animateTransform>\n    </path>\n  </svg>\n</ng-template>\n\n<!-- Reusable \"+\" chip used by the \"New folder\" tile. -->\n<ng-template #addIconChip>\n  <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-10 cqa-h-10 cqa-rounded-lg cqa-bg-[#F0F0F1] cqa-text-[#6D6D74] cqa-flex-shrink-0 group-hover:cqa-bg-indigo-50 group-hover:cqa-text-[#3F43EE]\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n      <path d=\"M8 3V13M3 8H13\" stroke=\"currentColor\" stroke-width=\"1.275\" stroke-linecap=\"round\"/>\n    </svg>\n  </span>\n</ng-template>\n\n<div class=\"cqa-ui-root\">\n  <div class=\"cqa-w-full cqa-max-w-full cqa-flex cqa-flex-col cqa-relative cqa-min-w-0\">\n    <div [class]=\"!showSearchBar ? 'cqa-justify-end' : 'cqa-justify-between'\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-gap-3 cqa-flex-wrap cqa-mb-3\">\n      <cqa-search-bar\n        *ngIf=\"showSearchBar\"\n        [placeholder]=\"searchPlaceholder\"\n        [value]=\"searchValue\"\n        [showClear]=\"showClear\"\n        (valueChange)=\"valueChange($event)\"\n        (search)=\"search($event)\"\n        (cleared)=\"cleared()\"\n      ></cqa-search-bar>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n        <cqa-button\n        *ngIf=\"showExportButton\"\n        variant=\"grey-solid\"\n        icon=\"open_in_new\"\n        [text]=\"isExporting ? 'Exporting...' : 'Export'\"\n        [disabled]=\"isExporting\"\n        (clicked)=\"exportCodeClick()\"\n      >\n        <span>{{ isExporting ? 'Exporting...' : 'Export' }}</span>\n      </cqa-button>\n      \n      <!-- Export Code Modal -->\n      <cqa-export-code-modal\n        *ngIf=\"showExportButton\"\n        [isOpen]=\"isExportModalOpen\"\n        [cases]=\"selectedCasesForExport\"\n        [disabled]=\"false\"\n        (closeModal)=\"closeExportModal()\"\n        (export)=\"onExportModalExport($event)\">\n      </cqa-export-code-modal>\n         <ng-container *ngFor=\"let dropdownTemplate of otherDropDownButtons; trackBy: trackByDropdownTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"dropdownTemplate\"></ng-container>\n        </ng-container>\n\n        <ng-container *ngFor=\"let selectDropdownTemplate of otherSelectDropDownButtons; trackBy: trackBySelectDropdownTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"selectDropdownTemplate\"></ng-container>\n        </ng-container>\n        \n        <cqa-button\n          *ngIf=\"showFilterButton\"\n          variant=\"grey-solid\"\n          icon=\"add\"\n          [disabled]=\"isReordering\"\n          (clicked)=\"toggleFilter()\"\n        >\n        <span class=\"cqa-flex cqa-items-center cqa-gap-1\">\n          Filter          \n           <div [class]=\"arrowClasses\">\n            <svg\n              class=\"cqa-w-2 cqa-h-1 cqa-absolute cqa-left-[4px] cqa-top-[6px]\"\n              viewBox=\"0 0 8 4\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\"\n            >\n              <path\n                d=\"M0 0L4 4L8 0\"\n                stroke=\"#0B0B0C\"\n                stroke-width=\"1.33\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\"\n              />\n            </svg>\n          </div>\n        </span>\n        </cqa-button>\n        <cqa-column-visibility\n          *ngIf=\"showSettingsButton\"\n          [columns]=\"visibilityColumns\"\n          [columnVisibility]=\"columnVisibility\"\n          [selectedAutoRefreshInterval]=\"selectedAutoRefreshInterval\"\n          (columnVisibilityChange)=\"onColumnVisibilityChange($event)\"\n          (autoRefreshChange)=\"onAutoRefreshChange($event)\"\n        ></cqa-column-visibility>\n        <cqa-button\n          *ngIf=\"showAutoRefreshButton\"\n          variant=\"grey-solid\"\n          icon=\"refresh\"\n          (clicked)=\"handleRefreshClick()\"\n          [tooltip]=\"'Refresh'\"\n          tooltipPosition=\"below\"\n          [disabled]=\"isReordering\"\n        ></cqa-button>\n        <ng-container *ngFor=\"let buttonTemplate of otherButtons; trackBy: trackByTemplateRef\">\n          <ng-container *ngTemplateOutlet=\"buttonTemplate\"></ng-container>\n        </ng-container>\n        <cqa-segment-control\n          *ngIf=\"showViewModeToggle\"\n          size=\"lg\"\n          [segments]=\"viewModeSegments\"\n          [value]=\"viewMode\"\n          (valueChange)=\"onViewModeChange($event)\"\n        ></cqa-segment-control>\n        <cqa-button\n          *ngIf=\"showReorderButton && !isReordering\"\n          variant=\"outlined\"\n          icon=\"drag_indicator\"\n          [text]=\"reorderLabels.reorderButton\"\n          [disabled]=\"!pagedRows || pagedRows.length === 0 || isTableLoading || isTableDataLoading\"\n          (clicked)=\"startReorder()\"\n        ></cqa-button>\n        <ng-container *ngIf=\"showReorderButton && isReordering\">\n          <cqa-button\n            variant=\"outlined\"\n            [text]=\"reorderLabels.cancelButton\"\n            [disabled]=\"reorderSaving\"\n            (clicked)=\"cancelReorder()\"\n          ></cqa-button>\n          <cqa-button\n            variant=\"filled\"\n            [icon]=\"reorderSaving ? 'hourglass_empty' : ''\"\n            [text]=\"reorderSaving ? reorderLabels.savingButton : reorderLabels.doneButton\"\n            [disabled]=\"reorderSaving\"\n            (clicked)=\"saveReorder()\"\n          ></cqa-button>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Reorder mode banner -->\n    <div *ngIf=\"isReordering\" class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-3 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#FFFBEB] cqa-border cqa-border-[#FDE68A]\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n        <circle cx=\"3\" cy=\"3\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"8\" cy=\"3\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"13\" cy=\"3\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"3\" cy=\"8\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"13\" cy=\"8\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"3\" cy=\"13\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"8\" cy=\"13\" r=\"1.5\" fill=\"#92400E\"></circle>\n        <circle cx=\"13\" cy=\"13\" r=\"1.5\" fill=\"#92400E\"></circle>\n      </svg>\n      <span class=\"cqa-text-sm cqa-font-semibold cqa-text-[#92400E]\">{{ reorderLabels.bannerTitle }}</span>\n      <span class=\"cqa-text-sm cqa-text-[#92400E]\">{{ reorderLabels.bannerDescription }}</span>\n    </div>\n\n    <cqa-selected-filters\n      [filterApplied]=\"filterApplied\"\n      [chips]=\"chips\"\n      (removeChip)=\"onRemoveChip($event)\"\n      (clearAll)=\"onClearAllChips()\"\n      (onClearAll)=\"onClearAll.emit()\"\n    >\n    </cqa-selected-filters>\n\n    <cqa-dynamic-filter\n      *ngIf=\"showFilterPanel\"\n      [config]=\"filterConfig\"\n      [model]=\"filterModel\"\n      [showFilterPanel]=\"showFilterPanel\"\n      (filtersChanged)=\"onFiltersChanged($event)\"\n      (filtersApplied)=\"onFiltersApplied($event)\"\n      (onApplyFilterClick)=\"onApplyFilterClick.emit($event)\"\n      (onResetFilterClick)=\"handleResetFilterClick()\"\n    >\n    </cqa-dynamic-filter>\n\n    <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-min-h-0 cqa-min-w-0 cqa-w-full cqa-max-w-full cqa-overflow-hidden\" style=\"border-bottom: 1px solid rgb(226, 226, 227);\">\n      <!-- Sidebar (only shown in modular view) -->\n      <cqa-folder-sidebar\n        *ngIf=\"isModularView && modularConfig.showSidebar\"\n        [folders]=\"folders\"\n        [selectedFolderId]=\"selectedFolderId\"\n        [expandedFolderIds]=\"expandedFolderIds\"\n        [unorganizedCount]=\"unorganizedCount\"\n        [allowCreate]=\"modularConfig.allowCreateFolder\"\n        [allowRename]=\"modularConfig.allowRenameFolder\"\n        [allowDelete]=\"modularConfig.allowDeleteFolder\"\n        [allowDrop]=\"modularConfig.allowTestDragDrop\"\n        [allowDuplicate]=\"modularConfig.allowDuplicateFolder\"\n        [showCounts]=\"modularConfig.showCounts\"\n        [collapsed]=\"sidebarCollapsed\"\n        [labels]=\"modularLabels\"\n        [serverSideSearch]=\"serverSideSearch\"\n        [rootTotal]=\"rootTotal\"\n        [folderSearchLoading]=\"folderSearchLoading\"\n        [rootFoldersLoading]=\"rootFoldersLoading\"\n        [savingFolderIds]=\"savingFolderIds\"\n        [searchValue]=\"folderSearchValue\"\n        (folderSelected)=\"onFolderSelected($event)\"\n        (folderExpansionToggled)=\"onFolderExpansionToggled($event)\"\n        (folderChildrenRequested)=\"folderChildrenRequested.emit($event)\"\n        (folderLoadMoreRequested)=\"folderLoadMoreRequested.emit($event)\"\n        (rootLoadMoreRequested)=\"rootLoadMoreRequested.emit()\"\n        (searchChange)=\"folderSearchChange.emit($event)\"\n        (folderCreated)=\"onFolderCreated($event)\"\n        (folderCreateRequested)=\"onFolderCreateRequested($event)\"\n        (folderRenamed)=\"onFolderRenamed($event)\"\n        (folderDeleted)=\"onFolderDeleted($event)\"\n        (folderMoveRequested)=\"onFolderMoveRequested($event)\"\n        (folderDuplicateRequested)=\"onFolderDuplicateRequested($event)\"\n        (testsDropped)=\"onTestsDropped($event)\"\n        (folderDropped)=\"onFolderDropped($event)\"\n        (collapsedChange)=\"onSidebarCollapsedChange($event)\"\n      ></cqa-folder-sidebar>\n\n      <!-- Right pane -->\n      <div\n        class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-min-w-0\"\n        [style.border-top]=\"isModularView ? '1px solid #E2E2E3' : null\"\n        [style.border-left]=\"isModularView ? '1px solid #E2E2E3' : null\"\n        [style.border-right]=\"isModularView ? '1px solid #E2E2E3' : null\"\n      >\n        <!-- Breadcrumb (modular view, folder drilled-in) -->\n        <nav\n          *ngIf=\"isModularView && modularConfig.showBreadcrumb && !isRootView\"\n          aria-label=\"Folder path\"\n          class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-text-sm cqa-px-3 cqa-py-2 cqa-rounded-none cqa-min-w-0\"\n          style=\"color: #6D6D74; border-bottom: 1px solid #E2E2E3;\"\n        >\n          <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-flex-1 cqa-min-w-0 cqa-overflow-x-auto cqa-scrollbar-thin cqa-whitespace-nowrap\">\n            <button type=\"button\" class=\"hover:cqa-text-[#3F43EE] cqa-inline-flex cqa-items-center cqa-gap-1 cqa-flex-shrink-0\" (click)=\"onFolderSelected(null)\">\n              <svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                <path d=\"M12.9583 10.4585C12.9583 10.79 12.8266 11.108 12.5921 11.3424C12.3577 11.5768 12.0398 11.7085 11.7083 11.7085H1.70825C1.37673 11.7085 1.05879 11.5768 0.824368 11.3424C0.589948 11.108 0.458252 10.79 0.458252 10.4585V1.7085C0.458252 1.37698 0.589948 1.05903 0.824368 0.824613C1.05879 0.590192 1.37673 0.458496 1.70825 0.458496H4.83325L6.08325 2.3335H11.7083C12.0398 2.3335 12.3577 2.46519 12.5921 2.69961C12.8266 2.93403 12.9583 3.25198 12.9583 3.5835V10.4585Z\" stroke=\"currentColor\" stroke-width=\"0.916667\"/>\n              </svg>\n              <span>{{ modularLabels.allFolders }}</span>\n            </button>\n            <ng-container *ngFor=\"let crumb of breadcrumbTrail; let last = last\">\n              <mat-icon class=\"cqa-align-middle cqa-flex-shrink-0\" style=\"font-size:16px;width:16px;height:16px;color:#6D6D74;\">chevron_right</mat-icon>\n              <button\n                type=\"button\"\n                class=\"cqa-flex-shrink-0\"\n                [ngClass]=\"last\n                  ? 'cqa-text-[#161617] cqa-font-semibold'\n                  : 'cqa-text-[#6D6D74] hover:cqa-text-[#3F43EE]'\"\n                [disabled]=\"last\"\n                (click)=\"!last && onFolderSelected(crumb.id)\"\n              >{{ crumb.name }}</button>\n            </ng-container>\n          </div>\n          <cqa-button\n            *ngIf=\"modularConfig.showSubfolderSection && subfolderTiles.length\"\n            class=\"cqa-flex-shrink-0\"\n            variant=\"text\"\n            btnSize=\"sm\"\n            customClass=\"!cqa-text-[13px] !cqa-leading-[18px]\"\n            [icon]=\"subfolderSectionExpanded ? 'expand_less' : 'expand_more'\"\n            [text]=\"(subfolderSectionExpanded ? 'Hide' : 'Show') + ' subfolders'\"\n            [attr.aria-expanded]=\"subfolderSectionExpanded\"\n            (clicked)=\"toggleSubfolderSection()\"\n          ></cqa-button>\n          <cqa-button\n            *ngIf=\"modularConfig.allowCreateFolder\"\n            class=\"cqa-flex-shrink-0\"\n            variant=\"text\"\n            btnSize=\"sm\"\n            customClass=\"!cqa-text-[13px] !cqa-leading-[18px]\"\n            icon=\"add\"\n            [text]=\"modularLabels.newFolder\"\n            (clicked)=\"onFolderCreateRequested({ parentId: selectedFolderId })\"\n          ></cqa-button>\n        </nav>\n\n        <!-- Folder grid: modular + root view -->\n        <section\n          *ngIf=\"isModularView && isRootView && modularConfig.showFolderGrid && rootFolderTiles.length\"\n          class=\"cqa-px-5 cqa-pt-2\"\n          style=\"border-bottom: 1px solid #F0F0F1;\"\n        >\n          <button\n            type=\"button\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2 cqa-w-full cqa-text-left\"\n            [attr.aria-expanded]=\"organizedSectionExpanded\"\n            (click)=\"toggleOrganizedSection()\"\n          >\n            <svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n              <path d=\"M12.9583 10.4585C12.9583 10.79 12.8266 11.108 12.5921 11.3424C12.3577 11.5768 12.0398 11.7085 11.7083 11.7085H1.70825C1.37673 11.7085 1.05879 11.5768 0.824368 11.3424C0.589948 11.108 0.458252 10.79 0.458252 10.4585V1.7085C0.458252 1.37698 0.589948 1.05903 0.824368 0.824613C1.05879 0.590192 1.37673 0.458496 1.70825 0.458496H4.83325L6.08325 2.3335H11.7083C12.0398 2.3335 12.3577 2.46519 12.5921 2.69961C12.8266 2.93403 12.9583 3.25198 12.9583 3.5835V10.4585Z\" stroke=\"#6D6D74\" stroke-width=\"0.916667\"/>\n            </svg>\n            <h3 class=\"cqa-text-sm cqa-font-semibold cqa-text-[#6D6D74]\">{{ modularLabels.organized }}</h3>\n            <span class=\"cqa-text-xs cqa-text-[#6D6D74]\">\n              {{ rootFolderTiles.length === 1 ? modularLabels.foldersCountSingular : modularLabels.foldersCountPlural.replace('{n}', '' + rootFolderTiles.length) }}\n            </span>\n            <mat-icon class=\"cqa-text-[#6D6D74] cqa-ml-auto\" style=\"font-size:18px;width:18px;height:18px\">\n              {{ organizedSectionExpanded ? 'expand_less' : 'expand_more' }}\n            </mat-icon>\n          </button>\n          <div\n            class=\"cqa-grid\"\n            style=\"transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\"\n            [style.grid-template-rows]=\"organizedSectionExpanded ? '1fr' : '0fr'\"\n          >\n          <div class=\"cqa-min-h-0\" style=\"overflow: hidden;\">\n          <div class=\"cqa-flex cqa-flex-nowrap cqa-gap-3 cqa-overflow-x-auto cqa-scrollbar-thin cqa-pb-1\"\n               (scroll)=\"onRootGridScroll($event)\">\n            <button\n              *ngFor=\"let f of rootFolderTiles\"\n              type=\"button\"\n              [cqaFolderDrop]=\"f.id\"\n              [dropEnabled]=\"modularConfig.allowTestDragDrop\"\n              (testsDropped)=\"onTestsDropped($event)\"\n              (click)=\"onFolderSelected(f.id)\"\n              class=\"cqa-group cqa-flex-shrink-0 cqa-w-[240px] cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-text-left cqa-p-3 cqa-rounded-[10px] cqa-border-solid cqa-border-[0.5px] cqa-border-[#E2E2E3] cqa-bg-white hover:cqa-border-[#3F43EE] hover:cqa-shadow-sm cqa-transition-colors\"\n            >\n              <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-min-w-0\">\n                <ng-container *ngTemplateOutlet=\"folderIconChip; context: { color: f.color }\"></ng-container>\n                <div class=\"cqa-flex cqa-flex-col cqa-min-w-0\">\n                  <span class=\"cqa-text-[15px] cqa-text-[#161617] cqa-truncate cqa-leading-tight group-hover:cqa-text-[#3F43EE]\">{{ f.name }}</span>\n                  <span *ngIf=\"modularConfig.showCounts\" class=\"cqa-text-sm cqa-text-neutral-500 cqa-truncate\">\n                    {{ (f.count ?? 0) === 1 ? modularLabels.testsCountSingular : modularLabels.testsCountPlural.replace('{n}', '' + (f.count ?? 0)) }}<ng-container *ngIf=\"f.children?.length\"> · {{ f.children!.length === 1 ? modularLabels.oneSubfolder : modularLabels.subfoldersCount.replace('{n}', '' + f.children!.length) }}</ng-container>\n                  </span>\n                </div>\n              </div>\n              <mat-icon class=\"cqa-text-neutral-400 cqa-flex-shrink-0\" style=\"font-size:20px;width:20px;height:20px\">chevron_right</mat-icon>\n            </button>\n\n            <!-- \"+ New folder\" tile -->\n            <button\n              *ngIf=\"modularConfig.allowCreateFolder\"\n              type=\"button\"\n              (click)=\"onFolderCreateRequested({ parentId: null })\"\n              class=\"cqa-group cqa-flex-shrink-0 cqa-w-[240px] cqa-flex cqa-items-center cqa-gap-3 cqa-text-left cqa-p-3 cqa-rounded-[10px] cqa-border-dashed cqa-border-[0.5px] cqa-border-[#E2E2E3] cqa-bg-[#FAFAFA] hover:cqa-border-[#3F43EE] hover:cqa-bg-white cqa-transition-colors\"\n            >\n              <ng-container *ngTemplateOutlet=\"addIconChip\"></ng-container>\n              <div class=\"cqa-flex cqa-flex-col cqa-min-w-0\">\n                <span class=\"cqa-text-[15px] cqa-text-[#161617] cqa-truncate cqa-leading-tight group-hover:cqa-text-[#3F43EE]\">{{ modularLabels.newFolder }}</span>\n                <span class=\"cqa-text-sm cqa-text-neutral-400\">{{ modularLabels.testsCountPlural.replace('{n}', '0') }}</span>\n              </div>\n            </button>\n\n            <!-- Pagination spinner anchored at the right edge of the Organized\n                 row. Only renders during an in-flight root fetch (initial OR\n                 scroll-driven \"load more\"), and is filtered to suppress when\n                 the section is empty so we don't show a spinner inside an\n                 otherwise-blank row. -->\n            <div\n              *ngIf=\"rootFoldersLoading && rootFolderTiles.length > 0\"\n              class=\"cqa-flex-shrink-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-[80px]\"\n              aria-live=\"polite\"\n              [attr.aria-label]=\"'Loading more folders'\"\n            >\n              <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 20 }\"></ng-container>\n            </div>\n          </div>\n          </div>\n          </div>\n        </section>\n\n        <!-- Subfolder section: modular + folder view. Shown whenever drilled in\n             (even if no subfolders, so the \"+ New folder\" tile remains\n             reachable, and so we can render a loading state during the\n             drill-in fetch before children arrive). -->\n        <section\n          *ngIf=\"isModularView && !isRootView && modularConfig.showSubfolderSection && (subfolderTiles.length || currentFolderNode?.childrenLoading)\"\n          class=\"cqa-grid\"\n          style=\"transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\"\n          [style.grid-template-rows]=\"subfolderSectionExpanded ? '1fr' : '0fr'\"\n        >\n          <div class=\"cqa-min-h-0\" style=\"overflow: hidden;\">\n          <div class=\"cqa-px-3 cqa-py-2 cqa-flex cqa-flex-nowrap cqa-gap-3 cqa-overflow-x-auto cqa-scrollbar-thin\"\n               (scroll)=\"onSubfolderGridScroll($event)\">\n            <button\n              *ngFor=\"let f of subfolderTiles\"\n              type=\"button\"\n              [cqaFolderDrop]=\"f.id\"\n              [dropEnabled]=\"modularConfig.allowTestDragDrop\"\n              (testsDropped)=\"onTestsDropped($event)\"\n              (click)=\"onFolderSelected(f.id)\"\n              class=\"cqa-group cqa-flex-shrink-0 cqa-w-[240px] cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-text-left cqa-p-3 cqa-rounded-[10px] cqa-border-solid cqa-border-[0.5px] cqa-border-[#E2E2E3] cqa-bg-white hover:cqa-border-[#3F43EE] hover:cqa-shadow-sm cqa-transition-colors\"\n            >\n              <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-min-w-0\">\n                <ng-container *ngTemplateOutlet=\"folderIconChip; context: { color: f.color }\"></ng-container>\n                <div class=\"cqa-flex cqa-flex-col cqa-min-w-0\">\n                  <span class=\"cqa-text-[15px] cqa-text-[#161617] cqa-truncate cqa-leading-tight group-hover:cqa-text-[#3F43EE]\">{{ f.name }}</span>\n                  <span *ngIf=\"modularConfig.showCounts\" class=\"cqa-text-sm cqa-text-neutral-500 cqa-truncate\">\n                    {{ (f.count ?? 0) === 1 ? modularLabels.testsCountSingular : modularLabels.testsCountPlural.replace('{n}', '' + (f.count ?? 0)) }}\n                  </span>\n                </div>\n              </div>\n              <mat-icon class=\"cqa-text-neutral-400 cqa-flex-shrink-0\" style=\"font-size:20px;width:20px;height:20px\">chevron_right</mat-icon>\n            </button>\n\n            <!-- \"+ New folder\" tile -->\n            <button\n              *ngIf=\"modularConfig.allowCreateFolder\"\n              type=\"button\"\n              (click)=\"onFolderCreateRequested({ parentId: selectedFolderId })\"\n              class=\"cqa-group cqa-flex-shrink-0 cqa-w-[240px] cqa-flex cqa-items-center cqa-gap-3 cqa-text-left cqa-p-3 cqa-rounded-[10px] cqa-border-dashed cqa-border-[0.5px] cqa-border-[#E2E2E3] cqa-bg-[#FAFAFA] hover:cqa-border-[#3F43EE] hover:cqa-bg-white cqa-transition-colors\"\n            >\n              <ng-container *ngTemplateOutlet=\"addIconChip\"></ng-container>\n              <div class=\"cqa-flex cqa-flex-col cqa-min-w-0\">\n                <span class=\"cqa-text-[15px] cqa-text-[#161617] cqa-truncate cqa-leading-tight group-hover:cqa-text-[#3F43EE]\">{{ modularLabels.newFolder }}</span>\n                <span class=\"cqa-text-sm cqa-text-neutral-400\">{{ modularLabels.testsCountPlural.replace('{n}', '0') }}</span>\n              </div>\n            </button>\n\n            <!-- Subfolder fetch indicator. Two cases:\n                 - Drill-in fetch: no subfolderTiles yet, render a centered\n                   row spinner so the section isn't empty during the fetch.\n                 - Pagination fetch: tiles exist, anchor a small spinner at\n                   the right edge so the user knows the next page is loading. -->\n            <div\n              *ngIf=\"currentFolderNode?.childrenLoading\"\n              class=\"cqa-flex-shrink-0 cqa-flex cqa-items-center cqa-justify-center cqa-w-[80px]\"\n              aria-live=\"polite\"\n              [attr.aria-label]=\"'Loading subfolders'\"\n            >\n              <ng-container *ngTemplateOutlet=\"loadingSpinner; context: { size: 20 }\"></ng-container>\n            </div>\n          </div>\n          </div>\n        </section>\n\n        <div\n          *ngIf=\"isModularView && !isRootView && modularConfig.showUnorganizedSection\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-3 cqa-border cqa-border-indigo-100\"\n          style=\"background-color: #D8D9FC;\"\n        >\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <svg width=\"14\" height=\"13\" viewBox=\"0 0 14 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n              <path d=\"M12.9585 10.4585C12.9585 10.79 12.8268 11.108 12.5924 11.3424C12.358 11.5768 12.04 11.7085 11.7085 11.7085H1.7085C1.37698 11.7085 1.05903 11.5768 0.824613 11.3424C0.590192 11.108 0.458496 10.79 0.458496 10.4585V1.7085C0.458496 1.37698 0.590192 1.05903 0.824613 0.824613C1.05903 0.590192 1.37698 0.458496 1.7085 0.458496H4.8335L6.0835 2.3335H11.7085C12.04 2.3335 12.358 2.46519 12.5924 2.69961C12.8268 2.93403 12.9585 3.25198 12.9585 3.5835V10.4585Z\" stroke=\"#3F43EE\" stroke-width=\"0.916667\"/>\n            </svg>\n            <span class=\"cqa-text-sm cqa-font-semibold\" style=\"color: #3F43EE;\">\n              {{ currentFolderNode?.name }} ({{ currentFolderDirectCount }})\n            </span>\n          </div>\n          <cqa-button\n            variant=\"outlined\"\n            btnSize=\"sm\"\n            customClass=\"!cqa-text-[13px]\"\n            inlineStyles=\"border-color: #3F43EE; color: #3F43EE;\"\n            [text]=\"modularLabels.clearFilter\"\n            (clicked)=\"onFolderSelected(null)\"\n          ></cqa-button>\n        </div>\n\n        <!-- Unorganized section header at root view -->\n        <div\n          *ngIf=\"isModularView && isRootView && modularConfig.showUnorganizedSection\"\n          class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2 cqa-mt-2\" style=\"margin-left: 20px;\"\n        >\n          <mat-icon class=\"cqa-text-[#6D6D74]\" style=\"font-size:16px;width:16px;height:16px\">inbox</mat-icon>\n          <h3 class=\"cqa-text-sm cqa-font-semibold cqa-text-[#6D6D74]\">{{ modularLabels.unorganized }}</h3>\n          <span class=\"cqa-text-xs cqa-text-[#6D6D74]\">\n            {{ unorganizedCount === 1 ? modularLabels.testsCountSingular : modularLabels.testsCountPlural.replace('{n}', '' + unorganizedCount) }}\n          </span>\n        </div>\n\n        <div class=\"cqa-overflow-hidden cqa-border-t cqa-border-l cqa-border-r cqa-border-grey-200 cqa-relative cqa-overflow-x-auto\"\n             [class.cqa-modular-table-flush]=\"isModularView\"\n             [attr.style]=\"(!isModularView ? 'border-radius: 7px;' : '') + ((pagedRows && pagedRows.length > 0) ? '' : ' border-bottom: none !important;')\">\n          <ng-container *ngIf=\"(isTableLoading || isTableDataLoading) || (!effectiveIsEmptyState && pagedRows && pagedRows.length > 0); else storyEmptyTpl\">\n            <app-dynamic-table\n              [style.border-bottom]=\"pagedRows && pagedRows.length > 0 ? '1px solid rgb(226, 226, 227)' : null\"\n              [columns]=\"computedColumns\"\n              [data]=\"pagedRows\"\n              [rowSelectable]=\"rowSelectable\"\n              [enableLocalSort]=\"enableLocalSort && !isReordering\"\n              [isTableLoading]=\"isTableLoading\"\n              [isTableDataLoading]=\"isTableDataLoading\"\n              [cellJsonPathGetter]=\"cellJsonPathGetter\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [enableRowReorder]=\"isReordering\"\n              (rowReorder)=\"onRowReorder($event)\"\n              (sortChange)=\"sortChange.emit($event)\">\n              <ng-template #emptyTableTpl>\n                <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8\">\n                  <img src=\"/assets/illustrations/empty-state.svg\" alt=\"No data\" class=\"cqa-w-32 cqa-h-32 cqa-mb-4\" />\n                  <h3 class=\"cqa-text-lg cqa-font-semibold cqa-mb-2\">No test cases</h3>\n                  <p class=\"cqa-text-sm cqa-text-neutral-500 cqa-mb-4\">Try adjusting filters or create a new test case.</p>\n                  <cqa-button variant=\"filled\" (clicked)=\"toggleFilter()\">Show Filters</cqa-button>\n                </div>\n              </ng-template>\n            </app-dynamic-table>\n          </ng-container>\n\n          <ng-template #storyEmptyTpl>\n            <div class=\"cqa-p-6 cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n              <cqa-empty-state\n                *ngIf=\"effectiveIsEmptyState\"\n                [title]=\"effectiveEmptyStateConfig.title\"\n                [description]=\"effectiveEmptyStateConfig.description\"\n                [imageUrl]=\"effectiveEmptyStateConfig.imageUrl\"\n                [actions]=\"effectiveEmptyStateConfig.actions\"\n                (actionClick)=\"onEmptyAction($event)\"\n              >\n              </cqa-empty-state>\n            </div>\n          </ng-template>\n        </div>\n\n        <cqa-pagination\n          [totalElements]=\"serverSidePagination ? totalElements : filteredRows.length\"\n          [pageIndex]=\"pageIndex\"\n          [pageSize]=\"pageSize\"\n          [pageSizeOptions]=\"pageSizeOptions\"\n          [pageSizeMenuDirection]=\"pageSizeMenuDirection\"\n          [pageItemCount]=\"pagedRows.length\"\n          (paginate)=\"onPaginate($event)\"\n          (pageSizeChange)=\"onPageSizeChange($event)\"\n        >\n        </cqa-pagination>\n      </div>\n    </div>\n\n    <!-- Reused bulk action toolbar -->\n    <div *ngIf=\"anyRowSelected && modularConfig.allowBulkSelection && !isReordering\" class=\"cqa-absolute cqa-bottom-[18.75px] cqa-left-[50%] cqa-translate-x-[-50%] cqa-w-full lg:cqa-max-w-[68%] cqa-sm:max-w-[75%] cqa-max-w-[90%] cqa-z-[1]\">\n      <cqa-table-action-toolbar\n        [selectedItems]=\"selectedItems && selectedItems.length > 0 ? selectedItems : currentSelectedItems\"\n        [actions]=\"effectiveBulkActions\"\n        [showSelectAll]=\"showSelectAllInToolbar\"\n        [allSelected]=\"allSelectedInToolbar\"\n        [showDismiss]=\"showDismissInToolbar\"\n        (actionClick)=\"onBulkAction($event)\"\n        (selectAllChange)=\"onBulkSelectAll($event)\"\n        (dismiss)=\"onBulkDismiss()\"\n      ></cqa-table-action-toolbar>\n    </div>\n\n  </div>\n</div>\n\n","/**\n * Labels for the Test Suite section's dialogs. Kept separate from\n * `ModularLabels` because these are test-suite-specific copy — the modular\n * table template doesn't (and shouldn't) need them.\n *\n * Currently consumed by `MoveTestSuiteDialogComponent` for its own field\n * labels and by the outer dialog shell (title / description / Cancel / Move).\n */\nexport interface TestSuiteLabels {\n  moveTestSuiteDialogTitle: string;\n  moveTestSuiteDialogDescription: string;\n  moveTestSuiteDialogSuiteNameLabel: string;\n  moveTestSuiteDialogCurrentLabel: string;\n  moveTestSuiteDialogDestinationLabel: string;\n  moveTestSuiteDialogDestinationPlaceholder: string;\n  moveTestSuiteDialogCancel: string;\n  moveTestSuiteDialogConfirm: string;\n}\n\nexport const DEFAULT_TEST_SUITE_LABELS: TestSuiteLabels = {\n  moveTestSuiteDialogTitle: 'Move test suite',\n  moveTestSuiteDialogDescription: 'Pick a destination folder for this test suite.',\n  moveTestSuiteDialogSuiteNameLabel: 'Test suite',\n  moveTestSuiteDialogCurrentLabel: 'Current folder',\n  moveTestSuiteDialogDestinationLabel: 'Destination folder',\n  moveTestSuiteDialogDestinationPlaceholder: 'Select a folder below',\n  moveTestSuiteDialogCancel: 'Cancel',\n  moveTestSuiteDialogConfirm: 'Move',\n};\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  DEFAULT_MODULAR_LABELS,\n  FolderNode,\n  ModularLabels,\n} from '../../templates/modular-table-template/modular-table-template.models';\nimport { DEFAULT_TEST_SUITE_LABELS, TestSuiteLabels } from '../test-suite.models';\n\ninterface FlatFolderRow {\n  id: number;\n  name: string;\n  depth: number;\n  disabled: boolean;\n  hasChildren: boolean;\n  expanded: boolean;\n  childrenLoading: boolean;\n  showLoadingPlaceholder: boolean;\n}\n\n/**\n * Body of the \"Move Test Suite\" dialog.\n *\n * Reuses `<cqa-move-to-folder-dialog>` as the tree picker (same embedding pattern\n * as `NewFolderDialogComponent`) so consumers get the same folder-tree UX, while\n * adding two read-only rows above it: the suite's **current folder** (source)\n * and the **destination folder** the user has picked (live-updates).\n *\n * Two integration paths:\n *\n *  1. **From within this library** via `DialogService.open(...)`. The outer\n *     `cqa-dialog` supplies title/description/Cancel/Move buttons; the Move\n *     button reads `pickedFolderId` via `dialogRef.getComponentInstance()` and\n *     checks `isValid` before closing.\n *\n *  2. **Host-driven** — host renders `<cqa-move-test-suite-dialog>` inside its\n *     own modal and listens to `(submitted)` / `(cancelled)` / `(pickedFolderIdChange)`.\n */\n@Component({\n  selector: 'cqa-move-test-suite-dialog',\n  template: `\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-w-full\">\n      <!-- Test suite name (read-only display; surfaces which suite is being moved) -->\n      <cqa-custom-input\n        [label]=\"testSuiteLabels.moveTestSuiteDialogSuiteNameLabel\"\n        [value]=\"suiteName\"\n        [disabled]=\"fieldsDisabled\"\n        [fullWidth]=\"true\"\n      ></cqa-custom-input>\n\n      <!-- Current folder (rendered as a disabled input) -->\n      <cqa-custom-input\n        [label]=\"testSuiteLabels.moveTestSuiteDialogCurrentLabel\"\n        [value]=\"resolvedCurrentName\"\n        [disabled]=\"fieldsDisabled\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"onCurrentFieldValueChange($event)\"\n        (focused)=\"onCurrentFieldFocused($event)\"\n        (blurred)=\"onCurrentFieldBlurred($event)\"\n      ></cqa-custom-input>\n\n      <!-- Destination folder (rendered as a disabled input; value driven by the tree picker below) -->\n      <cqa-custom-input\n        [label]=\"testSuiteLabels.moveTestSuiteDialogDestinationLabel\"\n        [value]=\"destinationFieldValue\"\n        [placeholder]=\"destinationFieldPlaceholder\"\n        [disabled]=\"fieldsDisabled\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"onDestinationFieldValueChange($event)\"\n        (focused)=\"onDestinationFieldFocused($event)\"\n        (blurred)=\"onDestinationFieldBlurred($event)\"\n      ></cqa-custom-input>\n\n      <!-- Folder tree picker (inlined; takes reference from cqa-move-to-folder-dialog\n           but does not embed it, so the lazy-fetch wiring and expansion state stay\n           local to this dialog). -->\n      <ng-template #folderIconTpl>\n        <svg width=\"17\" height=\"15\" viewBox=\"0 0 17 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" class=\"cqa-flex-shrink-0\">\n          <path d=\"M15.6375 12.6377C15.6375 13.0355 15.4794 13.4171 15.1981 13.6984C14.9168 13.9797 14.5353 14.1377 14.1375 14.1377H2.13745C1.73963 14.1377 1.3581 13.9797 1.07679 13.6984C0.795486 13.4171 0.637451 13.0355 0.637451 12.6377V2.1377C0.637451 1.73987 0.795486 1.35834 1.07679 1.07704C1.3581 0.795731 1.73963 0.637695 2.13745 0.637695H5.88745L7.38745 2.8877H14.1375C14.5353 2.8877 14.9168 3.04573 15.1981 3.32704C15.4794 3.60834 15.6375 3.98987 15.6375 4.3877V12.6377Z\" stroke=\"currentColor\" stroke-width=\"1.275\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </ng-template>\n\n      <ng-template #unorganizedIconTpl>\n        <svg width=\"17\" height=\"15\" viewBox=\"0 0 17 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" class=\"cqa-flex-shrink-0\">\n          <path d=\"M14.6875 5.5V12.5C14.6875 13.3 14.0375 14 13.1875 14H3.8125C2.9625 14 2.3125 13.3 2.3125 12.5V5.5M14.6875 5.5L12.7875 1.7C12.5375 1.2 12.0875 1 11.5875 1H5.4125C4.9125 1 4.4625 1.2 4.2125 1.7L2.3125 5.5M14.6875 5.5H2.3125M6.1875 8.5H10.8125\" stroke=\"currentColor\" stroke-width=\"1.275\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </ng-template>\n\n      <div class=\"cqa-flex cqa-flex-col cqa-border-solid cqa-border cqa-border-[#E2E2E3] cqa-rounded-[10px] cqa-py-2 cqa-w-full cqa-overflow-y-auto cqa-bg-white cqa-scrollbar-thin\" [style.height]=\"pickerHeight\">\n        <div\n          role=\"button\"\n          tabindex=\"0\"\n          class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-transition-colors cqa-text-sm\"\n          [ngClass]=\"isPicked(null) ? 'cqa-bg-indigo-50 cqa-text-indigo-700' : 'cqa-text-neutral-800 hover:cqa-bg-neutral-50'\"\n          [class.cqa-opacity-40]=\"isUnorganizedDisabled\"\n          [class.cqa-cursor-not-allowed]=\"isUnorganizedDisabled\"\n          [attr.aria-disabled]=\"isUnorganizedDisabled || null\"\n          (click)=\"!isUnorganizedDisabled && pick(null)\"\n          (keydown.enter)=\"!isUnorganizedDisabled && pick(null)\"\n          (keydown.space)=\"$event.preventDefault(); !isUnorganizedDisabled && pick(null)\"\n        >\n          <span class=\"cqa-inline-block cqa-w-5 cqa-h-5 cqa-flex-shrink-0\"></span>\n          <ng-container *ngTemplateOutlet=\"unorganizedIconTpl\"></ng-container>\n          <span>{{ labels.moveDialogRoot }}</span>\n        </div>\n\n        <ng-container *ngFor=\"let row of flatRows; trackBy: trackById\">\n          <div\n            role=\"button\"\n            tabindex=\"0\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-py-2 cqa-pr-4 cqa-cursor-pointer cqa-transition-colors cqa-text-sm\"\n            [ngClass]=\"isPicked(row.id) ? 'cqa-bg-indigo-50 cqa-text-indigo-700' : 'cqa-text-neutral-800 hover:cqa-bg-neutral-50'\"\n            [class.cqa-opacity-40]=\"row.disabled\"\n            [class.cqa-cursor-not-allowed]=\"row.disabled\"\n            [style.paddingLeft.px]=\"16 + row.depth * 24\"\n            (click)=\"!row.disabled && pick(row.id)\"\n            (keydown.enter)=\"!row.disabled && pick(row.id)\"\n            (keydown.space)=\"!row.disabled && $event.preventDefault(); !row.disabled && pick(row.id)\"\n          >\n            <button\n              *ngIf=\"row.hasChildren; else chevronPlaceholder\"\n              type=\"button\"\n              class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5 cqa-flex-shrink-0 cqa-rounded cqa-text-neutral-600 hover:cqa-bg-neutral-100 hover:cqa-text-neutral-900\"\n              [attr.aria-label]=\"row.expanded ? 'Collapse ' + row.name : 'Expand ' + row.name\"\n              (click)=\"toggleExpanded(row.id!, $event)\"\n            >\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"\n                   [class.cqa-rotate-90]=\"row.expanded\" style=\"transition: transform 120ms ease;\">\n                <path d=\"M5 3L9 7L5 11\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </button>\n            <ng-template #chevronPlaceholder>\n              <span class=\"cqa-inline-block cqa-w-5 cqa-h-5 cqa-flex-shrink-0\"></span>\n            </ng-template>\n\n            <ng-container *ngTemplateOutlet=\"folderIconTpl\"></ng-container>\n            <span class=\"cqa-truncate\">{{ row.name }}</span>\n          </div>\n\n          <div\n            *ngIf=\"row.showLoadingPlaceholder\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-py-2 cqa-pr-4 cqa-text-sm cqa-text-neutral-500 cqa-italic\"\n            [style.paddingLeft.px]=\"16 + (row.depth + 1) * 24\"\n          >\n            <span class=\"cqa-inline-block cqa-w-5 cqa-h-5 cqa-flex-shrink-0\"></span>\n            <span>Loading…</span>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n  `,\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MoveTestSuiteDialogComponent implements OnInit, OnChanges {\n  // NOTE: `folders` and `labels` are declared as setters (instead of plain @Input fields)\n  // because `DialogService.open(...)` assigns the `inputs` map via direct property\n  // assignment *after* `attachComponent` has already run the component's lifecycle\n  // hooks — direct assignment bypasses `ngOnChanges`, so setters keep derived state\n  // in sync no matter the assignment order. Same pattern as `NewFolderDialogComponent`.\n\n  private _folders: FolderNode[] = [];\n  @Input() set folders(value: FolderNode[]) {\n    this._folders = value || [];\n    this.cdr.markForCheck();\n  }\n  get folders(): FolderNode[] { return this._folders; }\n\n  private _labels: ModularLabels = { ...DEFAULT_MODULAR_LABELS };\n  @Input() set labels(value: ModularLabels) {\n    this._labels = value || { ...DEFAULT_MODULAR_LABELS };\n    this.cdr.markForCheck();\n  }\n  get labels(): ModularLabels { return this._labels; }\n\n  /** Test-suite-section labels (title, description, button text, field labels,\n   *  placeholder). Kept separate from `labels` (ModularLabels) so the embedded\n   *  picker can keep its modular-table-template label model. Same setter\n   *  pattern as `labels` for DialogService property-assignment compatibility. */\n  private _testSuiteLabels: TestSuiteLabels = { ...DEFAULT_TEST_SUITE_LABELS };\n  @Input() set testSuiteLabels(value: TestSuiteLabels) {\n    this._testSuiteLabels = value || { ...DEFAULT_TEST_SUITE_LABELS };\n    this.cdr.markForCheck();\n  }\n  get testSuiteLabels(): TestSuiteLabels { return this._testSuiteLabels; }\n\n  /** Folder the suite currently lives in. Used both to gray out the row in the\n   *  embedded picker and to render the \"Current folder\" readout. */\n  @Input() currentFolderId: number | null = null;\n\n  /** Optional override for the current-folder display name. When not provided,\n   *  the component resolves the name from `folders` by walking to `currentFolderId`,\n   *  falling back to `labels.moveDialogRoot` (\"Unorganized\") when null. */\n  @Input() currentFolderName: string | null = null;\n\n  /** Name of the test suite being moved. Rendered as a disabled input at the\n   *  top of the dialog body so the user can confirm which suite the move\n   *  applies to. Defaults to empty string. */\n  @Input() suiteName: string = '';\n\n  /** Destination folder id picked by the user. Two-way-bind friendly. */\n  @Input() pickedFolderId: number | null = null;\n\n  /** Height of the embedded picker. Defaults to 240px (matches the parent-folder\n   *  picker height in `NewFolderDialogComponent`) so the modal stays compact. */\n  @Input() pickerHeight: string = '240px';\n\n  /** When true (default), both the Current folder and Destination folder inputs\n   *  render as disabled (read-only via the cqa-custom-input `[disabled]` flag).\n   *  Set to false if a host needs to re-enable interaction on those fields. */\n  @Input() fieldsDisabled: boolean = true;\n\n  @Output() pickedFolderIdChange = new EventEmitter<number | null>();\n  @Output() submitted = new EventEmitter<{ targetFolderId: number | null }>();\n  @Output() cancelled = new EventEmitter<void>();\n  /** Fires when a folder needs its children fetched. Emitted by `pick` (row\n   *  click) and `toggleExpanded` (chevron click) when the target node has\n   *  `hasChildren = true` but `loadedPages == null` and is not already fetching.\n   *  Hosts subscribe and call their paginated fetch, mutating the FolderNode\n   *  in place (set `children`, `loadedPages`, `childrenLoading`). */\n  @Output() folderChildrenRequested = new EventEmitter<number>();\n\n  /** Bubble cqa-custom-input focus/blur events up to hosts. Useful when\n   *  `fieldsDisabled = false` and the host wants to react to interaction. */\n  @Output() currentFieldFocus = new EventEmitter<FocusEvent>();\n  @Output() currentFieldBlur = new EventEmitter<FocusEvent>();\n  @Output() destinationFieldFocus = new EventEmitter<FocusEvent>();\n  @Output() destinationFieldBlur = new EventEmitter<FocusEvent>();\n\n  /** Set to true the first time the user picks anything. Lets `isValid` treat\n   *  the initial pre-touch state as \"nothing selected\" — important when the\n   *  suite starts in Unorganized (`currentFolderId = null`) so a fresh dialog\n   *  doesn't appear valid just because `pickedFolderId` also defaults to null. */\n  private pickedTouched = false;\n\n  /** Folder ids currently expanded in the inlined picker. Managed entirely\n   *  inside this component (no external Input) so it survives the host pushing\n   *  a new `folders` reference after each lazy-fetch resolves. */\n  private expandedIds = new Set<number>();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.seedExpandedIds();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Re-seed only when expansion-intent inputs change. NEVER on `folders` —\n    // the host pushes a new top-level reference after every lazy fetch and a\n    // reseed there would collapse the folder the user just expanded.\n    if (changes['currentFolderId'] || changes['pickedFolderId']) {\n      this.seedExpandedIds();\n    }\n  }\n\n  /** Folder-row click handler. Selects the folder as the destination and, when\n   *  the folder has unloaded children, auto-expands it and asks the host to\n   *  fetch its children. */\n  pick(id: number | null): void {\n    this.pickedFolderId = id;\n    this.pickedTouched = true;\n    this.pickedFolderIdChange.emit(id);\n    if (id != null) {\n      this.expandedIds.add(id);\n      this.requestChildrenIfMissing(id);\n    }\n    this.cdr.markForCheck();\n  }\n\n  /** Chevron click handler. Toggles expansion locally; on expand path, asks\n   *  the host to fetch children when not already loaded. */\n  toggleExpanded(id: number, event: Event): void {\n    event.stopPropagation();\n    if (this.expandedIds.has(id)) {\n      this.expandedIds.delete(id);\n    } else {\n      this.expandedIds.add(id);\n      this.requestChildrenIfMissing(id);\n    }\n    this.cdr.markForCheck();\n  }\n\n  isPicked(id: number | null): boolean {\n    return this.pickedFolderId === id;\n  }\n\n  /** \"Unorganized\" row is disabled when the suite is already in Unorganized. */\n  get isUnorganizedDisabled(): boolean {\n    return this.currentFolderId == null;\n  }\n\n  /** Flattened, depth-indented row descriptors fed into the template `*ngFor`.\n   *  Walks `_folders`, derives chevron / loading / expanded state per node. */\n  get flatRows(): FlatFolderRow[] {\n    const out: FlatFolderRow[] = [];\n    const walk = (nodes: FolderNode[], depth: number) => {\n      for (const n of nodes || []) {\n        // Drive the chevron from the backend's authoritative `hasChildren` so\n        // it shows BEFORE children are loaded — required for lazy-load.\n        const hasChildren = !!n.hasChildren;\n        const expanded = this.expandedIds.has(n.id);\n        const childrenLoading = !!n.childrenLoading;\n        const childrenLoaded = !!(n.children && n.children.length);\n        out.push({\n          id: n.id,\n          name: n.name,\n          depth,\n          disabled: n.id === this.currentFolderId,\n          hasChildren,\n          expanded,\n          childrenLoading,\n          showLoadingPlaceholder: expanded && childrenLoading && !childrenLoaded,\n        });\n        if (expanded && childrenLoaded) walk(n.children!, depth + 1);\n      }\n    };\n    walk(this._folders, 0);\n    return out;\n  }\n\n  trackById = (_: number, row: FlatFolderRow) => row.id;\n\n  /** True once the user has picked a destination via the embedded tree. Drives\n   *  the destination-readout styling (indigo when picked, muted when not). */\n  get hasPick(): boolean {\n    return this.pickedTouched;\n  }\n\n  get resolvedCurrentName(): string {\n    if (this.currentFolderName && this.currentFolderName.trim().length) {\n      return this.currentFolderName;\n    }\n    if (this.currentFolderId == null) {\n      return this.labels.moveDialogRoot;\n    }\n    const name = this.findFolderName(this._folders, this.currentFolderId);\n    return name ?? this.labels.moveDialogRoot;\n  }\n\n  /** Value shown inside the Destination input. Empty until the user picks; once\n   *  picked, the resolved folder name (or `labels.moveDialogRoot` for Unorganized).\n   *  Empty state lets the input's `[placeholder]` show through. */\n  get destinationFieldValue(): string {\n    if (!this.pickedTouched) return '';\n    if (this.pickedFolderId == null) return this.labels.moveDialogRoot;\n    return this.findFolderName(this._folders, this.pickedFolderId) ?? this.labels.moveDialogRoot;\n  }\n\n  /** Placeholder shown in the Destination input before the user picks. */\n  get destinationFieldPlaceholder(): string {\n    return this._testSuiteLabels.moveTestSuiteDialogDestinationPlaceholder;\n  }\n\n  /** Move is valid when the user has picked a destination different from the\n   *  current folder. Picking the same folder as the source is a no-op, and we\n   *  also require an explicit interaction (`pickedTouched`). */\n  get isValid(): boolean {\n    if (!this.pickedTouched) return false;\n    return this.pickedFolderId !== this.currentFolderId;\n  }\n\n  submit(): void {\n    if (!this.isValid) return;\n    this.submitted.emit({ targetFolderId: this.pickedFolderId });\n  }\n\n  cancel(): void {\n    this.cancelled.emit();\n  }\n\n  /** Hooks for the Current folder cqa-custom-input. Field is disabled by\n   *  default, so these mostly no-op; they're wired so the component still\n   *  behaves correctly when `fieldsDisabled = false`. */\n  onCurrentFieldValueChange(_value: string): void {\n    // Read-only field — ignore programmatic changes.\n  }\n  onCurrentFieldFocused(event: FocusEvent): void {\n    this.currentFieldFocus.emit(event);\n  }\n  onCurrentFieldBlurred(event: FocusEvent): void {\n    this.currentFieldBlur.emit(event);\n  }\n\n  /** Hooks for the Destination folder cqa-custom-input. Value is driven by the\n   *  tree picker below, so the input itself is informational. */\n  onDestinationFieldValueChange(_value: string): void {\n    // Destination is driven by the tree picker, not the input itself.\n  }\n  onDestinationFieldFocused(event: FocusEvent): void {\n    this.destinationFieldFocus.emit(event);\n  }\n  onDestinationFieldBlurred(event: FocusEvent): void {\n    this.destinationFieldBlur.emit(event);\n  }\n\n  private requestChildrenIfMissing(id: number): void {\n    const node = this.findNode(this._folders, id);\n    if (!node) return;\n    if (node.hasChildren && node.loadedPages == null && !node.childrenLoading) {\n      this.folderChildrenRequested.emit(id);\n    }\n  }\n\n  private seedExpandedIds(): void {\n    this.expandedIds = new Set<number>();\n    const seed = this.currentFolderId != null ? this.currentFolderId : this.pickedFolderId;\n    if (seed != null) {\n      const trail: number[] = [];\n      this.collectAncestors(this._folders, seed, trail);\n      trail.forEach((id) => this.expandedIds.add(id));\n    }\n  }\n\n  private collectAncestors(nodes: FolderNode[], targetId: number, acc: number[]): boolean {\n    for (const n of nodes || []) {\n      acc.push(n.id);\n      if (n.id === targetId) return true;\n      if (n.children && this.collectAncestors(n.children, targetId, acc)) return true;\n      acc.pop();\n    }\n    return false;\n  }\n\n  private findNode(nodes: FolderNode[], id: number): FolderNode | null {\n    for (const n of nodes || []) {\n      if (n.id === id) return n;\n      if (n.children?.length) {\n        const hit = this.findNode(n.children, id);\n        if (hit) return hit;\n      }\n    }\n    return null;\n  }\n\n  private findFolderName(nodes: FolderNode[], id: number): string | null {\n    for (const n of nodes || []) {\n      if (n.id === id) return n.name;\n      if (n.children?.length) {\n        const hit = this.findFolderName(n.children, id);\n        if (hit != null) return hit;\n      }\n    }\n    return null;\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport interface NamePromptSubmitPayload {\n  name: string;\n}\n\n/**\n * Generic single-input prompt modal. Used wherever a flow needs to ask the\n * user for a single name (or short text) and confirm with a primary button.\n *\n * Examples: New Folder, Clone Suite, Rename, New Plan, etc.\n *\n * All copy is configurable through Inputs — see `title`, `description`,\n * `label`, `placeholder`, `submitButtonText`, `cancelButtonText`. Defaults\n * preserve the legacy \"New Folder\" wording for callers that haven't migrated.\n */\n@Component({\n  selector: 'cqa-name-prompt-modal',\n  templateUrl: './name-prompt-modal.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' },\n})\nexport class NamePromptModalComponent {\n  @Input() isOpen = false;\n  @Input() title = 'New Folder';\n  @Input() description: string | null = 'Rename any time by double-clicking';\n  @Input() label = 'Folder name';\n  @Input() placeholder = 'e.g. Checkout Flow, User Auth, Payment Tests';\n  /** Submit (primary) button text. Lets consumers reuse this modal for\n   * \"Create folder\", \"Clone Suite\", \"Rename\", etc. */\n  @Input() submitButtonText = 'Create folder';\n  /** Cancel (secondary) button text. Most consumers can leave the default. */\n  @Input() cancelButtonText = 'Cancel';\n  /** When true, locks the modal: spinner on the submit button, all dismiss\n   * paths (cancel, close X, backdrop, ESC) become no-ops, and submit() bails\n   * out so a fast Enter press can't double-fire while the parent is mid-API. */\n  @Input() isSubmitting = false;\n\n  private _name = '';\n  @Input() set name(value: string) {\n    this._name = value || '';\n    this.nameTouched = false;\n    this.cdr.markForCheck();\n  }\n  get name(): string {\n    return this._name;\n  }\n\n  @Output() nameChange = new EventEmitter<string>();\n  @Output() submitted = new EventEmitter<NamePromptSubmitPayload>();\n  @Output() cancelled = new EventEmitter<void>();\n\n  private nameTouched = false;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  onNameChange(value: string): void {\n    this._name = value;\n    this.nameTouched = true;\n    this.nameChange.emit(value);\n    this.cdr.markForCheck();\n  }\n\n  get nameErrors(): string[] {\n    if (!this.nameTouched) return [];\n    const trimmed = (this._name || '').trim();\n    if (!trimmed) return [`${this.label} is required`];\n    return [];\n  }\n\n  get isValid(): boolean {\n    return (this._name || '').trim().length > 0;\n  }\n\n  submit(): void {\n    if (!this.isValid || this.isSubmitting) return;\n    this.submitted.emit({ name: this._name.trim() });\n  }\n\n  onCancel(): void {\n    if (this.isSubmitting) return;\n    this.cancelled.emit();\n  }\n\n  onClose(): void {\n    if (this.isSubmitting) return;\n    this.cancelled.emit();\n  }\n\n  onBackdropClick(): void {\n    if (this.isSubmitting) return;\n    this.cancelled.emit();\n  }\n\n  onEscape(event: Event): void {\n    event.stopPropagation();\n    if (this.isSubmitting) return;\n    this.cancelled.emit();\n  }\n}\n","<div *ngIf=\"isOpen\"\n     id=\"cqa-ui-root\"\n     style=\"position: fixed; inset: 0; z-index: 1000;\">\n  <div class=\"cqa-fixed cqa-inset-0 cqa-bg-black/40\"\n       (click)=\"onBackdropClick()\"></div>\n\n  <div class=\"cqa-fixed cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-p-4 cqa-pointer-events-none\">\n    <div class=\"cqa-relative cqa-w-full cqa-max-w-[480px] cqa-bg-white cqa-rounded-2xl cqa-shadow-md cqa-border cqa-border-border-default cqa-pointer-events-auto\"\n         (keydown.escape)=\"onEscape($event)\"\n         tabindex=\"-1\">\n      <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-p-6 cqa-pb-4\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n          <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-title cqa-m-0\">{{ title }}</h2>\n          <p *ngIf=\"description\"\n             class=\"cqa-text-sm cqa-text-description cqa-m-0\">\n            {{ description }}\n          </p>\n        </div>\n        <button type=\"button\"\n                class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-6 cqa-w-6 cqa-rounded cqa-bg-transparent cqa-border-0 cqa-text-description hover:cqa-text-title\"\n                [class.cqa-cursor-pointer]=\"!isSubmitting\"\n                [class.cqa-cursor-not-allowed]=\"isSubmitting\"\n                [class.cqa-opacity-50]=\"isSubmitting\"\n                [disabled]=\"isSubmitting\"\n                (click)=\"onClose()\"\n                aria-label=\"Close\">\n          <mat-icon class=\"cqa-text-[20px] cqa-leading-5 cqa-h-5 cqa-w-5\">close</mat-icon>\n        </button>\n      </div>\n\n      <div class=\"cqa-px-6 cqa-pb-5\">\n        <cqa-custom-input\n          [label]=\"label\"\n          [placeholder]=\"placeholder\"\n          [value]=\"name\"\n          [required]=\"true\"\n          [fullWidth]=\"true\"\n          [errors]=\"nameErrors\"\n          (valueChange)=\"onNameChange($event)\"\n          (enterPressed)=\"submit()\">\n        </cqa-custom-input>\n      </div>\n\n      <div class=\"cqa-border-t cqa-border-border-default cqa-px-6 cqa-py-4 cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n        <cqa-button variant=\"outlined\"\n                    [text]=\"cancelButtonText\"\n                    btnSize=\"lg\"\n                    [fullWidth]=\"true\"\n                    [disabled]=\"isSubmitting\"\n                    (clicked)=\"onCancel()\">\n        </cqa-button>\n        <cqa-button variant=\"filled\"\n                    [text]=\"submitButtonText\"\n                    btnSize=\"lg\"\n                    [fullWidth]=\"true\"\n                    [loading]=\"isSubmitting\"\n                    [disabled]=\"!isValid || isSubmitting\"\n                    (clicked)=\"submit()\">\n        </cqa-button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Directive, HostBinding, HostListener, Input } from '@angular/core';\nimport { ROW_DRAG_MIME } from '../modular-table-template.models';\n\n@Directive({\n  selector: '[cqaRowDrag]',\n})\nexport class RowDragDirective {\n  /** Function that returns the test id payload for this row (array of ids). */\n  @Input('cqaRowDrag') buildPayload!: () => Array<string | number>;\n  @Input() dragEnabled: boolean = true;\n\n  @HostBinding('attr.draggable') get draggable() {\n    return this.dragEnabled ? 'true' : null;\n  }\n\n  @HostListener('dragstart', ['$event']) onDragStart(event: DragEvent) {\n    if (!this.dragEnabled || !event.dataTransfer || !this.buildPayload) return;\n    const ids = this.buildPayload() ?? [];\n    event.dataTransfer.effectAllowed = 'move';\n    try {\n      event.dataTransfer.setData(ROW_DRAG_MIME, JSON.stringify(ids));\n    } catch {\n      /* some browsers reject custom MIME — fall through */\n    }\n    event.dataTransfer.setData('text/plain', JSON.stringify(ids));\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { OverlayContainer } from '@angular/cdk/overlay';\n\n/**\n * Custom overlay container that adds 'cqa-ui-root' class to individual overlay panes\n * containing library components, rather than to the entire container.\n * \n * This ensures library CSS (scoped with .cqa-ui-root) only affects library overlays,\n * not portal overlays that may be open simultaneously.\n */\n@Injectable()\nexport class TailwindOverlayContainer extends OverlayContainer {\n  private updateTimeout: number | null = null;\n\n  protected override _createContainer(): void {\n    super._createContainer();\n    if (this._containerElement) {\n      // Never add cqa-ui-root to the container itself\n      this._containerElement.classList.remove('cqa-ui-root');\n      \n      // Use MutationObserver to detect when overlay panes are created/destroyed\n      this.observeOverlayPanes();\n    }\n  }\n\n  private observeOverlayPanes(): void {\n    if (!this._containerElement) return;\n\n    const observer = new MutationObserver(() => {\n      // Debounce updates to avoid excessive checks during rapid DOM changes\n      if (this.updateTimeout !== null) {\n        cancelAnimationFrame(this.updateTimeout);\n      }\n      this.updateTimeout = requestAnimationFrame(() => {\n        this.updateOverlayPaneClasses();\n        this.updateTimeout = null;\n      });\n    });\n\n    observer.observe(this._containerElement, {\n      childList: true,\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['class']\n    });\n\n    // Also check immediately in case overlays already exist\n    requestAnimationFrame(() => this.updateOverlayPaneClasses());\n  }\n\n  private updateOverlayPaneClasses(): void {\n    if (!this._containerElement) return;\n\n    // Find all overlay panes in the container\n    const allPanes = this._containerElement.querySelectorAll('.cdk-overlay-pane');\n    \n    allPanes.forEach((pane) => {\n      // Check if this pane itself has library component classes (e.g., backdrop)\n      const paneHasLibraryClass = pane.classList.contains('cqa-dialog-panel') ||\n                                  pane.classList.contains('cqa-dialog-backdrop') ||\n                                  pane.classList.contains('cqa-profile-menu-panel') ||\n                                  pane.classList.contains('cqa-workspace-menu-panel') ||\n                                  pane.classList.contains('ctc-select-panel') ||\n                                  pane.classList.contains('ctc-date-range-panel') ||\n                                  pane.classList.contains('visual-difference-dialog') ||\n                                  pane.classList.contains('cqa-custom-edit-step-panel') ||\n                                  pane.classList.contains('cqa-test-data-modal-panel') ||\n                                  pane.classList.contains('cqa-step-details-drawer-panel');\n      \n      // Also check for library components inside the pane\n      // These classes may be on child elements rather than the pane itself\n      const hasLibraryDialogInside = pane.querySelector('.cqa-dialog-panel') !== null;\n      const hasLibrarySelectInside = pane.querySelector('.ctc-select-panel') !== null ||\n                                     pane.querySelector('.mat-select-panel') !== null;\n      const hasLibraryDatePickerInside = pane.querySelector('.ctc-date-range-panel') !== null;\n      const hasVisualDifferenceDialogInside = pane.querySelector('.visual-difference-dialog') !== null ||\n                                             pane.querySelector('.cqa-visual-difference-modal') !== null;\n      const hasCustomEditStepInside = pane.querySelector('.cqa-custom-edit-step-panel') !== null ||\n                                             pane.querySelector('cqa-custom-edit-step') !== null;\n      const hasTestDataModalInside = pane.querySelector('.cqa-test-data-modal-panel') !== null ||\n                                            pane.querySelector('cqa-test-data-modal') !== null;\n      const hasStepDetailsDrawerInside = pane.querySelector('.cqa-step-details-drawer-panel') !== null ||\n                                            pane.querySelector('cqa-step-details-drawer') !== null;\n\n      const isLibraryOverlay = paneHasLibraryClass || hasLibraryDialogInside ||\n                               hasLibrarySelectInside || hasLibraryDatePickerInside ||\n                               hasVisualDifferenceDialogInside || hasCustomEditStepInside ||\n                               hasTestDataModalInside || hasStepDetailsDrawerInside;\n      \n      if (isLibraryOverlay) {\n        // This is a library overlay - add the class\n        pane.classList.add('cqa-ui-root');\n      } else {\n        // This is NOT a library overlay (e.g., portal dialog) - ensure class is removed\n        pane.classList.remove('cqa-ui-root');\n      }\n    });\n  }\n}\n\n\n","export interface ProfileMenuUser {\n  /** Two-letter initials shown in the avatar circle (e.g. \"TB\"). */\n  initials: string;\n  /** Display name (e.g. \"Teslim Bello\"). */\n  name: string;\n  /** Optional email shown under the name. */\n  email?: string;\n  /** Optional role pill rendered below the email (e.g. \"Workspace Admin\"). */\n  badge?: {\n    label: string;\n    /** Visual variant: 'admin' (purple, default) or 'default' (neutral). */\n    variant?: 'admin' | 'default';\n  };\n  /** Optional CSS background override for the avatar (gradient or solid). */\n  avatarColor?: string;\n}\n\nexport interface ProfileMenuItem {\n  /** Stable identifier emitted via `itemClick` when the row is clicked. */\n  id: string;\n  label: string;\n  /** Icon font class — same convention as NavItem.iconClass (e.g. \"fa-solid fa-user\"). */\n  iconClass?: string;\n  /** Raw inline SVG markup. Sanitized internally before render. Takes precedence over `iconClass`. */\n  iconSvg?: string;\n  /** Optional keyboard hint chip rendered on the right (e.g. \"⌘O\"). */\n  shortcut?: string;\n  /** 'danger' renders the row in red (used for Logout). */\n  variant?: 'default' | 'danger';\n  disabled?: boolean;\n}\n\nexport interface ProfileMenuDivider {\n  type: 'divider';\n}\n\nexport type ProfileMenuEntry = ProfileMenuItem | ProfileMenuDivider;\n\nexport function isProfileMenuDivider(entry: ProfileMenuEntry): entry is ProfileMenuDivider {\n  return (entry as ProfileMenuDivider).type === 'divider';\n}\n","export interface NavItem {\n  id: string;\n  label: string;\n  /** CSS icon class rendered as <i class=\"iconClass\"> */\n  iconClass?: string;\n  /** Route path — consuming component navigates on navItemClick */\n  routerLink?: string;\n  children?: NavChildItem[];\n  /** Badge count or label, e.g. \"3\" */\n  badge?: string;\n  status?: 'live' | 'danger';\n  isNew?: boolean;\n  disabled?: boolean;\n  disabledTooltip?: string;\n}\n\nexport interface NavChildItem {\n  id: string;\n  label: string;\n  iconClass?: string;\n  routerLink?: string;\n  isNew?: boolean;\n  disabled?: boolean;\n}\n\nexport interface NavSection {\n  type: 'section';\n  label: string;\n}\n\nexport type NavMenuItem = NavItem | NavSection;\n\nexport function isNavSection(item: NavMenuItem): item is NavSection {\n  return (item as NavSection).type === 'section';\n}\n\nexport {\n  ProfileMenuUser,\n  ProfileMenuItem,\n  ProfileMenuDivider,\n  ProfileMenuEntry,\n  isProfileMenuDivider,\n} from './profile-menu/profile-menu.models';\n\nexport interface SidebarConfig {\n  workspaceName?: string;\n  /** Optional logo image URL/data-URI shown inside the workspace avatar. Falls back to the workspace initial when not provided. */\n  workspaceLogo?: string;\n  /** e.g. 'Live' */\n  workspaceBadge?: string;\n  workspaceStatus?: 'live' | 'warning' | 'offline';\n  userName?: string;\n  userInitials?: string;\n  userRole?: string;\n  /** Label for the CTA button, e.g. 'New Test Case' */\n  ctaLabel?: string;\n  searchPlaceholder?: string;\n  showSearch?: boolean;\n  /** When true, shows a ⌘K hint in the expanded search row */\n  showSearchShortcut?: boolean;\n  showCta?: boolean;\n  /** Reserved; notifications are not shown on the collapsed rail. */\n  showNotifications?: boolean;\n  /** Reserved; badge is not shown on the collapsed rail. */\n  notificationCount?: number;\n  showLiveChat?: boolean;\n  /** Help & docs entry (expanded footer + collapsed utility stack). Default true */\n  showHelpDocs?: boolean;\n  /** Reserved; speaker / “what’s new” is not shown on the collapsed rail. */\n  showSpeaker?: boolean;\n  /** Label for the help utility when the sidebar is expanded */\n  helpDocsLabel?: string;\n  /** When true, the sidebar starts expanded and pinned (mouse leave does not collapse). */\n  defaultPinned?: boolean;\n  /** When false, hides the header pin control (expanded sidebar always auto-collapses on mouse leave unless defaultPinned). Default: true. */\n  showSidebarPin?: boolean;\n}\n","import {\n  Component,\n  ElementRef,\n  Input,\n  OnDestroy,\n  Output,\n  EventEmitter,\n  ViewChild\n} from '@angular/core';\nimport { ConnectedPosition, Overlay, ScrollStrategy } from '@angular/cdk/overlay';\nimport { NavChildItem, NavItem } from './sidebar.models';\n\n@Component({\n  selector: 'cqa-nav-item',\n  templateUrl: './nav-item.component.html',\n  styleUrls: ['./nav-item.component.scss']\n})\nexport class NavItemComponent implements OnDestroy {\n  @Input() item!: NavItem;\n  @Input() isActive: boolean = false;\n  /** Whether the sidebar is in expanded (wide) mode */\n  @Input() isExpanded: boolean = false;\n  /** Whether this item's sub-menu is open */\n  @Input() isOpen: boolean = false;\n  /** Current route / selection id — used to highlight child in collapsed flyout */\n  @Input() activeNavId: string = '';\n\n  @Output() itemClick = new EventEmitter<string>();\n\n  @ViewChild('navHost') navHostRef?: ElementRef<HTMLElement>;\n\n  /** Collapsed parent: drives CDK connected overlay for submenu */\n  showCollapsedFlyout = false;\n\n  private closeFlyoutTimer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly FLYOUT_CLOSE_DELAY_MS = 120;\n\n  readonly flyoutScrollStrategy: ScrollStrategy;\n  readonly collapsedFlyoutPositions: ConnectedPosition[] = [\n    {\n      originX: 'end',\n      originY: 'center',\n      overlayX: 'start',\n      overlayY: 'center',\n      offsetX: 8\n    },\n    {\n      originX: 'end',\n      originY: 'top',\n      overlayX: 'start',\n      overlayY: 'top',\n      offsetX: 8\n    },\n    {\n      originX: 'end',\n      originY: 'bottom',\n      overlayX: 'start',\n      overlayY: 'bottom',\n      offsetX: 8\n    }\n  ];\n\n  constructor(private readonly overlay: Overlay) {\n    this.flyoutScrollStrategy = this.overlay.scrollStrategies.reposition();\n  }\n\n  ngOnDestroy(): void {\n    this.clearFlyoutCloseTimer();\n  }\n\n  get hasChildren(): boolean {\n    return !!(this.item?.children?.length);\n  }\n\n  get collapsedFlyoutOpen(): boolean {\n    return (\n      !this.isExpanded &&\n      this.showCollapsedFlyout &&\n      this.hasChildren &&\n      !!(this.item?.children?.length)\n    );\n  }\n\n  /**\n   * Collapsed rail: show label (leaf) or disabled copy in MatTooltip so it renders in CDK overlay,\n   * not as an absolute child inside the scrolling nav.\n   */\n  get collapsedRailTooltip(): string {\n    if (this.item?.disabled && this.item?.disabledTooltip) {\n      return this.item.disabledTooltip;\n    }\n    if (!this.isExpanded && !this.hasChildren && this.item?.label) {\n      return this.item.label;\n    }\n    return '';\n  }\n\n  get collapsedRailTooltipClass(): string {\n    return !this.isExpanded && this.collapsedRailTooltip ? 'cqa-nav-rail-tooltip' : '';\n  }\n\n  isChildRowActive(childId: string): boolean {\n    return this.activeNavId === childId;\n  }\n\n  onHostMouseEnter(): void {\n    this.clearFlyoutCloseTimer();\n    if (!this.isExpanded && !this.item?.disabled && this.hasChildren) {\n      this.showCollapsedFlyout = true;\n    }\n  }\n\n  onHostMouseLeave(): void {\n    this.scheduleCloseCollapsedFlyout();\n  }\n\n  onHostFocusIn(_e: FocusEvent): void {\n    this.clearFlyoutCloseTimer();\n    if (!this.isExpanded && !this.item?.disabled && this.hasChildren) {\n      this.showCollapsedFlyout = true;\n    }\n  }\n\n  onHostFocusOut(e: FocusEvent): void {\n    if (this.isExpanded) return;\n    const related = e.relatedTarget as HTMLElement | null;\n    if (related?.closest('.cqa-nav-flyout-overlay')) {\n      return;\n    }\n    const host = e.currentTarget as HTMLElement;\n    if (related && host.contains(related)) return;\n    this.closeCollapsedFlyout();\n  }\n\n  onFlyoutOverlayPointerEnter(): void {\n    this.clearFlyoutCloseTimer();\n  }\n\n  onFlyoutOverlayPointerLeave(): void {\n    this.scheduleCloseCollapsedFlyout();\n  }\n\n  onFlyoutOverlayFocusOut(e: FocusEvent): void {\n    const related = e.relatedTarget as HTMLElement | null;\n    const panel = e.currentTarget as HTMLElement;\n    if (related && panel.contains(related)) return;\n    const hostEl = this.navHostRef?.nativeElement;\n    if (related && hostEl?.contains(related)) return;\n    this.closeCollapsedFlyout();\n  }\n\n  closeCollapsedFlyout(): void {\n    this.clearFlyoutCloseTimer();\n    this.showCollapsedFlyout = false;\n  }\n\n  onClick(): void {\n    if (!this.item?.disabled) {\n      this.itemClick.emit(this.item.id);\n    }\n  }\n\n  onChildRowClick(e: Event, child: NavChildItem): void {\n    e.stopPropagation();\n    if (child.disabled) return;\n    this.itemClick.emit(child.id);\n    this.closeCollapsedFlyout();\n  }\n\n  private clearFlyoutCloseTimer(): void {\n    if (this.closeFlyoutTimer) {\n      clearTimeout(this.closeFlyoutTimer);\n      this.closeFlyoutTimer = null;\n    }\n  }\n\n  private scheduleCloseCollapsedFlyout(): void {\n    this.clearFlyoutCloseTimer();\n    this.closeFlyoutTimer = setTimeout(() => {\n      this.showCollapsedFlyout = false;\n      this.closeFlyoutTimer = null;\n    }, NavItemComponent.FLYOUT_CLOSE_DELAY_MS);\n  }\n}\n","<div class=\"cqa-nav-surface\">\n  <div\n    #navHost\n    class=\"cqa-nav-host\"\n    [class.cqa-nav-host--collapsed]=\"!isExpanded\"\n    (mouseenter)=\"onHostMouseEnter()\"\n    (mouseleave)=\"onHostMouseLeave()\"\n    (focusin)=\"onHostFocusIn($event)\"\n    (focusout)=\"onHostFocusOut($event)\">\n\n    <button\n      cdkOverlayOrigin\n      #flyoutOrigin=\"cdkOverlayOrigin\"\n      class=\"cqa-nav-item\"\n      [class.cqa-nav-item--active]=\"isActive\"\n      [class.cqa-nav-item--has-children]=\"hasChildren\"\n      [class.cqa-nav-item--collapsed]=\"!isExpanded\"\n      [class.cqa-nav-item--disabled]=\"item?.disabled\"\n      [class.cqa-nav-item--has-live]=\"item?.status === 'live'\"\n      [matTooltip]=\"collapsedRailTooltip\"\n      [matTooltipDisabled]=\"!collapsedRailTooltip\"\n      [matTooltipClass]=\"collapsedRailTooltipClass\"\n      matTooltipPosition=\"right\"\n      (click)=\"onClick()\"\n      type=\"button\"\n      [attr.aria-label]=\"!isExpanded ? (item?.label || '') : null\"\n      [attr.aria-expanded]=\"!isExpanded && hasChildren ? showCollapsedFlyout : null\"\n      [attr.aria-haspopup]=\"!isExpanded && hasChildren ? 'menu' : null\">\n\n      <!-- Icon -->\n      <span class=\"cqa-nav-icon\">\n        <i [class]=\"item?.iconClass\"></i>\n      </span>\n\n      <!-- Label (hidden when sidebar collapsed) -->\n      <span class=\"cqa-nav-label\" [class.cqa-nav-label--visible]=\"isExpanded\">\n        {{ item?.label }}\n      </span>\n\n      <!-- Trailing slot: only shown when expanded -->\n      <ng-container *ngIf=\"isExpanded\">\n        <span *ngIf=\"item?.badge && !hasChildren\" class=\"cqa-nav-badge\">{{ item.badge }}</span>\n\n        <span\n          *ngIf=\"item?.status === 'live' && !hasChildren\"\n          class=\"cqa-nav-status-dot cqa-nav-status-dot--live\">\n        </span>\n\n        <span\n          *ngIf=\"item?.status === 'danger' && !hasChildren\"\n          class=\"cqa-nav-status-dot cqa-nav-status-dot--danger\">\n        </span>\n\n        <span *ngIf=\"hasChildren\" class=\"cqa-nav-chev\" [class.cqa-nav-chev--open]=\"isOpen\">\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\">\n            <polyline points=\"9,6 15,12 9,18\"/>\n          </svg>\n        </span>\n      </ng-container>\n\n      <span\n        *ngIf=\"!isExpanded && item?.status === 'live'\"\n        class=\"cqa-nav-live-corner\">\n      </span>\n    </button>\n\n    <!-- Collapsed parent submenu: CDK overlay (outside aside / scrolling nav) -->\n    <ng-template\n      cdkConnectedOverlay\n      [cdkConnectedOverlayOrigin]=\"flyoutOrigin\"\n      [cdkConnectedOverlayOpen]=\"collapsedFlyoutOpen\"\n      [cdkConnectedOverlayPositions]=\"collapsedFlyoutPositions\"\n      [cdkConnectedOverlayHasBackdrop]=\"false\"\n      [cdkConnectedOverlayPush]=\"true\"\n      [cdkConnectedOverlayScrollStrategy]=\"flyoutScrollStrategy\"\n      [cdkConnectedOverlayPanelClass]=\"'cqa-nav-flyout-overlay-pane'\"\n      (overlayOutsideClick)=\"closeCollapsedFlyout()\"\n      (detach)=\"closeCollapsedFlyout()\">\n      <div\n        class=\"cqa-nav-flyout-overlay cqa-nav-flyout-panel\"\n        role=\"menu\"\n        [attr.aria-label]=\"item.label\"\n        (mouseenter)=\"onFlyoutOverlayPointerEnter()\"\n        (mouseleave)=\"onFlyoutOverlayPointerLeave()\"\n        (focusout)=\"onFlyoutOverlayFocusOut($event)\">\n        <div class=\"cqa-nav-flyout-panel-title\">{{ item.label }}</div>\n        <button\n          *ngFor=\"let child of item?.children\"\n          type=\"button\"\n          role=\"menuitem\"\n          class=\"cqa-nav-flyout-row\"\n          [class.cqa-nav-flyout-row--active]=\"isChildRowActive(child.id)\"\n          [disabled]=\"child.disabled\"\n          (click)=\"onChildRowClick($event, child)\">\n          <span class=\"cqa-nav-flyout-row-icon\">\n            <i *ngIf=\"child.iconClass\" [class]=\"child.iconClass\"></i>\n          </span>\n          <span class=\"cqa-nav-flyout-row-label\">{{ child.label }}</span>\n          <span *ngIf=\"child.isNew\" class=\"cqa-nav-flyout-row-new\">New</span>\n        </button>\n      </div>\n    </ng-template>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { NavChildItem } from './sidebar.models';\n\n@Component({\n  selector: 'cqa-nav-sub-item',\n  templateUrl: './nav-sub-item.component.html',\n  styleUrls: ['./nav-sub-item.component.scss']\n})\nexport class NavSubItemComponent {\n  @Input() item!: NavChildItem;\n  @Input() isActive: boolean = false;\n\n  @Output() itemClick = new EventEmitter<string>();\n\n  onClick(): void {\n    if (!this.item?.disabled) {\n      this.itemClick.emit(this.item.id);\n    }\n  }\n}\n","<div class=\"cqa-nav-surface\">\n  <button\n    class=\"cqa-nav-sub-item\"\n    [class.cqa-nav-sub-item--active]=\"isActive\"\n    [class.cqa-nav-sub-item--disabled]=\"item?.disabled\"\n    (click)=\"onClick()\"\n    type=\"button\">\n\n    <span class=\"cqa-nav-sub-icon\">\n      <i [class]=\"item?.iconClass\"></i>\n    </span>\n\n    <span class=\"cqa-nav-sub-label\">{{ item?.label }}</span>\n\n    <span *ngIf=\"item?.isNew\" class=\"cqa-nav-sub-badge cqa-nav-sub-badge--new\">New</span>\n  </button>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { NavMenuItem, NavItem, NavSection, isNavSection } from './sidebar.models';\n\n@Component({\n  selector: 'cqa-nav-menu',\n  templateUrl: './nav-menu.component.html',\n  styleUrls: ['./nav-menu.component.scss']\n})\nexport class NavMenuComponent {\n  @Input() items: NavMenuItem[] = [];\n  @Input() activeId: string = '';\n  @Input() isExpanded: boolean = false;\n  /** IDs of parent nav items whose sub-menus are currently open */\n  @Input() openParents: string[] = [];\n\n  @Output() itemClick = new EventEmitter<string>();\n\n  isSection(item: NavMenuItem): item is NavSection {\n    return isNavSection(item);\n  }\n\n  asNavItem(item: NavMenuItem): NavItem {\n    return item as NavItem;\n  }\n\n  isItemActive(item: NavItem): boolean {\n    if (item.id === this.activeId) return true;\n    if (item.children) {\n      return item.children.some(c => c.id === this.activeId);\n    }\n    return false;\n  }\n\n  isParentOpen(item: NavItem): boolean {\n    return this.openParents.includes(item.id);\n  }\n\n  isChildActive(childId: string): boolean {\n    return childId === this.activeId;\n  }\n\n  onItemClick(id: string): void {\n    this.itemClick.emit(id);\n  }\n}\n","<div class=\"cqa-nav-menu-outer\">\n  <nav class=\"cqa-nav-menu\" [class.cqa-nav-menu--collapsed]=\"!isExpanded\">\n    <ng-container *ngFor=\"let item of items\">\n\n      <!-- Section header (expanded only — collapsed rail shows icons only) -->\n      <ng-container *ngIf=\"isSection(item) && isExpanded\">\n        <div class=\"cqa-nav-section\">\n          <span class=\"cqa-nav-section-label\">{{ item.label }}</span>\n        </div>\n      </ng-container>\n\n      <!-- Nav item -->\n      <ng-container *ngIf=\"!isSection(item)\">\n        <cqa-nav-item\n          [item]=\"asNavItem(item)\"\n          [isActive]=\"isItemActive(asNavItem(item))\"\n          [isExpanded]=\"isExpanded\"\n          [isOpen]=\"isParentOpen(asNavItem(item))\"\n          [activeNavId]=\"activeId\"\n          (itemClick)=\"onItemClick($event)\">\n        </cqa-nav-item>\n\n        <!-- Sub-menu (only rendered when sidebar is expanded) -->\n        <div\n          *ngIf=\"isExpanded && asNavItem(item).children?.length\"\n          class=\"cqa-nav-children\"\n          [class.cqa-nav-children--open]=\"isParentOpen(asNavItem(item))\">\n          <cqa-nav-sub-item\n            *ngFor=\"let child of asNavItem(item).children\"\n            [item]=\"child\"\n            [isActive]=\"isChildActive(child.id)\"\n            (itemClick)=\"onItemClick($event)\">\n          </cqa-nav-sub-item>\n        </div>\n      </ng-container>\n\n    </ng-container>\n  </nav>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({ name: 'cqaSafeHtml' })\nexport class SafeHtmlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {}\n\n  transform(value: string | null | undefined): SafeHtml {\n    const str = value != null ? String(value) : '';\n    return this.sanitizer.bypassSecurityTrustHtml(str);\n  }\n}\n","import {\n  AfterViewInit,\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Subscription } from 'rxjs';\nimport {\n  ProfileMenuEntry,\n  ProfileMenuItem,\n  ProfileMenuUser,\n  isProfileMenuDivider,\n} from './profile-menu.models';\n\n@Component({\n  selector: 'cqa-profile-menu',\n  templateUrl: './profile-menu.component.html',\n  styleUrls: ['./profile-menu.component.scss'],\n})\nexport class ProfileMenuComponent implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() user!: ProfileMenuUser;\n  @Input() entries: ProfileMenuEntry[] = [];\n  @Input() anchor: HTMLElement | null = null;\n  /** Optional id on the popover element — useful for aria-labelledby wiring. */\n  @Input() popoverId?: string;\n\n  @Output() itemClick = new EventEmitter<string>();\n  @Output() dismissed = new EventEmitter<void>();\n\n  @ViewChild('popoverTpl', { static: true }) popoverTpl!: TemplateRef<unknown>;\n\n  private overlayRef: OverlayRef | null = null;\n  private keySub: Subscription | null = null;\n  private backdropSub: Subscription | null = null;\n  private viewInitialized = false;\n\n  constructor(\n    private overlay: Overlay,\n    private viewContainerRef: ViewContainerRef,\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.viewInitialized = true;\n    if (this.anchor) {\n      this.openOverlay();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.viewInitialized || !changes['anchor']) return;\n    if (this.anchor) {\n      this.openOverlay();\n    } else {\n      this.closeOverlay();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.closeOverlay();\n  }\n\n  isDivider = isProfileMenuDivider;\n\n  /** Narrowing helper for the template — Angular's template type checker can't\n   * follow our custom type guard through `*ngIf-else`, so we surface a typed cast\n   * via this method instead. */\n  asItem(entry: ProfileMenuEntry): ProfileMenuItem | null {\n    return isProfileMenuDivider(entry) ? null : entry;\n  }\n\n  trackByEntry = (index: number, _entry: ProfileMenuEntry): number => index;\n\n  onItemClick(item: ProfileMenuItem): void {\n    if (item.disabled) {\n      return;\n    }\n    this.itemClick.emit(item.id);\n  }\n\n  private openOverlay(): void {\n    if (!this.anchor) {\n      return;\n    }\n    this.closeOverlay();\n\n    // Popover floats out to the right of the profile card, bottom-aligned with the card.\n    // `withPush(false)` is critical — otherwise CDK slides the overlay back over the sidebar\n    // when its viewport calculation thinks the popover doesn't fit (e.g. in narrow iframes).\n    const positions: ConnectionPositionPair[] = [\n      { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 0, offsetY: 0 },\n      { originX: 'end', originY: 'top',    overlayX: 'start', overlayY: 'bottom', offsetX: 0, offsetY: -4 },\n    ];\n\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(this.anchor)\n      .withPositions(positions)\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withPush(false);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n      panelClass: 'cqa-profile-menu-panel',\n    });\n\n    const portal = new TemplatePortal(this.popoverTpl, this.viewContainerRef);\n    this.overlayRef.attach(portal);\n\n    this.backdropSub = this.overlayRef.backdropClick().subscribe(() => this.dismissed.emit());\n    this.keySub = this.overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        this.dismissed.emit();\n      }\n    });\n  }\n\n  private closeOverlay(): void {\n    this.backdropSub?.unsubscribe();\n    this.backdropSub = null;\n    this.keySub?.unsubscribe();\n    this.keySub = null;\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n}\n","<ng-template #popoverTpl>\n  <div class=\"cqa-pm\" [attr.id]=\"popoverId\" role=\"menu\" aria-orientation=\"vertical\">\n    <!-- ===== Header ===== -->\n    <div class=\"cqa-pm-header\">\n      <div class=\"cqa-pm-avatar\" [style.background]=\"user?.avatarColor || null\">\n        {{ user?.initials }}\n      </div>\n      <div class=\"cqa-pm-identity\">\n        <span class=\"cqa-pm-name\" [title]=\"user?.name\">{{ user?.name }}</span>\n        <span *ngIf=\"user?.email\" class=\"cqa-pm-email\" [title]=\"user?.email\">{{ user?.email }}</span>\n        <span\n          *ngIf=\"user?.badge?.label\"\n          class=\"cqa-pm-badge\"\n          [class.cqa-pm-badge--admin]=\"(user?.badge?.variant || 'admin') === 'admin'\"\n          [class.cqa-pm-badge--default]=\"user?.badge?.variant === 'default'\">\n          {{ user?.badge?.label }}\n        </span>\n      </div>\n    </div>\n\n    <div class=\"cqa-pm-divider\"></div>\n\n    <!-- ===== Entries ===== -->\n    <ul class=\"cqa-pm-list\">\n      <ng-container *ngFor=\"let entry of entries; trackBy: trackByEntry\">\n        <li *ngIf=\"isDivider(entry); else itemTpl\" class=\"cqa-pm-list-divider\" role=\"separator\"></li>\n        <ng-template #itemTpl>\n          <li *ngIf=\"asItem(entry) as item\">\n            <button\n              type=\"button\"\n              class=\"cqa-pm-item\"\n              [class.cqa-pm-item--danger]=\"item.variant === 'danger'\"\n              [class.cqa-pm-item--disabled]=\"item.disabled\"\n              [disabled]=\"item.disabled\"\n              role=\"menuitem\"\n              (click)=\"onItemClick(item)\">\n              <span\n                *ngIf=\"item.iconSvg || item.iconClass\"\n                class=\"cqa-pm-item-icon\"\n                aria-hidden=\"true\">\n                <span\n                  *ngIf=\"item.iconSvg; else fontIcon\"\n                  [innerHTML]=\"item.iconSvg | cqaSafeHtml\">\n                </span>\n                <ng-template #fontIcon>\n                  <i *ngIf=\"item.iconClass\" [ngClass]=\"item.iconClass\"></i>\n                </ng-template>\n              </span>\n              <span class=\"cqa-pm-item-label\">{{ item.label }}</span>\n              <span *ngIf=\"item.shortcut\" class=\"cqa-pm-item-shortcut\">{{ item.shortcut }}</span>\n            </button>\n          </li>\n        </ng-template>\n      </ng-container>\n    </ul>\n  </div>\n</ng-template>\n","import {\n  AfterViewInit,\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnDestroy,\n  SimpleChanges,\n  ViewChild,\n  TemplateRef,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Overlay, OverlayRef, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Subscription } from 'rxjs';\nimport { WorkspaceMenuItem } from './workspace-menu.models';\n\n@Component({\n  selector: 'cqa-workspace-menu',\n  templateUrl: './workspace-menu.component.html',\n  styleUrls: ['./workspace-menu.component.scss'],\n})\nexport class WorkspaceMenuComponent implements AfterViewInit, OnChanges, OnDestroy {\n  @Input() workspaces: WorkspaceMenuItem[] = [];\n  @Input() currentWorkspaceId?: string | number;\n  /** Name of the currently active workspace — interpolated into the popover heading. */\n  @Input() workspaceName?: string;\n  @Input() anchor: HTMLElement | null = null;\n  /** Optional id on the popover element — useful for aria-labelledby wiring. */\n  @Input() popoverId?: string;\n\n  @Output() workspaceSelected = new EventEmitter<string | number>();\n  @Output() manageWorkspacesClick = new EventEmitter<void>();\n  @Output() dismissed = new EventEmitter<void>();\n\n  @ViewChild('popoverTpl', { static: true }) popoverTpl!: TemplateRef<unknown>;\n\n  private overlayRef: OverlayRef | null = null;\n  private keySub: Subscription | null = null;\n  private backdropSub: Subscription | null = null;\n  private viewInitialized = false;\n\n  constructor(\n    private overlay: Overlay,\n    private viewContainerRef: ViewContainerRef,\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.viewInitialized = true;\n    if (this.anchor) {\n      this.openOverlay();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.viewInitialized || !changes['anchor']) return;\n    if (this.anchor) {\n      this.openOverlay();\n    } else {\n      this.closeOverlay();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.closeOverlay();\n  }\n\n  trackByWs = (_index: number, item: WorkspaceMenuItem): string | number => item.id;\n\n  onItemClick(item: WorkspaceMenuItem): void {\n    this.workspaceSelected.emit(item.id);\n  }\n\n  onManageClick(): void {\n    this.manageWorkspacesClick.emit();\n  }\n\n  private openOverlay(): void {\n    if (!this.anchor) {\n      return;\n    }\n    this.closeOverlay();\n\n    // Popover floats out to the right of the workspace button, top-aligned with the button.\n    // Both position pairs pin overlayY: 'top' so the popover always extends downward (mirror of\n    // profile-menu, which always extends upward from a bottom-anchored card).\n    // `withPush(false)` is critical — otherwise CDK slides the overlay back over the sidebar\n    // when its viewport calculation thinks the popover doesn't fit.\n    const positions: ConnectionPositionPair[] = [\n      { originX: 'end', originY: 'top',    overlayX: 'start', overlayY: 'top', offsetX: 0, offsetY: 0 },\n      { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetX: 0, offsetY: 4 },\n    ];\n\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(this.anchor)\n      .withPositions(positions)\n      .withFlexibleDimensions(false)\n      .withViewportMargin(8)\n      .withPush(false);\n\n    this.overlayRef = this.overlay.create({\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n      hasBackdrop: true,\n      backdropClass: 'cdk-overlay-transparent-backdrop',\n      panelClass: 'cqa-workspace-menu-panel',\n    });\n\n    const portal = new TemplatePortal(this.popoverTpl, this.viewContainerRef);\n    this.overlayRef.attach(portal);\n\n    this.backdropSub = this.overlayRef.backdropClick().subscribe(() => this.dismissed.emit());\n    this.keySub = this.overlayRef.keydownEvents().subscribe((event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        event.preventDefault();\n        this.dismissed.emit();\n      }\n    });\n  }\n\n  private closeOverlay(): void {\n    this.backdropSub?.unsubscribe();\n    this.backdropSub = null;\n    this.keySub?.unsubscribe();\n    this.keySub = null;\n    if (this.overlayRef) {\n      this.overlayRef.dispose();\n      this.overlayRef = null;\n    }\n  }\n}\n","<ng-template #popoverTpl>\n  <div class=\"cqa-wm\" [attr.id]=\"popoverId\" role=\"dialog\" aria-label=\"Switch workspace\">\n    <header class=\"cqa-wm-header\">\n      <h2 class=\"cqa-wm-heading\">Workspaces in {{ workspaceName }}</h2>\n    </header>\n\n    <ul class=\"cqa-wm-list\" role=\"listbox\">\n      <li *ngFor=\"let ws of workspaces; trackBy: trackByWs\">\n        <button\n          type=\"button\"\n          class=\"cqa-wm-item\"\n          [class.cqa-wm-item--active]=\"ws.id === currentWorkspaceId\"\n          role=\"option\"\n          [attr.aria-selected]=\"ws.id === currentWorkspaceId\"\n          (click)=\"onItemClick(ws)\">\n          <span class=\"cqa-wm-avatar\" [style.background]=\"ws.avatarColor || null\">\n            <img *ngIf=\"ws.logoUrl; else initialsTpl\" class=\"cqa-wm-logo\" [src]=\"ws.logoUrl\" [alt]=\"ws.name\"/>\n            <ng-template #initialsTpl>\n              <span class=\"cqa-wm-initials\">{{ ws.initials }}</span>\n            </ng-template>\n          </span>\n          <span class=\"cqa-wm-text\">\n            <span class=\"cqa-wm-name\" [title]=\"ws.name\">{{ ws.name }}</span>\n            <span *ngIf=\"ws.subtitle\" class=\"cqa-wm-subtitle\" [title]=\"ws.subtitle\">{{ ws.subtitle }}</span>\n          </span>\n          <span *ngIf=\"ws.id === currentWorkspaceId\" class=\"cqa-wm-check\" aria-hidden=\"true\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"\n              stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"14\" height=\"14\">\n              <polyline points=\"3,8.5 6.5,12 13,4.5\"/>\n            </svg>\n          </span>\n        </button>\n      </li>\n    </ul>\n\n    <div class=\"cqa-wm-divider\"></div>\n\n    <button type=\"button\" class=\"cqa-wm-footer\" (click)=\"onManageClick()\">\n      <span class=\"cqa-wm-footer-icon\" aria-hidden=\"true\">\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"15\" height=\"15\">\n          <circle cx=\"8\" cy=\"8\" r=\"2\"/>\n          <path d=\"M13 8a5 5 0 0 0-.1-1l1.4-1-1.4-2.4-1.7.5a5 5 0 0 0-1.7-1L9 1H7l-.5 1.6a5 5 0 0 0-1.7 1L3.1 3.6 1.7 6l1.4 1A5 5 0 0 0 3 8a5 5 0 0 0 .1 1l-1.4 1L3.1 12.4l1.7-.5a5 5 0 0 0 1.7 1L7 15h2l.5-1.6a5 5 0 0 0 1.7-1l1.7.5L14.3 10 13 9a5 5 0 0 0 0-1z\"/>\n        </svg>\n      </span>\n      <span class=\"cqa-wm-footer-label\">Workspace Management</span>\n    </button>\n  </div>\n</ng-template>\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnChanges,\n  OnInit,\n  SimpleChanges,\n  ViewChild,\n  ElementRef,\n  OnDestroy,\n} from '@angular/core';\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { NavMenuItem, NavItem, SidebarConfig, isNavSection } from './sidebar.models';\nimport { ProfileMenuEntry, ProfileMenuUser } from './profile-menu/profile-menu.models';\nimport { WorkspaceMenuItem } from './workspace-menu/workspace-menu.models';\n\n@Component({\n  selector: 'cqa-sidebar',\n  templateUrl: './sidebar.component.html',\n  styleUrls: ['./sidebar.component.scss']\n})\nexport class SidebarComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() config: SidebarConfig = {};\n  @Input() navItems: NavMenuItem[] = [];\n  @Input() activeNavId: string = '';\n  /** Parent item IDs to open by default (in addition to the one containing the active item). */\n  @Input() initialOpenParentIds: string[] = [];\n  /**\n   * User details rendered in the profile-menu popover header. Required for the popover\n   * to open; when undefined the profile card retains its legacy single-action behavior\n   * (clicking it directly fires `logoutClick`).\n   */\n  @Input() profileUser?: ProfileMenuUser;\n  /**\n   * Menu entries shown inside the profile-menu popover. Provide at least one entry to\n   * enable the popover; an empty array preserves the legacy `logoutClick` behavior.\n   */\n  @Input() profileMenuEntries: ProfileMenuEntry[] = [];\n  /**\n   * Workspaces shown inside the workspace-switcher popover. Provide at least one entry\n   * to enable the popover; an empty array preserves the legacy `workspaceSwitchClick`\n   * behavior (single emit on click, no UI).\n   */\n  @Input() workspaces: WorkspaceMenuItem[] = [];\n  /** Id of the currently active workspace — drives the checkmark and active-row tint. */\n  @Input() currentWorkspaceId?: string | number;\n\n  @Output() navItemClick = new EventEmitter<string>();\n  @Output() ctaClick = new EventEmitter<void>();\n  @Output() searchClick = new EventEmitter<void>();\n  @Output() workspaceSwitchClick = new EventEmitter<void>();\n  @Output() logoutClick = new EventEmitter<void>();\n  @Output() notificationsClick = new EventEmitter<void>();\n  @Output() helpDocsClick = new EventEmitter<void>();\n  @Output() speakerClick = new EventEmitter<void>();\n  @Output() liveChatClick = new EventEmitter<void>();\n  @Output() expandedChange = new EventEmitter<boolean>();\n  /** Emits `ProfileMenuItem.id` when the user activates an entry in the profile popover. */\n  @Output() profileMenuItemClick = new EventEmitter<string>();\n  /** Emits the workspace id when the user picks one from the workspace popover. */\n  @Output() workspaceSelected = new EventEmitter<string | number>();\n  /** Emits when the user clicks the \"Workspace Management\" footer row. */\n  @Output() manageWorkspacesClick = new EventEmitter<void>();\n\n  @ViewChild('profileAnchor', { static: false }) profileAnchorRef?: ElementRef<HTMLElement>;\n  @ViewChild('workspaceAnchor', { static: false }) workspaceAnchorRef?: ElementRef<HTMLElement>;\n\n  isExpanded: boolean = false;\n  isPinned: boolean = false;\n  openParents: string[] = [];\n  isProfileMenuOpen: boolean = false;\n  isWorkspaceMenuOpen: boolean = false;\n\n  private leaveCollapseTimer: ReturnType<typeof setTimeout> | null = null;\n  private static readonly LEAVE_COLLAPSE_MS = 220;\n\n  constructor(private sanitizer: DomSanitizer) {}\n\n  /**\n   * Sanitizer bypass so `data:image/svg+xml;base64,…` URIs render in the workspace\n   * avatar — Angular 13's default URL sanitizer rewrites them to `unsafe:…`.\n   */\n  get workspaceLogoSafe(): SafeUrl | null {\n    const url = this.config?.workspaceLogo;\n    return url ? this.sanitizer.bypassSecurityTrustUrl(url) : null;\n  }\n\n  ngOnInit(): void {\n    if (this.config?.defaultPinned) {\n      this.isPinned = true;\n      this.isExpanded = true;\n    }\n    if (this.initialOpenParentIds?.length) {\n      this.openParents = [...this.initialOpenParentIds];\n    }\n    this.ensureActiveParentOpen();\n  }\n\n  ngOnDestroy(): void {\n    this.clearLeaveCollapseTimer();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['activeNavId'] && this.activeNavId) {\n      this.ensureActiveParentOpen();\n    }\n  }\n\n\n  onProfileClick(): void {\n    if (this.profileUser && this.profileMenuEntries?.length) {\n      this.isProfileMenuOpen = !this.isProfileMenuOpen;\n      return;\n    }\n    // Legacy single-action behaviour preserved for consumers that haven't migrated.\n    this.logoutClick.emit();\n  }\n\n  onProfileMenuItemClick(id: string): void {\n    this.isProfileMenuOpen = false;\n    this.profileMenuItemClick.emit(id);\n  }\n\n  onProfileMenuDismissed(): void {\n    this.isProfileMenuOpen = false;\n  }\n\n  onWorkspaceClick(): void {\n    if (this.workspaces?.length) {\n      this.isWorkspaceMenuOpen = !this.isWorkspaceMenuOpen;\n      return;\n    }\n    // Legacy single-emit behavior preserved for consumers that haven't migrated.\n    this.workspaceSwitchClick.emit();\n  }\n\n  onWorkspaceMenuItemClick(id: string | number): void {\n    this.isWorkspaceMenuOpen = false;\n    this.workspaceSelected.emit(id);\n  }\n\n  onWorkspaceMenuDismissed(): void {\n    this.isWorkspaceMenuOpen = false;\n  }\n\n  onManageWorkspacesClick(): void {\n    this.isWorkspaceMenuOpen = false;\n    this.manageWorkspacesClick.emit();\n  }\n\n  /** Burger: wide sidebar without pinning — collapses on mouse leave. */\n  openSidebar(): void {\n    this.clearLeaveCollapseTimer();\n    this.isExpanded = true;\n    this.isPinned = false;\n    this.expandedChange.emit(true);\n  }\n\n  /** Header collapse control: always closes and clears pin. */\n  closeSidebar(): void {\n    this.isExpanded = false;\n    this.isPinned = false;\n    this.clearLeaveCollapseTimer();\n    this.expandedChange.emit(false);\n  }\n\n  pinSidebar(): void {\n    this.isPinned = true;\n    this.clearLeaveCollapseTimer();\n  }\n\n  /** Cancel delayed collapse when the pointer returns to the sidebar. */\n  onAsideMouseEnter(): void {\n    this.clearLeaveCollapseTimer();\n  }\n\n  /**\n   * When expanded but not pinned, collapse after the pointer leaves the rail.\n   * Skips scheduling if the pointer is moving into our CDK flyout / rail tooltip overlays.\n   */\n  onAsideMouseLeave(ev: MouseEvent): void {\n    if (this.isPinned || !this.isExpanded) return;\n    const related = ev.relatedTarget as Node | null;\n    if (this.isPointerEnteringSidebarOverlay(related)) return;\n\n    this.clearLeaveCollapseTimer();\n    this.leaveCollapseTimer = setTimeout(() => {\n      this.leaveCollapseTimer = null;\n      if (!this.isPinned && this.isExpanded) {\n        this.isExpanded = false;\n        this.expandedChange.emit(false);\n      }\n    }, SidebarComponent.LEAVE_COLLAPSE_MS);\n  }\n\n  private isPointerEnteringSidebarOverlay(node: Node | null): boolean {\n    if (!(node instanceof Element)) return false;\n    return !!(\n      node.closest('.cqa-nav-flyout-overlay') ||\n      node.closest('.cqa-nav-flyout-overlay-pane') ||\n      node.closest('.mat-tooltip.cqa-nav-rail-tooltip') ||\n      node.closest('.mat-tooltip')\n    );\n  }\n\n  private clearLeaveCollapseTimer(): void {\n    if (this.leaveCollapseTimer) {\n      clearTimeout(this.leaveCollapseTimer);\n      this.leaveCollapseTimer = null;\n    }\n  }\n\n  onNavItemClick(id: string): void {\n    // Submenu leaf: always emit navigation (child id was wrongly treated as a parent for toggle).\n    if (this.isChildNavId(id)) {\n      this.navItemClick.emit(id);\n      return;\n    }\n\n    const item = this.findTopLevelNavItem(id);\n    if (!item) {\n      this.navItemClick.emit(id);\n      return;\n    }\n\n    if ((item as NavItem).children?.length) {\n      // Parent item with children: toggle sub-menu when expanded, navigate when collapsed\n      if (this.isExpanded) {\n        this.toggleParent(id);\n      } else {\n        this.navItemClick.emit(id);\n      }\n    } else {\n      this.navItemClick.emit(id);\n    }\n  }\n\n  get workspaceInitial(): string {\n    return this.config?.workspaceName?.charAt(0)?.toUpperCase() || 'W';\n  }\n\n  private toggleParent(id: string): void {\n    const idx = this.openParents.indexOf(id);\n    if (idx > -1) {\n      this.openParents = this.openParents.filter(p => p !== id);\n    } else {\n      this.openParents = [...this.openParents, id];\n    }\n  }\n\n  /** True if `id` matches a submenu row under some top-level nav item. */\n  private isChildNavId(id: string): boolean {\n    for (const item of this.navItems) {\n      if (isNavSection(item)) continue;\n      if (item.children?.some((c) => c.id === id)) return true;\n    }\n    return false;\n  }\n\n  private findTopLevelNavItem(id: string): NavMenuItem | null {\n    for (const item of this.navItems) {\n      if (!isNavSection(item) && item.id === id) return item;\n    }\n    return null;\n  }\n\n  private ensureActiveParentOpen(): void {\n    for (const item of this.navItems) {\n      if (!isNavSection(item) && item.children) {\n        const hasActiveChild = item.children.some(c => c.id === this.activeNavId);\n        if (hasActiveChild && !this.openParents.includes(item.id)) {\n          this.openParents = [...this.openParents, item.id];\n        }\n      }\n    }\n  }\n}\n","<div id=\"cqa-ui-root\" class=\"cqa-sb-root\">\n  <aside\n    class=\"cqa-sb\"\n    [class.cqa-sb--expanded]=\"isExpanded\"\n    (mouseenter)=\"onAsideMouseEnter()\"\n    (mouseleave)=\"onAsideMouseLeave($event)\">\n\n    <!-- ===== 1. Workspace header ===== -->\n    <div #workspaceAnchor class=\"cqa-sb-header\" [class.cqa-sb-header--expanded]=\"isExpanded\">\n      <!-- Collapsed: hamburger chip -->\n      <button\n        *ngIf=\"!isExpanded\"\n        class=\"cqa-sb-burger\"\n        (click)=\"openSidebar()\"\n        type=\"button\"\n        aria-label=\"Open sidebar\">\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n          stroke-width=\"1.33\" stroke-linecap=\"round\"\n          width=\"16\" height=\"16\">\n          <line x1=\"2\" y1=\"4\" x2=\"14\" y2=\"4\"/>\n          <line x1=\"2\" y1=\"8\" x2=\"14\" y2=\"8\"/>\n          <line x1=\"2\" y1=\"12\" x2=\"14\" y2=\"12\"/>\n        </svg>\n      </button>\n\n      <!-- Expanded: workspace selector + pin (unpinned) or close (pinned) -->\n      <ng-container *ngIf=\"isExpanded\">\n        <button class=\"cqa-sb-ws\" type=\"button\" (click)=\"onWorkspaceClick()\">\n          <span class=\"cqa-sb-ws-main\">\n            <span class=\"cqa-sb-ws-avatar\">\n              <img *ngIf=\"workspaceLogoSafe; else defaultLogoTpl\"\n                class=\"cqa-sb-ws-logo\"\n                [src]=\"workspaceLogoSafe\"\n                [alt]=\"config?.workspaceName || 'Workspace logo'\" />\n              <ng-template #defaultLogoTpl>\n                <svg class=\"cqa-sb-ws-default\" width=\"36\" height=\"36\" viewBox=\"0 0 40 40\"\n                  fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                  <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-grad)\"/>\n                  <g filter=\"url(#cqa-sb-ws-shadow)\">\n                    <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"white\" fill-opacity=\"0.01\" shape-rendering=\"crispEdges\"/>\n                  </g>\n                  <rect width=\"8.07969\" height=\"2.59969\" rx=\"1.29985\" transform=\"matrix(0.0555427 -0.998456 0.998194 0.0600698 10.3188 28.9912)\" fill=\"#97AFC5\"/>\n                  <rect width=\"8.0708\" height=\"2.60278\" rx=\"1.30139\" transform=\"matrix(-0.173269 -0.984874 0.982367 -0.186964 27.3413 29.4043)\" fill=\"#97AFC5\"/>\n                  <path d=\"M11.1884 23.5958C11.4549 23.7473 11.7865 23.6502 11.9291 23.3789L13.3623 20.6523C13.5049 20.381 13.4045 20.0382 13.1381 19.8867C12.2055 19.3564 11.0448 19.6964 10.5457 20.646L10.4037 20.9162C9.90451 21.8658 10.2559 23.0655 11.1884 23.5958Z\" fill=\"#C2DBF2\"/>\n                  <path d=\"M11.6714 22.4677C11.6714 20.1863 13.5208 18.3369 15.8022 18.3369H23.9505C26.2319 18.3369 28.0813 20.1863 28.0813 22.4677V23.7953C28.0813 28.3268 24.4078 32.0003 19.8764 32.0003C15.3449 32.0003 11.6714 28.3268 11.6714 23.7953V22.4677Z\" fill=\"#D7E7F9\"/>\n                  <path d=\"M28.8116 23.7315C28.5451 23.883 28.2135 23.7859 28.0709 23.5146L26.6377 20.7881C26.4951 20.5167 26.5955 20.174 26.8619 20.0225C27.7945 19.4922 28.9552 19.8321 29.4543 20.7817L29.5963 21.0519C30.0955 22.0015 29.7441 23.2012 28.8116 23.7315Z\" fill=\"#C2DBF2\"/>\n                  <path d=\"M26.3774 19.1758C26.3774 19.8026 23.4762 20.3107 19.8974 20.3107C16.3186 20.3107 13.4175 19.8026 13.4175 19.1758C13.4175 18.5491 16.3186 18.041 19.8974 18.041C23.4762 18.041 26.3774 18.5491 26.3774 19.1758Z\" fill=\"#C2DBF2\"/>\n                  <path d=\"M21.7507 26.7785L21.6221 26.6448C22.1471 25.7868 22.0506 24.6335 21.3329 23.8869C20.5026 23.0234 19.1473 23.0234 18.317 23.8869C17.4868 24.7505 17.4868 26.1601 18.317 27.0236C19.0348 27.7702 20.1437 27.8705 20.9686 27.3245L21.0972 27.4582L21.2686 27.6365C21.4507 27.8259 21.7453 27.8259 21.9221 27.6365C22.1042 27.4471 22.1042 27.1406 21.9221 26.9568L21.7507 26.7785ZM18.9706 26.3439C18.4992 25.8536 18.4992 25.0569 18.9706 24.5722C19.4419 24.0819 20.208 24.0819 20.674 24.5722C21.0275 24.9399 21.1132 25.4804 20.9365 25.9372C20.8775 26.0876 20.7918 26.2269 20.674 26.3439C20.5561 26.4665 20.4222 26.5556 20.2829 26.6169C19.8491 26.8008 19.3241 26.7116 18.9706 26.3439Z\" fill=\"#6366F1\"/>\n                  <rect width=\"17.4575\" height=\"10.8035\" rx=\"5.40176\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 11.1401 6.9248)\" fill=\"#D7E7F9\"/>\n                  <path d=\"M11.9068 9.74961C12.2603 9.75414 12.5435 10.0444 12.5393 10.3979L12.4926 14.3376C12.4884 14.6911 12.1985 14.974 11.845 14.9694C10.6078 14.9536 9.61668 13.9377 9.63133 12.7005L9.64009 11.9611C9.65475 10.7239 10.6696 9.73376 11.9068 9.74961Z\" fill=\"#C2DBF2\"/>\n                  <path d=\"M27.7011 15.1723C27.3476 15.1677 27.0644 14.8775 27.0686 14.524L27.1153 10.5843C27.1195 10.2308 27.4094 9.94792 27.7629 9.95245C29.0001 9.9683 29.9912 10.9841 29.9766 12.2214L29.9678 12.9607C29.9532 14.198 28.9383 15.1881 27.7011 15.1723Z\" fill=\"#C2DBF2\"/>\n                  <rect width=\"13.0931\" height=\"6.80894\" rx=\"3.40447\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 13.2988 8.9502)\" fill=\"#2F445B\"/>\n                  <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 22.2153 11.5605)\" fill=\"#6366F1\"/>\n                  <ellipse cx=\"0.872874\" cy=\"0.907858\" rx=\"0.872874\" ry=\"0.907858\" transform=\"matrix(0.999918 0.0128129 -0.0118443 0.99993 15.6255 11.4766)\" fill=\"#6366F1\"/>\n                  <path d=\"M16.9047 6.66572C16.9091 6.29805 17.2106 6.00382 17.5783 6.00853L22.1819 6.06752C22.5496 6.07223 22.8441 6.3741 22.8398 6.74177C22.8245 8.02859 21.769 9.05841 20.4822 9.04192L19.2071 9.02558C17.9203 9.00909 16.8895 7.95254 16.9047 6.66572Z\" fill=\"#C2DBF2\"/>\n                  <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"9\" fill=\"url(#cqa-sb-ws-gloss)\"/>\n                  <defs>\n                    <filter id=\"cqa-sb-ws-shadow\" x=\"0\" y=\"0\" width=\"40\" height=\"40\" filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\n                      <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\"/>\n                      <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n                      <feOffset dy=\"1\"/>\n                      <feGaussianBlur stdDeviation=\"1\"/>\n                      <feComposite in2=\"hardAlpha\" operator=\"out\"/>\n                      <feColorMatrix type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.12 0\"/>\n                      <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow\"/>\n                      <feColorMatrix in=\"SourceAlpha\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\"/>\n                      <feMorphology radius=\"1\" operator=\"erode\" in=\"SourceAlpha\" result=\"effect2_innerShadow\"/>\n                      <feOffset/>\n                      <feComposite in2=\"hardAlpha\" operator=\"arithmetic\" k2=\"-1\" k3=\"1\"/>\n                      <feColorMatrix type=\"matrix\" values=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.4 0\"/>\n                      <feBlend mode=\"normal\" in2=\"effect1_dropShadow\" result=\"effect2_innerShadow\"/>\n                    </filter>\n                    <linearGradient id=\"cqa-sb-ws-grad\" x1=\"2\" y1=\"1\" x2=\"38\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"#CCE1F4\"/>\n                      <stop offset=\"1\" stop-color=\"#D7E7F9\"/>\n                    </linearGradient>\n                    <linearGradient id=\"cqa-sb-ws-gloss\" x1=\"20\" y1=\"1\" x2=\"20\" y2=\"37\" gradientUnits=\"userSpaceOnUse\">\n                      <stop stop-color=\"white\" stop-opacity=\"0.5\"/>\n                      <stop offset=\"0.5\" stop-color=\"white\" stop-opacity=\"0\"/>\n                    </linearGradient>\n                  </defs>\n                </svg>\n              </ng-template>\n              <span *ngIf=\"config?.workspaceStatus === 'live'\" class=\"cqa-sb-ws-status\"></span>\n            </span>\n            <span class=\"cqa-sb-ws-info\">\n              <span class=\"cqa-sb-ws-name-row\">\n                <span class=\"cqa-sb-ws-name\">{{ config?.workspaceName || 'Workspace' }}</span>\n              </span>\n            </span>\n          </span>\n          <span class=\"cqa-sb-ws-switch\" aria-hidden=\"true\">\n            <svg viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\"\n              stroke-width=\"1.17\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n              width=\"14\" height=\"14\">\n              <polyline points=\"3,9 7,12 11,9\"/>\n              <polyline points=\"3,5 7,2 11,5\"/>\n            </svg>\n          </span>\n        </button>\n\n        <button\n          *ngIf=\"isPinned || config?.showSidebarPin !== false\"\n          class=\"cqa-sb-pin-or-close\"\n          type=\"button\"\n          (click)=\"isPinned ? closeSidebar() : pinSidebar()\"\n          [matTooltip]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\"\n          [matTooltipPosition]=\"isPinned ? 'right' : 'left'\"\n          [attr.aria-label]=\"isPinned ? 'Close sidebar' : 'Pin sidebar'\">\n          <svg\n            *ngIf=\"isPinned\"\n            viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <rect x=\"1.5\" y=\"1.5\" width=\"15\" height=\"15\" rx=\"2.5\"/>\n            <line x1=\"6.5\" y1=\"1.5\" x2=\"6.5\" y2=\"16.5\"/>\n            <polyline points=\"10.5,12 8.5,9 10.5,6\"/>\n          </svg>\n          <svg\n            *ngIf=\"!isPinned\"\n            viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <path d=\"M9 3v4M7 3h4v4l2 3H5l2-3V3z\"/>\n            <line x1=\"9\" y1=\"10\" x2=\"9\" y2=\"15\"/>\n          </svg>\n        </button>\n      </ng-container>\n    </div>\n\n    <!-- ===== 2. Search ===== -->\n    <div *ngIf=\"config?.showSearch !== false\" class=\"cqa-sb-search-wrap\">\n      <button class=\"cqa-sb-search\" type=\"button\"\n        [matTooltip]=\"!isExpanded ? 'Search' : ''\" matTooltipPosition=\"right\"\n        (click)=\"searchClick.emit()\">\n        <svg class=\"cqa-sb-search-icon\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\"\n          stroke-width=\"1.33\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n          <circle cx=\"7\" cy=\"7\" r=\"4.5\"/>\n          <line x1=\"10.5\" y1=\"10.5\" x2=\"13.5\" y2=\"13.5\"/>\n        </svg>\n        <span class=\"cqa-sb-search-text\" [class.cqa-sb-search-text--visible]=\"isExpanded\">\n          {{ config?.searchPlaceholder || 'Search Anything...' }}\n        </span>\n        <span\n          *ngIf=\"config?.showSearchShortcut !== false && isExpanded\"\n          class=\"cqa-sb-search-kbd\">⌘K</span>\n      </button>\n    </div>\n\n    <!-- ===== 3. CTA ===== -->\n    <div *ngIf=\"config?.showCta !== false\" class=\"cqa-sb-cta-wrap\">\n      <button class=\"cqa-sb-cta\" type=\"button\"\n        [matTooltip]=\"!isExpanded ? (config?.ctaLabel || 'New') : ''\" matTooltipPosition=\"right\"\n        (click)=\"ctaClick.emit()\">\n        <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\"\n          stroke-linecap=\"round\" width=\"18\" height=\"18\">\n          <line x1=\"9\" y1=\"3.75\" x2=\"9\" y2=\"14.25\"/>\n          <line x1=\"3.75\" y1=\"9\" x2=\"14.25\" y2=\"9\"/>\n        </svg>\n        <span class=\"cqa-sb-cta-text\" [class.cqa-sb-cta-text--visible]=\"isExpanded\">\n          {{ config?.ctaLabel || 'New Test Cases' }}\n        </span>\n      </button>\n    </div>\n\n    <!-- ===== 4. Nav menu ===== -->\n    <cqa-nav-menu\n      [items]=\"navItems\"\n      [activeId]=\"activeNavId\"\n      [isExpanded]=\"isExpanded\"\n      [openParents]=\"openParents\"\n      (itemClick)=\"onNavItemClick($event)\">\n    </cqa-nav-menu>\n\n    <!-- ===== 5. Utility bar ===== -->\n    <div class=\"cqa-sb-utility\" [class.cqa-sb-utility--expanded]=\"isExpanded\">\n      <!-- Expanded: 2 wide tiles (Help & docs + Live chat) -->\n      <ng-container *ngIf=\"isExpanded\">\n        <button\n          *ngIf=\"config?.showHelpDocs !== false\"\n          class=\"cqa-sb-util-tile\"\n          type=\"button\"\n          (click)=\"helpDocsClick.emit()\">\n          <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n            <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n            <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n          </svg>\n          <span class=\"cqa-sb-util-tile-label\">{{ config?.helpDocsLabel || 'Help & docs' }}</span>\n        </button>\n\n        <button\n          *ngIf=\"config?.showLiveChat !== false\"\n          class=\"cqa-sb-util-tile\"\n          type=\"button\"\n          (click)=\"liveChatClick.emit()\">\n          <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n          </svg>\n          <span class=\"cqa-sb-util-tile-label\">Live chat</span>\n        </button>\n      </ng-container>\n\n      <!-- Collapsed: help + live chat only (notifications / speaker are not shown on the rail) -->\n      <ng-container *ngIf=\"!isExpanded\">\n        <button\n          *ngIf=\"config?.showHelpDocs !== false\"\n          class=\"cqa-sb-util-compact\"\n          type=\"button\"\n          [matTooltip]=\"config?.helpDocsLabel || 'Help & docs'\" matTooltipPosition=\"right\"\n          (click)=\"helpDocsClick.emit()\">\n          <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <circle cx=\"9\" cy=\"9\" r=\"7.25\"/>\n            <path d=\"M6.85 7a2.15 2.15 0 0 1 4.18.75c0 1.4-2.15 1.8-2.15 3.05\"/>\n            <line x1=\"9\" y1=\"13.4\" x2=\"9.01\" y2=\"13.4\"/>\n          </svg>\n        </button>\n\n        <button\n          *ngIf=\"config?.showLiveChat !== false\"\n          class=\"cqa-sb-util-compact\"\n          type=\"button\"\n          matTooltip=\"Live chat\" matTooltipPosition=\"right\"\n          (click)=\"liveChatClick.emit()\">\n          <svg viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.35\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"18\" height=\"18\">\n            <path d=\"M16 2H2a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h3v3l4.5-3H16a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1z\"/>\n          </svg>\n        </button>\n      </ng-container>\n    </div>\n\n    <!-- ===== 6. Profile card ===== -->\n    <div class=\"cqa-sb-profile\" #profileAnchor>\n      <button class=\"cqa-sb-profile-main\" type=\"button\"\n        [matTooltip]=\"!isExpanded ? (config?.userName || profileUser?.name || '') : ''\" matTooltipPosition=\"right\"\n        [attr.aria-haspopup]=\"(profileUser && profileMenuEntries?.length) ? 'menu' : null\"\n        [attr.aria-expanded]=\"(profileUser && profileMenuEntries?.length) ? isProfileMenuOpen : null\"\n        (click)=\"onProfileClick()\">\n        <div class=\"cqa-sb-profile-avatar\">{{ config?.userInitials || '?' }}</div>\n        <div class=\"cqa-sb-profile-info\" [class.cqa-sb-profile-info--visible]=\"isExpanded\">\n          <span class=\"cqa-sb-profile-name\">{{ config?.userName }}</span>\n          <span *ngIf=\"config?.userRole\" class=\"cqa-sb-profile-role\">{{ config.userRole }}</span>\n        </div>\n      </button>\n      <button *ngIf=\"isExpanded\" class=\"cqa-sb-profile-logout\" type=\"button\"\n        aria-label=\"Logout\" (click)=\"logoutClick.emit()\">\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.2\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"16\" height=\"16\">\n          <path d=\"M6 14H3a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h3\"/>\n          <polyline points=\"11,11 14,8 11,5\"/>\n          <line x1=\"14\" y1=\"8\" x2=\"6\" y2=\"8\"/>\n        </svg>\n      </button>\n    </div>\n\n    <cqa-profile-menu\n      *ngIf=\"isProfileMenuOpen && profileUser && profileMenuEntries?.length\"\n      [user]=\"profileUser\"\n      [entries]=\"profileMenuEntries\"\n      [anchor]=\"profileAnchorRef?.nativeElement || null\"\n      (itemClick)=\"onProfileMenuItemClick($event)\"\n      (dismissed)=\"onProfileMenuDismissed()\">\n    </cqa-profile-menu>\n\n    <cqa-workspace-menu\n      *ngIf=\"isWorkspaceMenuOpen && workspaces?.length\"\n      [workspaces]=\"workspaces\"\n      [currentWorkspaceId]=\"currentWorkspaceId\"\n      [workspaceName]=\"config?.workspaceName\"\n      [anchor]=\"workspaceAnchorRef?.nativeElement || null\"\n      (workspaceSelected)=\"onWorkspaceMenuItemClick($event)\"\n      (manageWorkspacesClick)=\"onManageWorkspacesClick()\"\n      (dismissed)=\"onWorkspaceMenuDismissed()\">\n    </cqa-workspace-menu>\n\n  </aside>\n</div>\n","import { InjectionToken, Type } from '@angular/core';\n\nexport const STEP_COMPONENT_MAP = new InjectionToken<Map<string, Type<any>>>('STEP_COMPONENT_MAP');\n\n","/**\n * Models and interfaces for execution screen step components\n */\n\nexport type StepStatus = 'success' | 'failed' | 'pending' | 'running' | 'skipped' | 'SUCCESS' | 'FAILED' | 'PENDING' | 'RUNNING' | 'SKIPPED';\n\nexport interface TimingBreakdown {\n  app: number; // in seconds\n  tool: number; // in seconds\n}\n\nexport interface SubStep {\n  id: string;\n  description: string;\n  status: StepStatus;\n  duration: number; // in seconds\n  remainingSeconds?: number | null; // Remaining timeout in seconds for WAIT_FOR_LOCATOR logs\n  timestamp?: string; // optional timestamp like \"00:12\"\n}\n\nexport interface LoopIteration {\n  id: string;\n  label: string; // e.g., \"Iter 2 (production)\"\n  status: StepStatus;\n  subSteps?: SubStep[];\n}\n\nexport interface ConditionBranch {\n  type: 'if' | 'else' | 'else if';\n  label: string; // e.g., \"Premium user\" or \"Free user\"\n  conditionText?: string; // The condition expression text (empty for ELSE branches)\n  conditionType?: string; // Normalized condition type (e.g., CONDITION_IF, CONDITION_ELSE)\n  executed: boolean;\n  subSteps?: SubStep[];\n  branchStepId?: string | number; // ID of the branch step to load children from\n  isIfBranch?: boolean; // Whether this is the main IF branch\n  branchStep: any;\n}\n\nexport interface ScreenshotData {\n  baseline?: string; // URL or base64\n  current?: string; // URL or base64\n  difference?: string; // URL or base64\n}\n\nexport interface LogEntry {\n  level: 'info' | 'warning' | 'error';\n  message: string;\n  timestamp?: string;\n}\n\nexport interface FailureDetails {\n  testStepId: string;\n  expected: string;\n  actual: string;\n  failedAction?: string; // The action that failed\n  aiFixApplied?: boolean;\n  aiFixMessage?: string;\n  screenshots?: ScreenshotData;\n  logs?: LogEntry[];\n}\n\nexport interface BaseStepConfig {\n  id: string;\n  uniqueId?: string; // unique identifier for steps reused across multiple groups\n  testStepId: number | undefined; // test step id from the test case\n  testStepResultId: string;\n  stepNumber: string; // e.g., \"1\", \"2.1\", \"3.2.1\"\n  title: string;\n  status: StepStatus;\n  duration: number; // total duration in seconds\n  timingBreakdown?: TimingBreakdown;\n  expanded?: boolean; // whether the step is expanded by default\n  failureDetails?: FailureDetails;\n  reasoning?: string[];\n  confidence?: string;\n  stepDeleted?: boolean;\n  executedResult?: {\n    video_start_time: number;\n    video_end_time: number;\n  };\n  // Additional properties for live execution and runtime use\n  selectedIterationId?: string; // which iteration to display\n  /** Internal debug/portal-only flags used at runtime (not persisted). */\n  isStepGroupChildren?: boolean;\n  stepMoreMenuOptions?: boolean;\n  debugPointDisabled?: boolean; // flag set externally (e.g. on skip) to disable the breakpoint\n  isRunResult?: boolean;\n}\n\nexport interface SelfHealAnalysisData {\n  originalLocator: string;\n  healedLocator: string;\n  confidence: number; // 0-100\n  healMethod: string; // e.g., \"Semantic Attribute Matching\"\n}\n\nexport interface SelfHealActionEvent {\n  type: SelfHealAction;\n  id: string;\n  healedLocator: string;\n  testStepId?: string; // test step id from the test case\n}\n\nexport type SelfHealAction = 'accept' | 'reject' | 'modify-accept';\n\nexport interface BasicStepConfig extends BaseStepConfig {\n  displayType: 'basic';\n  subSteps: SubStep[];\n  selfHealAnalysis?: SelfHealAnalysisData;\n  selfHealed?: boolean; // Indicates if self-healing was applied\n  selfHealDuration?: number; // Duration of self-healing process\n  nestedSteps?: ExecutionStepConfig[]; // nested child steps for recursive rendering\n}\n\nexport interface StepGroupConfig extends BaseStepConfig {\n  displayType: 'step-group';\n  groupName: string; // e.g., \"Navigation\", \"Checkout flow\"\n  steps: ExecutionStepConfig[]; // nested steps\n}\n\nexport interface LoopStepConfig extends BaseStepConfig {\n  displayType: 'loop';\n  loopType?: 'for' | 'while';\n  iterations: LoopIteration[];\n  selectedIterationId?: string; // which iteration to display\n  defaultIteration?: 'first' | 'last'; // default iteration to show\n  nestedSteps?: ExecutionStepConfig[]; // steps nested within the loop\n  showViewAllIterations?: boolean;\n  subSteps?: SubStep[];\n  iterationData?: any; // data for each iteration in live execution\n}\n\nexport interface ConditionStepConfig extends BaseStepConfig {\n  displayType: 'condition';\n  conditionText: string; // e.g., \"if user type is 'Premium'\"\n  branches: ConditionBranch[];\n  nestedSteps?: ExecutionStepConfig[]; // nested child steps for recursive rendering\n}\n\nexport interface FailedStepConfig extends BaseStepConfig {\n  displayType: 'failed';\n  subSteps: SubStep[];\n  failureDetails: FailureDetails;\n  reasoning?: string[];\n  confidence?: string;\n}\n\nexport interface AIAgentAction {\n  id: string;\n  description: string;\n  type: 'extract' | 'validate' | 'AI_AGENT_ACTION' | 'TYPE' | 'CLICK';\n  status: StepStatus;\n  confidence?: number; // 0-100\n  duration: number;\n  reasoning?: string;\n}\n\nexport interface AIAgentStepConfig extends BaseStepConfig {\n  displayType: 'ai-agent';\n  prompt: string;\n  optimizedRun?: boolean;\n  actionCount?: number;\n  actions: AIAgentAction[];\n  selectedTab?: 'action-trace' | 'planner-timeline' | 'ai-reasoning';\n}\n\nexport interface AIActionStepConfig extends BaseStepConfig {\n  displayType: 'ai-action';\n  actionCount?: number;\n  actionName?: 'ai_text_verification' | 'ai_ask' | 'ai_document_ask' | 'ai_verify';\n  actions: AIAgentAction[];\n}\n\nexport interface ApiAssertion {\n  id: string;\n  description: string;\n  status: 'passed' | 'failed';\n  expected: string;\n  actual: string;\n}\n\nexport interface ApiStepConfig extends BaseStepConfig {\n  displayType: 'api';\n  method: string; // GET, POST, PUT, DELETE, etc.\n  endpoint: string;\n  statusCode: number;\n  responseTime: number; // in milliseconds\n  requestBody?: any;\n  responseBody?: any;\n  requestHeaders?: any;\n  responseHeaders?: any;\n  assertions?: ApiAssertion[];\n  initialActions?: SubStep[]; // Actions before the API call\n}\n\nexport interface FileDownloadStepConfig extends BaseStepConfig {\n  displayType: 'file-download';\n  fileName: string;\n  fileType: string; // PDF, CSV, etc.\n  fileSize?: string; // e.g., \"2.4 MB\"\n  filePath?: string;\n  downloaded: boolean;\n}\n\nexport interface ExtractedField {\n  label: string;\n  value: string;\n  confidence: number; // 0-100\n}\n\nexport interface VerificationCheck {\n  id: string;\n  description: string;\n  status: 'pass' | 'fail';\n  expected: string;\n  actual: string;\n}\n\nexport interface DocumentVerificationStepConfig extends BaseStepConfig {\n  displayType: 'document-verification';\n  documentScreenshot?: string; // URL or base64\n  extractedFields: ExtractedField[];\n  verificationChecks: VerificationCheck[];\n}\n\nexport interface LiveSubStep {\n  id: string;\n  text: string; // Text from socket\n  isRunning: boolean; // true = show loader, false = show icon\n  duration?: number; // in seconds\n  status: 'passed' | 'failed' | 'pending' | 'success' | 'failure' | 'skipped';\n  remainingSeconds?: number | null; // Countdown seconds for WAIT_FOR_LOCATOR grouping\n}\n\nexport interface LiveExecutionStepConfig extends BaseStepConfig {\n  displayType: 'live-execution';\n  subSteps: LiveSubStep[];\n}\n\nexport interface DbQueryResult {\n  data: any[];\n  query: string;\n  executedAt?: string;\n  duration?: number; // in seconds\n  [key: string]: any; // For dynamic keys like \"Demo_user\"\n}\n\nexport interface DbAssertionResult {\n  variableName: string;\n  jsonPath: string;\n  expectedValue: any;\n  actualValue: any;\n  verificationType: string;\n  expectedType: string;\n  passed: boolean;\n}\n\nexport interface DbTestResult {\n  success: boolean;\n  results: { [key: string]: DbQueryResult };\n  assertionResults: DbAssertionResult[];\n  allAssertionsPassed: boolean;\n}\n\nexport interface DbVerificationStepConfig extends BaseStepConfig {\n  displayType: 'db-verification';\n  dbTestResult: DbTestResult;\n  subSteps?: SubStep[];\n  dbConfig?: {\n    name: string; // Environment name\n    dbType: string; // Database type (MySQL, SQLServer, etc.)\n  };\n}\n\nexport interface PrerequisiteItem {\n  id: string;\n  title: string; // e.g., \"Prerequisite 1: Login flow\"\n  status: StepStatus;\n  duration: number; // in seconds\n  stepConfig?: ExecutionStepConfig; // Optional: full step config to view details\n  /** Optional URL for \"View steps\" redirect. When viewStepsAsRedirect is true, each item can have its own URL. */\n  viewStepsUrl?: string;\n}\n\nexport type ExecutionStepConfig =\n  | BasicStepConfig\n  | StepGroupConfig\n  | LoopStepConfig\n  | ConditionStepConfig\n  | FailedStepConfig\n  | AIAgentStepConfig\n  | AIActionStepConfig\n  | ApiStepConfig\n  | FileDownloadStepConfig\n  | DocumentVerificationStepConfig\n  | LiveExecutionStepConfig\n  | DbVerificationStepConfig;\n\n/** Option for the Add-step menu shown when the Plus icon is clicked (e.g. \"Add before\", \"Add after\"). */\nexport interface AddStepMenuOption {\n  id: string;\n  label: string;\n  position?: string; // 'before' | 'after' | 'inside'\n  branchType?: string; // 'if' | 'else' | 'else if' - for condition steps\n  branchStepId?: string | number; // ID of the branch step for condition steps\n}\n\n/** Default options for the Add-step dropdown when isDebug is true. */\nexport const DEFAULT_ADD_STEP_MENU_OPTIONS: AddStepMenuOption[] = [\n  { id: 'add-before', label: 'Add before' },\n  { id: 'add-after', label: 'Add after' },\n];\n\n/** Option for the step \"More options\" (three-dot) menu (e.g. Skip, Duplicate, Delete, Add breakpoint, Run to here). */\nexport interface StepMoreMenuOption {\n  id: string;\n  label: string;\n}\n\n/** Default options for the More options (three-dot) menu when isDebug is true. */\nexport const DEFAULT_STEP_MORE_MENU_OPTIONS: StepMoreMenuOption[] = [\n  { id: 'skip', label: 'Skip' },\n  { id: 'duplicate', label: 'Duplicate' },\n  { id: 'delete', label: 'Delete' },\n  { id: 'add-breakpoint', label: 'Add breakpoint' },\n  { id: 'run-to-here', label: 'Run to here' },\n];\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { BaseStepConfig, StepStatus } from './execution-step.models';\n\n/**\n * Base component for all execution step types\n * Provides common functionality like collapsible behavior and status display\n */\n@Component({\n  selector: 'cqa-base-step',\n  template: '', // This is an abstract base component\n})\nexport abstract class BaseStepComponent implements OnInit {\n  @Input() config!: BaseStepConfig;\n  @Output() toggleExpanded = new EventEmitter<boolean>();\n\n  isExpanded: boolean = false;\n\n  ngOnInit(): void {\n    this.isExpanded = this.config.expanded ?? false;\n  }\n\n  toggle(): void {\n    this.isExpanded = !this.isExpanded;\n    this.toggleExpanded.emit(this.isExpanded);\n  }\n\n  getStatusIcon(status: StepStatus): string {\n    switch (status) {\n      case 'success':\n        return 'check_circle';\n      case 'failed':\n        return 'cancel';\n      case 'pending':\n        return 'schedule';\n      case 'running':\n        return 'sync';\n      default:\n        return 'help_outline';\n    }\n  }\n\n  getStatusColorClass(status: StepStatus): string {\n    switch (status) {\n      case 'success':\n        return 'cqa-text-green-600';\n      case 'failed':\n        return 'cqa-text-red-600';\n      case 'pending':\n        return 'cqa-text-gray-500';\n      case 'running':\n        return 'cqa-text-blue-600';\n      default:\n        return 'cqa-text-gray-500';\n    }\n  }\n\n  getStatusBgColorClass(status: StepStatus): string {\n    switch (status) {\n      case 'success':\n        return 'cqa-bg-green-50';\n      case 'failed':\n        return 'cqa-bg-red-50';\n      case 'pending':\n        return 'cqa-bg-gray-50';\n      case 'running':\n        return 'cqa-bg-blue-50';\n      default:\n        return 'cqa-bg-gray-50';\n    }\n  }\n\n  formatDuration(seconds: number): string {\n    if (seconds < 1) {\n      return `${(seconds * 1000).toFixed(0)}ms`;\n    }\n\n    if (seconds < 60 && !Number.isInteger(seconds)) {\n      return `${seconds.toFixed(1)}s`;\n    }\n\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = Math.floor(seconds % 60);\n\n    const parts: string[] = [];\n\n    if (hours > 0) {\n      parts.push(`${hours}h`);\n    }\n    if (minutes > 0) {\n      parts.push(`${minutes}m`);\n    }\n    if (secs > 0 || (hours === 0 && minutes === 0)) {\n      parts.push(`${secs}s`);\n    }\n\n    return parts.join(' ');\n  }\n\n  formatDurationClock(milliseconds: number): string {\n    if (milliseconds < 0) {\n      return '00:00';\n    }\n    const totalSeconds = Math.floor(milliseconds / 1000);\n  \n    const hours = Math.floor(totalSeconds / 3600);\n    const minutes = Math.floor((totalSeconds % 3600) / 60);\n    const secs = totalSeconds % 60;\n  \n    const pad = (n: number) => n.toString().padStart(2, '0');\n  \n    if (hours > 0) {\n      return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;\n    }\n  \n    return `${pad(minutes)}:${pad(secs)}`;\n  }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n  selector: 'cqa-ai-logs-with-reasoning',\n  templateUrl: './ai-logs-with-reasoning.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class AiLogsWithReasoningComponent extends BaseStepComponent implements OnInit {\n  @Input() status!: string;\n  @Input() text!: string;\n  @Input() description?: string;\n  @Input() reasoning?: string | null;\n  @Input() duration?: number;\n\n  override ngOnInit(): void { }\n\n  get displayText(): string {\n    return this.description || this.text || '';\n  }\n\n  get hasReasoning(): boolean {\n    return !!this.reasoning;\n  }\n\n  get isSuccess(): boolean {\n    const statusLower = this.status?.toLowerCase();\n    return statusLower === 'success' || statusLower === 'passed';\n  }\n\n  get isFailed(): boolean {\n    return this.status?.toLowerCase() === 'failed';\n  }\n}\n","<div class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-px-3\">\n  <!-- Status Icon -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-3 cqa-h-3\">\n  </div>\n  <!-- AI-Agent style container -->\n  <div\n    class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1 cqa-flex-1\"\n    [ngStyle]=\"{\n      'background-color': hasReasoning ? '#EEF2FF' : '#F7FAFC',\n      'border': hasReasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n    }\">\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n      <svg *ngIf=\"isSuccess\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n      <svg *ngIf=\"isFailed\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </div>\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n      <svg *ngIf=\"!hasReasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <svg *ngIf=\"hasReasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n        <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </div>\n    <span\n      class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-break-words cqa-whitespace-normal\"\n      [ngStyle]=\"{ color: hasReasoning ? '#4C1D95' : '#0B0B0B' }\">\n      {{ displayText }}\n    </span>\n    <span *ngIf=\"!hasReasoning\" class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n      {{ formatDuration(duration || 0) }}\n    </span>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, ViewChild, ViewContainerRef, OnChanges, SimpleChanges, Type, AfterViewInit, DoCheck, Inject, ChangeDetectorRef, ComponentRef, SimpleChange } from '@angular/core';\nimport { ExecutionStepConfig, AddStepMenuOption, StepMoreMenuOption } from '../execution-step.models';\nimport { STEP_COMPONENT_MAP } from '../step-registry.token';\n\n/**\n * Component that renders the appropriate step component based on the step type.\n * Uses dynamic component loading and an injection token to break circular dependencies\n * between step components in Angular Ivy partial compilation mode.\n */\n@Component({\n  selector: 'cqa-step-renderer',\n  template: '<ng-container #container></ng-container>'\n})\nexport class StepRendererComponent implements OnChanges, AfterViewInit, DoCheck {\n  @Input() step!: ExecutionStepConfig;\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => any;\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() isUploadingBaseline?: any;\n  @Input() isMakingCurrentBaseline?: any;\n  @Input() selectedIterationId?: any;\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @ViewChild('container', { read: ViewContainerRef }) container!: ViewContainerRef;\n  @Input() isLive: boolean = false;\n  @Input() isDebug?: boolean = false;\n  /** When false, hides the inline edit/add/more action menu and standalone Add-step buttons even if isDebug is true. */\n  @Input() canEditSteps?: boolean = true;\n  /** When set, used directly for the rendered step's debugPointSet so the icon state propagates when toggled (e.g. in Storybook). */\n  @Input() debugPointSet?: boolean;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  /** Called when the user clicks the Edit icon on a step (when isDebug is true). Receives the step config so the parent can open an editor. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  /** Add-step menu options (e.g. \"Add before\", \"Add after\"). When set, passed to all rendered steps; when unset, steps use their default. Managed like httpMethodOptions in the API edit section. */\n  @Input() addStepMenuOptions?: AddStepMenuOption[];\n  /** Called when the user selects an option from the Plus menu. Receives the option and the step config. */\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  /** More options (three-dot) menu options. When set, passed to all rendered steps. */\n  @Input() stepMoreMenuOptions?: StepMoreMenuOption[];\n  /** Called when the user selects an option from the More options (three-dot) menu. Receives the option and the step config. */\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, passed to loop/condition steps so they can supply per-step menu options to their nested step-renderers (supports arbitrary nesting). */\n  @Input() getAddStepMenuOptionsForNested?: (step: ExecutionStepConfig) => AddStepMenuOption[];\n  /** When provided, passed to loop/condition steps so they can supply per-step menu options to their nested step-renderers (supports arbitrary nesting). */\n  @Input() getStepMoreMenuOptionsForNested?: (step: ExecutionStepConfig) => StepMoreMenuOption[];\n  /** When provided, passed down to condition-debug-step so \"Add ELSE IF\" button works inside nested containers (loops, step-groups). */\n  @Input() onAddElseIfBranchAtHandler?: (conditionStep: any, branchIndex: number) => void;\n  /** When provided, passed down to condition-debug-step so \"Add ELSE\" button works inside nested containers (loops, step-groups). */\n  @Input() onAddElseBranchHandler?: (conditionStep: any) => void;\n  /** When provided, passed down to condition-debug-step so edit icon on IF/ELSE IF branches opens the condition editor. */\n  @Input() onEditBranchConditionHandler?: (conditionStep: any, branch: any, branchStep: any) => void;\n  @Input() stepNumber?: string;\n  /** When true, the parent step is skipped — breakpoints on all nested steps are disabled. */\n  @Input() parentSkipped?: boolean = false;\n  /** Emitted when the user selects an option from the Add (plus) menu. Payload: { option, step }. */\n  @Output() addStepOptionSelect = new EventEmitter<{ option: AddStepMenuOption; step?: ExecutionStepConfig }>();\n  /** Emitted when the user selects an option from the More options (three-dot) menu. Payload: { option, step }. */\n  @Output() stepMoreOptionSelect = new EventEmitter<{ option: StepMoreMenuOption; step?: ExecutionStepConfig }>();\n  /** Emitted when user clicks \"+ Add step inside loop\" on a (possibly nested) loop step. Payload is the loop step. */\n  @Output() addStepInsideLoop = new EventEmitter<any>();\n  @Output() componentReady = new EventEmitter<void>(); // Emit when component is loaded and ready\n\n  /** Effective type for component lookup: 'file-download' when testStepType === 'generateDocument', 'loop' for FOR_LOOP/WHILE_LOOP. */\n  private getEffectiveStepType(step: ExecutionStepConfig | null | undefined): string {\n    if (!step) return '';\n    const t = (step as any).testStepType;\n    const type = (step as any).displayType || t || '';\n    if (t === 'generateDocument') return 'file-download';\n    if (type === 'FOR_LOOP' || type === 'WHILE_LOOP') return 'loop';\n    return type;\n  }\n\n  /** Whether the step is a loop step (for, while, or generic loop). */\n  private isLoopStep(step: ExecutionStepConfig | null | undefined): boolean {\n    if (!step) return false;\n    const type = (step as any).displayType || (step as any).testStepType || '';\n    return type === 'loop' || type === 'FOR_LOOP' || type === 'WHILE_LOOP';\n  }\n\n  /** Resolve effective debugPointSet so it propagates when toggled (e.g. Storybook Controls). */\n  private getEffectiveDebugPointSet(): boolean {\n    if (this.debugPointSet !== undefined) return this.debugPointSet;\n    if (this.getDebugPointSetHandler && this.step) return this.getDebugPointSetHandler(this.step);\n    return false;\n  }\n\n  // Use WeakMap to track component instances without storing them as class properties\n  private static componentInstances = new WeakMap<ViewContainerRef, any>();\n  private static componentRefs = new WeakMap<ViewContainerRef, ComponentRef<any>>();\n  private static subscribedEventEmitters = new WeakMap<any, Set<string>>(); // Track which EventEmitters have been subscribed to\n  // Track whether child component's ngOnInit has run (config is built).\n  // detectChanges() must NOT be called before initialization — it forces template\n  // evaluation which crashes on undefined config properties.\n  private static componentInitialized = new WeakMap<ViewContainerRef, boolean>();\n  private lastStepId: string | number | null = null;\n  private lastStepType: string | null = null;\n  private previousStepKey: string = '';\n  private _lastDebugPointDisabled: boolean = false;\n\n  constructor(\n    @Inject(STEP_COMPONENT_MAP) private componentMap: Map<string, Type<any>>,\n    private cdr: ChangeDetectorRef\n  ) { }\n\n  /**\n   * Safely trigger change detection on a child component.\n   * Calls detectChanges() only if the child's ngOnInit has already run (i.e. config is built).\n   * Before initialization, falls back to markForCheck() which queues CD for the next cycle\n   * without forcing immediate template evaluation.\n   */\n  private safeDetectChanges(componentRef: ComponentRef<any>): void {\n    if (!componentRef?.injector) return;\n    const instanceCdr = componentRef.injector.get(ChangeDetectorRef, null);\n    if (!instanceCdr) return;\n\n    if (StepRendererComponent.componentInitialized.get(this.container)) {\n      instanceCdr.markForCheck();\n      instanceCdr.detectChanges();\n    } else {\n      instanceCdr.markForCheck();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.container || !this.step) return;\n\n    const currentStep = changes['step']?.currentValue || this.step;\n    const previousStep = changes['step']?.previousValue;\n\n    // Check if selectedIterationId input changed (for loop steps)\n    // && \n    //                                    currentstep.displayType === 'loop' && \n    //                                    this.container.length > 0;\n\n    // If selectedIterationId changed for a loop step, update it directly\n    if (changes['selectedIterationId'] && changes['selectedIterationId'].currentValue !== changes['selectedIterationId'].previousValue) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance && componentRef) {\n        const currentValue = changes['selectedIterationId'].currentValue;\n        const previousValue = changes['selectedIterationId'].previousValue;\n\n        // Always update selectedIterationId when input changes from parent\n        if (currentValue !== previousValue) {\n          (instance as any).selectedIterationId = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config.selectedIterationId = currentValue;\n          }\n\n          // Try to update selectedIteration if iterations are available\n          this.updateLoopStepSelectedIteration(instance, currentValue);\n\n          // Trigger change detection on the loop-step component\n          this.safeDetectChanges(componentRef);\n        }\n      }\n    }\n\n    // If stepNumber input changed, update nested component instances\n    if (changes['stepNumber'] && changes['stepNumber'].currentValue !== changes['stepNumber'].previousValue) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance && componentRef) {\n        const currentValue = changes['stepNumber'].currentValue;\n        const previousValue = changes['stepNumber'].previousValue;\n\n        // Always update stepNumber when input changes from parent\n        if (currentValue !== previousValue) {\n          (instance as any).stepNumber = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config.stepNumber = currentValue;\n          }\n\n          // Trigger change detection on the component instance\n          this.safeDetectChanges(componentRef);\n        }\n      }\n    }\n\n    // If isUploadingBaseline or isMakingCurrentBaseline changed, update nested component instances\n    if (changes['isUploadingBaseline'] || changes['isMakingCurrentBaseline']) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance && componentRef) {\n        // Update isUploadingBaseline if it changed\n        if (changes['isUploadingBaseline']) {\n          (instance as any).isUploadingBaseline = this.isUploadingBaseline;\n          // Also update in config if it exists\n          if ((instance as any).config) {\n            (instance as any).config.isUploadingBaseline = this.isUploadingBaseline;\n          }\n        }\n\n        // Update isMakingCurrentBaseline if it changed\n        if (changes['isMakingCurrentBaseline']) {\n          (instance as any).isMakingCurrentBaseline = this.isMakingCurrentBaseline;\n          // Also update in config if it exists\n          if ((instance as any).config) {\n            (instance as any).config.isMakingCurrentBaseline = this.isMakingCurrentBaseline;\n          }\n        }\n\n        // Trigger change detection on the component instance\n        this.safeDetectChanges(componentRef);\n      }\n    }\n\n    // If downloadingStepId changed, update file-download instance isDownloading\n    if (changes['downloadingStepId']) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n      if (instance && componentRef && this.getEffectiveStepType(currentStep) === 'file-download') {\n        const tid = (currentStep as any).testStepResultId;\n        (instance as any).isDownloading = !!tid && this.downloadingStepId === tid;\n        this.safeDetectChanges(componentRef);\n      }\n    }\n\n    // If isDebug, debugPointSet or getDebugPointSetHandler changed (e.g. user toggled debug in portal/Storybook), update nested instance\n    if (changes['isDebug'] || changes['canEditSteps'] || changes['debugPointSet'] || changes['getDebugPointSetHandler'] || changes['onDebugPointChangeHandler'] || changes['onEditStepHandler'] || changes['addStepMenuOptions'] || changes['onAddStepOptionSelectHandler'] || changes['stepMoreMenuOptions'] || changes['onStepMoreOptionSelectHandler'] || changes['getAddStepMenuOptionsForNested'] || changes['getStepMoreMenuOptionsForNested'] || changes['parentSkipped'] || changes['onAddElseIfBranchAtHandler'] || changes['onAddElseBranchHandler'] || changes['onEditBranchConditionHandler']) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance && componentRef) {\n        if (this.isDebug !== undefined) (instance as any).isDebug = this.isDebug;\n        if (this.canEditSteps !== undefined) (instance as any).canEditSteps = this.canEditSteps;\n        (instance as any).parentSkipped = !!this.parentSkipped;\n        (instance as any).debugPointSet = this.getEffectiveDebugPointSet();\n        if (this.addStepMenuOptions !== undefined) (instance as any).addStepMenuOptions = this.addStepMenuOptions;\n        if (this.stepMoreMenuOptions !== undefined) (instance as any).stepMoreMenuOptions = this.stepMoreMenuOptions;\n        if (this.getAddStepMenuOptionsForNested !== undefined) (instance as any).getAddStepMenuOptionsForNested = this.getAddStepMenuOptionsForNested;\n        if (this.getStepMoreMenuOptionsForNested !== undefined) (instance as any).getStepMoreMenuOptionsForNested = this.getStepMoreMenuOptionsForNested;\n        if (this.onAddElseIfBranchAtHandler !== undefined) (instance as any).onAddElseIfBranchAtHandler = this.onAddElseIfBranchAtHandler;\n        if (this.onAddElseBranchHandler !== undefined) (instance as any).onAddElseBranchHandler = this.onAddElseBranchHandler;\n        if (this.onEditBranchConditionHandler !== undefined) (instance as any).onEditBranchConditionHandler = this.onEditBranchConditionHandler;\n        // Ensure debug point click is wired when isDebug becomes true (e.g. toggled in Storybook Controls)\n        if (this.isDebug && (instance as any).debugPointChange && this.onDebugPointChangeHandler) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('debugPointChange')) {\n            (instance as any).debugPointChange.subscribe((value: boolean) => {\n              this.onDebugPointChangeHandler?.(this.step, value);\n            });\n            subscribedEvents.add('debugPointChange');\n          }\n        }\n        // Wire edit step when isDebug and handler are present\n        if (this.isDebug && (instance as any).editStep && this.onEditStepHandler) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('editStep')) {\n            (instance as any).editStep.subscribe(() => {\n              this.onEditStepHandler?.(this.step);\n            });\n            subscribedEvents.add('editStep');\n          }\n        }\n        // Wire add-step option select when isDebug (emit and optionally call handler)\n        if (this.isDebug && (instance as any).addStepOptionSelect) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('addStepOptionSelect')) {\n            (instance as any).addStepOptionSelect.subscribe((option: AddStepMenuOption) => {\n              this.onAddStepOptionSelectHandler?.(option, this.step);\n              this.addStepOptionSelect.emit({ option, step: this.step });\n            });\n            subscribedEvents.add('addStepOptionSelect');\n          }\n        }\n        // Wire step more option select when isDebug (emit and optionally call handler)\n        if (this.isDebug && (instance as any).stepMoreOptionSelect) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('stepMoreOptionSelect')) {\n            (instance as any).stepMoreOptionSelect.subscribe((option: StepMoreMenuOption) => {\n              this.onStepMoreOptionSelectHandler?.(option, this.step);\n              this.stepMoreOptionSelect.emit({ option, step: this.step });\n            });\n            subscribedEvents.add('stepMoreOptionSelect');\n          }\n        }\n        this.safeDetectChanges(componentRef);\n      }\n    }\n\n    // Get step identifiers (use effective type: generateDocument -> file-download)\n    const currentStepId = currentStep.testStepResultId || currentStep.id;\n    const currentStepType = this.getEffectiveStepType(currentStep) || (currentStep as any).displayType;\n\n    // Use stored lastStepId and lastStepType to properly detect changes\n    // This handles the case when step object reference doesn't change but properties do\n    // Only check for actual ID/type changes, not just reference changes\n    // const stepTypeChanged = !previousStep || currentStepType !== (previousStep.displayType || this.lastStepType);\n    // const stepIdChanged = !previousStep || currentStepId !== (previousStep.testStepResultId || previousStep.id || this.lastStepId);\n    const stepTypeChanged = currentStepType !== this.lastStepType;\n    const stepIdChanged = currentStepId !== this.lastStepId;\n    \n    // Only load component if step ID or type actually changed\n    // This prevents unnecessary reloads when only nested properties change\n    if (stepTypeChanged || stepIdChanged) {\n      this.lastStepId = currentStepId;\n      this.lastStepType = currentStepType;\n      if (this.container) {\n        this.loadComponent();\n      }\n      return;\n    }\n\n    // Check if expanded state changed (using handler if available, as it may depend on parent state)\n    let expandedChanged = false;\n    if (previousStep && currentStep) {\n      let currentExpanded: boolean | undefined;\n      let previousExpanded: boolean | undefined;\n      \n      if (this.isStepExpandedHandler) {\n        currentExpanded = this.isStepExpandedHandler(currentStep);\n        previousExpanded = this.isStepExpandedHandler(previousStep);\n      } else {\n        currentExpanded = (currentStep as any).expanded;\n        previousExpanded = (previousStep as any).expanded;\n      }\n      \n      expandedChanged = currentExpanded !== previousExpanded;\n    }\n    \n    // If only nested data changed (children, nestedSteps, steps, expanded), \n    // update properties without recreating component to prevent blinking\n    // This prevents parent steps from blinking when nested steps expand\n    const onlyNestedDataChanged = previousStep && (\n      (currentStep as any).nestedSteps !== (previousStep as any).nestedSteps ||\n      (currentStep as any).children !== (previousStep as any).children ||\n      (currentStep as any).steps !== (previousStep as any).steps ||\n      expandedChanged ||\n      (currentStep as any).activeBranchStepId !== (previousStep as any).activeBranchStepId ||\n      (currentStep as any).branches !== (previousStep as any).branches ||\n      ((currentStep as any).config && (currentStep as any).config.expanded !== (previousStep as any).config?.expanded)\n    );\n\n    // Update properties without recreating component to prevent blinking\n    if (onlyNestedDataChanged && this.container.length > 0) {\n      // Get the stored component instance\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance) {\n        // Use comprehensive update method from original\n        this.updateComponentInstance(currentStep, previousStep);\n      }\n      return;\n    }\n\n    // For other changes, use comprehensive update if component exists\n    if (this.container.length > 0) {\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n      if (instance && previousStep && currentStep &&\n        previousStep.displayType === currentStep.displayType &&\n        (previousStep.testStepResultId || previousStep.id) === (currentStep.testStepResultId || currentStep.id)) {\n        // Update existing component instance with new step properties\n        this.updateComponentInstance(currentStep, previousStep);\n        return;\n      }\n    }\n\n    // Only load component if container is empty (component doesn't exist yet)\n    // This prevents unnecessary reloads\n    if (this.container && this.container.length === 0) {\n      this.loadComponent();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.loadComponent();\n  }\n\n  private updateComponentInstance(currentStep: any, previousStep: any): void {\n    const instance = StepRendererComponent.componentInstances.get(this.container);\n    const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n    if (!instance || !componentRef || !this.container) return;\n\n    let hasChanges = false;\n\n    // List of properties that commonly change and need to be updated\n    const importantProperties = ['status', 'duration', 'expanded', 'subSteps', 'children', 'nestedSteps', 'steps',\n      'executionData', 'action', 'title', 'result', 'method', 'endpoint', 'statusCode', 'branches',\n      'responseTime', 'actions', 'initialActions', 'prompt', 'optimizedRun', 'actionCount', 'iterations', 'selectedIterationId', 'stepNumber',\n      'isUploadingBaseline', 'isMakingCurrentBaseline', 'selectedTabInput', 'stepDeleted'];\n\n    // Update important properties\n    importantProperties.forEach(key => {\n      // For selectedIterationId on loop steps, prioritize the input value over step value\n      if (key === 'selectedIterationId' && this.isLoopStep(currentStep) && this.selectedIterationId !== undefined) {\n        const currentValue = this.selectedIterationId;\n        const previousValue = (instance as any)[key];\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config[key] = currentValue;\n          }\n          // Try to update selectedIteration if iterations are available\n          this.updateLoopStepSelectedIteration(instance, currentValue);\n          hasChanges = true;\n        }\n      } else if (key === 'iterations' && this.isLoopStep(currentStep)) {\n        // When iterations are updated, check if we need to update selectedIteration\n        const currentValue = (currentStep as any)[key];\n        const previousValue = (previousStep as any)[key];\n\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config[key] = currentValue;\n          }\n          hasChanges = true;\n\n          // After iterations are updated, try to update selectedIteration if selectedIterationId is set\n          const selectedIterationId = (instance as any).selectedIterationId || this.selectedIterationId;\n          if (selectedIterationId) {\n            this.updateLoopStepSelectedIteration(instance, selectedIterationId);\n          }\n        }\n      } else if (key === 'isUploadingBaseline' || key === 'isMakingCurrentBaseline') {\n        // For loading state objects, always use the input value (they're passed from parent)\n        const currentValue = key === 'isUploadingBaseline' ? this.isUploadingBaseline : this.isMakingCurrentBaseline;\n        const previousValue = (instance as any)[key];\n\n        // Always update if the reference changed (new object created)\n        if (currentValue !== previousValue) {\n          (instance as any)[key] = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config[key] = currentValue;\n          }\n          hasChanges = true;\n        }\n      } else if (key === 'stepNumber' && this.stepNumber !== undefined) {\n        // For stepNumber, prioritize the input value over step value\n        const currentValue = this.stepNumber;\n        const previousValue = (instance as any)[key];\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config[key] = currentValue;\n          }\n          hasChanges = true;\n        }\n      } else if (key === 'action' && currentStep.displayType === 'ai-agent') {\n        // For ai-agent steps, ensure title and prompt are set from action\n        const currentValue = (currentStep as any)[key];\n        const previousValue = (previousStep as any)[key];\n\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          // Update action\n          (instance as any)[key] = currentValue;\n          hasChanges = true;\n\n          // Also update title and prompt from action if they're not set or empty\n          if (currentValue) {\n            if (!(instance as any).title || !(instance as any).title.trim()) {\n              (instance as any).title = currentValue;\n              if ((instance as any).config) {\n                (instance as any).config.title = currentValue;\n              }\n            }\n            if (!(instance as any).prompt || !(instance as any).prompt.trim()) {\n              (instance as any).prompt = currentValue;\n              if ((instance as any).config) {\n                (instance as any).config.prompt = currentValue;\n              }\n            }\n          }\n        }\n      } else if (key === 'actions' && (currentStep as any).displayType === 'ai-agent') {\n        // For ai-agent steps, trigger ngOnChanges when the actions array changes so that\n        // config.actions is kept in sync and auto-expand fires when logs stream in live.\n        const currentValue = (currentStep as any)[key];\n        const previousValue = (previousStep as any)[key];\n\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          if ((instance as any).config) {\n            (instance as any).config[key] = currentValue;\n          }\n          hasChanges = true;\n          if (typeof (instance as any).ngOnChanges === 'function') {\n            const actionsChanges: SimpleChanges = {\n              actions: new SimpleChange(previousValue, currentValue, false)\n            };\n            (instance as any).ngOnChanges(actionsChanges);\n          }\n        }\n      } else {\n        const currentValue = (currentStep as any)[key];\n        const previousValue = (previousStep as any)[key];\n\n        // Use deep comparison for objects/arrays, shallow for primitives\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          hasChanges = true;\n        }\n      }\n    });\n\n    // Update isDebug, parentSkipped and debugPointSet from step-renderer inputs (parent may have updated after toggle)\n    if (this.isDebug !== undefined && (instance as any).isDebug !== this.isDebug) {\n      (instance as any).isDebug = this.isDebug;\n      hasChanges = true;\n    }\n    if (this.canEditSteps !== undefined && (instance as any).canEditSteps !== this.canEditSteps) {\n      (instance as any).canEditSteps = this.canEditSteps;\n      hasChanges = true;\n    }\n    if ((instance as any).parentSkipped !== !!this.parentSkipped) {\n      (instance as any).parentSkipped = !!this.parentSkipped;\n      hasChanges = true;\n    }\n    const nextDebugPointSet = this.getEffectiveDebugPointSet();\n    if ((instance as any).debugPointSet !== nextDebugPointSet) {\n      (instance as any).debugPointSet = nextDebugPointSet;\n      hasChanges = true;\n    }\n\n    // Also update all other properties\n    Object.keys(currentStep).forEach(key => {\n      if (key !== 'type' && !importantProperties.includes(key)) {\n        const currentValue = (currentStep as any)[key];\n        const previousValue = (previousStep as any)[key];\n\n        if (this.hasValueChanged(currentValue, previousValue)) {\n          (instance as any)[key] = currentValue;\n          hasChanges = true;\n        }\n      }\n    });\n\n    // Sync critical properties into instance.config so templates that read config.* see fresh data.\n    // Angular's ngOnChanges only fires for template-bound @Input() updates; when the step-renderer\n    // sets properties directly (instance[key] = value), config.* stays stale and *ngFor over\n    // config.nestedSteps / config.branches never sees the new arrays.\n    if ((instance as any).config) {\n      const configSyncKeys = ['nestedSteps', 'children', 'branches', 'steps', 'conditionText', 'title', 'action'];\n      for (const ck of configSyncKeys) {\n        const val = (instance as any)[ck];\n        if (val !== undefined && (instance as any).config[ck] !== val) {\n          (instance as any).config[ck] = val;\n          hasChanges = true;\n        }\n      }\n    }\n\n    // Update special properties that might need special handling\n    if (this.isLoopStep(currentStep) && (currentStep as any).children && !(currentStep as any).nestedSteps) {\n      if ((instance as any).nestedSteps !== (currentStep as any).children) {\n        (instance as any).nestedSteps = (currentStep as any).children;\n        if ((instance as any).config) {\n          (instance as any).config.nestedSteps = (currentStep as any).children;\n        }\n        hasChanges = true;\n      }\n    }\n\n    if (currentStep.displayType === 'step-group' && (currentStep as any).children?.length) {\n      const children = (currentStep as any).children;\n      if ((instance as any).steps !== children) {\n        (instance as any).steps = children;\n        if ((instance as any).config) {\n          (instance as any).config.steps = children;\n        }\n        hasChanges = true;\n      }\n      // Also sync groupName from action\n      const newGroupName = (currentStep as any).action || '';\n      if ((instance as any).groupName !== newGroupName) {\n        (instance as any).groupName = newGroupName;\n        if ((instance as any).config) {\n          (instance as any).config.groupName = newGroupName;\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Special handling for condition-step: ensure branches is properly updated\n    // Use deep comparison to detect changes in nested subSteps\n    if ((currentStep.displayType === 'condition' || currentStep.displayType === 'condition-debug') && (currentStep as any).branches !== undefined) {\n      const currentBranches = (currentStep as any).branches || [];\n      const previousBranches = (previousStep as any).branches || [];\n\n      // Use deep comparison to detect nested subSteps changes\n      if (this.hasBranchesChanged(currentBranches, previousBranches)) {\n        // Create a new array reference to ensure change detection triggers\n        (instance as any).branches = [...currentBranches.map((branch: any) => ({\n          ...branch,\n          subSteps: branch.subSteps ? [...branch.subSteps] : []\n        }))];\n        if ((instance as any).config) {\n          (instance as any).config.branches = (instance as any).branches;\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Special handling for condition-step: ensure nestedSteps is properly updated\n    // This is important when children are loaded from the API or when switching branches\n    if ((currentStep.displayType === 'condition' || currentStep.displayType === 'condition-debug') && (currentStep as any).nestedSteps !== undefined) {\n      const currentNestedSteps = (currentStep as any).nestedSteps || [];\n      const previousNestedSteps = (previousStep as any).nestedSteps || [];\n      // Use deep comparison to detect content changes, not just reference changes\n      // This is critical when switching between IF and ELSE_IF branches\n      if (this.hasNestedStepsChanged(currentNestedSteps, previousNestedSteps)) {\n        // Create a new array reference to ensure change detection triggers\n        (instance as any).nestedSteps = [...currentNestedSteps];\n        if ((instance as any).config) {\n          (instance as any).config.nestedSteps = [...currentNestedSteps];\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Special handling for file-download (including generateDocument): sync from generateDocumentResult\n    if (this.getEffectiveStepType(currentStep) === 'file-download') {\n      const gd = (currentStep as any).executedResult?.generateDocumentResult;\n      const prevGd = (previousStep as any).executedResult?.generateDocumentResult;\n      if (gd !== prevGd || gd?.fileName !== prevGd?.fileName || gd?.fileType !== prevGd?.fileType || gd?.s3FileName !== prevGd?.s3FileName) {\n        (instance as any).fileName = gd?.fileName ?? (instance as any).fileName ?? '';\n        (instance as any).fileType = gd?.fileType ?? (instance as any).fileType ?? '';\n        (instance as any).filePath = gd?.s3FileName ?? (instance as any).filePath;\n        if ((instance as any).config) {\n          (instance as any).config.fileName = (instance as any).fileName;\n          (instance as any).config.fileType = (instance as any).fileType;\n          (instance as any).config.filePath = (instance as any).filePath;\n        }\n        hasChanges = true;\n      }\n      const tid = (currentStep as any).testStepResultId;\n      const nextDownloading = !!tid && this.downloadingStepId === tid;\n      if ((instance as any).isDownloading !== nextDownloading) {\n        (instance as any).isDownloading = nextDownloading;\n        hasChanges = true;\n      }\n    }\n\n    // Special handling for loop-step: ensure selectedIterationId from input is used\n    if (this.isLoopStep(currentStep) && this.selectedIterationId !== undefined) {\n      const currentSelectedIterationId = this.selectedIterationId;\n      const instanceSelectedIterationId = (instance as any).selectedIterationId;\n\n      // Normalize values to handle null/undefined consistently\n      const normalizeValue = (val: any) => val === null || val === undefined ? '' : String(val);\n      const currentNormalized = normalizeValue(currentSelectedIterationId);\n      const instanceNormalized = normalizeValue(instanceSelectedIterationId);\n\n      if (currentNormalized !== instanceNormalized) {\n        (instance as any).selectedIterationId = currentSelectedIterationId;\n        if ((instance as any).config) {\n          (instance as any).config.selectedIterationId = currentSelectedIterationId;\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Special handling for loop-step: ensure selectedIterationId from input is used\n    if (this.isLoopStep(currentStep) && this.selectedIterationId !== undefined) {\n      const currentSelectedIterationId = this.selectedIterationId;\n      const instanceSelectedIterationId = (instance as any).selectedIterationId;\n\n      // Normalize values to handle null/undefined consistently\n      const normalizeValue = (val: any) => val === null || val === undefined ? '' : String(val);\n      const currentNormalized = normalizeValue(currentSelectedIterationId);\n      const instanceNormalized = normalizeValue(instanceSelectedIterationId);\n\n      if (currentNormalized !== instanceNormalized) {\n        (instance as any).selectedIterationId = currentSelectedIterationId;\n        if ((instance as any).config) {\n          (instance as any).config.selectedIterationId = currentSelectedIterationId;\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Update expanded state - use setInput to properly trigger ngOnChanges\n    // Always recalculate expanded state using handler if available, as it may depend on parent state\n    let expandedState: boolean | undefined;\n    if (this.isStepExpandedHandler && currentStep) {\n      expandedState = this.isStepExpandedHandler(currentStep);\n    } else if ((currentStep as any).expanded !== undefined) {\n      expandedState = (currentStep as any).expanded;\n    }\n    \n    // Update expanded if it changed\n    if (expandedState !== undefined && (instance as any).expanded !== expandedState) {\n      const previousValue = (instance as any).expanded;\n      // Use setInput to properly update the @Input() expanded property\n      // This ensures ngOnChanges is called in child components\n      if (componentRef && typeof (componentRef as any).setInput === 'function') {\n        (componentRef as any).setInput('expanded', expandedState);\n      } else {\n        // Fallback for older Angular versions: manually trigger ngOnChanges\n        (instance as any).expanded = expandedState;\n        // Manually call ngOnChanges if the component implements it\n        if (typeof (instance as any).ngOnChanges === 'function') {\n          const changes: SimpleChanges = {\n            expanded: new SimpleChange(previousValue, expandedState, previousValue === undefined)\n          };\n          (instance as any).ngOnChanges(changes);\n        }\n      }\n      if ((instance as any).config) {\n        (instance as any).config.expanded = expandedState;\n      }\n      // Also update the step object's expanded property to keep it in sync\n      if (currentStep) {\n        (currentStep as any).expanded = expandedState;\n      }\n      hasChanges = true;\n    }\n\n    // Update config reference - ensure all properties including branches are included\n    if ('config' in instance) {\n      // Update config with current step to ensure all properties including branches are synced\n      (instance as any).config = { ...(instance as any).config, ...currentStep };\n      // Explicitly ensure branches is updated for condition-step (in case it was nested)\n      // Use the already updated branches from instance to maintain reference consistency\n      if ((currentStep.displayType === 'condition' || currentStep.displayType === 'condition-debug') && (instance as any).branches !== undefined) {\n        (instance as any).config.branches = (instance as any).branches;\n      }\n      this.syncAiAgentPromptInConfig(instance, currentStep);\n    }\n\n    // Update step property if it exists on the instance\n    if ('step' in instance) {\n      (instance as any).step = currentStep;\n      hasChanges = true;\n    }\n\n    // Update selfHealAnalysis using handler if available\n    if (this.getSelfHealAnalysisHandler && currentStep) {\n      const selfHealAnalysis = this.getSelfHealAnalysisHandler(currentStep);\n      const previousSelfHealAnalysis = (instance as any).selfHealAnalysis;\n      \n      if (this.hasValueChanged(selfHealAnalysis, previousSelfHealAnalysis)) {\n        (instance as any).selfHealAnalysis = selfHealAnalysis;\n        if ((instance as any).config) {\n          (instance as any).config.selfHealAnalysis = selfHealAnalysis;\n        }\n        hasChanges = true;\n      }\n    }\n\n    // Trigger change detection on the component instance if there were changes\n    // This ensures only the nested step updates without affecting parent steps\n    if (hasChanges) {\n      this.safeDetectChanges(componentRef);\n      // Don't call markForCheck on this component to avoid triggering parent re-renders\n    }\n  }\n\n  /**\n   * Helper method to update loop-step selectedIteration when selectedIterationId changes\n   * This handles the case where iterations might not be loaded yet\n   */\n  private updateLoopStepSelectedIteration(instance: any, selectedIterationId: string | undefined): void {\n    if (!instance) return;\n\n    const iterations = (instance as any).iterations || (instance as any).config?.iterations || [];\n\n    if (iterations && iterations.length > 0) {\n      if (selectedIterationId) {\n        const found = iterations.find((iter: any) => iter.id === selectedIterationId);\n        if (found) {\n          (instance as any).selectedIteration = found;\n          // Sync userSelectedIterationId with the input value\n          if ((instance as any).userSelectedIterationId !== undefined) {\n            (instance as any).userSelectedIterationId = selectedIterationId;\n          }\n        } else {\n          // If not found, select default\n          if (typeof (instance as any).selectDefaultIteration === 'function') {\n            (instance as any).selectDefaultIteration();\n          }\n        }\n      } else {\n        // If no value provided, select default\n        if (typeof (instance as any).selectDefaultIteration === 'function') {\n          (instance as any).selectDefaultIteration();\n        }\n      }\n    }\n    // If iterations are not available yet, the selectedIterationId is already set\n    // and will be used when iterations become available (handled in updateComponentInstance and ngDoCheck)\n  }\n\n  /**\n   * Live execution payloads often carry `title` but omit or null out `prompt`. Spreading the\n   * step onto `config` then overwrites `config.prompt` with undefined, while the header still\n   * binds `config.title` — so the PROMPT card appears empty until the view is rebuilt.\n   */\n  private syncAiAgentPromptInConfig(instance: any, step: any): void {\n    if (!instance?.config || step?.displayType !== 'ai-agent') {\n      return;\n    }\n    const s = (v: any) => (v != null ? String(v).trim() : '');\n    const combined =\n      s(instance.prompt) ||\n      s(step.prompt) ||\n      s(step.title) ||\n      s(instance.title) ||\n      s(step.action) ||\n      s(instance.action) ||\n      '';\n    if (combined) {\n      instance.config.prompt = combined.replace('AI Agent', '').trim();\n    }\n  }\n\n  private hasValueChanged(current: any, previous: any): boolean {\n    // Shallow comparison for primitives\n    if (current === previous) return false;\n\n    // Handle null/undefined\n    if (current == null || previous == null) return current !== previous;\n\n    // For arrays, check length and reference\n    if (Array.isArray(current) || Array.isArray(previous)) {\n      if (Array.isArray(current) !== Array.isArray(previous)) return true;\n      if (current.length !== previous.length) return true;\n      return current !== previous; // Reference check\n    }\n\n    // For objects, do shallow comparison (check reference)\n    if (typeof current === 'object' && typeof previous === 'object') {\n      return current !== previous; // Reference check\n    }\n\n    // For primitives\n    return current !== previous;\n  }\n\n  /**\n   * Deep comparison for branches array to detect changes in nested subSteps\n   */\n  private hasBranchesChanged(current: any[], previous: any[]): boolean {\n    if (!current && !previous) return false;\n    if (!current || !previous) return true;\n    if (current.length !== previous.length) return true;\n    if (current === previous) return false; // Same reference\n\n    // Compare each branch and its subSteps\n    for (let i = 0; i < current.length; i++) {\n      const currentBranch = current[i];\n      const previousBranch = previous[i];\n\n      if (!previousBranch) return true;\n\n      // Check if branch properties changed\n      if (currentBranch.type !== previousBranch.type ||\n        currentBranch.label !== previousBranch.label ||\n        currentBranch.executed !== previousBranch.executed ||\n        currentBranch.conditionType !== previousBranch.conditionType) {\n        return true;\n      }\n\n      // Check if subSteps array changed (length or reference)\n      const currentSubSteps = currentBranch.subSteps || [];\n      const previousSubSteps = previousBranch.subSteps || [];\n\n      if (currentSubSteps.length !== previousSubSteps.length) return true;\n      if (currentSubSteps !== previousSubSteps) return true; // Reference check\n    }\n\n    return false;\n  }\n\n  /**\n   * Deep comparison for nestedSteps array to detect content changes\n   * This is important for condition steps when switching between branches\n   */\n  private hasNestedStepsChanged(current: any[], previous: any[]): boolean {\n    if (!current && !previous) return false;\n    if (!current || !previous) return true;\n    if (current.length !== previous.length) return true;\n    if (current === previous) return false; // Same reference\n\n    // Compare each step by ID to detect content changes\n    // This handles cases where array length is same but content differs (e.g., switching branches)\n    for (let i = 0; i < current.length; i++) {\n      const currentStep = current[i];\n      const previousStep = previous[i];\n\n      if (!previousStep) return true;\n\n      // Compare step IDs - if IDs differ, content has changed\n      const currentStepId = currentStep.id || currentStep.testStepResultId;\n      const previousStepId = previousStep.id || previousStep.testStepResultId;\n\n      if (currentStepId !== previousStepId) {\n        return true;\n      }\n\n      // Also check if the step type changed (important for branch switching)\n      if (currentStep.displayType !== previousStep.displayType) {\n        return true;\n      }\n\n      // Check if testStepType changed (IF vs ELSE_IF vs ELSE)\n      if (currentStep.testStepType !== previousStep.testStepType) {\n        return true;\n      }\n\n      // Check for update token if present (used to force re-render)\n      if (currentStep._updateToken && currentStep._updateToken !== previousStep._updateToken) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  private getStepKey(step: any): string {\n    if (!step) return '';\n    // Create a key from important properties that change\n    // Include executionData.stepStatus for live execution scenarios\n    const executionStatus = step.executionData?.stepStatus || step.status || '';\n    // Include branches length for condition-step change detection\n    const branchesLength = (step.branches || []).length;\n    // Include total subSteps count across all branches for nested change detection\n    const totalSubSteps = (step.branches || []).reduce((sum: number, branch: any) => {\n      return sum + (branch.subSteps?.length || 0);\n    }, 0);\n    // Include initialActions length for api-step live execution logs\n    const initialActionsLength = (step.initialActions || []).length;\n    // Include actions length for ai-agent step live log streaming\n    const actionsLength = (step.actions || []).length;\n    return `${step.id || ''}_${executionStatus}_${step.status || ''}_${step.duration || ''}_${step.expanded || false}_${(step.children || []).length}_${(step.nestedSteps || []).length}_${(step.steps || []).length}_${branchesLength}_${totalSubSteps}_${step.stepNumber || ''}_${step.stepDeleted || false}_${initialActionsLength}_${actionsLength}`;\n  }\n\n  private loadComponent() {\n    \n    if (!this.container || !this.step) return;\n\n    const currentStepId = (this.step as any).testStepResultId || this.step.id;\n    const currentStepType = this.getEffectiveStepType(this.step) || (this.step as any).displayType;\n\n    // Only clear and recreate if step ID or type actually changed\n    const needsRecreation = this.lastStepId !== currentStepId || this.lastStepType !== currentStepType;\n\n    if (needsRecreation) {\n      this.container.clear();\n      // Clear stored instance when recreating\n      const oldInstance = StepRendererComponent.componentInstances.get(this.container);\n      if (oldInstance) {\n        StepRendererComponent.subscribedEventEmitters.delete(oldInstance);\n      }\n      StepRendererComponent.componentInstances.delete(this.container);\n      StepRendererComponent.componentRefs.delete(this.container);\n      StepRendererComponent.componentInitialized.delete(this.container);\n      this.lastStepId = currentStepId;\n      this.lastStepType = currentStepType;\n    } else {\n      // If same step, just update properties without clearing\n      const instance = StepRendererComponent.componentInstances.get(this.container);\n      const componentRef = StepRendererComponent.componentRefs.get(this.container);\n      if (instance) {\n        // Capture component-computed properties BEFORE spreading step keys overwrites them\n        // (step.config = step circular ref means the loop below will set instance.config = step,\n        // wiping ngOnInit-built values like config.prompt for ai-agent steps)\n        const preUpdatePrompt = (instance as any).config?.prompt;\n\n        // Update all properties\n        Object.keys(this.step).forEach(key => {\n          if (key !== 'type') {\n            // Use setInput for input properties to trigger ngOnChanges\n            if (key === 'expanded' && componentRef) {\n              const previousValue = (instance as any)[key];\n              const newValue = (this.step as any)[key];\n              if (typeof (componentRef as any).setInput === 'function') {\n                (componentRef as any).setInput('expanded', newValue);\n              } else {\n                // Fallback: manually trigger ngOnChanges\n                (instance as any)[key] = newValue;\n                if (typeof (instance as any).ngOnChanges === 'function') {\n                  const changes: SimpleChanges = {\n                    expanded: new SimpleChange(previousValue, newValue, previousValue === undefined)\n                  };\n                  (instance as any).ngOnChanges(changes);\n                }\n              }\n            } else {\n              (instance as any)[key] = (this.step as any)[key];\n            }\n          }\n        });\n        // Always keep the `step` input in sync so flags like isStepGroupChildren propagate.\n        (instance as any).step = this.step;\n        if ((instance as any).config) {\n          // Merge step updates into config. Use preUpdatePrompt (captured before the\n          // Object.keys loop above set instance.config = step via the circular ref)\n          // so ngOnInit-computed values survive the spread.\n          (instance as any).config = { ...(instance as any).config, ...this.step };\n          if (!(instance as any).config.prompt && preUpdatePrompt) {\n            (instance as any).config.prompt = preUpdatePrompt;\n          }\n          // AI agent: restore prompt when spread clobbered it (see syncAiAgentPromptInConfig)\n          this.syncAiAgentPromptInConfig(instance, this.step);\n        }\n        // Sync file-download (generateDocument) props from generateDocumentResult\n        const effectiveTypeForUpdate = this.getEffectiveStepType(this.step) || (this.step as any).displayType;\n        if (effectiveTypeForUpdate === 'file-download') {\n          const gd = (this.step as any).executedResult?.generateDocumentResult;\n          (instance as any).fileName = gd?.fileName ?? (instance as any).fileName ?? '';\n          (instance as any).fileType = gd?.fileType ?? (instance as any).fileType ?? '';\n          (instance as any).filePath = gd?.s3FileName ?? (instance as any).filePath;\n          const tid = (this.step as any).testStepResultId;\n          (instance as any).isDownloading = !!tid && this.downloadingStepId === tid;\n          if ((instance as any).config) {\n            (instance as any).config.fileName = (instance as any).fileName;\n            (instance as any).config.fileType = (instance as any).fileType;\n            (instance as any).config.filePath = (instance as any).filePath;\n          }\n        }\n        // Update selfHealAnalysis using handler if available\n        if (this.getSelfHealAnalysisHandler && this.step) {\n          const selfHealAnalysis = this.getSelfHealAnalysisHandler(this.step);\n          (instance as any).selfHealAnalysis = selfHealAnalysis;\n          if ((instance as any).config) {\n            (instance as any).config.selfHealAnalysis = selfHealAnalysis;\n          }\n        }\n        // Ensure event subscriptions are still active for selfHealAction\n        if ((instance as any).selfHealAction && this.onSelfHealActionHandler) {\n          // Track subscriptions to avoid duplicates\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('selfHealAction')) {\n            (instance as any).selfHealAction.subscribe((event: any) => {\n              this.onSelfHealActionHandler?.(event);\n            });\n            subscribedEvents.add('selfHealAction');\n          }\n        }\n        // Update handler references\n        if (this.onSelfHealActionHandler) (instance as any).onSelfHealActionHandler = this.onSelfHealActionHandler;\n        if (this.getSelfHealLoadingStatesHandler) (instance as any).getSelfHealLoadingStatesHandler = this.getSelfHealLoadingStatesHandler;\n        // Sync isDebug, parentSkipped and debugPointSet so nested steps (e.g. inside loop) always show debug icon when parent has isDebug true\n        if (this.isDebug !== undefined && (instance as any).isDebug !== this.isDebug) {\n          (instance as any).isDebug = this.isDebug;\n        }\n        if (this.canEditSteps !== undefined && (instance as any).canEditSteps !== this.canEditSteps) {\n          (instance as any).canEditSteps = this.canEditSteps;\n        }\n        (instance as any).parentSkipped = !!this.parentSkipped;\n        (instance as any).debugPointSet = this.getEffectiveDebugPointSet();\n        if (this.addStepMenuOptions !== undefined) (instance as any).addStepMenuOptions = this.addStepMenuOptions;\n        if (this.stepMoreMenuOptions !== undefined) (instance as any).stepMoreMenuOptions = this.stepMoreMenuOptions;\n        if (this.getAddStepMenuOptionsForNested !== undefined) (instance as any).getAddStepMenuOptionsForNested = this.getAddStepMenuOptionsForNested;\n        if (this.getStepMoreMenuOptionsForNested !== undefined) (instance as any).getStepMoreMenuOptionsForNested = this.getStepMoreMenuOptionsForNested;\n        if (this.onAddElseIfBranchAtHandler !== undefined) (instance as any).onAddElseIfBranchAtHandler = this.onAddElseIfBranchAtHandler;\n        if (this.onAddElseBranchHandler !== undefined) (instance as any).onAddElseBranchHandler = this.onAddElseBranchHandler;\n        if (this.onEditBranchConditionHandler !== undefined) (instance as any).onEditBranchConditionHandler = this.onEditBranchConditionHandler;\n        if (this.getDebugPointSetHandler) (instance as any).getDebugPointSetHandler = this.getDebugPointSetHandler;\n        if (this.onDebugPointChangeHandler) (instance as any).onDebugPointChangeHandler = this.onDebugPointChangeHandler;\n        // Ensure debug point click is wired when isDebug is true (e.g. after toggling in Storybook)\n        if (this.isDebug && (instance as any).debugPointChange && this.onDebugPointChangeHandler) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('debugPointChange')) {\n            (instance as any).debugPointChange.subscribe((value: boolean) => {\n              this.onDebugPointChangeHandler?.(this.step, value);\n            });\n            subscribedEvents.add('debugPointChange');\n          }\n        }\n        if (this.isDebug && (instance as any).editStep && this.onEditStepHandler) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('editStep')) {\n            (instance as any).editStep.subscribe(() => {\n              this.onEditStepHandler?.(this.step);\n            });\n            subscribedEvents.add('editStep');\n          }\n        }\n        if (this.isDebug && (instance as any).addStepOptionSelect) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('addStepOptionSelect')) {\n            (instance as any).addStepOptionSelect.subscribe((option: AddStepMenuOption) => {\n              this.onAddStepOptionSelectHandler?.(option, this.step);\n              this.addStepOptionSelect.emit({ option, step: this.step });\n            });\n            subscribedEvents.add('addStepOptionSelect');\n          }\n        }\n        if (this.isDebug && (instance as any).stepMoreOptionSelect) {\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('stepMoreOptionSelect')) {\n            (instance as any).stepMoreOptionSelect.subscribe((option: StepMoreMenuOption) => {\n              this.onStepMoreOptionSelectHandler?.(option, this.step);\n              this.stepMoreOptionSelect.emit({ option, step: this.step });\n            });\n            subscribedEvents.add('stepMoreOptionSelect');\n          }\n        }\n        // Update key for change detection\n        this.previousStepKey = this.getStepKey(this.step);\n        // Component already exists and is ready, emit immediately\n        setTimeout(() => {\n          this.componentReady.emit();\n        }, 0);\n        return;\n      }\n    }\n\n    const effectiveType = this.getEffectiveStepType(this.step) || (this.step as any).displayType;\n    const componentType = this.componentMap.get(effectiveType);\n\n    if (componentType) {\n      const componentRef = this.container.createComponent(componentType);\n      const instance = componentRef.instance;\n\n      // Store component instance and ref in WeakMap for future updates\n      StepRendererComponent.componentInstances.set(this.container, instance);\n      StepRendererComponent.componentRefs.set(this.container, componentRef);\n\n      // Store component reference for cleanup\n      (componentRef as any)._componentRef = componentRef;\n\n      // Spread config properties as individual inputs for components that use individual inputs\n      // This supports both patterns: components that accept config directly and those that use individual inputs\n      Object.keys(this.step).forEach(key => {\n        if (key !== 'type') {\n          (instance as any)[key] = (this.step as any)[key];\n        }\n      });\n      // Always set the `step` input to the full step reference so nested components\n      // (e.g. condition-debug-step) can access step-level flags like isStepGroupChildren.\n      (instance as any).step = this.step;\n\n      // Special handling for loop-step: map children to nestedSteps if nestedSteps is not present\n      if (this.isLoopStep(this.step) && (this.step as any).children && !(this.step as any).nestedSteps) {\n        (instance as any).nestedSteps = (this.step as any).children;\n      }\n\n      // Special handling for loop-step: set loopType based on actionName or testStepType\n      if (this.isLoopStep(this.step)) {\n        // Set loopType if not already set\n        if (!(instance as any).loopType) {\n          const actionName = (this.step as any).actionName;\n          const testStepType = (this.step as any).testStepType;\n          if (actionName === 'FOR_LOOP' || testStepType === 'FOR_LOOP') {\n            (instance as any).loopType = 'for';\n          } else if (actionName === 'WHILE_LOOP' || testStepType === 'WHILE_LOOP') {\n            (instance as any).loopType = 'while';\n          }\n        }\n        // Ensure title is set from action if title is not present or empty\n        if ((!(instance as any).title || !(instance as any).title.trim()) && (this.step as any).action) {\n          (instance as any).title = (this.step as any).action;\n        }\n      }\n\n      // Special handling for loop-step: initialize iterations if not present\n      if (this.isLoopStep(this.step) && !(instance as any).iterations) {\n        // Use handler if available, otherwise try to initialize from step.executedResult.stepResult\n        if (this.getLoopIterationsHandler) {\n          (instance as any).iterations = this.getLoopIterationsHandler(this.step);\n        } else if ((this.step as any).executedResult?.stepResult && Array.isArray((this.step as any).executedResult.stepResult)) {\n          // Initialize iterations directly from stepResult\n          const iterations: any[] = [];\n          (this.step as any).executedResult.stepResult.forEach((iteration: any) => {\n            const iterationIndex = iteration.index !== undefined && iteration.index !== null ? iteration.index : iterations.length;\n            let status: 'success' | 'failed' | 'pending' | 'running' = 'pending';\n            if (iteration.status) {\n              const statusLower = iteration.status.toLowerCase();\n              if (statusLower === 'success' || statusLower === 'passed') {\n                status = 'success';\n              } else if (statusLower === 'failure' || statusLower === 'failed') {\n                status = 'failed';\n              } else if (statusLower === 'running' || statusLower === 'in_progress') {\n                status = 'running';\n              }\n            }\n            iterations.push({\n              id: `iter-${iterationIndex}`,\n              label: `iter ${iterationIndex}`,\n              status: status,\n              subSteps: [],\n              index: iterationIndex\n            });\n          });\n          (instance as any).iterations = iterations;\n        }\n        // Fallback (debug only): ensure iterations is always an empty array (not undefined) so the\n        // Iteration dropdown renders even for newly added steps with no execution data.\n        if (this.isDebug && (instance as any).iterations == null) {\n          (instance as any).iterations = [];\n        }\n      }\n\n      // Special handling for loop-step: set defaultIteration and selectedIterationId\n      if (this.isLoopStep(this.step)) {\n        // Set defaultIteration to 'last' if not already set\n        if (!(instance as any).defaultIteration) {\n          (instance as any).defaultIteration = 'last';\n        }\n\n        // Set selectedIterationId - prioritize input value, then step value, then last iteration\n        if (this.selectedIterationId !== undefined) {\n          (instance as any).selectedIterationId = this.selectedIterationId;\n        } else if ((this.step as any).selectedIterationId !== undefined) {\n          (instance as any).selectedIterationId = (this.step as any).selectedIterationId;\n        } else {\n          // Set selectedIterationId to last iteration if not already set\n          const iterations = (instance as any).iterations;\n          if (iterations && Array.isArray(iterations) && iterations.length > 0 && !(instance as any).selectedIterationId) {\n            const lastIteration = iterations[iterations.length - 1];\n            (instance as any).selectedIterationId = lastIteration.id;\n          }\n        }\n      }\n\n      // Special handling for step-group: map children to steps (prefer children over empty steps array)\n      if (this.step.displayType === 'step-group' && (this.step as any).children?.length) {\n        (instance as any).steps = (this.step as any).children;\n        (instance as any).groupName = (this.step as any).action || '';\n      } else if (this.step.displayType === 'step-group' && !(this.step as any).steps?.length) {\n        // No children yet but ensure groupName is set\n        (instance as any).groupName = (this.step as any).action || '';\n      }\n\n      // Special handling for file-download (including generateDocument): set props from generateDocumentResult and wire handlers\n      if (effectiveType === 'file-download') {\n        const gd = (this.step as any).executedResult?.generateDocumentResult;\n        (instance as any).fileName = gd?.fileName ?? (instance as any).fileName ?? '';\n        (instance as any).fileType = gd?.fileType ?? (instance as any).fileType ?? '';\n        (instance as any).filePath = gd?.s3FileName ?? (instance as any).filePath;\n        (instance as any).downloaded = (instance as any).downloaded ?? false;\n        const tid = (this.step as any).testStepResultId;\n        (instance as any).isDownloading = !!tid && this.downloadingStepId === tid;\n        if (!(instance as any).title && (this.step as any).action) {\n          (instance as any).title = (this.step as any).action;\n        }\n        if ((instance as any).config) {\n          (instance as any).config.fileName = (instance as any).fileName;\n          (instance as any).config.fileType = (instance as any).fileType;\n          (instance as any).config.filePath = (instance as any).filePath;\n          (instance as any).config.downloaded = (instance as any).downloaded;\n          if ((instance as any).title) (instance as any).config.title = (instance as any).title;\n        }\n        if ((instance as any).download && this.onDownloadHandler) {\n          (instance as any).download.subscribe((ev: any) => this.onDownloadHandler!(ev));\n        }\n        if ((instance as any).filePathCopied && this.onFilePathCopiedHandler) {\n          (instance as any).filePathCopied.subscribe((ev: any) => this.onFilePathCopiedHandler!(ev));\n        }\n        if ((instance as any).textCopied && this.onTextCopiedHandler) {\n          (instance as any).textCopied.subscribe((ev: any) => this.onTextCopiedHandler!(ev));\n        }\n      }\n\n      // Special handling for condition-step: set branches and conditionText\n      if (this.step.displayType === 'condition' || (this.step as any).displayType === 'condition-debug') {\n        // Set branches - prioritize step.branches if available, otherwise use handler\n        if ((this.step as any).branches && Array.isArray((this.step as any).branches)) {\n          // Create deep copy to ensure proper change detection\n          (instance as any).branches = (this.step as any).branches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        } else if (!(instance as any).branches && this.getConditionBranchesHandler) {\n          const handlerBranches = this.getConditionBranchesHandler(this.step);\n          // Create deep copy to ensure proper change detection\n          (instance as any).branches = handlerBranches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        }\n        // Set conditionText from action if conditionText is not present\n        if (!(instance as any).conditionText && (this.step as any).action) {\n          (instance as any).conditionText = (this.step as any).action;\n        }\n        // Set isLoading using handler if available\n        if (this.isStepLoadingHandler) {\n          (instance as any).isLoading = this.isStepLoadingHandler(this.step);\n        }\n        // Pass activeBranchStepId if present\n        if ((this.step as any).activeBranchStepId !== undefined) {\n          (instance as any).activeBranchStepId = (this.step as any).activeBranchStepId;\n        }\n      }\n\n      // Special handling for ai-agent-step: ensure title and prompt are set from prompt/title/action\n      if (this.step.displayType === 'ai-agent') {\n        const stepPrompt = (this.step as any).prompt;\n        const stepTitle = (this.step as any).title;\n        const stepAction = (this.step as any).action;\n        const textFallback = stepPrompt || stepTitle || stepAction;\n        // Set title from prompt/title/action if title is not present or empty\n        if ((!(instance as any).title || !(instance as any).title.trim()) && textFallback) {\n          (instance as any).title = textFallback;\n        }\n        // Set prompt from prompt/title/action if prompt is not present or empty\n        if ((!(instance as any).prompt || !(instance as any).prompt.trim()) && textFallback) {\n          (instance as any).prompt = textFallback;\n        }\n        // Ensure actions array is set if not present\n        if (!(instance as any).actions && this.formatActionsHandler) {\n          (instance as any).actions = this.formatActionsHandler(this.step);\n        }\n        // Set actionCount if not present\n        if ((instance as any).actionCount === undefined) {\n          const actions = (instance as any).actions || [];\n          (instance as any).actionCount = actions.length;\n        }\n        // Set selectedTabInput if not present\n        if (!(instance as any).selectedTabInput) {\n          (instance as any).selectedTabInput = 'action-trace';\n        }\n      }\n\n      // Wire up common event emitters for api, ai-agent, loop, condition, and basic steps\n      if (this.step.displayType === 'api' || this.step.displayType === 'ai-agent' || this.isLoopStep(this.step) || this.step.displayType === 'condition' || (this.step as any).displayType === 'condition-debug' || this.step.displayType === 'basic') {\n        // Subscribe to common output events and call handlers\n        // EventEmitters are Subjects, so we can subscribe to them\n        if ((instance as any).makeCurrentBaseline && this.onMakeCurrentBaselineHandler) {\n          (instance as any).makeCurrentBaseline.subscribe((event: any) => {\n            this.onMakeCurrentBaselineHandler?.(event);\n          });\n        }\n        if ((instance as any).uploadBaseline && this.onUploadBaselineHandler) {\n          (instance as any).uploadBaseline.subscribe((event: any) => {\n            this.onUploadBaselineHandler?.(event);\n          });\n        }\n        if ((instance as any).analyze && this.onAnalyzeHandler) {\n          (instance as any).analyze.subscribe(() => {\n            this.onAnalyzeHandler?.();\n          });\n        }\n        if ((instance as any).viewFullLogs && this.onViewFullLogsHandler) {\n          (instance as any).viewFullLogs.subscribe(() => {\n            this.onViewFullLogsHandler?.();\n          });\n        }\n        if ((instance as any).selfHealAction && this.onSelfHealActionHandler) {\n          // Track subscriptions to avoid duplicates\n          let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n          if (!subscribedEvents) {\n            subscribedEvents = new Set<string>();\n            StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n          }\n          if (!subscribedEvents.has('selfHealAction')) {\n            (instance as any).selfHealAction.subscribe((event: any) => {\n              this.onSelfHealActionHandler?.(event);\n            });\n            subscribedEvents.add('selfHealAction');\n          }\n        }\n        // Note: onJsonPathCopiedHandler is set as input property (line 825), so we don't need to subscribe to jsonPathCopied event\n        // The API step component calls the handler directly, avoiding duplicate calls\n      }\n\n      // Special handling for loop-step: wire up onViewAllIterations event\n      if (this.isLoopStep(this.step)) {\n        if ((instance as any).onViewAllIterations && this.onViewAllIterationsHandler) {\n          (instance as any).onViewAllIterations.subscribe(() => {\n            this.onViewAllIterationsHandler?.(this.step);\n          });\n        }\n      }\n\n      // Wire up addStepInsideLoop so \"Add step inside loop\" bubbles to parent from any container\n      // (loop, condition, step-group) at any nesting level\n      if ((instance as any).addStepInsideLoop) {\n        let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n        if (!subscribedEvents) {\n          subscribedEvents = new Set<string>();\n          StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n        }\n        if (!subscribedEvents.has('addStepInsideLoop')) {\n          (instance as any).addStepInsideLoop.subscribe((loopStep: any) => {\n            this.addStepInsideLoop.emit(loopStep != null ? loopStep : this.step);\n          });\n          subscribedEvents.add('addStepInsideLoop');\n        }\n      }\n\n      // Wire up debug point toggle for any step that supports it (when isDebug is true)\n      if (this.isDebug && (instance as any).debugPointChange && this.onDebugPointChangeHandler) {\n        let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n        if (!subscribedEvents) {\n          subscribedEvents = new Set<string>();\n          StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n        }\n        if (!subscribedEvents.has('debugPointChange')) {\n          (instance as any).debugPointChange.subscribe((value: boolean) => {\n            this.onDebugPointChangeHandler?.(this.step, value);\n          });\n          subscribedEvents.add('debugPointChange');\n        }\n      }\n\n      // Wire up edit step: when user clicks Edit icon, notify parent with the step config\n      if (this.isDebug && (instance as any).editStep && this.onEditStepHandler) {\n        let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n        if (!subscribedEvents) {\n          subscribedEvents = new Set<string>();\n          StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n        }\n        if (!subscribedEvents.has('editStep')) {\n          (instance as any).editStep.subscribe(() => {\n            this.onEditStepHandler?.(this.step);\n          });\n          subscribedEvents.add('editStep');\n        }\n      }\n\n      // Wire up add-step option select: when user picks an option from the Plus menu, emit and optionally call handler\n      if (this.isDebug && (instance as any).addStepOptionSelect) {\n        let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n        if (!subscribedEvents) {\n          subscribedEvents = new Set<string>();\n          StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n        }\n        if (!subscribedEvents.has('addStepOptionSelect')) {\n          (instance as any).addStepOptionSelect.subscribe((option: AddStepMenuOption) => {\n            this.onAddStepOptionSelectHandler?.(option, this.step);\n            this.addStepOptionSelect.emit({ option, step: this.step });\n          });\n          subscribedEvents.add('addStepOptionSelect');\n        }\n      }\n\n      // Wire up step more option select: when user picks an option from the three-dot menu, emit and optionally call handler\n      if (this.isDebug && (instance as any).stepMoreOptionSelect) {\n        let subscribedEvents = StepRendererComponent.subscribedEventEmitters.get(instance);\n        if (!subscribedEvents) {\n          subscribedEvents = new Set<string>();\n          StepRendererComponent.subscribedEventEmitters.set(instance, subscribedEvents);\n        }\n        if (!subscribedEvents.has('stepMoreOptionSelect')) {\n          (instance as any).stepMoreOptionSelect.subscribe((option: StepMoreMenuOption) => {\n            this.onStepMoreOptionSelectHandler?.(option, this.step);\n            this.stepMoreOptionSelect.emit({ option, step: this.step });\n          });\n          subscribedEvents.add('stepMoreOptionSelect');\n        }\n      }\n\n      // Special handling for condition-step: wire up onExpand event\n      if (this.step.displayType === 'condition' || (this.step as any).displayType === 'condition-debug') {\n        if ((instance as any).onExpand && this.onExpandHandler) {\n          (instance as any).onExpand.subscribe(() => {\n            // Call onExpandHandler with the step config\n            this.onExpandHandler?.(this.step);\n          });\n        }\n        // Wire up onBranchClickEvent for nested condition steps\n        if ((instance as any).onBranchClickEvent && this.onConditionBranchClickHandler) {\n          (instance as any).onBranchClickEvent.subscribe((branch: any) => {\n            this.onConditionBranchClickHandler?.(this.step, branch);\n          });\n        }\n      }\n\n      // Ensure expanded property is passed correctly\n      // Use isStepExpandedHandler if available, otherwise use step.expanded or step.config.expanded\n      if (this.isStepExpandedHandler && this.step) {\n        const expandedState = this.isStepExpandedHandler(this.step);\n        (instance as any).expanded = expandedState;\n        if ((instance as any).config) {\n          (instance as any).config.expanded = expandedState;\n        }\n      } else if ((this.step as any).expanded !== undefined) {\n        (instance as any).expanded = (this.step as any).expanded;\n        if ((instance as any).config) {\n          (instance as any).config.expanded = (this.step as any).expanded;\n        }\n      }\n\n      // Pass handler functions to the component instance\n      if (this.onExpandHandler) (instance as any).onExpandHandler = this.onExpandHandler;\n      if (this.onEditStepHandler) (instance as any).onEditStepHandler = this.onEditStepHandler;\n      if (this.addStepMenuOptions !== undefined) (instance as any).addStepMenuOptions = this.addStepMenuOptions;\n      if (this.onAddStepOptionSelectHandler) (instance as any).onAddStepOptionSelectHandler = this.onAddStepOptionSelectHandler;\n      if (this.stepMoreMenuOptions !== undefined) (instance as any).stepMoreMenuOptions = this.stepMoreMenuOptions;\n      if (this.onStepMoreOptionSelectHandler) (instance as any).onStepMoreOptionSelectHandler = this.onStepMoreOptionSelectHandler;\n      if (this.getAddStepMenuOptionsForNested !== undefined) (instance as any).getAddStepMenuOptionsForNested = this.getAddStepMenuOptionsForNested;\n      if (this.getStepMoreMenuOptionsForNested !== undefined) (instance as any).getStepMoreMenuOptionsForNested = this.getStepMoreMenuOptionsForNested;\n      if (this.onAddElseIfBranchAtHandler !== undefined) (instance as any).onAddElseIfBranchAtHandler = this.onAddElseIfBranchAtHandler;\n      if (this.onAddElseBranchHandler !== undefined) (instance as any).onAddElseBranchHandler = this.onAddElseBranchHandler;\n      if (this.onEditBranchConditionHandler !== undefined) (instance as any).onEditBranchConditionHandler = this.onEditBranchConditionHandler;\n      if (this.getConditionBranchesHandler) (instance as any).getConditionBranchesHandler = this.getConditionBranchesHandler;\n      if (this.isStepLoadingHandler) (instance as any).isStepLoadingHandler = this.isStepLoadingHandler;\n      if (this.isStepExpandedHandler) (instance as any).isStepExpandedHandler = this.isStepExpandedHandler;\n      if (this.convertMsToSecondsHandler) (instance as any).convertMsToSecondsHandler = this.convertMsToSecondsHandler;\n      if (this.formatFailureDetailsHandler) (instance as any).formatFailureDetailsHandler = this.formatFailureDetailsHandler;\n      if (this.getSelfHealAnalysisHandler) (instance as any).getSelfHealAnalysisHandler = this.getSelfHealAnalysisHandler;\n      if (this.getLoopIterationsHandler) (instance as any).getLoopIterationsHandler = this.getLoopIterationsHandler;\n      if (this.getApiAssertionsHandler) (instance as any).getApiAssertionsHandler = this.getApiAssertionsHandler;\n      if (this.formatActionsHandler) (instance as any).formatActionsHandler = this.formatActionsHandler;\n      if (this.onViewAllIterationsHandler) (instance as any).onViewAllIterationsHandler = this.onViewAllIterationsHandler;\n      if (this.onMakeCurrentBaselineHandler) (instance as any).onMakeCurrentBaselineHandler = this.onMakeCurrentBaselineHandler;\n      if (this.onUploadBaselineHandler) (instance as any).onUploadBaselineHandler = this.onUploadBaselineHandler;\n      if (this.onAnalyzeHandler) (instance as any).onAnalyzeHandler = this.onAnalyzeHandler;\n      if (this.onViewFullLogsHandler) (instance as any).onViewFullLogsHandler = this.onViewFullLogsHandler;\n      if (this.onSelfHealActionHandler) (instance as any).onSelfHealActionHandler = this.onSelfHealActionHandler;\n      if (this.getSelfHealLoadingStatesHandler) (instance as any).getSelfHealLoadingStatesHandler = this.getSelfHealLoadingStatesHandler;\n      if (this.onConditionBranchClickHandler) (instance as any).onConditionBranchClickHandler = this.onConditionBranchClickHandler;\n      if (this.onStepClickHandler) (instance as any).onStepClickHandler = this.onStepClickHandler;\n      if (this.onJsonPathCopiedHandler) (instance as any).onJsonPathCopiedHandler = this.onJsonPathCopiedHandler;\n      if (this.onDownloadHandler) (instance as any).onDownloadHandler = this.onDownloadHandler;\n      if (this.onFilePathCopiedHandler) (instance as any).onFilePathCopiedHandler = this.onFilePathCopiedHandler;\n      if (this.onTextCopiedHandler) (instance as any).onTextCopiedHandler = this.onTextCopiedHandler;\n      if (this.jumpToTimestampHandler) (instance as any).jumpToTimestampHandler = this.jumpToTimestampHandler;\n      if (this.getDebugPointSetHandler) (instance as any).getDebugPointSetHandler = this.getDebugPointSetHandler;\n      if (this.onDebugPointChangeHandler) (instance as any).onDebugPointChangeHandler = this.onDebugPointChangeHandler;\n      if (this.isUploadingBaseline !== undefined) (instance as any).isUploadingBaseline = this.isUploadingBaseline;\n      if (this.isMakingCurrentBaseline !== undefined) (instance as any).isMakingCurrentBaseline = this.isMakingCurrentBaseline;\n      if (this.selectedIterationId !== undefined) (instance as any).selectedIterationId = this.selectedIterationId;\n      if (this.isLive !== undefined) (instance as any).isLive = this.isLive;\n      if (this.isDebug !== undefined) (instance as any).isDebug = this.isDebug;\n      if (this.canEditSteps !== undefined) (instance as any).canEditSteps = this.canEditSteps;\n      (instance as any).parentSkipped = !!this.parentSkipped;\n      (instance as any).debugPointSet = this.getEffectiveDebugPointSet();\n      // Pass stepNumber input if provided, otherwise use step's stepNumber\n      if (this.stepNumber !== undefined) {\n        (instance as any).stepNumber = this.stepNumber;\n        if ((instance as any).config) {\n          (instance as any).config.stepNumber = this.stepNumber;\n        }\n      }\n      // Pass the step object so toggleHeader can use it\n      if (this.step) (instance as any).step = this.step;\n\n      // Update condition-step specific properties for change detection\n      if (this.step.displayType === 'condition' || (this.step as any).displayType === 'condition-debug') {\n        // Update activeBranchStepId if it changed\n        if ((this.step as any).activeBranchStepId !== undefined) {\n          (instance as any).activeBranchStepId = (this.step as any).activeBranchStepId;\n        }\n\n        // Update branches if they changed\n        if ((this.step as any).branches !== undefined) {\n          (instance as any).branches = (this.step as any).branches;\n          if ((instance as any).config) {\n            (instance as any).config.branches = (this.step as any).branches;\n          }\n        }\n\n        // Update nestedSteps if they changed\n        if ((this.step as any).nestedSteps !== undefined) {\n          (instance as any).nestedSteps = (this.step as any).nestedSteps;\n          if ((instance as any).config) {\n            (instance as any).config.nestedSteps = (this.step as any).nestedSteps;\n          }\n        }\n      }\n\n\n      // Set selfHealAnalysis using handler if available\n      if (this.getSelfHealAnalysisHandler && this.step) {\n        const selfHealAnalysis = this.getSelfHealAnalysisHandler(this.step);\n        (instance as any).selfHealAnalysis = selfHealAnalysis;\n        if ((instance as any).config) {\n          (instance as any).config.selfHealAnalysis = selfHealAnalysis;\n        }\n      }\n\n      // Also set config for backward compatibility with components that still use config input\n      if ('config' in instance) {\n        if (effectiveType === 'file-download') {\n          (instance as any).config = {\n            ...this.step,\n            type: 'file-download',\n            fileName: (instance as any).fileName,\n            fileType: (instance as any).fileType,\n            filePath: (instance as any).filePath,\n            downloaded: (instance as any).downloaded\n          };\n        } else {\n          (instance as any).config = this.step;\n        }\n        // Ensure selfHealAnalysis is included in config\n        if ((instance as any).selfHealAnalysis !== undefined) {\n          (instance as any).config.selfHealAnalysis = (instance as any).selfHealAnalysis;\n        }\n      }\n\n      // Store key for change detection\n      this.previousStepKey = this.getStepKey(this.step);\n\n      // Trigger change detection on the component instance\n      if (componentRef.injector) {\n        const instanceCdr = componentRef.injector.get(ChangeDetectorRef, null);\n        if (instanceCdr) {\n          instanceCdr.markForCheck();\n        }\n      }\n      \n      // Mark component as initialized after the next CD cycle completes.\n      // By then, the child's ngOnInit will have run and config is built.\n      // After this, safeDetectChanges() will use detectChanges() for immediate updates.\n      setTimeout(() => {\n        StepRendererComponent.componentInitialized.set(this.container, true);\n        this.componentReady.emit();\n      }, 0);\n    }\n  }\n\n  ngDoCheck(): void {\n    // Use ngDoCheck to detect changes in nested properties that ngOnChanges might miss\n    const instance = StepRendererComponent.componentInstances.get(this.container);\n    const componentRef = StepRendererComponent.componentRefs.get(this.container);\n\n    if (instance && componentRef && this.step) {\n      // Sync isDebug and debugPointSet from step-renderer inputs so nested steps (e.g. inside loop/step-group)\n      // always reflect parent state when toggled (e.g. Storybook Controls)\n      const nextDebugPointSet = this.getEffectiveDebugPointSet();\n      if ((instance as any).debugPointSet !== nextDebugPointSet) {\n        (instance as any).debugPointSet = nextDebugPointSet;\n        if (componentRef.injector) {\n          const instanceCdr = componentRef.injector.get(ChangeDetectorRef, null);\n          if (instanceCdr) {\n            instanceCdr.markForCheck();\n          }\n        }\n      }\n      if (this.isDebug !== undefined && (instance as any).isDebug !== this.isDebug) {\n        (instance as any).isDebug = this.isDebug;\n        if (componentRef.injector) {\n          const instanceCdr = componentRef.injector.get(ChangeDetectorRef, null);\n          if (instanceCdr) {\n            instanceCdr.markForCheck();\n          }\n        }\n      }\n      if (this.canEditSteps !== undefined && (instance as any).canEditSteps !== this.canEditSteps) {\n        (instance as any).canEditSteps = this.canEditSteps;\n        if (componentRef.injector) {\n          const instanceCdr = componentRef.injector.get(ChangeDetectorRef, null);\n          if (instanceCdr) {\n            instanceCdr.markForCheck();\n          }\n        }\n      }\n\n      // Check if expanded state changed (using handler if available, as it may depend on parent state)\n      // This is important for nested step-groups where parent expansion affects child expansion\n      let currentExpanded: boolean | undefined;\n      if (this.isStepExpandedHandler) {\n        currentExpanded = this.isStepExpandedHandler(this.step);\n      } else {\n        currentExpanded = (this.step as any).expanded;\n      }\n      const instanceExpanded = (instance as any).expanded;\n\n      if (currentExpanded !== undefined && currentExpanded !== instanceExpanded) {\n        // Expanded state changed, update it using setInput to trigger ngOnChanges\n        const previousValue = instanceExpanded;\n        if (componentRef && typeof (componentRef as any).setInput === 'function') {\n          (componentRef as any).setInput('expanded', currentExpanded);\n        } else {\n          // Fallback: manually trigger ngOnChanges\n          (instance as any).expanded = currentExpanded;\n          if (typeof (instance as any).ngOnChanges === 'function') {\n            const changes: SimpleChanges = {\n              expanded: new SimpleChange(previousValue, currentExpanded, previousValue === undefined)\n            };\n            (instance as any).ngOnChanges(changes);\n          }\n        }\n        if ((instance as any).config) {\n          (instance as any).config.expanded = currentExpanded;\n        }\n        // Update the step object's expanded property to keep it in sync\n        (this.step as any).expanded = currentExpanded;\n        \n        // Trigger change detection\n        this.safeDetectChanges(componentRef);\n      }\n\n      // Check if iterations are now available and we need to update selectedIteration\n      if (this.isLoopStep(this.step) && this.selectedIterationId) {\n        const iterations = (instance as any).iterations || (instance as any).config?.iterations || [];\n        const selectedIterationId = (instance as any).selectedIterationId || this.selectedIterationId;\n        const currentSelectedIteration = (instance as any).selectedIteration;\n\n        // If iterations are available, selectedIterationId is set, but selectedIteration is not set or doesn't match\n        if (iterations.length > 0 && selectedIterationId) {\n          const shouldBeSelected = iterations.find((iter: any) => iter.id === selectedIterationId);\n          if (shouldBeSelected && currentSelectedIteration?.id !== selectedIterationId) {\n            this.updateLoopStepSelectedIteration(instance, selectedIterationId);\n            this.safeDetectChanges(componentRef);\n          }\n        }\n      }\n\n      const currentKey = this.getStepKey(this.step);\n\n      // If step properties changed (even if reference didn't), update the instance\n      if (currentKey !== this.previousStepKey) {\n        // We need the previous step to compare, so we'll update based on current state\n        // Create a minimal previous step from the instance's current state\n        const previousStep: any = {\n          id: (instance as any).id,\n          displayType: (instance as any).displayType,\n          status: (instance as any).status,\n          duration: (instance as any).duration,\n          expanded: (instance as any).expanded,\n          children: (instance as any).children,\n          nestedSteps: (instance as any).nestedSteps,\n          steps: (instance as any).steps,\n          executionData: (instance as any).executionData,\n          action: (instance as any).action,\n          title: (instance as any).title,\n          result: (instance as any).result,\n          method: (instance as any).method,\n          endpoint: (instance as any).endpoint,\n          statusCode: (instance as any).statusCode,\n          responseTime: (instance as any).responseTime,\n          actions: (instance as any).actions,\n          prompt: (instance as any).prompt,\n          optimizedRun: (instance as any).optimizedRun,\n          actionCount: (instance as any).actionCount,\n          iterations: (instance as any).iterations,\n          selectedIterationId: (instance as any).selectedIterationId,\n          branches: (instance as any).branches,\n          stepNumber: (instance as any).stepNumber,\n        };\n\n        this.updateComponentInstance(this.step, previousStep);\n        this.previousStepKey = currentKey;\n      }\n    }\n  }\n}","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { SelfHealAnalysisData, SelfHealAction, SelfHealActionEvent } from '../execution-step.models';\n\n@Component({\n  selector: 'cqa-self-heal-analysis',\n  templateUrl: './self-heal-analysis.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class SelfHealAnalysisComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() originalLocator!: string;\n  @Input() healedLocator!: string;\n  @Input() confidence!: number; // 0-100\n  @Input() healMethod!: string; // e.g., \"Semantic Attribute Matching\"\n  @Input() isLoadingAccept: boolean = false;\n  @Input() isLoadingModifyAccept: boolean = false;\n\n  @Output() action = new EventEmitter<SelfHealActionEvent>();\n\n  // Data property built from individual inputs\n  data!: SelfHealAnalysisData;\n\n  isEditMode: boolean = false;\n  private initialHealedLocator!: string;\n  // Set when Accept is clicked in edit mode; gates the ngOnChanges reset so that\n  // unrelated isLoadingModifyAccept changes (initial binding, parent pre-set) don't exit edit mode.\n  private awaitingModifyAcceptResponse: boolean = false;\n\n  get isAcceptLoading(): boolean {\n    return this.isLoadingAccept || (this.isEditMode && this.isLoadingModifyAccept);\n  }\n\n  ngOnInit(): void {\n    // Build data from individual inputs\n    this.data = {\n      originalLocator: this.originalLocator,\n      healedLocator: this.healedLocator,\n      confidence: this.confidence,\n      healMethod: this.healMethod,\n    };\n    this.initialHealedLocator = this.healedLocator;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const modifyChange = changes['isLoadingModifyAccept'];\n    if (\n      this.awaitingModifyAcceptResponse &&\n      modifyChange &&\n      modifyChange.previousValue === true &&\n      modifyChange.currentValue === false\n    ) {\n      this.awaitingModifyAcceptResponse = false;\n      this.initialHealedLocator = this.data.healedLocator;\n      this.isEditMode = false;\n    }\n  }\n\n  onAccept(): void {\n    const type: SelfHealAction = this.isEditMode ? 'modify-accept' : 'accept';\n    if (type === 'modify-accept') {\n      this.awaitingModifyAcceptResponse = true;\n    }\n    this.action.emit({ type, id: this.id, healedLocator: this.data.healedLocator, testStepId: this.id });\n  }\n\n  onReject(): void {\n    this.action.emit({ type: 'reject', id: this.id, healedLocator: this.data.healedLocator, testStepId: this.id });\n  }\n\n  onModifyAccept(): void {\n    this.isEditMode = true;\n  }\n\n  onCancelModify(): void {\n    this.data.healedLocator = this.initialHealedLocator;\n    this.isEditMode = false;\n  }\n}\n","<div class=\"cqa-bg-[#E7F8F2] cqa-border cqa-border-solid cqa-border-[#0B9D68] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-px-4 cqa-py-3 cqa-rounded-lg\">\n  <!-- Header -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-1.5\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n      <div><svg width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"17\" height=\"17\" rx=\"8.5\" fill=\"#AEE9D4\"/><path d=\"M8.50941 4C8.56489 4.02274 8.58859 4.07827 8.61131 4.12985C8.62269 4.1599 8.63314 4.19012 8.64329 4.22058C8.64726 4.23225 8.65123 4.24392 8.65532 4.25594C8.70806 4.413 8.75504 4.57175 8.80229 4.73038C8.81297 4.76619 8.82369 4.80199 8.83442 4.83778C8.88905 5.02004 8.94327 5.2024 8.99719 5.38484C9.00476 5.41047 9.01234 5.43609 9.01992 5.46171C9.04128 5.53395 9.06262 5.60619 9.08383 5.67847C9.12867 5.8312 9.17473 5.98347 9.22378 6.13501C9.22807 6.14827 9.23236 6.16152 9.23677 6.17518C9.3642 6.565 9.54482 6.91437 9.8409 7.21196C9.84823 7.2197 9.85556 7.22744 9.86312 7.23541C9.9895 7.36437 10.1517 7.46771 10.3138 7.55111C10.3221 7.55542 10.3303 7.55974 10.3388 7.56419C10.8159 7.80925 11.3895 7.91704 11.9062 8.0605C12.1326 8.1234 12.3583 8.18829 12.5832 8.25603C12.599 8.26079 12.6148 8.26554 12.6306 8.27028C12.6778 8.28445 12.725 8.29887 12.7721 8.31347C12.7831 8.31679 12.7941 8.32011 12.8054 8.32353C12.8703 8.34406 12.9324 8.36829 12.9857 8.41027C13.0019 8.44418 13.0019 8.44418 12.9975 8.4781C12.9456 8.52736 12.8942 8.55046 12.8258 8.573C12.816 8.57632 12.8062 8.57965 12.7961 8.58308C12.6806 8.62183 12.5635 8.65575 12.4463 8.68935C12.4222 8.6963 12.3981 8.70326 12.3741 8.71021C12.2257 8.75301 12.0771 8.7949 11.9283 8.83632C11.7323 8.89088 11.5366 8.94634 11.3411 9.00243C11.3091 9.01162 11.2771 9.02078 11.245 9.02991C11.0767 9.07786 10.9092 9.12753 10.7431 9.18208C10.7294 9.18659 10.7156 9.1911 10.7014 9.19574C10.1451 9.38082 9.7211 9.72609 9.45571 10.231C9.31263 10.5148 9.22823 10.8216 9.14214 11.1245C9.11884 11.2062 9.09409 11.2875 9.06905 11.3687C9.0494 11.4326 9.0302 11.4966 9.01149 11.5608C9.00926 11.5684 9.00703 11.5761 9.00473 11.5839C8.99394 11.6209 8.98319 11.6579 8.97252 11.695C8.94519 11.7888 8.91578 11.8819 8.88555 11.9749C8.83191 12.1402 8.7831 12.3067 8.73459 12.4735C8.66144 12.7246 8.66144 12.7246 8.61997 12.8453C8.61721 12.8534 8.61446 12.8615 8.61163 12.8698C8.59649 12.9128 8.58092 12.9523 8.55226 12.9887C8.50867 12.9979 8.50867 12.9979 8.46951 13C8.42473 12.9376 8.39508 12.8771 8.37133 12.8051C8.36787 12.7949 8.36441 12.7847 8.36085 12.7741C8.31684 12.6425 8.27751 12.5095 8.23817 12.3765C8.22916 12.346 8.22011 12.3156 8.21105 12.2852C8.1436 12.0586 8.07725 11.8317 8.01101 11.6048C7.73507 10.4822 7.73507 10.4822 7.039 9.57466C7.02784 9.56596 7.01669 9.55726 7.00519 9.5483C6.54913 9.19902 5.94834 9.06969 5.39815 8.91813C5.26207 8.88062 5.12605 8.84293 4.99003 8.80523C4.97814 8.80193 4.97814 8.80193 4.966 8.79857C4.76981 8.74417 4.57367 8.68963 4.37822 8.63283C4.36996 8.63045 4.36169 8.62806 4.35317 8.62561C4.0529 8.53883 4.0529 8.53883 4.00065 8.4781C3.99917 8.45054 3.99917 8.45054 4.01247 8.42157C4.06708 8.3704 4.12008 8.34848 4.19216 8.32619C4.2026 8.32284 4.21303 8.31948 4.22379 8.31603C4.25575 8.30582 4.28779 8.29584 4.31985 8.28592C4.329 8.28305 4.33815 8.28017 4.34758 8.27722C4.41228 8.25693 4.47722 8.2374 4.54226 8.21809C4.55824 8.21332 4.55824 8.21332 4.57454 8.20846C4.85227 8.12587 5.13181 8.049 5.41126 7.97196C5.6195 7.91455 5.82738 7.85618 6.0346 7.79548C6.04413 7.79271 6.05365 7.78993 6.06346 7.78707C6.5435 7.64696 7.01278 7.44816 7.32274 7.0537C7.32738 7.04785 7.33202 7.042 7.3368 7.03597C7.68197 6.59815 7.81658 6.06572 7.96695 5.54621C8.01643 5.37534 8.06649 5.20464 8.11673 5.03399C8.13064 4.98673 8.14453 4.93947 8.15836 4.89219C8.21394 4.70229 8.27035 4.51264 8.33 4.32386C8.33558 4.30619 8.34114 4.2885 8.34666 4.27081C8.43017 4.00399 8.43017 4.00399 8.50941 4Z\" fill=\"#0DBD7D\"/><path d=\"M11.236 4.55535C11.2902 4.61409 11.3011 4.68312 11.318 4.75813C11.3744 4.99376 11.4393 5.21042 11.6647 5.3473C11.8037 5.42083 11.9694 5.4543 12.1235 5.4859C12.1885 5.49951 12.2435 5.51758 12.2992 5.5537C12.3118 5.57278 12.3118 5.57278 12.3111 5.60598C12.2981 5.64637 12.2868 5.65939 12.2527 5.68582C12.2154 5.69775 12.2154 5.69775 12.1707 5.70702C12.1537 5.71074 12.1368 5.71449 12.1199 5.71828C12.1109 5.72029 12.1018 5.7223 12.0925 5.72437C11.817 5.78531 11.817 5.78531 11.5788 5.92322C11.5711 5.92918 11.5633 5.93514 11.5554 5.94128C11.3852 6.08479 11.3492 6.32351 11.2979 6.5235C11.295 6.53448 11.2921 6.54546 11.289 6.55678C11.2865 6.5665 11.284 6.57622 11.2813 6.58624C11.2703 6.61593 11.2588 6.63528 11.236 6.65803C11.1723 6.66576 11.1723 6.66576 11.1414 6.65803C11.0922 6.62155 11.0811 6.57999 11.0683 6.52414C11.0661 6.51549 11.064 6.50685 11.0618 6.49794C11.0549 6.47032 11.0482 6.44266 11.0416 6.41498C10.9898 6.19946 10.9313 5.988 10.7245 5.86167C10.5629 5.7755 10.3665 5.73475 10.1859 5.70185C10.1364 5.69199 10.108 5.6796 10.0774 5.6406C10.0707 5.60104 10.0707 5.60104 10.0774 5.56147C10.1245 5.51486 10.174 5.50348 10.2377 5.4894C10.2578 5.48465 10.2778 5.47987 10.2979 5.47505C10.3083 5.47258 10.3186 5.47011 10.3293 5.46756C10.3821 5.45456 10.4344 5.43998 10.4867 5.42511C10.4962 5.42247 10.5057 5.41984 10.5155 5.41712C10.6218 5.38673 10.7136 5.34786 10.7985 5.27885C10.8065 5.27261 10.8144 5.26638 10.8226 5.25995C10.9548 5.14614 10.9997 4.97516 11.0405 4.81562C11.0436 4.80351 11.0467 4.7914 11.0499 4.77892C11.0561 4.75459 11.0622 4.73023 11.0682 4.70585C11.0724 4.68888 11.0724 4.68888 11.0768 4.67157C11.0793 4.66144 11.0818 4.6513 11.0843 4.64086C11.0952 4.6086 11.1095 4.58326 11.1296 4.55535C11.1681 4.53692 11.1951 4.54525 11.236 4.55535Z\" fill=\"#075F3F\"/><path d=\"M5.79542 10.2472C5.80948 10.2473 5.80948 10.2473 5.82383 10.2474C5.92474 10.2503 5.99301 10.2813 6.06733 10.3461C6.15381 10.4355 6.19374 10.5362 6.19146 10.6566C6.18175 10.7542 6.12155 10.8395 6.0477 10.9055C5.96078 10.9725 5.8731 10.9947 5.76203 10.9916C5.66838 10.9812 5.58027 10.9386 5.51389 10.8746C5.43135 10.7669 5.40722 10.6682 5.41932 10.5355C5.4443 10.431 5.51634 10.3463 5.60847 10.2868C5.67248 10.2558 5.72396 10.2466 5.79542 10.2472Z\" fill=\"#0DBD7D\"/></svg></div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#075F3F]\">Self Heal Analysis</span>\n    </div>\n    <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#043F2A] cqa-bg-[#AEE9D4] cqa-text-[8px] cqa-leading-[12px]\" *ngIf=\"data?.confidence\">\n      Confidence : {{ data.confidence }}%\n    </span>\n  </div>\n\n  <!-- Locators Comparison -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-mb-1.5\">\n    <!-- Original Locator -->\n    <div>\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-1 cqa-mb-1 cqa-text-[8px] cqa-leading-[12px]\">\n        <div class=\"cqa-text-[#075F3F]\">Original Locator</div>\n        <div class=\"cqa-text-[#F87171]\">Failed</div>\n      </div>\n      <input \n        type=\"text\" \n        [(ngModel)]=\"data.originalLocator\" \n        readonly\n        class=\"cqa-w-full cqa-py-1 cqa-px-3 !cqa-border !cqa-border-solid !cqa-border-[#FEF3C7] cqa-rounded !cqa-bg-white cqa-text-[8px] cqa-leading-[12px] cqa-text-[#64748B]\"\n      />\n    </div>\n\n    <!-- Healed Locator -->\n    <div>\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-1 cqa-mb-1 cqa-text-[8px] cqa-leading-[12px]\">\n        <div class=\"cqa-text-[#075F3F]\">Current Locator</div>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-[2px] cqa-text-[#10B981]\">\n          <div><svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.00001 9.16671C7.3012 9.16671 9.16668 7.30123 9.16668 5.00004C9.16668 2.69885 7.3012 0.833374 5.00001 0.833374C2.69882 0.833374 0.833344 2.69885 0.833344 5.00004C0.833344 7.30123 2.69882 9.16671 5.00001 9.16671Z\" stroke=\"#10B981\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.75 4.99996L4.58333 5.83329L6.25 4.16663\" stroke=\"#10B981\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <span>Applied</span>\n        </div>\n      </div>\n      <input \n        type=\"text\" \n        [(ngModel)]=\"data.healedLocator\" \n        [readonly]=\"!isEditMode\"\n        [ngClass]=\"isEditMode ? '!cqa-bg-white cqa-text-[#047857] cqa-cursor-text' : '!cqa-bg-[#F3F4F6] cqa-text-[#64748B] cqa-cursor-not-allowed'\"\n        class=\"cqa-w-full cqa-py-1 cqa-px-3 !cqa-border !cqa-border-solid !cqa-border-[#A7F3D0] cqa-rounded cqa-text-[8px] cqa-leading-[12px]\"\n      />\n    </div>\n  </div>\n\n  <!-- Heal Method -->\n  <!-- <div class=\"cqa-mb-1.5 cqa-flex cqa-items-center cqa-gap-2\">\n    <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-text-[#0B9D68]\">Heal Method:</span>\n    <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#AEE9D4] cqa-text-[#075F3F] cqa-border cqa-border-solid cqa-border-[#0DBD7D]\">\n      {{ data.healMethod }}\n    </span>\n  </div> -->\n\n  <!-- Action Buttons -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-2 cqa-flex-wrap\">\n    <button \n      (click)=\"onAccept()\"\n      [disabled]=\"isLoadingAccept || isLoadingModifyAccept\"\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#097E53] cqa-border cqa-border-solid cqa-border-[#097E53]\">\n      <svg *ngIf=\"!isAcceptLoading\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.39748 7.93746L2.31248 5.85246L1.60248 6.55746L4.39748 9.35246L10.3975 3.35246L9.69248 2.64746L4.39748 7.93746Z\" fill=\"#097E53\"/></svg>\n      <svg *ngIf=\"isAcceptLoading\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" opacity=\"0.3\"/>\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" stroke-dashoffset=\"2\">\n          <animateTransform attributeName=\"transform\" type=\"rotate\" values=\"0 6 6;360 6 6\" dur=\"1s\" repeatCount=\"indefinite\"/>\n        </circle>\n      </svg>\n      <span>{{ isAcceptLoading ? 'Loading...' : 'Accept' }}</span>\n    </button>\n    <!-- <button \n      (click)=\"onReject()\"\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#9F2A2A] cqa-border cqa-border-solid cqa-border-[#9F2A2A]\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 3.205L8.795 2.5L6 5.295L3.205 2.5L2.5 3.205L5.295 6L2.5 8.795L3.205 9.5L6 6.705L8.795 9.5L9.5 8.795L6.705 6L9.5 3.205Z\" fill=\"#9F2A2A\"/></svg>\n      Reject\n    </button> -->\n    <button \n      *ngIf=\"!isEditMode\"\n      (click)=\"onModifyAccept()\"\n      [disabled]=\"isLoadingAccept || isLoadingModifyAccept\"\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#B18618] cqa-border cqa-border-solid cqa-border-[#B18618]\">\n      <svg *ngIf=\"!isLoadingModifyAccept\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.02939 4.51L7.48939 4.97L2.95939 9.5H2.49939V9.04L7.02939 4.51ZM8.82939 1.5C8.70439 1.5 8.57439 1.55 8.47939 1.645L7.56439 2.56L9.43939 4.435L10.3544 3.52C10.5494 3.325 10.5494 3.01 10.3544 2.815L9.18439 1.645C9.08439 1.545 8.95939 1.5 8.82939 1.5ZM7.02939 3.095L1.49939 8.625V10.5H3.37439L8.90439 4.97L7.02939 3.095Z\" fill=\"#B18618\"/></svg>\n      <svg *ngIf=\"isLoadingModifyAccept\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" opacity=\"0.3\"/>\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" stroke-dashoffset=\"2\">\n          <animateTransform attributeName=\"transform\" type=\"rotate\" values=\"0 6 6;360 6 6\" dur=\"1s\" repeatCount=\"indefinite\"/>\n        </circle>\n      </svg>\n      <span>{{ isLoadingModifyAccept ? 'Loading...' : 'Modify & Accept' }}</span>\n    </button>\n    <button\n      *ngIf=\"isEditMode\"\n      (click)=\"onCancelModify()\"\n      [disabled]=\"isLoadingAccept || isLoadingModifyAccept\"\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#9F2A2A] cqa-border cqa-border-solid cqa-border-[#9F2A2A]\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9.5 3.205L8.795 2.5L6 5.295L3.205 2.5L2.5 3.205L5.295 6L2.5 8.795L3.205 9.5L6 6.705L8.795 9.5L9.5 8.795L6.705 6L9.5 3.205Z\" fill=\"#9F2A2A\"/></svg>\n      <span>Cancel</span>\n    </button>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { SubStep, FailureDetails, TimingBreakdown } from '../execution-step.models';\n\n@Component({\n  selector: 'cqa-view-more-failed-step-button',\n  templateUrl: './view-more-failed-step-button.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class ViewMoreFailedStepButtonComponent {\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() subSteps!: SubStep[];\n  @Input() failureDetails!: FailureDetails;\n  @Input() isExpanded: boolean = false;\n  @Output() viewMoreClick = new EventEmitter<boolean>();\n\n  onViewMoreClick(): void {\n    this.isExpanded = !this.isExpanded;\n    this.viewMoreClick.emit(this.isExpanded);\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n  <div class=\"cqa-flex cqa-items-center cqa-justify-end\">\n    <div class=\"cqa-flex-1\"></div>\n    <button\n      (click)=\"onViewMoreClick()\"\n      class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#3F43EE] cqa-font-medium cqa-text-[12px] cqa-leading-[15px] cqa-bg-transparent cqa-border-none cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\">\n      <span>View More</span>\n      <span [class.cqa-rotate-90]=\"isExpanded\" class=\"material-symbols-outlined cqa-text-[10px]\">chevron_right</span>\n    </button>\n  </div>\n</div>\n\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport type ImageViewType = 'baseline' | 'current' | 'difference';\n\nexport interface VisualDifferenceModalData {\n  baselineUrl: string;\n  currentUrl: string;\n  differenceUrl: string;\n  title?: string;\n  subtitle?: string;\n  initialView?: ImageViewType;\n}\n\n@Component({\n  selector: 'cqa-visual-difference-modal',\n  templateUrl: './visual-difference-modal.component.html',\n  styleUrls: []\n})\nexport class VisualDifferenceModalComponent implements OnInit {\n  baselineUrl: string = '';\n  currentUrl: string = '';\n  differenceUrl: string = '';\n  title: string = 'Visual Difference';\n  subtitle: string = 'Comparing Baseline vs. Current Execution';\n  currentView: ImageViewType = 'baseline';\n  baselineImageError: boolean = false;\n  currentImageError: boolean = false;\n  differenceImageError: boolean = false;\n\n  constructor(\n    public dialogRef: MatDialogRef<VisualDifferenceModalComponent>,\n    @Inject(MAT_DIALOG_DATA) public data: VisualDifferenceModalData\n  ) {}\n\n  ngOnInit(): void {\n    this.baselineUrl = this.data.baselineUrl || '';\n    this.currentUrl = this.data.currentUrl || '';\n    this.differenceUrl = this.data.differenceUrl || '';\n    this.title = this.data.title || 'Visual Difference';\n    this.subtitle = this.data.subtitle || 'Comparing Baseline vs. Current Execution';\n    this.currentView = this.data.initialView || 'baseline';\n  }\n\n\n  get currentImageUrl(): string {\n    switch (this.currentView) {\n      case 'baseline':\n        return this.baselineUrl;\n      case 'current':\n        return this.currentUrl;\n      case 'difference':\n        return this.differenceUrl;\n      default:\n        return '';\n    }\n  }\n\n  onClose(): void {\n    this.dialogRef.close();\n  }\n\n  onImageError(event: Event): void {\n    const img = event.target as HTMLImageElement;\n    img.style.display = 'none';\n  }\n\n  onThumbnailError(type: 'baseline' | 'current' | 'difference', event: Event): void {\n    const img = event.target as HTMLImageElement;\n    img.style.display = 'none';\n    if (type === 'baseline') {\n      this.baselineImageError = true;\n    } else if (type === 'current') {\n      this.currentImageError = true;\n    } else if (type === 'difference') {\n      this.differenceImageError = true;\n    }\n  }\n\n  hasThumbnailImage(type: 'baseline' | 'current' | 'difference'): boolean {\n    if (type === 'baseline') {\n      return !!this.baselineUrl && !this.baselineImageError;\n    } else if (type === 'current') {\n      return !!this.currentUrl && !this.currentImageError;\n    } else if (type === 'difference') {\n      return !!this.differenceUrl && !this.differenceImageError;\n    }\n    return false;\n  }\n\n  setView(view: ImageViewType): void {\n    this.currentView = view;\n  }\n\n  navigatePrevious(): void {\n    const views: ImageViewType[] = ['baseline', 'current', 'difference'];\n    const currentIndex = views.indexOf(this.currentView);\n    const previousIndex = currentIndex > 0 ? currentIndex - 1 : views.length - 1;\n    this.currentView = views[previousIndex];\n  }\n\n  navigateNext(): void {\n    const views: ImageViewType[] = ['baseline', 'current', 'difference'];\n    const currentIndex = views.indexOf(this.currentView);\n    const nextIndex = currentIndex < views.length - 1 ? currentIndex + 1 : 0;\n    this.currentView = views[nextIndex];\n  }\n}\n\n","<div \n  class=\"cqa-ui-root cqa-bg-white cqa-rounded-lg cqa-shadow-xl cqa-flex cqa-flex-col cqa-h-[70vh] cqa-w-full cqa-overflow-hidden cqa-font-inter\"\n  (click)=\"$event.stopPropagation()\">\n    \n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-6 cqa-pt-6 cqa-pb-4 cqa-border-b cqa-border-gray-200 cqa-bg-[#FBFCFF] cqa-gap-4\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n        <h2 class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#0B0B0B] cqa-m-0\">\n          {{ title }}\n        </h2>\n        <p class=\"cqa-text-xs cqa-text-[#6D6D74] cqa-m-0\">{{ subtitle }}</p>\n      </div>\n      \n      <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n        <button\n          type=\"button\"\n          class=\"cqa-p-1.5 cqa-rounded-md cqa-text-gray-400 hover:cqa-text-gray-600 hover:cqa-bg-gray-100 cqa-transition-colors cqa-outline-none\"\n          (click)=\"onClose(); $event.stopPropagation()\"\n          aria-label=\"Close modal\">\n          <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </button>\n      </div>\n    </div>\n    \n    <div class=\"cqa-flex-1 cqa-overflow-auto cqa-relative\">\n      <button\n        type=\"button\"\n        class=\"cqa-absolute cqa-left-8 cqa-top-1/2 cqa-transform -cqa-translate-y-1/2 cqa-z-10 cqa-w-10 cqa-h-10 cqa-rounded-full cqa-bg-[#00000080] cqa-text-white hover:cqa-bg-gray-700 cqa-transition-colors cqa-flex cqa-items-center cqa-justify-center cqa-outline-none cqa-shadow-lg\"\n        (click)=\"navigatePrevious()\" style=\"transform: translate(-50%, -50%);\"\n        aria-label=\"Previous image\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M15 18L9 12L15 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </button>\n\n      <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-8 cqa-px-16 cqa-overflow-auto\">\n        <div *ngIf=\"currentImageUrl\" \n             class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-full\"\n             [style.transition]=\"'transform 0.2s ease-in-out'\">\n          <img\n            [src]=\"currentImageUrl\"\n            [alt]=\"currentView + ' image'\"\n            class=\"cqa-max-w-full cqa-max-h-full cqa-object-contain cqa-rounded-md cqa-shadow-lg cqa-bg-white\"\n            (error)=\"onImageError($event)\"\n          />\n        </div>\n        \n        <div *ngIf=\"!currentImageUrl\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-12 cqa-px-6\">\n          <svg width=\"80\" height=\"80\" viewBox=\"0 0 80 80\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"12\" y=\"12\" width=\"56\" height=\"56\" rx=\"4\" stroke=\"#9CA3AF\" stroke-width=\"2\"/>\n            <path d=\"M12 52L28 36L40 48L68 20\" stroke=\"#9CA3AF\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <circle cx=\"52\" cy=\"28\" r=\"6\" fill=\"#9CA3AF\"/>\n          </svg>\n          <p class=\"cqa-text-gray-500 cqa-text-sm cqa-font-medium cqa-mt-2\">No image available</p>\n        </div>\n      </div>\n\n      <button\n        type=\"button\"\n        class=\"cqa-absolute cqa-right-8 cqa-top-1/2 cqa-transform -cqa-translate-y-1/2 cqa-z-10 cqa-w-10 cqa-h-10 cqa-rounded-full cqa-bg-[#00000080] cqa-text-white hover:cqa-bg-gray-700 cqa-transition-colors cqa-flex cqa-items-center cqa-justify-center cqa-outline-none cqa-shadow-lg\"\n        (click)=\"navigateNext()\" style=\"transform: translate(50%, -50%);\"\n        aria-label=\"Next image\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M9 18L15 12L9 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </button>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-gap-2 cqa-p-4 cqa-bg-white\" style=\"border-top: 1px solid #D8D9FC;\">\n      <div class=\"cqa-h-[52px] cqa-w-[76px] cqa-rounded-[6px] cqa-relative cqa-overflow-hidden cqa-cursor-pointer\" style=\"border: 2px solid #374151;\" [ngStyle]=\"{'border-color': currentView === 'baseline' ? '#3F43EE' : '#374151', 'box-shadow': currentView === 'baseline' ? '0px 0px 0px 2px #3B82F64D' : 'none'}\" (click)=\"setView('baseline')\">\n        <img \n          *ngIf=\"hasThumbnailImage('baseline')\"\n          [src]=\"baselineUrl\" \n          alt=\"Baseline image\" \n          class=\"cqa-h-full cqa-w-full cqa-object-cover\"\n          (error)=\"onThumbnailError('baseline', $event)\">\n        <div \n          *ngIf=\"!hasThumbnailImage('baseline')\"\n          class=\"cqa-h-full cqa-w-full cqa-bg-gray-100 cqa-flex cqa-items-center cqa-justify-center\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-text-gray-400\">\n            <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <path d=\"M3 15L9 9L13 13L21 5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <div class=\"cqa-absolute cqa-bottom-0 cqa-left-0 cqa-w-full cqa-h-[19px] cqa-p-[2px] cqa-text-center cqa-bg-[#00000080] cqa-flex cqa-items-center cqa-justify-center\">\n          <span class=\"cqa-text-[10px] cqa-text-white cqa-font-medium cqa-capitalize\">Baseline</span>\n        </div>\n      </div>\n\n      <div class=\"cqa-h-[52px] cqa-w-[76px] cqa-rounded-[6px] cqa-relative cqa-overflow-hidden cqa-cursor-pointer\" style=\"border: 2px solid #374151;\" [ngStyle]=\"{'border-color': currentView === 'current' ? '#3F43EE' : '#374151', 'box-shadow': currentView === 'current' ? '0px 0px 0px 2px #3B82F64D' : 'none'}\" (click)=\"setView('current')\">\n        <img \n          *ngIf=\"hasThumbnailImage('current')\"\n          [src]=\"currentUrl\" \n          alt=\"Current image\" \n          class=\"cqa-h-full cqa-w-full cqa-object-cover\"\n          (error)=\"onThumbnailError('current', $event)\">\n        <div \n          *ngIf=\"!hasThumbnailImage('current')\"\n          class=\"cqa-h-full cqa-w-full cqa-bg-gray-100 cqa-flex cqa-items-center cqa-justify-center\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-text-gray-400\">\n            <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <path d=\"M3 15L9 9L13 13L21 5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <div class=\"cqa-absolute cqa-bottom-0 cqa-left-0 cqa-w-full cqa-h-[19px] cqa-p-[2px] cqa-text-center cqa-bg-[#00000080] cqa-flex cqa-items-center cqa-justify-center\">\n          <span class=\"cqa-text-[10px] cqa-text-white cqa-font-medium cqa-capitalize\">Current</span>\n        </div>\n      </div>\n\n      <div class=\"cqa-h-[52px] cqa-w-[76px] cqa-rounded-[6px] cqa-relative cqa-overflow-hidden cqa-cursor-pointer\" style=\"border: 2px solid #374151;\" [ngStyle]=\"{'border-color': currentView === 'difference' ? '#3F43EE' : '#374151', 'box-shadow': currentView === 'difference' ? '0px 0px 0px 2px #3B82F64D' : 'none'}\" (click)=\"setView('difference')\">\n        <img \n          *ngIf=\"hasThumbnailImage('difference')\"\n          [src]=\"differenceUrl\" \n          alt=\"Difference image\" \n          class=\"cqa-h-full cqa-w-full cqa-object-cover\"\n          (error)=\"onThumbnailError('difference', $event)\">\n        <div \n          *ngIf=\"!hasThumbnailImage('difference')\"\n          class=\"cqa-h-full cqa-w-full cqa-bg-gray-100 cqa-flex cqa-items-center cqa-justify-center\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-text-gray-400\">\n            <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\"/>\n            <path d=\"M3 15L9 9L13 13L21 5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <div class=\"cqa-absolute cqa-bottom-0 cqa-left-0 cqa-w-full cqa-h-[19px] cqa-p-[2px] cqa-text-center cqa-bg-[#00000080] cqa-flex cqa-items-center cqa-justify-center\">\n          <span class=\"cqa-text-[10px] cqa-text-white cqa-font-medium cqa-capitalize\">Difference</span>\n        </div>\n      </div>\n    </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef, OnChanges, SimpleChanges, ChangeDetectorRef, AfterViewInit } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ScreenshotData, LogEntry, FailureDetails } from '../execution-step.models';\nimport { ImageViewType, VisualDifferenceModalComponent, VisualDifferenceModalData } from '../../visual-difference-modal/visual-difference-modal.component';\n\nexport interface makeCurrentBaselineEvent {\n  testStepResultId: string;\n  currentUrl: string;\n  failureDetails?: FailureDetails;\n}\n\nexport interface uploadBaselineEvent {\n  file: File;\n  testStepResultId: string;\n  failureDetails?: FailureDetails;\n}\n\n@Component({\n  selector: 'cqa-visual-comparison',\n  templateUrl: './visual-comparison.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class VisualComparisonComponent implements OnChanges, AfterViewInit {\n  @Input() screenshots?: ScreenshotData;\n  @Input() logs?: LogEntry[];\n  @Input() showFullLogsLink?: boolean = true;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive = false;\n  @Input() testStepResultId!: string;\n  \n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  \n  @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n  @ViewChild('baselineImage') baselineImage!: ElementRef<HTMLImageElement>;\n  \n  baselineImageUrl?: string;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private dialog: MatDialog\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.updateBaselineUrl();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['screenshots']) {\n      const previousBaseline = changes['screenshots'].previousValue?.baseline;\n      const currentBaseline = changes['screenshots'].currentValue?.baseline;\n      \n      if (!changes['screenshots'].isFirstChange() && previousBaseline !== currentBaseline) {\n        this.updateBaselineUrl(true);\n      } else if (changes['screenshots'].isFirstChange()) {\n        this.updateBaselineUrl(false);\n      }\n    }\n  }\n\n  private updateBaselineUrl(forceReload: boolean = false): void {\n    if (this.screenshots?.baseline) {\n      const baselineUrl = this.screenshots.baseline;\n      \n      this.baselineImageUrl = baselineUrl;\n      \n      if (forceReload) {\n        setTimeout(() => {\n          if (this.baselineImage?.nativeElement) {\n            const img = this.baselineImage.nativeElement;\n            img.src = '';\n            requestAnimationFrame(() => {\n              img.src = baselineUrl;\n              this.cdr.detectChanges();\n            });\n          } else {\n            this.cdr.detectChanges();\n          }\n        }, 0);\n      } else {\n        this.cdr.markForCheck();\n      }\n    } else {\n      this.baselineImageUrl = undefined;\n      this.cdr.markForCheck();\n    }\n  }\n\n  get isCurrentImageAvailable(): boolean {\n    return !!this.screenshots?.current;\n  }\n\n  onMakeCurrentBaseline(): void {\n    if (this.screenshots?.current) {\n      console.log('Make current baseline clicked with URL:', this.screenshots.current);\n      this.makeCurrentBaseline.emit({\n        testStepResultId: this.testStepResultId,\n        currentUrl: this.screenshots.current\n      });\n    }\n  }\n\n  onUploadBaseline(): void {\n    console.log('Upload baseline clicked');\n    this.fileInput.nativeElement.click();\n  }\n\n  onFileSelected(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    if (input.files && input.files.length > 0) {\n      const file = input.files[0];\n      console.log('File selected:', file.name);\n      this.uploadBaseline.emit({\n        file: file,\n        testStepResultId: this.testStepResultId\n      });\n      // Reset file input\n      input.value = '';\n    }\n  }\n\n  onAnalyze(): void {\n    console.log('Analyze clicked');\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    console.log('View full logs clicked');\n    this.viewFullLogs.emit();\n  }\n\n  getLogClass(level: string): string {\n    switch (level) {\n      case 'warning':\n        return 'cqa-text-[#BB4D00] cqa-bg-[#FFFBEB]';\n      case 'error':\n        return 'cqa-text-[#E7000B] cqa-bg-[#FDE5E7]';\n      default:\n        return 'cqa-text-[#9CA3AF] cqa-bg-[#f8f8f8]';\n    }\n  }\n\n  trackByLogIndex(index: number): number {\n    return index;\n  }\n\n  onImageClick(type: string): void {\n    const dialogData: VisualDifferenceModalData = {\n      baselineUrl: this.screenshots?.baseline || '',\n      currentUrl: this.screenshots?.current || '',\n      differenceUrl: this.screenshots?.difference || '',\n      title: 'Visual Difference',\n      subtitle: 'Comparing Baseline vs. Current Execution',\n      initialView: type as ImageViewType\n    };\n\n    this.dialog.open(VisualDifferenceModalComponent, {\n      data: dialogData,\n      maxWidth: '1200px !important',\n      width: '90vw',\n      height: '70vh',\n      maxHeight: '90vh',\n      panelClass: ['visual-difference-dialog', 'cqa-ui-root'],\n      disableClose: false,\n      autoFocus: false\n    });\n  }\n}\n\n","<div class=\"cqa-grid cqa-grid-cols-12 cqa-gap-x-4 cqa-w-full cqa-max-h-[200px] cqa-h-full cqa-overflow-hidden\">\n  <!-- Left Panel: Screenshots & Visual Comparison -->\n  <div class=\"cqa-col-span-9 cqa-border cqa-border-solid cqa-border-[##E5E5E5] cqa-rounded-[10px] cqa-pt-2 cqa-px-3 cqa-pb-1 cqa-h-full cqa-max-h-[200px] cqa-overflow-auto cqa-font-inter\"\n    style=\"scrollbar-width: thin;\">\n    <div class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0A0A0A] cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.6667 2H3.33333C2.59695 2 2 2.59695 2 3.33333V12.6667C2 13.403 2.59695 14 3.33333 14H12.6667C13.403 14 14 13.403 14 12.6667V3.33333C14 2.59695 13.403 2 12.6667 2Z\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6.00033 7.33268C6.73671 7.33268 7.33366 6.73573 7.33366 5.99935C7.33366 5.26297 6.73671 4.66602 6.00033 4.66602C5.26395 4.66602 4.66699 5.26297 4.66699 5.99935C4.66699 6.73573 5.26395 7.33268 6.00033 7.33268Z\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M14 10.0004L11.9427 7.94312C11.6926 7.69315 11.3536 7.55273 11 7.55273C10.6464 7.55273 10.3074 7.69315 10.0573 7.94312L4 14.0004\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      Screenshots & Visual Comparison\n    </div>\n    \n    <!-- Screenshot Comparison Grid -->\n    <div class=\"cqa-grid cqa-grid-cols-3 cqa-gap-3 cqa-mb-2\">\n      <!-- Baseline -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373]\">Baseline</div>\n        <div class=\"cqa-bg-[#F5F5F5] cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-flex cqa-items-center cqa-justify-center cqa-h-[112px] cqa-cursor-pointer\" (click)=\"onImageClick('baseline')\">\n          <div *ngIf=\"!screenshots?.baseline\">\n            <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M25.3333 4H6.66667C5.19391 4 4 5.19391 4 6.66667V25.3333C4 26.8061 5.19391 28 6.66667 28H25.3333C26.8061 28 28 26.8061 28 25.3333V6.66667C28 5.19391 26.8061 4 25.3333 4Z\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11.9997 14.6673C13.4724 14.6673 14.6663 13.4734 14.6663 12.0007C14.6663 10.5279 13.4724 9.33398 11.9997 9.33398C10.5269 9.33398 9.33301 10.5279 9.33301 12.0007C9.33301 13.4734 10.5269 14.6673 11.9997 14.6673Z\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M28 20.0009L23.8853 15.8862C23.3853 15.3863 22.7071 15.1055 22 15.1055C21.2929 15.1055 20.6147 15.3863 20.1147 15.8862L8 28.0009\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <img #baselineImage *ngIf=\"baselineImageUrl\" [src]=\"baselineImageUrl\" alt=\"Baseline\" class=\"cqa-w-full cqa-h-full cqa-object-cover cqa-rounded-lg\" />\n        </div>\n      </div>\n\n      <!-- Current -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373]\">Current</div>\n        <div class=\"cqa-bg-[#FEF2F3] cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#F9C2C5] cqa-flex cqa-items-center cqa-justify-center cqa-h-[112px] cqa-cursor-pointer\" (click)=\"onImageClick('current')\">\n          <div *ngIf=\"!screenshots?.current\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-text-[#EF4444]\">\n            <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M25.3333 4H6.66667C5.19391 4 4 5.19391 4 6.66667V25.3333C4 26.8061 5.19391 28 6.66667 28H25.3333C26.8061 28 28 26.8061 28 25.3333V6.66667C28 5.19391 26.8061 4 25.3333 4Z\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11.9997 14.6673C13.4724 14.6673 14.6663 13.4734 14.6663 12.0007C14.6663 10.5279 13.4724 9.33398 11.9997 9.33398C10.5269 9.33398 9.33301 10.5279 9.33301 12.0007C9.33301 13.4734 10.5269 14.6673 11.9997 14.6673Z\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M28 20.0009L23.8853 15.8862C23.3853 15.3863 22.7071 15.1055 22 15.1055C21.2929 15.1055 20.6147 15.3863 20.1147 15.8862L8 28.0009\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <img *ngIf=\"screenshots?.current\" [src]=\"screenshots.current\" alt=\"Current\" class=\"cqa-w-full cqa-h-full cqa-object-cover cqa-rounded-lg\" />\n        </div>\n      </div>\n\n      <!-- Difference -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373]\">Difference</div>\n        <div class=\"cqa-bg-[#FEF2F3] cqa-rounded-[10px] cqa-border cqa-border-solid cqa-border-[#F9C2C5] cqa-flex cqa-items-center cqa-justify-center cqa-h-[112px] cqa-cursor-pointer\" (click)=\"onImageClick('difference')\">\n          <div *ngIf=\"!screenshots?.difference\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-text-[#EF4444]\">\n            <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M25.3333 4H6.66667C5.19391 4 4 5.19391 4 6.66667V25.3333C4 26.8061 5.19391 28 6.66667 28H25.3333C26.8061 28 28 26.8061 28 25.3333V6.66667C28 5.19391 26.8061 4 25.3333 4Z\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11.9997 14.6673C13.4724 14.6673 14.6663 13.4734 14.6663 12.0007C14.6663 10.5279 13.4724 9.33398 11.9997 9.33398C10.5269 9.33398 9.33301 10.5279 9.33301 12.0007C9.33301 13.4734 10.5269 14.6673 11.9997 14.6673Z\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M28 20.0009L23.8853 15.8862C23.3853 15.3863 22.7071 15.1055 22 15.1055C21.2929 15.1055 20.6147 15.3863 20.1147 15.8862L8 28.0009\" stroke=\"#E7000B\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <img *ngIf=\"screenshots?.difference\" [src]=\"screenshots.difference\" alt=\"Difference\" class=\"cqa-w-full cqa-h-full cqa-object-cover cqa-rounded-lg\" />\n        </div>\n      </div>\n    </div>\n\n    <!-- Action Buttons -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-2 cqa-flex-wrap\">\n      <button \n        (click)=\"onMakeCurrentBaseline()\"\n        [disabled]=\"!isCurrentImageAvailable || isMakingCurrentBaseline?.[testStepResultId] === true\"\n        [class.cqa-opacity-50]=\"!isCurrentImageAvailable || isMakingCurrentBaseline?.[testStepResultId] === true\"\n        [class.cqa-cursor-not-allowed]=\"!isCurrentImageAvailable || isMakingCurrentBaseline?.[testStepResultId] === true\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#212122] cqa-border cqa-border-solid cqa-border-[#212122] disabled:cqa-cursor-not-allowed\">\n        <svg *ngIf=\"!isMakingCurrentBaseline?.[testStepResultId]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.39754 7.93752L2.31254 5.85252L1.60254 6.55752L4.39754 9.35252L10.3975 3.35252L9.69254 2.64752L4.39754 7.93752Z\" fill=\"black\"/></svg>\n        <svg *ngIf=\"isMakingCurrentBaseline?.[testStepResultId] === true\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" opacity=\"0.3\"/>\n          <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" stroke-dashoffset=\"2\">\n            <animateTransform attributeName=\"transform\" type=\"rotate\" values=\"0 6 6;360 6 6\" dur=\"1s\" repeatCount=\"indefinite\"/>\n          </circle>\n        </svg>\n        <span>{{ isMakingCurrentBaseline?.[testStepResultId] === true ? 'Loading...' : 'Make current baseline' }}</span>\n      </button>\n      <button \n        (click)=\"onUploadBaseline()\"\n        [disabled]=\"isUploadingBaseline?.[testStepResultId] === true\"\n        [class.cqa-opacity-50]=\"isUploadingBaseline?.[testStepResultId] === true\"\n        [class.cqa-cursor-not-allowed]=\"isUploadingBaseline?.[testStepResultId] === true\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#212122] cqa-border cqa-border-solid cqa-border-[#212122] disabled:cqa-cursor-not-allowed\">\n        <svg *ngIf=\"!isUploadingBaseline?.[testStepResultId]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 7.5V9H3V7.5H2V9C2 9.55 2.45 10 3 10H9C9.55 10 10 9.55 10 9V7.5H9ZM3.5 4.5L4.205 5.205L5.5 3.915V8H6.5V3.915L7.795 5.205L8.5 4.5L6 2L3.5 4.5Z\" fill=\"black\"/></svg>\n        <svg *ngIf=\"isUploadingBaseline?.[testStepResultId] === true\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"animation: spin 1s linear infinite;\">\n          <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" opacity=\"0.3\"/>\n          <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-dasharray=\"8 4\" stroke-dashoffset=\"2\"/>\n        </svg>\n        <span>{{ isUploadingBaseline?.[testStepResultId] === true ? 'Uploading...' : 'Upload baseline' }}</span>\n      </button>\n      <!-- Hidden file input -->\n      <input \n        #fileInput\n        type=\"file\" \n        accept=\"image/png,image/jpeg,image/jpg,image/webp\"\n        (change)=\"onFileSelected($event)\"\n        style=\"display: none;\" \n      />\n      <!-- <button \n        (click)=\"onAnalyze()\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pl-2 cqa-pr-4 cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-text-[#212122] cqa-border cqa-border-solid cqa-border-[#212122]\">\n        <svg width=\"11\" height=\"12\" viewBox=\"0 0 11 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.5115 0C5.57931 0.0303178 5.60828 0.104354 5.63604 0.173128C5.64996 0.2132 5.66273 0.253489 5.67513 0.2941C5.67998 0.309662 5.68484 0.325224 5.68984 0.341258C5.7543 0.550673 5.81172 0.762331 5.86946 0.97384C5.88251 1.02159 5.89563 1.06932 5.90874 1.11704C5.97551 1.36005 6.04177 1.6032 6.10767 1.84646C6.11693 1.88062 6.12619 1.91479 6.13545 1.94895C6.16156 2.04527 6.18764 2.14159 6.21357 2.23796C6.26837 2.44159 6.32467 2.64463 6.38463 2.84668C6.38986 2.86435 6.3951 2.88203 6.4005 2.90024C6.55624 3.42 6.77701 3.88583 7.13888 4.28262C7.14784 4.29294 7.1568 4.30325 7.16603 4.31388C7.3205 4.48583 7.51873 4.62361 7.71687 4.73481C7.72696 4.74057 7.73705 4.74632 7.74745 4.75225C8.33051 5.079 9.03162 5.22272 9.66313 5.414C9.93984 5.49787 10.2157 5.58438 10.4905 5.6747C10.5099 5.68105 10.5292 5.68738 10.5485 5.6937C10.6062 5.7126 10.6639 5.73182 10.7215 5.7513C10.7349 5.75572 10.7483 5.76015 10.7621 5.76471C10.8415 5.79208 10.9174 5.82439 10.9825 5.88036C11.0023 5.92558 11.0023 5.92558 10.9969 5.9708C10.9336 6.03648 10.8707 6.06728 10.7871 6.09733C10.7751 6.10176 10.7632 6.1062 10.7508 6.11077C10.6096 6.16244 10.4665 6.20766 10.3232 6.25247C10.2938 6.26174 10.2644 6.27101 10.235 6.28028C10.0537 6.33735 9.87199 6.3932 9.69014 6.44842C9.45061 6.52117 9.21143 6.59512 8.97249 6.66991C8.93334 6.68216 8.89418 6.69437 8.85501 6.70654C8.64931 6.77048 8.44462 6.83671 8.24162 6.90944C8.22478 6.91545 8.20794 6.92147 8.19059 6.92766C7.51069 7.17443 6.99245 7.63478 6.66809 8.30799C6.49321 8.68634 6.39006 9.09548 6.28483 9.49929C6.25637 9.60825 6.22611 9.7166 6.1955 9.82492C6.17149 9.91015 6.14803 9.99551 6.12515 10.0811C6.12243 10.0913 6.1197 10.1014 6.1169 10.1119C6.1037 10.1612 6.09056 10.2106 6.07752 10.2599C6.04413 10.3851 6.00817 10.5092 5.97123 10.6332C5.90567 10.8536 5.84601 11.0757 5.78672 11.298C5.69732 11.6328 5.69732 11.6328 5.64662 11.7937C5.64326 11.8045 5.6399 11.8153 5.63644 11.8264C5.61793 11.8837 5.5989 11.9364 5.56388 11.9849C5.5106 11.9972 5.5106 11.9972 5.46273 12C5.40801 11.9168 5.37177 11.8361 5.34273 11.7401C5.33851 11.7265 5.33428 11.7129 5.32993 11.6989C5.27614 11.5233 5.22807 11.3459 5.17999 11.1686C5.16898 11.1281 5.15791 11.0875 5.14685 11.047C5.0644 10.7448 4.98331 10.4423 4.90234 10.1397C4.56509 8.64299 4.56509 8.64299 3.71433 7.43288C3.7007 7.42128 3.68706 7.40968 3.67302 7.39773C3.1156 6.93203 2.3813 6.75959 1.70885 6.55751C1.54254 6.50749 1.37628 6.45724 1.21004 6.40697C1.1955 6.40258 1.1955 6.40258 1.18067 6.39809C0.940881 6.32556 0.701157 6.25283 0.462274 6.17711C0.452168 6.17393 0.442063 6.17075 0.431651 6.16747C0.0646543 6.05178 0.0646543 6.05178 0.000790211 5.9708C-0.00101599 5.93406 -0.00101599 5.93406 0.0152398 5.89543C0.0819909 5.8272 0.14676 5.79797 0.234862 5.76825C0.247618 5.76378 0.260375 5.75931 0.273518 5.75471C0.312587 5.7411 0.351741 5.72779 0.390929 5.71455C0.402112 5.71073 0.413295 5.7069 0.424817 5.70296C0.503904 5.6759 0.583275 5.64986 0.662762 5.62412C0.682294 5.61777 0.682294 5.61777 0.70222 5.61129C1.04166 5.50116 1.38332 5.39867 1.72487 5.29595C1.97939 5.21939 2.23347 5.14157 2.48674 5.06065C2.49838 5.05694 2.51001 5.05324 2.52201 5.04943C3.10872 4.86262 3.68229 4.59755 4.06112 4.0716C4.06679 4.0638 4.07247 4.05599 4.07831 4.04796C4.50019 3.4642 4.6647 2.7543 4.8485 2.06161C4.90896 1.83379 4.97015 1.60619 5.03155 1.37865C5.04856 1.31564 5.06553 1.25263 5.08244 1.18959C5.15037 0.936385 5.21932 0.683523 5.29222 0.431818C5.29904 0.408248 5.30583 0.384667 5.31259 0.361076C5.41466 0.00531681 5.41466 0.00531681 5.5115 0Z\" fill=\"#161617\"/><path d=\"M8.84391 0.740443C8.91024 0.818762 8.92349 0.910806 8.94415 1.01081C9.01305 1.32499 9.09241 1.61388 9.36787 1.79638C9.53782 1.89443 9.74037 1.93904 9.92867 1.98118C10.0082 1.99933 10.0753 2.02341 10.1435 2.07158C10.1588 2.09701 10.1588 2.09701 10.1579 2.14129C10.1421 2.19513 10.1282 2.2125 10.0866 2.24774C10.041 2.26364 10.041 2.26364 9.98633 2.27601C9.96564 2.28096 9.94496 2.28597 9.9243 2.29102C9.91322 2.2937 9.90215 2.29638 9.89075 2.29914C9.55401 2.38039 9.55401 2.38039 9.26295 2.56428C9.25348 2.57222 9.24402 2.58017 9.23427 2.58836C9.02625 2.7797 8.98226 3.098 8.91963 3.36464C8.91605 3.37928 8.91246 3.39393 8.90876 3.40901C8.90566 3.42198 8.90255 3.43494 8.89935 3.4483C8.88584 3.48788 8.87183 3.51369 8.84391 3.54402C8.76614 3.55432 8.76614 3.55432 8.72831 3.54402C8.66814 3.49537 8.65468 3.43996 8.63896 3.3655C8.63633 3.35397 8.63369 3.34244 8.63098 3.33056C8.62259 3.29374 8.61447 3.25686 8.60639 3.21995C8.54302 2.93259 8.47148 2.65064 8.21879 2.4822C8.02131 2.36732 7.78118 2.31298 7.56045 2.26911C7.49996 2.25597 7.4653 2.23944 7.42785 2.18745C7.41972 2.1347 7.41972 2.1347 7.42785 2.08194C7.48541 2.01979 7.54597 2.00462 7.62382 1.98585C7.64835 1.97952 7.67286 1.97314 7.69737 1.96671C7.71003 1.96342 7.72269 1.96012 7.73574 1.95673C7.80032 1.93939 7.86425 1.91995 7.92817 1.90012C7.93978 1.89661 7.95139 1.89309 7.96336 1.88947C8.09329 1.84895 8.20541 1.79712 8.30927 1.70512C8.31896 1.6968 8.32864 1.68848 8.33862 1.67992C8.50026 1.52817 8.55518 1.3002 8.60504 1.08748C8.60884 1.07133 8.61264 1.05518 8.61655 1.03854C8.62411 1.0061 8.63154 0.973622 8.63882 0.94111C8.64403 0.918489 8.64403 0.918489 8.64935 0.895412C8.65238 0.881899 8.65542 0.868385 8.65855 0.854462C8.67186 0.811441 8.68935 0.77766 8.71386 0.740443C8.76096 0.715878 8.79401 0.726983 8.84391 0.740443Z\" fill=\"#414146\"/><path d=\"M2.19446 8.32962C2.21166 8.32975 2.21166 8.32975 2.22919 8.32988C2.35253 8.3338 2.43597 8.37503 2.5268 8.46151C2.6325 8.58061 2.6813 8.71497 2.67852 8.87549C2.66666 9.00565 2.59307 9.11929 2.50282 9.20727C2.39658 9.29672 2.28941 9.32628 2.15366 9.32215C2.03919 9.30825 1.93151 9.25153 1.85038 9.16618C1.7495 9.02258 1.72 8.89087 1.73479 8.71398C1.76533 8.57472 1.85337 8.46167 1.96598 8.38238C2.04421 8.34101 2.10713 8.32886 2.19446 8.32962Z\" fill=\"#4C4C51\"/></svg>\n        Analyze\n      </button> -->\n    </div>\n  </div>\n\n  <!-- Right Panel: Logs -->\n  <div class=\"cqa-col-span-3 cqa-border cqa-border-solid cqa-border-[##E5E5E5] cqa-rounded-[10px] cqa-py-2 cqa-px-3 cqa-h-full cqa-max-h-[200px] cqa-overflow-auto\"\n    style=\"scrollbar-width: thin;\">\n    <div class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0A0A0A] cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.6666 12L14.6666 8L10.6666 4\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.33337 4L1.33337 8L5.33337 12\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      Logs\n    </div>\n    \n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-1 cqa-min-h-0 cqa-h-[calc(100%-24px)]\">\n      <div class=\"cqa-text-[11px] cqa-leading-[100%] cqa-text-[#737373] cqa-shrink-0\">Console</div>\n      \n      <div *ngIf=\"!logs || logs.length === 0\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF] cqa-bg-[#f8f8f8] cqa-text-center\">\n        No logs available\n      </div>\n      \n      <cdk-virtual-scroll-viewport\n        *ngIf=\"logs?.length\"\n        itemSize=\"28\"\n        minBufferPx=\"200\"\n        maxBufferPx=\"300\"\n        class=\"cqa-h-full cqa-w-full cqa-overflow-x-hidden\" style=\"scrollbar-width: thin;\">\n        <div *cdkVirtualFor=\"let log of logs; trackBy: trackByLogIndex\" \n          class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-break-words cqa-overflow-hidden\" \n          [ngClass]=\"getLogClass(log.level)\">\n          {{ log.message }}\n        </div>\n      </cdk-virtual-scroll-viewport>\n    </div>\n\n    <!-- <a \n      *ngIf=\"showFullLogsLink && logs?.length\"\n      (click)=\"onViewFullLogs()\"\n      class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#3F43EE] cqa-font-medium cqa-flex cqa-items-center cqa-justify-end cqa-gap-[2px] cqa-cursor-pointer hover:cqa-underline cqa-mt-4\">\n      View full logs Iterations\n      <div><svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03833 6.74335L2.62833 7.33335L5.96166 4.00002L2.62833 0.666687L2.03833 1.25669L4.78166 4.00002L2.03833 6.74335Z\" fill=\"#3F43EE\"/></svg></div>\n    </a> -->\n  </div>\n</div>\n\n<style>\n  @keyframes spin {\n    from { transform: rotate(0deg); }\n    to { transform: rotate(360deg); }\n  }\n</style>","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FailedStepConfig, SubStep, FailureDetails, StepStatus, TimingBreakdown } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-updated-failed-step',\n  templateUrl: './updated-failed-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class UpdatedFailedStepComponent extends BaseStepComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() testStepResultId!: string;\n  @Input() expanded?: boolean;\n  @Input() subSteps!: SubStep[];\n  @Input() failureDetails!: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive = false;\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: FailedStepConfig;\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.config = {\n      displayType: 'failed',\n      testStepResultId: this.testStepResultId,\n      subSteps: this.subSteps,\n      failureDetails: this.failureDetails,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      reasoning: this.reasoning,\n      confidence: this.confidence,\n    } as FailedStepConfig;\n\n    super.ngOnInit();\n    \n    // Ensure isExpanded reflects the expanded input\n    this.isExpanded = this.expanded ?? this.config.expanded ?? false;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (this.config && this.failureDetails && changes['failureDetails']) {\n      this.config.failureDetails = {\n        ...this.failureDetails,\n        screenshots: this.failureDetails.screenshots ? {\n          ...this.failureDetails.screenshots\n        } : undefined\n      };\n    }\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit({\n      ...event,\n      failureDetails: this.failureDetails\n    });\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit({\n      ...event,\n      failureDetails: this.failureDetails\n    });\n  }\n\n  onAnalyze(): void {\n    console.log('Analyze clicked');\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    console.log('View full logs clicked');\n    this.viewFullLogs.emit();\n  }\n}\n","<div>\n  <!-- Header -->\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-p-2\" style=\"border-left: '2px solid #FAC7C7'; border-bottom: '1px solid #FEE2E2'\">\n    <!-- Sub-steps -->\n\n    <!-- Expected vs Actual Comparison -->\n    <div *ngIf=\"config?.failureDetails?.expected || config?.failureDetails?.actual\" class=\"cqa-grid cqa-grid-cols-2 cqa-rounded cqa-overflow-hidden cqa-border cqa-border-solid cqa-border-[#E5E7EB]\">\n      <!-- Expected Column -->\n      <div class=\"cqa-p-1.5 cqa-text-[9px] cqa-leading-[20px] cqa-bg-white\" style=\"border-right: 1px solid #E5E7EB;\">\n        <div class=\"cqa-text-[#9CA3AF]\">EXPECTED</div>\n        <div class=\"cqa-text-[#374151]\">\n          {{ config?.failureDetails?.expected }}\n        </div>\n      </div>\n\n      <!-- Actual Column -->\n      <div class=\"cqa-p-1.5 cqa-text-[9px] cqa-leading-[20px] cqa-bg-[#FEF8F8]\">\n        <div class=\"cqa-text-[#F87171]\">ACTUAL</div>\n        <div class=\"cqa-text-[#991B1B]\">\n          {{ config?.failureDetails?.actual }}\n        </div>\n      </div>\n    </div>\n\n    <!-- Visual Comparison Component -->\n    <cqa-visual-comparison\n      *ngIf=\"config.failureDetails && \n        ((config.failureDetails.screenshots?.current || config.failureDetails.screenshots?.baseline || config.failureDetails.screenshots?.difference)\n        || config.failureDetails.logs?.length)\"\n      [screenshots]=\"config.failureDetails.screenshots\"\n      [logs]=\"config.failureDetails.logs\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      [testStepResultId]=\"testStepResultId\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-visual-comparison>\n\n    <!-- AI Fix Message -->\n    <div *ngIf=\"config?.failureDetails?.aiFixApplied && (config?.failureDetails?.aiFixMessage || config?.confidence || config?.reasoning?.length)\" class=\"cqa-px-3 cqa-pt-1.5 cqa-pb-2 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-[#FAF5FF]\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0F172A] cqa-flex cqa-items-center cqa-gap-2 cqa-mb-3\">\n        <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"url(#paint0_linear_4070_7201)\"/><path d=\"M8.00941 3.5C8.06489 3.52274 8.08859 3.57827 8.11131 3.62985C8.12269 3.6599 8.13314 3.69012 8.14329 3.72058C8.14726 3.73225 8.15123 3.74392 8.15532 3.75594C8.20806 3.913 8.25504 4.07175 8.30229 4.23038C8.31297 4.26619 8.32369 4.30199 8.33442 4.33778C8.38905 4.52004 8.44327 4.7024 8.49719 4.88484C8.50476 4.91047 8.51234 4.93609 8.51992 4.96171C8.54128 5.03395 8.56262 5.10619 8.58383 5.17847C8.62867 5.3312 8.67473 5.48347 8.72378 5.63501C8.72807 5.64827 8.73236 5.66152 8.73677 5.67518C8.8642 6.065 9.04482 6.41437 9.3409 6.71196C9.34823 6.7197 9.35556 6.72744 9.36312 6.73541C9.4895 6.86437 9.65169 6.96771 9.8138 7.05111C9.82206 7.05542 9.83031 7.05974 9.83882 7.06419C10.3159 7.30925 10.8895 7.41704 11.4062 7.5605C11.6326 7.6234 11.8583 7.68829 12.0832 7.75603C12.099 7.76079 12.1148 7.76554 12.1306 7.77028C12.1778 7.78445 12.225 7.79887 12.2721 7.81347C12.2831 7.81679 12.2941 7.82011 12.3054 7.82353C12.3703 7.84406 12.4324 7.86829 12.4857 7.91027C12.5019 7.94418 12.5019 7.94418 12.4975 7.9781C12.4456 8.02736 12.3942 8.05046 12.3258 8.073C12.316 8.07632 12.3062 8.07965 12.2961 8.08308C12.1806 8.12183 12.0635 8.15575 11.9463 8.18935C11.9222 8.1963 11.8981 8.20326 11.8741 8.21021C11.7257 8.25301 11.5771 8.2949 11.4283 8.33632C11.2323 8.39088 11.0366 8.44634 10.8411 8.50243C10.8091 8.51162 10.7771 8.52078 10.745 8.52991C10.5767 8.57786 10.4092 8.62753 10.2431 8.68208C10.2294 8.68659 10.2156 8.6911 10.2014 8.69574C9.64511 8.88082 9.2211 9.22609 8.95571 9.73099C8.81263 10.0148 8.72823 10.3216 8.64214 10.6245C8.61884 10.7062 8.59409 10.7875 8.56905 10.8687C8.5494 10.9326 8.5302 10.9966 8.51149 11.0608C8.50926 11.0684 8.50703 11.0761 8.50473 11.0839C8.49394 11.1209 8.48319 11.1579 8.47252 11.195C8.44519 11.2888 8.41578 11.3819 8.38555 11.4749C8.33191 11.6402 8.2831 11.8067 8.23459 11.9735C8.16144 12.2246 8.16144 12.2246 8.11997 12.3453C8.11721 12.3534 8.11446 12.3615 8.11163 12.3698C8.09649 12.4128 8.08092 12.4523 8.05226 12.4887C8.00867 12.4979 8.00867 12.4979 7.96951 12.5C7.92473 12.4376 7.89508 12.3771 7.87133 12.3051C7.86787 12.2949 7.86441 12.2847 7.86085 12.2741C7.81684 12.1425 7.77751 12.0095 7.73817 11.8765C7.72916 11.846 7.72011 11.8156 7.71106 11.7852C7.6436 11.5586 7.57725 11.3317 7.51101 11.1048C7.23507 9.98224 7.23507 9.98224 6.539 9.07466C6.52784 9.06596 6.51669 9.05726 6.50519 9.0483C6.04913 8.69902 5.44834 8.5697 4.89815 8.41813C4.76207 8.38062 4.62605 8.34293 4.49003 8.30523C4.47814 8.30193 4.47814 8.30193 4.466 8.29857C4.26981 8.24417 4.07367 8.18963 3.87822 8.13283C3.86996 8.13045 3.86169 8.12806 3.85317 8.12561C3.5529 8.03883 3.5529 8.03883 3.50065 7.9781C3.49917 7.95054 3.49917 7.95054 3.51247 7.92157C3.56708 7.8704 3.62008 7.84848 3.69216 7.82619C3.7026 7.82284 3.71303 7.81948 3.72379 7.81603C3.75575 7.80582 3.78779 7.79584 3.81985 7.78592C3.829 7.78305 3.83815 7.78017 3.84758 7.77722C3.91228 7.75693 3.97722 7.7374 4.04226 7.71809C4.05824 7.71332 4.05824 7.71332 4.07454 7.70846C4.35227 7.62587 4.63181 7.549 4.91126 7.47196C5.1195 7.41455 5.32738 7.35618 5.5346 7.29548C5.54413 7.29271 5.55365 7.28993 5.56346 7.28707C6.0435 7.14696 6.51278 6.94816 6.82274 6.5537C6.82738 6.54785 6.83202 6.542 6.8368 6.53597C7.18197 6.09815 7.31658 5.56572 7.46696 5.04621C7.51642 4.87535 7.56649 4.70464 7.61673 4.53399C7.63064 4.48673 7.64453 4.43947 7.65836 4.39219C7.71394 4.20229 7.77035 4.01264 7.83 3.82386C7.83558 3.80619 7.84114 3.7885 7.84666 3.77081C7.93017 3.50399 7.93017 3.50399 8.00941 3.5Z\" fill=\"white\"/><path d=\"M10.7358 4.05535C10.7901 4.11409 10.801 4.18312 10.8179 4.25813C10.8742 4.49376 10.9392 4.71042 11.1645 4.8473C11.3036 4.92083 11.4693 4.9543 11.6234 4.9859C11.6884 4.99951 11.7434 5.01758 11.7991 5.0537C11.8117 5.07278 11.8117 5.07278 11.8109 5.10598C11.798 5.14637 11.7867 5.15939 11.7526 5.18582C11.7153 5.19775 11.7153 5.19775 11.6706 5.20702C11.6536 5.21074 11.6367 5.21449 11.6198 5.21828C11.6107 5.22029 11.6017 5.2223 11.5924 5.22437C11.3168 5.28531 11.3168 5.28531 11.0787 5.42322C11.071 5.42918 11.0632 5.43514 11.0552 5.44128C10.885 5.58479 10.849 5.82351 10.7978 6.0235C10.7949 6.03448 10.7919 6.04546 10.7889 6.05678C10.7864 6.0665 10.7838 6.07622 10.7812 6.08624C10.7702 6.11593 10.7587 6.13528 10.7358 6.15803C10.6722 6.16576 10.6722 6.16576 10.6413 6.15803C10.592 6.12155 10.581 6.07999 10.5682 6.02414C10.566 6.01549 10.5639 6.00685 10.5616 5.99794C10.5548 5.97032 10.5481 5.94266 10.5415 5.91498C10.4897 5.69946 10.4311 5.488 10.2244 5.36167C10.0628 5.2755 9.86634 5.23475 9.68575 5.20185C9.63625 5.19199 9.60789 5.1796 9.57725 5.1406C9.5706 5.10104 9.5706 5.10104 9.57725 5.06147C9.62435 5.01486 9.6739 5.00348 9.73759 4.9894C9.75766 4.98465 9.77772 4.97987 9.79777 4.97505C9.80813 4.97258 9.81849 4.97011 9.82917 4.96756C9.882 4.95456 9.93431 4.93998 9.9866 4.92511C9.99611 4.92247 10.0056 4.91984 10.0154 4.91712C10.1217 4.88673 10.2134 4.84786 10.2984 4.77885C10.3063 4.77261 10.3143 4.76638 10.3224 4.75995C10.4547 4.64614 10.4996 4.47516 10.5404 4.31562C10.5435 4.30351 10.5466 4.2914 10.5498 4.27892C10.556 4.25459 10.5621 4.23023 10.5681 4.20585C10.5723 4.18888 10.5723 4.18888 10.5767 4.17157C10.5791 4.16144 10.5816 4.1513 10.5842 4.14086C10.5951 4.1086 10.6094 4.08326 10.6294 4.05535C10.668 4.03692 10.695 4.04525 10.7358 4.05535Z\" fill=\"#EDE9FE\"/><path d=\"M5.29554 9.74722C5.3096 9.74731 5.3096 9.74731 5.32395 9.74741C5.42486 9.75035 5.49314 9.78127 5.56745 9.84613C5.65393 9.93545 5.69386 10.0362 5.69159 10.1566C5.68188 10.2542 5.62167 10.3395 5.54782 10.4055C5.4609 10.4725 5.37322 10.4947 5.26215 10.4916C5.1685 10.4812 5.08039 10.4386 5.01402 10.3746C4.93147 10.2669 4.90734 10.1682 4.91944 10.0355C4.94443 9.93104 5.01646 9.84625 5.1086 9.78678C5.1726 9.75576 5.22408 9.74665 5.29554 9.74722Z\" fill=\"white\"/><defs><linearGradient id=\"paint0_linear_4070_7201\" x1=\"0\" y1=\"0\" x2=\"16\" y2=\"16\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#8B5CF6\"/><stop offset=\"1\" stop-color=\"#9333EA\"/></linearGradient></defs></svg></div>\n        {{ config.failureDetails.aiFixMessage || 'AI Insights' }}\n        <span *ngIf=\"config?.confidence\" class=\"cqa-inline-block cqa-py-[2px] cqa-px-[10px] cqa-text-center cqa-rounded-[5px] cqa-bg-[#EDE9FE] cqa-text-[8px] cqa-leading-[12px] cqa-text-[#6D28D9]\">{{ config?.confidence }} confidence</span>\n      </div>\n      <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\" *ngIf=\"config?.reasoning?.length\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#64748B]\">Reasoning</div>\n          <ul class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n            <li *ngFor=\"let point of config.reasoning\" class=\"cqa-flex cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#475569]\">\n              <div class=\"cqa-mt-1\"><svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"6\" height=\"6\" rx=\"3\" fill=\"#A78BFA\"/></svg></div>\n              {{ point }}</li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, EventEmitter, Input, OnInit, OnChanges, OnDestroy, DoCheck, SimpleChanges, Output } from '@angular/core';\nimport { BasicStepConfig, SelfHealAction, SubStep, StepStatus, TimingBreakdown, SelfHealAnalysisData, FailureDetails, ExecutionStepConfig, ConditionBranch, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-basic-step',\n  templateUrl: './basic-step.component.html',\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class BasicStepComponent extends BaseStepComponent implements OnInit, OnChanges, OnDestroy, DoCheck {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  @Input() duration!: number;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() subSteps!: SubStep[];\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() selfHealed?: boolean;\n  @Input() selfHealDuration?: number;\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() stepDeleted?: boolean;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive: boolean = false;\n  @Input() nestedSteps?: ExecutionStepConfig[];\n  @Input() hasChild?: boolean;\n  @Input() isLoading?: boolean;\n  // Handler function to pass down to nested child step groups for recursive expansion\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Edit on nested steps is forwarded with the step config. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n\n  // Handler functions for condition steps\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => ConditionBranch[];\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n\n  /** Options shown in the Add (plus) button dropdown. Load dynamically or use default. */\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  /** Options shown in the More options (three-dot) menu. Load dynamically or use default. */\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: BasicStepConfig;\n\n  // Track which steps are still loading to show skeleton\n  loadingSteps: Set<string> = new Set();\n\n  // Processed sub-steps for live mode WAIT_FOR_LOCATOR countdown grouping\n  processedSubSteps: any[] = [];\n  private lastProcessedIndex: number = 0;\n  private waitLocatorGroupEntry: any | null = null;\n  private countdownIntervalId: any = null;\n\n  // AI_AUTO_HEAL grouping: show loading until AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n  private aiAutoHealGroupEntry: any | null = null;\n\n  // Processed sub-steps for run result screen (filter and split AI_AUTO_HEAL_SUCCESS/FAILED)\n  processedSubStepsForRunResult: any[] = [];\n\n  /** Show debug icon when debug mode is on (shown on parent and all child steps). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  override ngOnInit(): void {\n\n    // Build config from individual inputs\n    // Use nestedSteps if provided, otherwise fall back to empty array\n    const stepsToUse = this.nestedSteps || [];\n\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'basic',\n      subSteps: this.subSteps || [],\n      stepDeleted: this.stepDeleted,\n      selfHealAnalysis: this.selfHealAnalysis,\n      selfHealed: this.selfHealed,\n      selfHealDuration: this.selfHealDuration,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      nestedSteps: stepsToUse,\n    } as BasicStepConfig;\n\n    super.ngOnInit();\n\n    // Initialize live sub-step processing for WAIT_FOR_LOCATOR grouping\n    if (this.isLive && this.subSteps && this.subSteps.length > 0) {\n      this.processLiveSubSteps();\n    } else if (!this.isLive && this.subSteps && this.subSteps.length > 0) {\n      // Process for run result screen: filter and split AI_AUTO_HEAL_SUCCESS/FAILED\n      this.processSubStepsForRunResult();\n    }\n\n    // Initialize loading state if already expanded\n    if (this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update config when status changes\n    if (changes['status'] && this.config) {\n      this.config.status = changes['status'].currentValue;\n    }\n\n    // Update config when duration changes\n    if (changes['duration'] && this.config) {\n      this.config.duration = changes['duration'].currentValue || 0;\n    }\n\n    if (changes['stepDeleted'] && this.config) {\n      this.config.stepDeleted = changes['stepDeleted'].currentValue;\n    }\n\n    if (changes['stepNumber'] && this.config) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n\n    // Update config when subSteps changes\n    if (changes['subSteps'] && this.config) {\n      this.config.subSteps = this.subSteps || [];\n      if (this.isLive) {\n        this.processLiveSubSteps();\n      } else {\n        this.processSubStepsForRunResult();\n      }\n    }\n\n    // Re-process when isLive changes\n    if (changes['isLive'] && this.subSteps && this.subSteps.length > 0) {\n      if (this.isLive) {\n        this.processLiveSubSteps();\n      } else {\n        this.processSubStepsForRunResult();\n      }\n    }\n\n    // Update config when nestedSteps changes\n    if (changes['nestedSteps'] && this.config) {\n      this.config.nestedSteps = this.nestedSteps || [];\n    }\n\n    // Update config when expanded changes\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded ?? false;\n      if (this.config) {\n        this.config.expanded = this.isExpanded;\n      }\n    }\n\n    // // Initialize loading state when nested steps are added and step is expanded\n    // if (changes['nestedSteps'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n    //   this.loadingSteps.clear();\n    //   this.nestedSteps.forEach(step => {\n    //     const stepId = step.testStepResultId || step.id;\n    //     if (stepId) {\n    //       this.loadingSteps.add(String(stepId));\n    //     }\n    //   });\n    // }\n\n    // Initialize loading state if already expanded when component initializes\n    if (changes['expanded'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  ngDoCheck(): void {\n    if (!this.isLive) return;\n    const currentLength = (this.subSteps || []).length;\n    if (currentLength !== this.lastProcessedIndex) {\n      this.processLiveSubSteps();\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.subSteps && this.subSteps.length > 0;\n  }\n\n\n  showFailedStepDetails: boolean = false;\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  override toggle(): void {\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n    // Emit event when expanding (transitioning from collapsed to expanded)\n    if (!wasExpanded && this.isExpanded) {\n      // If this step has children (hasChild is true) and onExpandHandler is provided, call it to fetch children\n      if (this.onExpandHandler && this.config && this.hasChild) {\n        const configWithNested = this.config as BasicStepConfig;\n        // Create a step config object for the handler with hasChild property\n        const stepConfig = {\n          ...this.config,\n          hasChild: true,\n          expanded: true, // Ensure expanded is set\n          testStepType: (this.config as any).testStepType || 'BASIC',\n          children: configWithNested.nestedSteps || [],\n          testStepResultId: this.testStepResultId,\n          id: this.id\n        } as ExecutionStepConfig;\n        this.onExpandHandler(stepConfig);\n      }\n      // Initialize loading state for all nested steps\n      if (this.config.nestedSteps && this.config.nestedSteps.length > 0) {\n        this.loadingSteps.clear();\n        this.config.nestedSteps.forEach(step => {\n          const stepId = step.testStepResultId || step.id;\n          if (stepId) {\n            this.loadingSteps.add(String(stepId));\n          }\n        });\n      }\n    } else if (!this.isExpanded) {\n      // Clear loading state when collapsing\n      this.loadingSteps.clear();\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n  }\n\n  // Check if a step is still loading\n  isNestedStepLoading(step: ExecutionStepConfig): boolean {\n    const stepId = step.testStepResultId || step.id;\n    return stepId ? this.loadingSteps.has(String(stepId)) : false;\n  }\n\n  // Mark a step as loaded (called when step-renderer is ready)\n  markStepLoaded(step: ExecutionStepConfig): void {\n    const stepId = step.testStepResultId || step.id;\n    if (stepId) {\n      this.loadingSteps.delete(String(stepId));\n    }\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event) {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if(!this.isExpanded){\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  // Check if this step is currently loading nested children\n  isStepLoading(): boolean {\n    if (this.isStepLoadingHandler && this.config) {\n      return this.isStepLoadingHandler(this.config);\n    }\n    return this.isLoading || false;\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearCountdownTimer();\n  }\n\n  private processLiveSubSteps(): void {\n    const allSubSteps = (this.subSteps || []) as any[];\n\n    // Reset if subSteps were cleared or replaced with fewer entries\n    if (allSubSteps.length < this.lastProcessedIndex) {\n      this.resetLiveProcessing();\n    }\n\n    for (let i = this.lastProcessedIndex; i < allSubSteps.length; i++) {\n      const subStep = allSubSteps[i];\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n      const status: string = (subStep?.status || '').toLowerCase();\n\n      if (uiType === 'WAIT_FOR_LOCATOR') {\n        // Create a single grouped entry with a countdown; absorbs FIND_LOCATOR and LOCATOR_FOUND\n        const timeoutSeconds = typeof subStep.value === 'number'\n          ? subStep.value\n          : (subStep.value ? parseFloat(subStep.value) : 30);\n\n        this.clearCountdownTimer();\n\n        this.waitLocatorGroupEntry = {\n          ...subStep,\n          remainingSeconds: timeoutSeconds,\n          status: 'running'\n        };\n        this.addDurationToWaitLocatorGroupEntry(subStep);\n        this.processedSubSteps.push(this.waitLocatorGroupEntry);\n\n        // Tick down every second\n        this.countdownIntervalId = setInterval(() => {\n          if (this.waitLocatorGroupEntry) {\n            this.waitLocatorGroupEntry.remainingSeconds = Math.max(0, this.waitLocatorGroupEntry.remainingSeconds - 1);\n            if (this.waitLocatorGroupEntry.remainingSeconds <= 0) {\n              this.waitLocatorGroupEntry.status = 'failed';\n              this.waitLocatorGroupEntry.remainingSeconds = null;\n              this.clearCountdownTimer();\n              this.waitLocatorGroupEntry = null;\n            }\n          }\n        }, 1000);\n\n      } else if (uiType === 'FIND_LOCATOR') {\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else if (this.waitLocatorGroupEntry) {\n          // Update the single group entry's text so the user sees progress\n          const newText = subStep.description || subStep.text || subStep.title;\n          if (newText) this.waitLocatorGroupEntry.description = newText;\n          this.addDurationToWaitLocatorGroupEntry(subStep);\n        } else {\n          // No active group – push FIND_LOCATOR normally once countdown is cleared\n          this.processedSubSteps.push({ ...subStep });\n        }\n\n      } else if (uiType === 'LOCATOR_FOUND') {\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else {\n          // Sequence complete – update group entry to show LOCATOR_FOUND text as success\n          if (this.waitLocatorGroupEntry) {\n            const newText = subStep.description || subStep.text || subStep.title;\n            if (newText) this.waitLocatorGroupEntry.description = newText;\n            this.waitLocatorGroupEntry.status = 'success';\n            this.addDurationToWaitLocatorGroupEntry(subStep);\n            this.waitLocatorGroupEntry.remainingSeconds = null;\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          } else {\n            // No active group – push LOCATOR_FOUND normally\n            this.processedSubSteps.push({ ...subStep });\n          }\n        }\n\n      } else if (uiType === 'AI_AUTO_HEAL') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before starting AI auto-heal\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Add single loading entry; will be replaced by AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n        this.aiAutoHealGroupEntry = {\n          ...subStep,\n          description: subStep.description || subStep.text || 'AI auto-heal started',\n          status: 'running',\n          uiType: 'AI_AUTO_HEAL'\n        };\n        this.processedSubSteps.push(this.aiAutoHealGroupEntry);\n\n      } else if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before handling AI auto-heal result\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Remove loading entry and add TWO separate entries: value and reasoning (like AI_ANSWER)\n        if (this.aiAutoHealGroupEntry) {\n          this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.aiAutoHealGroupEntry);\n          this.aiAutoHealGroupEntry = null;\n        }\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = subStep.text || subStep.description || (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubSteps.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedSubSteps.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n\n      } else {\n        // Any failed log while a countdown is active – resolve it as failed\n        if ((status === 'failed' || status === 'failure') && this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n        this.processedSubSteps.push(subStep);\n      }\n    }\n\n    this.lastProcessedIndex = allSubSteps.length;\n  }\n\n  private resetLiveProcessing(): void {\n    this.clearCountdownTimer();\n    this.processedSubSteps = [];\n    this.lastProcessedIndex = 0;\n    this.waitLocatorGroupEntry = null;\n    this.aiAutoHealGroupEntry = null;\n  }\n\n  private clearCountdownTimer(): void {\n    if (this.countdownIntervalId !== null) {\n      clearInterval(this.countdownIntervalId);\n      this.countdownIntervalId = null;\n    }\n  }\n\n  private addDurationToWaitLocatorGroupEntry(subStep: any): void {\n    if (!this.waitLocatorGroupEntry) {\n      return;\n    }\n\n    const rawDuration = subStep?.duration;\n    let delta = 0;\n    if (typeof rawDuration === 'number') {\n      delta = rawDuration;\n    } else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {\n      const parsed = parseFloat(rawDuration);\n      delta = Number.isFinite(parsed) ? parsed : 0;\n    }\n\n    if (delta <= 0) {\n      return;\n    }\n\n    const currentRaw = this.waitLocatorGroupEntry.duration;\n    let current = 0;\n    if (typeof currentRaw === 'number') {\n      current = currentRaw;\n    } else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {\n      const parsedCurrent = parseFloat(currentRaw);\n      current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;\n    }\n\n    this.waitLocatorGroupEntry.duration = current + delta;\n  }\n\n  private processSubStepsForRunResult(): void {\n    const allSubSteps = (this.subSteps || []) as any[];\n    this.processedSubStepsForRunResult = [];\n\n    for (const subStep of allSubSteps) {\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n      // Split AI_AUTO_HEAL_SUCCESS/FAILED into two entries\n      if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubStepsForRunResult.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n      } else {\n        const status = (subStep?.status ?? '').toString().toLowerCase();\n        const isFailed = status === 'failed' || status === 'failure';\n        const isLocatorStep = uiType === 'WAIT_FOR_LOCATOR' || uiType === 'FIND_LOCATOR' || uiType === 'LOCATOR_FOUND';\n        if (isLocatorStep && isFailed) {\n          const baseDesc = subStep?.description ?? subStep?.text ?? subStep?.title ?? '';\n          const notFoundSuffix = ' - Element not found';\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: (baseDesc ? baseDesc + notFoundSuffix : notFoundSuffix.trim())\n          });\n        } else {\n          this.processedSubStepsForRunResult.push(subStep);\n        }\n      }\n    }\n  }\n\n  // =====================================================\n  // Download-by-click (normal step with actionName === 'downloadByClick')\n  // Mirrors the file-download UI shown for the generateDocument step.\n  // Rendered above the sub-step logs when the step has a fileUploadResponse payload.\n  // =====================================================\n\n  /** True when this normal step is a \"Download file by click on <label>\" action with a file result. */\n  get isDownloadByClickStep(): boolean {\n    const actionName = String(this?.step?.actionName || '').toLowerCase();\n    if (actionName !== 'downloadbyclick') return false;\n    return !!this.downloadByClickFile;\n  }\n\n  /** The file payload returned by the backend for a downloadByClick step (or null). */\n  get downloadByClickFile(): any | null {\n    return this?.step?.executedResult?.fileUploadResponse ?? null;\n  }\n\n  /** Human-readable file name derived from the backend path/name. Used in the file details card. */\n  get downloadByClickFileName(): string {\n    const f = this.downloadByClickFile;\n    if (!f) return '';\n    const rawName = f.name || f.fileName || '';\n    if (rawName) return rawName;\n    const path = f.path || f.fileMainPath || '';\n    return path ? path.split('/').pop() || path : '';\n  }\n\n  /** File extension (e.g. \"txt\", \"pdf\") used in the type badge. */\n  get downloadByClickFileType(): string {\n    const name = this.downloadByClickFileName;\n    const dotIdx = name.lastIndexOf('.');\n    return dotIdx >= 0 ? name.slice(dotIdx + 1) : '';\n  }\n\n  /** S3 path shown in the \"File Path\" card and sent through to the portal's download handler. */\n  get downloadByClickFilePath(): string {\n    const f = this.downloadByClickFile;\n    return f?.path || f?.fileMainPath || '';\n  }\n\n  /** True while the portal is fetching the blob for this step. */\n  get isDownloadByClickDownloading(): boolean {\n    return this.downloadingStepId != null && String(this.downloadingStepId) === String(this.testStepResultId);\n  }\n\n  /** Tailwind classes for the file-type badge (matches file-download-step styling). */\n  getDownloadByClickBadgeClass(): string {\n    const type = this.downloadByClickFileType.toLowerCase();\n    if (type === 'pdf') return 'cqa-bg-red-100 cqa-text-red-800';\n    if (type === 'csv') return 'cqa-bg-green-100 cqa-text-green-800';\n    if (type === 'xlsx' || type === 'excel') return 'cqa-bg-blue-100 cqa-text-blue-800';\n    return 'cqa-bg-gray-100 cqa-text-gray-800';\n  }\n\n  /** Click handler for the Download button — delegates to the portal-provided onDownloadHandler. */\n  onDownloadByClickDownload(): void {\n    if (!this.onDownloadHandler) return;\n    this.onDownloadHandler({\n      fileName: this.downloadByClickFileName,\n      filePath: this.downloadByClickFilePath,\n      fileType: this.downloadByClickFileType,\n      testStepResultId: String(this.testStepResultId),\n    });\n  }\n\n  /** State for the \"Copied\" tooltip shown next to the File Path copy button. */\n  showDownloadByClickCopied = false;\n  private downloadByClickCopyTimeout: any;\n\n  /** Click handler for the file-path copy button. */\n  copyDownloadByClickFilePath(): void {\n    const filePath = this.downloadByClickFilePath;\n    if (!filePath) return;\n    navigator.clipboard.writeText(filePath).then(() => {\n      if (this.onFilePathCopiedHandler) {\n        this.onFilePathCopiedHandler({ filePath, testStepResultId: String(this.testStepResultId) });\n      }\n      if (this.onTextCopiedHandler) {\n        this.onTextCopiedHandler({ text: filePath, testStepResultId: String(this.testStepResultId) });\n      }\n      this.showDownloadByClickCopied = true;\n      if (this.downloadByClickCopyTimeout) clearTimeout(this.downloadByClickCopyTimeout);\n      this.downloadByClickCopyTimeout = setTimeout(() => {\n        this.showDownloadByClickCopied = false;\n      }, 2000);\n    }).catch(err => {\n      console.error('Failed to copy file path to clipboard:', err);\n    });\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : config.status.toLowerCase() === 'paused' ? '#FFF9E9' : config.status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\"\n     style=\"border-bottom: '1px solid #F3F4F6'\"\n    >\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <!-- {{ getStatusIcon(config.status) }} -->\n<!-- Success -->\n    <div *ngIf=\"config.status.toLowerCase() === 'success'\" >\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Failure -->\n    <div *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Pending -->\n    <div *ngIf=\"config.status.toLowerCase() === 'pending'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <div *ngIf=\"config.status.toLowerCase() === 'paused'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Running - Show spinner -->\n    <div *ngIf=\"config.status.toLowerCase() === 'running'\">\n      <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n        <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n      </svg>\n    </div>\n    <!-- Skipped -->\n    <div class=\"cqa-flex cqa-items-center\" *ngIf=\"config.status.toLowerCase() === 'skipped'\">\n      <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n        skip_next\n      </span>\n    </div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-font-semibold cqa-flex-1 cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\" style=\"word-break: break-word;\">\n      <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(duration) }}\n      </span>\n      <svg *ngIf=\"hasSubSteps || (config.nestedSteps && config.nestedSteps.length > 0) || isDownloadByClickStep\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded && (hasSubSteps || (config.nestedSteps && config.nestedSteps.length > 0) || isDownloadByClickStep)\">\n    <!-- ======================================================= -->\n    <!-- Download-by-click file attachment card                    -->\n    <!-- Shown above the logs for NORMAL steps whose actionName is -->\n    <!-- 'downloadByClick' and whose backend response carries a    -->\n    <!-- fileUploadResponse payload. Layout matches cqa-file-download-step. -->\n    <!-- ======================================================= -->\n    <div *ngIf=\"isDownloadByClickStep\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4 cqa-flex cqa-flex-col cqa-gap-1.5\" style=\"border-top: 1px solid #E4E4E4;\">\n      <!-- File Details Card -->\n      <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-px-3 cqa-py-1\" style=\"border: 1px solid #6DBFFF\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-w-full\">\n          <div><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"28\" height=\"28\" rx=\"5\" fill=\"#E6F4FF\"/><path d=\"M16.5 5.66675H9.00004C8.55801 5.66675 8.13409 5.84234 7.82153 6.1549C7.50897 6.46746 7.33337 6.89139 7.33337 7.33341V20.6667C7.33337 21.1088 7.50897 21.5327 7.82153 21.8453C8.13409 22.1578 8.55801 22.3334 9.00004 22.3334H19C19.4421 22.3334 19.866 22.1578 20.1786 21.8453C20.4911 21.5327 20.6667 21.1088 20.6667 20.6667V9.83341L16.5 5.66675Z\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M15.6666 5.66675V9.00008C15.6666 9.44211 15.8422 9.86603 16.1548 10.1786C16.4673 10.4912 16.8913 10.6667 17.3333 10.6667H20.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12.3333 11.5H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M17.3333 14.8333H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M17.3333 18.1667H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1\">\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B\">{{ downloadByClickFileName }}</span>\n              <span *ngIf=\"downloadByClickFileType\" [ngClass]=\"getDownloadByClickBadgeClass()\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-px-1 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#E7000B] cqa-bg-[#FFE2E2] cqa-text-[10px] cqa-leading-[15px]\">\n                {{ downloadByClickFileType }}\n              </span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Download Attachment Card -->\n      <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-px-3 cqa-py-1\" style=\"border: 1px solid #9DD5FF\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-w-full\">\n          <div><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"28\" height=\"28\" rx=\"5\" fill=\"#E6F4FF\"/><path d=\"M20 16V18.6667C20 19.0203 19.8595 19.3594 19.6095 19.6095C19.3594 19.8595 19.0203 20 18.6667 20H9.33333C8.97971 20 8.64057 19.8595 8.39052 19.6095C8.14048 19.3594 8 19.0203 8 18.6667V16\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10.6666 12.6667L14 16.0001L17.3333 12.6667\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M14 16V8\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <div class=\"cqa-flex-1 cqa-flex cqa-flex-col\">\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B\">Download Attachment</span>\n            </div>\n            <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[8px] cqa-leading-[12px] cqa-text-[#636363]\">\n              Access the downloaded file\n            </div>\n          </div>\n          <button\n            [disabled]=\"isDownloadByClickDownloading\"\n            (click)=\"onDownloadByClickDownload(); $event.stopPropagation()\"\n            class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-bg-transparent cqa-text-black cqa-px-[10px] cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\" style=\"border: 1px solid #212122\">\n            <mat-spinner *ngIf=\"isDownloadByClickDownloading\" diameter=\"14\" style=\"display: inline-block;\"></mat-spinner>\n            <svg *ngIf=\"!isDownloadByClickDownloading\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 7.5V9H3V7.5H2V9C2 9.55 2.45 10 3 10H9C9.55 10 10 9.55 10 9V7.5H9ZM8.5 5.5L7.795 4.795L6.5 6.085V2H5.5V6.085L4.205 4.795L3.5 5.5L6 8L8.5 5.5Z\" fill=\"black\"/></svg>\n            {{ isDownloadByClickDownloading ? 'Downloading...' : 'Download' }}\n          </button>\n        </div>\n      </div>\n\n      <!-- File Path Card -->\n      <div *ngIf=\"downloadByClickFilePath\" class=\"cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #9DD5FF\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.3334 13.3333C13.687 13.3333 14.0261 13.1929 14.2762 12.9428C14.5262 12.6928 14.6667 12.3536 14.6667 12V5.33333C14.6667 4.97971 14.5262 4.64057 14.2762 4.39052C14.0261 4.14048 13.687 4 13.3334 4H8.06671C7.84372 4.00219 7.62374 3.94841 7.42691 3.84359C7.23008 3.73877 7.06268 3.58625 6.94004 3.4L6.40004 2.6C6.27863 2.41565 6.11336 2.26432 5.91904 2.1596C5.72472 2.05488 5.50745 2.00004 5.28671 2H2.66671C2.31309 2 1.97395 2.14048 1.7239 2.39052C1.47385 2.64057 1.33337 2.97971 1.33337 3.33333V12C1.33337 12.3536 1.47385 12.6928 1.7239 12.9428C1.97395 13.1929 2.31309 13.3333 2.66671 13.3333H13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">File Path</div>\n        </div>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <div class=\"cqa-flex-1 cqa-bg-[#F5F5F5] cqa-px-3 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\">\n            <span>{{ downloadByClickFilePath }}</span>\n          </div>\n          <div class=\"cqa-relative\">\n            <button class=\"cqa-px-1.5 cqa-py-[3px]\" (click)=\"copyDownloadByClickFilePath(); $event.stopPropagation()\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n            </button>\n            <div\n              *ngIf=\"showDownloadByClickCopied\"\n              class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\">\n              Copied\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Sub-steps -->\n    <div *ngIf=\"hasSubSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n      <!-- Single loop: render all entries in chronological order -->\n      <ng-container *ngFor=\"let subStep of (isLive ? processedSubSteps : processedSubStepsForRunResult)\">\n        <!-- AI_AUTO_HEAL_SUCCESS/FAILED: render with ai-agent-step style (both live and run result screens) -->\n        <cqa-ai-logs-with-reasoning\n          *ngIf=\"$any(subStep).isAiAutoHealResult\"\n          [status]=\"subStep.status\"\n          [text]=\"$any(subStep).text || subStep?.value\"\n          [description]=\"$any(subStep).description || subStep?.text || subStep?.value\"\n          [reasoning]=\"$any(subStep).reasoning || subStep?.reasoning\"\n          [duration]=\"subStep.duration\">\n        </cqa-ai-logs-with-reasoning>\n\n        <!-- Regular sub-steps -->\n        <div\n          *ngIf=\"!$any(subStep).isAiAutoHealResult\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n          \n          <!-- Sub-step Status Icon -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Failure -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Pending -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Running - Show spinner (also used for active WAIT_FOR_LOCATOR countdown in live mode) -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n            <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n          </div>\n\n          <!-- Sub-step Description -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"white-space: pre-line; word-break: break-word;\">\n            {{ $any(subStep).description || $any(subStep).text }}\n            <!-- Countdown for active WAIT_FOR_LOCATOR in live mode -->\n            <span *ngIf=\"isLive && $any(subStep).remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\">({{ $any(subStep).remainingSeconds }}s remaining)</span>\n          </span>\n\n          <!-- Sub-step Duration -->\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n            {{ formatDuration(subStep.duration) }}\n          </span>\n        </div>\n      </ng-container>\n    </div>\n\n    <!-- Nested Steps -->\n    <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\">Nested steps</div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n        <!-- Loading indicator for nested steps -->\n        <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n          <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n            <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n          </svg>\n          <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n        </div>\n\n\n        <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n          <!-- Wrapper to show skeleton while step-renderer is loading -->\n          <div\n            class=\"cqa-step-renderer-wrapper\"\n            [attr.id]=\"'exc-' + (step?.uniqueId || step.id)\"\n            [class.loaded]=\"!isNestedStepLoading(step)\">\n            <!-- Loading skeleton overlay -->\n            <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n              <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n            </div> -->\n            <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n            <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n            <cqa-step-renderer \n              [step]=\"step\"\n              [stepNumber]=\"step.stepNumber || (stepNumber + '.' + (i + 1))\"\n              [onExpandHandler]=\"onExpandHandler\"\n              [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n              [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n              [isStepLoadingHandler]=\"isStepLoadingHandler\"\n              [isStepExpandedHandler]=\"isStepExpandedHandler\"\n              [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n              [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n              [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n              [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n              [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n              [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n              [formatActionsHandler]=\"formatActionsHandler\"\n              [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n              [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n              [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n              [onAnalyzeHandler]=\"onAnalyzeHandler\"\n              [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n              [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n              [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n              [onStepClickHandler]=\"onStepClickHandler\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [onDownloadHandler]=\"onDownloadHandler\"\n              [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n              [onTextCopiedHandler]=\"onTextCopiedHandler\"\n              [downloadingStepId]=\"downloadingStepId\"\n              [isUploadingBaseline]=\"isUploadingBaseline\"\n              [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n            [isLive]=\"isLive\"\n            [isDebug]=\"isDebug\"\n            [canEditSteps]=\"canEditSteps\"\n            [parentSkipped]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n            [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n            [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n            [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n            [onEditStepHandler]=\"onEditStepHandler\"\n            [addStepMenuOptions]=\"addStepMenuOptions\"\n            [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n            [stepMoreMenuOptions]=\"stepMoreMenuOptions\"\n            [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n              (componentReady)=\"markStepLoaded(step)\">\n            </cqa-step-renderer>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-mt-1 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"subSteps\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [testStepResultId]=\"testStepResultId\"\n      [timingBreakdown]=\"timingBreakdown\"\n      [expanded]=\"true\"\n      [subSteps]=\"subSteps\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { StepGroupConfig, LoopStepConfig, ConditionBranch, ExecutionStepConfig, StepStatus, TimingBreakdown, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n  selector: 'cqa-step-group',\n  templateUrl: './step-group.component.html',\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class StepGroupComponent extends BaseStepComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() groupName!: string;\n  @Input() steps!: ExecutionStepConfig[];\n  @Input() hasChild?: boolean;\n  @Input() isLoading?: boolean;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Output() addStepInsideLoop = new EventEmitter<any>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n\n  // Handler function to pass down to nested child step groups for recursive expansion\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Edit on nested steps is forwarded with the step config. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Add-step menu selection on nested steps is forwarded. */\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so More options menu selection on nested steps is forwarded. */\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, used to get add-step menu options per nested step at any depth; otherwise addStepMenuOptions is used. */\n  @Input() getAddStepMenuOptionsForNested?: (step: ExecutionStepConfig) => AddStepMenuOption[];\n  /** When provided, used to get step-more menu options per nested step at any depth; otherwise stepMoreMenuOptions is used. */\n  @Input() getStepMoreMenuOptionsForNested?: (step: ExecutionStepConfig) => StepMoreMenuOption[];\n  /** When provided, passed to nested step-renderers so \"Add ELSE IF\" on condition steps inside this step-group works. */\n  @Input() onAddElseIfBranchAtHandler?: (conditionStep: any, branchIndex: number) => void;\n  /** When provided, passed to nested step-renderers so \"Add ELSE\" on condition steps inside this step-group works. */\n  @Input() onAddElseBranchHandler?: (conditionStep: any) => void;\n  /** When provided, passed to nested step-renderers so edit icon on IF/ELSE IF branches inside this step-group opens the condition editor. */\n  @Input() onEditBranchConditionHandler?: (conditionStep: any, branch: any, branchStep: any) => void;\n\n  // Handler functions for nested components (optional, passed from parent)\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => ConditionBranch[];\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @Input() isUploadingBaseline?: any;\n  @Input() isMakingCurrentBaseline?: any;\n  @Input() isLive: boolean = false;\n  @Input() step?: ExecutionStepConfig;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = (this.step as any)?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  // Output event for when the step group expands\n  @Output() onExpand = new EventEmitter<void>();\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: StepGroupConfig;\n\n  // Track which steps are still loading to show skeleton\n  loadingSteps: Set<string> = new Set();\n\n  /** Show debug icon only when this step has no child steps (icon is shown on child steps instead). */\n  /** Show debug icon when debug mode is on (shown on parent and all child steps). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  // get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n  //   const base = this.stepMoreMenuOptions || [];\n  //   // Always hide duplicate option for this container step\n  //   let filtered = base.filter(opt => opt.id !== 'duplicate');\n    \n  //   const stepRef: any = this.step;\n  //   if (!stepRef) return filtered;\n\n  //   const isGroupChild = !!stepRef.isStepGroupChildren;\n  //   // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n  //   const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n  //   if (!suppressMutating) return filtered;\n\n  //   return filtered.filter(opt => opt.id !== 'delete');\n  // }\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n  \n  /** True when this step-group's own breakpoint is disabled (used to propagate parentSkipped to children). */\n  get selfDebugDisabled(): boolean {\n    return !!(this.step as any)?.debugPointDisabled || !!this.parentSkipped || this.isStepDeleted;\n  }\n\n  constructor(private cdr: ChangeDetectorRef) {\n    super();\n  }\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.updateConfig();\n\n    super.ngOnInit();\n    // Ensure isExpanded is set correctly after super.ngOnInit()\n    if (this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n    }\n\n    // Initialize loading state if already expanded\n    if (this.isExpanded && this.config.steps && this.config.steps.length > 0) {\n      this.loadingSteps.clear();\n      this.config.steps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update config when steps input changes\n    if (changes['steps'] || changes['expanded'] || changes['status'] || changes['duration'] || changes['groupName'] || changes['stepDeleted'] || changes['stepNumber']) {\n      this.updateConfig();\n    }\n\n    // Update expanded state if changed\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n    }\n\n    // // Initialize loading state when steps are added and step is expanded\n    // if (changes['steps'] && this.isExpanded && this.config.steps && this.config.steps.length > 0) {\n    //   this.loadingSteps.clear();\n    //   this.config.steps.forEach(step => {\n    //     const stepId = step.testStepResultId || step.id;\n    //     if (stepId) {\n    //       this.loadingSteps.add(String(stepId));\n    //     }\n    //   });\n    // }\n\n    // Initialize loading state if already expanded when component initializes\n    if (changes['expanded'] && this.isExpanded && this.config.steps && this.config.steps.length > 0) {\n      this.loadingSteps.clear();\n      this.config.steps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  private updateConfig(): void {\n    // Build or update config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'step-group',\n      groupName: this.groupName,\n      steps: this.steps || [],\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as StepGroupConfig;\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.onEditStepHandler && this.step) {\n      this.onEditStepHandler(this.step);\n    } else {\n      this.editStep.emit();\n    }\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  override toggle(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n    // Emit event when expanding (transitioning from collapsed to expanded)\n    if (!wasExpanded && this.isExpanded) {\n      this.onExpand.emit();\n      // If this step has children (hasChild is true) and onExpandHandler is provided, call it to fetch children\n      if (this.onExpandHandler && this.config && this.hasChild) {\n        // Create a step config object for the handler with hasChild property\n        const stepConfig = {\n          ...this.config,\n          hasChild: true,\n          expanded: true, // Ensure expanded is set\n          displayType: (this.config as any).displayType || 'STEP_GROUP',\n          children: this.config.steps || [],\n          testStepResultId: this.testStepResultId,\n          id: this.id\n        } as ExecutionStepConfig & { hasChild: boolean; testStepType?: string; children?: any[]; expanded?: boolean };\n        this.onExpandHandler(stepConfig);\n      }\n      // Initialize loading state for all nested steps\n      if (this.config.steps && this.config.steps.length > 0) {\n        this.loadingSteps.clear();\n        this.config.steps.forEach(step => {\n          const stepId = step.testStepResultId || step.id;\n          if (stepId) {\n            this.loadingSteps.add(String(stepId));\n          }\n        });\n      }\n      this.cdr.detectChanges();\n    } else if (!this.isExpanded) {\n      // Clear loading state when collapsing\n      this.loadingSteps.clear();\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n    if (this.isDebug && this.step) (this.step as any).expanded = this.isExpanded;\n  }\n\n  // Check if a step is still loading\n  isNestedStepLoading(step: ExecutionStepConfig): boolean {\n    const stepId = step.testStepResultId || step.id;\n    return stepId ? this.loadingSteps.has(String(stepId)) : false;\n  }\n\n  // Mark a step as loaded (called when step-renderer is ready)\n  markStepLoaded(step: ExecutionStepConfig): void {\n    const stepId = step.testStepResultId || step.id;\n    if (stepId) {\n      this.loadingSteps.delete(String(stepId));\n    }\n  }\n\n  // Helper method to check if a step is a step-group with hasChild\n  isNestedStepGroupWithChildren(step: ExecutionStepConfig): boolean {\n    return step.displayType === 'step-group' && !!(step as any).hasChild;\n  }\n\n  // Helper method to get groupName from step config\n  getGroupName(step: ExecutionStepConfig): string {\n    return (step as StepGroupConfig).groupName || '';\n  }\n\n  // Helper method to get steps from step config\n  getSteps(step: ExecutionStepConfig): ExecutionStepConfig[] {\n    // Check both steps and children properties for compatibility\n    const stepGroup = step as StepGroupConfig;\n    return stepGroup.steps || (step as any).children || [];\n  }\n\n  // Helper method to check if a step is a loop step\n  isNestedLoopStep(step: ExecutionStepConfig): boolean {\n    const stepType = (step as any).testStepType || (step as any).displayType;\n    return stepType === 'FOR_LOOP' || stepType === 'WHILE_LOOP' || stepType === 'loop';\n  }\n\n  // Helper method to check if a step is a condition step\n  isNestedConditionStep(step: ExecutionStepConfig): boolean {\n    const stepType = (step as any).testStepType || (step as any).displayType;\n    return stepType === 'CONDITION_IF' || stepType === 'CONDITION_ELSE' || \n           stepType === 'CONDITION_ELSE_IF' || stepType === 'CONDITION_ELSEIF' ||\n           stepType === 'condition';\n  }\n\n  // Helper method to get step title\n  getStepTitle(step: ExecutionStepConfig): string {\n    return (step as any).action || step.title || '';\n  }\n\n  // Helper method to get step status\n  getStepStatus(step: ExecutionStepConfig): StepStatus {\n    const result = (step as any).result;\n    if (result) {\n      const resultLower = result.toLowerCase();\n      if (resultLower === 'success' || resultLower === 'passed') {\n        return 'success';\n      } else if (resultLower === 'failure' || resultLower === 'failed') {\n        return 'failed';\n      } else if (resultLower === 'pending' || resultLower === 'not-executed') {\n        return 'pending';\n      } else if (resultLower === 'running') {\n        return 'running';\n      }\n    }\n    return step.status || 'pending';\n  }\n\n  // Helper method to get step duration\n  getStepDuration(step: ExecutionStepConfig): number {\n    return (step as any).duration || step.duration || 0;\n  }\n\n  // Helper methods for loop step properties\n  getLoopType(step: ExecutionStepConfig): 'for' | 'while' | undefined {\n    const stepType = (step as any).testStepType || (step as any).displayType;\n    if (stepType === 'FOR_LOOP' || (step as LoopStepConfig).loopType === 'for') {\n      return 'for';\n    } else if (stepType === 'WHILE_LOOP' || (step as LoopStepConfig).loopType === 'while') {\n      return 'while';\n    }\n    return (step as LoopStepConfig).loopType;\n  }\n\n  getLoopIterations(step: ExecutionStepConfig): any[] {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.iterations || [];\n  }\n\n  getLoopNestedSteps(step: ExecutionStepConfig): ExecutionStepConfig[] {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.nestedSteps || (step as any).children || [];\n  }\n\n  // Helper methods for condition step properties\n  getConditionStepDuration(step: ExecutionStepConfig): number {\n    const duration = this.getStepDuration(step);\n    if (this.convertMsToSecondsHandler) {\n      return this.convertMsToSecondsHandler(duration);\n    }\n    return duration;\n  }\n\n  getConditionStepExpanded(step: ExecutionStepConfig): boolean {\n    if (this.isStepExpandedHandler) {\n      return this.isStepExpandedHandler(step);\n    }\n    return step.expanded || false;\n  }\n\n  getConditionStepText(step: ExecutionStepConfig): string {\n    return (step as any).action || step.title || '';\n  }\n\n  getConditionStepBranches(step: ExecutionStepConfig): ConditionBranch[] {\n    if (this.getConditionBranchesHandler) {\n      return this.getConditionBranchesHandler(step);\n    }\n    return [];\n  }\n\n  getConditionStepLoading(step: ExecutionStepConfig): boolean {\n    if (this.isStepLoadingHandler) {\n      return this.isStepLoadingHandler(step);\n    }\n    return false;\n  }\n\n  handleConditionStepExpand(step: ExecutionStepConfig): void {\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  handleLoopStepExpand(step: ExecutionStepConfig): void {\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  handleLoopStepIterationChange(step: ExecutionStepConfig, iterationId: string): void {\n    // This would typically be handled by the parent component\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  getConditionStepFailureDetails(step: ExecutionStepConfig): any {\n    if (this.formatFailureDetailsHandler) {\n      return this.formatFailureDetailsHandler(step);\n    }\n    return undefined;\n  }\n\n  getConditionStepSelfHealAnalysis(step: ExecutionStepConfig): any {\n    if (this.getSelfHealAnalysisHandler) {\n      return this.getSelfHealAnalysisHandler(step);\n    }\n    return undefined;\n  }\n\n  // Helper methods to safely access LoopStepConfig properties\n  getLoopSelectedIterationId(step: ExecutionStepConfig): string | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.selectedIterationId;\n  }\n\n  getLoopDefaultIteration(step: ExecutionStepConfig): 'first' | 'last' | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.defaultIteration || 'last';\n  }\n\n  getLoopShowViewAllIterations(step: ExecutionStepConfig): boolean | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.showViewAllIterations;\n  }\n\n  \n  // Check if this step is currently loading nested children\n  isStepLoading(): boolean {\n    if (this.isStepLoadingHandler && this.config) {\n      return this.isStepLoadingHandler(this.config);\n    }\n    return this.isLoading || false;\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" style=\"border-bottom: '1px solid #F3F4F6'\" [style.background-color]=\"!isDebug ? null : config.status.toLowerCase() === 'paused' ? '#FFF9E9' : config.status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggle($event)\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n      <!-- Success -->\n      <svg *ngIf=\"config.status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Failed -->\n      <svg *ngIf=\"config.status.toLowerCase() === 'failure' || config.status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Pending -->\n      <svg *ngIf=\"config.status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Running -->\n      <svg *ngIf=\"config.status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      \n      <span *ngIf=\"config.status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n        skip_next\n      </span>\n      <div *ngIf=\"config.status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    </div>\n\n    <!-- Folder Icon -->\n    <div><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-font-semibold cqa-flex-1 cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\" style=\"word-break: break-word;\">\n      <span>{{ config?.stepNumber }}. Step group: {{ config.groupName }}</span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\"\n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\">\n    <!-- Nested Steps -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mt-2 cqa-ml-[18px]\">\n      <!-- Loading indicator for nested steps -->\n      <div *ngIf=\"hasChild && (!config.steps || config.steps.length === 0) && isStepLoading()\" \n           class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n        <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n          <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n        </svg>\n        <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n      </div>\n\n      <ng-container *ngFor=\"let step of config.steps; index as i\">\n        <!-- Wrapper to show skeleton while step-renderer is loading -->\n        <div\n          class=\"cqa-step-renderer-wrapper\"\n          [attr.id]=\"'exc-' + (step?.uniqueId || step.id)\"\n          [class.loaded]=\"!isNestedStepLoading(step)\">\n          <!-- Loading skeleton overlay -->\n          <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n            <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n          </div> -->\n          <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n          <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n          <cqa-step-renderer \n            [step]=\"step\"\n            [stepNumber]=\"step.stepNumber || (stepNumber + '.' + (i + 1))\"\n            [onExpandHandler]=\"onExpandHandler\"\n            [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n            [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n            [isStepLoadingHandler]=\"isStepLoadingHandler\"\n            [isStepExpandedHandler]=\"isStepExpandedHandler\"\n            [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n            [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n            [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n            [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n            [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n            [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n            [formatActionsHandler]=\"formatActionsHandler\"\n            [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n            [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n            [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n            [onAnalyzeHandler]=\"onAnalyzeHandler\"\n            [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n            [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n            [onStepClickHandler]=\"onStepClickHandler\"\n            [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n            [onDownloadHandler]=\"onDownloadHandler\"\n            [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n            [onTextCopiedHandler]=\"onTextCopiedHandler\"\n            [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n            [downloadingStepId]=\"downloadingStepId\"\n            [isUploadingBaseline]=\"isUploadingBaseline\"\n            [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n            [selectedIterationId]=\"step?.selectedIterationId || ''\"\n            [isLive]=\"isLive\"\n            [isDebug]=\"isDebug\"\n            [canEditSteps]=\"canEditSteps\"\n            [parentSkipped]=\"selfDebugDisabled\"\n            [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n            [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n            [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n            [onEditStepHandler]=\"onEditStepHandler\"\n            [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n            [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n            [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n            [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n            [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n            [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n            [onAddElseIfBranchAtHandler]=\"onAddElseIfBranchAtHandler\"\n            [onAddElseBranchHandler]=\"onAddElseBranchHandler\"\n            [onEditBranchConditionHandler]=\"onEditBranchConditionHandler\"\n            (addStepInsideLoop)=\"addStepInsideLoop.emit($event)\"\n            (componentReady)=\"markStepLoaded(step)\">\n          </cqa-step-renderer>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, ViewChild, OnDestroy, DoCheck } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { LoopStepConfig, LoopIteration, ExecutionStepConfig, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, StepGroupConfig, ConditionBranch, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-loop-step',\n  templateUrl: './loop-step.component.html',\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class LoopStepComponent extends BaseStepComponent implements OnInit, OnChanges, OnDestroy, DoCheck {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() loopType?: 'for' | 'while';\n  @Input() iterations!: LoopIteration[];\n  @Input() selectedIterationId?: string;\n  @Input() defaultIteration?: 'first' | 'last' = 'last';\n  @Input() nestedSteps?: ExecutionStepConfig[];\n  @Input() showViewAllIterations?: boolean;\n  @Input() hasChild?: boolean;\n  @Input() isLive: boolean = false;\n  @Input() isLoading?: boolean;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  /** Emitted when user clicks \"+ Add step inside loop\" (debug only). Payload is the loop step so parent can open Add Step modal at any nesting level. */\n  @Output() addStepInsideLoop = new EventEmitter<any>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n\n  // Handler function to pass down to nested child step groups for recursive expansion\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Edit on nested steps is forwarded with the step config. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, used to get add-step menu options per nested step; otherwise addStepMenuOptions is used for all. */\n  @Input() getAddStepMenuOptionsForNested?: (step: ExecutionStepConfig) => AddStepMenuOption[];\n  /** When provided, used to get step-more menu options per nested step; otherwise stepMoreMenuOptions is used for all. */\n  @Input() getStepMoreMenuOptionsForNested?: (step: ExecutionStepConfig) => StepMoreMenuOption[];\n  /** When provided, passed to nested step-renderers so \"Add ELSE IF\" on condition steps inside this loop works. */\n  @Input() onAddElseIfBranchAtHandler?: (conditionStep: any, branchIndex: number) => void;\n  /** When provided, passed to nested step-renderers so \"Add ELSE\" on condition steps inside this loop works. */\n  @Input() onAddElseBranchHandler?: (conditionStep: any) => void;\n  /** When provided, passed to nested step-renderers so edit icon on IF/ELSE IF branches inside this loop opens the condition editor. */\n  @Input() onEditBranchConditionHandler?: (conditionStep: any, branch: any, branchStep: any) => void;\n\n  // Handler functions for condition steps\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => ConditionBranch[];\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() iterationData?: any;\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  showFailedStepDetails: boolean = false;\n\n  @ViewChild('addStepMenuTrigger') addStepMenuTrigger?: MatMenuTrigger;\n  @ViewChild('stepMoreMenuTrigger') stepMoreMenuTrigger?: MatMenuTrigger;\n\n  /** Show debug icon when debug mode is on (shown on parent and all child steps). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  // get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n  //   const base = this.stepMoreMenuOptions || [];\n  //   // Always hide duplicate option for this container step\n  //   let filtered = base.filter(opt => opt.id !== 'duplicate');\n    \n  //   const stepRef: any = this.step;\n  //   if (!stepRef) return filtered;\n\n  //   const isGroupChild = !!stepRef.isStepGroupChildren;\n  //   // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n  //   const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n  //   if (!suppressMutating) return filtered;\n\n  //   return filtered.filter(opt => opt.id !== 'delete');\n  // }\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n  \n  /** True when this loop-step's own breakpoint is disabled (used to propagate parentSkipped to children). */\n  get selfDebugDisabled(): boolean {\n    return !!(this.step as any)?.debugPointDisabled || !!this.parentSkipped || this.isStepDeleted;\n  }\n\n  // Output event for when the loop step expands\n  @Output() onExpand = new EventEmitter<void>();\n\n  // Output event for when \"View all iterations\" is clicked\n  @Output() onViewAllIterations = new EventEmitter<void>();\n\n  // Output event for when iteration selection changes\n  @Output() onIterationChange = new EventEmitter<string>();\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: LoopStepConfig;\n\n  selectedIteration: LoopIteration | null = null;\n  private userSelectedIterationId: string | null = null; // Track user's manual selection\n  private previousStatus?: StepStatus;\n  private userManuallyClosed: boolean = false;\n  // Track which steps are still loading to show skeleton\n  loadingSteps: Set<string> = new Set();\n\n  // Processed sub-steps for live mode WAIT_FOR_LOCATOR countdown grouping\n  processedSubSteps: any[] = [];\n  private lastProcessedIndex: number = 0;\n  private waitLocatorGroupEntry: any | null = null;\n  private countdownIntervalId: any = null;\n\n  // AI_AUTO_HEAL grouping: show loading until AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n  private aiAutoHealGroupEntry: any | null = null;\n\n  // Processed sub-steps for run result screen (filter and split AI_AUTO_HEAL_SUCCESS/FAILED)\n  processedSubStepsForRunResult: any[] = [];\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    // Use nestedSteps if provided, otherwise fall back to empty array\n    const stepsToUse = this.nestedSteps || [];\n\n    // Use action as fallback for title if title is empty\n    // Check both instance property and config for action\n    const actionValue = (this as any).action || '';\n    const stepTitle = (this.title && this.title.trim()) ? this.title : actionValue;\n\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: stepTitle,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'loop',\n      loopType: this.loopType,\n      iterations: this.iterations,\n      selectedIterationId: this.selectedIterationId,\n      defaultIteration: this.defaultIteration,\n      nestedSteps: stepsToUse,\n      stepDeleted: this.stepDeleted,\n      showViewAllIterations: this.showViewAllIterations,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as LoopStepConfig;\n\n    super.ngOnInit();\n\n    // Initialize live sub-step processing for WAIT_FOR_LOCATOR grouping\n    if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps && this.selectedIteration.subSteps.length > 0) {\n      this.processLiveSubSteps();\n    } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps && this.selectedIteration.subSteps.length > 0) {\n      // Process for run result screen: filter and split AI_AUTO_HEAL_SUCCESS/FAILED\n      this.processSubStepsForRunResult();\n    }\n\n    // Initialize selection - prioritize selectedIterationId input, then default\n    if (this.selectedIterationId && this.iterations && this.iterations.length > 0) {\n      const found = this.iterations.find(iter => iter.id === this.selectedIterationId);\n      if (found) {\n        this.selectedIteration = found;\n        this.userSelectedIterationId = this.selectedIterationId;\n      } else {\n        this.selectDefaultIteration();\n      }\n    } else if (this.iterations && this.iterations.length > 0) {\n      this.selectDefaultIteration();\n      // If defaultIteration is 'last', also set userSelectedIterationId to the last iteration\n      if (this.defaultIteration === 'last' && this.selectedIteration) {\n        this.userSelectedIterationId = this.selectedIteration.id;\n      }\n    }\n\n    // Initialize loading state if already expanded\n    if (this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update selection when selectedIterationId input changes\n    if (changes['selectedIterationId'] && this.iterations && this.iterations.length > 0) {\n      const currentValue = changes['selectedIterationId'].currentValue;\n      const previousValue = changes['selectedIterationId'].previousValue;\n\n      // Always update when selectedIterationId input changes from parent\n      if (currentValue !== previousValue) {\n        if (currentValue) {\n          const found = this.iterations.find(iter => iter.id === currentValue);\n          if (found) {\n            // Reset processing when switching to a different iteration\n            if (this.isLive && this.selectedIteration && this.selectedIteration.id !== found.id) {\n              this.resetLiveProcessing();\n            }\n            this.selectedIteration = found;\n            // Sync userSelectedIterationId with the input value\n            this.userSelectedIterationId = currentValue;\n            // Process live sub-steps when iteration changes\n            if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n              this.processLiveSubSteps();\n            } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n              this.processSubStepsForRunResult();\n            }\n          } else {\n            // If not found, select default\n            this.selectDefaultIteration();\n          }\n        } else {\n          // If no value provided, select default\n          this.selectDefaultIteration();\n        }\n      }\n    }\n    // Update selection when iterations array changes\n    if (changes['iterations'] && this.iterations && this.iterations.length > 0) {\n      // If we have a user selection, try to preserve it\n      if (this.userSelectedIterationId) {\n        const found = this.iterations.find(iter => iter.id === this.userSelectedIterationId);\n        if (found) {\n          // Reset processing when switching to a different iteration\n          if (this.isLive && this.selectedIteration && this.selectedIteration.id !== found.id) {\n            this.resetLiveProcessing();\n          }\n          this.selectedIteration = found;\n          // Process live sub-steps when iteration changes\n          if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n            this.processLiveSubSteps();\n          } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n            this.processSubStepsForRunResult();\n          }\n        } else {\n          // User selection no longer valid, use selectedIterationId or default\n          if (this.selectedIterationId) {\n            const foundById = this.iterations.find(iter => iter.id === this.selectedIterationId);\n            if (foundById) {\n              // Reset processing when switching to a different iteration\n              if (this.isLive && this.selectedIteration && this.selectedIteration.id !== foundById.id) {\n                this.resetLiveProcessing();\n              }\n              this.selectedIteration = foundById;\n              if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n                this.processLiveSubSteps();\n              } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n                this.processSubStepsForRunResult();\n              }\n            } else {\n              this.selectDefaultIteration();\n            }\n          } else {\n            this.selectDefaultIteration();\n          }\n        }\n      } else if (!this.selectedIteration || !this.iterations.some(iter => iter.id === this.selectedIteration?.id)) {\n        // No user selection, use selectedIterationId or default\n        if (this.selectedIterationId) {\n          const found = this.iterations.find(iter => iter.id === this.selectedIterationId);\n          if (found) {\n            // Reset processing when switching to a different iteration\n            if (this.isLive && this.selectedIteration && this.selectedIteration.id !== found.id) {\n              this.resetLiveProcessing();\n            }\n            this.selectedIteration = found;\n            if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n              this.processLiveSubSteps();\n            }\n          } else {\n            this.selectDefaultIteration();\n          }\n        } else {\n          this.selectDefaultIteration();\n        }\n      }\n    }\n    // Update title if it changes - also check for action in config or instance\n    if (changes['title']) {\n      const actionValue = (this as any).action || (this.config as any)?.action || '';\n      const stepTitle = (this.title && this.title.trim()) ? this.title : actionValue;\n      if (this.config) {\n        this.config.title = stepTitle;\n      }\n    }\n    \n    if (changes['duration'] && this.config) {\n      this.config.duration = changes['duration'].currentValue || 0;\n    }\n\n    if (changes['stepDeleted'] && this.config) {\n      this.config.stepDeleted = changes['stepDeleted'].currentValue;\n    }\n\n    if (changes['stepNumber'] && this.config) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n\n    if (changes['expanded'] && this.expanded !== undefined) {\n      console.log('expanded changed in loop-step', this.id, changes['expanded']);\n      this.isExpanded = this.expanded;\n      if (this.config) {\n        this.config.expanded = this.expanded;\n      }\n    }\n\n    // Update config when inputs change\n    if (changes['iterations'] || changes['selectedIterationId'] || changes['nestedSteps']) {\n      if (this.config) {\n        this.config.iterations = this.iterations;\n        this.config.selectedIterationId = this.selectedIterationId;\n        this.config.nestedSteps = this.nestedSteps || [];\n      }\n    }\n\n    // // Initialize loading state when nested steps are added and step is expanded\n    // if (changes['nestedSteps'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n    //   this.loadingSteps.clear();\n    //   this.nestedSteps.forEach(step => {\n    //     const stepId = step.testStepResultId || step.id;\n    //     if (stepId) {\n    //       this.loadingSteps.add(String(stepId));\n    //     }\n    //   });\n    // }\n\n    // Initialize loading state if already expanded when component initializes\n    if (changes['expanded'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n\n    // Also handle when nestedSteps is passed via children property (for step-renderer compatibility)\n    if (changes['nestedSteps'] && this.nestedSteps) {\n      // Ensure config is updated with nestedSteps\n      if (this.config) {\n        this.config.nestedSteps = this.nestedSteps;\n      }\n    }\n\n    // If nestedSteps is not provided but children is (from step-renderer), use children\n    if (!this.nestedSteps && (this.config as any).children && Array.isArray((this.config as any).children)) {\n      this.nestedSteps = (this.config as any).children;\n      if (this.config) {\n        this.config.nestedSteps = this.nestedSteps;\n      }\n    }\n\n    if (this.isLive) {\n      // Update subSteps array when new ones are added\n      if (changes['nestedSteps']) {\n        const previousSubStepsCount = changes['nestedSteps'].previousValue?.length || 0;\n        const currentSubStepsCount = (this.nestedSteps || []).length;\n\n        // Sub-steps are appended externally, so we just update the config\n        if (this.config) {\n          this.config.nestedSteps = this.nestedSteps || [];\n        }\n        \n        // Auto-expand if step is running and new subSteps are added (logs coming in)\n        if (!changes['nestedSteps'].firstChange && \n            this.status === 'running' && \n            currentSubStepsCount > previousSubStepsCount &&\n            this.hasSubSteps && \n            !this.isExpanded && \n            !this.userManuallyClosed) {\n          this.autoExpand();\n        }\n      }\n\n      // Handle status changes - auto-expand when step starts executing\n      if (changes['status'] && !changes['status'].firstChange) {\n        const newStatus = changes['status'].currentValue;\n        const oldStatus = changes['status'].previousValue;\n\n        // Auto-expand when status changes to 'running' and has subSteps (or will have soon)\n        if (newStatus === 'running' && oldStatus !== 'running' && !this.userManuallyClosed) {\n          // Expand immediately if already has subSteps, or wait for them\n          if (this.hasSubSteps) {\n            this.autoExpand();\n          }\n        }\n\n        this.previousStatus = newStatus;\n      }\n    }\n  }\n\n  private autoExpand(): void {\n    if (!this.isExpanded && this.hasSubSteps) {\n      this.isExpanded = true;\n      this.userManuallyClosed = false;\n      this.toggleExpanded.emit(true);\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.nestedSteps !== undefined && this.nestedSteps.length > 0;\n  }\n\n  override toggle(): void {\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n    // Emit event when expanding (transitioning from collapsed to expanded)\n    if (!wasExpanded && this.isExpanded) {\n      this.onExpand.emit();\n      // If this step has children (hasChild is true) and onExpandHandler is provided, call it to fetch children\n      if (this.onExpandHandler && this.config && this.hasChild) {\n        // Create a step config object for the handler with hasChild property\n        const stepConfig = {\n          ...this.config,\n          hasChild: true,\n          expanded: true, // Ensure expanded is set\n          testStepType: (this.config as any).testStepType || (this.loopType === 'for' ? 'FOR_LOOP' : 'WHILE_LOOP'),\n          children: this.config.nestedSteps || [],\n          testStepResultId: this.testStepResultId,\n          id: this.id\n        } as ExecutionStepConfig & { hasChild: boolean; testStepType?: string; children?: any[]; expanded?: boolean };\n        this.onExpandHandler(stepConfig);\n      }\n      // Initialize loading state for all nested steps\n      if (this.nestedSteps && this.nestedSteps.length > 0) {\n        this.loadingSteps.clear();\n        this.nestedSteps.forEach(step => {\n          const stepId = step.testStepResultId || step.id;\n          if (stepId) {\n            this.loadingSteps.add(String(stepId));\n          }\n        });\n      }\n    } else if (!this.isExpanded) {\n      // Clear loading state when collapsing\n      this.loadingSteps.clear();\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n    if (this.isDebug && this.step) (this.step as any).expanded = this.isExpanded;\n  }\n\n  // Check if a step is still loading\n  isNestedStepLoading(step: ExecutionStepConfig): boolean {\n    const stepId = step.testStepResultId || step.id;\n    return stepId ? this.loadingSteps.has(String(stepId)) : false;\n  }\n\n  // Mark a step as loaded (called when step-renderer is ready)\n  markStepLoaded(step: ExecutionStepConfig): void {\n    const stepId = step.testStepResultId || step.id;\n    if (stepId) {\n      this.loadingSteps.delete(String(stepId));\n    }\n  }\n\n  selectDefaultIteration(): void {\n    // First, try to use selectedIterationId if provided\n    if (this.selectedIterationId) {\n      const found = this.iterations.find(\n        iter => iter.id === this.selectedIterationId\n      );\n      if (found) {\n        // Reset processing when switching to a different iteration\n        if (this.isLive && this.selectedIteration && this.selectedIteration.id !== found.id) {\n          this.resetLiveProcessing();\n        }\n        this.selectedIteration = found;\n        // Process live sub-steps when iteration is selected\n        if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n          this.processLiveSubSteps();\n        }\n        return;\n      }\n    }\n\n    // If user has manually selected something, preserve it\n    if (this.userSelectedIterationId) {\n      const found = this.iterations.find(iter => iter.id === this.userSelectedIterationId);\n      if (found) {\n        // Reset processing when switching to a different iteration\n        if (this.isLive && this.selectedIteration && this.selectedIteration.id !== found.id) {\n          this.resetLiveProcessing();\n        }\n        this.selectedIteration = found;\n        // Process live sub-steps when iteration is selected\n        if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n          this.processLiveSubSteps();\n        }\n        return;\n      }\n    }\n\n    // Apply default based on defaultIteration setting\n    if (this.defaultIteration === 'last' && this.iterations.length > 0) {\n      const lastIteration = this.iterations[this.iterations.length - 1];\n      // Reset processing when switching to a different iteration\n      if (this.isLive && this.selectedIteration && this.selectedIteration.id !== lastIteration.id) {\n        this.resetLiveProcessing();\n      }\n      this.selectedIteration = lastIteration;\n      // Set userSelectedIterationId to track the default selection\n      this.userSelectedIterationId = lastIteration.id;\n      // Process live sub-steps when iteration is selected\n      if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processLiveSubSteps();\n      } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processSubStepsForRunResult();\n      }\n    } else if (this.iterations.length > 0) {\n      const firstIteration = this.iterations[0];\n      // Reset processing when switching to a different iteration\n      if (this.isLive && this.selectedIteration && this.selectedIteration.id !== firstIteration.id) {\n        this.resetLiveProcessing();\n      }\n      this.selectedIteration = firstIteration;\n      // Set userSelectedIterationId to track the default selection\n      this.userSelectedIterationId = firstIteration.id;\n      // Process live sub-steps when iteration is selected\n      if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processLiveSubSteps();\n      } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processSubStepsForRunResult();\n      }\n    }\n  }\n\n  handleIterationChange(iteration: LoopIteration): void {\n    console.log(\"ITERATION CHANGE\", this.config ,iteration)\n    // Reset processing when switching iterations\n    if (this.isLive && this.selectedIteration && this.selectedIteration.id !== iteration.id) {\n      this.resetLiveProcessing();\n    }\n    // Store the user's manual selection\n    this.selectedIteration = iteration;\n    this.userSelectedIterationId = iteration.id;\n\n    if (this.isLive) {\n      const index = this.iterations.findIndex(iter => iter.id === iteration.id);\n\n      if (index > -1 && this.iterationData?.[index] && this.nestedSteps) {\n\n        const updatedNestedSteps: ExecutionStepConfig[] =\n          this.nestedSteps.map(step => {\n            const updatedSubSteps = this.iterationData[index][step.id];\n            step.duration = updatedSubSteps.reduce((acc: number, subStep: any) => acc + subStep?.duration || 0, 0);\n\n            if (updatedSubSteps) {\n              return {\n                ...step,\n                subSteps: [...updatedSubSteps]\n              };\n            }\n\n            return { ...step };\n          });\n\n        this.nestedSteps = updatedNestedSteps;\n\n        if (this.config) {\n          this.config = {\n            ...this.config,\n            nestedSteps: updatedNestedSteps\n          };\n        }\n      }\n\n      // Process live sub-steps when iteration changes\n      if (this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processLiveSubSteps();\n      } else if (!this.isLive && this.selectedIteration && this.selectedIteration.subSteps) {\n        this.processSubStepsForRunResult();\n      }\n    }\n    // Emit the event with the iteration ID\n    this.onIterationChange.emit(iteration.id);\n  }\n\n  compareIteration(a: LoopIteration, b: LoopIteration): boolean {\n    return a && b ? a.id === b.id : a === b;\n  }\n\n  getLoopTypeBadges(): string[] {\n    const badges: string[] = ['LOOP'];\n    if (this.loopType === 'for') {\n      badges.push('FOR');\n    } else if (this.loopType === 'while') {\n      badges.push('WHILE');\n    }\n    return badges;\n  }\n\n  getIterationLabel(iteration: LoopIteration): string {\n    return iteration.label;\n  }\n\n  onViewAllIterationsClick(event: Event): void {\n    event.preventDefault();\n    this.onViewAllIterations.emit();\n  }\n\n  onAddStepInsideLoop(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.addStepInsideLoop.emit(this.step ?? this.config);\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    return this.selectedIteration?.subSteps || [];\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.onEditStepHandler && this.step) {\n      this.onEditStepHandler(this.step);\n    } else {\n      this.editStep.emit();\n    }\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event) {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if (!this.isExpanded) {\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  // Helper method to check if a step is a step-group with hasChild\n  isNestedStepGroupWithChildren(step: ExecutionStepConfig): boolean {\n    return step.displayType === 'step-group' && !!(step as any).hasChild;\n  }\n\n  // Helper method to get groupName from step config\n  getGroupName(step: ExecutionStepConfig): string {\n    return (step as StepGroupConfig).groupName || '';\n  }\n\n  // Helper method to get steps from step config\n  getSteps(step: ExecutionStepConfig): ExecutionStepConfig[] {\n    const stepGroup = step as StepGroupConfig;\n    return stepGroup.steps || (step as any).children || [];\n  }\n\n  // Helper method to check if a step is a condition step\n  isNestedConditionStep(step: ExecutionStepConfig): boolean {\n    const stepType = (step as any).testStepType || step.displayType;\n    return stepType === 'CONDITION_IF' || stepType === 'CONDITION_ELSE' || \n           stepType === 'CONDITION_ELSE_IF' || stepType === 'CONDITION_ELSEIF' ||\n           stepType === 'condition';\n  }\n\n  // Helper method to check if a step is a loop step\n  isNestedLoopStep(step: ExecutionStepConfig): boolean {\n    const stepType = (step as any).testStepType || step.displayType;\n    return stepType === 'FOR_LOOP' || stepType === 'WHILE_LOOP' || stepType === 'loop';\n  }\n\n  // Helper method to get loop type from step config\n  getLoopType(step: ExecutionStepConfig): 'for' | 'while' | undefined {\n    const stepType = (step as any).testStepType || step.displayType;\n    if (stepType === 'FOR_LOOP' || (step as LoopStepConfig).loopType === 'for') {\n      return 'for';\n    } else if (stepType === 'WHILE_LOOP' || (step as LoopStepConfig).loopType === 'while') {\n      return 'while';\n    }\n    return (step as LoopStepConfig).loopType;\n  }\n\n  // Helper method to get iterations from step config\n  getLoopIterations(step: ExecutionStepConfig): any[] {\n    // Use handler if available, otherwise use config\n    if (this.getLoopIterationsHandler) {\n      return this.getLoopIterationsHandler(step);\n    }\n    const loopStep = step as LoopStepConfig;\n    return loopStep.iterations || [];\n  }\n\n  // Helper method to get nested steps from loop step config\n  getLoopNestedSteps(step: ExecutionStepConfig): ExecutionStepConfig[] {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.nestedSteps || (step as any).children || [];\n  }\n\n  // Helper method to handle nested loop step expansion\n  handleLoopStepExpand(step: ExecutionStepConfig): void {\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  // Helper method to handle nested loop step iteration change\n  handleLoopStepIterationChange(step: ExecutionStepConfig, iterationId: string): void {\n    // This would typically be handled by the parent component\n    // For now, we just emit the expand event\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  // Helper method to get step title\n  getStepTitle(step: ExecutionStepConfig): string {\n    return (step as any).action || step.title || '';\n  }\n\n  // Helper method to get step status\n  getStepStatus(step: ExecutionStepConfig): StepStatus {\n    const result = (step as any).result;\n    if (result) {\n      const resultLower = result.toLowerCase();\n      if (resultLower === 'success' || resultLower === 'passed') {\n        return 'success';\n      } else if (resultLower === 'failure' || resultLower === 'failed') {\n        return 'failed';\n      } else if (resultLower === 'pending' || resultLower === 'not-executed') {\n        return 'pending';\n      } else if (resultLower === 'running') {\n        return 'running';\n      }\n    }\n    return step.status || 'pending';\n  }\n\n  // Helper method to get step duration\n  getStepDuration(step: ExecutionStepConfig): number {\n    return (step as any).duration || step.duration || 0;\n  }\n\n  // Helper methods for condition step properties\n  getConditionStepDuration(step: ExecutionStepConfig): number {\n    const duration = this.getStepDuration(step);\n    if (this.convertMsToSecondsHandler) {\n      return this.convertMsToSecondsHandler(duration);\n    }\n    return duration;\n  }\n\n  getConditionStepExpanded(step: ExecutionStepConfig): boolean {\n    if (this.isStepExpandedHandler) {\n      return this.isStepExpandedHandler(step);\n    }\n    return step.expanded || false;\n  }\n\n  getConditionStepText(step: ExecutionStepConfig): string {\n    return (step as any).action || step.title || '';\n  }\n\n  getConditionStepBranches(step: ExecutionStepConfig): ConditionBranch[] {\n    if (this.getConditionBranchesHandler) {\n      return this.getConditionBranchesHandler(step);\n    }\n    return [];\n  }\n\n  getConditionStepLoading(step: ExecutionStepConfig): boolean {\n    if (this.isStepLoadingHandler) {\n      return this.isStepLoadingHandler(step);\n    }\n    return false;\n  }\n\n  handleConditionStepExpand(step: ExecutionStepConfig): void {\n    if (this.onExpandHandler) {\n      this.onExpandHandler(step);\n    }\n  }\n\n  getConditionStepFailureDetails(step: ExecutionStepConfig): any {\n    if (this.formatFailureDetailsHandler) {\n      return this.formatFailureDetailsHandler(step);\n    }\n    return undefined;\n  }\n\n  getConditionStepSelfHealAnalysis(step: ExecutionStepConfig): any {\n    if (this.getSelfHealAnalysisHandler) {\n      return this.getSelfHealAnalysisHandler(step);\n    }\n    return undefined;\n  }\n\n  handleConditionStepSelfHealAction(event: any): void {\n    if (this.onSelfHealActionHandler) {\n      this.onSelfHealActionHandler(event);\n    }\n  }\n\n  handleConditionStepMakeBaseline(event: any): void {\n    if (this.onMakeCurrentBaselineHandler) {\n      this.onMakeCurrentBaselineHandler(event);\n    }\n  }\n\n  handleConditionStepUploadBaseline(event: any): void {\n    if (this.onUploadBaselineHandler) {\n      this.onUploadBaselineHandler(event);\n    }\n  }\n\n  handleConditionStepAnalyze(): void {\n    if (this.onAnalyzeHandler) {\n      this.onAnalyzeHandler();\n    }\n  }\n\n  handleConditionStepViewLogs(): void {\n    if (this.onViewFullLogsHandler) {\n      this.onViewFullLogsHandler();\n    }\n  }\n\n  // Helper methods to safely access LoopStepConfig properties\n  getLoopSelectedIterationId(step: ExecutionStepConfig): string | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.selectedIterationId;\n  }\n\n  getLoopDefaultIteration(step: ExecutionStepConfig): 'first' | 'last' | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.defaultIteration || 'last';\n  }\n\n  getLoopShowViewAllIterations(step: ExecutionStepConfig): boolean | undefined {\n    const loopStep = step as LoopStepConfig;\n    return loopStep.showViewAllIterations;\n  }\n\n  // Check if this step is currently loading nested children\n  isStepLoading(): boolean {\n    if (this.isStepLoadingHandler && this.config) {\n      return this.isStepLoadingHandler(this.config);\n    }\n    return this.isLoading || false;\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  ngDoCheck(): void {\n    if (!this.isLive || !this.selectedIteration) return;\n    const currentLength = (this.selectedIteration.subSteps || []).length;\n    // Reset if iteration changed (detected by checking if we have a different iteration's subSteps)\n    if (this.lastProcessedIndex > 0 && currentLength < this.lastProcessedIndex) {\n      // Likely switched to a different iteration, reset\n      this.resetLiveProcessing();\n    }\n    if (currentLength !== this.lastProcessedIndex) {\n      this.processLiveSubSteps();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearCountdownTimer();\n  }\n\n  private processLiveSubSteps(): void {\n    if (!this.selectedIteration || !this.selectedIteration.subSteps) {\n      this.resetLiveProcessing();\n      return;\n    }\n\n    const allSubSteps = (this.selectedIteration.subSteps || []) as any[];\n\n    // Reset if subSteps were cleared or replaced with fewer entries\n    if (allSubSteps.length < this.lastProcessedIndex) {\n      this.resetLiveProcessing();\n    }\n\n    for (let i = this.lastProcessedIndex; i < allSubSteps.length; i++) {\n      const subStep = allSubSteps[i];\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n      const status: string = (subStep?.status || '').toLowerCase();\n\n      if (uiType === 'WAIT_FOR_LOCATOR') {\n        // Create a single grouped entry with a countdown; absorbs FIND_LOCATOR and LOCATOR_FOUND\n        const timeoutSeconds = typeof subStep.value === 'number'\n          ? subStep.value\n          : (subStep.value ? parseFloat(subStep.value) : 30);\n\n        this.clearCountdownTimer();\n\n        this.waitLocatorGroupEntry = {\n          ...subStep,\n          remainingSeconds: timeoutSeconds,\n          status: 'running'\n        };\n        this.addDurationToWaitLocatorGroupEntry(subStep);\n        this.processedSubSteps.push(this.waitLocatorGroupEntry);\n\n        // Tick down every second\n        this.countdownIntervalId = setInterval(() => {\n          if (this.waitLocatorGroupEntry) {\n            this.waitLocatorGroupEntry.remainingSeconds = Math.max(0, this.waitLocatorGroupEntry.remainingSeconds - 1);\n            if (this.waitLocatorGroupEntry.remainingSeconds <= 0) {\n              this.waitLocatorGroupEntry.status = 'failed';\n              this.waitLocatorGroupEntry.remainingSeconds = null;\n              this.clearCountdownTimer();\n              this.waitLocatorGroupEntry = null;\n            }\n          }\n        }, 1000);\n\n      } else if (uiType === 'FIND_LOCATOR') {\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else if (this.waitLocatorGroupEntry) {\n          // Update the single group entry's text so the user sees progress\n          const newText = subStep.description || subStep.text || subStep.title;\n          if (newText) this.waitLocatorGroupEntry.description = newText;\n          this.addDurationToWaitLocatorGroupEntry(subStep);\n        } else {\n          // No active group – push FIND_LOCATOR normally once countdown is cleared\n          this.processedSubSteps.push({ ...subStep });\n        }\n\n      } else if (uiType === 'LOCATOR_FOUND') {\n\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else {\n          // Sequence complete – update group entry to show LOCATOR_FOUND text as success\n          if (this.waitLocatorGroupEntry) {\n            const newText = subStep.description || subStep.text || subStep.title;\n            if (newText) this.waitLocatorGroupEntry.description = newText;\n            this.waitLocatorGroupEntry.status = 'success';\n            this.addDurationToWaitLocatorGroupEntry(subStep);\n            this.waitLocatorGroupEntry.remainingSeconds = null;\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          } else {\n            // No active group – push LOCATOR_FOUND normally\n            this.processedSubSteps.push({ ...subStep });\n          }\n        }\n\n      } else if (uiType === 'AI_AUTO_HEAL') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before starting AI auto-heal\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Add single loading entry; will be replaced by AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n        this.aiAutoHealGroupEntry = {\n          ...subStep,\n          description: subStep.description || subStep.text || 'AI auto-heal started',\n          status: 'running',\n          uiType: 'AI_AUTO_HEAL'\n        };\n        this.processedSubSteps.push(this.aiAutoHealGroupEntry);\n\n      } else if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before handling AI auto-heal result\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Remove loading entry and add TWO separate entries: value and reasoning (like AI_ANSWER)\n        if (this.aiAutoHealGroupEntry) {\n          this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.aiAutoHealGroupEntry);\n          this.aiAutoHealGroupEntry = null;\n        }\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = subStep.text || subStep.description || (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubSteps.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedSubSteps.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n\n      } else {\n        // Any failed log while a countdown is active – resolve it as failed\n        if ((status === 'failed' || status === 'failure') && this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n        this.processedSubSteps.push(subStep);\n      }\n    }\n\n    this.lastProcessedIndex = allSubSteps.length;\n  }\n\n  private resetLiveProcessing(): void {\n    this.clearCountdownTimer();\n    this.processedSubSteps = [];\n    this.lastProcessedIndex = 0;\n    this.waitLocatorGroupEntry = null;\n    this.aiAutoHealGroupEntry = null;\n  }\n\n  private clearCountdownTimer(): void {\n    if (this.countdownIntervalId !== null) {\n      clearInterval(this.countdownIntervalId);\n      this.countdownIntervalId = null;\n    }\n  }\n\n  private addDurationToWaitLocatorGroupEntry(subStep: any): void {\n    if (!this.waitLocatorGroupEntry) {\n      return;\n    }\n\n    const rawDuration = subStep?.duration;\n    let delta = 0;\n    if (typeof rawDuration === 'number') {\n      delta = rawDuration;\n    } else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {\n      const parsed = parseFloat(rawDuration);\n      delta = Number.isFinite(parsed) ? parsed : 0;\n    }\n\n    if (delta <= 0) {\n      return;\n    }\n\n    const currentRaw = this.waitLocatorGroupEntry.duration;\n    let current = 0;\n    if (typeof currentRaw === 'number') {\n      current = currentRaw;\n    } else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {\n      const parsedCurrent = parseFloat(currentRaw);\n      current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;\n    }\n\n    this.waitLocatorGroupEntry.duration = current + delta;\n  }\n\n  private processSubStepsForRunResult(): void {\n    if (!this.selectedIteration || !this.selectedIteration.subSteps) {\n      this.processedSubStepsForRunResult = [];\n      return;\n    }\n\n    const allSubSteps = (this.selectedIteration.subSteps || []) as any[];\n    this.processedSubStepsForRunResult = [];\n\n    for (const subStep of allSubSteps) {\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n\n      // Split AI_AUTO_HEAL_SUCCESS/FAILED into two entries\n      if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubStepsForRunResult.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n      } else {\n        const status = (subStep?.status ?? '').toString().toLowerCase();\n        const isFailed = status === 'failed' || status === 'failure';\n        const isLocatorStep = uiType === 'WAIT_FOR_LOCATOR' || uiType === 'FIND_LOCATOR' || uiType === 'LOCATOR_FOUND';\n        if (isLocatorStep && isFailed) {\n          const baseDesc = subStep?.description ?? subStep?.text ?? subStep?.title ?? '';\n          const notFoundSuffix = ' - Element not found';\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: (baseDesc ? baseDesc + notFoundSuffix : notFoundSuffix.trim())\n          });\n        } else {\n          this.processedSubStepsForRunResult.push(subStep);\n        }\n      }\n    }\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n      <!-- Success -->\n      <svg *ngIf=\"status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Failed -->\n      <svg *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Pending -->\n      <svg *ngIf=\"status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Running -->\n      <svg *ngIf=\"status.toLowerCase() === 'running'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#3B82F6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      \n        <span *ngIf=\"status.toLowerCase() === 'skipped'\"  class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n          skip_next\n        </span>\n      <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    </div>\n\n    <!-- Loop Icon -->\n    <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/><path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title\"></span>\n      </span>\n      \n      <!-- Loop Type Badges -->\n      <span *ngFor=\"let badge of getLoopTypeBadges()\" \n        class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD] cqa-text-[10px] cqa-leading-[15px]\">\n        {{ badge }}\n      </span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" #addStepMenuTrigger=\"matMenuTrigger\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" #stepMoreMenuTrigger=\"matMenuTrigger\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\">\n    <!-- Iteration Selector -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-py-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373]\" *ngIf=\"!isLive || (isLive && config?.iterations !== undefined)\">\n      <label>Iteration</label>\n      <div class=\"cqa-relative cqa-w-full cqa-max-w-[156px]\">\n        <!-- Status indicator for selected iteration -->\n        <div *ngIf=\"selectedIteration && config?.iterations && config?.iterations?.length > 0\" class=\"cqa-absolute cqa-left-[10px] cqa-top-1/2 cqa-transform cqa--translate-y-1/2 cqa-pointer-events-none cqa-z-10\">\n          <svg *ngIf=\"selectedIteration.status === 'success'\" width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#00A63E\"/></svg>\n          <svg *ngIf=\"selectedIteration.status === 'failed'\" width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#EF4444\"/></svg>\n          <svg *ngIf=\"selectedIteration.status === 'pending'\" width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#9CA3AF\"/></svg>\n          <svg *ngIf=\"selectedIteration.status === 'running'\" width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"3\" cy=\"3\" r=\"3\" fill=\"#3B82F6\"/></svg>\n        </div>\n        <select\n          class=\"cqa-pl-[22px] cqa-pr-6 cqa-py-[5px] cqa-w-full cqa-border cqa-border-[#E5E5E5] cqa-rounded-md cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#FAFAFA] cqa-text-black-100 cqa-appearance-none\"\n          [(ngModel)]=\"selectedIteration\"\n          (ngModelChange)=\"handleIterationChange($event)\"\n          [compareWith]=\"compareIteration\"\n          [disabled]=\"(isLive && (status === 'running' || status === 'RUNNING'))\">\n          <option *ngIf=\"!config?.iterations || config?.iterations?.length === 0\" value=\"\" disabled>\n            No iterations available\n          </option>\n          <option *ngFor=\"let iteration of config.iterations\" [ngValue]=\"iteration\">\n            {{ getIterationLabel(iteration) }}\n          </option>\n        </select>\n        <!-- Dropdown arrow -->\n        <div class=\"cqa-absolute cqa-right-2 cqa-top-1/2 cqa-transform cqa--translate-y-1/2 cqa-pointer-events-none\">\n          <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 1L5 5L9 1\" stroke=\"#9CA3AF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </div>\n      </div>\n      <span class=\"cqa-ml-auto\" *ngIf=\"config?.iterations && config?.iterations?.length > 0\">\n        Default: {{ config.defaultIteration === 'last' ? 'last iteration' : 'first iteration' }}\n      </span>\n    </div>\n\n    <!-- Selected Iteration Sub-steps -->\n    <div *ngIf=\"selectedIteration && selectedIteration.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-py-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n      <!-- Single loop: render all entries in chronological order -->\n      <ng-container *ngFor=\"let subStep of (isLive ? processedSubSteps : processedSubStepsForRunResult)\">\n        <!-- AI_AUTO_HEAL_SUCCESS/FAILED: render with ai-agent-step style (both live and run result screens) -->\n        <cqa-ai-logs-with-reasoning\n          *ngIf=\"$any(subStep).isAiAutoHealResult\"\n          [status]=\"subStep.status\"\n          [text]=\"$any(subStep).text || subStep?.value\"\n          [description]=\"$any(subStep).description || subStep?.text || subStep?.value\"\n          [reasoning]=\"$any(subStep).reasoning || subStep?.reasoning\"\n          [duration]=\"subStep.duration\">\n        </cqa-ai-logs-with-reasoning>\n\n        <!-- Regular sub-steps -->\n        <div\n          *ngIf=\"!$any(subStep).isAiAutoHealResult\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n          \n          <!-- Sub-step Status Icon -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Failure -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Pending -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Running - Show spinner (also used for active WAIT_FOR_LOCATOR countdown in live mode) -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n            <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n          </div>\n\n          <div class=\"cqa-flex cqa-items-center\" *ngIf=\"subStep?.status?.toLowerCase() === 'skipped'\">\n            <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n              skip_next\n            </span>\n          </div>\n\n          <!-- Sub-step Description -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"white-space: pre-line; word-break: break-word;\">\n            {{ $any(subStep).description || $any(subStep).text }}\n            <!-- Countdown for active WAIT_FOR_LOCATOR in live mode -->\n            <span *ngIf=\"isLive && $any(subStep).remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\">({{ $any(subStep).remainingSeconds }}s remaining)</span>\n          </span>\n\n          <!-- Sub-step Duration -->\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n            {{ formatDuration(subStep.duration) }}\n          </span>\n        </div>\n      </ng-container>\n    </div>\n\n    <!-- Nested Steps -->\n    <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1 cqa-nested-steps-container\" style=\"border-bottom: '1px solid #F3F4F6'\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\">Nested steps</div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n        <!-- Loading indicator when nested steps are being loaded -->\n        <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n             class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n          <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n            <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n          </svg>\n          <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n        </div>\n        <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n          <!-- Wrapper to show skeleton while step-renderer is loading -->\n          <div\n            class=\"cqa-step-renderer-wrapper\"\n            [attr.id]=\"'exc-' + (step?.uniqueId || step.id)\"\n            [class.loaded]=\"!isNestedStepLoading(step)\">\n            <!-- Loading skeleton overlay -->\n            <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n              <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n            </div> -->\n            <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n            <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n            <cqa-step-renderer \n              [step]=\"step\"\n              [stepNumber]=\"step.stepNumber || (stepNumber + '.' + (i + 1))\"\n              [onExpandHandler]=\"onExpandHandler\"\n              [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n              [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n              [isStepLoadingHandler]=\"isStepLoadingHandler\"\n              [isStepExpandedHandler]=\"isStepExpandedHandler\"\n              [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n              [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n              [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n              [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n              [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n              [formatActionsHandler]=\"formatActionsHandler\"\n              [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n              [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n              [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n              [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n              [onAnalyzeHandler]=\"onAnalyzeHandler\"\n              [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n              [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n              [onStepClickHandler]=\"onStepClickHandler\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [onDownloadHandler]=\"onDownloadHandler\"\n              [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n              [onTextCopiedHandler]=\"onTextCopiedHandler\"\n              [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n              [downloadingStepId]=\"downloadingStepId\"\n              [isUploadingBaseline]=\"isUploadingBaseline\"\n              [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n              [selectedIterationId]=\"step?.selectedIterationId || ''\"\n            [isLive]=\"isLive\"\n            [isDebug]=\"isDebug\"\n            [canEditSteps]=\"canEditSteps\"\n            [parentSkipped]=\"selfDebugDisabled\"\n            [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n            [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n            [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n            [onEditStepHandler]=\"onEditStepHandler\"\n            [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n            [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n            [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n            [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n            [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n            [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n            [onAddElseIfBranchAtHandler]=\"onAddElseIfBranchAtHandler\"\n            [onAddElseBranchHandler]=\"onAddElseBranchHandler\"\n            [onEditBranchConditionHandler]=\"onEditBranchConditionHandler\"\n              (addStepInsideLoop)=\"addStepInsideLoop.emit($event)\"\n              (componentReady)=\"markStepLoaded(step)\">\n            </cqa-step-renderer>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- + Add step inside loop (debug only, hidden inside step groups) -->\n    <div *ngIf=\"isDebug && canEditSteps && !step?.isStepGroupChildren\" class=\"cqa-ml-9 cqa-py-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n      <button type=\"button\" (click)=\"onAddStepInsideLoop($event)\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-bg-transparent cqa-border-0 cqa-cursor-pointer cqa-p-0 cqa-no-underline hover:cqa-opacity-90 focus:cqa-outline-none\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M7 2V12M2 7H12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n        </svg>\n        <span>Add step inside loop</span>\n      </button>\n    </div>\n\n    <!-- View All Iterations Link -->\n    <div *ngIf=\"config.showViewAllIterations && !isLive\" class=\"cqa-flex cqa-justify-end cqa-px-3 cqa-py-[10px]\">\n      <a href=\"#\" (click)=\"onViewAllIterationsClick($event)\" class=\"cqa-text-[10px] cqa-leading-[15px] cqa-no-underline cqa-text-primary cqa-font-semibold cqa-flex cqa-items-center cqa-gap-1\">\n        View all iterations\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.63636 11.267L6.75852 10.3977L9.38778 7.76847H3V6.49858H9.38778L6.75852 3.87358L7.63636 3L11.7699 7.13352L7.63636 11.267Z\" fill=\"#3F43EE\"/></svg>\n      </a>\n    </div>\n\n      <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\"\n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton &&showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [testStepResultId]=\"testStepResultId\"\n      [timingBreakdown]=\"timingBreakdown\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, OnChanges, Output, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { ConditionStepConfig, ConditionBranch, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-condition-step',\n  templateUrl: './condition-step.component.html',\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class ConditionStepComponent extends BaseStepComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() conditionText!: string;\n  @Input() branches: ConditionBranch[] = [];\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() isLoading?: boolean;\n  @Input() nestedSteps?: ExecutionStepConfig[] = [];\n  @Input() hasChild?: boolean;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Output() addStepInsideLoop = new EventEmitter<any>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() ifChild?: any; // ifChild data from API - if null and hasChild is true, we need to call API\n  @Input() activeBranchStepId?: string | number; // ID of the currently active/selected branch step\n\n  // Handler function to pass down to nested child step groups for recursive expansion\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Edit on nested steps is forwarded with the step config. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, used to get add-step menu options per nested step; otherwise addStepMenuOptions is used for all. Supports arbitrary nesting. */\n  @Input() getAddStepMenuOptionsForNested?: (step: ExecutionStepConfig) => AddStepMenuOption[];\n  /** When provided, used to get step-more menu options per nested step; otherwise stepMoreMenuOptions is used for all. Supports arbitrary nesting. */\n  @Input() getStepMoreMenuOptionsForNested?: (step: ExecutionStepConfig) => StepMoreMenuOption[];\n\n  // Handler functions for condition steps\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => ConditionBranch[];\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Output() onBranchClickEvent = new EventEmitter<ConditionBranch>();\n  @Output() onExpand = new EventEmitter<void>();\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive: boolean = false;\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  showFailedStepDetails: boolean = false;\n\n  /** Show debug icon only when this step has no child steps (icon is shown on child steps instead). */\n  /** Show debug icon when debug mode is on (shown on parent and all child steps). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    // Always hide duplicate option for this container step\n    let filtered = base.filter(opt => opt.id !== 'duplicate');\n    \n    const stepRef: any = this.step;\n    if (!stepRef) return filtered;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return filtered;\n\n    return filtered.filter(opt => opt.id !== 'delete');\n  }\n  \n  /** True when this condition-step's own breakpoint is disabled (used to propagate parentSkipped to children). */\n  get selfDebugDisabled(): boolean {\n    return !!(this.step as any)?.debugPointDisabled || !!this.parentSkipped || this.isStepDeleted;\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: ConditionStepConfig;\n\n  // Track which steps are still loading to show skeleton\n  loadingSteps: Set<string> = new Set();\n\n  constructor(private cdr: ChangeDetectorRef) {\n    super();\n  }\n\n  override ngOnInit(): void {\n    // Always determine active branch from executed branch (for live mode)\n    if (this.isLive) {\n      this.determineActiveBranch();\n    }\n\n    // Filter nested steps based on active branch (derived from executed branch)\n    const stepsToUse = this.nestedSteps || [];\n\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'condition',\n      conditionText: this.conditionText,\n      branches: this.branches,\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      nestedSteps: stepsToUse,\n    } as ConditionStepConfig;\n\n    super.ngOnInit();\n\n    // Initialize loading state if already expanded\n    if (this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Only process changes if config has been initialized (ngOnInit has been called)\n    if (!this.config) {\n      return;\n    }\n\n    // Process ifChild if it's provided and branches need to be updated\n    if (changes['ifChild'] && this.ifChild && Array.isArray(this.ifChild) && this.ifChild.length > 0) {\n      // Process ifChild to update branches\n      // This ensures branches reflect the executed condition from ifChild\n      if (this.getConditionBranchesHandler) {\n        // Use handler to get updated branches from ifChild\n        const stepWithIfChild = {\n          ...this.config,\n          ifChild: this.ifChild\n        } as any;\n        const updatedBranches = this.getConditionBranchesHandler(stepWithIfChild);\n        if (updatedBranches && updatedBranches.length > 0) {\n          this.branches = updatedBranches;\n          this.config.branches = updatedBranches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        }\n      }\n    }\n\n    if (changes['stepNumber']) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n\n    if (this.isLive) {\n      // Update branches if changed - create deep copy to ensure change detection works\n      if (changes['branches'] && this.branches !== undefined) {\n        // Create a deep copy to ensure Angular change detection picks up nested changes\n        this.config.branches = this.branches.map((branch: any) => ({\n          ...branch,\n          subSteps: branch.subSteps ? [...branch.subSteps] : []\n        }));\n      } else if (this.branches !== undefined && this.config.branches !== this.branches) {\n        // Fallback: check if branches changed even if ngOnChanges didn't detect it\n        // This handles cases where nested subSteps were updated\n        const currentSubStepsCount = (this.config.branches || []).reduce((sum: number, b: any) => sum + (b.subSteps?.length || 0), 0);\n        const newSubStepsCount = (this.branches || []).reduce((sum: number, b: any) => sum + (b.subSteps?.length || 0), 0);\n\n        if (currentSubStepsCount !== newSubStepsCount ||\n          this.config.branches !== this.branches) {\n          this.config.branches = this.branches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        }\n      }\n\n      // Update other properties that might change\n      if (changes['status'] && this.status !== undefined) {\n        this.config.status = this.status;\n      }\n\n      if (changes['duration'] && this.duration !== undefined) {\n        this.config.duration = this.duration;\n      }\n\n      if (changes['stepDeleted']) {\n        this.config.stepDeleted = this.stepDeleted;\n      }\n\n      if (changes['expanded'] && this.expanded !== undefined) {\n        this.config.expanded = this.expanded;\n        this.isExpanded = this.expanded;\n      }\n\n      if (changes['conditionText'] && this.conditionText !== undefined) {\n        this.config.conditionText = this.conditionText;\n      }\n      // Update active branch if changed - always derive from executed branch\n      if (changes['activeBranchStepId'] || changes['branches']) {\n        // Check if executed branch changed\n        const executedBranchChanged = changes['branches'] && \n          changes['branches'].previousValue && \n          changes['branches'].currentValue &&\n          changes['branches'].previousValue.some((prevBranch: any, index: number) => {\n            const currentBranch = changes['branches'].currentValue[index];\n            return prevBranch?.executed !== currentBranch?.executed;\n          });\n\n        // Always determine active branch from executed branch\n        this.determineActiveBranch();\n      }\n\n      // Filter nested steps based on active branch\n      if (changes['nestedSteps'] || changes['activeBranchStepId']) {\n        this.config.nestedSteps = this.nestedSteps;\n      }\n\n      if (changes['branches']) {\n        this.config.branches = this.branches;\n      }\n    }\n\n    if (changes['stepDeleted']) {\n      this.config.stepDeleted = this.stepDeleted;\n    }\n\n    // Initialize loading state when nested steps are added and step is expanded\n    // if (changes['nestedSteps'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n    //   console.log(\"NESTED STEPS\", this.loadingSteps)\n    //   this.loadingSteps.clear();\n    //   this.nestedSteps.forEach(step => {\n    //     const stepId = step.testStepResultId || step.id;\n    //     if (stepId) {\n    //       this.loadingSteps.add(String(stepId));\n    //     }\n    //   });\n    //   console.log(\"NESTED STEPS\", this.loadingSteps)\n    // }\n\n    // Initialize loading state if already expanded when component initializes\n    if (changes['expanded'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  override toggle(): void {\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n    if (!wasExpanded && this.isExpanded) {\n      this.onExpand.emit();\n      // Always call children API if hasChild is true (like other step types)\n      // If ifChild exists and has an executed condition (result: \"SUCCESS\"), use that condition's testStepResultId\n      if (this.onExpandHandler && this.config && this.hasChild) {\n        const configWithNested = this.config as ConditionStepConfig;\n\n        // Find the executed condition from ifChild (the one with result: \"SUCCESS\")\n        let executedConditionTestStepResultId = this.testStepResultId; // Default to parent's ID\n        let executedConditionHasChild = this.hasChild;\n\n        if (this.ifChild && Array.isArray(this.ifChild) && this.ifChild.length > 0) {\n          const executedCondition = this.ifChild.find((condition: any) =>\n            condition.result === 'SUCCESS' || condition.result === 'SUCCESS'\n          );\n\n          if (executedCondition && executedCondition.testStepResultId) {\n            // Use the executed condition's testStepResultId and hasChild\n            executedConditionTestStepResultId = executedCondition.testStepResultId;\n            executedConditionHasChild = executedCondition.hasChild || false;\n          }\n        }\n\n        // Create a step config object for the handler\n        const stepConfig = {\n          ...this.config,\n          hasChild: executedConditionHasChild,\n          expanded: true, // Ensure expanded is set\n          testStepType: (this.config as any).testStepType || 'CONDITION_IF',\n          children: configWithNested.nestedSteps || [],\n          testStepResultId: executedConditionTestStepResultId, // Use executed condition's ID for API call\n          id: this.id,\n          ifChild: this.ifChild || null, // Pass ifChild for branch execution determination\n          // Store original parent testStepResultId for tracking states and updating parent structure\n          originalTestStepResultId: this.testStepResultId\n        } as ExecutionStepConfig & { originalTestStepResultId?: string | number };\n        this.onExpandHandler(stepConfig);\n      }\n      // Initialize loading state for all nested steps\n      if (this.config.nestedSteps && this.config.nestedSteps.length > 0) {\n        this.loadingSteps.clear();\n        this.config.nestedSteps.forEach(step => {\n          const stepId = step.testStepResultId || step.id;\n          if (stepId) {\n            this.loadingSteps.add(String(stepId));\n          }\n        });\n      }\n    } else if (!this.isExpanded) {\n      // Clear loading state when collapsing\n      this.loadingSteps.clear();\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n  }\n\n  // Check if a step is still loading\n  isNestedStepLoading(step: ExecutionStepConfig): boolean {\n    const stepId = step.testStepResultId || step.id;\n    return stepId ? this.loadingSteps.has(String(stepId)) : false;\n  }\n\n  // Mark a step as loaded (called when step-renderer is ready)\n  markStepLoaded(step: ExecutionStepConfig): void {\n    const stepId = step.testStepResultId || step.id;\n    if (stepId) {\n      this.loadingSteps.delete(String(stepId));\n    }\n  }\n\n  getExecutedBranch(): ConditionBranch | null {\n    return this.branches.find(branch => branch.executed) || null;\n  }\n\n  getUnexecutedBranches(): ConditionBranch[] {\n    return this.branches?.filter(branch => !branch.executed) || [];\n  }\n\n  getSubStepIndex(subSteps: any[], subStep: any): number {\n    return subSteps.indexOf(subStep) + 1;\n  }\n\n  // Check if this step is currently loading nested children\n  isStepLoading(): boolean {\n    if (this.isStepLoadingHandler && this.config) {\n      return this.isStepLoadingHandler(this.config);\n    }\n    return this.isLoading || false;\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    const executedBranch = this.getExecutedBranch();\n    return executedBranch?.subSteps || [];\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) ||\n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if (!this.isExpanded) {\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  get hasExpandableContent(): boolean {\n    const hasBranchSubSteps = this.config.branches?.some(branch =>\n      branch.subSteps && branch.subSteps.length > 0\n    ) || false;\n    const hasNestedSteps = !!(this.config.nestedSteps && this.config.nestedSteps.length > 0);\n    return hasBranchSubSteps || hasNestedSteps;\n  }\n\n  private determineActiveBranch(): void {\n    if (!this.branches || !Array.isArray(this.branches) || this.branches.length === 0) {\n      return;\n    }\n\n    // Always find the executed branch and set activeBranchStepId from it\n    const executedBranch = this.branches.find((b: any) => b.executed) as any;\n    if (executedBranch && executedBranch.branchStepId) {\n      // Update activeBranchStepId to match executed branch\n      if (this.activeBranchStepId !== executedBranch.branchStepId) {\n        this.activeBranchStepId = executedBranch.branchStepId;\n        // Update nested steps when executed branch changes\n      }\n      return;\n    }\n\n    // If no branch is executed, default to first branch (IF branch) but don't mark it as executed\n    const firstBranch = this.branches[0] as any;\n    if (firstBranch && firstBranch.branchStepId) {\n      if (this.activeBranchStepId !== firstBranch.branchStepId) {\n        this.activeBranchStepId = firstBranch.branchStepId;\n      }\n    }\n  }\n\n  onBranchClick(branch: ConditionBranch): void {\n    if (!this.isLive) {\n      return;\n    }\n\n    this.onBranchClickEvent.emit(branch);\n  }\n\n  getBranchClass(branch: any): string {\n    // If branch is executed, show green styling\n    if (branch.executed) {\n      return 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]';\n    }\n\n    // For live mode: if no branches are executed but there's an activeBranchStepId,\n    // show the active branch with blue border\n    if (this.isLive && !this.hasAnyExecutedBranch()) {\n      return 'cqa-bg-[#EFF6FF] cqa-text-[#1E40AF] cqa-border cqa-border-solid cqa-border-[#3B82F6]';\n    }\n\n    // Default: gray styling for unexecuted branches\n    return 'cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]';\n  }\n\n  /**\n   * Check if any branch is executed.\n   */\n  private hasAnyExecutedBranch(): boolean {\n    if (!this.branches || !Array.isArray(this.branches)) {\n      return false;\n    }\n    return this.branches.some((b: any) => b.executed === true);\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  /**\n   * Get the step number for a branch based on its index\n   * Branches consume sequential numbers at their level\n   * \n   * Top-level: condition step \"1\" → branches \"1\" (IF), \"2\" (ELSE IF), \"3\" (ELSE)\n   *   - IF branch children: 1.1, 1.2, etc.\n   *   - ELSE IF branch children: 2.1, 2.2, etc.\n   *   - ELSE branch children: 3.1, 3.2, etc.\n   * \n   * Nested: condition step \"3.2.1\" → branches \"3.2.1\" (IF), \"3.2.2\" (ELSE IF), \"3.2.3\" (ELSE)\n   *   - IF branch children: 3.2.1.1, 3.2.1.2, etc.\n   *   - ELSE IF branch children: 3.2.2.1, 3.2.2.2, etc.\n   *   - ELSE branch children: 3.2.3.1, 3.2.3.2, etc.\n   */\n  getBranchStepNumber(branchIndex: number): string {\n    const parentStepNumber = String(this.stepNumber || '1');\n\n    // Split the step number to get the parts\n    const parts = parentStepNumber.split('.');\n    \n    if (parts.length === 1) {\n      // Top-level: condition step \"1\" → branches \"1\", \"2\", \"3\"\n      const baseNumber = parseInt(parentStepNumber, 10);\n      return `${baseNumber + branchIndex}`;\n    } else {\n      // Nested: condition step \"3.2.1\" → branches \"3.2.1\", \"3.2.2\", \"3.2.3\"\n      // Replace the last part with (lastPart + branchIndex)\n      const lastPart = parseInt(parts[parts.length - 1], 10);\n      const newLastPart = lastPart + branchIndex;\n      const newParts = [...parts.slice(0, -1), newLastPart.toString()];\n      return newParts.join('.');\n    }\n  }\n\n  /**\n   * Get the base step number for nested steps within the executed branch\n   * If ELSE branch (index 2) is executed and its step number is 3, \n   * its children should be numbered 3.1, 3.2, etc.\n   * \n   * For nested condition: if ELSE branch is 2.1.3, children are 2.1.3.1, 2.1.3.2, etc.\n   */\n  getExecutedBranchBaseStepNumber(): string {\n    const executedBranch = this.getExecutedBranch();\n    if (!executedBranch) {\n      return this.stepNumber || '1';\n    }\n    \n    const branchIndex = this.config.branches?.indexOf(executedBranch) ?? 0;\n    return this.getBranchStepNumber(branchIndex);\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <div class=\"cqa-p-2\">\n    <!-- Header -->\n    <div\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n      (click)=\"toggleHeader($event)\">\n      <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n        [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n        matTooltipPosition=\"right\">\n        <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n          [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n          [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n          (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n          <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n          </svg>\n          <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n          </svg>\n        </button>\n      </div>\n      <!-- Status Icon -->\n      <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n      <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\"><span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">skip_next</span></div>\n      <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <!-- Condition Icon -->\n      <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n      <!-- Step Number and Title -->\n      <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n        <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n          {{ config?.stepNumber }}. Condition: <span [innerHTML]=\"config?.conditionText || ''\"></span>\n        </span>\n        \n        <!-- Condition Badge -->\n        <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n          CONDITION\n        </span>\n        <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n          Deleted\n        </span>\n      </div>\n\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n        <!-- Step Change Badges (debug only) -->\n        <ng-container *ngIf=\"isDebug\">\n          <ng-container *ngFor=\"let badge of stepBadges\">\n          <cqa-badge\n            *ngIf=\"badge === 'skipped'\"\n            label=\"Skipped\"\n            size=\"small\"\n            [textColor]=\"'#4A5565'\"\n            [borderColor]=\"'#99A1AF'\"\n            [backgroundColor]=\"'#FFFFFF'\">\n          </cqa-badge>\n          <cqa-badge\n            *ngIf=\"badge === 'edited'\"\n            label=\"Edited\"\n            size=\"small\"\n            [textColor]=\"'#FBBF24'\"\n            [borderColor]=\"'#FDDF92'\"\n            [backgroundColor]=\"'#FFF9E9'\">\n          </cqa-badge>\n          <cqa-badge\n            *ngIf=\"badge === 'added'\"\n            label=\"Added\"\n            size=\"small\"\n            [textColor]=\"'#0DBD7D'\"\n            [borderColor]=\"'#5ED3A8'\"\n            [backgroundColor]=\"'#CFF2E5'\">\n          </cqa-badge>\n          <cqa-badge\n            *ngIf=\"badge === 'removed'\"\n            label=\"Removed\"\n            size=\"small\"\n            [textColor]=\"'#EE3F3F'\"\n            [borderColor]=\"'#F47F7F'\"\n            [backgroundColor]=\"'#FCD9D9'\">\n          </cqa-badge>\n          </ng-container>\n        </ng-container>\n        <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n            <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n            <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n            <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n            </svg>\n          Self-healed\n        </span>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n             *ngIf=\"step?.executedResult?.video_start_time\" \n             [matTooltip]=\"'Jump to video time'\" \n             matTooltipPosition=\"below\"\n             (click)=\"onJumpToTimestamp($event)\">\n          <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n            play_arrow\n          </mat-icon>\n          <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n            {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n          </span>\n        </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <!-- <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button> -->\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n        <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n          {{ formatDuration(config.duration) }}\n        </span>\n        <svg *ngIf=\"hasExpandableContent\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </div>\n    </div>\n    <!-- Branch Buttons - Read-only, showing executed status only -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n      <div\n        *ngFor=\"let branch of config.branches; let branchIndex = index\"\n        class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-all\"\n        [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n        <!-- Checkmark icon for executed branch -->\n        <div *ngIf=\"branch.executed\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <span>{{ getBranchStepNumber(branchIndex) }}. {{ branch.type.toUpperCase() }}</span>\n      </div>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded && !isLoading\">\n\n    <!-- Executed Branch Sub-steps -->\n    <div *ngFor=\"let branch of config.branches\">\n      <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'\">\n        <div\n          *ngFor=\"let subStep of branch.subSteps\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n          \n          <!-- Sub-step Status Icon -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Failure -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Pending -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Running - Show spinner -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n            <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n          </div>\n  \n\n          <!-- Sub-step Description -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n            <span [innerHTML]=\"subStep.description\"></span>\n          </span>\n\n          <!-- Sub-step Duration -->\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n            {{ formatDuration(subStep.duration) }}\n          </span>\n        </div>\n      </div>\n    </div>\n\n    <!-- Unexecuted Branch Message -->\n    <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n      <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n        {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n      </p>\n    </div>\n\n    <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n      <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n        {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n      </p>\n    </div>\n\n    <!-- Nested Steps -->\n    <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n        <!-- Loading indicator for nested steps -->\n        <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\" \n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n          <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n            <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n          </svg>\n          <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n        </div>\n\n        <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n          <!-- Wrapper to show skeleton while step-renderer is loading -->\n          <div\n            class=\"cqa-step-renderer-wrapper\"\n            [attr.id]=\"'exc-' + (step?.uniqueId || step.id)\"\n            [class.loaded]=\"!isNestedStepLoading(step)\">\n            <!-- Loading skeleton overlay -->\n            <!-- <div *ngIf=\"isNestedStepLoading(step)\" class=\"cqa-step-skeleton-overlay\">\n              <div class=\"cqa-step-skeleton cqa-mx-3 cqa-my-1\"></div>\n            </div> -->\n            <!-- Use step-renderer for all nested steps to avoid circular dependencies -->\n            <!-- The step-renderer will dynamically load the appropriate component and pass handlers -->\n            <cqa-step-renderer \n              [step]=\"step\"\n              [stepNumber]=\"step?.stepNumber || (getExecutedBranchBaseStepNumber() + '.' + (i + 1))\"\n              [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n              [onExpandHandler]=\"onExpandHandler\"\n              [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n              [isStepLoadingHandler]=\"isStepLoadingHandler\"\n              [isStepExpandedHandler]=\"isStepExpandedHandler\"\n              [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n              [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n              [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n              [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n              [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n              [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n              [formatActionsHandler]=\"formatActionsHandler\"\n              [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n              [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n              [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n              [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n              [onAnalyzeHandler]=\"onAnalyzeHandler\"\n              [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n              [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n              [onStepClickHandler]=\"onStepClickHandler\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [onDownloadHandler]=\"onDownloadHandler\"\n              [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n              [onTextCopiedHandler]=\"onTextCopiedHandler\"\n              [downloadingStepId]=\"downloadingStepId\"\n              [isUploadingBaseline]=\"isUploadingBaseline\"\n              [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n              [selectedIterationId]=\"step?.selectedIterationId || ''\"\n              [isLive]=\"isLive\"\n              [isDebug]=\"isDebug\"\n              [canEditSteps]=\"canEditSteps\"\n              [parentSkipped]=\"selfDebugDisabled\"\n              [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n              [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n              [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n              [onEditStepHandler]=\"onEditStepHandler\"\n              [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n              [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n              [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n              [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n              [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n              [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n              (addStepInsideLoop)=\"addStepInsideLoop.emit($event)\"\n              (componentReady)=\"markStepLoaded(step)\">\n            </cqa-step-renderer>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n      <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton && !isLoading\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [timingBreakdown]=\"timingBreakdown\"\n      [testStepResultId]=\"testStepResultId\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FailedStepConfig, SubStep, FailureDetails, StepStatus, TimingBreakdown, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent } from '../visual-comparison/visual-comparison.component';\nimport { uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-failed-step',\n  templateUrl: './failed-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class FailedStepComponent extends BaseStepComponent implements OnInit {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() subSteps!: SubStep[];\n  @Input() failureDetails!: FailureDetails;\n  @Input() isUploadingBaseline = {};\n  @Input() isLive = false;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: FailedStepConfig;\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'failed',\n      subSteps: this.subSteps,\n      failureDetails: this.failureDetails,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as FailedStepConfig;\n\n    super.ngOnInit();\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    console.log('Make current baseline clicked');\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    console.log('Upload baseline clicked');\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    console.log('Analyze clicked');\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    console.log('View full logs clicked');\n    this.viewFullLogs.emit();\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n}\n","<div class=\"cqa-w-full\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer cqa-bg-[#FFFAFA]\"\n    style=\"border-left: '2px solid #EF4444'\"\n    (click)=\"toggle()\">\n    \n    <!-- Status Icon -->\n    <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n      <span class=\"cqa-font-bold cqa-text-[#7F1D1D] cqa-text-[11px] cqa-leading-[13px]\">\n        {{ config.stepNumber }}. <span [innerHTML]=\"config.title\"></span>\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n        <button *ngIf=\"stepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of stepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[9px] cqa-leading-[20px] cqa-font-bold cqa-text-[#B91C1C]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.5 3.75L5 6.25L7.5 3.75\" stroke=\"#F87171\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-p-2\" style=\"border-left: '2px solid #FAC7C7'; border-bottom: '1px solid #FEE2E2'\">\n    <!-- Sub-steps -->\n    <div *ngIf=\"config.subSteps && config.subSteps.length > 0\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pl-[9px]\" style=\"border-left: 1px solid #F3F4F6;\">\n      <div\n        *ngFor=\"let subStep of config.subSteps\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-text-[9px] cqa-leading-[20px]\"\n        [ngClass]=\"subStep.description === config.failureDetails.failedAction ? 'cqa-text-[#B91C1C]' : 'cqa-text-[#475569]'\">\n        \n        <!-- Failed Action Indicator -->\n        <span *ngIf=\"subStep.description === config.failureDetails.failedAction\" class=\"cqa-text-[#EF4444] cqa-font-bold\">•</span>\n\n        <!-- Sub-step Description -->\n        <span class=\"cqa-flex-1\" [ngClass]=\"subStep.description === config.failureDetails.failedAction ? 'cqa-font-medium' : ''\">\n          {{ subStep.description }}\n        </span>\n\n        <!-- Sub-step Timestamp or Duration -->\n        <span [ngClass]=\"subStep.description === config.failureDetails.failedAction ? 'cqa-text-[#FCA5A5]' : 'cqa-text-[#D1D5DB]'\">\n          {{ subStep.timestamp || formatDuration(subStep.duration) }}\n        </span>\n      </div>\n    </div>\n\n    <!-- Expected vs Actual Comparison -->\n    <div *ngIf=\"config.failureDetails\" class=\"cqa-grid cqa-grid-cols-2 cqa-rounded cqa-overflow-hidden cqa-border cqa-border-solid cqa-border-[#E5E7EB]\">\n      <!-- Expected Column -->\n      <div class=\"cqa-p-1.5 cqa-text-[9px] cqa-leading-[20px] cqa-bg-white\" style=\"border-right: 1px solid #E5E7EB;\">\n        <div class=\"cqa-text-[#9CA3AF]\">EXPECTED</div>\n        <div class=\"cqa-text-[#374151]\">\n          {{ config.failureDetails.expected }}\n        </div>\n      </div>\n\n      <!-- Actual Column -->\n      <div class=\"cqa-p-1.5 cqa-text-[9px] cqa-leading-[20px] cqa-bg-[#FEF8F8]\">\n        <div class=\"cqa-text-[#F87171]\">ACTUAL</div>\n        <div class=\"cqa-text-[#991B1B]\">\n          {{ config.failureDetails.actual }}\n        </div>\n      </div>\n    </div>\n\n    <!-- Visual Comparison Component -->\n    <cqa-visual-comparison\n      *ngIf=\"config.failureDetails\"\n      [testStepResultId]=\"testStepResultId\"\n      [screenshots]=\"config.failureDetails.screenshots\"\n      [logs]=\"config.failureDetails.logs\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      [testStepResultId]=\"testStepResultId\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isLive]=\"isLive\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-visual-comparison>\n\n    <!-- AI Fix Message -->\n    <div *ngIf=\"config.failureDetails.aiFixApplied\" class=\"cqa-px-3 cqa-pt-1.5 cqa-pb-2 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-[#FAF5FF]\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0F172A] cqa-flex cqa-items-center cqa-gap-2 cqa-mb-3\">\n        <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"url(#paint0_linear_4070_7201)\"/><path d=\"M8.00941 3.5C8.06489 3.52274 8.08859 3.57827 8.11131 3.62985C8.12269 3.6599 8.13314 3.69012 8.14329 3.72058C8.14726 3.73225 8.15123 3.74392 8.15532 3.75594C8.20806 3.913 8.25504 4.07175 8.30229 4.23038C8.31297 4.26619 8.32369 4.30199 8.33442 4.33778C8.38905 4.52004 8.44327 4.7024 8.49719 4.88484C8.50476 4.91047 8.51234 4.93609 8.51992 4.96171C8.54128 5.03395 8.56262 5.10619 8.58383 5.17847C8.62867 5.3312 8.67473 5.48347 8.72378 5.63501C8.72807 5.64827 8.73236 5.66152 8.73677 5.67518C8.8642 6.065 9.04482 6.41437 9.3409 6.71196C9.34823 6.7197 9.35556 6.72744 9.36312 6.73541C9.4895 6.86437 9.65169 6.96771 9.8138 7.05111C9.82206 7.05542 9.83031 7.05974 9.83882 7.06419C10.3159 7.30925 10.8895 7.41704 11.4062 7.5605C11.6326 7.6234 11.8583 7.68829 12.0832 7.75603C12.099 7.76079 12.1148 7.76554 12.1306 7.77028C12.1778 7.78445 12.225 7.79887 12.2721 7.81347C12.2831 7.81679 12.2941 7.82011 12.3054 7.82353C12.3703 7.84406 12.4324 7.86829 12.4857 7.91027C12.5019 7.94418 12.5019 7.94418 12.4975 7.9781C12.4456 8.02736 12.3942 8.05046 12.3258 8.073C12.316 8.07632 12.3062 8.07965 12.2961 8.08308C12.1806 8.12183 12.0635 8.15575 11.9463 8.18935C11.9222 8.1963 11.8981 8.20326 11.8741 8.21021C11.7257 8.25301 11.5771 8.2949 11.4283 8.33632C11.2323 8.39088 11.0366 8.44634 10.8411 8.50243C10.8091 8.51162 10.7771 8.52078 10.745 8.52991C10.5767 8.57786 10.4092 8.62753 10.2431 8.68208C10.2294 8.68659 10.2156 8.6911 10.2014 8.69574C9.64511 8.88082 9.2211 9.22609 8.95571 9.73099C8.81263 10.0148 8.72823 10.3216 8.64214 10.6245C8.61884 10.7062 8.59409 10.7875 8.56905 10.8687C8.5494 10.9326 8.5302 10.9966 8.51149 11.0608C8.50926 11.0684 8.50703 11.0761 8.50473 11.0839C8.49394 11.1209 8.48319 11.1579 8.47252 11.195C8.44519 11.2888 8.41578 11.3819 8.38555 11.4749C8.33191 11.6402 8.2831 11.8067 8.23459 11.9735C8.16144 12.2246 8.16144 12.2246 8.11997 12.3453C8.11721 12.3534 8.11446 12.3615 8.11163 12.3698C8.09649 12.4128 8.08092 12.4523 8.05226 12.4887C8.00867 12.4979 8.00867 12.4979 7.96951 12.5C7.92473 12.4376 7.89508 12.3771 7.87133 12.3051C7.86787 12.2949 7.86441 12.2847 7.86085 12.2741C7.81684 12.1425 7.77751 12.0095 7.73817 11.8765C7.72916 11.846 7.72011 11.8156 7.71106 11.7852C7.6436 11.5586 7.57725 11.3317 7.51101 11.1048C7.23507 9.98224 7.23507 9.98224 6.539 9.07466C6.52784 9.06596 6.51669 9.05726 6.50519 9.0483C6.04913 8.69902 5.44834 8.5697 4.89815 8.41813C4.76207 8.38062 4.62605 8.34293 4.49003 8.30523C4.47814 8.30193 4.47814 8.30193 4.466 8.29857C4.26981 8.24417 4.07367 8.18963 3.87822 8.13283C3.86996 8.13045 3.86169 8.12806 3.85317 8.12561C3.5529 8.03883 3.5529 8.03883 3.50065 7.9781C3.49917 7.95054 3.49917 7.95054 3.51247 7.92157C3.56708 7.8704 3.62008 7.84848 3.69216 7.82619C3.7026 7.82284 3.71303 7.81948 3.72379 7.81603C3.75575 7.80582 3.78779 7.79584 3.81985 7.78592C3.829 7.78305 3.83815 7.78017 3.84758 7.77722C3.91228 7.75693 3.97722 7.7374 4.04226 7.71809C4.05824 7.71332 4.05824 7.71332 4.07454 7.70846C4.35227 7.62587 4.63181 7.549 4.91126 7.47196C5.1195 7.41455 5.32738 7.35618 5.5346 7.29548C5.54413 7.29271 5.55365 7.28993 5.56346 7.28707C6.0435 7.14696 6.51278 6.94816 6.82274 6.5537C6.82738 6.54785 6.83202 6.542 6.8368 6.53597C7.18197 6.09815 7.31658 5.56572 7.46696 5.04621C7.51642 4.87535 7.56649 4.70464 7.61673 4.53399C7.63064 4.48673 7.64453 4.43947 7.65836 4.39219C7.71394 4.20229 7.77035 4.01264 7.83 3.82386C7.83558 3.80619 7.84114 3.7885 7.84666 3.77081C7.93017 3.50399 7.93017 3.50399 8.00941 3.5Z\" fill=\"white\"/><path d=\"M10.7358 4.05535C10.7901 4.11409 10.801 4.18312 10.8179 4.25813C10.8742 4.49376 10.9392 4.71042 11.1645 4.8473C11.3036 4.92083 11.4693 4.9543 11.6234 4.9859C11.6884 4.99951 11.7434 5.01758 11.7991 5.0537C11.8117 5.07278 11.8117 5.07278 11.8109 5.10598C11.798 5.14637 11.7867 5.15939 11.7526 5.18582C11.7153 5.19775 11.7153 5.19775 11.6706 5.20702C11.6536 5.21074 11.6367 5.21449 11.6198 5.21828C11.6107 5.22029 11.6017 5.2223 11.5924 5.22437C11.3168 5.28531 11.3168 5.28531 11.0787 5.42322C11.071 5.42918 11.0632 5.43514 11.0552 5.44128C10.885 5.58479 10.849 5.82351 10.7978 6.0235C10.7949 6.03448 10.7919 6.04546 10.7889 6.05678C10.7864 6.0665 10.7838 6.07622 10.7812 6.08624C10.7702 6.11593 10.7587 6.13528 10.7358 6.15803C10.6722 6.16576 10.6722 6.16576 10.6413 6.15803C10.592 6.12155 10.581 6.07999 10.5682 6.02414C10.566 6.01549 10.5639 6.00685 10.5616 5.99794C10.5548 5.97032 10.5481 5.94266 10.5415 5.91498C10.4897 5.69946 10.4311 5.488 10.2244 5.36167C10.0628 5.2755 9.86634 5.23475 9.68575 5.20185C9.63625 5.19199 9.60789 5.1796 9.57725 5.1406C9.5706 5.10104 9.5706 5.10104 9.57725 5.06147C9.62435 5.01486 9.6739 5.00348 9.73759 4.9894C9.75766 4.98465 9.77772 4.97987 9.79777 4.97505C9.80813 4.97258 9.81849 4.97011 9.82917 4.96756C9.882 4.95456 9.93431 4.93998 9.9866 4.92511C9.99611 4.92247 10.0056 4.91984 10.0154 4.91712C10.1217 4.88673 10.2134 4.84786 10.2984 4.77885C10.3063 4.77261 10.3143 4.76638 10.3224 4.75995C10.4547 4.64614 10.4996 4.47516 10.5404 4.31562C10.5435 4.30351 10.5466 4.2914 10.5498 4.27892C10.556 4.25459 10.5621 4.23023 10.5681 4.20585C10.5723 4.18888 10.5723 4.18888 10.5767 4.17157C10.5791 4.16144 10.5816 4.1513 10.5842 4.14086C10.5951 4.1086 10.6094 4.08326 10.6294 4.05535C10.668 4.03692 10.695 4.04525 10.7358 4.05535Z\" fill=\"#EDE9FE\"/><path d=\"M5.29554 9.74722C5.3096 9.74731 5.3096 9.74731 5.32395 9.74741C5.42486 9.75035 5.49314 9.78127 5.56745 9.84613C5.65393 9.93545 5.69386 10.0362 5.69159 10.1566C5.68188 10.2542 5.62167 10.3395 5.54782 10.4055C5.4609 10.4725 5.37322 10.4947 5.26215 10.4916C5.1685 10.4812 5.08039 10.4386 5.01402 10.3746C4.93147 10.2669 4.90734 10.1682 4.91944 10.0355C4.94443 9.93104 5.01646 9.84625 5.1086 9.78678C5.1726 9.75576 5.22408 9.74665 5.29554 9.74722Z\" fill=\"white\"/><defs><linearGradient id=\"paint0_linear_4070_7201\" x1=\"0\" y1=\"0\" x2=\"16\" y2=\"16\" gradientUnits=\"userSpaceOnUse\"><stop stop-color=\"#8B5CF6\"/><stop offset=\"1\" stop-color=\"#9333EA\"/></linearGradient></defs></svg></div>\n        {{ config.failureDetails.aiFixMessage || 'AI Insights' }}\n        <span class=\"cqa-inline-block cqa-py-[2px] cqa-px-[10px] cqa-text-center cqa-rounded-[5px] cqa-bg-[#EDE9FE] cqa-text-[8px] cqa-leading-[12px] cqa-text-[#6D28D9]\">94% confidence</span>\n      </div>\n      <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#64748B]\">Reasoning</div>\n          <ul class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n            <li class=\"cqa-flex cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#475569]\">\n              <div class=\"cqa-mt-1.5\"><svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"6\" height=\"6\" rx=\"3\" fill=\"#A78BFA\"/></svg></div>\n              Stale state: test attribute as primary locator (highest priority)\n            </li>\n            <li class=\"cqa-flex cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#475569]\">\n              <div class=\"cqa-mt-1.5\"><svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"6\" height=\"6\" rx=\"3\" fill=\"#A78BFA\"/></svg></div>\n              Confidence score: 94% based on DOM similarity analysis\n            </li>\n            <li class=\"cqa-flex cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#475569]\">\n              <div class=\"cqa-mt-1.5\"><svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"6\" height=\"6\" rx=\"3\" fill=\"#A78BFA\"/></svg></div>\n              Increased wait time from 2s to 5s due to button latency\n            </li>\n            <li class=\"cqa-flex cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#475569]\">\n              <div class=\"cqa-mt-1.5\"><svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"6\" height=\"6\" rx=\"3\" fill=\"#A78BFA\"/></svg></div>\n              Environment binding: speed of assets by 20% through optimized caching\n            </li>\n          </ul>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#64748B]\">Suggested Fixes</div>\n          <div class=\"cqa-px-[10px] cqa-py-[2px] cqa-rounded-[5px] cqa-flex cqa-items-center cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#065F46] cqa-bg-[#ECFDF5] cqa-border cqa-border-solid cqa-border-[#D1FAE5]\">\n            <div><svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.66662 5.83336C1.58777 5.83363 1.51047 5.81152 1.44369 5.7696C1.3769 5.72768 1.32339 5.66768 1.28935 5.59655C1.25532 5.52543 1.24216 5.4461 1.25141 5.3678C1.26067 5.2895 1.29195 5.21543 1.34162 5.15419L5.46662 0.904194C5.49757 0.868478 5.53973 0.844342 5.5862 0.835749C5.63267 0.827156 5.68067 0.834616 5.72234 0.856904C5.76401 0.879192 5.79687 0.914984 5.81551 0.958406C5.83416 1.00183 5.83749 1.0503 5.82496 1.09586L5.02496 3.60419C5.00137 3.66733 4.99344 3.73524 5.00187 3.80211C5.01029 3.86898 5.03481 3.93281 5.07333 3.98812C5.11184 4.04343 5.16319 4.08857 5.22299 4.11968C5.28278 4.15078 5.34922 4.16691 5.41662 4.16669H8.33329C8.41214 4.16643 8.48944 4.18853 8.55622 4.23045C8.62301 4.27237 8.67653 4.33238 8.71056 4.4035C8.7446 4.47463 8.75775 4.55395 8.7485 4.63225C8.73924 4.71056 8.70796 4.78463 8.65829 4.84586L4.53329 9.09586C4.50235 9.13158 4.46018 9.15571 4.41371 9.1643C4.36725 9.1729 4.31924 9.16544 4.27757 9.14315C4.2359 9.12086 4.20305 9.08507 4.1844 9.04165C4.16575 8.99823 4.16242 8.94976 4.17496 8.90419L4.97496 6.39586C4.99855 6.33273 5.00647 6.26481 4.99804 6.19794C4.98962 6.13107 4.9651 6.06724 4.92659 6.01193C4.88807 5.95662 4.83672 5.91148 4.77692 5.88038C4.71713 5.84927 4.65069 5.83314 4.58329 5.83336H1.66662Z\" stroke=\"#059669\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n            Update locator to use data-testid='registration-submit' instead of #submit-btn\n          </div>\n          <div class=\"cqa-px-[10px] cqa-py-[2px] cqa-rounded-[5px] cqa-flex cqa-items-center cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#065F46] cqa-bg-[#ECFDF5] cqa-border cqa-border-solid cqa-border-[#D1FAE5]\">\n            <div><svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.66662 5.83336C1.58777 5.83363 1.51047 5.81152 1.44369 5.7696C1.3769 5.72768 1.32339 5.66768 1.28935 5.59655C1.25532 5.52543 1.24216 5.4461 1.25141 5.3678C1.26067 5.2895 1.29195 5.21543 1.34162 5.15419L5.46662 0.904194C5.49757 0.868478 5.53973 0.844342 5.5862 0.835749C5.63267 0.827156 5.68067 0.834616 5.72234 0.856904C5.76401 0.879192 5.79687 0.914984 5.81551 0.958406C5.83416 1.00183 5.83749 1.0503 5.82496 1.09586L5.02496 3.60419C5.00137 3.66733 4.99344 3.73524 5.00187 3.80211C5.01029 3.86898 5.03481 3.93281 5.07333 3.98812C5.11184 4.04343 5.16319 4.08857 5.22299 4.11968C5.28278 4.15078 5.34922 4.16691 5.41662 4.16669H8.33329C8.41214 4.16643 8.48944 4.18853 8.55622 4.23045C8.62301 4.27237 8.67653 4.33238 8.71056 4.4035C8.7446 4.47463 8.75775 4.55395 8.7485 4.63225C8.73924 4.71056 8.70796 4.78463 8.65829 4.84586L4.53329 9.09586C4.50235 9.13158 4.46018 9.15571 4.41371 9.1643C4.36725 9.1729 4.31924 9.16544 4.27757 9.14315C4.2359 9.12086 4.20305 9.08507 4.1844 9.04165C4.16575 8.99823 4.16242 8.94976 4.17496 8.90419L4.97496 6.39586C4.99855 6.33273 5.00647 6.26481 4.99804 6.19794C4.98962 6.13107 4.9651 6.06724 4.92659 6.01193C4.88807 5.95662 4.83672 5.91148 4.77692 5.88038C4.71713 5.84927 4.65069 5.83314 4.58329 5.83336H1.66662Z\" stroke=\"#059669\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n            Add explicit wait for network idle before clicking submit\n          </div>\n          <div class=\"cqa-px-[10px] cqa-py-[2px] cqa-rounded-[5px] cqa-flex cqa-items-center cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#065F46] cqa-bg-[#ECFDF5] cqa-border cqa-border-solid cqa-border-[#D1FAE5]\">\n            <div><svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.66662 5.83336C1.58777 5.83363 1.51047 5.81152 1.44369 5.7696C1.3769 5.72768 1.32339 5.66768 1.28935 5.59655C1.25532 5.52543 1.24216 5.4461 1.25141 5.3678C1.26067 5.2895 1.29195 5.21543 1.34162 5.15419L5.46662 0.904194C5.49757 0.868478 5.53973 0.844342 5.5862 0.835749C5.63267 0.827156 5.68067 0.834616 5.72234 0.856904C5.76401 0.879192 5.79687 0.914984 5.81551 0.958406C5.83416 1.00183 5.83749 1.0503 5.82496 1.09586L5.02496 3.60419C5.00137 3.66733 4.99344 3.73524 5.00187 3.80211C5.01029 3.86898 5.03481 3.93281 5.07333 3.98812C5.11184 4.04343 5.16319 4.08857 5.22299 4.11968C5.28278 4.15078 5.34922 4.16691 5.41662 4.16669H8.33329C8.41214 4.16643 8.48944 4.18853 8.55622 4.23045C8.62301 4.27237 8.67653 4.33238 8.71056 4.4035C8.7446 4.47463 8.75775 4.55395 8.7485 4.63225C8.73924 4.71056 8.70796 4.78463 8.65829 4.84586L4.53329 9.09586C4.50235 9.13158 4.46018 9.15571 4.41371 9.1643C4.36725 9.1729 4.31924 9.16544 4.27757 9.14315C4.2359 9.12086 4.20305 9.08507 4.1844 9.04165C4.16575 8.99823 4.16242 8.94976 4.17496 8.90419L4.97496 6.39586C4.99855 6.33273 5.00647 6.26481 4.99804 6.19794C4.98962 6.13107 4.9651 6.06724 4.92659 6.01193C4.88807 5.95662 4.83672 5.91148 4.77692 5.88038C4.71713 5.84927 4.65069 5.83314 4.58329 5.83336H1.66662Z\" stroke=\"#059669\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n            Consider adding retry logic for form submission step\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges, DoCheck } from '@angular/core';\nimport { AIAgentStepConfig, AIAgentAction, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-ai-agent-step',\n  templateUrl: './ai-agent-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class AIAgentStepComponent extends BaseStepComponent implements OnInit, DoCheck {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() prompt!: string;\n  @Input() optimizedRun?: boolean;\n  @Input() actionCount?: number;\n  @Input() actions?: AIAgentAction[];\n  @Input() selectedTabInput?: 'action-trace' | 'planner-timeline' | 'ai-reasoning';\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() isLive: boolean = false;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  showFailedStepDetails: boolean = false;\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: AIAgentStepConfig;\n  private previousStatus?: StepStatus;\n  private userManuallyClosed: boolean = false;\n\n  selectedTab: 'action-trace' | 'planner-timeline' | 'ai-reasoning' = 'action-trace';\n\n  showThinkingLog = false;\n  private lastProcessedActionsLength = 0;\n  private lastProcessedStatus = '';\n  private lastProcessedActionsKey = '';\n\n  ngDoCheck(): void {\n    if (!this.isLive) return;\n    const actions = this.actions || [];\n    const currentLength = actions.length;\n    const currentStatus = (this.status || '').toString();\n    const actionsKey = actions.map((a: any) => `${a.uiType || a.type}|${a.status}|${a.stepStatus || ''}`).join(',');\n    const changed =\n      currentLength !== this.lastProcessedActionsLength ||\n      currentStatus !== this.lastProcessedStatus ||\n      actionsKey !== this.lastProcessedActionsKey;\n    if (changed) {\n      this.processLiveThinkingLog();\n      this.lastProcessedActionsLength = currentLength;\n      this.lastProcessedStatus = currentStatus;\n      this.lastProcessedActionsKey = actionsKey;\n    }\n  }\n\n  private processLiveThinkingLog(): void {\n    const actions = this.actions || [];\n    const statusLower = (this.status || '').toString().toLowerCase();\n    const isStepFailed = statusLower === 'failed' || statusLower === 'failure';\n\n    const hasExecutionStarted = actions.some(\n      (a: any) => (a.uiType || a.type) === 'STEP_EXECUTION_STARTED'\n    );\n    const hasStepRunSuccessfully = actions.some(\n      (a: any) => (a.uiType || a.type) === 'STEP_RUN_SUCCESSFULLY'\n    );\n    const hasPaused = actions.some(\n      (a: any) => (a.uiType || a.type) === 'STEP_RUN_PAUSED'\n    );\n    const hasFailed =\n      isStepFailed ||\n      actions.some((a: any) => {\n        const s = (a.status || '').toString().toLowerCase();\n        return s === 'failed' || s === 'failure';\n      }) ||\n      actions.some((a: any) => (a.stepStatus || '').toString().toUpperCase() === 'FAILURE') ||\n      actions.some((a: any) => (a.uiType || a.type) === 'STEP_RUN_FAILED');\n\n    this.showThinkingLog = this.isLive && hasExecutionStarted && !hasStepRunSuccessfully && !hasFailed && !hasPaused;\n  }\n\n  override ngOnInit(): void {\n    // Get action from step if available (set by step-renderer directly or via step object)\n    const actionValue = (this as any).action || this.step?.action || '';\n\n    // Use title if available, otherwise step.title / action (matches server shape for AI_AGENT)\n    const titleValue = this.title || this.step?.title || actionValue || '';\n\n    // Use prompt if available, otherwise step.prompt / action / title (API often uses `prompt` + `title`, not `action`)\n    const promptValue = this.prompt || this.step?.prompt || this.step?.action || actionValue || titleValue || '';\n    \n    // Build config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: titleValue,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'ai-agent',\n      prompt: promptValue.replace('AI Agent', '').trim().replace(/\\n/g, '<br>'),\n      optimizedRun: this.optimizedRun,\n      actionCount: this.actionCount,\n      actions: this.actions || [],\n      selectedTab: this.selectedTabInput,\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      selfHealAnalysis: this.selfHealAnalysis,\n    } as AIAgentStepConfig;\n\n    super.ngOnInit();\n    this.selectedTab = this.config.selectedTab || 'action-trace';\n  }\n\n    ngOnChanges(changes: SimpleChanges): void {\n    // Update title and prompt in config when they change\n    if (this.config) {\n      if (changes['stepNumber'] && this.config) this.config.stepNumber = changes['stepNumber'].currentValue;\n      if (changes['title']) {\n        this.config.title = this.title || '';\n      }\n      if (changes['prompt']) {\n        // Remove 'AI Agent' prefix if present and trim\n        const promptValue = this.prompt || '';\n        this.config.prompt = promptValue.replace('AI Agent', '').trim().replace(/\\n/g, '<br>');\n      }\n      // Sync prompt when the step reference updates (live execution); use `prompt`, then `action`\n      if (changes['step'] && !String(this.config.prompt || '').trim()) {\n        const fromStep = this.step?.prompt || this.step?.action || '';\n        if (fromStep) {\n          this.config.prompt = String(fromStep).replace('AI Agent', '').trim().replace(/\\n/g, '<br>');\n        }\n      }\n      // If prompt is not set but title is, use title as prompt\n      if (!this.prompt && !String(this.config.prompt || '').trim() && this.title) {\n        this.config.prompt = this.title.replace('AI Agent', '').trim().replace(/\\n/g, '<br>');\n      }\n      // If title is not set but prompt is, use prompt as title\n      if (!this.title && this.prompt && this.config.title !== this.prompt) {\n        this.config.title = this.prompt;\n      }\n    }\n\n    // Update subSteps array when new ones are added\n    if (changes['actions']) {\n      const previousSubStepsCount = changes['actions'].previousValue?.length || 0;\n      const currentSubStepsCount = (this.actions || []).length;\n      \n      // Sub-steps are appended externally, so we just update the config\n      if (this.config) {\n        this.config.actions = this.actions || [];\n        // If prompt is still empty when logs start arriving, sync it from step.action\n        // (step-renderer sets instance.step directly without triggering ngOnChanges for 'step')\n        if (!String(this.config.prompt || '').trim()) {\n          const fallback = (this as any).action || this.step?.prompt || this.step?.action || '';\n          if (fallback) {\n            this.config.prompt = String(fallback).replace('AI Agent', '').trim().replace(/\\n/g, '<br>');\n          }\n        }\n      }\n      \n      // Auto-expand if step is running and new subSteps are added (logs coming in)\n      if (!changes['actions'].firstChange && \n          this.status === 'running' && \n          currentSubStepsCount > previousSubStepsCount &&\n          this.hasSubSteps && \n          !this.isExpanded && \n          !this.userManuallyClosed) {\n        this.autoExpand();\n      }\n    }\n\n    if (this.config && changes['duration']) {\n      this.config.duration = changes['duration']?.currentValue || 0;\n    }\n\n    if (this.config && changes['stepDeleted']) {\n      this.config.stepDeleted = changes['stepDeleted']?.currentValue;\n    }\n\n    // Handle status changes - auto-expand when step starts executing\n    if (changes['status'] && !changes['status'].firstChange) {\n      const newStatus = changes['status']?.currentValue || '';\n      const oldStatus = changes['status']?.previousValue || '';\n      \n      // Auto-expand when status changes to 'running' and has subSteps (or will have soon)\n      if (newStatus === 'running' && oldStatus !== 'running' && !this.userManuallyClosed) {\n        // Expand immediately if already has subSteps, or wait for them\n        if (this.hasSubSteps) {\n          this.autoExpand();\n        }\n      }\n      \n      this.previousStatus = newStatus;\n    }\n\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded ?? false;\n    }\n  }\n\n  private autoExpand(): void {\n    if (!this.isExpanded && this.hasSubSteps) {\n      this.isExpanded = true;\n      this.userManuallyClosed = false;\n      this.toggleExpanded.emit(true);\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.actions !== undefined && this.actions.length > 0;\n  }\n\n  selectTab(tab: 'action-trace' | 'planner-timeline' | 'ai-reasoning'): void {\n    this.selectedTab = tab;\n  }\n\n  getActionIcon(actionType: 'extract' | 'validate'): string {\n    return actionType === 'extract' ? 'bolt' : 'warning';\n  }\n\n  copyToClipboard(text: string): void {\n    navigator.clipboard.writeText(text).then(() => {\n      console.log('Copied to clipboard:', text);\n    }).catch(err => {\n      console.error('Failed to copy to clipboard:', err);\n    });\n  }\n\n  copyPrompt(): void {\n    if (this.config?.prompt) {\n      const tempDiv = document.createElement('div');\n      tempDiv.innerHTML = this.config.prompt;\n      const plainText = tempDiv.textContent || tempDiv.innerText || '';\n      this.copyToClipboard(plainText);\n    }\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    // Convert AIAgentAction[] to SubStep[] for the failed step component\n    return (this.actions || []).map(action => ({\n      id: action.id,\n      description: action.description,\n      status: action.status,\n      duration: action.duration,\n    }));\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  trackByActionId(index: number, action: AIAgentAction): string {\n    return action?.id || index.toString();\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    super.toggle();\n    if(!this.isExpanded){\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n    <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\"><span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">skip_next</span></div>\n    <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <!-- Lightbulb Icon and Step Number -->\n    <div>\n      <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n      </span>\n      \n      <!-- Loop Type Badges -->\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n        AI Agent\n      </span>\n\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <!-- Action Count -->\n    <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n      {{ config?.actionCount }} actions\n    </span>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config?.duration || 0) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n    <!-- Prompt Card -->\n    <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #FEE685\">\n      <div>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n          <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33333 6.66675H5.34M8 6.66675H8.00667M10.6667 6.66675H10.6733M6 10.6667H3.33333C2.97971 10.6667 2.64057 10.5263 2.39052 10.2762C2.14048 10.0262 2 9.68704 2 9.33341V4.00008C2 3.64646 2.14048 3.30732 2.39052 3.05727C2.64057 2.80722 2.97971 2.66675 3.33333 2.66675H12.6667C13.0203 2.66675 13.3594 2.80722 13.6095 3.05727C13.8595 3.30732 14 3.64646 14 4.00008V9.33341C14 9.68704 13.8595 10.0262 13.6095 10.2762C13.3594 10.5263 13.0203 10.6667 12.6667 10.6667H9.33333L6 14.0001V10.6667Z\" stroke=\"#E17100\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#BB4D00] \">PROMPT</span>\n          <span *ngIf=\"config?.optimizedRun\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-primary cqa-bg-[#EBECFD]\">\n            Optimized Run\n          </span>\n        </div>\n        <p class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\" style=\"word-break: break-word;\" [innerHTML]=\"config?.prompt\"></p>\n      </div>\n      <button \n        class=\"cqa-p-1.5\" \n        (click)=\"copyPrompt()\"\n        [matTooltip]=\"'Copy prompt'\"\n        matTooltipPosition=\"above\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </button>\n    </div>\n\n    <!-- Tab Navigation -->\n    <!-- <div class=\"cqa-flex cqa-items-center cqa-flex-wrap cqa-my-1.5\" style=\"border-bottom: 1px solid #E4E4E4\">\n      <button\n        (click)=\"selectTab('action-trace')\"\n        [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'action-trace'}\"\n        [ngStyle]=\"{'border-bottom': selectedTab === 'action-trace' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n        class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n        Action Trace\n        <span *ngIf=\"config && config.actions && config.actions.length > 0\" class=\"cqa-bg-[#F5F5F5] cqa-text-current cqa-text-[10px] cqa-leading-[13.3px] cqa-font-medium cqa-rounded-full cqa-w-[16px] cqa-h-[16px] cqa-min-w-[16px] cqa-flex cqa-items-center cqa-justify-center\">\n          {{ config.actions.length }}\n        </span>\n      </button>\n      <button\n        (click)=\"selectTab('planner-timeline')\"\n        [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'planner-timeline'}\"\n        [ngStyle]=\"{'border-bottom': selectedTab === 'planner-timeline' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n        class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n        Planner Timeline\n      </button>\n      <button\n        (click)=\"selectTab('ai-reasoning')\"\n        [ngClass]=\"{'!cqa-text-[#BB4D00]': selectedTab === 'ai-reasoning'}\"\n        [ngStyle]=\"{'border-bottom': selectedTab === 'ai-reasoning' ? '2px solid #FE9A00' : '2px solid transparent'}\"\n        class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[12px] cqa-leading-4 cqa-font-medium cqa-text-[#636363] cqa-transition-colors\">\n        AI Reasoning\n      </button>\n    </div> -->\n\n    <!-- Tab Content -->\n    <!-- Action Trace Tab -->\n    <div *ngIf=\"selectedTab === 'action-trace'\">\n      <!-- <div class=\"cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-my-1.5 cqa-p-2 cqa-bg-[#EFF6FF]\" style=\"border: 1px solid #BEDBFF\">\n        <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.66667 4.66675H14M14 4.66675V10.0001M14 4.66675L8.66667 10.0001L6 7.33341L2 11.3334\" stroke=\"#155DFC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <div class=\"cqa-font-medium cqa-text-[#1447E6] cqa-text-[10px] cqa-leading-[15px]\">\n          <b>{{ config?.actions?.length || 0 }} actions</b> \n          from previous runs\n        </div>\n      </div> -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n        <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n          <div\n            *ngIf=\"action?.description\"\n            class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n            [ngStyle]=\"{\n              'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n              'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n            }\"\n          >\n            <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n              <ng-container *ngIf=\"(action?.status || '')?.toLowerCase() === 'failed' || (action?.status || '')?.toLowerCase() === 'failure' || (action?.status || '')?.toLowerCase() === 'error'; else aiAgentTickIcon\">\n                <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/>\n                  <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/>\n                  <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </ng-container>\n              <ng-template #aiAgentTickIcon>\n                <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </ng-template>\n            </div>\n            <!-- <mat-icon\n              class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-yellow-500\">\n              {{ getActionIcon(action.type) }}\n            </mat-icon> -->\n            <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n              <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n                  <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n    \n              </div>\n            <span\n              class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n              [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n            >\n              {{ action.description }}\n            </span>\n            <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n              {{ action.confidence }}%\n            </span>\n            <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n              {{ formatDuration(action.duration) }}\n            </span>\n            <!-- <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.5 2.5L8 6L4.5 9.5\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div> -->\n          </div>\n        </ng-container>\n        <div *ngIf=\"isLive && showThinkingLog\" class=\"cqa-ai-agent-thinking-log cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-bg-[#F7FAFC] cqa-border cqa-border-[#BEDBFF]\" style=\"border: 1px solid #BEDBFF;\">\n          <div class=\"cqa-ai-agent-thinking-dots cqa-flex cqa-gap-1\">\n            <span class=\"cqa-ai-agent-thinking-dot\"></span>\n            <span class=\"cqa-ai-agent-thinking-dot\"></span>\n            <span class=\"cqa-ai-agent-thinking-dot\"></span>\n          </div>\n          <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#334155]\">Thinking</span>\n        </div>\n      </div>\n    </div>\n\n    <!-- Planner Timeline Tab -->\n    <div *ngIf=\"selectedTab === 'planner-timeline'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n      Planner timeline content would go here\n    </div>\n\n    <!-- AI Reasoning Tab -->\n    <div *ngIf=\"selectedTab === 'ai-reasoning'\" class=\"cqa-font-inter cqa-text-sm cqa-text-gray-600\">\n      AI reasoning content would go here\n    </div>\n\n  </div>\n\n      <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n  <!-- Timing Breakdown -->\n  <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <span>Timing breakdown</span>\n    </div>\n    <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n      <div>\n        App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n      </div>\n      <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n      <div>\n        Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n      </div>\n    </span>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [testStepResultId]=\"testStepResultId\"\n      [timingBreakdown]=\"timingBreakdown\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { AIActionStepConfig, AIAgentAction, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-ai-action-step',\n  templateUrl: './ai-action-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class AIActionStepComponent extends BaseStepComponent implements OnInit {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() actionCount?: number;\n  @Input() actions?: AIAgentAction[];\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() isUploadingBaseline = {};\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() isMakingCurrentBaseline = {};\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() isLive: boolean = false;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  showFailedStepDetails: boolean = false;\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: AIActionStepConfig;\n  private previousStatus?: StepStatus;\n  private userManuallyClosed: boolean = false;\n\n  override ngOnInit(): void {\n    // Get action from step if available (set by step-renderer)\n    const actionValue = (this as any).action || '';\n    \n    // Use title if available, otherwise fall back to action\n    const titleValue = this.title || actionValue || '';\n    \n    // Build config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: titleValue,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'ai-action',\n      actionCount: this.actionCount,\n      actions: this.actions || [],\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      selfHealAnalysis: this.selfHealAnalysis,\n    } as AIActionStepConfig;\n\n    super.ngOnInit();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update title in config when it changes\n    if (this.config) {\n      if (changes['title']) {\n        this.config.title = this.title || '';\n      }\n      if (changes['stepNumber']) this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n\n    // Update subSteps array when new ones are added\n    if (changes['actions']) {\n      const previousSubStepsCount = changes['actions'].previousValue?.length || 0;\n      const currentSubStepsCount = (this.actions || []).length;\n      \n      // Sub-steps are appended externally, so we just update the config\n      if (this.config) {\n        this.config.actions = this.actions || [];\n      }\n      \n      // Auto-expand if step is running and new subSteps are added (logs coming in)\n      if (!changes['actions'].firstChange && \n          this.status === 'running' && \n          currentSubStepsCount > previousSubStepsCount &&\n          this.hasSubSteps && \n          !this.isExpanded && \n          !this.userManuallyClosed) {\n        this.autoExpand();\n      }\n    }\n\n    if (this.config && changes['duration']) {\n      this.config.duration = changes['duration']?.currentValue || 0;\n    }\n\n    if (this.config && changes['stepDeleted']) {\n      this.config.stepDeleted = changes['stepDeleted']?.currentValue;\n    }\n\n    // Handle status changes - auto-expand when step starts executing\n    if (changes['status'] && !changes['status'].firstChange) {\n      const newStatus = changes['status']?.currentValue || '';\n      const oldStatus = changes['status']?.previousValue || '';\n      \n      // Auto-expand when status changes to 'running' and has subSteps (or will have soon)\n      if (newStatus === 'running' && oldStatus !== 'running' && !this.userManuallyClosed) {\n        // Expand immediately if already has subSteps, or wait for them\n        if (this.hasSubSteps) {\n          this.autoExpand();\n        }\n      }\n      \n      this.previousStatus = newStatus;\n    }\n\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded ?? false;\n    }\n  }\n\n  private autoExpand(): void {\n    if (!this.isExpanded && this.hasSubSteps) {\n      this.isExpanded = true;\n      this.userManuallyClosed = false;\n      this.toggleExpanded.emit(true);\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.actions !== undefined && this.actions.length > 0;\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    // Convert AIAgentAction[] to SubStep[] for the failed step component\n    return (this.actions || []).map(action => ({\n      id: action.id,\n      description: action.description,\n      status: action.status,\n      duration: action.duration,\n    }));\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  trackByActionId(index: number, action: AIAgentAction): string {\n    return action?.id || index.toString();\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    // Only allow expand/collapse when there are actions to show\n    if (!this.hasSubSteps) {\n      return;\n    }\n    super.toggle();\n    if(!this.isExpanded){\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  getActionBadgeText(): string {\n    switch (this.step?.actionName) {\n      case 'ai_ask':\n        return 'AI Ask';\n      case 'ai_document_ask':\n        return 'AI Document Ask';\n      case 'ai_text_verification':\n        return 'AI Verify';\n      case 'ai_verify':\n        return 'AI Verification';\n      default:\n        return 'AI Action';\n    }\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n    <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\"><span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">skip_next</span></div>\n    <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <!-- Lightbulb Icon and Step Number -->\n    <div>\n      <svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config?.stepNumber }}. <span [innerHTML]=\"config?.title || ''\"></span>\n      </span>\n      \n      <!-- Action Type Badge -->\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n        {{ getActionBadgeText() }}\n      </span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <!-- Action Count -->\n    <span *ngIf=\"config?.actionCount\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#E17100] cqa-bg-[#FEF3C6] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n      {{ config?.actionCount }} actions\n    </span>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config?.duration || 0) }}\n      </span>\n      <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded && hasSubSteps\" class=\"cqa-mt-1.5 cqa-mb-3 cqa-ml-9\" style=\"border-top: 1px solid #E4E4E4;\">\n    <!-- Action Trace Tab Content -->\n    <div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-my-1.5\">\n        <ng-container *ngFor=\"let action of config?.actions; let i = index; trackBy: trackByActionId\">\n          <div\n            *ngIf=\"action?.description\"\n            class=\"cqa-font-inter cqa-rounded-md cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1\"\n            [ngStyle]=\"{\n              'background-color': action?.reasoning ? '#EEF2FF' : '#F7FAFC',\n              'border': action?.reasoning ? '1px solid #C4B5FD' : '1px solid #BEDBFF'\n            }\"\n          >\n            <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n              <ng-container *ngIf=\"(action?.status || '')?.toLowerCase() === 'failed' || (action?.status || '')?.toLowerCase() === 'failure' || (action?.status || '')?.toLowerCase() === 'error'; else aiActionTickIcon\">\n                <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/>\n                  <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/>\n                  <path d=\"M5.5 5.5L10.5 10.5M10.5 5.5L5.5 10.5\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n              </ng-container>\n              <ng-template #aiActionTickIcon>\n                <svg *ngIf=\"!action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#DBEAFE\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#155DFC\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"8\" fill=\"#ddd7f5\"/><path d=\"M5.08337 8.41675L6.75004 10.0834L10.9167 5.91675\" stroke=\"#7C3AED\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </ng-template>\n            </div>\n            <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n              <svg *ngIf=\"!action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#FEF3C6\"/><path d=\"M10.5 9V5.5L6 11H9.5V14.5L14 9H10.5Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                <svg *ngIf=\"action?.reasoning\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect width=\"20\" height=\"20\" rx=\"4\" fill=\"#ddd7f5\"/>\n                  <path d=\"M8.8315 10.5H11.168M10 3.5V4M13.182 4.818L12.8285 5.1715M14.5 8H14M6 8H5.5M7.1715 5.1715L6.818 4.818M8.232 9.768C7.88243 9.41834 7.6444 8.97288 7.54799 8.48795C7.45158 8.00301 7.50113 7.50038 7.69036 7.04361C7.8796 6.58683 8.20003 6.19642 8.61114 5.92175C9.02225 5.64707 9.50557 5.50047 10 5.50047C10.4944 5.50047 10.9777 5.64707 11.3889 5.92175C11.8 6.19642 12.1204 6.58683 12.3096 7.04361C12.4989 7.50038 12.5484 8.00301 12.452 8.48795C12.3556 8.97288 12.1176 9.41834 11.768 9.768L11.494 10.0415C11.3374 10.1982 11.2131 10.3842 11.1283 10.5889C11.0436 10.7936 11 11.0129 11 11.2345V11.5C11 11.7652 10.8946 12.0196 10.7071 12.2071C10.5196 12.3946 10.2652 12.5 10 12.5C9.73478 12.5 9.48043 12.3946 9.29289 12.2071C9.10536 12.0196 9 11.7652 9 11.5V11.2345C9 10.787 8.822 10.3575 8.506 10.0415L8.232 9.768Z\" stroke=\"#7C3AED\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n    \n              </div>\n            <span\n              class=\"cqa-flex-1 cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\" style=\"word-break: break-word;\"\n              [ngStyle]=\"{ color: action?.reasoning ? '#4C1D95' : '#0B0B0B' }\"\n            >\n              {{ action.description }}\n            </span>\n            <span *ngIf=\"action.confidence\" class=\"cqa-font-inter cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#00A63E]\">\n              {{ action.confidence }}%\n            </span>\n            <span class=\"cqa-text-[10px] cqa-font-inter cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\" *ngIf=\"!action?.reasoning\">\n              {{ formatDuration(action.duration) }}\n            </span>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n  </div>\n\n      <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n  <!-- Timing Breakdown -->\n  <div *ngIf=\"config?.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <span>Timing breakdown</span>\n    </div>\n    <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n      <div>\n        App <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.app || 0) }}</span>\n      </div>\n      <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n      <div>\n        Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config?.timingBreakdown?.tool || 0) }}</span>\n      </div>\n    </span>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [testStepResultId]=\"testStepResultId\"\n      [timingBreakdown]=\"timingBreakdown\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, OnChanges, OnDestroy, Output, SimpleChanges, DoCheck } from '@angular/core';\nimport { ApiStepConfig, ApiAssertion, SubStep, StepStatus, TimingBreakdown, FailureDetails, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-api-step',\n  templateUrl: './api-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class ApiStepComponent extends BaseStepComponent implements OnInit, OnChanges, OnDestroy, DoCheck {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() method!: string;\n  @Input() endpoint!: string;\n  @Input() statusCode!: number;\n  @Input() responseTime!: number;\n  @Input() requestBody?: any;\n  @Input() responseBody?: any;\n  @Input() requestHeaders?: any;\n  @Input() responseHeaders?: any;\n  @Input() assertions?: ApiAssertion[];\n  @Input() initialActions?: SubStep[];\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() stepDeleted?: boolean;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive: boolean = false;\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n  @Output() jsonPathCopied = new EventEmitter<{ path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }>();\n\n  showFailedStepDetails: boolean = false;\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: ApiStepConfig;\n\n  private previousStatus?: StepStatus;\n  private userManuallyClosed: boolean = false;\n  showRequestSummaryCopied: boolean = false;\n\n  // Processed initial actions for live mode WAIT_FOR_LOCATOR countdown grouping\n  processedInitialActions: any[] = [];\n  private lastProcessedIndex: number = 0;\n  private waitLocatorGroupEntry: any | null = null;\n  private countdownIntervalId: any = null;\n\n  // AI_AUTO_HEAL grouping: show loading until AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n  private aiAutoHealGroupEntry: any | null = null;\n\n  // Processed initial actions for run result screen (filter and split AI_AUTO_HEAL_SUCCESS/FAILED)\n  processedInitialActionsForRunResult: any[] = [];\n  private requestSummaryCopiedTimeout?: any;\n  showRequestHeadersCopied: boolean = false;\n  private requestHeadersCopiedTimeout?: any;\n  showResponseHeadersCopied: boolean = false;\n  private responseHeadersCopiedTimeout?: any;\n  showRequestBodyCopied: boolean = false;\n  private requestBodyCopiedTimeout?: any;\n  showResponseBodyCopied: boolean = false;\n  private responseBodyCopiedTimeout?: any;\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.updateConfig();\n\n    super.ngOnInit();\n    \n    // Ensure isExpanded is set correctly after super.ngOnInit()\n    if (this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n    }\n\n    // Initialize live initial actions processing for WAIT_FOR_LOCATOR grouping\n    if (this.isLive && this.initialActions && this.initialActions.length > 0) {\n      this.processLiveInitialActions();\n    } else if (!this.isLive && this.initialActions && this.initialActions.length > 0) {\n      // Process for run result screen: filter and split AI_AUTO_HEAL_SUCCESS/FAILED\n      this.processInitialActionsForRunResult();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if(this.isLive) {\n      // Update config when any relevant input changes\n      if (changes['status'] || changes['duration'] || changes['expanded'] ||\n          changes['statusCode'] || changes['responseTime'] || changes['assertions'] ||\n          changes['initialActions'] || changes['requestBody'] || changes['responseBody'] ||\n          changes['requestHeaders'] || changes['responseHeaders'] || changes['timingBreakdown'] ||\n          changes['stepNumber']) {\n        this.updateConfig();\n      }\n      \n      // Update expanded state if changed\n      if (changes['expanded'] && this.expanded !== undefined) {\n        this.isExpanded = this.expanded;\n      }\n\n      // Update initialActions array when new ones are added\n      if (changes['initialActions']) {\n        const previousActionsCount = changes['initialActions'].previousValue?.length || 0;\n        const currentActionsCount = (this.initialActions || []).length;\n        \n        // Process live initial actions\n        if (this.isLive) {\n          this.processLiveInitialActions();\n        } else {\n          this.processInitialActionsForRunResult();\n        }\n        \n        // Auto-expand if step is running and new initialActions are added (logs coming in)\n        if (!changes['initialActions'].firstChange && \n            this.status === 'running' && \n            currentActionsCount > previousActionsCount &&\n            this.hasSubSteps && \n            !this.isExpanded && \n            !this.userManuallyClosed) {\n          this.autoExpand();\n        }\n      }\n\n      // Handle status changes - auto-expand when step starts executing\n      if (changes['status'] && !changes['status'].firstChange) {\n        const newStatus = changes['status'].currentValue;\n        const oldStatus = changes['status'].previousValue;\n        \n        // Auto-expand when status changes to 'running' and has subSteps (or will have soon)\n        if (newStatus === 'running' && oldStatus !== 'running' && !this.userManuallyClosed) {\n          // Expand immediately if already has subSteps, or wait for them\n          if (this.hasSubSteps) {\n            this.autoExpand();\n          }\n        }\n        \n        this.previousStatus = newStatus;\n      }\n    }\n\n    if (changes['stepDeleted'] && this.config) {\n      this.config.stepDeleted = changes['stepDeleted'].currentValue;\n    }\n  }\n\n  getStatusBadgeClass(): string {\n    if (this.config.statusCode >= 200 && this.config.statusCode < 300) {\n      return 'cqa-bg-green-100 cqa-text-green-800';\n    } else if (this.config.statusCode >= 400 && this.config.statusCode < 500) {\n      return 'cqa-bg-orange-100 cqa-text-orange-800';\n    } else {\n      return 'cqa-bg-red-100 cqa-text-red-800';\n    }\n  }\n\n  formatJson(obj: any): string {\n    return JSON.stringify(obj, null, 2);\n  }\n\n  getPassedAssertions(): number {\n    return this.config.assertions?.filter(a => a.status === 'passed').length || 0;\n  }\n\n  getFailedAssertions(): number {\n    return this.config.assertions?.filter(a => a.status === 'failed').length || 0;\n  }\n\n  copyToClipboard(text: string): void {\n    navigator.clipboard.writeText(text).then(() => {\n      console.log('Copied to clipboard:', text);\n    }).catch(err => {\n      console.error('Failed to copy to clipboard:', err);\n      // Call the handler if copy fails\n      if (this.onJsonPathCopiedHandler) {\n        console.log('Calling onJsonPathCopiedHandler from copyToClipboard');\n        try {\n          this.onJsonPathCopiedHandler({ path: text, source: 'responseBody' });\n        } catch (handlerError) {\n          console.error('Error in onJsonPathCopiedHandler:', handlerError);\n        }\n      }\n    });\n  }\n\n  copyRequestBody(): void {\n    if (this.requestBody) {\n      const formattedJson = this.formatJson(this.requestBody);\n      navigator.clipboard.writeText(formattedJson).then(() => {\n        // Show \"Copied\" tooltip\n        this.showRequestBodyCopied = true;\n        \n        // Clear any existing timeout\n        if (this.requestBodyCopiedTimeout) {\n          clearTimeout(this.requestBodyCopiedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.requestBodyCopiedTimeout = setTimeout(() => {\n          this.showRequestBodyCopied = false;\n        }, 2000);\n      }).catch(err => {\n        console.error('Failed to copy request body:', err);\n      });\n    }\n  }\n\n  copyResponseBody(): void {\n    if (this.responseBody) {\n      const formattedJson = this.formatJson(this.responseBody);\n      navigator.clipboard.writeText(formattedJson).then(() => {\n        // Show \"Copied\" tooltip\n        this.showResponseBodyCopied = true;\n        \n        // Clear any existing timeout\n        if (this.responseBodyCopiedTimeout) {\n          clearTimeout(this.responseBodyCopiedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.responseBodyCopiedTimeout = setTimeout(() => {\n          this.showResponseBodyCopied = false;\n        }, 2000);\n      }).catch(err => {\n        console.error('Failed to copy response body:', err);\n      });\n    }\n  }\n\n  copyRequestHeaders(): void {\n    if (this.requestHeaders) {\n      const formattedJson = this.formatJson(this.requestHeaders);\n      navigator.clipboard.writeText(formattedJson).then(() => {\n        // Show \"Copied\" tooltip\n        this.showRequestHeadersCopied = true;\n        \n        // Clear any existing timeout\n        if (this.requestHeadersCopiedTimeout) {\n          clearTimeout(this.requestHeadersCopiedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.requestHeadersCopiedTimeout = setTimeout(() => {\n          this.showRequestHeadersCopied = false;\n        }, 2000);\n      }).catch(err => {\n        console.error('Failed to copy request headers:', err);\n      });\n    }\n  }\n\n  copyResponseHeaders(): void {\n    if (this.responseHeaders) {\n      const formattedJson = this.formatJson(this.responseHeaders);\n      navigator.clipboard.writeText(formattedJson).then(() => {\n        // Show \"Copied\" tooltip\n        this.showResponseHeadersCopied = true;\n        \n        // Clear any existing timeout\n        if (this.responseHeadersCopiedTimeout) {\n          clearTimeout(this.responseHeadersCopiedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.responseHeadersCopiedTimeout = setTimeout(() => {\n          this.showResponseHeadersCopied = false;\n        }, 2000);\n      }).catch(err => {\n        console.error('Failed to copy response headers:', err);\n      });\n    }\n  }\n\n  /**\n   * Walks jsonData and builds a map from each line number (in the output of\n   * JSON.stringify(jsonData, null, 2)) to the segment path that line represents.\n   * Segments are strings for object keys and numbers for array indices.\n   */\n  private buildLinePathMap(obj: any): Map<number, Array<string | number>> {\n    const map = new Map<number, Array<string | number>>();\n    const state = { line: 0 };\n\n    const walk = (value: any, path: Array<string | number>): void => {\n      if (Array.isArray(value)) {\n        if (value.length === 0) return;\n        for (let i = 0; i < value.length; i++) {\n          state.line += 1; // newline before element\n          const elementPath = [...path, i];\n          map.set(state.line, elementPath);\n          walk(value[i], elementPath);\n        }\n        state.line += 1; // newline before closing ]\n        return;\n      }\n      if (value && typeof value === 'object') {\n        const keys = Object.keys(value);\n        if (keys.length === 0) return;\n        for (const key of keys) {\n          state.line += 1; // newline before \"key\":\n          const keyPath = [...path, key];\n          map.set(state.line, keyPath);\n          walk(value[key], keyPath);\n        }\n        state.line += 1; // newline before closing }\n        return;\n      }\n      // primitive — no additional lines\n    };\n\n    // Root line (line 0) is the opening { or [ or primitive.\n    walk(obj, []);\n    return map;\n  }\n\n  /**\n   * Extracts JSON path from the clicked position in a formatted JSON string.\n   * Returns an array of segments (string keys or numeric array indices), or null.\n   */\n  private getJsonPathFromClick(event: MouseEvent, jsonData: any, prefix: string = ''): Array<string | number> | null {\n    const target = event.target as HTMLElement;\n    if (!target || jsonData == null) return null;\n\n    const preElement = target.closest('pre');\n    if (!preElement) return null;\n\n    // Create a range at the click position\n    let range: Range | null = null;\n    if (document.caretRangeFromPoint) {\n      range = document.caretRangeFromPoint(event.clientX, event.clientY);\n    }\n\n    if (!range) {\n      // Fallback for browsers that don't support caretRangeFromPoint\n      const selection = window.getSelection();\n      if (selection && selection.rangeCount > 0) {\n        range = selection.getRangeAt(0);\n      } else {\n        return null;\n      }\n    }\n\n    // Get the text content up to the click position\n    const preRange = document.createRange();\n    preRange.selectNodeContents(preElement);\n    preRange.setEnd(range.startContainer, range.startOffset);\n    const textBeforeClick = preRange.toString();\n\n    // Count newlines to find which line we're on\n    const lineIndex = (textBeforeClick.match(/\\n/g) || []).length;\n\n    const linePathMap = this.buildLinePathMap(jsonData);\n\n    // Exact match first; otherwise fall back to the nearest preceding mapped line\n    // (handles clicks on closing brackets or blank columns).\n    let segments = linePathMap.get(lineIndex);\n    if (!segments) {\n      for (let i = lineIndex - 1; i >= 0; i--) {\n        const candidate = linePathMap.get(i);\n        if (candidate) {\n          segments = candidate;\n          break;\n        }\n      }\n    }\n    if (!segments || segments.length === 0) return null;\n\n    return prefix ? [prefix, ...segments] : [...segments];\n  }\n\n  private formatSegmentsPath(segments: Array<string | number>): string {\n    return segments.reduce<string>((acc, seg) => {\n      if (typeof seg === 'number') return `${acc}[${seg}]`;\n      return acc ? `${acc}.${seg}` : String(seg);\n    }, '');\n  }\n\n  private normalizeJsonPath(segments: Array<string | number>, prefix: string): string {\n    if (!segments || segments.length === 0) return '';\n\n    if (!prefix || segments.length < 2) {\n      return this.formatSegmentsPath(segments);\n    }\n\n    const [, ...rest] = segments;\n\n    if (prefix === 'requestHeaders' || prefix === 'responseHeaders') {\n      return rest.length ? `headers${this.formatSegmentsPath(rest).startsWith('[') ? '' : '.'}${this.formatSegmentsPath(rest)}` : 'headers';\n    }\n\n    if (prefix === 'requestBody' || prefix === 'responseBody') {\n      return rest.length ? `body${this.formatSegmentsPath(rest).startsWith('[') ? '' : '.'}${this.formatSegmentsPath(rest)}` : 'body';\n    }\n\n    return this.formatSegmentsPath(segments);\n  }\n\n  /**\n   * Copy JSON path on double-click\n   */\n  copyJsonPath(event: MouseEvent, jsonData: any, prefix: string = ''): void {\n    if (!jsonData) return;\n\n    const segments = this.getJsonPathFromClick(event, jsonData, prefix);\n    if (segments && segments.length > 0) {\n      const source = prefix as 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders';\n      const normalizedPath = this.normalizeJsonPath(segments, prefix);\n      navigator.clipboard.writeText(normalizedPath).then(() => {\n        console.log('Copied to clipboard:', normalizedPath);\n        // Call the handler on every double-click (even on success, for now showing error as per requirement)\n        if (this.onJsonPathCopiedHandler) {\n          console.log('Calling onJsonPathCopiedHandler on success with:', { path: normalizedPath, source });\n          try {\n            this.onJsonPathCopiedHandler({ path: normalizedPath, source });\n          } catch (handlerError) {\n            console.error('Error in onJsonPathCopiedHandler:', handlerError);\n          }\n        }\n        // Emit event with the copied path and source\n        this.jsonPathCopied.emit({ path: normalizedPath, source });\n      }).catch(err => {\n        console.error('Failed to copy to clipboard:', err);\n        // Call the handler if copy fails\n        if (this.onJsonPathCopiedHandler) {\n          console.log('Calling onJsonPathCopiedHandler on failure with:', { path: normalizedPath, source });\n          try {\n            this.onJsonPathCopiedHandler({ path: normalizedPath, source });\n          } catch (handlerError) {\n            console.error('Error in onJsonPathCopiedHandler:', handlerError);\n          }\n        }\n        // Also emit the event for backward compatibility\n        this.jsonPathCopied.emit({ path: normalizedPath, source });\n      });\n    } else {\n      // Fallback: if we can't determine the path, copy the whole JSON\n      const formattedJson = this.formatJson(jsonData);\n      this.copyToClipboard(formattedJson);\n    }\n  }\n\n  copyRequestSummary(): void {\n    const summary: Record<string, unknown> = {\n      method: this.config?.method,\n      endpoint: this.config?.endpoint\n    };\n    if (this.config?.statusCode != null) summary['statusCode'] = this.config.statusCode;\n    if (this.config?.responseTime != null) summary['responseTime'] = this.config.responseTime;\n    const summaryText = this.formatJson(summary);\n\n    navigator.clipboard.writeText(summaryText).then(() => {\n      // Show \"Copied\" tooltip\n      this.showRequestSummaryCopied = true;\n\n      // Clear any existing timeout\n      if (this.requestSummaryCopiedTimeout) {\n        clearTimeout(this.requestSummaryCopiedTimeout);\n      }\n\n      // Hide tooltip after 2 seconds\n      this.requestSummaryCopiedTimeout = setTimeout(() => {\n        this.showRequestSummaryCopied = false;\n      }, 2000);\n    }).catch(err => {\n      console.error('Failed to copy request summary:', err);\n    });\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    return this.initialActions || [];\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  toggleHeader(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if(!this.isExpanded){\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  override toggle(): void {\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n\n    // Track manual closure by user\n    if (wasExpanded && !this.isExpanded) {\n      this.userManuallyClosed = true;\n    } else if (!wasExpanded && this.isExpanded) {\n      this.userManuallyClosed = false;\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n  }\n\n  private autoExpand(): void {\n    if (!this.isExpanded && this.hasSubSteps) {\n      this.isExpanded = true;\n      this.userManuallyClosed = false;\n      this.toggleExpanded.emit(true);\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.initialActions !== undefined && this.initialActions.length > 0;\n  }\n\n  private updateConfig(): void {\n    // Build or update config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'api',\n      method: this.method,\n      endpoint: this.endpoint,\n      statusCode: this.statusCode,\n      responseTime: this.responseTime,\n      requestBody: this.requestBody,\n      responseBody: this.responseBody,\n      requestHeaders: this.requestHeaders,\n      responseHeaders: this.responseHeaders,\n      assertions: this.assertions,\n      initialActions: this.initialActions,\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as ApiStepConfig;\n  }\n\n  ngDoCheck(): void {\n    if (!this.isLive) return;\n    const currentLength = (this.initialActions || []).length;\n    if (currentLength !== this.lastProcessedIndex) {\n      this.processLiveInitialActions();\n    }\n  }\n\n  ngOnDestroy(): void {\n    // Clean up timeouts to prevent memory leaks\n    if (this.requestSummaryCopiedTimeout) {\n      clearTimeout(this.requestSummaryCopiedTimeout);\n    }\n    if (this.requestHeadersCopiedTimeout) {\n      clearTimeout(this.requestHeadersCopiedTimeout);\n    }\n    if (this.responseHeadersCopiedTimeout) {\n      clearTimeout(this.responseHeadersCopiedTimeout);\n    }\n    if (this.requestBodyCopiedTimeout) {\n      clearTimeout(this.requestBodyCopiedTimeout);\n    }\n    if (this.responseBodyCopiedTimeout) {\n      clearTimeout(this.responseBodyCopiedTimeout);\n    }\n    this.clearCountdownTimer();\n  }\n\n  private processLiveInitialActions(): void {\n    const allInitialActions = (this.initialActions || []) as any[];\n\n    // Reset if initialActions were cleared or replaced with fewer entries\n    if (allInitialActions.length < this.lastProcessedIndex) {\n      this.resetLiveProcessing();\n    }\n\n    for (let i = this.lastProcessedIndex; i < allInitialActions.length; i++) {\n      const action = allInitialActions[i];\n      const uiType: string = action?.uiType || action?.type || '';\n      const status: string = (action?.status || '').toLowerCase();\n\n      if (uiType === 'WAIT_FOR_LOCATOR') {\n        // Create a single grouped entry with a countdown; absorbs FIND_LOCATOR and LOCATOR_FOUND\n        const timeoutSeconds = typeof action.value === 'number'\n          ? action.value\n          : (action.value ? parseFloat(action.value) : 30);\n\n        this.clearCountdownTimer();\n\n        this.waitLocatorGroupEntry = {\n          ...action,\n          remainingSeconds: timeoutSeconds,\n          status: 'running'\n        };\n        this.addDurationToWaitLocatorGroupEntry(action);\n        this.processedInitialActions.push(this.waitLocatorGroupEntry);\n\n        // Tick down every second\n        this.countdownIntervalId = setInterval(() => {\n          if (this.waitLocatorGroupEntry) {\n            this.waitLocatorGroupEntry.remainingSeconds = Math.max(0, this.waitLocatorGroupEntry.remainingSeconds - 1);\n            if (this.waitLocatorGroupEntry.remainingSeconds <= 0) {\n              this.waitLocatorGroupEntry.status = 'failed';\n              this.waitLocatorGroupEntry.remainingSeconds = null;\n              this.clearCountdownTimer();\n              this.waitLocatorGroupEntry = null;\n            }\n          }\n        }, 1000);\n\n      } else if (uiType === 'FIND_LOCATOR') {\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedInitialActions = this.processedInitialActions.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedInitialActions.push({ ...action, status: 'failed' });\n        } else if (this.waitLocatorGroupEntry) {\n          // Update the single group entry's text so the user sees progress\n          const newText = action.description || action.text || action.title;\n          if (newText) this.waitLocatorGroupEntry.description = newText;\n          this.addDurationToWaitLocatorGroupEntry(action);\n        } else {\n          // No active group – push FIND_LOCATOR normally once countdown is cleared\n          this.processedInitialActions.push({ ...action });\n        }\n\n      } else if (uiType === 'LOCATOR_FOUND') {\n\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedInitialActions = this.processedInitialActions.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedInitialActions.push({ ...action, status: 'failed' });\n        } else {\n          // Sequence complete – update group entry to show LOCATOR_FOUND text as success\n          if (this.waitLocatorGroupEntry) {\n            const newText = action.description || action.text || action.title;\n            if (newText) this.waitLocatorGroupEntry.description = newText;\n            this.waitLocatorGroupEntry.status = 'success';\n            this.addDurationToWaitLocatorGroupEntry(action);\n            this.waitLocatorGroupEntry.remainingSeconds = null;\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          } else {\n            // No active group – push LOCATOR_FOUND normally\n            this.processedInitialActions.push({ ...action });\n          }\n        }\n\n      } else if (uiType === 'AI_AUTO_HEAL') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before starting AI auto-heal\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Add single loading entry; will be replaced by AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n        this.aiAutoHealGroupEntry = {\n          ...action,\n          description: action.description || action.text || 'AI auto-heal started',\n          status: 'running',\n          uiType: 'AI_AUTO_HEAL'\n        };\n        this.processedInitialActions.push(this.aiAutoHealGroupEntry);\n\n      } else if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before handling AI auto-heal result\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Remove loading entry and add TWO separate entries: value and reasoning (like AI_ANSWER)\n        if (this.aiAutoHealGroupEntry) {\n          this.processedInitialActions = this.processedInitialActions.filter(entry => entry !== this.aiAutoHealGroupEntry);\n          this.aiAutoHealGroupEntry = null;\n        }\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = action.value ?? action.text ?? '';\n        const reasoning = action.reasoning ?? action.Reasoning ?? '';\n        const baseDuration = action.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = action.text || action.description || (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedInitialActions.push({\n          ...action,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedInitialActions.push({\n            ...action,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n\n      } else {\n        // Any failed log while a countdown is active – resolve it as failed\n        if ((status === 'failed' || status === 'failure') && this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n        this.processedInitialActions.push(action);\n      }\n    }\n\n    this.lastProcessedIndex = allInitialActions.length;\n  }\n\n  private resetLiveProcessing(): void {\n    this.clearCountdownTimer();\n    this.processedInitialActions = [];\n    this.lastProcessedIndex = 0;\n    this.waitLocatorGroupEntry = null;\n    this.aiAutoHealGroupEntry = null;\n  }\n\n  private clearCountdownTimer(): void {\n    if (this.countdownIntervalId !== null) {\n      clearInterval(this.countdownIntervalId);\n      this.countdownIntervalId = null;\n    }\n  }\n\n  private addDurationToWaitLocatorGroupEntry(action: any): void {\n    if (!this.waitLocatorGroupEntry) {\n      return;\n    }\n\n    const rawDuration = action?.duration;\n    let delta = 0;\n    if (typeof rawDuration === 'number') {\n      delta = rawDuration;\n    } else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {\n      const parsed = parseFloat(rawDuration);\n      delta = Number.isFinite(parsed) ? parsed : 0;\n    }\n\n    if (delta <= 0) {\n      return;\n    }\n\n    const currentRaw = this.waitLocatorGroupEntry.duration;\n    let current = 0;\n    if (typeof currentRaw === 'number') {\n      current = currentRaw;\n    } else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {\n      const parsedCurrent = parseFloat(currentRaw);\n      current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;\n    }\n\n    this.waitLocatorGroupEntry.duration = current + delta;\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  private processInitialActionsForRunResult(): void {\n    const allInitialActions = (this.initialActions || []) as any[];\n    this.processedInitialActionsForRunResult = [];\n\n    for (const action of allInitialActions) {\n      const uiType: string = action?.uiType || action?.type || '';\n\n      // Split AI_AUTO_HEAL_SUCCESS/FAILED into two entries\n      if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = action.value ?? action.text ?? '';\n        const reasoning = action.reasoning ?? action.Reasoning ?? '';\n        const baseDuration = action.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedInitialActionsForRunResult.push({\n          ...action,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedInitialActionsForRunResult.push({\n            ...action,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n      } else {\n        const status = (action?.status ?? '').toString().toLowerCase();\n        const isFailed = status === 'failed' || status === 'failure';\n        const isLocatorStep = uiType === 'WAIT_FOR_LOCATOR' || uiType === 'FIND_LOCATOR' || uiType === 'LOCATOR_FOUND';\n        if (isLocatorStep && isFailed) {\n          const baseDesc = action?.description ?? action?.text ?? action?.title ?? '';\n          const notFoundSuffix = ' - Element not found';\n          this.processedInitialActionsForRunResult.push({\n            ...action,\n            description: (baseDesc ? baseDesc + notFoundSuffix : notFoundSuffix.trim())\n          });\n        } else {\n          this.processedInitialActionsForRunResult.push(action);\n        }\n      }\n    }\n  }\n\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    \n    <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'skipped'\"><svg xmlns=\"http://www.w3.org/2000/svg\" height=\"12px\" viewBox=\"0 -960 960 960\" width=\"12px\" fill=\"#1f1f1f\"><path d=\"M660-240v-480h80v480h-80Zm-440 0v-480l360 240-360 240Zm80-240Zm0 90 136-90-136-90v180Z\"/></svg></div>\n    <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <!-- API Icon -->\n    <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#EDE9FE\"/><path d=\"M8 6.5L9.5 8L8 9.5M10.5 9.5H12M6.5 12H13.5C13.7652 12 14.0196 11.8946 14.2071 11.7071C14.3946 11.5196 14.5 11.2652 14.5 11V5C14.5 4.73478 14.3946 4.48043 14.2071 4.29289C14.0196 4.10536 13.7652 4 13.5 4H6.5C6.23478 4 5.98043 4.10536 5.79289 4.29289C5.60536 4.48043 5.5 4.73478 5.5 5V11C5.5 11.2652 5.60536 11.5196 5.79289 11.7071C5.98043 11.8946 6.23478 12 6.5 12Z\" stroke=\"#7F22FE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config?.stepNumber }}. <span [innerHTML]=\"config.title\"></span>\n      </span>\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#7008E7] cqa-bg-[#EDE9FE] cqa-text-[10px] cqa-leading-[15px]\">\n        API\n      </span>\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#008236] cqa-bg-[#DCFCE7] cqa-text-[10px] cqa-leading-[15px]\">\n        {{ config.method }}\n      </span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\">\n    <!-- Initial Actions (show when we have raw or processed actions; in live mode processedInitialActions is populated from initialActions via ngDoCheck) -->\n    <div *ngIf=\"(config.initialActions && config.initialActions.length > 0) || (isLive && processedInitialActions.length > 0)\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-ml-9\">\n      <!-- Single loop: render all entries in chronological order -->\n      <ng-container *ngFor=\"let action of (isLive ? processedInitialActions : processedInitialActionsForRunResult)\">\n        <!-- AI_AUTO_HEAL_SUCCESS/FAILED: render with ai-agent-step style (both live and run result screens) -->\n        <cqa-ai-logs-with-reasoning\n          *ngIf=\"$any(action).isAiAutoHealResult\"\n          [status]=\"action.status\"\n          [text]=\"$any(action).text || action?.value\"\n          [description]=\"$any(action).description || action?.text || action?.value\"\n          [reasoning]=\"$any(action).reasoning || action?.reasoning\"\n          [duration]=\"action.duration\">\n        </cqa-ai-logs-with-reasoning>\n\n        <!-- Regular initial actions -->\n        <div\n          *ngIf=\"!$any(action).isAiAutoHealResult\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n          \n          <div *ngIf=\"action?.status?.toLowerCase() === 'success' || action?.status?.toLowerCase() === 'passed'\" >\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Failure -->\n          <div *ngIf=\"action?.status?.toLowerCase() === 'failure' || action?.status?.toLowerCase() === 'failed'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Pending -->\n          <div *ngIf=\"action?.status?.toLowerCase() === 'pending'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Running - Show spinner (also used for active WAIT_FOR_LOCATOR countdown in live mode) -->\n          <div *ngIf=\"action?.status?.toLowerCase() === 'running'\">\n            <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n          </div>\n\n          <!-- Action Description -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"white-space: pre-line; word-break: break-word;\">\n            {{ $any(action).description || $any(action).text }}\n            <!-- Countdown for active WAIT_FOR_LOCATOR in live mode -->\n            <span *ngIf=\"isLive && $any(action).remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\">({{ $any(action).remainingSeconds }}s remaining)</span>\n          </span>\n\n          <!-- Action Duration -->\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n            {{ formatDuration(action.duration) }}\n          </span>\n        </div>\n      </ng-container>\n    </div>\n\n    <!-- Request Summary Card -->\n    <div *ngIf=\"!isLive\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4\" style=\"border-top: 1px solid #E4E4E4;\">\n      \n      <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #EDE9FE\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n          <span>Request Summary</span>\n          <div class=\"cqa-relative\">\n            <button (click)=\"copyRequestSummary()\" class=\"cqa-flex cqa-items-center cqa-gap-1 p-0\">\n              <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              Copy\n            </button>\n            <!-- Copied Tooltip -->\n            <div \n              *ngIf=\"showRequestSummaryCopied\" \n              class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n              style=\"animation: fadeInOut 0.2s ease-in-out;\">\n              Copied!\n            </div>\n          </div>\n        </div>\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-cursor-pointer\" (dblclick)=\"copyRequestSummary()\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <span class=\"cqa-px-1 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#008236] cqa-bg-[#DCFCE7] cqa-text-[10px] cqa-leading-[15px]\">\n              {{ config.method }}\n            </span>\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\">{{ config.endpoint }}</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n            <span *ngIf=\"config?.statusCode === 200 || config?.statusCode === 201\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-px-1 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#00A63E] cqa-bg-[#DCFCE7] cqa-text-[10px] cqa-leading-[15px]\">\n              <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg>\n              {{ config.statusCode }}\n            </span>\n            <span *ngIf=\"config?.statusCode && config?.statusCode !== 200 && config?.statusCode !== 201\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-px-1 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#E7000B] cqa-bg-[#FFE2E2] cqa-text-[10px] cqa-leading-[15px]\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.5 3.5L3.5 10.5\" stroke=\"#E7000B\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.5 3.5L10.5 10.5\" stroke=\"#E7000B\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              {{ config.statusCode }}\n            </span>\n            <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\" *ngIf=\"config?.responseTime\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.99999 12.8334C10.2217 12.8334 12.8333 10.2217 12.8333 7.00008C12.8333 3.77842 10.2217 1.16675 6.99999 1.16675C3.77833 1.16675 1.16666 3.77842 1.16666 7.00008C1.16666 10.2217 3.77833 12.8334 6.99999 12.8334Z\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              <span>{{ config.responseTime }}ms</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <!-- Request/Response Headers -->\n      <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-mt-4\" *ngIf=\"config?.requestHeaders || config?.responseHeaders\">\n        <!-- Request Headers -->\n        <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Request Headers</span>\n            <div class=\"cqa-relative\">\n              <button (click)=\"copyRequestHeaders()\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </button>\n              <!-- Copied Tooltip -->\n              <div \n                *ngIf=\"showRequestHeadersCopied\" \n                class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n                style=\"animation: fadeInOut 0.2s ease-in-out;\">\n                Copied\n              </div>\n            </div>\n          </div>\n          <pre *ngIf=\"config.requestHeaders\" class=\"cqa-h-full cqa-text-[12px] cqa-text-[#0B0B0B] cqa-bg-[#F8F8F8] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px] cqa-cursor-pointer\" style=\"scrollbar-width: thin;\" (dblclick)=\"copyJsonPath($event, config.requestHeaders, 'requestHeaders')\">{{ formatJson(config.requestHeaders) }}</pre>\n        </div>\n\n        <!-- Response Headers -->\n        <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Response Headers</span>\n            <div class=\"cqa-relative\">\n              <button (click)=\"copyResponseHeaders()\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </button>\n              <!-- Copied Tooltip -->\n              <div \n                *ngIf=\"showResponseHeadersCopied\" \n                class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n                style=\"animation: fadeInOut 0.2s ease-in-out;\">\n                Copied\n              </div>\n            </div>\n          </div>\n          <pre *ngIf=\"config.responseHeaders\" [ngClass]=\"{'cqa-bg-[#FEF2F2] cqa-text-[#C10007]': config.statusCode >= 400}\" class=\"cqa-h-full cqa-text-[12px] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px] cqa-cursor-pointer\" style=\"scrollbar-width: thin;\" (dblclick)=\"copyJsonPath($event, config.responseHeaders, 'responseHeaders')\">{{ formatJson(config.responseHeaders) }}</pre>\n        </div>\n      </div>\n\n      <!-- Request/Response Bodies -->\n      <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-mt-4\" *ngIf=\"config?.requestBody || config?.responseBody\">\n        <!-- Request Body -->\n        <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Request Body</span>\n            <div class=\"cqa-relative\">\n              <button (click)=\"copyRequestBody()\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </button>\n              <!-- Copied Tooltip -->\n              <div \n                *ngIf=\"showRequestBodyCopied\" \n                class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n                style=\"animation: fadeInOut 0.2s ease-in-out;\">\n                Copied\n              </div>\n            </div>\n          </div>\n          <pre *ngIf=\"config.requestBody\" class=\"cqa-h-full cqa-text-[12px] cqa-text-[#0B0B0B] cqa-bg-[#F8F8F8] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px] cqa-cursor-pointer\" style=\"scrollbar-width: thin;\" (dblclick)=\"copyJsonPath($event, config.requestBody, 'requestBody')\">{{ formatJson(config.requestBody) }}</pre>\n        </div>\n\n        <!-- Response Body -->\n        <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Response Body</span>\n            <div class=\"cqa-relative\">\n              <button (click)=\"copyResponseBody()\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </button>\n              <!-- Copied Tooltip -->\n              <div \n                *ngIf=\"showResponseBodyCopied\" \n                class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n                style=\"animation: fadeInOut 0.2s ease-in-out;\">\n                Copied\n              </div>\n            </div>\n          </div>\n          <pre *ngIf=\"config.responseBody\" [ngClass]=\"{'cqa-bg-[#FEF2F2] cqa-text-[#C10007]': config.statusCode >= 400}\" class=\"cqa-h-full cqa-text-[12px] cqa-p-2 cqa-m-0 cqa-rounded cqa-overflow-auto cqa-max-h-[114px] cqa-cursor-pointer\" style=\"scrollbar-width: thin;\" (dblclick)=\"copyJsonPath($event, config.responseBody, 'responseBody')\">{{ formatJson(config.responseBody) }}</pre>\n        </div>\n      </div>\n\n      <!-- Assertions -->\n      <div *ngIf=\"config.assertions && config.assertions.length > 0\" class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col cqa-mt-4\" style=\"border: 1px solid #EDE9FE\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-3\">\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Assertions</span>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">\n            <span class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#00A63E]\">\n              <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              {{ getPassedAssertions() }} passed\n            </span>\n            <span class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#E7000B]\">\n              <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 3L3 9\" stroke=\"#E7000B\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3 3L9 9\" stroke=\"#E7000B\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              {{ getFailedAssertions() }} failed\n            </span>\n          </div>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div\n            *ngFor=\"let assertion of config.assertions\"\n            class=\"cqa-flex cqa-justify-between cqa-gap-2 cqa-flex-wrap cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363] cqa-px-3 cqa-py-1 cqa-rounded-md cqa-items-center\"\n            [ngStyle]=\"{\n                'background-color': assertion.status === 'passed' ? '#ECFDF3' : '#FEF2F2',\n                'border': assertion.status === 'passed'\n                  ? '1px solid #A7F3D0'\n                  : '1px solid #FFC9C9'\n            }\"\n          >\n            <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-2\">\n              <div>\n                <!-- Passed -->\n                <ng-container *ngIf=\"assertion.status === 'passed'; else failedIcon\">\n                  <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#DCFCE7\"/><path d=\"M14 7L8.5 12.5L6 10\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                </ng-container>\n                \n                <!-- Failed -->\n                <ng-template #failedIcon>\n                  <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"20\" rx=\"10\" fill=\"#FFE2E2\"/><path d=\"M13 7L7 13\" stroke=\"#E7000B\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 7L13 13\" stroke=\"#E7000B\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                </ng-template>\n              </div>\n              <div class=\"cqa-text-[12px] cqa-leading-[15px]\" \n                [ngClass]=\"{\n                  'cqa-text-[#9F0712]': assertion.status !== 'passed',\n                  'cqa-text-[#016630]': assertion.status === 'passed'\n                }\"\n              >\n                {{ assertion.description }}\n              </div>\n            </div>\n            <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-max-w-[200px]\">\n              <div>\n                <span>Expected:</span>\n                <span style=\"word-break: break-word;\" [ngClass]=\"assertion.status === 'passed' ? 'cqa-text-[#008236]' : 'cqa-text-[#0B0B0B]'\">\n                  {{ assertion.expected }}\n                </span>\n              </div>\n              <div>\n                <span>Actual:</span>\n                <span style=\"word-break: break-word;\" [ngClass]=\"assertion.status === 'passed' ? 'cqa-text-green-600' : 'cqa-text-[#E7000B]'\">\n                  {{ assertion.actual }}\n                </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n      <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n  </div>\n\n  <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n  <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component - shown when button is clicked -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [testStepResultId]=\"testStepResultId\"\n      [timingBreakdown]=\"timingBreakdown\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, OnDestroy } from '@angular/core';\nimport { FileDownloadStepConfig, StepStatus, TimingBreakdown, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n  selector: 'cqa-file-download-step',\n  templateUrl: './file-download-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class FileDownloadStepComponent extends BaseStepComponent implements OnInit, OnChanges, OnDestroy {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() fileName!: string;\n  @Input() fileType!: string;\n  @Input() fileSize?: string;\n  @Input() filePath?: string;\n  @Input() downloaded!: boolean;\n  @Input() stepDeleted?: boolean;\n  @Input() isDownloading?: boolean;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n\n  // Event outputs\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Output() download = new EventEmitter<{ fileName: string; filePath?: string; fileType: string; testStepResultId: string }>();\n  @Output() filePathCopied = new EventEmitter<{ filePath: string; testStepResultId: string }>();\n  @Output() textCopied = new EventEmitter<{ text: string; testStepResultId: string }>();\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: FileDownloadStepConfig;\n\n  showFilePathCopied = false;\n  private filePathCopiedTimeout?: ReturnType<typeof setTimeout>;\n\n  override ngOnInit(): void {\n    this.updateConfigFromInputs();\n    super.ngOnInit();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    this.updateConfigFromInputs();\n    if (changes['expanded']) {\n      this.isExpanded = this.expanded ?? false;\n    }\n  }\n\n  private updateConfigFromInputs(): void {\n    this.config = {\n      id: this.id,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'file-download',\n      fileName: this.fileName,\n      fileType: this.fileType,\n      fileSize: this.fileSize,\n      filePath: this.filePath,\n      downloaded: this.downloaded,\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as FileDownloadStepConfig;\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  getFileTypeBadgeClass(): string {\n    const type = this.fileType.toLowerCase();\n    if (type === 'pdf') {\n      return 'cqa-bg-red-100 cqa-text-red-800';\n    } else if (type === 'csv') {\n      return 'cqa-bg-green-100 cqa-text-green-800';\n    } else if (type === 'xlsx' || type === 'excel') {\n      return 'cqa-bg-blue-100 cqa-text-blue-800';\n    }\n    return 'cqa-bg-gray-100 cqa-text-gray-800';\n  }\n\n  onDownload(): void {\n    // Emit download event with file information\n    this.download.emit({\n      fileName: this.fileName,\n      filePath: this.filePath,\n      fileType: this.fileType,\n      testStepResultId: this.testStepResultId\n    });\n  }\n\n  copyToClipboard(text: string): void {\n    navigator.clipboard.writeText(text).then(() => {\n      // Emit text copied event\n      this.textCopied.emit({\n        text: text,\n        testStepResultId: this.testStepResultId\n      });\n    }).catch(err => {\n      console.error('Failed to copy to clipboard:', err);\n    });\n  }\n\n  copyFilePath(): void {\n    if (!this.filePath) return;\n    navigator.clipboard.writeText(this.filePath).then(() => {\n      this.textCopied.emit({ text: this.filePath!, testStepResultId: this.testStepResultId });\n      this.filePathCopied.emit({ filePath: this.filePath!, testStepResultId: this.testStepResultId });\n      this.showFilePathCopied = true;\n      if (this.filePathCopiedTimeout) clearTimeout(this.filePathCopiedTimeout);\n      this.filePathCopiedTimeout = setTimeout(() => {\n        this.showFilePathCopied = false;\n      }, 2000);\n    }).catch(err => {\n      console.error('Failed to copy file path to clipboard:', err);\n    });\n  }\n\n  ngOnDestroy(): void {\n    if (this.filePathCopiedTimeout) clearTimeout(this.filePathCopiedTimeout);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n}\n","<div class=\"cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : config.status.toLowerCase() === 'paused' ? '#FFF9E9' : config.status.toLowerCase() === 'failed' ? '#FEF2F2' : null\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggle()\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"config.status.toLowerCase() === 'failed' || config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div class=\"cqa-flex cqa-items-center\" *ngIf=\"config.status.toLowerCase() === 'skipped' || config.status.toLowerCase() === 'skip'\">\n      <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n        skip_next\n      </span>\n    </div>\n    <div *ngIf=\"config.status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Download Icon -->\n    <div><svg width=\"20\" height=\"13\" viewBox=\"0 0 20 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"13\" rx=\"4\" fill=\"#E6F4FF\"/><path d=\"M5.5 8.75V9.3125C5.5 9.76005 5.67779 10.1893 5.99426 10.5057C6.31072 10.8222 6.73995 11 7.1875 11H12.8125C13.2601 11 13.6893 10.8222 14.0057 10.5057C14.3222 10.1893 14.5 9.76005 14.5 9.3125V8.75M12.25 6.5L10 8.75M10 8.75L7.75 6.5M10 8.75V2\" stroke=\"#0A86E6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config.stepNumber }}. <span [innerHTML]=\"config.title\"></span>\n      </span>\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#0A86E6] cqa-bg-[#E6F4FF] cqa-text-[10px] cqa-leading-[15px]\">\n        File Download\n      </span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\"\n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\" class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4 cqa-flex cqa-flex-col cqa-gap-1.5\" style=\"border-top: 1px solid #E4E4E4;\">\n    <!-- File Details Card -->\n    <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-px-3 cqa-py-1\" style=\"border: 1px solid #6DBFFF\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-w-full\">\n        <div><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"28\" height=\"28\" rx=\"5\" fill=\"#E6F4FF\"/><path d=\"M16.5 5.66675H9.00004C8.55801 5.66675 8.13409 5.84234 7.82153 6.1549C7.50897 6.46746 7.33337 6.89139 7.33337 7.33341V20.6667C7.33337 21.1088 7.50897 21.5327 7.82153 21.8453C8.13409 22.1578 8.55801 22.3334 9.00004 22.3334H19C19.4421 22.3334 19.866 22.1578 20.1786 21.8453C20.4911 21.5327 20.6667 21.1088 20.6667 20.6667V9.83341L16.5 5.66675Z\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M15.6666 5.66675V9.00008C15.6666 9.44211 15.8422 9.86603 16.1548 10.1786C16.4673 10.4912 16.8913 10.6667 17.3333 10.6667H20.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12.3333 11.5H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M17.3333 14.8333H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M17.3333 18.1667H10.6666\" stroke=\"#6DBFFF\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B\">{{ config.fileName }}</span>\n            <span [ngClass]=\"getFileTypeBadgeClass()\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-px-1 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#E7000B] cqa-bg-[#FFE2E2] cqa-text-[10px] cqa-leading-[15px]\">\n              {{ config.fileType }}\n            </span>\n          </div>\n          <div *ngIf=\"config.fileSize\" class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7.5 1H3C2.73478 1 2.48043 1.10536 2.29289 1.29289C2.10536 1.48043 2 1.73478 2 2V10C2 10.2652 2.10536 10.5196 2.29289 10.7071C2.48043 10.8946 2.73478 11 3 11H9C9.26522 11 9.51957 10.8946 9.70711 10.7071C9.89464 10.5196 10 10.2652 10 10V3.5L7.5 1Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 1V3C7 3.26522 7.10536 3.51957 7.29289 3.70711C7.48043 3.89464 7.73478 4 8 4H10\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n            {{ config.fileSize }}\n          </div>\n        </div>\n        <button\n          *ngIf=\"config.downloaded\"\n          disabled\n          class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-bg-[#E6F4FF] cqa-text-[#6DBFFF] cqa-px-[10px] cqa-py-[2px] cqa-rounded-full cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">\n          <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.00001 9.16658C7.3012 9.16658 9.16668 7.30111 9.16668 4.99992C9.16668 2.69873 7.3012 0.833252 5.00001 0.833252C2.69882 0.833252 0.833344 2.69873 0.833344 4.99992C0.833344 7.30111 2.69882 9.16658 5.00001 9.16658Z\" stroke=\"#6DBFFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.75 5.00008L4.58333 5.83341L6.25 4.16675\" stroke=\"#6DBFFF\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          Downloaded\n        </button>\n      </div>\n    </div>\n\n    <!-- Download Attachment Card -->\n    <div class=\"cqa-flex cqa-justify-between cqa-items-start cqa-bg-white cqa-rounded-lg cqa-px-3 cqa-py-1\" style=\"border: 1px solid #9DD5FF\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-w-full\">\n        <div><svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"28\" height=\"28\" rx=\"5\" fill=\"#E6F4FF\"/><path d=\"M20 16V18.6667C20 19.0203 19.8595 19.3594 19.6095 19.6095C19.3594 19.8595 19.0203 20 18.6667 20H9.33333C8.97971 20 8.64057 19.8595 8.39052 19.6095C8.14048 19.3594 8 19.0203 8 18.6667V16\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10.6666 12.6667L14 16.0001L17.3333 12.6667\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M14 16V8\" stroke=\"#0B95FF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <div class=\"cqa-flex-1 cqa-flex cqa-flex-col\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B\">Download Attachment</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[8px] cqa-leading-[12px] cqa-text-[#636363]\">\n            Access the downloaded file\n          </div>\n        </div>\n        <button\n          *ngIf=\"!config.downloaded\"\n          [disabled]=\"isDownloading\"\n          (click)=\"onDownload(); $event.stopPropagation()\"\n          class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-bg-transparent cqa-text-black cqa-px-[10px] cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\" style=\"border: 1px solid #212122\">\n          <mat-spinner *ngIf=\"isDownloading\" diameter=\"14\" style=\"display: inline-block;\"></mat-spinner>\n          <svg *ngIf=\"!isDownloading\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 7.5V9H3V7.5H2V9C2 9.55 2.45 10 3 10H9C9.55 10 10 9.55 10 9V7.5H9ZM8.5 5.5L7.795 4.795L6.5 6.085V2H5.5V6.085L4.205 4.795L3.5 5.5L6 8L8.5 5.5Z\" fill=\"black\"/></svg>\n          {{ isDownloading ? 'Downloading...' : 'Download' }}\n        </button>\n        <button\n          *ngIf=\"config.downloaded\"\n          disabled\n          class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-bg-transparent cqa-text-black cqa-px-[10px] cqa-py-[2px] cqa-rounded-lg cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\" style=\"border: 1px solid #212122\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M9 7.5V9H3V7.5H2V9C2 9.55 2.45 10 3 10H9C9.55 10 10 9.55 10 9V7.5H9ZM8.5 5.5L7.795 4.795L6.5 6.085V2H5.5V6.085L4.205 4.795L3.5 5.5L6 8L8.5 5.5Z\" fill=\"black\"/></svg>\n          Download\n        </button>\n      </div>\n    </div>\n\n    <!-- File Path Cards -->\n    <div *ngIf=\"config.filePath\" class=\"cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #9DD5FF\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.3334 13.3333C13.687 13.3333 14.0261 13.1929 14.2762 12.9428C14.5262 12.6928 14.6667 12.3536 14.6667 12V5.33333C14.6667 4.97971 14.5262 4.64057 14.2762 4.39052C14.0261 4.14048 13.687 4 13.3334 4H8.06671C7.84372 4.00219 7.62374 3.94841 7.42691 3.84359C7.23008 3.73877 7.06268 3.58625 6.94004 3.4L6.40004 2.6C6.27863 2.41565 6.11336 2.26432 5.91904 2.1596C5.72472 2.05488 5.50745 2.00004 5.28671 2H2.66671C2.31309 2 1.97395 2.14048 1.7239 2.39052C1.47385 2.64057 1.33337 2.97971 1.33337 3.33333V12C1.33337 12.3536 1.47385 12.6928 1.7239 12.9428C1.97395 13.1929 2.31309 13.3333 2.66671 13.3333H13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">File Path</div>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div class=\"cqa-flex-1 cqa-bg-[#F5F5F5] cqa-px-3 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\">\n          <span>{{ config.filePath }}</span>\n        </div>\n        <div class=\"cqa-relative\">\n          <button class=\"cqa-px-1.5 cqa-py-[3px]\" (click)=\"copyFilePath()\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n          <!-- Copied Tooltip -->\n          <div\n            *ngIf=\"showFilePathCopied\"\n            class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n            style=\"animation: fadeInOut 0.2s ease-in-out;\">\n            Copied\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"!config.filePath\" class=\"cqa-bg-white cqa-rounded-lg cqa-p-3\" style=\"border: 1px solid #9DD5FF\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.3334 13.3333C13.687 13.3333 14.0261 13.1929 14.2762 12.9428C14.5262 12.6928 14.6667 12.3536 14.6667 12V5.33333C14.6667 4.97971 14.5262 4.64057 14.2762 4.39052C14.0261 4.14048 13.687 4 13.3334 4H8.06671C7.84372 4.00219 7.62374 3.94841 7.42691 3.84359C7.23008 3.73877 7.06268 3.58625 6.94004 3.4L6.40004 2.6C6.27863 2.41565 6.11336 2.26432 5.91904 2.1596C5.72472 2.05488 5.50745 2.00004 5.28671 2H2.66671C2.31309 2 1.97395 2.14048 1.7239 2.39052C1.47385 2.64057 1.33337 2.97971 1.33337 3.33333V12C1.33337 12.3536 1.47385 12.6928 1.7239 12.9428C1.97395 13.1929 2.31309 13.3333 2.66671 13.3333H13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">File Path</div>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div class=\"cqa-flex-1 cqa-bg-[#F5F5F5] cqa-px-3 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">\n          <span>Path not available</span>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <!-- Timing Breakdown -->\n  <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <span>Timing breakdown</span>\n    </div>\n    <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n      <div>\n        App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n      </div>\n      <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n      <div>\n        Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n      </div>\n    </span>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { DocumentVerificationStepConfig, ExtractedField, VerificationCheck, StepStatus, TimingBreakdown, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n  selector: 'cqa-document-verification-step',\n  templateUrl: './document-verification-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class DocumentVerificationStepComponent extends BaseStepComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() documentScreenshot?: string;\n  @Input() extractedFields!: ExtractedField[];\n  @Input() verificationChecks!: VerificationCheck[];\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: DocumentVerificationStepConfig;\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.config = {\n      id: this.id,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'document-verification',\n      documentScreenshot: this.documentScreenshot,\n      extractedFields: this.extractedFields,\n      verificationChecks: this.verificationChecks,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as DocumentVerificationStepConfig;\n\n    super.ngOnInit();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n      if (this.config) {\n        this.config.expanded = this.expanded;\n      }\n    }\n    if (changes['stepNumber'] && this.config) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  copyToClipboard(text: string): void {\n    navigator.clipboard.writeText(text).then(() => {\n      console.log('Copied to clipboard:', text);\n    });\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n}\n","<div class=\"cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : config.status.toLowerCase() === 'paused' ? '#FFF9E9' : config.status.toLowerCase() === 'failed' ? '#FEF2F2' : null\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggle()\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div *ngIf=\"config.status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"config.status.toLowerCase() === 'failure'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    <div *ngIf=\"config.status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Document Icon -->\n    <div><svg width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#E6F4FF\"/><path d=\"M12 5.5C12 6.03043 11.7893 6.53914 11.4142 6.91421C11.0391 7.28929 10.5304 7.5 10 7.5C9.46957 7.5 8.96086 7.28929 8.58579 6.91421C8.21071 6.53914 8 6.03043 8 5.5C8 4.96957 8.21071 4.46086 8.58579 4.08579C8.96086 3.71071 9.46957 3.5 10 3.5C10.5304 3.5 11.0391 3.71071 11.4142 4.08579C11.7893 4.46086 12 4.96957 12 5.5ZM10 9C9.07174 9 8.1815 9.36875 7.52513 10.0251C6.86875 10.6815 6.5 11.5717 6.5 12.5H13.5C13.5 11.5717 13.1313 10.6815 12.4749 10.0251C11.8185 9.36875 10.9283 9 10 9Z\" stroke=\"#0A86E6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3\">\n      <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n        {{ config.stepNumber }}. <span [innerHTML]=\"config.title\"></span>\n      </span>\n      <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#0A86E6] cqa-bg-[#E6F4FF] cqa-text-[10px] cqa-leading-[15px]\">\n        Document Verification\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\"\n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n        {{ formatDuration(config.duration) }}\n      </span>\n      <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded\"  class=\"cqa-bg-[#FFFEF9] cqa-mt-1.5 cqa-ml-9 cqa-mr-6 cqa-p-4 cqa-flex cqa-flex-col cqa-gap-1.5\" style=\"border-top: 1px solid #E4E4E4;\">\n    <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n      <!-- Document Screenshot Card -->\n      <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-2\">\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Document Screenshot</span>\n          <button>\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n        </div>\n        <div class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-[10px] cqa-bg-[#F5F5F5] cqa-aspect-video cqa-h-full cqa-flex cqa-items-center cqa-justify-center\">\n          <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M25.3333 4H6.66667C5.19391 4 4 5.19391 4 6.66667V25.3333C4 26.8061 5.19391 28 6.66667 28H25.3333C26.8061 28 28 26.8061 28 25.3333V6.66667C28 5.19391 26.8061 4 25.3333 4Z\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12 14.6666C13.4727 14.6666 14.6666 13.4727 14.6666 11.9999C14.6666 10.5272 13.4727 9.33325 12 9.33325C10.5272 9.33325 9.33331 10.5272 9.33331 11.9999C9.33331 13.4727 10.5272 14.6666 12 14.6666Z\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M28 19.9999L23.8853 15.8853C23.3853 15.3853 22.7071 15.1045 22 15.1045C21.2929 15.1045 20.6147 15.3853 20.1147 15.8853L8 27.9999\" stroke=\"#737373\" stroke-opacity=\"0.5\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </div>\n      </div>\n\n      <!-- Extracted Fields Card -->\n      <div class=\"cqa-bg-[#FCFCFC] cqa-rounded-lg cqa-p-3 cqa-flex cqa-flex-col\" style=\"border: 1px solid #EDE9FE\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-mb-2\">\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363]\">Extracted Fields</span>\n          <button>\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10 4H5C4.44772 4 4 4.44772 4 5V10C4 10.5523 4.44772 11 5 11H10C10.5523 11 11 10.5523 11 10V5C11 4.44772 10.5523 4 10 4Z\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2 8C1.45 8 1 7.55 1 7V2C1 1.45 1.45 1 2 1H7C7.55 1 8 1.45 8 2\" stroke=\"#636363\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-border cqa-border-solid cqa-border-[#C6D2FF] cqa-rounded-lg\">\n          <div\n            *ngFor=\"let field of config.extractedFields\"\n            class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-3 cqa-pt-1 cqa-pb-1.5 cqa-border-b cqa-border-t-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid cqa-border-[#E4E4E4] last:cqa-border-0\">\n            <div class=\"cqa-flex-1\">\n              <div class=\"cqa-text-[8px] cqa-leading-[12px] cqa-text-[#636363]\">{{ field.label }}</div>\n              <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#0B0B0B]\">{{ field.value }}</div>\n            </div>\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[#008236] cqa-bg-[#DCFCE7] cqa-text-[10px] cqa-leading-[15px]\">\n                {{ field.confidence }}%\n              </span>\n              <button\n                (click)=\"copyToClipboard(field.value)\"\n                class=\"cqa-p-1\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.6667 4.66675H5.83332C5.18899 4.66675 4.66666 5.18908 4.66666 5.83341V11.6667C4.66666 12.3111 5.18899 12.8334 5.83332 12.8334H11.6667C12.311 12.8334 12.8333 12.3111 12.8333 11.6667V5.83341C12.8333 5.18908 12.311 4.66675 11.6667 4.66675Z\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.33332 9.33341C1.69166 9.33341 1.16666 8.80841 1.16666 8.16675V2.33341C1.16666 1.69175 1.69166 1.16675 2.33332 1.16675H8.16666C8.80832 1.16675 9.33332 1.69175 9.33332 2.33341\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              </button>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Verification Checks -->\n    <div class=\"cqa-mt-1.5\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n        <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.00004 3.33333H4.66671C4.31309 3.33333 3.97395 3.47381 3.7239 3.72386C3.47385 3.97391 3.33337 4.31304 3.33337 4.66667V12.6667C3.33337 13.0203 3.47385 13.3594 3.7239 13.6095C3.97395 13.8595 4.31309 14 4.66671 14H11.3334C11.687 14 12.0261 13.8595 12.2762 13.6095C12.5262 13.3594 12.6667 13.0203 12.6667 12.6667V4.66667C12.6667 4.31304 12.5262 3.97391 12.2762 3.72386C12.0261 3.47381 11.687 3.33333 11.3334 3.33333H10M6.00004 3.33333C6.00004 3.68696 6.14052 4.02609 6.39057 4.27614C6.64061 4.52619 6.97975 4.66667 7.33337 4.66667H8.66671C9.02033 4.66667 9.35947 4.52619 9.60952 4.27614C9.85956 4.02609 10 3.68696 10 3.33333M6.00004 3.33333C6.00004 2.97971 6.14052 2.64057 6.39057 2.39052C6.64061 2.14048 6.97975 2 7.33337 2H8.66671C9.02033 2 9.35947 2.14048 9.60952 2.39052C9.85956 2.64057 10 2.97971 10 3.33333M6.00004 9.33333L7.33337 10.6667L10 8\" stroke=\"#615FFF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B]\">Verification Checks</span>\n      </div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <div\n          *ngFor=\"let check of config.verificationChecks\"\n          [ngClass]=\"{\n            'cqa-bg-[#F0FDF4] cqa-border-[#B9F8CF]': check.status === 'pass',\n            'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': check.status === 'fail'\n          }\"\n          class=\"cqa-border cqa-border-solid cqa-rounded-lg cqa-p-3\">\n          <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2 cqa-mb-2\">\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <!-- <mat-icon\n                [ngClass]=\"check.status === 'pass' ? 'cqa-text-green-600' : 'cqa-text-red-600'\"\n                class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">\n                {{ check.status === 'pass' ? 'check_circle' : 'cancel' }}\n              </mat-icon> -->\n              <div><svg width=\"16\" height=\"18\" viewBox=\"0 0 16 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.3333 6L5.99996 13.3333L2.66663 10\" stroke=\"#00A63E\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n              <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#0B0B0B]\">{{ check.description }}</span>\n            </div>\n            <span\n              [ngClass]=\"{\n                'cqa-text-[#008236] cqa-bg-[#DCFCE7]': check.status === 'pass',\n                'cqa-text-[#C10007] cqa-bg-[#FFE2E2]': check.status === 'fail'\n              }\"\n              class=\"cqa-px-2 cqa-py-[2px] cqa-rounded cqa-font-medium cqa-text-[10px] cqa-leading-[15px]\">\n              {{ check.status === 'pass' ? 'PASS' : 'FAIL' }}\n            </span>\n          </div>\n          <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-pl-6\">\n            <div>\n              <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363] cqa-mb-1\">Expected</div>\n              <input\n                type=\"text\"\n                [value]=\"check.expected\"\n                readonly\n                class=\"cqa-w-full cqa-py-1.5 cqa-px-2 !cqa-border !cqa-border-solid !cqa-border-[#E4E4E4] cqa-rounded !cqa-bg-white cqa-text-[11px] cqa-leading-[13px] cqa-text-[#0B0B0B]\"\n              />\n            </div>\n            <div>\n              <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#636363] cqa-mb-1\">Actual</div>\n              <input\n                type=\"text\"\n                [value]=\"check.actual\"\n                readonly\n                class=\"cqa-w-full cqa-py-1.5 cqa-px-2 !cqa-border !cqa-border-solid !cqa-border-[#E4E4E4] cqa-rounded !cqa-bg-white cqa-text-[11px] cqa-leading-[13px] cqa-text-[#0B0B0B]\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Timing Breakdown -->\n  </div>\n  <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <span>Timing breakdown</span>\n    </div>\n    <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n      <div>\n        App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n      </div>\n      <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n      <div>\n        Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n      </div>\n    </span>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, OnDestroy, DoCheck, SimpleChanges } from '@angular/core';\nimport { BaseStepConfig, StepStatus, LiveSubStep, LiveExecutionStepConfig, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\n\n@Component({\n  selector: 'cqa-live-execution-step',\n  templateUrl: './live-execution-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class LiveExecutionStepComponent extends BaseStepComponent implements OnInit, OnChanges, OnDestroy, DoCheck {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() duration!: number;\n  @Input() expanded?: boolean;\n  @Input() subSteps: LiveSubStep[] = [];\n  @Input() stepDeleted?: boolean;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: LiveExecutionStepConfig;\n\n  // Track previous status to detect when step starts executing\n  private previousStatus?: StepStatus;\n  private userManuallyClosed: boolean = false;\n\n  // Processed sub-steps for WAIT_FOR_LOCATOR countdown grouping\n  processedSubSteps: any[] = [];\n  private lastProcessedIndex: number = 0;\n  private waitLocatorGroupEntry: any | null = null;\n  private countdownIntervalId: any = null;\n\n  // AI_AUTO_HEAL grouping: show loading until AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n  private aiAutoHealGroupEntry: any | null = null;\n\n  override ngOnInit(): void {\n    // Build config from individual inputs\n    this.config = {\n      id: this.id,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'live-execution',\n      subSteps: this.subSteps || [],\n      stepDeleted: this.stepDeleted,\n      expanded: this.expanded,\n    } as LiveExecutionStepConfig;\n\n    super.ngOnInit();\n    \n    // Initialize previous status\n    this.previousStatus = this.status;\n\n    // Process any subSteps that were passed at init time\n    if (this.subSteps && this.subSteps.length > 0) {\n      this.processLiveSubSteps();\n    }\n    \n    // Auto-expand if step is running and has subSteps on init\n    if (this.status === 'running' && this.hasSubSteps && !this.isExpanded) {\n      this.autoExpand();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update subSteps array when new ones are added\n    if (changes['subSteps']) {\n      const previousSubStepsCount = changes['subSteps'].previousValue?.length || 0;\n      const currentSubStepsCount = (this.subSteps || []).length;\n      \n      // Sub-steps are appended externally, so we just update the config\n      if (this.config) {\n        this.config.subSteps = this.subSteps || [];\n      }\n\n      // Process incoming subSteps for WAIT_FOR_LOCATOR grouping\n      this.processLiveSubSteps();\n      \n      // Auto-expand if step is running and new subSteps are added (logs coming in)\n      if (!changes['subSteps'].firstChange && \n          this.status === 'running' && \n          currentSubStepsCount > previousSubStepsCount &&\n          this.hasSubSteps && \n          !this.isExpanded && \n          !this.userManuallyClosed) {\n        this.autoExpand();\n      }\n    }\n    \n    // Handle status changes - auto-expand when step starts executing\n    if (changes['status'] && !changes['status'].firstChange) {\n      const newStatus = changes['status'].currentValue;\n      const oldStatus = changes['status'].previousValue;\n      \n      // Auto-expand when status changes to 'running' and has subSteps (or will have soon)\n      if (newStatus === 'running' && oldStatus !== 'running' && !this.userManuallyClosed) {\n        // Expand immediately if already has subSteps, or wait for them\n        if (this.hasSubSteps) {\n          this.autoExpand();\n        }\n      }\n      \n      this.previousStatus = newStatus;\n    }\n    \n    // Update expanded state from parent (sync with parent's state)\n    if (changes['expanded']) {\n      const newExpanded = changes['expanded'].currentValue ?? false;\n      if (newExpanded !== this.isExpanded) {\n        this.isExpanded = newExpanded;\n        // Reset manual close flag if parent explicitly expands\n        if (newExpanded) {\n          this.userManuallyClosed = false;\n        }\n      }\n    }\n\n    if (changes['stepDeleted'] && this.config) {\n      this.config.stepDeleted = changes['stepDeleted'].currentValue;\n    }\n\n    if (changes['stepNumber'] && this.config) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n  }\n\n  ngDoCheck(): void {\n    const currentLength = (this.subSteps || []).length;\n    if (currentLength !== this.lastProcessedIndex) {\n      this.processLiveSubSteps();\n    }\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  override toggle(): void {\n    // Track if user manually closes the step\n    if (this.isExpanded) {\n      this.userManuallyClosed = true;\n    } else {\n      // Reset flag when user opens it\n      this.userManuallyClosed = false;\n    }\n    \n    super.toggle();\n  }\n\n  private autoExpand(): void {\n    if (!this.isExpanded && this.hasSubSteps) {\n      this.isExpanded = true;\n      this.userManuallyClosed = false;\n      this.toggleExpanded.emit(true);\n    }\n  }\n\n  get hasSubSteps(): boolean {\n    return this.processedSubSteps && this.processedSubSteps.length > 0;\n  }\n\n  trackBySubStepId(index: number, subStep: LiveSubStep): string {\n    return subStep.id;\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  ngOnDestroy(): void {\n    this.clearCountdownTimer();\n  }\n\n  private processLiveSubSteps(): void {\n    const allSubSteps = (this.subSteps || []) as any[];\n\n    // Reset if subSteps were cleared or replaced with fewer entries\n    if (allSubSteps.length < this.lastProcessedIndex) {\n      this.resetLiveProcessing();\n    }\n\n    for (let i = this.lastProcessedIndex; i < allSubSteps.length; i++) {\n      const subStep = allSubSteps[i];\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n      const status: string = (subStep?.status || '').toLowerCase();\n\n      if (uiType === 'WAIT_FOR_LOCATOR') {\n        // Create a single grouped entry with a countdown; absorbs FIND_LOCATOR and LOCATOR_FOUND\n        const timeoutSeconds = typeof subStep.value === 'number'\n          ? subStep.value\n          : (subStep.value ? parseFloat(subStep.value) : 30);\n\n        this.clearCountdownTimer();\n\n        this.waitLocatorGroupEntry = {\n          ...subStep,\n          isRunning: true,\n          remainingSeconds: timeoutSeconds,\n          status: 'pending'\n        };\n        this.addDurationToWaitLocatorGroupEntry(subStep);\n        this.processedSubSteps.push(this.waitLocatorGroupEntry);\n\n        // Tick down every second\n        this.countdownIntervalId = setInterval(() => {\n          if (this.waitLocatorGroupEntry) {\n            this.waitLocatorGroupEntry.remainingSeconds = Math.max(0, this.waitLocatorGroupEntry.remainingSeconds - 1);\n            if (this.waitLocatorGroupEntry.remainingSeconds <= 0) {\n              this.waitLocatorGroupEntry.isRunning = false;\n              this.waitLocatorGroupEntry.status = 'failed';\n              this.waitLocatorGroupEntry.remainingSeconds = null;\n              this.clearCountdownTimer();\n              this.waitLocatorGroupEntry = null;\n            }\n          }\n        }, 1000);\n\n      } else if (uiType === 'FIND_LOCATOR') {\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, isRunning: false, status: 'failed' });\n        } else if (this.waitLocatorGroupEntry) {\n          // Update the single group entry's text so the user sees progress\n          const newText = subStep.text || subStep.description || subStep.title;\n          if (newText) this.waitLocatorGroupEntry.text = newText;\n          this.addDurationToWaitLocatorGroupEntry(subStep);\n        } else {\n          // No active group – push FIND_LOCATOR normally once countdown is cleared\n          this.processedSubSteps.push({ ...subStep });\n        }\n\n      } else if (uiType === 'LOCATOR_FOUND') {\n\n        if (status === 'failed' || status === 'failure') {\n          // Abort countdown, replace group entry with this failed log\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, isRunning: false, status: 'failed' });\n        } else {\n          // Sequence complete – update the group entry to show LOCATOR_FOUND text as success\n          if (this.waitLocatorGroupEntry) {\n            const newText = subStep.text || subStep.description || subStep.title;\n            if (newText) this.waitLocatorGroupEntry.text = newText;\n            this.waitLocatorGroupEntry.isRunning = false;\n            this.waitLocatorGroupEntry.status = 'success';\n            this.addDurationToWaitLocatorGroupEntry(subStep);\n            this.waitLocatorGroupEntry.remainingSeconds = null;\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          } else {\n            // No active group – just push LOCATOR_FOUND normally\n            this.processedSubSteps.push({ ...subStep, isRunning: false });\n          }\n        }\n\n      } else if (uiType === 'AI_AUTO_HEAL') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before starting AI auto-heal\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.isRunning = false;\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Add single loading entry; will be replaced by AI_AUTO_HEAL_SUCCESS or AI_AUTO_HEAL_FAILED\n        this.aiAutoHealGroupEntry = {\n          ...subStep,\n          text: subStep.text || subStep.description || 'AI auto-heal started',\n          isRunning: true,\n          status: 'pending',\n          uiType: 'AI_AUTO_HEAL'\n        };\n        this.processedSubSteps.push(this.aiAutoHealGroupEntry);\n\n      } else if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        // If a WAIT_FOR_LOCATOR countdown is active, complete it as failed before handling AI auto-heal result\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.isRunning = false;\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        // Remove loading entry and add TWO separate entries: value and reasoning (like AI_ANSWER)\n        if (this.aiAutoHealGroupEntry) {\n          this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.aiAutoHealGroupEntry);\n          this.aiAutoHealGroupEntry = null;\n        }\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        // First entry: value/description\n        const valueDescription = subStep.text || subStep.description || (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubSteps.push({\n          ...subStep,\n          text: valueDescription,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          isRunning: false,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        // Second entry: reasoning (only if present)\n        if (reasoning) {\n          this.processedSubSteps.push({\n            ...subStep,\n            text: reasoning,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            isRunning: false,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n\n      } else {\n        // Any failed log while a countdown is active – resolve it as failed\n        if ((status === 'failed' || status === 'failure') && this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.isRunning = false;\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n        this.processedSubSteps.push(subStep);\n      }\n    }\n\n    this.lastProcessedIndex = allSubSteps.length;\n  }\n\n  private resetLiveProcessing(): void {\n    this.clearCountdownTimer();\n    this.processedSubSteps = [];\n    this.lastProcessedIndex = 0;\n    this.waitLocatorGroupEntry = null;\n    this.aiAutoHealGroupEntry = null;\n  }\n\n  private clearCountdownTimer(): void {\n    if (this.countdownIntervalId !== null) {\n      clearInterval(this.countdownIntervalId);\n      this.countdownIntervalId = null;\n    }\n  }\n\n  private addDurationToWaitLocatorGroupEntry(subStep: any): void {\n    if (!this.waitLocatorGroupEntry) {\n      return;\n    }\n\n    const rawDuration = subStep?.duration;\n    let delta = 0;\n    if (typeof rawDuration === 'number') {\n      delta = rawDuration;\n    } else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {\n      const parsed = parseFloat(rawDuration);\n      delta = Number.isFinite(parsed) ? parsed : 0;\n    }\n\n    if (delta <= 0) {\n      return;\n    }\n\n    const currentRaw = this.waitLocatorGroupEntry.duration;\n    let current = 0;\n    if (typeof currentRaw === 'number') {\n      current = currentRaw;\n    } else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {\n      const parsedCurrent = parseFloat(currentRaw);\n      current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;\n    }\n\n    this.waitLocatorGroupEntry.duration = current + delta;\n  }\n}\n\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : status.toLowerCase() === 'paused' ? '#FFF9E9' : status.toLowerCase() === 'failed' ? '#FEF2F2' : null\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggle()\"\n    style=\"border-bottom: '1px solid #F3F4F6'\"\n    >\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n      <!-- Success -->\n      <svg *ngIf=\"status.toLowerCase() === 'success'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Failed -->\n      <svg *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Pending -->\n      <svg *ngIf=\"status.toLowerCase() === 'pending'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      <!-- Running - Show spinner -->\n      <svg *ngIf=\"status.toLowerCase() === 'running'\" class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n        <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n      </svg>\n      <!-- Skipped -->\n      <span *ngIf=\"status.toLowerCase() === 'skipped'\" class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n        skip_next\n      </span>\n      <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n    </div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-font-semibold cqa-flex-1 cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\" style=\"word-break: break-word;\">\n      <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF] cqa-font-medium\">\n        {{ formatDuration(duration) }}\n      </span>\n      <svg *ngIf=\"hasSubSteps\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded && hasSubSteps\">\n    <!-- Sub-steps -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9\">\n      <!-- Single loop: render all entries in chronological order -->\n      <ng-container *ngFor=\"let subStep of processedSubSteps; trackBy: trackBySubStepId\">\n        <!-- AI_AUTO_HEAL result entries: render with ai-agent-step style -->\n        <cqa-ai-logs-with-reasoning\n          *ngIf=\"subStep.isAiAutoHealResult\"\n          [status]=\"subStep.status\"\n          [text]=\"subStep.text\"\n          [description]=\"subStep.description\"\n          [reasoning]=\"subStep.reasoning\"\n          [duration]=\"subStep.duration\">\n        </cqa-ai-logs-with-reasoning>\n\n        <!-- Regular sub-steps (non-AI_AUTO_HEAL) -->\n        <div\n          *ngIf=\"!subStep.isAiAutoHealResult\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n        \n          <!-- Sub-step Status Icon or Loader -->\n          <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-3 cqa-h-3\">\n            <!-- Loader when running -->\n            <svg *ngIf=\"subStep.isRunning\" class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n            \n            <!-- Success Icon when complete -->\n            <svg *ngIf=\"!subStep.isRunning && (subStep?.status?.toLowerCase() === 'passed' || subStep?.status?.toLowerCase() === 'success')\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M4.5 6L5.5 7L7.5 5\" stroke=\"#00A63E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n            <svg *ngIf=\"!subStep.isRunning && subStep?.status?.toLowerCase() === 'failed'\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 4L8 8M8 4L4 8\" stroke=\"#EF4444\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </div>\n\n          <!-- Sub-step Description (text from socket) with typing animation -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n            <span style=\"display: inline-flex; align-items: baseline; flex-wrap: wrap;\">\n              <ngx-typed-js \n                *ngIf=\"subStep.isRunning && subStep.text\"\n                [strings]=\"[subStep.text]\"\n                [typeSpeed]=\"30\"\n                [showCursor]=\"false\"\n                [fadeOut]=\"false\"\n                style=\"display: inline;\">\n                <span class=\"typing\"></span>\n              </ngx-typed-js>\n              <span *ngIf=\"!subStep.isRunning\" style=\"display: inline;\">{{ subStep.text }}</span>\n              <!-- Countdown remaining for WAIT_FOR_LOCATOR group -->\n              <span *ngIf=\"subStep.remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\" style=\"display: inline;\">({{ subStep.remainingSeconds }}s remaining)</span>\n            </span>\n          </span>\n          <span  class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#6A7282] cqa-font-medium\" style=\"white-space: pre-line;\">\n            {{ formatDuration(subStep.duration || 0) }}\n          </span>\n        </div>\n      </ng-container>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectorRef } from '@angular/core';\n\nexport type StepItemStatus = 'passed' | 'current' | 'pending' | 'failed' | 'running' | 'skipped';\n\nexport interface JumpToStepItem {\n  id: string;\n  stepNumber: string | number;\n  description: string;\n  status: StepItemStatus;\n  /** Step id for selection. When missing, derived from id. */\n  stepId?: number;\n  /** Stable unique identifier for this step instance. Preferred over stepId for selection. */\n  uniqueId?: string;\n  /** Optional flag to indicate this item represents a prerequisite step. */\n  isPrerequisite?: boolean;\n  /** Optional group name (e.g. prerequisite test case name) for visual grouping. */\n  groupName?: string;\n  [key: string]: any; // Allow additional properties\n}\n\nexport interface JumpToStepStepMeta {\n  stepId: number;\n  /** Stable unique identifier for this step instance (e.g. TS-ROOT-…). Required when the same stepId appears in multiple groups. */\n  uniqueId?: string;\n  label: string;\n  stepNumber: string;\n  status: StepItemStatus;\n  isPrerequisite?: boolean;\n  groupName?: string;\n}\n\nexport interface CombinedTestCaseGroup {\n  name?: string;\n  isPrerequisite?: boolean;\n  steps?: any[];\n}\n\n@Component({\n  selector: 'cqa-jump-to-step-modal',\n  templateUrl: './jump-to-step-modal.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class JumpToStepModalComponent implements OnChanges {\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  /** Whether the modal is open */\n  @Input() isOpen: boolean = false;\n\n  /** Modal title */\n  @Input() title: string = 'Jump to Step';\n\n  /** List of step items to display (legacy; used when combinedTestCases not provided) */\n  @Input() items: JumpToStepItem[] = [];\n\n  /** Combined test cases for accordion layout. When provided with stepsMeta, used instead of items. */\n  @Input() combinedTestCases: CombinedTestCaseGroup[] = [];\n\n  /** Pre-computed step metadata (stepNumber, status, etc.) for each step. Required when using combinedTestCases. */\n  @Input() stepsMeta: JumpToStepStepMeta[] = [];\n\n  /** Search placeholder text */\n  @Input() searchPlaceholder: string = 'Search steps by name or number...';\n\n  /** Search Empty State text */\n  @Input() searchEmptyStateLabel: string = 'No steps found';\n\n  /** Current search value */\n  @Input() searchValue: string = '';\n\n  /** Whether search is enabled */\n  @Input() enableSearch: boolean = true;\n\n  /** Whether to show prerequisite steps section. Default true. */\n  @Input() showPrerequisites: boolean = true;\n\n  /** Filtered items based on search */\n  filteredItems: JumpToStepItem[] = [];\n\n  /** Prerequisite groups for accordion: each prerequisite test case by name. */\n  prerequisiteGroups: { name: string; items: JumpToStepItem[] }[] = [];\n\n  /** Filtered non-prerequisite step items. */\n  filteredStepItems: JumpToStepItem[] = [];\n\n  /** Expanded prerequisite group names. When empty, all groups are collapsed by default. */\n  private readonly expandedGroupNames = new Set<string>();\n\n  /** Emitted when modal should be closed */\n  @Output() onClose = new EventEmitter<void>();\n\n  /** Emitted when search value changes */\n  @Output() onSearch = new EventEmitter<string>();\n\n  /** Emitted when a step item is selected */\n  @Output() onSelect = new EventEmitter<JumpToStepItem>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['items'] || changes['combinedTestCases'] || changes['stepsMeta'] || changes['searchValue']) {\n      this.updateFilteredItems();\n    }\n  }\n\n  private updateFilteredItems(): void {\n    if (this.stepsMeta?.length) {\n      // stepsMeta is the pre-computed, fully-ordered flat list (including ELSE IF/ELSE branches\n      // that are absent from the combinedTestCases tree). Use it directly — no re-traversal needed.\n      this.buildFromStepsMeta();\n    } else if (this.items?.length) {\n      this.buildFromItems();\n    } else {\n      this.filteredItems = [];\n      this.prerequisiteGroups = [];\n      this.filteredStepItems = [];\n    }\n  }\n\n  /** Build filteredItems directly from stepsMeta — the pre-computed ordered flat list. */\n  private buildFromStepsMeta(): void {\n    const searchTerm = (this.searchValue || '').toLowerCase().trim();\n\n    this.prerequisiteGroups = [];\n    this.filteredStepItems = [];\n\n    const prereqGroupMap = new Map<string, JumpToStepItem[]>();\n\n    for (const meta of this.stepsMeta) {\n      if (searchTerm) {\n        const numMatch = String(meta.stepNumber).toLowerCase().includes(searchTerm);\n        const labelMatch = (meta.label || '').toLowerCase().includes(searchTerm);\n        if (!numMatch && !labelMatch) continue;\n      }\n\n      const item: JumpToStepItem = {\n        id: String(meta.stepId),\n        stepId: meta.stepId,\n        uniqueId: meta.uniqueId,\n        stepNumber: meta.stepNumber,\n        description: this.stripHtml(meta.label || ('Step ' + meta.stepNumber)),\n        status: meta.status,\n        isPrerequisite: meta.isPrerequisite,\n        groupName: meta.groupName,\n      };\n\n      if (meta.isPrerequisite && this.showPrerequisites) {\n        const name = (meta.groupName || 'Prerequisite').toString();\n        const existing = prereqGroupMap.get(name);\n        if (existing) existing.push(item);\n        else prereqGroupMap.set(name, [item]);\n      } else if (!meta.isPrerequisite) {\n        this.filteredStepItems.push(item);\n      }\n    }\n\n    this.prerequisiteGroups = Array.from(prereqGroupMap.entries()).map(([name, items]) => ({ name, items }));\n    this.filteredItems = [\n      ...this.prerequisiteGroups.reduce<JumpToStepItem[]>((acc, g) => acc.concat(g.items), []),\n      ...this.filteredStepItems,\n    ];\n  }\n\n  private buildFromCombinedTestCases(): void {\n    // Primary lookup by uniqueId (handles same stepId in multiple groups with different stepNumbers).\n    // Fallback lookup by stepId for metas without uniqueId.\n    const metaByUniqueId = new Map<string, JumpToStepStepMeta>();\n    const metaByStepId = new Map<number, JumpToStepStepMeta>();\n    this.stepsMeta.forEach(m => {\n      if (m.uniqueId) metaByUniqueId.set(m.uniqueId, m);\n      // Only store first occurrence per stepId (used as fallback when uniqueId is absent)\n      if (!metaByStepId.has(m.stepId)) metaByStepId.set(m.stepId, m);\n    });\n\n    const searchTerm = (this.searchValue || '').toLowerCase().trim();\n    const matchesSearch = (meta: JumpToStepStepMeta): boolean => {\n      if (!searchTerm) return true;\n      return (\n        String(meta.stepNumber).toLowerCase().includes(searchTerm) ||\n        (meta.label || '').toLowerCase().includes(searchTerm)\n      );\n    };\n\n    this.prerequisiteGroups = [];\n    this.filteredStepItems = [];\n\n    for (const group of this.combinedTestCases) {\n      if (!group?.steps?.length) continue;\n\n      const groupName = (group.name || 'Prerequisite').toString();\n      const isPrereq = !!group.isPrerequisite;\n\n      const collectSteps = (steps: any[], seen: Set<string>): JumpToStepItem[] => {\n        const out: JumpToStepItem[] = [];\n        for (const s of steps) {\n          if (!s) continue;\n          const id = s?.id ?? s?.step_id;\n          const numId = id != null ? Number(id) : NaN;\n          if (!Number.isFinite(numId)) continue;\n\n          // Use uniqueId as the deduplication key when available, fallback to String(numId).\n          const stepUniqueId: string | undefined = s.uniqueId || undefined;\n          const seenKey = stepUniqueId || String(numId);\n          if (seen.has(seenKey)) continue;\n          seen.add(seenKey);\n\n          // Prefer uniqueId-based meta lookup (correct stepNumber for reused stepIds across groups).\n          const meta = (stepUniqueId ? metaByUniqueId.get(stepUniqueId) : undefined) ?? metaByStepId.get(numId);\n          if (meta && matchesSearch(meta)) {\n            out.push({\n              id: String(numId),\n              stepId: numId,\n              uniqueId: stepUniqueId,\n              stepNumber: meta.stepNumber,\n              description: this.stripHtml(meta.label || ('Step ' + meta.stepNumber)),\n              status: meta.status,\n              isPrerequisite: meta.isPrerequisite,\n              groupName: meta.groupName,\n            });\n          }\n\n          // For steps with conditionData (CONDITION_IF), skip generic children/nestedSteps\n          // (they may contain all branch steps in a flat structure causing duplicates with wrong numbers).\n          // Use conditionData exclusively for condition steps.\n          const hasConditionData = s.conditionData && typeof s.conditionData === 'object' && Object.keys(s.conditionData).length > 0;\n          if (!hasConditionData) {\n            for (const arr of [s.children || [], s.nestedSteps || [], s.steps || []]) {\n              if (arr?.length) out.push(...collectSteps(arr, seen));\n            }\n            if (s.branches && Array.isArray(s.branches)) {\n              for (const b of s.branches) {\n                if (b?.subSteps?.length) out.push(...collectSteps(b.subSteps, seen));\n              }\n            }\n          }\n          if (hasConditionData) {\n            const branchIds: string[] = (s.ifChildData && s.ifChildData.length > 0)\n              ? s.ifChildData.map(String)\n              : Object.keys(s.conditionData);\n            for (const branchId of branchIds) {\n              const branchData = (s.conditionData as any)[branchId];\n              if (!branchData) continue;\n              // Add the branch step itself (ELSE IF / ELSE)\n              const branchRawId = branchData?.id ?? branchData?.step_id;\n              const branchNumId = branchRawId != null ? Number(branchRawId) : NaN;\n              if (Number.isFinite(branchNumId)) {\n                const branchUniqueId: string | undefined = branchData.uniqueId || undefined;\n                const branchSeenKey = branchUniqueId || String(branchNumId);\n                if (!seen.has(branchSeenKey)) {\n                  seen.add(branchSeenKey);\n                  const branchMeta = (branchUniqueId ? metaByUniqueId.get(branchUniqueId) : undefined) ?? metaByStepId.get(branchNumId);\n                  if (branchMeta && matchesSearch(branchMeta)) {\n                    out.push({\n                      id: String(branchNumId),\n                      stepId: branchNumId,\n                      uniqueId: branchUniqueId,\n                      stepNumber: branchMeta.stepNumber,\n                      description: this.stripHtml(branchMeta.label || ('Step ' + branchMeta.stepNumber)),\n                      status: branchMeta.status,\n                      isPrerequisite: branchMeta.isPrerequisite,\n                      groupName: branchMeta.groupName,\n                    });\n                  }\n                }\n              }\n              // Recurse into branch children\n              const branchChildren: any[] = branchData.children || branchData.nestedSteps || [];\n              if (branchChildren.length) out.push(...collectSteps(branchChildren, seen));\n            }\n          }\n        }\n        return out;\n      };\n\n      const seen = new Set<string>();\n      const items = collectSteps(group.steps, seen);\n\n      if (isPrereq && this.showPrerequisites) {\n        if (items.length) {\n          this.prerequisiteGroups.push({ name: groupName, items });\n        }\n      } else if (!isPrereq) {\n        this.filteredStepItems.push(...items);\n      }\n    }\n\n    this.filteredItems = [\n      ...this.prerequisiteGroups.reduce<JumpToStepItem[]>((acc, g) => acc.concat(g.items), []),\n      ...this.filteredStepItems,\n    ];\n  }\n\n  private buildFromItems(): void {\n    const searchTerm = (this.searchValue || '').toLowerCase().trim();\n    if (!searchTerm) {\n      this.filteredItems = [...this.items];\n    } else {\n      this.filteredItems = this.items.filter(item => {\n        const stepNumberMatch = String(item.stepNumber).toLowerCase().includes(searchTerm);\n        const descriptionMatch = (item.description || '').toLowerCase().includes(searchTerm);\n        return stepNumberMatch || descriptionMatch;\n      });\n    }\n\n    const prereqItems = this.filteredItems.filter(i => i.isPrerequisite === true);\n    const groups = new Map<string, JumpToStepItem[]>();\n    prereqItems.forEach(item => {\n      const name = (item.groupName || 'Prerequisite').toString();\n      const existing = groups.get(name);\n      if (existing) existing.push(item);\n      else groups.set(name, [item]);\n    });\n    this.prerequisiteGroups = Array.from(groups.entries()).map(([name, items]) => ({ name, items }));\n    this.filteredStepItems = this.filteredItems.filter(i => i.isPrerequisite !== true);\n  }\n\n  private stripHtml(html: string): string {\n    if (!html) return '';\n    const div = document.createElement('div');\n    div.innerHTML = html;\n    return (div.textContent || div.innerText || '').trim();\n  }\n\n  isGroupExpanded(name: string): boolean {\n    return this.expandedGroupNames.has(name);\n  }\n\n  toggleGroup(name: string): void {\n    if (this.expandedGroupNames.has(name)) {\n      this.expandedGroupNames.delete(name);\n    } else {\n      this.expandedGroupNames.add(name);\n    }\n    this.cdr.markForCheck();\n  }\n\n  onSearchValueChange(value: string): void {\n    this.searchValue = value;\n    this.updateFilteredItems();\n    this.onSearch.emit(value);\n  }\n\n  onItemClick(item: JumpToStepItem): void {\n    this.onSelect.emit(item);\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    \n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.handleClose();\n    }\n  }\n\n  handleClose(): void {\n    this.onClose.emit();\n  }\n\n  getStatusBadgeClasses(status: StepItemStatus): string {\n    const baseClasses = 'cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-[6px] cqa-text-xs cqa-font-medium cqa-py-[4px] cqa-px-3';\n    \n    switch (status) {\n      case 'passed':\n        return `${baseClasses} cqa-bg-green-100 cqa-text-green-800`;\n      case 'current':\n        return `${baseClasses} cqa-bg-blue-100 cqa-text-blue-800`;\n      case 'pending':\n        return `${baseClasses} cqa-bg-gray-100 cqa-text-gray-800`;\n      case 'failed':\n        return `${baseClasses} cqa-bg-red-100 cqa-text-red-800`;\n      case 'running':\n        return `${baseClasses} cqa-bg-blue-100 cqa-text-blue-800`;\n      case 'skipped':\n        return `${baseClasses} cqa-bg-gray-100 cqa-text-gray-800`;\n      default:\n        return `${baseClasses} cqa-bg-gray-100 cqa-text-gray-800`;\n    }\n  }\n\n  get hasItems(): boolean {\n    return this.filteredItems && this.filteredItems.length > 0;\n  }\n\n  get itemsCount(): number {\n    return this.filteredItems ? this.filteredItems.length : 0;\n  }\n\n  /** Convert stepNumber to string for the badge label (String() is not available in templates) */\n  toLabel(value: string | number): string {\n    return '' + value;\n  }\n\n  trackByItemId(index: number, item: JumpToStepItem): string {\n    return item.id;\n  }\n}\n\n","<div *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-50 cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-lg  cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-flex cqa-flex-col\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808; max-height: 90vh;\"\n    (click)=\"$event.stopPropagation()\">\n\n    <!-- Header -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-6 cqa-pt-6 cqa-pb-4\">\n      <h2 class=\"cqa-text-base cqa-font-semibold cqa-text-[#0A0A0A] cqa-leading-[24px] cqa-font-inter\">\n        {{ title }}\n      </h2>\n      <button\n        type=\"button\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-6 cqa-h-6 cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 hover:cqa-text-gray-700 cqa-transition-colors\"\n        (click)=\"handleClose()\"\n        aria-label=\"Close modal\">\n        <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px] !cqa-block !cqa-leading-none\">close</mat-icon>\n      </button>\n    </div>\n\n\n    <!-- Search Bar -->\n    <div *ngIf=\"enableSearch\" class=\"cqa-px-6 cqa-pb-4\">\n      <cqa-search-bar\n        [placeholder]=\"searchPlaceholder\"\n        [value]=\"searchValue\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"onSearchValueChange($event)\">\n      </cqa-search-bar>\n    </div>\n\n    <!-- Divider below search -->\n    <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n      <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n    </div>\n\n    <!-- Steps List -->\n    <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-px-6 cqa-pt-2\" style=\"scrollbar-width: thin;\">\n      <!-- Empty State -->\n      <div *ngIf=\"!hasItems\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-12 cqa-text-center\">\n        <p class=\"cqa-text-sm cqa-text-gray-500 cqa-font-inter\">\n         {{searchEmptyStateLabel || 'No Data found.'}}\n        </p>\n      </div>\n\n      <!-- Steps List -->\n      <div *ngIf=\"hasItems\" class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n\n        <!-- Prerequisite steps: accordion by test case name (styled like cqa-main-step-collapse) -->\n        <ng-container *ngIf=\"showPrerequisites && prerequisiteGroups?.length\">\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-mb-1\">\n            <ng-container *ngFor=\"let group of prerequisiteGroups\">\n              <div\n                class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid cqa-w-full\"\n                (click)=\"toggleGroup(group.name)\">\n                <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n                  <div>\n                    <svg [class.cqa-rotate-180]=\"isGroupExpanded(group.name)\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                      <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    </svg>\n                  </div>\n                  <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n                    {{ group.name }}\n                  </span>\n                </div>\n              </div>\n              <div *ngIf=\"isGroupExpanded(group.name)\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n                <button\n                  *ngFor=\"let item of group.items; trackBy: trackByItemId\"\n                  type=\"button\"\n                  class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-3 cqa-py-3 cqa-w-full cqa-text-left cqa-border-0 cqa-bg-transparent hover:cqa-bg-gray-50 cqa-cursor-pointer cqa-transition-colors cqa-rounded-md cqa-min-w-0\"\n                  (click)=\"onItemClick(item)\">\n                  <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-[6px] cqa-text-xs cqa-font-medium cqa-py-[4px] cqa-px-[10px] cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-text-[#3F43EE] cqa-bg-[#F8F9FF]\"\n                    style=\"min-width: 32px;\">{{ item.stepNumber }}</span>\n                  <span class=\"cqa-flex-1 cqa-text-sm cqa-text-[#0A0A0A] cqa-font-inter cqa-font-normal cqa-leading-[20px] cqa-min-w-0 cqa-truncate\">{{ item.description }}</span>\n                  <span class=\"cqa-flex-shrink-0\" [ngClass]=\"getStatusBadgeClasses(item.status)\">{{ item.status }}</span>\n                </button>\n              </div>\n            </ng-container>\n          </div>\n          <div *ngIf=\"filteredStepItems?.length\" class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB] cqa-my-1 cqa-mb-2\" role=\"presentation\"></div>\n        </ng-container>\n\n        <!-- Main test steps section -->\n        <ng-container *ngIf=\"filteredStepItems?.length\">\n          <div class=\"cqa-mb-1\">\n            <span class=\"cqa-text-xs cqa-font-medium cqa-text-[#6B7280] cqa-uppercase cqa-tracking-wide\">\n              Test steps\n            </span>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <button\n              *ngFor=\"let item of filteredStepItems; trackBy: trackByItemId\"\n              type=\"button\"\n              class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-3 cqa-py-3 cqa-w-full cqa-text-left cqa-border-0 cqa-bg-transparent hover:cqa-bg-gray-50 cqa-cursor-pointer cqa-transition-colors cqa-rounded-md cqa-min-w-0\"\n              (click)=\"onItemClick(item)\">\n\n              <!-- Step Number Badge -->\n              <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-[6px] cqa-text-xs cqa-font-medium cqa-py-[4px] cqa-px-[10px] cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-text-[#3F43EE] cqa-bg-[#F8F9FF]\"\n                style=\"min-width: 32px;\">\n                {{ item.stepNumber }}\n              </span>\n\n              <!-- Step Description -->\n              <span class=\"cqa-flex-1 cqa-text-sm cqa-text-[#0A0A0A] cqa-font-inter cqa-font-normal cqa-leading-[20px] cqa-min-w-0 cqa-truncate\">\n                {{ item.description }}\n              </span>\n\n              <!-- Status Badge -->\n              <span class=\"cqa-flex-shrink-0\" [ngClass]=\"getStatusBadgeClasses(item.status)\">\n                {{ item.status }}\n              </span>\n            </button>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Footer -->\n    <div *ngIf=\"hasItems\" class=\"cqa-px-6 cqa-pb-5 cqa-pt-3\">\n      <p class=\"cqa-text-xs cqa-text-[#6B7280] cqa-font-inter cqa-font-normal\">\n        {{ itemsCount }} {{ itemsCount === 1 ? 'step' : 'steps' }} found\n      </p>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\n\nexport interface BreakpointItem {\n  id: string;\n  stepId: number;\n  stepNumber: string | number;\n  primaryLabel: string;\n  secondaryLabel: string;\n  [key: string]: any; // Allow additional properties\n}\n\n@Component({\n  selector: 'cqa-breakpoints-modal',\n  templateUrl: './breakpoints-modal.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class BreakpointsModalComponent implements OnChanges {\n  /** Whether the modal is open */\n  @Input() isOpen: boolean = false;\n\n  /** Modal title */\n  @Input() title: string = 'Breakpoints';\n\n  /** List of breakpoint items to display */\n  @Input() items: BreakpointItem[] = [];\n\n  /** Label for the remove-all button */\n  @Input() buttonLabel: string = 'Remove all breakpoints';\n\n  /** Label for the empty state */\n  @Input() emptyStateLabel: string = 'No breakpoints set.';\n\n  /** Internal copy so items can be removed locally when parent doesn't re-bind */\n  displayItems: BreakpointItem[] = [];\n\n  /** Emitted when modal should be closed */\n  @Output() onClose = new EventEmitter<void>();\n\n  /** Emitted when a single breakpoint should be removed */\n  @Output() onRemove = new EventEmitter<BreakpointItem>();\n\n  /** Emitted when all breakpoints should be removed */\n  @Output() onRemoveAll = new EventEmitter<void>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['items']) {\n      this.displayItems = [...(this.items || [])];\n    }\n  }\n\n  get summaryText(): string {\n    const count = this.displayItems.length;\n    if (count === 0) return '';\n    return count === 1 ? '1 breakpoint set' : `${count} breakpoints set`;\n  }\n\n  get hasItems(): boolean {\n    return this.displayItems && this.displayItems.length > 0;\n  }\n\n  removeItem(item: BreakpointItem): void {\n    this.onRemove.emit(item);\n    this.displayItems = this.displayItems.filter(b => b.id !== item.id);\n    if (this.displayItems.length === 0) {\n      this.handleClose();\n    }\n  }\n\n  removeAll(): void {\n    this.onRemoveAll.emit();\n    this.displayItems = [];\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n\n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.handleClose();\n    }\n  }\n\n  handleClose(): void {\n    this.onClose.emit();\n  }\n\n  trackByItemId(index: number, item: BreakpointItem): string {\n    return item.id;\n  }\n}\n\n","<div *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[100] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-xl cqa-bg-white cqa-shadow-lg cqa-w-full cqa-max-w-[420px] cqa-overflow-hidden cqa-flex cqa-flex-col\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808; max-height: 90vh;\"\n    (click)=\"$event.stopPropagation()\">\n\n    <!-- Header -->\n    <div class=\"cqa-px-6 cqa-pt-6 cqa-pb-2\">\n      <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3\">\n        <h2 class=\"cqa-text-lg cqa-font-semibold cqa-text-[#0B0B0C] cqa-text-base cqa-font-inter\">\n          {{ title }}\n        </h2>\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-6 cqa-h-6 cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer cqa-text-gray-500 hover:cqa-text-gray-700 cqa-transition-colors cqa-rounded cqa--mt-[2px] cqa--mr-[2px]\"\n          (click)=\"handleClose()\"\n          aria-label=\"Close modal\">\n          <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px] !cqa-block !cqa-leading-none\">close</mat-icon>\n        </button>\n      </div>\n      <!-- Summary text -->\n      <p *ngIf=\"hasItems\" class=\"cqa-text-sm cqa-font-normal  cqa-text-[#666666] cqa-text-sm cqa-leading-[1.4] cqa-font-inter cqa-m-0 cqa-mt-1\">\n        {{ summaryText }}\n      </p>\n    </div>\n\n    <!-- Divider -->\n    <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n      <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n    </div>\n\n    <!-- Content -->\n    <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-px-6 cqa-pt-4 cqa-pb-2\" style=\"scrollbar-width: thin; max-height: 50vh;\">\n      <!-- Empty State -->\n      <div *ngIf=\"!hasItems\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-8 cqa-text-center\">\n        <p class=\"cqa-text-sm cqa-text-[#666666] cqa-font-inter cqa-m-0\">\n          {{ emptyStateLabel || 'No Data Found.' }}\n        </p>\n      </div>\n\n      <!-- Breakpoints List -->\n      <div *ngIf=\"hasItems\" class=\"cqa-flex cqa-flex-col cqa-gap-4\">\n        <div\n          *ngFor=\"let item of displayItems; trackBy: trackByItemId\"\n          class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-px-4 cqa-py-3 cqa-bg-[#e5e7eb2e] cqa-rounded-lg cqa-min-w-0 cqa-border cqa-border-solid cqa-border-[#E5E7EB]\">\n\n          <!-- Red Breakpoint Dot -->\n          <span class=\"cqa-flex-shrink-0 cqa-w-[10px] cqa-h-[10px] cqa-mt-[5px] cqa-rounded-full cqa-bg-[#DC2626]\" aria-hidden=\"true\"></span>\n\n          <!-- Text Content -->\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-[2px] cqa-min-w-0 cqa-flex-1\">\n            <span class=\"cqa-text-sm cqa-font-normal cqa-text-[#6B7280] cqa-leading-[1.3] cqa-font-inter\">\n              {{ item.primaryLabel }}\n            </span>\n            <span class=\"cqa-text-sm cqa-font-normal cqa-text-[#111827] cqa-leading-[1.4] cqa-font-inter cqa-break-words\">\n              {{ item.secondaryLabel }}\n            </span>\n          </div>\n          <div (click)=\"$event.stopPropagation()\">\n            <cqa-button\n              type=\"button\"\n              variant=\"text\"\n              [customClass]=\"'cqa-api-edit-step-verification-delete'\"\n              [tooltip]=\"'Remove breakpoint'\"\n              (clicked)=\"removeItem(item)\">\n              <svg class=\"cqa-api-edit-step-verification-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                <path d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\" fill=\"#99999E\" />\n              </svg>\n            </cqa-button>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Footer: Remove All Button -->\n    <div *ngIf=\"hasItems\" class=\"cqa-px-6 cqa-pb-6 cqa-pt-4\">\n      \n      <cqa-button\n        [fullWidth]=\"true\"\n        (click)=\"removeAll()\"\n        [label]=\"buttonLabel\"\n        variant=\"outlined\"\n        color=\"black\"\n        [text]=\"buttonLabel\"\n        >\n      </cqa-button>\n      <!-- <button\n        type=\"button\"\n        class=\"cqa-w-full cqa-py-[10px] cqa-px-5 cqa-text-sm cqa-font-medium cqa-text-[#212121] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#D9D9D9] cqa-rounded-lg cqa-cursor-pointer cqa-transition-colors hover:cqa-bg-[#F9FAFB] hover:cqa-border-[#9CA3AF] cqa-font-inter\"\n        (click)=\"removeAll()\">\n        {{ buttonLabel }}\n      </button> -->\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'cqa-recording-banner',\n  templateUrl: './recording-banner.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n})\nexport class RecordingBannerComponent {\n  /** Whether the banner is visible (recording active) */\n  @Input() isVisible: boolean = false;\n\n  /** Number of steps captured so far */\n  @Input() stepsCaptured: number = 0;\n\n  /** Emitted when the user clicks Stop */\n  @Output() stopRecording = new EventEmitter<void>();\n\n  onStop(): void {\n    this.stopRecording.emit();\n  }\n}\n","<div\n  *ngIf=\"isVisible\"\n  class=\"cqa-fixed cqa-left-1/2 cqa-top-6 cqa-z-[60] cqa-flex cqa-items-center cqa-justify-center cqa--translate-x-1/2\"\n  role=\"status\"\n  aria-live=\"polite\"\n  aria-label=\"Recording in progress\"\n>\n  <div\n    class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-6 cqa-px-6 cqa-py-3 cqa-bg-red-500 cqa-rounded-full cqa-shadow-md cqa-text-white\"\n  >\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-shrink-0\">\n      <span class=\"cqa-w-[10px] cqa-h-[10px] cqa-rounded-full cqa-bg-white cqa-border cqa-border-white cqa-opacity-100 cqa-flex-shrink-0\" aria-hidden=\"true\"></span>\n      <span class=\"cqa-font-[Inter] cqa-font-normal cqa-text-[14px] cqa-leading-[18px] cqa-tracking-normal cqa-text-white cqa-align-middle cqa-whitespace-nowrap\">Recording</span>\n      <span class=\"cqa-font-[Inter] cqa-font-normal cqa-text-[14px] cqa-text-[#FFFFFF] cqa-leading-[18px] cqa-tracking-normal cqa-text-white cqa-align-middle cqa-whitespace-nowrap\">{{ stepsCaptured }} steps captured</span>\n    </div>\n    <cqa-button\n      type=\"button\"\n      variant=\"outlined\"\n      btnSize=\"md\"\n      [text]=\"'Stop'\"\n      icon=\"crop_square\"\n      iconColor=\"#FFFFFF\"\n      customClass=\"!cqa-bg-[#F9FAFB33] !cqa-border-[#F9FAFB33] !cqa-text-white cqa-text-[14px] cqa-w-[77px] cqa-h-[28px] cqa-min-h-[28px] cqa-gap-[6px] cqa-pl-[12px] cqa-pr-[12px] cqa-rounded-[6px] cqa-flex-shrink-0\"\n      (clicked)=\"onStop()\">\n    </cqa-button>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { DndDropEvent } from 'ngx-drag-drop';\n\nexport interface RecordedStepItem {\n  id: string;\n  label: string;\n}\n\nexport type SaveOption = 'run_only' | 'test_case';\n\n@Component({\n  selector: 'cqa-review-recorded-steps-modal',\n  templateUrl: './review-recorded-steps-modal.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n})\nexport class ReviewRecordedStepsModalComponent {\n  @Input() isOpen: boolean = false;\n  @Input() title: string = 'Review Recorded Steps';\n  @Input() steps: RecordedStepItem[] = [];\n  @Input() saveOption: SaveOption = 'run_only';\n  @Input() saveButtonDisabled: boolean = false;\n\n  @Output() closeModal = new EventEmitter<void>();\n  @Output() discard = new EventEmitter<void>();\n  @Output() save = new EventEmitter<void>();\n  @Output() saveOptionChange = new EventEmitter<SaveOption>();\n  @Output() stepLabelChange = new EventEmitter<{ id: string; label: string }>();\n  @Output() removeStep = new EventEmitter<string>();\n  @Output() reorderSteps = new EventEmitter<RecordedStepItem[]>();\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    if (target === currentTarget || target.classList.contains('cqa-review-recorded-steps-backdrop')) {\n      this.onClose();\n    }\n  }\n\n  onClose(): void {\n    this.closeModal.emit();\n  }\n\n  onDiscard(): void {\n    this.discard.emit();\n  }\n\n  onSave(): void {\n    if (!this.saveButtonDisabled) {\n      this.save.emit();\n    }\n  }\n\n  onSaveOptionChange(value: SaveOption): void {\n    this.saveOption = value;\n    this.saveOptionChange.emit(value);\n  }\n\n  onStepLabelChange(id: string, label: string): void {\n    this.stepLabelChange.emit({ id, label });\n  }\n\n  onRemoveStep(id: string, event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.removeStep.emit(id);\n  }\n\n  onDndDrop(event: DndDropEvent): void {\n    if (event.data == null || event.index == null) return;\n    const droppedStep = event.data as RecordedStepItem;\n    let dropIndex = event.index;\n    const currentIndex = this.steps.findIndex((s) => s.id === droppedStep.id);\n    if (currentIndex < 0) return;\n    if (currentIndex === dropIndex) return;\n\n    const newSteps = [...this.steps];\n    newSteps.splice(currentIndex, 1);\n    if (currentIndex < dropIndex) dropIndex--;\n    newSteps.splice(dropIndex, 0, droppedStep);\n    this.reorderSteps.emit(newSteps);\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    if (this.isOpen) {\n      this.onClose();\n    }\n  }\n\n  trackByStepId(_index: number, step: RecordedStepItem): string {\n    return step.id;\n  }\n}\n","<div\n  *ngIf=\"isOpen\"\n  class=\"cqa-review-recorded-steps-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-50 cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\"\n  role=\"dialog\"\n  aria-modal=\"true\"\n  aria-labelledby=\"review-recorded-steps-title\"\n  aria-describedby=\"review-recorded-steps-content\">\n  <div\n    class=\"cqa-rounded-xl cqa-bg-[#FBFCFF] cqa-border cqa-border-[#E5E5E5] cqa-w-full cqa-max-w-[499px] cqa-max-h-[90vh] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-shadow-[0_4px_6px_-1px_#00000040,0_2px_4px_-2px_#00000040]\"\n    (click)=\"$event.stopPropagation()\">\n\n    <!-- Header -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-6 cqa-pt-4 cqa-pb-4\" style=\"border-bottom: 1px solid #E5E7EB\">\n      <h2\n        id=\"review-recorded-steps-title\"\n        class=\"cqa-text-[16px] cqa-font-semibold cqa-leading-7 cqa-text-gray-800 cqa-m-0\">\n        {{ title }}\n      </h2>\n      <cqa-button\n        type=\"button\"\n        variant=\"text\"\n        btnSize=\"md\"\n        icon=\"close\"\n        iconColor=\"#4A5565\"\n        [tooltip]=\"'Close'\"\n        tooltipPosition=\"below\"\n        customClass=\"!cqa-min-w-0 cqa-p-1\"\n        (clicked)=\"onClose()\">\n      </cqa-button>\n    </div>\n\n    <!-- Content -->\n    <div id=\"review-recorded-steps-content\" class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-6 cqa-py-4 cqa-flex cqa-flex-col cqa-gap-5\">\n\n      <!-- Alert: Recording Finished -->\n      <div class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-px-4 cqa-py-3 cqa-bg-[#EFF6FF] cqa-border cqa-border-[#DBEAFE] cqa-rounded-lg\">\n        <mat-icon fontSet=\"material-symbols-outlined\" class=\"cqa-flex-shrink-0 cqa-w-6 cqa-h-5 cqa-text-[#1E40AF] cqa-text-xl\" aria-hidden=\"true\">videocam</mat-icon>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n          <span class=\"cqa-text-sm cqa-font-semibold cqa-text-[#1E40AF]\">Recording Finished</span>\n          <p class=\"cqa-text-xs cqa-font-normal cqa-text-[#1E40AF] cqa-m-0\">\n            Review the steps captured below before adding them to your test. You can rename, delete, or reorder them.\n          </p>\n        </div>\n      </div>\n\n      <!-- Recorded steps list -->\n      <section class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-min-h-0\" aria-labelledby=\"recorded-steps-heading\">\n        <h3 id=\"recorded-steps-heading\" class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900 cqa-m-0 cqa-sr-only\">Recorded steps</h3>\n        <div\n          class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[240px] cqa-overflow-y-auto cqa-min-h-0\"\n          [dndDropzone]=\"['recorded-step']\"\n          dndEffectAllowed=\"move\"\n          dndDragoverClass=\"cqa-opacity-70\"\n          (dndDrop)=\"onDndDrop($event)\">\n          <div dndPlaceholderRef class=\"cqa-rounded-lg cqa-border cqa-border-dashed cqa-border-[#E5E7EB] cqa-p-2 cqa-min-h-[44px] cqa-bg-[#F3F4F6]\"></div>\n          <div\n            *ngFor=\"let step of steps; let i = index; trackBy: trackByStepId\"\n            class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-rounded-lg cqa-p-2 cqa-bg-[#F9FAFB] cqa-border cqa-border-solid cqa-border-[#E5E7EB]\"\n            [dndDraggable]=\"step\"\n            [dndDisableIf]=\"steps.length <= 1\"\n            dndEffectAllowed=\"move\"\n            dndType=\"recorded-step\">\n            <span dndHandle class=\"cqa-flex-shrink-0 cqa-text-[#9CA3AF] cqa-cursor-grab cqa-p-1 active:cqa-cursor-grabbing\" aria-hidden=\"true\" title=\"Drag to reorder\">\n              <mat-icon class=\"cqa-w-5 cqa-h-5 cqa-text-[20px] cqa-block cqa-leading-none\">drag_indicator</mat-icon>\n            </span>\n            <span class=\"cqa-flex-shrink-0 cqa-text-[12px] cqa-text-[#9CA3AF]\">{{ i + 1 }}</span>\n            <span class=\"cqa-flex-1 cqa-min-w-0 cqa-text-sm cqa-font-normal cqa-text-gray-800 cqa-truncate\">{{ step.label || 'Step' }}</span>\n            <!-- <cqa-custom-input\n              [value]=\"step.label\"\n              [placeholder]=\"'Step name'\"\n              [fullWidth]=\"true\"\n              size=\"md\"\n              (valueChange)=\"onStepLabelChange(step.id, $event)\">\n            </cqa-custom-input>\n            <cqa-button\n              type=\"button\"\n              variant=\"text\"\n              btnSize=\"md\"\n              icon=\"delete_outline\"\n              iconColor=\"#99999E\"\n              [tooltip]=\"'Remove step'\"\n              tooltipPosition=\"below\"\n              customClass=\"cqa-shrink-0\"\n              (clicked)=\"onRemoveStep(step.id, $event)\">\n            </cqa-button> -->\n          </div>\n        </div>\n      </section>\n\n      <!-- Save option -->\n      <section class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-rounded-lg cqa-p-4\" aria-labelledby=\"save-option-heading\">\n        <h3 id=\"save-option-heading\" class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900 cqa-m-0\">Save option</h3>\n        <mat-radio-group\n          [value]=\"saveOption\"\n          (change)=\"onSaveOptionChange($any($event).value)\"\n          class=\"cqa-flex cqa-flex-col cqa-gap-4\">\n          <label class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-cursor-pointer\">\n            <span class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <mat-radio-button value=\"run_only\" color=\"primary\"></mat-radio-button>\n              <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">Save for this run only</span>\n            </span>\n            <span class=\"cqa-text-sm cqa-font-normal cqa-text-gray-500 cqa-pl-6\">Changes will be reverted after this debug session</span>\n          </label>\n          <label class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-cursor-pointer\">\n            <span class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <mat-radio-button value=\"test_case\" color=\"primary\"></mat-radio-button>\n              <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">Save to test case</span>\n            </span>\n            <span class=\"cqa-text-sm cqa-font-normal cqa-text-gray-500 cqa-pl-6\">Changes will be permanently saved</span>\n          </label>\n        </mat-radio-group>\n      </section>\n    </div>\n\n    <!-- Footer -->\n    <div class=\"cqa-px-6 cqa-pb-6 cqa-border-t cqa-border-gray-200 cqa-grid cqa-grid-cols-2 cqa-gap-3 cqa-w-full\">\n      <cqa-button\n        type=\"button\"\n        variant=\"outlined\"\n        btnSize=\"lg\"\n        [text]=\"'Discard'\"\n        [fullWidth]=\"true\"\n        customClass=\"cqa-w-full cqa-bg-white cqa-border cqa-border-[#414146] cqa-text-[#414146] cqa-rounded-lg hover:cqa-bg-gray-50\"\n        (clicked)=\"onDiscard()\">\n      </cqa-button>\n      <cqa-button\n        type=\"button\"\n        variant=\"filled\"\n        btnSize=\"lg\"\n        [text]=\"'Save'\"\n        [disabled]=\"saveButtonDisabled\"\n        [fullWidth]=\"true\"\n        customClass=\"cqa-w-full cqa-bg-[#4F46E5] cqa-border-[#4F46E5] cqa-text-white cqa-rounded-lg\"\n        (clicked)=\"onSave()\">\n      </cqa-button>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, TemplateRef, ContentChild } from '@angular/core';\nimport { PrerequisiteItem, StepStatus, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { ButtonVariant } from '../../button/button.component';\n\nexport type IconType = 'folder' | 'loop' | 'bar' | 'custom';\n\nexport interface IconConfig {\n  type: IconType;\n  svg?: string; // Custom SVG string when type is 'custom'\n}\n\n/** Config for dynamic header buttons shown beside the items count badge */\nexport interface HeaderButtonConfig {\n  text?: string;\n  icon?: string;\n  variant?: ButtonVariant;\n  disabled?: boolean;\n  tooltip?: string;\n  customClass?: string;\n  btnSize?: 'sm' | 'md' | 'lg';\n  /** Optional id to identify the button in headerButtonClick event */\n  id?: string;\n}\n\n@Component({\n  selector: 'cqa-main-step-collapse',\n  templateUrl: './main-step-collapse.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class MainStepCollapseComponent implements OnInit, OnChanges {\n  @Input() title: string = 'Prerequisites';\n  @Input() items!: PrerequisiteItem[];\n  @Input() expanded: boolean = true;\n  @Input() icon?: IconConfig;\n  @Input() count?: number; // Count to display when items array is empty\n  @Input() countLoading?: boolean = false;\n  @Input() itemContentTemplate?: TemplateRef<any>; // Template for custom content under steps (programmatic)\n  @Input() headerButtons?: HeaderButtonConfig[]; // Dynamic buttons to show beside the items count badge\n  /** When true, \"View steps\" redirects to URL instead of expanding inline. URL comes from item.viewStepsUrl or getViewStepsUrl(item). */\n  @Input() viewStepsAsRedirect: boolean = false;\n  /** Optional function to get redirect URL per item. Used when item.viewStepsUrl is not set. */\n  @Input() getViewStepsUrl?: (item: PrerequisiteItem) => string;\n  /** When redirecting, open link in new tab. Default true */\n  @Input() viewStepsOpenInNewTab: boolean = true;\n  @Input() expandOnViewSteps: boolean = true;\n  /** Optional initial item id to expand (e.g. first failed prerequisite). When set and present in items, that item is expanded on load. */\n  @Input() initialExpandedItemId: string | number | null = null;\n  /** When true, shows Edit/Add/More options icons before duration on each item. */\n  @Input() isDebug?: boolean = false;\n  /** When false, hides the edit/add/more action menu even if isDebug is true (e.g. while a debug run is in progress). */\n  @Input() canEditSteps?: boolean = true;\n  /** When true, hides the duration display (e.g. for prerequisites in test case details where run time is not applicable). */\n  @Input() hideDuration?: boolean = false;\n  @ContentChild('itemContent', { read: TemplateRef }) itemContentTpl?: TemplateRef<any>; // Template reference from ng-template\n  @Output() viewSteps = new EventEmitter<PrerequisiteItem>();\n  @Output() editStep = new EventEmitter<PrerequisiteItem>();\n  @Output() addStepOptionSelect = new EventEmitter<{ item: PrerequisiteItem; option: AddStepMenuOption }>();\n  @Output() stepMoreOptionSelect = new EventEmitter<{ item: PrerequisiteItem; option: StepMoreMenuOption }>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Output() headerButtonClick = new EventEmitter<{ config: HeaderButtonConfig; index: number }>();\n  @Output() expandedChange = new EventEmitter<boolean>();\n\n  isExpanded: boolean = true;\n  expandedItemId: string | number | null = null; // Track which item's steps are currently displayed\n\n  ngOnInit(): void {\n    this.isExpanded = this.expanded;\n    this.applyInitialExpandedItemId();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['expanded']) {\n      this.isExpanded = this.expanded;\n    }\n    if (changes['initialExpandedItemId'] || changes['items']) {\n      this.applyInitialExpandedItemId();\n    }\n  }\n\n  private applyInitialExpandedItemId(): void {\n    if (this.initialExpandedItemId == null || !this.items?.length) {\n      return;\n    }\n    const match = this.items.find((item) => item.id == this.initialExpandedItemId);\n    if (match) {\n      this.expandedItemId = match.id;\n    }\n  }\n\n  toggle(): void {\n    this.isExpanded = !this.isExpanded;\n    this.expandedChange.emit(this.isExpanded);\n  }\n\n  formatDuration(seconds: number): string {\n    if (seconds < 1) {\n      return `${(seconds * 1000).toFixed(0)}ms`;\n    }\n\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = Math.floor(seconds % 60);\n\n    const parts: string[] = [];\n\n    if (hours > 0) {\n      parts.push(`${hours}h`);\n    }\n    if (minutes > 0) {\n      parts.push(`${minutes}m`);\n    }\n    if (secs > 0 || (hours === 0 && minutes === 0)) {\n      parts.push(`${secs}s`);\n    }\n\n    return parts.join(' ');\n  }\n  getStatusIcon(status: StepStatus): string {\n    switch (status) {\n      case 'success':\n        return 'check_circle';\n      case 'failed':\n        return 'cancel';\n      case 'pending':\n        return 'schedule';\n      case 'running':\n        return 'sync';\n      default:\n        return 'help_outline';\n    }\n  }\n\n\n  onViewSteps(item: PrerequisiteItem, event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (this.expandOnViewSteps) {\n      // Accordion behavior: if clicking the same item, close it; otherwise, close previous and open new one\n      if (this.expandedItemId === item.id) {\n        this.expandedItemId = null; // Close if already open\n      } else {\n        this.expandedItemId = item.id; // Open the clicked item (closes previous automatically)\n      }\n    }\n\n    this.viewSteps.emit(item);\n  }\n\n  onEditStep(item: PrerequisiteItem, event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit(item);\n  }\n\n  onAddStepOptionSelect(item: PrerequisiteItem, option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit({ item, option });\n  }\n\n  onStepMoreOptionSelect(item: PrerequisiteItem, option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit({ item, option });\n  }\n\n  isItemExpanded(itemId: string | number): boolean {\n    return this.expandedItemId == itemId;\n  }\n\n  getDisplayCount(): number {\n    // If items is empty/undefined and count is provided, use count\n    if ((!this.items || this.items.length === 0) && this.count !== undefined) {\n      return this.count;\n    }\n    // Otherwise use items length\n    return this.items?.length || 0;\n  }\n\n  onHeaderButtonClick(config: HeaderButtonConfig, index: number, event: MouseEvent): void {\n    event.stopPropagation();\n    event.preventDefault();\n    this.headerButtonClick.emit({ config, index });\n  }\n\n  /** Resolves the redirect URL for an item: item.viewStepsUrl takes precedence, else getViewStepsUrl(item) */\n  getItemViewStepsUrl(item: PrerequisiteItem): string | undefined {\n    if (item.viewStepsUrl) {\n      return item.viewStepsUrl;\n    }\n    return this.getViewStepsUrl?.(item);\n  }\n\n  /** Whether redirect mode is active and we have a URL for this item */\n  hasViewStepsRedirectUrl(item: PrerequisiteItem): boolean {\n    return !!this.viewStepsAsRedirect && !!this.getItemViewStepsUrl(item);\n  }\n}\n","<!-- Header -->\n<div\n  class=\"cqa-mt-2 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-cursor-pointer cqa-bg-[#EEF2FF] cqa-rounded-[4px] cqa-border cqa-border-[#C6D2FF] cqa-border-solid cqa-w-full\"\n  (click)=\"toggle()\">\n  <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-w-full\">\n    <!-- Chevron Icon (Left) -->\n    <!-- <svg [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M4 6L8 10L12 6\" stroke=\"#3F51B5\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n  </svg> -->\n    <div><svg [class.cqa-rotate-180]=\"isExpanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M4 6L8 10L12 6\" stroke=\"#4F39F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n          stroke-linejoin=\"round\" />\n      </svg></div>\n\n    <!-- Chain-Link Icon (if configured, otherwise default) -->\n    <!-- <div *ngIf=\"icon && icon.type === 'folder'\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.6666 11.6667C11.976 11.6667 12.2728 11.5437 12.4916 11.325C12.7104 11.1062 12.8333 10.8094 12.8333 10.5V4.66667C12.8333 4.35725 12.7104 4.0605 12.4916 3.84171C12.2728 3.62292 11.976 3.5 11.6666 3.5H7.05829C6.86318 3.50191 6.67069 3.45486 6.49847 3.36314C6.32624 3.27142 6.17977 3.13797 6.07246 2.975L5.59996 2.275C5.49373 2.11369 5.34911 1.98128 5.17908 1.88965C5.00906 1.79802 4.81894 1.75003 4.62579 1.75H2.33329C2.02387 1.75 1.72713 1.87292 1.50833 2.09171C1.28954 2.3105 1.16663 2.60725 1.16663 2.91667V10.5C1.16663 10.8094 1.28954 11.1062 1.50833 11.325C1.72713 11.5437 2.02387 11.6667 2.33329 11.6667H11.6666Z\" fill=\"#EFF6FF\" stroke=\"#3F51B5\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </div>\n  <div *ngIf=\"icon && icon.type === 'loop'\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#EBECFD\"/>\n      <path d=\"M9.66663 4.66666L11 5.99999L9.66663 7.33332\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path d=\"M5 7.66667V7.33333C5 6.97971 5.14048 6.64057 5.39052 6.39052C5.64057 6.14048 5.97971 6 6.33333 6H11\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path d=\"M6.33333 11.3333L5 9.99999L6.33333 8.66666\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path d=\"M11 8.33334V8.66668C11 9.0203 10.8595 9.35944 10.6095 9.60949C10.3594 9.85953 10.0203 10 9.66667 10H5\" stroke=\"#3F51B5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </div> -->\n    <!-- Bar Icon (Bulleted List) -->\n    <div *ngIf=\"icon && icon.type === 'bar'\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <!-- First bullet and line -->\n        <circle cx=\"3\" cy=\"5\" r=\"2\" fill=\"#4F39F6\"/>\n        <line x1=\"7\" y1=\"5\" x2=\"17\" y2=\"5\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n        <!-- Second bullet and line -->\n        <circle cx=\"3\" cy=\"10\" r=\"2\" fill=\"#4F39F6\"/>\n        <line x1=\"7\" y1=\"10\" x2=\"17\" y2=\"10\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n        <!-- Third bullet and line -->\n        <circle cx=\"3\" cy=\"15\" r=\"2\" fill=\"#4F39F6\"/>\n        <line x1=\"7\" y1=\"15\" x2=\"17\" y2=\"15\" stroke=\"#4F39F6\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n      </svg>\n    </div>\n\n    <!-- Default Chain-Link Icon (when no icon or icon type is not specified) -->\n    <div *ngIf=\"!icon || (icon.type !== 'bar' && icon.type !== 'folder' && icon.type !== 'loop' && icon.type !== 'custom')\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path\n          d=\"M7.50033 14.1663H5.83366C4.72859 14.1663 3.66878 13.7274 2.88738 12.946C2.10598 12.1646 1.66699 11.1047 1.66699 9.99967C1.66699 8.89461 2.10598 7.8348 2.88738 7.0534C3.66878 6.27199 4.72859 5.83301 5.83366 5.83301H7.50033\"\n          stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path\n          d=\"M12.5 5.83301H14.1667C15.2717 5.83301 16.3315 6.27199 17.1129 7.0534C17.8943 7.8348 18.3333 8.89461 18.3333 9.99967C18.3333 11.1047 17.8943 12.1646 17.1129 12.946C16.3315 13.7274 15.2717 14.1663 14.1667 14.1663H12.5\"\n          stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M6.66699 10H13.3337\" stroke=\"#4F39F6\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\n          stroke-linejoin=\"round\" />\n      </svg>\n    </div>\n\n    <!-- Custom Icon -->\n    <div *ngIf=\"icon && icon.type === 'custom' && icon.svg\" [innerHTML]=\"icon.svg\"></div>\n\n    <!-- Title -->\n    <span class=\"cqa-font-semibold cqa-text-[14px] cqa-leading-[17px] cqa-text-[#312C85] cqa-flex-1\">\n      {{ title }}\n    </span>\n\n    <!-- Badge and dynamic header buttons -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\" (click)=\"$event.stopPropagation()\">\n      <ng-container *ngFor=\"let btn of headerButtons; let i = index\">\n        <cqa-button\n          [text]=\"btn.text\"\n          [icon]=\"btn.icon\"\n          [variant]=\"btn.variant || 'outlined'\"\n          [disabled]=\"btn.disabled\"\n          [tooltip]=\"btn.tooltip\"\n          [customClass]=\"btn.customClass\"\n          [btnSize]=\"btn.btnSize || 'sm'\"\n          (clicked)=\"onHeaderButtonClick(btn, i, $event)\">\n        </cqa-button>\n      </ng-container>\n      <span\n        class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-bg-[#C6D2FF] cqa-text-[12px] cqa-leading-[16px] cqa-text-[#432DD7] cqa-inline-flex cqa-items-center cqa-justify-center cqa-min-w-[24px]\">\n        <mat-spinner *ngIf=\"countLoading\" diameter=\"16\" class=\"cqa-inline-block\"></mat-spinner>\n        <span *ngIf=\"!countLoading\">{{ getDisplayCount() }}</span>\n      </span>\n    </div>\n  </div>\n</div>\n\n<!-- Expanded Content -->\n<div *ngIf=\"isExpanded\" class=\"cqa-mt-2 cqa-flex cqa-flex-col cqa-gap-2 cqa-px-2.5\">\n  <!-- When there are no items, display ng-content directly -->\n  <ng-container *ngIf=\"!items || items.length === 0\">\n      <ng-content></ng-content>\n  </ng-container>\n\n  <!-- When items exist, display them -->\n  <div *ngFor=\"let item of items\">\n\n    <!-- Item Header -->\n    <div class=\"cqa-bg-white cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-md cqa-overflow-hidden\">\n      <div class=\"cqa-py-2 cqa-px-3 cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n        <!-- Left side: Status and Title -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n          <!-- Status Icon (Filled Green Circle with Checkmark) -->\n          <div>\n            <!-- Success -->\n            <svg *ngIf=\"item.status === 'success'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <g clip-path=\"url(#clip0_48_121)\">\n                <path\n                  d=\"M10.0003 18.3337C14.6027 18.3337 18.3337 14.6027 18.3337 10.0003C18.3337 5.39795 14.6027 1.66699 10.0003 1.66699C5.39795 1.66699 1.66699 5.39795 1.66699 10.0003C1.66699 14.6027 5.39795 18.3337 10.0003 18.3337Z\"\n                  stroke=\"#00A63E\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                <path d=\"M7.5 9.99967L9.16667 11.6663L12.5 8.33301\" stroke=\"#00A63E\" stroke-width=\"1.66667\"\n                  stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              </g>\n              <defs>\n                <clipPath id=\"clip0_48_121\">\n                  <rect width=\"20\" height=\"20\" fill=\"white\" />\n                </clipPath>\n              </defs>\n            </svg>\n            <!-- Failed -->\n            <svg *ngIf=\"item.status === 'failed'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#EF4444\" />\n              <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"\n                stroke-linejoin=\"round\" />\n            </svg>\n            <!-- Pending -->\n            <svg *ngIf=\"item.status === 'pending'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#9CA3AF\" />\n              <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n            <!-- Running -->\n            <svg *ngIf=\"item.status === 'running'\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"10\" cy=\"10\" r=\"8\" fill=\"#3B82F6\" />\n              <path d=\"M10 6V10L13 12\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n          </div>\n  \n          <!-- Title -->\n          <span class=\"cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n            {{ item.title }}\n          </span>\n        </div>\n  \n        <!-- Right side: Duration and View Steps Link -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n          <!-- Step action icons (only when isDebug) -->\n          <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n            <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep(item, $event)\">\n              <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n            </button>\n            <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n              <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n            </button>\n            <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n              <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(item, opt, $event)\">{{ opt.label }}</button>\n            </mat-menu>\n            <button *ngIf=\"stepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n              <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n            </button>\n            <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n              <button mat-menu-item *ngFor=\"let opt of stepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(item, opt, $event)\">{{ opt.label }}</button>\n            </mat-menu>\n          </div>\n          <!-- Duration with Clock Icon (hidden when hideDuration is true, e.g. prerequisites in test case details) -->\n          <div *ngIf=\"!hideDuration\" class=\"cqa-flex cqa-items-center cqa-gap-1\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\"\n                stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n              <path d=\"M6 3V6L8 7\" stroke=\"#6A7282\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            </svg>\n            <span class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#6A7282]\">\n              {{ formatDuration(item.duration) }}\n            </span>\n          </div>\n  \n          <!-- View Steps Link: redirect mode (navigates to URL) or inline mode (toggle expand) -->\n          <a *ngIf=\"hasViewStepsRedirectUrl(item)\"\n            [href]=\"getItemViewStepsUrl(item)\"\n            [attr.target]=\"viewStepsOpenInNewTab ? '_blank' : null\"\n            [attr.rel]=\"viewStepsOpenInNewTab ? 'noopener noreferrer' : null\"\n            class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n            <span>View steps</span>\n            <svg class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n              viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n                fill=\"#3F43EE\" />\n            </svg>\n          </a>\n          <a *ngIf=\"!hasViewStepsRedirectUrl(item)\" href=\"#\" (click)=\"onViewSteps(item, $event)\"\n            class=\"cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-text-[#3F43EE] cqa-no-underline cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n            <span>{{ isItemExpanded(item.id) ? 'Hide steps' : 'View steps' }}</span>\n            <svg [class.cqa-rotate-90]=\"isItemExpanded(item.id)\" class=\"cqa-transition-transform\" width=\"16\" height=\"15\"\n              viewBox=\"0 0 16 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M8.6552 12.8184L7.55413 11.7668L10.852 8.5864H2.83984V7.05032H10.852L7.55413 3.87506L8.6552 2.81836L13.8398 7.81836L8.6552 12.8184Z\"\n                fill=\"#3F43EE\" />\n            </svg>\n          </a>\n        </div>\n      </div>\n    </div>\n\n    <!-- Steps Content (shown when item is expanded) -->\n    <div *ngIf=\"isItemExpanded(item.id)\">\n      <!-- Custom template via TemplateRef (from @ContentChild or @Input) - passes item as context -->\n      <ng-container *ngIf=\"itemContentTpl || itemContentTemplate\">\n        <div class=\"cqa-p-3\">\n          <ng-container\n            *ngTemplateOutlet=\"(itemContentTpl || itemContentTemplate)!; context: { $implicit: item, item: item }\"></ng-container>\n        </div>\n      </ng-container>\n\n      <!-- Custom content projection via ng-content - displayed for all expanded items -->\n      <ng-content select=\"[itemContent]\"></ng-content>\n    </div>\n  </div>\n</div>\n\n<!-- Custom content projection after all items - for steps loaded after API call -->\n<ng-content select=\"[afterItems]\"></ng-content>","import { Component, Input, Output, EventEmitter, ViewChild, ViewChildren, QueryList, ElementRef, AfterViewInit, AfterViewChecked, OnDestroy, OnChanges, SimpleChanges, HostListener, ChangeDetectorRef } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { getEmptyStatePreset } from '../empty-state/empty-state-presets.constants';\n\nexport interface FastForwardConfig {\n  fromStep: number;\n  toStep: number;\n  currentStep: number;\n  totalSteps: number;\n  targetStepNumber: string;\n  targetStepLabel: string;\n}\n\n\nexport interface StepMarker {\n  cumulativeDuration: number;\n  result: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'SKIPPED';\n  testStepId?: number;\n  level?: number;\n  childSteps?: StepMarker[];\n  title?: string;\n}\n\nexport type SegmentType = 'screenshots' | 'video' | 'trace';\n\ntype SegmentOption = {\n  label: string;\n  value: string;\n  icon?: string;\n};\ninterface DeviceFrameConfig {\n  mockupImage: string;\n  screenInset: {\n    top: string;\n    right: string;\n    bottom: string;\n    left: string;\n  };\n  borderRadius: string;\n}\n\n@Component({\n  selector: 'cqa-simulator',\n  templateUrl: './simulator.component.html',\n  styleUrls: []\n})\n\nexport class SimulatorComponent implements AfterViewInit, AfterViewChecked, OnDestroy, OnChanges {\n\n  @Input() videoUrl: string = '';\n  @Input() videoUrls: string[] = [];\n  @Input() videoCurrentDuration: number = 0;\n  @Input() stepMarkers: StepMarker[] = [];\n  @Input() screenShotUrl: string = '';\n  @Input() traceViewUrl: string = '';\n  @Input() platformName: string = 'Web - Chrome';\n  @Input() platformType: 'browser' | 'device' = 'browser';\n  @Input() platform: string = '';\n  @Input() deviceName: string | null = null;\n  @Input() isLive: boolean = false;\n  @Input() liveStatus: 'In Progress' | 'Paused' | 'Aborted' | 'Failed' | 'Passed' | 'Execution' = 'In Progress';\n  @Input() liveLoadingLabel: string = 'Loading...';\n  @Input() isContentVideoLoading: boolean = false;\n  @Input() failedStatusMessage: string = '';\n  @Input() isVNCSessionIntruppted: boolean = false;\n  @Input() vncSessionIntupptedMessage: string = '';\n  @Input() selectedView: SegmentType = 'video';\n  @Input() hideVideoTab: boolean = false;\n  @Input() browserViewPort: { width: number; height: number } | null = null;\n  @Input() browserDevice: string = '';\n\n  @Input() isFastForwarding: boolean = false;\n  @Input() fastForwardConfig: FastForwardConfig | null = null;\n\n  @Input() showVideoLibrary: boolean = false;\n  @Input() showCaptureVideo: boolean = false;\n  @Input() isCapturingVideo: boolean = false;\n\n  // When `isLive` and at least one clip is present in `videoUrls`, the simulator\n  // header shows a Live/Captured segment control. Parent can also drive the view\n  // imperatively (e.g. \"Watch Now\" button in the capture dialog) by pushing a\n  // new value through this input.\n  @Input() liveSessionView: 'live' | 'captured' = 'live';\n\n  get fastForwardProgressPercent(): number {\n    const c = this.fastForwardConfig;\n    if (!c || !c.totalSteps) return 0;\n    return Math.min(100, (c.currentStep / c.totalSteps) * 100);\n  }\n\n  @Output() videoTimeUpdate = new EventEmitter<number>();\n  @Output() videoPlay = new EventEmitter<void>();\n  @Output() videoPause = new EventEmitter<void>();\n  @Output() markerHit = new EventEmitter<StepMarker>();\n  @Output() isVideoPlayingChange = new EventEmitter<boolean>();\n  @Output() captureVideoRequested = new EventEmitter<void>();\n  @Output() liveSessionViewChange = new EventEmitter<'live' | 'captured'>();\n\n  private _vplayer?: ElementRef<HTMLVideoElement>;\n\n  @ViewChild('vplayer')\n  set vplayerRef(ref: ElementRef<HTMLVideoElement> | undefined) {\n    if (!ref) {\n      // Element is being unmounted (e.g. user toggled from Captured → Live during a\n      // mid-flight switchToVideoAndResetInternal). Drop the stale reference so any\n      // follow-up attempt to operate on .nativeElement short-circuits out cleanly.\n      this._vplayer = undefined;\n      return;\n    }\n\n    this._vplayer = ref;\n    this.onVideoElementReady();\n  }\n\n  get vplayer(): ElementRef<HTMLVideoElement> | undefined {\n    return this._vplayer;\n  }\n\n  private _timelineBar?: ElementRef<HTMLDivElement>;\n\n  @ViewChild('timelineBar', { static: false })\n  set timelineBarRef(ref: ElementRef<HTMLDivElement> | undefined) {\n    if (!ref) return;\n    this._timelineBar = ref;\n  }\n\n  get timelineBar(): ElementRef<HTMLDivElement> | undefined {\n    return this._timelineBar;\n  }\n\n  private _speedControlContainer?: ElementRef<HTMLDivElement>;\n\n  @ViewChild('speedControlContainer', { static: false })\n  set speedControlContainerRef(ref: ElementRef<HTMLDivElement> | undefined) {\n    if (!ref) return;\n    this._speedControlContainer = ref;\n  }\n\n  get speedControlContainer(): ElementRef<HTMLDivElement> | undefined {\n    return this._speedControlContainer;\n  }\n\n  progress = 0;\n  dragging = false;\n  isPlaying: boolean = false;\n  showPlayPauseOverlay: boolean = false;\n  /**\n   * Icon shown by the play/pause overlay during its 500ms lifetime. Pinned at click time\n   * so the icon doesn't flicker as `isPlaying` flips async between\n   * `<video>.play()` invocation and its promise resolving. Mirrors the YouTube-style\n   * convention: show the action just taken (▶ after play, ∥ after pause).\n   */\n  overlayShowsPlayingIcon: boolean = false;\n  private playPauseOverlayTimer: any = null;\n  isFullScreen: boolean = false;\n  currentView: string = 'video';\n  currentVideoIndex: number = 0;\n  currentSpeed: string = '1x';\n  isSpeedControlOpen: boolean = false;\n  private detectedVideoDurations: number[] = []; // Actual durations detected from video metadata\n  private wasPlayingBeforeDrag: boolean = false; // Track if video was playing before drag started\n  private playPromise: Promise<void> | null = null; // Track the current play promise\n  private hitMarkers: Set<number> = new Set(); // Track which markers have been hit (by testStepId)\n\n  // State machine for robust media operations\n  private playerState: 'idle' | 'loading' | 'ready' | 'playing' | 'paused' | 'seeking' | 'switching' | 'error' = 'idle';\n  private operationQueue: Promise<void> = Promise.resolve(); // Serialize all media operations\n\n  // Video-on-demand (Video Library) state — single source of truth is `videoUrls`.\n  // `newVideoIndexes` marks which indexes were just captured (so we can show the\n  // NEW badge until that clip is selected); `libraryVideoDurations` caches the\n  // metadata-loaded duration per index for each library card's thumbnail.\n  isVideoLibraryCollapsed: boolean = true;\n  newVideoIndexes: Set<number> = new Set<number>();\n  libraryVideoDurations: Map<number, number> = new Map<number, number>();\n  downloadingIndexes: Set<number> = new Set<number>();\n  downloadProgress: Map<number, number> = new Map<number, number>(); // 0-100 per clip index\n  @ViewChildren('clipVideo') clipVideos?: QueryList<ElementRef<HTMLVideoElement>>;\n  @ViewChild('clipsScroller') clipsScrollerRef?: ElementRef<HTMLElement>;\n  private lastLibrarySyncKey: string = '';\n  // Tracks which clip index the library row was last auto-scrolled to, so the\n  // timeupdate handler doesn't re-trigger a scroll every frame.\n  private lastScrolledClipIndex: number = -1;\n\n  // Auto-recovery: when the <video> fires an error event (e.g. Chrome's\n  // \"PIPELINE_ERROR_READ: FFmpegDemuxer\" after a network glitch), we flip\n  // this flag to unmount the <video> via *ngIf, then flip it back so Angular\n  // remounts a fresh element — the same mechanism that makes the\n  // Screenshots↔Video tab-switch workaround recover playback today.\n  videoRefreshing: boolean = false;\n  private pendingRecoverySeekSec: number | null = null;\n  private pendingRecoveryPlay: boolean = false;\n  private recoveryAttempts: number = 0;\n  private recoveryAttemptWindowStart: number = 0;\n  private readonly MAX_RECOVERY_ATTEMPTS = 10;\n  private readonly RECOVERY_WINDOW_MS = 10_000;\n\n  // Phase 2 — \"Show Full Video\" mode. When true, the main timeline spans the total\n  // duration across all clips and step markers from every clip are laid out on it.\n  // Clip-to-clip transitions happen under the hood via the existing onVideoEnded\n  // auto-advance path — the user doesn't see a reset.\n  isVideoFullMode: boolean = false;\n  // 0-100 position on the global timeline while the user is actively dragging.\n  // Needed because `progress` is per-current-clip and would give the wrong value.\n  globalDragProgress: number = 0;\n\n  // Drag-to-scroll state for the clips row (mouse equivalent of touch-swipe).\n  private clipsDragState = { dragging: false, startX: 0, startScrollLeft: 0, didMove: false };\n  clipsDragActive: boolean = false;\n\n  get effectivePlatformType(): 'browser' | 'device' {\n    if (this.platformType === 'device') return 'device';\n    if (this.resolveMobileBrowserDevice()) return 'device';\n    return 'browser';\n  }\n\n  get hasDeviceFrame(): boolean {\n    return !!this.deviceFrameConfig;\n  }\n\n  get isPlayerSwitching(): boolean {\n    return this.playerState === 'switching';\n  }\n\n\n  get isAspectRatioMatched(): boolean {\n    if (typeof window === 'undefined' || !this.effectiveBrowserViewPort) return true;\n    const windowAr = window.innerWidth / window.innerHeight;\n    const viewportAr = this.effectiveBrowserViewPort.width / this.effectiveBrowserViewPort.height;\n    const tolerance = 0.15;\n    return Math.abs(windowAr - viewportAr) / viewportAr < tolerance;\n  }\n\n  get liveContentContainerStyle(): { [key: string]: string } {\n    if (typeof window === 'undefined' || !this.isLive || this.effectivePlatformType !== 'browser') {\n      return {};\n    }\n    if (!this.isAspectRatioMatched) {\n      return {\n        maxHeight: `${Math.max(200, window.innerHeight - 200)}px`,\n        height: '100%'\n      };\n    }\n    return {};\n  }\n\n  segments: SegmentOption[] = [\n    { label: 'Screenshots', value: 'screenshots', icon: 'photo'  },\n    { label: 'Video', value: 'video', icon: 'videocam' },\n  ];\n\n  speedSegments: SegmentOption[] = [\n    { label: '1x', value: '1x' },\n    { label: '2x', value: '2x' },\n    { label: '5x', value: '5x' },\n  ];\n\n  liveSessionSegments: SegmentOption[] = [\n    { label: 'Live', value: 'live' },\n    { label: 'Captured', value: 'captured' },\n  ];\n\n  onLiveSessionViewChange(next: string): void {\n    const resolved: 'live' | 'captured' = (next === 'captured' ? 'captured' : 'live');\n    if (resolved !== this.liveSessionView) {\n      this.liveSessionView = resolved;\n      this.resetLiveSessionPlaybackState();\n      this.liveSessionViewChange.emit(resolved);\n    }\n  }\n\n  /** Reset the video player to a clean slate whenever the Live/Captured view toggles\n   *  during an active debug session. Pauses playback, exits Full Video mode, rewinds\n   *  to clip 0, and clears drag/scroll/marker state.\n   *\n   *  Applied synchronously (no operationQueue) because the toggle usually also\n   *  unmounts/remounts the <video> element — any in-flight operation on the old\n   *  element is already dead, and a fresh element naturally mounts with\n   *  `src = videoUrls[0]` from `currentVideoUrl`. Enqueueing here would race with\n   *  the element lifecycle and either get discarded or block the queue. */\n  private resetLiveSessionPlaybackState(): void {\n    this.isVideoFullMode = false;\n    this.isVideoLibraryCollapsed = true;\n    this.progress = 0;\n    this.globalDragProgress = 0;\n    this.dragging = false;\n    this.lastScrolledClipIndex = -1;\n    this.currentVideoIndex = 0;\n    this.isPlaying = false;\n    this.playPromise = null;\n    this.hitMarkers.clear();\n    this.lastSetDuration = -1;\n    const video = this._vplayer?.nativeElement;\n    if (video) {\n      try { video.pause(); } catch { /* detached element — ignore */ }\n      try { video.currentTime = 0; } catch { /* detached element — ignore */ }\n      this.playerState = 'paused';\n    } else {\n      this.playerState = 'idle';\n    }\n    this.isVideoPlayingChange.emit(false);\n  }\n\n  private videoEventListenerCleanup: (() => void) | null = null;\n  private lastSetDuration: number = -1;\n  private dragMouseMoveHandler: ((e: MouseEvent) => void) | null = null;\n  private dragMouseUpHandler: ((e: MouseEvent) => void) | null = null;\n  private speedControlClickOutsideHandler: ((e: MouseEvent) => void) | null = null;\n  private preloadVideoElement: HTMLVideoElement | null = null;\n  private preloadAllVideoElement: HTMLVideoElement | null = null;\n  \n  safeTraceUrl: SafeResourceUrl;\n  traceViewerLoading: boolean = false;\n  traceViewerError: boolean = false;\n  isCorrectDeviceFrameAvailable: boolean = false;\n  private readonly emptyStateConfig = getEmptyStatePreset('nothingToDisplay');\n  readonly deviceErrorEmptyStateConfig = {\n    ...this.emptyStateConfig,\n    title: 'Device Not Supported',\n    description: 'The device you are trying to use is not supported.',\n    actions: []\n  };\n\n  get effectiveBrowserViewPort(): { width: number; height: number } {\n    const defaultViewport = { width: 1280, height: 720 };\n\n    if (!this.browserViewPort) {\n      return defaultViewport;\n    }\n\n    const width = Number((this.browserViewPort as any).width);\n    const height = Number((this.browserViewPort as any).height);\n\n    if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {\n      return defaultViewport;\n    }\n\n    return { width, height };\n  }\n\n  private readonly MOBILE_BROWSER_DEVICE_MAP: Record<string, string> = {\n    'iphone_11': 'iPhone 11',\n    'iphone_13': 'iPhone 13',\n    'iphone_15': 'iPhone 15',\n    'iphone_xr': 'iPhone XR',\n    'iphone_16': 'iPhone 16',\n    'iphone_16_pro': 'iPhone 16 Pro',\n    'iphone_17': 'iPhone 17',\n    'iphone_17_pro_max': 'iPhone 17 Pro Max',\n    'pixel_5': 'Pixel 5',\n    'pixel_8': 'Pixel 8',\n    'pixel_9': 'Pixel 9',\n    'pixel_10': 'Pixel 10',\n    'galaxy_s20_fe': 'Galaxy S20 FE',\n    'galaxy_s25': 'Galaxy S25',\n    'galaxy_s25_ultra': 'Galaxy S25 Ultra',\n    'galaxy_tab_a9+': 'Galaxy Tab A9+',\n  };\n\n  private resolveMobileBrowserDevice(): string | null {\n    if (!this.browserDevice) return null;\n    const normalized = this.browserDevice.toLowerCase().replace(/-/g, '_');\n    return this.MOBILE_BROWSER_DEVICE_MAP[normalized] || null;\n  }\n\n  private readonly deviceFrameConfigs: Record<string, DeviceFrameConfig> = {\n    // Pixels\n    'Pixel 5': {\n      mockupImage: 'assets/images/mockups/pixel-5.png',\n      screenInset: {\n        top: '2%',\n        right: '4.5%',\n        bottom: '2%',\n        left: '4.5%'\n      },\n      borderRadius: '4%'\n    },\n    'Pixel 8': {\n      mockupImage: 'assets/images/mockups/pixel-8.png',\n      screenInset: {\n        top: '2%',\n        right: '4.5%',\n        bottom: '2.5%',\n        left: '4.5%'\n      },\n      borderRadius: '4%'\n    },\n    'Pixel 9': {\n      mockupImage: 'assets/images/mockups/pixel-9-pro.webp',\n      screenInset: {\n        top: '4%',\n        right: '5%',\n        bottom: '4%',\n        left: '5%'\n      },\n      borderRadius: '8%'\n    },\n    'Pixel 10': {\n      mockupImage: 'assets/images/mockups/pixel-10.png',\n      screenInset: {\n        top: '1%',\n        right: '2.5%',\n        bottom: '1%',\n        left: '2.5%'\n      },\n      borderRadius: '5%'\n    },\n    // iPhones\n    'iPhone 11': {\n      mockupImage: 'assets/images/mockups/apple-iphone-11.png',\n      screenInset: {\n        top: '3%',\n        right: '7.5%',\n        bottom: '3%',\n        left: '7.5%'\n      },\n      borderRadius: '4%'\n    },\n    'iPhone 13': {\n      mockupImage: 'assets/images/mockups/apple-iphone-13.png',\n      screenInset: {\n        top: '2%',\n        right: '5%',\n        bottom: '2%',\n        left: '5%'\n      },\n      borderRadius: '4%'\n    },\n    'iPhone 15': {\n      mockupImage: 'assets/images/mockups/apple-iphone-15.png',\n      screenInset: {\n        top: '1.5%',\n        right: '4.5%',\n        bottom: '1.5%',\n        left: '4.5%'\n      },\n      borderRadius: '4%'\n    },\n    'iPhone XR': {\n      mockupImage: 'assets/images/mockups/apple-iphone-xr.png',\n      screenInset: {\n        top: '3.5%',\n        right: '7.5%',\n        bottom: '3.5%',\n        left: '7.5%'\n      },\n      borderRadius: '4%'\n    },\n    'iPhone 16 Pro': {\n      mockupImage: 'assets/images/mockups/iphone-16-pro.png',\n      screenInset: {\n        top: '0.5%',\n        right: '1.5%',\n        bottom: '0.5%',\n        left: '1.5%'\n      },\n      borderRadius: '8%'\n    },\n    'iPhone 16': {\n      mockupImage: 'assets/images/mockups/iphone-16.png',\n      screenInset: {\n        top: '0.5%',\n        right: '3%',\n        bottom: '0.5%',\n        left: '3%'\n      },\n      borderRadius: '6%'\n    },\n    'iPhone 17 Pro Max': {\n      mockupImage: 'assets/images/mockups/iphone-17-pro-max.png',\n      screenInset: {\n        top: '1%',\n        right: '2%',\n        bottom: '1%',\n        left: '2%'\n      },\n      borderRadius: '8%'\n    },\n    'iPhone 17': {\n      mockupImage: 'assets/images/mockups/iphone-17.png',\n      screenInset: {\n        top: '1%',\n        right: '2.5%',\n        bottom: '1%',\n        left: '2.5%'\n      },\n      borderRadius: '5%'\n    },\n    // Galaxy \n    'Galaxy S20 FE': {\n      mockupImage: 'assets/images/mockups/samsung-galaxy-s20.png',\n      screenInset: {\n        top: '1.5%',\n        right: '2%',\n        bottom: '1.5%',\n        left: '2%'\n      },\n      borderRadius: '4%'\n    },\n    'Galaxy S25': {\n      mockupImage: 'assets/images/mockups/galaxy-s25.png',\n      screenInset: {\n        top: '1.5%',\n        right: '2%',\n        bottom: '1.5%',\n        left: '2%'\n      },\n      borderRadius: '8%'\n    },\n    'Galaxy S25 Ultra': {\n      mockupImage: 'assets/images/mockups/galaxy-s25-ultra.png',\n      screenInset: {\n        top: '0.5%',\n        right: '1%',\n        bottom: '0.5%',\n        left: '1%'\n      },\n      borderRadius: '3%'\n    },\n    'Galaxy Tab A9+': {\n      mockupImage: 'assets/images/mockups/galaxy-tab-a9-plus.png',\n      screenInset: {\n        top: '2%',\n        right: '3%',\n        bottom: '2%',\n        left: '3%'\n      },\n      borderRadius: '1%'\n    },\n    // Browser\n    browser: {\n      mockupImage: 'assets/images/mockups/browser-mockup.png',\n      screenInset: {\n        top: '6%',\n        right: '0%',\n        bottom: '0%',\n        left: '0%'\n      },\n      borderRadius: '0%'\n    }\n  };\n\n  constructor(\n    private sanitizer: DomSanitizer,\n    private cdr: ChangeDetectorRef\n  ) {\n    this.safeTraceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\n    this.updateSegments();\n  }\n\n  @HostListener('window:resize')\n  onWindowResize(): void {\n    this.cdr.markForCheck();\n  }\n\n  private get deviceFrameConfig(): DeviceFrameConfig | null {\n    if (this.platformType === 'device') {\n      const name = this.deviceName || this.resolveMobileBrowserDevice();\n      return (name && this.deviceFrameConfigs[name]) ? this.deviceFrameConfigs[name] : null;\n    }\n\n    if (this.platformType === 'browser') {\n      // Auto-detect mobile device emulation from the browser value\n      const mobileName = this.resolveMobileBrowserDevice();\n      if (mobileName && this.deviceFrameConfigs[mobileName]) {\n        return this.deviceFrameConfigs[mobileName];\n      }\n      return this.deviceFrameConfigs['browser'] || null;\n    }\n\n    return null;\n  }\n\n  get deviceMockupImage(): string {\n    return this.deviceFrameConfig ? this.deviceFrameConfig.mockupImage : '';\n  }\n\n  get deviceScreenStyle(): { [key: string]: string } {\n    const cfg = this.deviceFrameConfig;\n    if (!cfg) {\n      return {};\n    }\n\n    return {\n      position: 'absolute',\n      top: cfg.screenInset.top,\n      right: cfg.screenInset.right,\n      bottom: cfg.screenInset.bottom,\n      left: cfg.screenInset.left,\n      'border-radius': cfg.borderRadius,\n      overflow: 'hidden'\n    };\n  }\n\n  ngAfterViewInit(): void {\n    this.currentView = this.selectedView;\n    this.attachVideoListeners();\n    this.updateSafeTraceUrl();\n  }\n\n  ngAfterViewChecked(): void {\n    // Keep the active library card's <video> element's play state in sync with the main player\n    // so the card doesn't show a frozen thumbnail while the main video is playing.\n    const key = `${this.currentVideoIndex}:${this.isPlaying}`;\n    if (key !== this.lastLibrarySyncKey) {\n      this.lastLibrarySyncKey = key;\n      this.syncLibraryClipPlayback();\n    }\n  }\n\n  private syncLibraryClipPlayback(): void {\n    const refs = this.clipVideos;\n    if (!refs) return;\n    const mainEl = this.vplayer?.nativeElement;\n    refs.forEach((ref, i) => {\n      const el = ref?.nativeElement;\n      if (!el) return;\n      const shouldPlay = i === this.currentVideoIndex && this.isPlaying;\n      if (shouldPlay) {\n        // Seed the card's currentTime from the main player so they start roughly aligned.\n        if (mainEl && isFinite(mainEl.currentTime) && !isNaN(mainEl.currentTime)) {\n          try { el.currentTime = mainEl.currentTime; } catch (_) { /* ignore */ }\n        }\n        if (el.paused) {\n          const p = el.play();\n          if (p && typeof p.catch === 'function') p.catch(() => { /* autoplay may be blocked — ignore */ });\n        }\n      } else if (!el.paused) {\n        el.pause();\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['videoUrls']) {\n      const prev = (changes['videoUrls'].previousValue as string[] | undefined) ?? [];\n      const curr = (changes['videoUrls'].currentValue as string[] | undefined) ?? [];\n      // Mid-session captures append to videoUrls. Treat append-only changes as\n      // additive so the currently-playing clip isn't yanked back to index 0,\n      // and mark the new tail clips with NEW badges.\n      const isAppendOnly =\n        curr.length > prev.length &&\n        prev.every((u, i) => curr[i] === u);\n\n      if (curr.length > 0) {\n        if (isAppendOnly) {\n          for (let i = prev.length; i < curr.length; i++) {\n            this.newVideoIndexes.add(i);\n          }\n        } else {\n          this.currentVideoIndex = 0;\n          this.progress = 0;\n          this.newVideoIndexes.clear();\n          // URLs replaced (e.g. execution_completed swapping captured → screen_recordings).\n          // Discard stale duration + library caches so the new clips are re-probed.\n          this.detectedVideoDurations = [];\n          this.libraryVideoDurations.clear();\n        }\n        this.detectVideoDurations(curr);\n        this.schedulePreloadAllSegments(curr);\n      } else {\n        this.currentVideoIndex = 0;\n        this.progress = 0;\n        this.newVideoIndexes.clear();\n        this.detectedVideoDurations = [];\n        this.libraryVideoDurations.clear();\n      }\n    }\n    if (changes['isLive'] && changes['isLive'].currentValue === false) {\n      // New post-execution session: default back to 'live' so the next live\n      // run starts with the live view, not whatever the user was last on.\n      this.liveSessionView = 'live';\n    }\n    if (changes['liveSessionView'] && !changes['liveSessionView'].firstChange) {\n      const next = changes['liveSessionView'].currentValue;\n      const resolved: 'live' | 'captured' = (next === 'captured' ? 'captured' : 'live');\n      const prev = changes['liveSessionView'].previousValue;\n      this.liveSessionView = resolved;\n      if (resolved !== prev) {\n        // Parent pushed a new view (e.g. \"Watch Now\" or resume-action returning to Live).\n        // Reset the simulator the same way the segment control would.\n        this.resetLiveSessionPlaybackState();\n      }\n    }\n    if (changes['videoCurrentDuration'] && !changes['videoCurrentDuration'].firstChange) {\n      const newDuration = changes['videoCurrentDuration'].currentValue;\n      // Ignore sentinel value (-1) used to force change detection\n      if (newDuration === -1) {\n        return;\n      }\n      \n      if (this.isPlaying) {\n        this.pauseVideo();\n        console.log('[Simulator] ngOnChanges videoCurrentDuration: paused video before seeking');\n      }\n      \n      if (this.hasMultipleVideos) {\n        const targetVideoIndex = this.findVideoIndexForTimestamp(newDuration);\n        if (targetVideoIndex !== null) {\n          const boundaries = this.getVideoDurationBoundaries();\n          const targetBoundary = boundaries[targetVideoIndex];\n          const relativeTimestamp = newDuration - targetBoundary.start;\n          \n          const needsSwitch = this.currentVideoIndex !== targetVideoIndex;\n          \n          if (this.vplayer?.nativeElement) {\n            const currentVideoTimeMs = this.vplayer.nativeElement.currentTime * 1000;\n            const timeDifference = Math.abs(relativeTimestamp - currentVideoTimeMs);\n            \n            if (needsSwitch || newDuration !== this.lastSetDuration || timeDifference > 100) {\n              this.switchToVideoAndSeek(newDuration);\n            }\n          } else {\n            if (needsSwitch) {\n              this.currentVideoIndex = targetVideoIndex;\n            }\n          }\n        }\n      } else {\n        if (this.vplayer?.nativeElement) {\n          const currentVideoTimeMs = this.vplayer.nativeElement.currentTime * 1000;\n          const timeDifference = Math.abs(newDuration - currentVideoTimeMs);\n          if (newDuration !== this.lastSetDuration || timeDifference > 100) {\n            this.seekToTime(newDuration);\n          }\n        }\n      }\n    }\n    if (changes['traceViewUrl']) {\n      this.updateSafeTraceUrl();\n      this.updateSegments();\n      if (!this.traceViewUrl && this.currentView === 'trace') {\n        this.currentView = this.hideVideoTab ? 'screenshots' : 'video';\n      }\n    }\n    if (changes['hideVideoTab']) {\n      this.updateSegments();\n    }\n    if (changes['selectedView']) {\n      this.currentView = changes['selectedView'].currentValue;\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.videoEventListenerCleanup) {\n      this.videoEventListenerCleanup();\n    }\n    if (this.preloadVideoElement) {\n      this.preloadVideoElement.src = '';\n      this.preloadVideoElement.remove();\n      this.preloadVideoElement = null;\n    }\n    if (this.preloadAllVideoElement) {\n      this.preloadAllVideoElement.src = '';\n      this.preloadAllVideoElement.remove();\n      this.preloadAllVideoElement = null;\n    }\n    this.removeDragListeners();\n    this.removeSpeedControlClickOutsideListener();\n    console.log('[Simulator] ngOnDestroy: cleaned up listeners');\n  }\n\n  /**\n   * Seek video - public method (enqueues operation)\n   */\n  seekToTime(milliseconds: number): void {\n    if (!this.vplayer?.nativeElement) return;\n    this.enqueueOperation(() => this.seekToTimeInternal(milliseconds));\n  }\n\n  /**\n   * Seek video internal implementation (no enqueue - called from queue)\n   * This prevents pipeline read errors during rapid seek operations\n   */\n  private async seekToTimeInternal(milliseconds: number): Promise<void> {\n    const video = this.vplayer?.nativeElement;\n    if (!video || !video.duration) return;\n\n    const seconds = milliseconds / 1000;\n    const targetTime = Math.max(0, Math.min(seconds, video.duration));\n\n    console.log('[Simulator] seekToTimeInternal: seeking', {\n      milliseconds,\n      targetTime,\n      playerState: this.playerState,\n      currentTimeBefore: video.currentTime\n    });\n    \n    // Set seeking state\n    this.playerState = 'seeking';\n\n    // CRITICAL: Pause before seeking to avoid pipeline errors\n      video.pause();\n    \n    // Update state\n    this.isPlaying = false;\n    this.playPromise = null;\n    this.videoPause.emit();\n    this.isVideoPlayingChange.emit(false);\n\n    // Perform seek\n    video.currentTime = targetTime;\n    this.lastSetDuration = milliseconds;\n    \n    // Wait briefly for seek to complete (prevents rapid seek issues)\n    await new Promise(resolve => setTimeout(resolve, 50));\n\n    // Per-video progress (0-100% of current video)\n    const durationMs = video.duration * 1000;\n    if (durationMs > 0) {\n      this.progress = Math.min(100, Math.max(0, (video.currentTime * 1000 / durationMs) * 100));\n    }\n    const segmentStart = this.currentVideoIndex === 0 ? 0 : (this.segmentBoundaries[this.currentVideoIndex - 1] ?? 0);\n    this.videoTimeUpdate.emit(segmentStart + video.currentTime * 1000);\n    \n    // Set to paused state (user must explicitly play)\n    this.playerState = 'paused';\n\n    console.log('[Simulator] seekToTimeInternal: seek complete', {\n      currentTimeAfter: video.currentTime,\n      playerState: this.playerState\n    });\n  }\n\n  onVideoKeydown(event: KeyboardEvent): void {\n    if (event.key !== ' ' && event.code !== 'Space') return;\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.currentVideoUrl) {\n      this.togglePlay();\n    }\n  }\n\n  /**\n   * Toggle play/pause.\n   *\n   * Decision is based on the video element's native `paused` property (ground truth)\n   * rather than on `playerState`, which lags during async play() / pause() transitions.\n   * The previous implementation would, on a rapid second click during the ~50-200ms\n   * `video.play()` await window, see `playerState === 'loading'` and queue another\n   * `playVideo()` instead of the intended `pauseVideo()` — so the second click\n   * silently \"did nothing\" while the video kept playing. Reading `video.paused`\n   * directly makes the toggle correct regardless of what stage the state machine\n   * happens to be in.\n   */\n  togglePlay(): void {\n    const video = this.vplayer?.nativeElement;\n    if (!video) {\n      console.error('[Simulator] togglePlay: video element not found', {\n        playerState: this.playerState,\n        isFullScreen: this.isFullScreen\n      });\n      return;\n    }\n\n    // Check for valid source\n    if (!this.currentVideoUrl || video.networkState === HTMLMediaElement.NETWORK_NO_SOURCE || video.error) {\n      console.error('[Simulator] togglePlay: no valid source', {\n        currentVideoUrl: this.currentVideoUrl,\n        networkState: video.networkState,\n        error: video.error\n      });\n      return;\n    }\n\n    // Clear error state so the next play attempt can proceed.\n    if (this.playerState === 'error') {\n      console.warn('[Simulator] togglePlay: player in error state', { readyState: video.readyState });\n      this.playerState = 'idle';\n    }\n\n    console.log('[Simulator] togglePlay:', {\n      playerState: this.playerState,\n      isPlaying: this.isPlaying,\n      videoPaused: video.paused,\n      readyState: video.readyState\n    });\n\n    // Ground truth: if the video element is paused (or hasn't started yet), play; else pause.\n    // The operation queue serializes these so back-to-back clicks resolve in order.\n    if (video.paused) {\n      this.playVideo();\n    } else {\n      this.pauseVideo();\n    }\n  }\n\n  //  SHOW PLAY PAUSE OVERLAY\n  onVideoFrameClick(): void {\n    // Pin the overlay icon to the user's INTENT for this click (the action just taken),\n    // independent of how the async play/pause resolves. Prevents flicker where the icon\n    // briefly shows the pre-click state before flipping when `isPlaying` updates.\n    const video = this.vplayer?.nativeElement;\n    const wasPaused = video ? video.paused : !this.isPlaying;\n    // YouTube convention: after clicking to PLAY, show ▶ (\"just played\"); after PAUSE,\n    // show ∥. Template branches on `overlayShowsPlayingIcon` so it stays stable for\n    // the entire 500ms overlay lifetime.\n    this.overlayShowsPlayingIcon = wasPaused;\n\n    this.togglePlay();\n    this.showPlayPauseOverlay = true;\n    if (this.playPauseOverlayTimer) clearTimeout(this.playPauseOverlayTimer);\n    this.playPauseOverlayTimer = setTimeout(() => {\n      this.showPlayPauseOverlay = false;\n    }, 500);\n  }\n\n  /**\n   * Play video - public method (enqueues operation)\n   */\n  private playVideo(): void {\n    this.enqueueOperation(() => this.playVideoInternal());\n  }\n\n  /**\n   * Play video internal implementation (no enqueue - called from queue)\n   * This eliminates FFmpegDemuxer errors and play promise interruptions\n   */\n  private async playVideoInternal(): Promise<void> {\n    const video = this.vplayer?.nativeElement;\n    if (!video) {\n      console.error('[Simulator] playVideoInternal: video element not found');\n      return;\n    }\n\n    // Already playing - skip\n    if (this.playerState === 'playing') {\n      console.log('[Simulator] playVideoInternal: already playing, skipping');\n      return;\n    }\n\n    console.log('[Simulator] playVideoInternal: starting', {\n      playerState: this.playerState,\n      currentTime: video.currentTime,\n      readyState: video.readyState\n    });\n\n    // Wait for video to be ready if needed\n    if (video.readyState < HTMLMediaElement.HAVE_METADATA) {\n      console.log('[Simulator] playVideoInternal: waiting for metadata');\n      await new Promise<void>((resolve, reject) => {\n        const onLoadedMetadata = () => {\n          video.removeEventListener('loadedmetadata', onLoadedMetadata);\n          video.removeEventListener('error', onError);\n          resolve();\n        };\n        const onError = () => {\n          video.removeEventListener('loadedmetadata', onLoadedMetadata);\n          video.removeEventListener('error', onError);\n          reject(new Error('Failed to load video metadata'));\n        };\n        video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true });\n        video.addEventListener('error', onError, { once: true });\n      });\n    }\n\n    // Clear hit markers if starting from beginning\n    const currentTimeMs = video.currentTime * 1000;\n    if (currentTimeMs < 100) {\n      this.hitMarkers.clear();\n    }\n\n    // Set state to loading\n    this.playerState = 'loading';\n\n    try {\n      // Verify video element is still available before playing\n      const currentVideo = this.vplayer?.nativeElement;\n      if (!currentVideo || currentVideo !== video) {\n        console.warn('[Simulator] playVideoInternal: video element changed or unavailable');\n        this.playerState = 'paused';\n        this.isPlaying = false;\n        this.playPromise = null;\n        return;\n      }\n\n      // Await play promise - this is critical\n      await video.play();\n      \n      // Verify video element is still available after play promise resolves\n      const videoAfterPlay = this.vplayer?.nativeElement;\n      if (!videoAfterPlay || videoAfterPlay !== video) {\n        console.warn('[Simulator] playVideoInternal: video element changed during play');\n        this.playerState = 'paused';\n        this.isPlaying = false;\n        this.playPromise = null;\n        return;\n      }\n      \n      // Play succeeded\n      this.playerState = 'playing';\n      this.isPlaying = true;\n      this.playPromise = null;\n      this.videoPlay.emit();\n      this.isVideoPlayingChange.emit(true);\n      \n      console.log('[Simulator] playVideoInternal: playing successfully', {\n        currentTime: video.currentTime,\n        playerState: this.playerState\n      });\n        \n      setTimeout(() => {\n        if (this.isPlaying && this.vplayer?.nativeElement) {\n          const v = this.vplayer.nativeElement;\n          const segmentStart = this.currentVideoIndex === 0 ? 0 : (this.segmentBoundaries[this.currentVideoIndex - 1] ?? 0);\n          this.checkMarkerHit(segmentStart + v.currentTime * 1000);\n        }\n      }, 50);\n    } catch (err: any) {\n      // Play failed\n      // Check if video element is still available\n      const videoAfterError = this.vplayer?.nativeElement;\n      if (!videoAfterError || videoAfterError !== video) {\n        console.warn('[Simulator] playVideoInternal: video element changed during error');\n        this.playerState = 'paused';\n      } else {\n        this.playerState = 'error';\n      }\n      \n      this.isPlaying = false;\n      this.playPromise = null;\n      this.isVideoPlayingChange.emit(false);\n      \n      if (err.name === 'AbortError') {\n        console.log('[Simulator] playVideoInternal: aborted (expected during pause)');\n        // AbortError is expected, reset to paused state instead of error\n        if (videoAfterError && videoAfterError === video) {\n          this.playerState = 'paused';\n        }\n      } else {\n        console.error('[Simulator] playVideoInternal: failed', err);\n      }\n    }\n  }\n\n  /**\n   * Pause video - public method (enqueues operation)\n   */\n  private pauseVideo(): void {\n    this.enqueueOperation(() => this.pauseVideoInternal());\n  }\n\n  /**\n   * Pause video internal implementation (no enqueue - called from queue)\n   */\n  private async pauseVideoInternal(): Promise<void> {\n    const video = this.vplayer?.nativeElement;\n    if (!video) return;\n\n    // Already paused - skip\n    if (this.playerState === 'paused') {\n      console.log('[Simulator] pauseVideoInternal: already paused, skipping');\n      return;\n    }\n\n    console.log('[Simulator] pauseVideoInternal: pausing', {\n      playerState: this.playerState,\n      currentTime: video.currentTime\n    });\n\n      video.pause();\n    \n    this.playerState = 'paused';\n    this.isPlaying = false;\n      this.playPromise = null;\n    this.videoPause.emit();\n    this.isVideoPlayingChange.emit(false);\n    \n    console.log('[Simulator] pauseVideoInternal: paused successfully');\n  }\n\n  /**\n   * Enqueue media operation to prevent race conditions\n   * This is the CRITICAL fix for FFmpegDemuxer errors and play promise interruptions\n   * All media operations (play, pause, seek, switch) go through this queue\n   */\n  private enqueueOperation(operation: () => Promise<void>): void {\n    this.operationQueue = this.operationQueue\n      .then(() => operation())\n      .catch(err => {\n        console.error('[Simulator] Media operation failed:', err);\n        this.playerState = 'error';\n      });\n  }\n\n  get hasMultipleVideos(): boolean {\n    return Array.isArray(this.videoUrls) && this.videoUrls.length > 1;\n  }\n\n  /** Cumulative duration boundaries [ms]. segmentBoundaries[i] = sum of durations [0..i] */\n  get segmentBoundaries(): number[] {\n    const durations = this.videoDurations;\n    if (durations.length === 0) return [];\n    const boundaries: number[] = [];\n    let sum = 0;\n    for (const d of durations) {\n      sum += d;\n      boundaries.push(sum);\n    }\n    return boundaries;\n  }\n\n  /** Total duration across all segments in ms */\n  get totalDuration(): number {\n    const durations = this.videoDurations;\n    if (durations.length === 0) return 0;\n    return durations.reduce((a, b) => a + b, 0);\n  }\n\n  /** Video durations in ms (detected or from single video element).\n   *\n   *  Merges two independent probes: `detectedVideoDurations` (off-DOM temp videos)\n   *  and `libraryVideoDurations` (the rendered library thumbnails). Either can\n   *  resolve first depending on browser quirks with WebM/Infinity-duration clips;\n   *  we take the first finite value per index. */\n  private get videoDurations(): number[] {\n    if (this.hasMultipleVideos) {\n      const urls = this.videoUrls || [];\n      if (urls.length === 0) return [];\n      const merged: number[] = new Array(urls.length);\n      for (let i = 0; i < urls.length; i++) {\n        const detected = this.detectedVideoDurations[i];\n        if (typeof detected === 'number' && isFinite(detected) && detected > 0) {\n          merged[i] = detected;\n          continue;\n        }\n        const fromLibraryS = this.libraryVideoDurations.get(i);\n        if (typeof fromLibraryS === 'number' && isFinite(fromLibraryS) && fromLibraryS > 0) {\n          merged[i] = fromLibraryS * 1000;\n          continue;\n        }\n        // Unknown yet — leave the slot as a hole so callers can detect partial state.\n      }\n      return merged;\n    }\n    const video = this.vplayer?.nativeElement;\n    if (video?.duration && isFinite(video.duration)) {\n      return [video.duration * 1000];\n    }\n    return [];\n  }\n\n  get currentVideoMarkers(): StepMarker[] {\n    let markersToProcess: StepMarker[];\n    \n    if (!this.hasMultipleVideos) {\n      markersToProcess = this.stepMarkers;\n    } else {\n      const boundaries = this.getVideoDurationBoundaries();\n      if (boundaries.length === 0 || this.currentVideoIndex >= boundaries.length) {\n        markersToProcess = this.stepMarkers;\n      } else {\n        const currentBoundary = boundaries[this.currentVideoIndex];\n        \n        markersToProcess = this.stepMarkers\n          .filter(marker => {\n            return marker.cumulativeDuration >= currentBoundary.start && \n                   marker.cumulativeDuration < currentBoundary.end;\n          })\n          .map(marker => this.adjustChildStepsDuration(\n            marker, \n            currentBoundary.start, \n            currentBoundary.start, \n            currentBoundary.end\n          ));\n      }\n    }\n    \n    return this.flattenMarkers(markersToProcess);\n  }\n\n  private adjustChildStepsDuration(marker: StepMarker, adjustment: number, videoStart: number, videoEnd: number): StepMarker {\n    const adjustedMarker: StepMarker = {\n      ...marker,\n      cumulativeDuration: marker.cumulativeDuration - adjustment\n    };\n    \n    if (marker.childSteps && marker.childSteps.length > 0) {\n      adjustedMarker.childSteps = marker.childSteps\n        .filter(child => child.cumulativeDuration >= videoStart && child.cumulativeDuration < videoEnd)\n        .map(child => {\n          const adjustedChild: StepMarker = {\n            ...child,\n            cumulativeDuration: child.cumulativeDuration - adjustment\n          };\n          if (child.childSteps && child.childSteps.length > 0) {\n            adjustedChild.childSteps = child.childSteps\n              .filter(nestedChild => nestedChild.cumulativeDuration >= videoStart && nestedChild.cumulativeDuration < videoEnd)\n              .map(nestedChild => this.adjustChildStepsDuration(nestedChild, adjustment, videoStart, videoEnd));\n          }\n          return adjustedChild;\n        });\n    }\n    \n    return adjustedMarker;\n  }\n\n  getStepLeftPosition(step: StepMarker): number {\n    const video = this.vplayer?.nativeElement;\n    if (!video?.duration) return 0;\n    const durationMs = video.duration * 1000;\n    return (step.cumulativeDuration / durationMs) * 100;\n  }\n\n  /** Full-video markers: every marker, flattened, laid out on the global timeline.\n   * `stepMarkers` is already in global coordinates — `currentVideoMarkers` does the\n   * inverse (filters + adjusts per-clip); here we just flatten the original list. */\n  get fullVideoMarkers(): StepMarker[] {\n    return this.flattenMarkers(this.stepMarkers || []);\n  }\n\n  getGlobalFullStepLeftPosition(step: StepMarker): number {\n    const total = this.totalDuration;\n    if (!total) return 0;\n    return Math.min(100, Math.max(0, (step.cumulativeDuration / total) * 100));\n  }\n\n  /** Cumulative elapsed ms on the global timeline (prior clip durations + current local time). */\n  get globalCurrentTimeMs(): number {\n    const local = (this.vplayer?.nativeElement?.currentTime ?? 0) * 1000;\n    const boundaries = this.segmentBoundaries;\n    const priorEnd = this.currentVideoIndex > 0 ? (boundaries[this.currentVideoIndex - 1] ?? 0) : 0;\n    return priorEnd + local;\n  }\n\n  /** 0-100 position on the global timeline, driven by timeupdate. */\n  get globalProgress(): number {\n    const total = this.totalDuration;\n    if (!total) return 0;\n    return Math.min(100, Math.max(0, (this.globalCurrentTimeMs / total) * 100));\n  }\n\n  /** While dragging in full mode, the scrubber reads the override; otherwise globalProgress. */\n  get globalScrubberPercent(): number {\n    return this.dragging ? this.globalDragProgress : this.globalProgress;\n  }\n\n  getStepColor(step: StepMarker): string {\n    return step.level === 1 ? '#000000' : '#6366F1';\n  }\n\n  getStepResultColor(step: StepMarker): string {\n    return this.getGlobalMarkerResultColor(step.result);\n  }\n\n  getGlobalMarkerColor(level?: number): string {\n    return level === 1 ? '#000000' : '#FFA500';\n  }\n\n  getGlobalMarkerResultColor(result: StepMarker['result']): string {\n    switch (result) {\n      case 'SUCCESS':\n        return '#12B76A';\n      case 'FAILURE':\n        return '#B91C1C';\n      case 'ABORTED':\n        return '#F79009';\n      case 'SKIPPED':\n        return '#667085';\n      default:\n        return '#6366F1';\n    }\n  }\n\n  onMarkerClick(event: MouseEvent, marker: StepMarker): void {\n    event.stopPropagation();\n    event.preventDefault();\n    const video = this.vplayer?.nativeElement;\n    if (!video?.duration) return;\n    const targetTimeMs = marker.cumulativeDuration;\n    this.enqueueOperation(async () => {\n      await this.seekToTimeInternal(targetTimeMs);\n      if (marker.testStepId != null) {\n        this.hitMarkers.add(marker.testStepId);\n        this.markerHit.emit(marker);\n      }\n    });\n  }\n\n  get currentVideoUrl(): string {\n    if (Array.isArray(this.videoUrls) && this.videoUrls.length > 0) {\n      const idx = Math.min(Math.max(this.currentVideoIndex, 0), this.videoUrls.length - 1);\n      return this.videoUrls[idx];\n    }\n    return this.videoUrl;\n  }\n\n  /**\n   * Reset video state - public method (enqueues operation)\n   */\n  private resetVideoState(): void {\n    this.enqueueOperation(() => this.resetVideoStateInternal());\n  }\n\n  /**\n   * Reset video state internal implementation (no enqueue - called from queue)\n   */\n  private async resetVideoStateInternal(): Promise<void> {\n    const video = this.vplayer?.nativeElement;\n    if (!video) return;\n\n    console.log('[Simulator] resetVideoStateInternal: resetting');\n\n    video.pause();\n    video.currentTime = 0;\n\n    this.playerState = 'paused';\n    this.isPlaying = false;\n    this.progress = 0;\n    this.playPromise = null;\n    this.hitMarkers.clear();\n    this.lastSetDuration = -1;\n    this.isVideoPlayingChange.emit(false);\n\n    console.log('[Simulator] resetVideoStateInternal: complete');\n  }\n\n  prevVideo(): void {\n    if (!this.hasMultipleVideos) return;\n    if (this.currentVideoIndex > 0) {\n      this.enqueueOperation(() => this.switchToVideoAndResetInternal(this.currentVideoIndex - 1));\n    }\n  }\n\n  nextVideo(): void {\n    if (!this.hasMultipleVideos) return;\n    if (this.videoUrls && this.currentVideoIndex < this.videoUrls.length - 1) {\n      this.enqueueOperation(() => this.switchToVideoAndResetInternal(this.currentVideoIndex + 1));\n    }\n  }\n\n  onTimelineClick(event: MouseEvent): void {\n    if (!this.timelineBar?.nativeElement) return;\n\n    const rect = this.timelineBar.nativeElement.getBoundingClientRect();\n    const clickX = event.clientX - rect.left;\n    const percent = Math.max(0, Math.min(1, clickX / rect.width));\n\n    if (this.isVideoFullMode) {\n      const total = this.totalDuration;\n      if (!total) return;\n      const shouldResumePlaying = this.isPlaying;\n      const targetGlobalMs = percent * total;\n      this.switchToVideoAndSeek(targetGlobalMs);\n      if (shouldResumePlaying) {\n        this.enqueueOperation(async () => {\n          await new Promise(resolve => setTimeout(resolve, 120));\n          await this.playVideoInternal();\n        });\n      }\n      return;\n    }\n\n    if (!this.vplayer?.nativeElement) return;\n    const video = this.vplayer.nativeElement;\n    if (!video.duration || !isFinite(video.duration)) return;\n\n    const targetTimeMs = percent * video.duration * 1000;\n    const shouldResumePlaying = this.isPlaying;\n\n    console.log('[Simulator] onTimelineClick', {\n      percent,\n      targetTimeMs,\n      shouldResumePlaying\n    });\n    \n    this.enqueueOperation(async () => {\n      await this.seekToTimeInternal(targetTimeMs);\n      if (shouldResumePlaying) {\n        await new Promise(resolve => setTimeout(resolve, 100));\n        await this.playVideoInternal();\n      }\n    });\n  }\n\n  startDrag(event: MouseEvent): void {\n    event.preventDefault();\n    this.dragging = true;\n    \n    // CRITICAL: Capture playing state BEFORE pausing\n    // Use both isPlaying flag and playerState for reliability\n    this.wasPlayingBeforeDrag = this.isPlaying || this.playerState === 'playing';\n    \n    console.log('[Simulator] startDrag', {\n      clientX: event.clientX,\n      playerState: this.playerState,\n      isPlaying: this.isPlaying,\n      wasPlayingBeforeDrag: this.wasPlayingBeforeDrag\n    });\n    \n    // Pause video during drag to avoid conflicts\n    if (this.isPlaying || this.playerState === 'playing') {\n      this.pauseVideo();\n    }\n    \n    this.addDragListeners();\n  }\n\n  onDrag(event: MouseEvent): void {\n    if (!this.dragging || !this.timelineBar?.nativeElement) return;\n\n    const rect = this.timelineBar.nativeElement.getBoundingClientRect();\n    const x = event.clientX - rect.left;\n    const percent = Math.max(0, Math.min(x / rect.width, 1));\n    if (this.isVideoFullMode) {\n      this.globalDragProgress = percent * 100;\n    } else {\n      this.progress = percent * 100; // Per-clip timeline position\n    }\n  }\n\n  stopDrag(): void {\n    if (!this.dragging) return;\n\n    this.dragging = false;\n    this.removeDragListeners();\n\n    const shouldResumePlaying = this.wasPlayingBeforeDrag;\n\n    console.log('[Simulator] stopDrag: drag ended', {\n      progress: this.progress,\n      wasPlayingBeforeDrag: this.wasPlayingBeforeDrag,\n      shouldResumePlaying: shouldResumePlaying,\n      currentPlayerState: this.playerState\n    });\n\n    if (this.isVideoFullMode) {\n      const total = this.totalDuration;\n      if (!total) return;\n      const targetGlobalMs = (this.globalDragProgress / 100) * total;\n      this.switchToVideoAndSeek(targetGlobalMs);\n      if (shouldResumePlaying) {\n        this.enqueueOperation(async () => {\n          await new Promise(resolve => setTimeout(resolve, 200));\n          await this.playVideoInternal();\n        });\n      }\n      return;\n    }\n\n    const video = this.vplayer?.nativeElement;\n    if (!video || !video.duration || !isFinite(video.duration)) return;\n\n    const targetTimeMs = (this.progress / 100) * video.duration * 1000;\n\n    this.enqueueOperation(async () => {\n      await this.seekToTimeInternal(targetTimeMs);\n      \n      if (shouldResumePlaying) {\n        console.log('[Simulator] stopDrag: resuming playback after seek', {\n          targetTimeMs,\n          playerState: this.playerState\n        });\n        \n        // Wait a bit longer to ensure seek is fully complete\n        await new Promise(resolve => setTimeout(resolve, 150));\n        \n        // Verify state is 'paused' after seek (seekToTimeInternal sets it to 'paused')\n        // If state is still 'seeking', wait a bit more\n        if (this.playerState === 'seeking') {\n          console.log('[Simulator] stopDrag: seek still in progress, waiting more');\n          await new Promise(resolve => setTimeout(resolve, 100));\n        }\n        \n        // Now resume playback (state should be 'paused' at this point)\n        if (this.playerState === 'paused') {\n          await this.playVideoInternal();\n          console.log('[Simulator] stopDrag: playback resumed successfully', {\n            playerState: this.playerState,\n            isPlaying: this.isPlaying\n          });\n        } else {\n          console.warn('[Simulator] stopDrag: unexpected state after seek, attempting to resume anyway', {\n            playerState: this.playerState\n          });\n          // Try to resume anyway - better to try than to leave it stuck\n          await this.playVideoInternal();\n        }\n      } else {\n        console.log('[Simulator] stopDrag: video was paused, not resuming');\n      }\n    });\n  }\n\n  private addDragListeners(): void {\n    this.removeDragListeners();\n\n    this.dragMouseMoveHandler = (e: MouseEvent) => {\n      this.onDrag(e);\n    };\n\n    this.dragMouseUpHandler = () => {\n      this.stopDrag();\n    };\n\n    document.addEventListener('mousemove', this.dragMouseMoveHandler);\n    document.addEventListener('mouseup', this.dragMouseUpHandler);\n  }\n\n  private removeDragListeners(): void {\n    if (this.dragMouseMoveHandler) {\n      document.removeEventListener('mousemove', this.dragMouseMoveHandler);\n      this.dragMouseMoveHandler = null;\n    }\n\n    if (this.dragMouseUpHandler) {\n      document.removeEventListener('mouseup', this.dragMouseUpHandler);\n      this.dragMouseUpHandler = null;\n    }\n  }\n\n  onVideoMetadataLoaded(): void {\n    console.log('[Simulator] onVideoMetadataLoaded');\n    // Ensure playback speed is consistent across all videos\n    this.applyCurrentPlaybackRate();\n    this.attachVideoListeners();\n  }\n  \n  onVideoCanPlay(): void {\n    console.log('[Simulator] onVideoCanPlay');\n    // Ensure playback speed is consistent across all videos\n    this.applyCurrentPlaybackRate();\n    this.attachVideoListeners();\n\n    // Consume any pending recovery state queued by onVideoError(): seek back to\n    // where playback errored and auto-resume if we were playing at the time.\n    if (this.pendingRecoverySeekSec != null) {\n      const seekSec = this.pendingRecoverySeekSec;\n      const shouldPlay = this.pendingRecoveryPlay;\n      this.pendingRecoverySeekSec = null;\n      this.pendingRecoveryPlay = false;\n\n      const video = this.vplayer?.nativeElement;\n      if (video && isFinite(video.duration)) {\n        try {\n          video.currentTime = Math.max(0, Math.min(seekSec, video.duration));\n        } catch (_) { /* element may not be seekable yet; harmless */ }\n      }\n      if (shouldPlay) {\n        this.enqueueOperation(async () => {\n          await new Promise(resolve => setTimeout(resolve, 80));\n          await this.playVideoInternal();\n        });\n      }\n    }\n  }\n\n  /** Native error-event handler for the main <video> element. The Chrome media\n   * stack occasionally throws \"PipelineStatus::PIPELINE_ERROR_READ: FFmpegDemuxer:\n   * data source error\" during playback after a brief network blip or a burst of\n   * fast user actions; once that happens the element becomes unresponsive to\n   * play/pause/seek. We recover by unmounting+remounting the <video> via *ngIf\n   * — the same mechanism that makes the Screenshots↔Video tab-switch workaround\n   * work today — then restore the pre-error playhead and resume playback. */\n  onVideoError(): void {\n    const video = this.vplayer?.nativeElement;\n    const err = video?.error;\n\n    console.error('[Simulator] onVideoError — triggering auto-recovery', {\n      playerState: this.playerState,\n      errorCode: err?.code,\n      errorMessage: err?.message,\n      networkState: video?.networkState,\n      readyState: video?.readyState,\n      currentVideoIndex: this.currentVideoIndex,\n      currentVideoUrl: this.currentVideoUrl,\n      attempts: this.recoveryAttempts\n    });\n\n    // Bound the retry budget to a rolling window so a persistently broken\n    // source (404, unsupported codec, …) doesn't flap forever.\n    const now = Date.now();\n    if (now - this.recoveryAttemptWindowStart > this.RECOVERY_WINDOW_MS) {\n      this.recoveryAttempts = 0;\n      this.recoveryAttemptWindowStart = now;\n    }\n    this.recoveryAttempts++;\n    if (this.recoveryAttempts > this.MAX_RECOVERY_ATTEMPTS) {\n      console.error('[Simulator] onVideoError: exceeded recovery attempts, giving up');\n      this.playerState = 'error';\n      this.isPlaying = false;\n      this.isVideoPlayingChange.emit(false);\n      return;\n    }\n\n    // Capture what we need to restore after the remount.\n    this.pendingRecoverySeekSec = (video && isFinite(video.currentTime)) ? video.currentTime : 0;\n    this.pendingRecoveryPlay = this.isPlaying;\n\n    // Put the state machine into 'error' so onVideoElementReady resets it\n    // back to 'idle' when the remounted element arrives.\n    this.playerState = 'error';\n    this.isPlaying = false;\n    this.playPromise = null;\n    this.isVideoPlayingChange.emit(false);\n\n    // Unmount → remount. Brief 100ms gap mirrors the tab-switch workaround.\n    this.videoRefreshing = true;\n    setTimeout(() => {\n      this.videoRefreshing = false;\n      this.cdr.markForCheck();\n    }, 100);\n  }\n\n  onVideoEnded(): void {\n    this.isPlaying = false;\n    this.playerState = 'paused';\n    this.videoPause.emit();\n    this.isVideoPlayingChange.emit(false);\n    \n    // Switch to next video and auto-play it\n    if (this.hasMultipleVideos && this.videoUrls && this.currentVideoIndex < this.videoUrls.length - 1) {\n      const nextIndex = this.currentVideoIndex + 1;\n\n      this.enqueueOperation(async () => {\n        await this.switchToVideoAndResetInternal(nextIndex);\n\n        if (this.vplayer?.nativeElement && this.currentVideoUrl) {\n          await this.playVideoInternal();\n        }\n      });\n    }\n  }\n\n  private attachVideoListeners(): void {\n    if (this.videoEventListenerCleanup) {\n      this.videoEventListenerCleanup();\n      this.videoEventListenerCleanup = null;\n    }\n\n    setTimeout(() => {\n      const video = this.vplayer?.nativeElement;\n      if (!video) return;\n\n      let lastUpdate = 0;\n      const handler = () => {\n        const now = Date.now();\n        if (now - lastUpdate < 100) return;\n\n        lastUpdate = now;\n        const currentMs = video.currentTime * 1000;\n\n        // Safety net: if `isPlaying` drifted from the element's actual state\n        // (e.g. a queued op set it false but playback never actually stopped,\n        // or the play promise hasn't resolved yet but `play` fired), realign\n        // here so the toolbar Play/Pause icon doesn't get stuck on the wrong\n        // glyph while playback continues.\n        const videoIsPlaying = !video.paused;\n        if (this.isPlaying !== videoIsPlaying) {\n          this.isPlaying = videoIsPlaying;\n        }\n\n        if (!this.dragging && this.playerState !== 'switching') {\n          // Per-video progress (0-100% of current video)\n          const durationMs = video.duration * 1000;\n          if (durationMs > 0) {\n            this.progress = Math.min(100, Math.max(0, (currentMs / durationMs) * 100));\n          }\n\n          // Emit cumulative time for parent (step highlighting)\n          const segmentStart = this.currentVideoIndex === 0 ? 0 : (this.segmentBoundaries[this.currentVideoIndex - 1] ?? 0);\n          this.videoTimeUpdate.emit(segmentStart + currentMs);\n\n          this.checkMarkerHit(segmentStart + currentMs);\n          this.maybePreloadNextSegment();\n\n          // Auto-scroll the library row so the currently-playing clip stays visible.\n          // Only while playing; when paused we leave the row where the user left it.\n          if (this.isPlaying && this.currentVideoIndex !== this.lastScrolledClipIndex) {\n            this.lastScrolledClipIndex = this.currentVideoIndex;\n            this.scrollCurrentClipIntoView();\n          }\n        }\n      };\n\n      // Mirror the <video> element's native state into `isPlaying`. The element\n      // is the source of truth — the existing playVideoInternal / pauseVideoInternal\n      // paths set `isPlaying` after their async work, but other paths (element\n      // remounts via onVideoElementReady, dropped queue ops, etc.) can leave it\n      // out of sync with reality. These listeners make the field self-correcting.\n      const onPlay = () => { this.isPlaying = true; };\n      const onPause = () => { this.isPlaying = false; };\n\n      video.addEventListener('timeupdate', handler);\n      video.addEventListener('play', onPlay);\n      video.addEventListener('playing', onPlay);\n      video.addEventListener('pause', onPause);\n\n      this.videoEventListenerCleanup = () => {\n        video.removeEventListener('timeupdate', handler);\n        video.removeEventListener('play', onPlay);\n        video.removeEventListener('playing', onPlay);\n        video.removeEventListener('pause', onPause);\n      };\n    }, 100);\n  }\n\n  private schedulePreloadAllSegments(videoUrls: string[]): void {\n    if (!videoUrls || videoUrls.length === 0) return;\n    this.cancelPreloadAllSegments();\n    setTimeout(() => this.preloadAllSegments(videoUrls), 500);\n  }\n\n  private cancelPreloadAllSegments(): void {\n    if (this.preloadAllVideoElement) {\n      this.preloadAllVideoElement.src = '';\n      this.preloadAllVideoElement.remove();\n      this.preloadAllVideoElement = null;\n    }\n  }\n\n  /**\n   * Preload all video URLs in sequence (first, then second, ...) so they are cached.\n   * When user jumps to any segment, that video is likely already loaded.\n   */\n  private preloadAllSegments(videoUrls: string[]): void {\n    if (!videoUrls || videoUrls.length === 0) return;\n    this.cancelPreloadAllSegments();\n    const video = document.createElement('video');\n    video.preload = 'auto';\n    video.muted = true;\n    video.playsInline = true;\n    video.style.display = 'none';\n    document.body.appendChild(video);\n    this.preloadAllVideoElement = video;\n\n    let index = 0;\n    const loadNext = (): void => {\n      if (this.preloadAllVideoElement !== video || index >= videoUrls.length) {\n        video.remove();\n        if (this.preloadAllVideoElement === video) this.preloadAllVideoElement = null;\n        return;\n      }\n      const url = videoUrls[index];\n      video.src = url;\n      index += 1;\n      const onDone = (): void => {\n        clearTimeout(timeoutId);\n        video.removeEventListener('loadeddata', onDone);\n        video.removeEventListener('error', onDone);\n        loadNext();\n      };\n      video.addEventListener('loadeddata', onDone, { once: true });\n      video.addEventListener('error', onDone, { once: true });\n      const timeoutId = setTimeout(() => onDone(), 15000);\n    };\n    loadNext();\n  }\n\n  /** Preload next segment when ~5-10 seconds from ending to minimize switching delay */\n  private maybePreloadNextSegment(): void {\n    if (!this.hasMultipleVideos || !this.videoUrls || this.currentVideoIndex >= this.videoUrls.length - 1) {\n      return;\n    }\n    const video = this.vplayer?.nativeElement;\n    if (!video?.duration) return;\n    const timeLeftInSegment = (video.duration - video.currentTime) * 1000; // ms\n    if (timeLeftInSegment > 10000 || timeLeftInSegment < 5000) return; // Preload when 5-10s from end\n    const nextUrl = this.videoUrls[this.currentVideoIndex + 1];\n    if (!nextUrl) return;\n    if (this.preloadVideoElement?.src === nextUrl) return; // Already preloading\n    this.preloadNextSegment(nextUrl);\n  }\n\n  private preloadNextSegment(url: string): void {\n    if (this.preloadVideoElement) {\n      this.preloadVideoElement.src = '';\n      this.preloadVideoElement.remove();\n      this.preloadVideoElement = null;\n    }\n    const video = document.createElement('video');\n    video.preload = 'auto';\n    video.src = url;\n    video.style.display = 'none';\n    document.body.appendChild(video);\n    this.preloadVideoElement = video;\n    video.addEventListener('loadeddata', () => {\n      video.remove();\n      if (this.preloadVideoElement === video) this.preloadVideoElement = null;\n    }, { once: true });\n  }\n\n  /**\n   * Detect actual video durations by loading video metadata.\n   *\n   * Browser-recorded WebM clips frequently report `duration === Infinity` on the first\n   * `loadedmetadata` firing; the real duration only resolves after seeking past the end\n   * (same trick `onLibraryClipMetadataLoaded` uses for the library thumbnails). We mirror\n   * that probe here so `detectedVideoDurations` ends up dense and `totalDuration` is\n   * correct in Full Video mode.\n   *\n   * Preserves previously-detected entries on re-invocation (append-only videoUrls\n   * changes shouldn't wipe finished detections from earlier clips).\n   */\n  private detectVideoDurations(videoUrls: string[]): void {\n    if (!videoUrls || videoUrls.length === 0) {\n      this.detectedVideoDurations = [];\n      return;\n    }\n\n    // Preserve previously-detected values for existing indexes; trim/pad to current length.\n    const previous = this.detectedVideoDurations.slice(0, videoUrls.length);\n    this.detectedVideoDurations = previous;\n\n    videoUrls.forEach((url, index) => {\n      const existing = this.detectedVideoDurations[index];\n      if (typeof existing === 'number' && isFinite(existing) && existing > 0) {\n        return; // already resolved for this URL position\n      }\n\n      const tempVideo = document.createElement('video');\n      tempVideo.preload = 'metadata';\n      tempVideo.muted = true;\n      (tempVideo as any).playsInline = true;\n      // Chrome ignores `currentTime = MAX_SAFE_INTEGER` on a detached element, so the\n      // `durationchange` event never fires for Infinity-duration WebM clips. Attach\n      // off-screen (1×1 invisible) so the seek probe actually resolves, matching\n      // the library thumbnails' behavior.\n      tempVideo.style.position = 'fixed';\n      tempVideo.style.width = '1px';\n      tempVideo.style.height = '1px';\n      tempVideo.style.opacity = '0';\n      tempVideo.style.pointerEvents = 'none';\n      tempVideo.style.left = '-9999px';\n      tempVideo.style.top = '-9999px';\n      document.body.appendChild(tempVideo);\n      let probed = false;\n      let settled = false;\n\n      const cleanup = () => {\n        tempVideo.removeEventListener('loadedmetadata', onMetadataOrChange);\n        tempVideo.removeEventListener('durationchange', onMetadataOrChange);\n        tempVideo.removeEventListener('error', onError);\n        tempVideo.src = '';\n        tempVideo.remove();\n      };\n\n      const storeIfValid = (d: number): boolean => {\n        if (typeof d === 'number' && isFinite(d) && d > 0) {\n          this.detectedVideoDurations[index] = d * 1000;\n          this.cdr.markForCheck();\n          return true;\n        }\n        return false;\n      };\n\n      const onMetadataOrChange = () => {\n        if (settled) return;\n        const d = tempVideo.duration;\n        if (d === Infinity && !probed) {\n          // WebM with unknown duration: force the browser to resolve by seeking to the\n          // end. The subsequent `durationchange` event reports the real value.\n          probed = true;\n          try {\n            tempVideo.currentTime = Number.MAX_SAFE_INTEGER;\n          } catch (_) { /* some browsers throw before metadata is ready */ }\n          return;\n        }\n        if (storeIfValid(d)) {\n          settled = true;\n          cleanup();\n        }\n      };\n\n      const onError = () => {\n        if (settled) return;\n        settled = true;\n        console.warn(`[Simulator] Failed to load metadata for video ${index + 1}`);\n        this.detectedVideoDurations[index] = 0;\n        cleanup();\n      };\n\n      tempVideo.addEventListener('loadedmetadata', onMetadataOrChange);\n      tempVideo.addEventListener('durationchange', onMetadataOrChange);\n      tempVideo.addEventListener('error', onError);\n      tempVideo.src = url;\n    });\n  }\n\n  /**\n   * Get cumulative duration boundaries for each video\n   * Returns an array where each element is [startDuration, endDuration] for that video\n   * Uses detected video durations if available, otherwise falls back to videoDurations input\n   */\n  private getVideoDurationBoundaries(): Array<{ start: number; end: number }> {\n    if (!this.hasMultipleVideos) {\n      return [];\n    }\n    \n    // Use detected durations if available, otherwise use provided durations\n    const durations = this.detectedVideoDurations.length > 0 \n      ? this.detectedVideoDurations \n      : [];\n    \n    if (durations.length === 0) {\n      return [];\n    }\n    \n    const boundaries: Array<{ start: number; end: number }> = [];\n    let cumulativeStart = 0;\n    \n    for (const duration of durations) {\n      boundaries.push({\n        start: cumulativeStart,\n        end: cumulativeStart + duration\n      });\n      cumulativeStart += duration;\n    }\n    \n    return boundaries;\n  }\n\n  /**\n   * Flatten all markers recursively including childSteps\n   */\n  private flattenMarkers(markers: StepMarker[]): StepMarker[] {\n    const flattened: StepMarker[] = [];\n    \n    const flattenRecursive = (markers: StepMarker[]) => {\n      markers.forEach(marker => {\n        // Add the marker itself\n        flattened.push(marker);\n        \n        // Recursively add child markers\n        if (marker.childSteps && marker.childSteps.length > 0) {\n          flattenRecursive(marker.childSteps);\n        }\n      });\n    };\n    \n    flattenRecursive(markers);\n    return flattened;\n  }\n\n  private checkMarkerHit(globalTimeMs: number): void {\n    if (!this.isPlaying || this.dragging) return;\n    \n    // Check all markers (including nested ones) for a match\n    const allMarkers = this.flattenMarkers(this.stepMarkers);\n    const tolerance = 200; // 200ms tolerance for matching\n    \n    for (const marker of allMarkers) {\n      // Skip if marker doesn't have testStepId\n      if (!marker.testStepId) continue;\n      \n      // Skip if already hit\n      if (this.hitMarkers.has(marker.testStepId)) continue;\n      \n      // Check if current time matches marker time (within tolerance)\n      const timeDifference = Math.abs(globalTimeMs - marker.cumulativeDuration);\n      if (timeDifference <= tolerance) {\n        // Mark as hit and emit event\n        this.hitMarkers.add(marker.testStepId);\n        this.markerHit.emit(marker);\n        break; // Only emit one marker per check\n      }\n    }\n  }\n\n  toggleFullScreen(): void {\n    const wasPlaying = this.isPlaying;\n    const currentTime = this.vplayer?.nativeElement?.currentTime || 0;\n    \n    // Pause video before fullscreen transition to avoid state issues\n    if (wasPlaying) {\n      this.pauseVideo();\n    }\n    \n    // Toggle fullscreen\n    this.isFullScreen = !this.isFullScreen;\n    \n    // Reset player state to allow re-initialization after DOM update\n    // The state might be stuck in 'loading' or 'error' after fullscreen transition\n    if (this.playerState === 'loading' || this.playerState === 'error') {\n      this.playerState = 'idle';\n    }\n    \n    // Wait for Angular to update the DOM, then re-initialize video\n    setTimeout(() => {\n      const video = this.vplayer?.nativeElement;\n      if (video) {\n        // Restore video position if it was set\n        if (currentTime > 0 && video.duration > currentTime) {\n          video.currentTime = currentTime;\n        }\n        \n        // Re-apply playback rate\n        this.applyCurrentPlaybackRate();\n        \n        // Re-attach listeners\n        this.attachVideoListeners();\n        \n        // Reset state to 'paused' (ready to play)\n        this.playerState = 'paused';\n        this.isPlaying = false;\n        \n        console.log('[Simulator] toggleFullScreen: video re-initialized', {\n          isFullScreen: this.isFullScreen,\n          currentTime: video.currentTime,\n          playerState: this.playerState\n        });\n      } else {\n        console.warn('[Simulator] toggleFullScreen: video element not found after transition');\n        // Try again after a bit more time\n        setTimeout(() => {\n          const videoRetry = this.vplayer?.nativeElement;\n          if (videoRetry) {\n            this.applyCurrentPlaybackRate();\n            this.attachVideoListeners();\n            this.playerState = 'paused';\n            this.isPlaying = false;\n          }\n        }, 100);\n      }\n    }, 100);\n  }\n\n  onSegmentChange(value: string): void {\n    this.currentView = value;\n    if (this.currentView !== 'video') {\n      this.pauseVideo();\n      this.progress = 0;\n    } else {\n      this.enqueueOperation(async () => {\n        await this.resetVideoStateInternal();\n        if (this.hasMultipleVideos && this.videoUrls) {\n          this.currentVideoIndex = 0;\n          await this.switchToVideoAndSeekInternal(0);\n        }\n      });\n    }\n  }\n\n  formatTime(seconds: number): string {\n    if (!seconds || isNaN(seconds)) return '00:00';\n    \n    const totalSeconds = Math.floor(seconds);\n    const hours = Math.floor(totalSeconds / 3600);\n    const mins = Math.floor((totalSeconds % 3600) / 60);\n    const secs = totalSeconds % 60;\n    \n    // If hours > 0, show HH:MM:SS format, otherwise show MM:SS format\n    if (hours > 0) {\n      return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n    }\n    \n    return `${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n  }\n\n  captureVideo(): void {\n    if (!this.showCaptureVideo || !this.isLive || this.isCapturingVideo) return;\n    this.captureVideoRequested.emit();\n  }\n\n  // ─── Clips row drag-to-scroll (mouse equivalent of touch-swipe) ──────────────\n  // Design: tracking starts on mousedown but we DON'T flip to the \"dragging\" visual state\n  // or block clicks until the pointer crosses a 5px threshold. That way a plain click\n  // (no movement) registers normally on the card / download button with the usual cursor.\n  onClipsMouseDown(event: MouseEvent, scroller: HTMLElement): void {\n    if (event.button !== 0 || !scroller) return;\n    this.clipsDragState.dragging = true;\n    this.clipsDragState.didMove = false;\n    this.clipsDragState.startX = event.clientX;\n    this.clipsDragState.startScrollLeft = scroller.scrollLeft;\n  }\n\n  onClipsMouseMove(event: MouseEvent, scroller: HTMLElement): void {\n    if (!this.clipsDragState.dragging || !scroller) return;\n    const dx = event.clientX - this.clipsDragState.startX;\n    if (!this.clipsDragState.didMove && Math.abs(dx) > 5) {\n      this.clipsDragState.didMove = true;\n      this.clipsDragActive = true; // flip the grabbing cursor now that it's a real drag\n    }\n    if (this.clipsDragState.didMove) {\n      scroller.scrollLeft = this.clipsDragState.startScrollLeft - dx;\n    }\n  }\n\n  onClipsMouseUp(_event: MouseEvent): void {\n    if (!this.clipsDragState.dragging) return;\n    this.clipsDragState.dragging = false;\n    this.clipsDragActive = false;\n    if (this.clipsDragState.didMove) {\n      // Keep didMove=true briefly so the synthetic click fires and is ignored, then reset.\n      setTimeout(() => { this.clipsDragState.didMove = false; }, 0);\n    }\n  }\n\n  onClipsMouseLeave(event: MouseEvent): void {\n    this.onClipsMouseUp(event);\n  }\n\n  /** Click handler on a Video Library card — switches the main player to that clip and auto-plays.\n   * Selecting a *different* clip also collapses the library so the newly-playing video is unobstructed;\n   * re-clicking the active clip just toggles play/pause and keeps the drawer state.\n   * Ignored when the click originated from a horizontal drag-scroll. */\n  selectLibraryClip(index: number): void {\n    if (this.clipsDragState.didMove) return;\n    if (!Array.isArray(this.videoUrls) || index < 0 || index >= this.videoUrls.length) return;\n    this.newVideoIndexes.delete(index);\n\n    // Full-mode: seek the global timeline to this clip's start. Keep full mode and\n    // the library panel open so the user can see the highlight follow along.\n    // If the clicked card is the one already playing under the hood, treat the\n    // click as a play/pause toggle (the card's overlay icon reflects that state).\n    if (this.isVideoFullMode) {\n      if (index === this.currentVideoIndex) {\n        this.togglePlay();\n        return;\n      }\n      const boundaries = this.segmentBoundaries;\n      const targetGlobalMs = index === 0 ? 0 : (boundaries[index - 1] ?? 0);\n      const shouldResume = this.isPlaying;\n      this.switchToVideoAndSeek(targetGlobalMs);\n      if (shouldResume) {\n        this.enqueueOperation(async () => {\n          await new Promise(resolve => setTimeout(resolve, 150));\n          await this.playVideoInternal();\n        });\n      }\n      return;\n    }\n\n    if (index === this.currentVideoIndex) {\n      this.togglePlay();\n      return;\n    }\n    this.isVideoLibraryCollapsed = true;\n    this.enqueueOperation(async () => {\n      await this.switchToVideoAndResetInternal(index);\n      await this.playVideoInternal();\n    });\n  }\n\n  /** Per-card metadata handler — caches duration so the `0:42` thumbnail label can render.\n   * Bound to BOTH `loadedmetadata` and `durationchange`:\n   *   - Some MP4s (esp. short clips with moov at the end) report a wrong/partial duration\n   *     on `loadedmetadata`; Chrome later corrects it via `durationchange`. Listening to\n   *     both + keeping the max-so-far avoids stale wrong values like \"00:01\" for a 5s clip.\n   *   - For streamed MP4s that report `Infinity`, seek to the end once so Chrome fetches\n   *     the cues/trailer and fires a corrected `durationchange`. */\n  onLibraryClipMetadataLoaded(index: number, videoEl: HTMLVideoElement): void {\n    const d = videoEl?.duration;\n    if (d === Infinity && !videoEl.dataset['cqaDurationProbed']) {\n      videoEl.dataset['cqaDurationProbed'] = '1';\n      try {\n        videoEl.currentTime = Number.MAX_SAFE_INTEGER;\n      } catch (_) { /* some browsers throw before metadata; ignore */ }\n      return;\n    }\n    if (typeof d === 'number' && isFinite(d) && d > 0) {\n      const prev = this.libraryVideoDurations.get(index) || 0;\n      if (d > prev) {\n        this.libraryVideoDurations.set(index, d);\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  trackLibraryClipByIndex(index: number, url: string): string {\n    return index + ':' + (url || '');\n  }\n\n  /** Download the clip at `index`. Streams the bytes with fetch so we can show progress,\n   * then saves via a temporary blob URL so the file comes down on the same page\n   * (no new tab / window). Falls back to a direct anchor click if fetch is unavailable or fails. */\n  async downloadClip(index: number): Promise<void> {\n    if (this.clipsDragState.didMove) return;\n    const url = Array.isArray(this.videoUrls) ? this.videoUrls[index] : undefined;\n    if (!url || this.downloadingIndexes.has(index)) return;\n\n    const filename = this.deriveClipFilename(url, index);\n    this.downloadingIndexes.add(index);\n    this.downloadProgress.set(index, 0);\n    this.cdr.markForCheck();\n\n    try {\n      const response = await fetch(url, { mode: 'cors', credentials: 'omit' });\n      if (!response.ok || !response.body) {\n        throw new Error('Download failed: ' + response.status);\n      }\n      const total = Number(response.headers.get('content-length')) || 0;\n      const reader = response.body.getReader();\n      const chunks: Uint8Array[] = [];\n      let received = 0;\n\n      while (true) {\n        const { done, value } = await reader.read();\n        if (done) break;\n        if (value) {\n          chunks.push(value);\n          received += value.length;\n          if (total > 0) {\n            this.downloadProgress.set(index, Math.min(100, Math.round((received / total) * 100)));\n          }\n          this.cdr.markForCheck();\n        }\n      }\n\n      const blob = new Blob(chunks as BlobPart[], { type: 'video/webm' });\n      this.saveBlobAsDownload(blob, filename);\n    } catch (_err) {\n      // CORS block or network failure — fall back to a direct anchor click (may open in a new tab\n      // depending on the server's Content-Disposition, but at least always triggers the browser's save flow).\n      this.triggerDirectDownload(url, filename);\n    } finally {\n      this.downloadingIndexes.delete(index);\n      this.downloadProgress.delete(index);\n      this.cdr.markForCheck();\n    }\n  }\n\n  private deriveClipFilename(url: string, index: number): string {\n    try {\n      const u = new URL(url);\n      const last = (u.pathname.split('/').pop() || '').split('?')[0];\n      if (last && /\\.[a-z0-9]+$/i.test(last)) return `clip-${index + 1}-${last}`;\n    } catch (_) { /* ignore */ }\n    return `clip-${index + 1}.webm`;\n  }\n\n  private saveBlobAsDownload(blob: Blob, filename: string): void {\n    const objectUrl = URL.createObjectURL(blob);\n    try {\n      const a = document.createElement('a');\n      a.href = objectUrl;\n      a.download = filename;\n      a.rel = 'noopener';\n      document.body.appendChild(a);\n      a.click();\n      document.body.removeChild(a);\n    } finally {\n      setTimeout(() => URL.revokeObjectURL(objectUrl), 2000);\n    }\n  }\n\n  /** Circumference of the 6-radius progress ring (see clip-download-btn__ring in template). */\n  readonly downloadRingCircumference: number = 2 * Math.PI * 6;\n\n  /** stroke-dashoffset for the progress ring of clip `index`; 0 = full, circumference = empty. */\n  downloadRingDashoffset(index: number): number {\n    const pct = Math.min(100, Math.max(0, this.downloadProgress.get(index) || 0));\n    return this.downloadRingCircumference * (1 - pct / 100);\n  }\n\n  private triggerDirectDownload(url: string, filename: string): void {\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = filename;\n    a.rel = 'noopener';\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n  }\n\n  onShowFullVideo(): void {\n    if (!this.showVideoLibrary) return;\n    if (!Array.isArray(this.videoUrls) || this.videoUrls.length === 0) return;\n    this.isVideoFullMode = true;\n    this.isVideoLibraryCollapsed = true;\n    this.progress = 0;\n    this.globalDragProgress = 0;\n    this.lastScrolledClipIndex = -1;\n    this.enqueueOperation(async () => {\n      await this.switchToVideoAndResetInternal(0);\n      await this.playVideoInternal();\n    });\n  }\n\n  onExitFullVideo(): void {\n    this.isVideoFullMode = false;\n    this.isVideoLibraryCollapsed = true;\n    this.progress = 0;\n    this.globalDragProgress = 0;\n    this.lastScrolledClipIndex = -1;\n    this.enqueueOperation(async () => {\n      await this.switchToVideoAndResetInternal(0);\n    });\n  }\n\n  /** Horizontally scrolls the `.clips-row` so the currently-playing clip card is\n   * in the visible strip. No-op if the card is already on screen. Caller guards\n   * on `isPlaying` so the user can freely scroll the row while paused. */\n  private scrollCurrentClipIntoView(): void {\n    const scroller = this.clipsScrollerRef?.nativeElement;\n    if (!scroller) return;\n    const cards = scroller.querySelectorAll<HTMLElement>('.clip-card');\n    const card = cards[this.currentVideoIndex];\n    if (!card) return;\n\n    const padding = 8;\n    const cardLeft = card.offsetLeft;\n    const cardRight = cardLeft + card.offsetWidth;\n    const viewLeft = scroller.scrollLeft;\n    const viewRight = viewLeft + scroller.clientWidth;\n\n    if (cardLeft < viewLeft + padding) {\n      scroller.scrollTo({ left: Math.max(0, cardLeft - padding), behavior: 'smooth' });\n    } else if (cardRight > viewRight - padding) {\n      scroller.scrollTo({ left: cardRight - scroller.clientWidth + padding, behavior: 'smooth' });\n    }\n  }\n\n  toggleVideoLibraryCollapsed(): void {\n    this.isVideoLibraryCollapsed = !this.isVideoLibraryCollapsed;\n  }\n\n  getStatusBadgeClass(): string {\n    const baseClasses = 'cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-px-[9px] cqa-py-[3px] cqa-rounded-[6px] cqa-h-[21px]';\n    switch (this.liveStatus) {\n      case 'In Progress':\n      case 'Execution':\n        return `${baseClasses} cqa-bg-[#E0F2FE] cqa-border cqa-border-[#7DD3FC]`;\n      case 'Paused':\n        return `${baseClasses} cqa-bg-[#FEF3C7] cqa-border cqa-border-[#FCD34D]`;\n      case 'Aborted':\n        return `${baseClasses} cqa-bg-[#FEE2E2] cqa-border cqa-border-[#FCA5A5]`;\n      case 'Failed':\n        return `${baseClasses} cqa-bg-[#FCD9D9] cqa-border cqa-border-[#F9BFBF]`;\n      case 'Passed':\n        return `${baseClasses} cqa-bg-[#D1FAE5] cqa-border cqa-border-[#6EE7B7]`;\n      default:\n        return `${baseClasses} cqa-bg-gray-200 cqa-border cqa-border-gray-300`;\n    }\n  }\n\n  getStatusTextClass(): string {\n    switch (this.liveStatus) {\n      case 'In Progress':\n      case 'Execution':\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-[#0284C7] cqa-leading-[15px]';\n      case 'Paused':\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-[#D97706] cqa-leading-[15px]';\n      case 'Aborted':\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-[#DC2626] cqa-leading-[15px]';\n      case 'Failed':\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-[#C63535] cqa-leading-[15px]';\n      case 'Passed':\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-[#059669] cqa-leading-[15px]';\n      default:\n        return 'cqa-text-[10px] cqa-font-medium cqa-text-gray-600 cqa-leading-[15px]';\n    }\n  }\n\n  get processedTraceUrl(): string {\n    if (!this.traceViewUrl) return '';\n    \n    if (this.traceViewUrl.endsWith('.zip')) {\n      const urlParams = new URLSearchParams({\n        trace: this.traceViewUrl,\n        hideHeader: 'true',\n        hideBranding: 'true',\n        embed: 'true',\n        minimal: 'true',\n        noHeader: 'true'\n      });\n      \n      return `https://trace.playwright.dev/?${urlParams.toString()}`;\n    }\n    \n    return this.traceViewUrl;\n  }\n\n  private updateSafeTraceUrl(): void {\n    const url = this.processedTraceUrl;\n    if (url) {\n      this.traceViewerLoading = true;\n      this.traceViewerError = false;\n      this.safeTraceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(url);\n    } else {\n      this.traceViewerLoading = false;\n      this.traceViewerError = false;\n      this.safeTraceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('');\n    }\n  }\n\n  onTraceViewerLoad(): void {\n    this.traceViewerLoading = false;\n    this.traceViewerError = false;\n  }\n\n  onTraceViewerError(): void {\n    this.traceViewerLoading = false;\n    this.traceViewerError = true;\n  }\n\n  onSpeedChange(value: string): void {\n    this.currentSpeed = value;\n    // Whenever speed changes, apply it to the current video\n    this.applyCurrentPlaybackRate();\n    this.isSpeedControlOpen = false;\n  }\n\n  toggleSpeedControl(): void {\n    this.isSpeedControlOpen = !this.isSpeedControlOpen;\n    if (this.isSpeedControlOpen) {\n      this.addSpeedControlClickOutsideListener();\n    } else {\n      this.removeSpeedControlClickOutsideListener();\n    }\n  }\n\n  private addSpeedControlClickOutsideListener(): void {\n    this.removeSpeedControlClickOutsideListener();\n    \n    setTimeout(() => {\n      this.speedControlClickOutsideHandler = (e: MouseEvent) => {\n        const target = e.target as HTMLElement;\n        if (target && this.speedControlContainer?.nativeElement && \n            !this.speedControlContainer.nativeElement.contains(target)) {\n          this.isSpeedControlOpen = false;\n          this.removeSpeedControlClickOutsideListener();\n        }\n      };\n      \n      document.addEventListener('click', this.speedControlClickOutsideHandler);\n    }, 0);\n  }\n\n  private removeSpeedControlClickOutsideListener(): void {\n    if (this.speedControlClickOutsideHandler) {\n      document.removeEventListener('click', this.speedControlClickOutsideHandler);\n      this.speedControlClickOutsideHandler = null;\n    }\n  }\n\n  private updateSegments(): void {\n    const baseSegments: SegmentOption[] = [\n      { label: 'Screenshots', value: 'screenshots', icon: 'photo'  },\n    ];\n    \n    // Only add Video tab if hideVideoTab is false\n    if (!this.hideVideoTab) {\n      baseSegments.push({ label: 'Video', value: 'video', icon: 'videocam' });\n    }\n    \n    if (this.traceViewUrl) {\n      baseSegments.push({ label: 'Trace', value: 'trace', icon: 'graphic_eq' });\n    }\n    \n    this.segments = baseSegments;\n    \n    // If current view is 'video' and video tab is hidden, switch to screenshots\n    if (this.currentView === 'video' && this.hideVideoTab) {\n      this.currentView = 'screenshots';\n    }\n  }\n\n  private onVideoElementReady(): void {\n    const video = this._vplayer?.nativeElement;\n    if (!video) return;\n\n    console.log('[Simulator] onVideoElementReady: video element ready', {\n      playerState: this.playerState,\n      isFullScreen: this.isFullScreen,\n      readyState: video.readyState\n    });\n\n    // Any in-flight operation on a prior <video> element is dead once it unmounts\n    // (e.g. liveSessionView toggled mid-switch — the detached element never fires\n    // `loadedmetadata` and `switchToVideoAndResetInternal` hangs forever, blocking\n    // the operationQueue behind it). Reset from every transient state and drop the\n    // stuck chain so subsequent togglePlay / seek / switch calls actually run.\n    if (\n      this.playerState === 'error' ||\n      this.playerState === 'loading' ||\n      this.playerState === 'switching' ||\n      this.playerState === 'seeking' ||\n      this.playerState === 'playing'\n    ) {\n      console.log('[Simulator] onVideoElementReady: resetting stuck state', this.playerState);\n      this.playerState = 'idle';\n      this.isPlaying = false;\n      this.playPromise = null;\n      this.operationQueue = Promise.resolve();\n      this.isVideoPlayingChange.emit(false);\n    }\n\n    // Apply current playback speed when the video element is first ready\n    this.applyCurrentPlaybackRate();\n\n    this.attachVideoListeners();\n  }\n\n  private applyCurrentPlaybackRate(): void {\n    const video = this.vplayer?.nativeElement;\n    if (!video) return;\n\n    const numeric = parseFloat(this.currentSpeed.replace('x', ''));\n    const rate = !isNaN(numeric) && numeric > 0 ? numeric : 1;\n    video.playbackRate = rate;\n  }\n\n  private findVideoIndexForTimestamp(cumulativeTimestamp: number): number | null {\n    if (!this.hasMultipleVideos) {\n      return null;\n    }\n\n    const boundaries = this.getVideoDurationBoundaries();\n    if (boundaries.length === 0) {\n      return null;\n    }\n\n    // Find which video contains this timestamp\n    for (let i = 0; i < boundaries.length; i++) {\n      const boundary = boundaries[i];\n      if (cumulativeTimestamp >= boundary.start && cumulativeTimestamp < boundary.end) {\n        return i;\n      }\n    }\n\n    // If timestamp is exactly at the end of the last video, return the last video index\n    if (boundaries.length > 0) {\n      const lastBoundary = boundaries[boundaries.length - 1];\n      if (cumulativeTimestamp === lastBoundary.end) {\n        return boundaries.length - 1;\n      }\n    }\n\n    return null;\n  }\n\n  private async switchToVideoAndResetInternal(targetVideoIndex: number): Promise<void> {\n    const video = this.vplayer?.nativeElement;\n    if (!video || !this.videoUrls || targetVideoIndex < 0 || targetVideoIndex >= this.videoUrls.length) {\n      return;\n    }\n\n    // User-initiated navigation — reset the auto-recovery retry budget.\n    this.recoveryAttempts = 0;\n    this.recoveryAttemptWindowStart = 0;\n\n    if (this.currentVideoIndex === targetVideoIndex) {\n      await this.resetVideoStateInternal();\n      return;\n    }\n\n    this.playerState = 'switching';\n\n    try {\n      video.pause();\n      this.isPlaying = false;\n      this.playPromise = null;\n      this.videoPause.emit();\n      this.isVideoPlayingChange.emit(false);\n\n      const metadataLoaded = new Promise<void>((resolve, reject) => {\n        let settled = false;\n        const settle = (fn: () => void) => {\n          if (settled) return;\n          settled = true;\n          video.removeEventListener('loadedmetadata', onLoadedMetadata);\n          video.removeEventListener('error', onError);\n          fn();\n        };\n        const onLoadedMetadata = () => settle(resolve);\n        const onError = () => settle(() => reject(new Error('Failed to load video')));\n\n        video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true });\n        video.addEventListener('error', onError, { once: true });\n      });\n\n      this.currentVideoIndex = targetVideoIndex;\n\n      await metadataLoaded;\n\n      video.currentTime = 0;\n      this.progress = 0;\n      this.playPromise = null;\n      this.hitMarkers.clear();\n      this.lastSetDuration = -1;\n\n      const segmentStart = targetVideoIndex === 0 ? 0 : (this.segmentBoundaries[targetVideoIndex - 1] ?? 0);\n      this.videoTimeUpdate.emit(segmentStart);\n    } catch (err) {\n      console.error('[Simulator] switchToVideoAndReset failed:', err);\n      this.progress = 0;\n    } finally {\n      this.playerState = 'paused';\n    }\n  }\n\n  private switchToVideoAndSeek(cumulativeTimestamp: number): void {\n    this.enqueueOperation(() => this.switchToVideoAndSeekInternal(cumulativeTimestamp));\n  }\n\n  private async switchToVideoAndSeekInternal(cumulativeTimestamp: number): Promise<void> {\n    // User-initiated seek — reset the auto-recovery retry budget.\n    this.recoveryAttempts = 0;\n    this.recoveryAttemptWindowStart = 0;\n\n    if (!this.hasMultipleVideos) {\n      await this.seekToTimeInternal(cumulativeTimestamp);\n      return;\n    }\n\n    const targetVideoIndex = this.findVideoIndexForTimestamp(cumulativeTimestamp);\n    if (targetVideoIndex === null) {\n      console.warn('[Simulator] switchToVideoAndSeek: Could not find video for timestamp', cumulativeTimestamp);\n      return;\n    }\n\n    const boundaries = this.getVideoDurationBoundaries();\n    const targetBoundary = boundaries[targetVideoIndex];\n    const relativeTimestamp = cumulativeTimestamp - targetBoundary.start;\n\n    if (this.currentVideoIndex === targetVideoIndex) {\n      await this.seekToTimeInternal(relativeTimestamp);\n      this.lastSetDuration = cumulativeTimestamp;\n      return;\n    }\n\n    const video = this.vplayer?.nativeElement;\n    if (!video) return;\n\n    this.playerState = 'switching';\n\n    try {\n      video.pause();\n      this.isPlaying = false;\n      this.playPromise = null;\n      this.videoPause.emit();\n      this.isVideoPlayingChange.emit(false);\n\n      const metadataLoaded = new Promise<void>((resolve, reject) => {\n        let settled = false;\n        const settle = (fn: () => void) => {\n          if (settled) return;\n          settled = true;\n          video.removeEventListener('loadedmetadata', onLoadedMetadata);\n          video.removeEventListener('error', onError);\n          fn();\n        };\n        const onLoadedMetadata = () => settle(resolve);\n        const onError = () => settle(() => reject(new Error('Failed to load video')));\n\n        video.addEventListener('loadedmetadata', onLoadedMetadata, { once: true });\n        video.addEventListener('error', onError, { once: true });\n      });\n\n      this.currentVideoIndex = targetVideoIndex;\n\n      await metadataLoaded;\n\n      const seekSeconds = relativeTimestamp / 1000;\n      const targetTime = Math.max(0, Math.min(seekSeconds, video.duration || seekSeconds));\n      \n      await new Promise<void>((resolve) => {\n        const onSeeked = () => {\n          video.removeEventListener('seeked', onSeeked);\n          clearTimeout(timeoutId);\n          setTimeout(() => resolve(), 100);\n        };\n        \n        video.addEventListener('seeked', onSeeked, { once: true });\n        video.currentTime = targetTime;\n        \n        const timeoutId = setTimeout(() => {\n          video.removeEventListener('seeked', onSeeked);\n          resolve();\n        }, 1000);\n      });\n\n      this.lastSetDuration = cumulativeTimestamp;\n      \n      if (Math.abs(video.currentTime - targetTime) > 0.5) {\n        video.currentTime = targetTime;\n        await new Promise(resolve => setTimeout(resolve, 200));\n      }\n\n      // Per-video progress\n      const durationMs = video.duration * 1000;\n      if (durationMs > 0) {\n        this.progress = Math.min(100, Math.max(0, (video.currentTime * 1000 / durationMs) * 100));\n      }\n      this.videoTimeUpdate.emit(cumulativeTimestamp);\n    } catch (err) {\n      console.error('[Simulator] switchToVideoAndSeek failed:', err);\n      this.progress = 0;\n      this.videoTimeUpdate.emit(cumulativeTimestamp);\n    } finally {\n      this.playerState = 'paused';\n      this.hitMarkers.clear();\n    }\n  }\n}\n\n","<div class=\"cqa-ui-root\" style=\"background-color: #F3F4F6; height: 100%; display: flex; flex-direction: column;\"   [ngStyle]=\"{\n  position: isFullScreen ? 'fixed' : null,\n  inset: isFullScreen ? '1rem' : null,\n  zIndex: isFullScreen ? '50' : null,\n  boxShadow: isFullScreen ? '0px 13px 25px -12px rgba(0, 0, 0, 0.25)' : null,\n  borderRadius: isFullScreen ? '.5rem' : null,\n  border: isFullScreen ? '1px solid #E5E7EB' : null,\n  width: isFullScreen ? 'calc(100% - 32px)' : null,\n  height: isFullScreen ? 'calc(100% - 32px)' : '100%',\n  overflow: isFullScreen ? 'hidden' : null\n}\">\n  <div class=\"cqa-w-full cqa-py-1 cqa-px-2 cqa-bg-[#FFFFFF]\" style=\"border-bottom: 1px solid #E5E7EB;box-shadow: 0px 1px 2px 0px #0000000D;\">\n    <div class=\"cqa-w-full cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap\">\n      <div class=\"cqa-flex cqa-items-center\">\n        <div *ngIf=\"isLive\" class=\"cqa-h-[21px] cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-mr-2 cqa-px-[9px] cqa-py-[3px] cqa-bg-[#FCD9D9] cqa-rounded-[6px]\" style=\"border: 1px solid #F9BFBF;\">\n          <span class=\"cqa-relative cqa-w-2 cqa-h-2 cqa-rounded-full cqa-bg-[#F47F7F]\" style=\"flex-shrink: 0;\">\n            <span class=\"cqa-absolute cqa-inset-0 cqa-rounded-full cqa-bg-[#F47F7F] cqa-opacity-75 cqa-animate-ping\"></span>\n          </span>\n          <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#C63535] cqa-leading-[15px]\">Live</span>\n        </div>\n        <mat-icon *ngIf=\"effectivePlatformType === 'browser'\" style=\"width: 10px; height: 10px;\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n            <g clip-path=\"url(#clip0_935_15847)\">\n              <path\n                d=\"M0.625 5C0.625 6.16032 1.08594 7.27312 1.90641 8.09359C2.72688 8.91406 3.83968 9.375 5 9.375C6.16032 9.375 7.27312 8.91406 8.09359 8.09359C8.91406 7.27312 9.375 6.16032 9.375 5C9.375 3.83968 8.91406 2.72688 8.09359 1.90641C7.27312 1.08594 6.16032 0.625 5 0.625C3.83968 0.625 2.72688 1.08594 1.90641 1.90641C1.08594 2.72688 0.625 3.83968 0.625 5Z\"\n                stroke=\"#9CA3AF\" stroke-width=\"0.6\" stroke-linejoin=\"round\" />\n              <path\n                d=\"M3.125 5C3.125 3.83968 3.32254 2.72688 3.67417 1.90641C4.02581 1.08594 4.50272 0.625 5 0.625C5.49728 0.625 5.97419 1.08594 6.32582 1.90641C6.67746 2.72688 6.875 3.83968 6.875 5C6.875 6.16032 6.67746 7.27312 6.32582 8.09359C5.97419 8.91406 5.49728 9.375 5 9.375C4.50272 9.375 4.02581 8.91406 3.67417 8.09359C3.32254 7.27312 3.125 6.16032 3.125 5Z\"\n                stroke=\"#9CA3AF\" stroke-width=\"0.6\" stroke-linejoin=\"round\" />\n              <path d=\"M0.9375 6.45866H9.0625M0.9375 3.54199H9.0625\" stroke=\"#9CA3AF\" stroke-width=\"0.6\"\n                stroke-linecap=\"round\" />\n            </g>\n            <defs>\n              <clipPath id=\"clip0_935_15847\">\n                <rect width=\"10\" height=\"10\" fill=\"white\" />\n              </clipPath>\n            </defs>\n          </svg>\n        </mat-icon>\n        <mat-icon *ngIf=\"effectivePlatformType === 'device'\" style=\"width: 10px; height: 10px;\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n            <path d=\"M7.08325 0.833008H2.91659C2.45635 0.833008 2.08325 1.2061 2.08325 1.66634V8.33301C2.08325 8.79324 2.45635 9.16634 2.91659 9.16634H7.08325C7.54349 9.16634 7.91658 8.79324 7.91658 8.33301V1.66634C7.91658 1.2061 7.54349 0.833008 7.08325 0.833008Z\" stroke=\"#6B7280\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M5 7.5H5.00417\" stroke=\"#6B7280\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </mat-icon>\n        <p class=\"cqa-text-sm !cqa-text-[10px] cqa-text-[#6B7280] cqa-ml-2\">\n          {{ platformName }}\n          <span\n            *ngIf=\"effectivePlatformType === 'browser'\"\n            class=\"cqa-ml-1\"\n            [matTooltip]=\"'Screen size: ' + effectiveBrowserViewPort.width + 'x' + effectiveBrowserViewPort.height\"\n            matTooltipPosition=\"below\"\n          >\n            ·\n            <span class=\"cqa-ml-1\">\n              {{ effectiveBrowserViewPort.width }}x{{ effectiveBrowserViewPort.height }}\n            </span>\n          </span>\n        </p>\n        <button\n          *ngIf=\"showCaptureVideo && isLive\"\n          type=\"button\"\n          class=\"capture-video-btn\"\n          [class.is-loading]=\"isCapturingVideo\"\n          [disabled]=\"isCapturingVideo\"\n          (click)=\"captureVideo()\">\n          <span *ngIf=\"!isCapturingVideo\" class=\"capture-video-btn__dot\"></span>\n          <span *ngIf=\"isCapturingVideo\" class=\"capture-video-btn__spinner\" aria-hidden=\"true\"></span>\n          <span>{{ isCapturingVideo ? 'Capturing…' : 'Capture Video' }}</span>\n        </button>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div *ngIf=\"isLive\" [ngClass]=\"getStatusBadgeClass()\">\n          <span [ngClass]=\"getStatusTextClass()\">{{ liveStatus }}</span>\n        </div>\n\n        <cqa-segment-control\n          *ngIf=\"isLive && videoUrls && videoUrls.length > 0\"\n          [segments]=\"liveSessionSegments\"\n          [value]=\"liveSessionView\"\n          (valueChange)=\"onLiveSessionViewChange($event)\">\n        </cqa-segment-control>\n\n        <ng-container *ngIf=\"!isLive\">\n          <cqa-segment-control\n            [segments]=\"segments\"\n            [value]=\"currentView\"\n            (valueChange)=\"onSegmentChange($event)\">\n          </cqa-segment-control>\n\n          <div *ngIf=\"!isFullScreen\"\n               class=\"cqa-p-1 cqa-cursor-pointer hover:cqa-bg-gray-100 cqa-rounded-sm cqa-transition-colors\"\n               (click)=\"toggleFullScreen()\"\n               title=\"Expand\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n              <path d=\"M6.25 1.25H8.75V3.75\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.74992 1.25L5.83325 4.16667\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M1.25 8.74967L4.16667 5.83301\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M3.75 8.75H1.25V6.25\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </div>\n\n          <div *ngIf=\"isFullScreen\" \n               class=\"cqa-p-1 cqa-cursor-pointer hover:cqa-bg-gray-100 cqa-rounded-sm cqa-transition-colors\"\n               (click)=\"toggleFullScreen()\"\n               title=\"Exit full screen\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\">\n              <path d=\"M8.75 6.25H6.25V8.75\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.25008 6.25L9.16675 9.16667\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M0.833252 0.833008L3.74992 3.74967\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M1.25 3.75H3.75V1.25\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n  <div class=\"cqa-w-full cqa-bg-[#F3F4F6] cqa-h-[calc(100%-41px)]\">\n    <!-- Fast-forward overlay: covers content area but not header -->\n    <div *ngIf=\"isFastForwarding && fastForwardConfig\"\n         class=\"cqa-h-full cqa-w-full cqa-flex cqa-items-center cqa-justify-center cqa-p-6\"\n         style=\"background-color: #F3F4F6;\">\n      <div class=\"cqa-bg-white cqa-rounded-xl cqa-w-full\"\n           style=\"max-width: 500px; padding: 32px; box-shadow: 0px 25px 50px -12px #00000040; border: 1px solid #E5E5E5\">\n        <!-- Sparkle avatar with rotating arc -->\n        <div class=\"cqa-flex cqa-justify-center cqa-mb-2\">\n          <div class=\"cqa-relative\" style=\"width: 56px; height: 56px;\">\n            <div class=\"cqa-absolute cqa-inset-0 cqa-rounded-full cqa-flex cqa-items-center cqa-justify-center\"\n                 style=\"background-color: rgba(63,67,238,0.12);\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"26\" viewBox=\"0 0 24 26\" fill=\"none\">\n                <path d=\"M12.0251 0C12.173 0.0634121 12.2362 0.218264 12.2968 0.36211C12.3272 0.445923 12.355 0.530192 12.3821 0.615133C12.3927 0.647682 12.4033 0.680231 12.4142 0.713766C12.5548 1.15177 12.6801 1.59447 12.8061 2.03686C12.8346 2.13673 12.8632 2.23656 12.8918 2.33638C13.0375 2.84464 13.1821 3.35321 13.3258 3.86201C13.346 3.93347 13.3662 4.00492 13.3864 4.07638C13.4434 4.27783 13.5003 4.4793 13.5569 4.68087C13.6764 5.10678 13.7993 5.53145 13.9301 5.95405C13.9415 5.99102 13.9529 6.02799 13.9647 6.06608C14.3045 7.15318 14.7862 8.12751 15.5757 8.95743C15.5953 8.979 15.6148 9.00058 15.635 9.02282C15.972 9.38246 16.4045 9.67063 16.8368 9.90322C16.8588 9.91526 16.8808 9.92729 16.9035 9.9397C18.1757 10.6231 19.7053 10.9237 21.0832 11.3238C21.6869 11.4992 22.2888 11.6802 22.8885 11.8691C22.9306 11.8823 22.9727 11.8956 23.0149 11.9088C23.1409 11.9483 23.2667 11.9885 23.3923 12.0293C23.4216 12.0385 23.4509 12.0478 23.481 12.0573C23.6541 12.1146 23.8197 12.1821 23.9618 12.2992C24.0051 12.3938 24.0051 12.3938 23.9933 12.4884C23.855 12.6258 23.7179 12.6902 23.5354 12.753C23.5093 12.7623 23.4832 12.7716 23.4564 12.7811C23.1483 12.8892 22.836 12.9838 22.5234 13.0775C22.4592 13.0969 22.395 13.1163 22.3309 13.1357C21.9352 13.2551 21.5389 13.3719 21.1421 13.4874C20.6195 13.6395 20.0977 13.7942 19.5763 13.9506C19.4909 13.9763 19.4055 14.0018 19.32 14.0272C18.8712 14.161 18.4246 14.2995 17.9817 14.4516C17.945 14.4642 17.9082 14.4768 17.8704 14.4897C16.387 15.0059 15.2563 15.9687 14.5486 17.3768C14.167 18.1681 13.9419 19.0239 13.7124 19.8685C13.6503 20.0964 13.5842 20.323 13.5175 20.5496C13.4651 20.7278 13.4139 20.9064 13.364 21.0853C13.358 21.1066 13.3521 21.1279 13.346 21.1499C13.3172 21.253 13.2885 21.3562 13.26 21.4594C13.1872 21.7211 13.1087 21.9807 13.0281 22.2401C12.8851 22.7012 12.7549 23.1656 12.6256 23.6306C12.4305 24.3308 12.4305 24.3308 12.3199 24.6674C12.3126 24.69 12.3052 24.7126 12.2977 24.7359C12.2573 24.8557 12.2158 24.966 12.1394 25.0674C12.0231 25.093 12.0231 25.093 11.9187 25.0989C11.7993 24.9249 11.7202 24.7562 11.6569 24.5553C11.6476 24.5269 11.6384 24.4984 11.6289 24.4691C11.5116 24.1019 11.4067 23.7309 11.3018 23.36C11.2778 23.2752 11.2536 23.1904 11.2295 23.1056C11.0496 22.4737 10.8727 21.8409 10.696 21.2081C9.96019 18.0775 9.96019 18.0775 8.104 15.5464C8.07425 15.5222 8.0445 15.4979 8.01385 15.4729C6.79767 14.4989 5.19556 14.1382 3.7284 13.7155C3.36553 13.6109 3.0028 13.5058 2.64009 13.4007C2.60837 13.3915 2.60837 13.3915 2.57601 13.3821C2.05283 13.2304 1.5298 13.0783 1.0086 12.9199C0.986549 12.9132 0.9645 12.9066 0.941783 12.8997C0.141064 12.6578 0.141064 12.6578 0.0017241 12.4884C-0.0022167 12.4115 -0.0022167 12.4115 0.0332505 12.3307C0.178889 12.188 0.320205 12.1269 0.512426 12.0647C0.540259 12.0554 0.56809 12.046 0.596766 12.0364C0.682008 12.0079 0.767436 11.9801 0.852936 11.9524C0.877335 11.9444 0.901735 11.9364 0.926874 11.9282C1.09943 11.8716 1.2726 11.8171 1.44603 11.7633C1.48864 11.75 1.48864 11.75 1.53212 11.7364C2.27272 11.5061 3.01815 11.2917 3.76336 11.0769C4.31866 10.9168 4.87302 10.754 5.42561 10.5847C5.451 10.577 5.4764 10.5692 5.50256 10.5613C6.78267 10.1705 8.03409 9.61612 8.86063 8.51606C8.873 8.49974 8.88538 8.48342 8.89813 8.46661C9.8186 7.24564 10.1775 5.76082 10.5785 4.31201C10.7105 3.83552 10.844 3.35947 10.9779 2.88356C11.015 2.75177 11.0521 2.61997 11.089 2.48812C11.2372 1.95852 11.3876 1.42964 11.5467 0.903181C11.5616 0.853882 11.5764 0.804561 11.5911 0.755218C11.8138 0.0111205 11.8138 0.0111205 12.0251 0Z\" fill=\"#3F43EE\"/>\n                <path d=\"M19.2962 1.54899C19.441 1.7128 19.4699 1.90532 19.515 2.11449C19.6653 2.77161 19.8384 3.37584 20.4394 3.75756C20.8102 3.96263 21.2522 4.05595 21.663 4.14409C21.8364 4.18205 21.9829 4.23242 22.1316 4.33316C22.1651 4.38636 22.1651 4.38636 22.1632 4.47897C22.1287 4.59159 22.0984 4.62791 22.0075 4.70163C21.9081 4.73488 21.9081 4.73488 21.7888 4.76074C21.7437 4.7711 21.6985 4.78158 21.6535 4.79214C21.6293 4.79774 21.6051 4.80335 21.5803 4.80912C20.8456 4.97907 20.8456 4.97907 20.2105 5.36368C20.1899 5.3803 20.1692 5.39692 20.1479 5.41405C19.6941 5.81426 19.5981 6.48 19.4615 7.0377C19.4536 7.06833 19.4458 7.09896 19.4377 7.13051C19.431 7.15762 19.4242 7.18474 19.4172 7.21267C19.3877 7.29546 19.3572 7.34945 19.2962 7.41289C19.1266 7.43444 19.1266 7.43444 19.044 7.41289C18.9128 7.31114 18.8834 7.19524 18.8491 7.0395C18.8433 7.01539 18.8376 6.99127 18.8317 6.96642C18.8134 6.8894 18.7956 6.81226 18.778 6.73508C18.6398 6.13403 18.4837 5.54432 17.9324 5.19201C17.5015 4.95172 16.9776 4.83808 16.496 4.74631C16.364 4.71883 16.2884 4.68427 16.2067 4.57552C16.1889 4.46518 16.1889 4.46518 16.2067 4.35484C16.3322 4.22484 16.4644 4.19311 16.6342 4.15386C16.6877 4.14061 16.7412 4.12726 16.7947 4.11383C16.8223 4.10694 16.85 4.10004 16.8784 4.09294C17.0193 4.05668 17.1588 4.01602 17.2983 3.97455C17.3236 3.9672 17.3489 3.95985 17.3751 3.95227C17.6585 3.86752 17.9032 3.75911 18.1298 3.56668C18.1509 3.54928 18.172 3.53189 18.1938 3.51397C18.5465 3.19658 18.6663 2.71976 18.7751 2.27484C18.7834 2.24106 18.7916 2.20728 18.8002 2.17248C18.8167 2.10463 18.8329 2.0367 18.8488 1.9687C18.8602 1.92139 18.8602 1.92139 18.8717 1.87312C18.8784 1.84486 18.885 1.81659 18.8918 1.78747C18.9209 1.69749 18.959 1.62683 19.0125 1.54899C19.1153 1.49761 19.1874 1.52084 19.2962 1.54899Z\" fill=\"#0F12A8\"/>\n                <path d=\"M4.7881 17.4219C4.82561 17.4222 4.82561 17.4222 4.86387 17.4225C5.13296 17.4307 5.31503 17.5169 5.51321 17.6978C5.74381 17.9469 5.85029 18.2279 5.84423 18.5637C5.81833 18.8359 5.65779 19.0736 5.46087 19.2576C5.22908 19.4447 4.99525 19.5065 4.69906 19.4979C4.44933 19.4688 4.21438 19.3502 4.03738 19.1717C3.81726 18.8713 3.75291 18.5958 3.78517 18.2259C3.8518 17.9346 4.0439 17.6981 4.28959 17.5323C4.46027 17.4458 4.59755 17.4203 4.7881 17.4219Z\" fill=\"#1216CC\"/>\n                </svg>\n            </div>\n            <svg class=\"cqa-absolute\"\n                 width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n                 style=\"top: -2px; left: -2px;\">\n              <circle cx=\"30\" cy=\"30\" r=\"28\" stroke=\"#E2E2E3\" stroke-width=\"2\" fill=\"none\"/>\n            </svg>\n            <svg class=\"cqa-absolute cqa-ff-spin\"\n                 width=\"60\" height=\"60\" viewBox=\"0 0 60 60\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n                 style=\"top: -2px; left: -2px; transform-origin: 30px 30px;\">\n              <path d=\"M30 2 A 28 28 0 0 1 54.24 44\"\n                    stroke=\"#3f43ee\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\"/>\n            </svg>\n          </div>\n        </div>\n\n        <p class=\"cqa-text-center cqa-m-0 cqa-mb-2\"\n           style=\"font-size: 16px; font-weight: 600; color: #161617;\">\n          Fast-forwarding to your step\n        </p>\n\n        <p class=\"cqa-text-center cqa-m-0\"\n           style=\"font-size: 12px; color: #6D6D74;\">\n          Steps {{ fastForwardConfig.fromStep }}–{{ fastForwardConfig.toStep }} are running at full speed in the background.\n          <strong style=\"color: #6D6D74; font-weight: 600;\">Live view and screenshots are paused</strong>\n          until execution reaches your target step — then you're in automatically.\n        </p>\n\n        <div class=\"cqa-mt-6 cqa-mb-5\">\n          <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n            <span style=\"font-size: 12px; color: #4C4C51;\">Steps executing in background</span>\n            <span style=\"font-size: 12px; color: #6D6D74;\">\n              {{ fastForwardConfig.currentStep }} of {{ fastForwardConfig.totalSteps }} steps\n            </span>\n          </div>\n          <div style=\"height: 6px; background-color: #E2E2E3; border-radius: 9999px; overflow: hidden;\">\n            <div [style.width.%]=\"fastForwardProgressPercent\"\n                 style=\"height: 100%; background: linear-gradient(90deg, #3F43EE 0%, #818CF8 100%); transition: width 300ms cubic-bezier(0.4,0,0.2,1);\"></div>\n          </div>\n        </div>\n\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\"\n             style=\"padding: 10px 14px; border-radius: 10px; background: #6366F11A; border: 1px solid #6366F133;\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" style=\"flex-shrink: 0;\">\n            <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"#3f43ee\" stroke-width=\"1.25\"/>\n            <circle cx=\"8\" cy=\"8\" r=\"3\" stroke=\"#3f43ee\" stroke-width=\"1.25\"/>\n            <circle cx=\"8\" cy=\"8\" r=\"1\" fill=\"#3f43ee\"/>\n          </svg>\n          <div style=\"font-size: 12px;\">\n            <span style=\"color: #6D6D74;\">Jumping to</span>\n            <span style=\"color: #3F43EE; font-weight: 400; display: block;\">\n              Step {{ fastForwardConfig.targetStepNumber }} — <span [innerHTML]=\"fastForwardConfig.targetStepLabel\"></span>\n            </span>\n          </div>\n        </div>\n      </div>\n    </div>\n\n  <!-- Live Content View -->\n    <div *ngIf=\"!isFastForwarding && isLive && liveSessionView === 'live'\" class=\"cqa-h-full cqa-flex cqa-flex-col cqa-justify-center cqa-relative\">\n      <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-4\">\n        <div class=\"cqa-relative cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-overflow-hidden\"\n             [ngClass]=\"{\n               'cqa-w-auto': hasDeviceFrame,\n               'cqa-w-full cqa-flex-col': !hasDeviceFrame,\n               'cqa-rounded-md cqa-overflow-hidden': effectivePlatformType === 'browser',\n               'cqa-max-h-full cqa-h-full': hasDeviceFrame && (effectivePlatformType !== 'browser' || !isLive),\n               'cqa-min-w-max': hasDeviceFrame && effectivePlatformType === 'device'\n             }\"\n             [ngStyle]=\"liveContentContainerStyle\">\n          <img *ngIf=\"hasDeviceFrame\"\n            [src]=\"deviceMockupImage\"\n            alt=\"Device mockup\"\n            class=\"cqa-h-full cqa-w-auto cqa-max-h-full cqa-object-contain cqa-block cqa-pointer-events-none cqa-z-10\"\n          />\n          <div [ngClass]=\"{\n                 'cqa-absolute cqa-flex cqa-flex-col': hasDeviceFrame,\n                 'cqa-w-full cqa-h-full cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-relative': !hasDeviceFrame,\n                 'cqa-z-20': hasDeviceFrame && effectivePlatformType === 'browser',\n                 'cqa-bg-white': hasDeviceFrame && effectivePlatformType !== 'browser'\n               }\"\n               [ngStyle]=\"hasDeviceFrame ? deviceScreenStyle : {}\">\n            <!-- Loading State -->\n            <div *ngIf=\"isContentVideoLoading\" class=\"cqa-p-10 cqa-text-center cqa-h-full cqa-flex cqa-flex-col cqa-items-center cqa-justify-center\">\n              <div class=\"cqa-mb-4\">\n                <mat-progress-spinner mode=\"indeterminate\" diameter=\"40\"></mat-progress-spinner>\n              </div>\n              <p class=\"cqa-text-gray-400 cqa-text-sm\">{{ liveLoadingLabel }}</p>\n            </div>\n\n            <!-- Live Content (when not loading) -->\n            <div *ngIf=\"!isContentVideoLoading\" class=\"cqa-w-full cqa-h-full cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-relative\">\n              <div *ngIf=\"liveStatus === 'Failed' && failedStatusMessage\" class=\"cqa-p-6 cqa-text-center cqa-w-full\">\n                <div class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-px-4 cqa-py-3 cqa-bg-[#FCD9D9] cqa-border cqa-border-[#F9BFBF] cqa-rounded-lg\">\n                  <mat-icon style=\"width: 18px; height: 18px; color: #C63535; font-size: 18px;\">error</mat-icon>\n                  <p class=\"cqa-text-[#C63535] cqa-text-sm cqa-font-medium cqa-m-0\">{{ failedStatusMessage }}</p>\n                </div>\n              </div>\n              <ng-content *ngIf=\"liveStatus !== 'Failed' || !failedStatusMessage\"></ng-content>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Video View: post-execution Video tab, or mid-session Captured view inside a live session -->\n    <div *ngIf=\"!isFastForwarding && ((!isLive && currentView === 'video') || (isLive && liveSessionView === 'captured'))\"\n         class=\"cqa-h-full cqa-flex cqa-flex-col\"\n         tabindex=\"0\"\n         role=\"region\"\n         aria-label=\"Video playback\"\n         (keydown)=\"onVideoKeydown($event)\">\n      <div class=\"cqa-w-full cqa-flex cqa-items-center\" *ngIf=\"currentVideoUrl\" [ngClass]=\"{'!cqa-h-full': effectivePlatformType === 'device', 'cqa-mt-auto': hasDeviceFrame, 'cqa-max-h-[calc(100%-108px)]': showVideoLibrary, 'cqa-max-h-[calc(100%-60px)]': !showVideoLibrary}\">\n        <ng-container *ngIf=\"hasDeviceFrame; else videoNoFrame\">\n          <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-4\">\n            <div class=\"cqa-relative cqa-h-full cqa-w-auto cqa-flex cqa-items-center cqa-justify-center cqa-max-h-full\" [ngClass]=\"{'cqa-rounded-md cqa-overflow-hidden': effectivePlatformType === 'browser', 'cqa-min-w-max': effectivePlatformType === 'device'}\">\n              <img\n                [src]=\"deviceMockupImage\"\n                alt=\"Device mockup\"\n                class=\"cqa-h-full cqa-w-auto cqa-max-h-full cqa-object-contain cqa-block cqa-pointer-events-none cqa-z-10\"\n              />\n              <div class=\"cqa-absolute cqa-flex cqa-flex-col\" [ngStyle]=\"deviceScreenStyle\" [ngClass]=\"{'cqa-bg-white': effectivePlatformType !== 'browser'}\">\n                <video\n                  *ngIf=\"!videoRefreshing\"\n                  #vplayer\n                  class=\"cqa-object-cover cqa-w-full cqa-h-full cqa-block cqa-bg-[##F2F2F2] cqa-cursor-pointer\"\n                  [src]=\"currentVideoUrl\"\n                  type=\"video/webm\"\n                  [ngClass]=\"{'cqa-z-20': effectivePlatformType === 'browser'}\"\n                  (click)=\"onVideoFrameClick()\"\n                  (loadedmetadata)=\"onVideoMetadataLoaded()\"\n                  (canplay)=\"onVideoCanPlay()\"\n                  (ended)=\"onVideoEnded()\"\n                  (error)=\"onVideoError()\"\n                ></video>\n                <!-- Play/Pause overlay icon -->\n                <div *ngIf=\"showPlayPauseOverlay\"\n                     class=\"cqa-absolute cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-pointer-events-none\"\n                     [ngClass]=\"{'cqa-z-30': effectivePlatformType === 'browser'}\"\n                     [ngStyle]=\"{animation: 'cqaFadeOut 500ms ease-out forwards'}\">\n                  <div class=\"cqa-rounded-full cqa-bg-black cqa-bg-opacity-50 cqa-flex cqa-items-center cqa-justify-center\"\n                       style=\"width: 56px; height: 56px;\">\n                    <!-- Icon pinned to the just-taken action (set in onVideoFrameClick) so it\n                         doesn't flicker as `isPlaying` flips async between play() invocation\n                         and its promise resolving. -->\n                    <svg *ngIf=\"overlayShowsPlayingIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\">\n                      <polygon points=\"5,3 19,12 5,21\" />\n                    </svg>\n                    <svg *ngIf=\"!overlayShowsPlayingIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\">\n                      <rect x=\"5\" y=\"3\" width=\"4\" height=\"18\" />\n                      <rect x=\"15\" y=\"3\" width=\"4\" height=\"18\" />\n                    </svg>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n        <ng-template #videoNoFrame>\n          <div class=\"cqa-relative cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-4 cqa-cursor-pointer\"\n               (click)=\"onVideoFrameClick()\">\n            <video\n              *ngIf=\"!videoRefreshing\"\n              #vplayer\n              class=\"cqa-w-full cqa-h-full cqa-block cqa-bg-[##F2F2F2]\"\n              [src]=\"currentVideoUrl\"\n              type=\"video/webm\"\n              (loadedmetadata)=\"onVideoMetadataLoaded()\"\n              (canplay)=\"onVideoCanPlay()\"\n              (ended)=\"onVideoEnded()\"\n              (error)=\"onVideoError()\"\n            ></video>\n            <!-- Play/Pause overlay icon -->\n            <div *ngIf=\"showPlayPauseOverlay\"\n                 class=\"cqa-absolute cqa-inset-0 cqa-flex cqa-items-center cqa-justify-center cqa-pointer-events-none\"\n                 [ngStyle]=\"{animation: 'cqaFadeOut 500ms ease-out forwards'}\">\n              <div class=\"cqa-rounded-full cqa-bg-black cqa-bg-opacity-50 cqa-flex cqa-items-center cqa-justify-center\"\n                   style=\"width: 56px; height: 56px;\">\n                <!-- Icon pinned to the just-taken action (set in onVideoFrameClick) so it\n                     doesn't flicker as `isPlaying` flips async between play() invocation\n                     and its promise resolving. -->\n                <svg *ngIf=\"overlayShowsPlayingIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\">\n                  <polygon points=\"5,3 19,12 5,21\" />\n                </svg>\n                <svg *ngIf=\"!overlayShowsPlayingIcon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"white\">\n                  <rect x=\"5\" y=\"3\" width=\"4\" height=\"18\" />\n                  <rect x=\"15\" y=\"3\" width=\"4\" height=\"18\" />\n                </svg>\n              </div>\n            </div>\n          </div>\n        </ng-template>\n      </div>\n    \n      <div class=\"cqa-p-10 cqa-text-center cqa-text-gray-400 cqa-text-sm cqa-h-full cqa-flex cqa-items-center cqa-justify-center\" *ngIf=\"!currentVideoUrl\">\n        <ng-container *ngIf=\"isVNCSessionIntruppted && vncSessionIntupptedMessage; else noVideoDefault\">\n          <p class=\"cqa-text-sm cqa-text-gray-600\">\n            {{ vncSessionIntupptedMessage }}\n          </p>\n        </ng-container>\n        <ng-template #noVideoDefault>\n          <span>No video recording found</span>\n        </ng-template>\n      </div>\n    \n      <!-- Video Library Panel — reserves only header-height in flow; the inner panel is absolutely anchored to its bottom edge, so the body expanding makes the panel grow UPWARD over the video. Timeline stays put. -->\n      <div *ngIf=\"showVideoLibrary && videoUrls && videoUrls.length > 0\"\n           class=\"video-library\"\n           [class.video-library--open]=\"!isVideoLibraryCollapsed\"\n           [ngClass]=\"{'cqa-mt-auto': hasDeviceFrame}\">\n       <div class=\"video-library__inner\">\n        <!-- Header — always visible, clicking the chevron toggles the body -->\n        <div class=\"video-library__header\">\n          <div class=\"video-library__title-group\">\n            <mat-icon class=\"video-library__icon\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                <path d=\"M9.33398 7.58308L12.3807 9.61425C12.4247 9.64348 12.4757 9.66024 12.5284 9.66276C12.5811 9.66528 12.6335 9.65347 12.68 9.62856C12.7265 9.60366 12.7654 9.56661 12.7925 9.52136C12.8196 9.4761 12.834 9.42434 12.834 9.37158V4.59058C12.834 4.53926 12.8205 4.48885 12.7948 4.44443C12.7691 4.40001 12.7321 4.36315 12.6876 4.33759C12.6431 4.31203 12.5926 4.29866 12.5413 4.29883C12.49 4.299 12.4396 4.31272 12.3953 4.33858L9.33398 6.12475\" stroke=\"#3F43EE\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.16602 3.5H2.33268C1.68835 3.5 1.16602 4.02233 1.16602 4.66667V9.33333C1.16602 9.97767 1.68835 10.5 2.33268 10.5H8.16602C8.81035 10.5 9.33268 9.97767 9.33268 9.33333V4.66667C9.33268 4.02233 8.81035 3.5 8.16602 3.5Z\" stroke=\"#3F43EE\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </svg>\n            </mat-icon>\n            <span class=\"video-library__title\">Video Library</span>\n            <cqa-badge\n              size=\"small\"\n              inlineStyles=\"min-width: max-content;\"\n              backgroundColor=\"#EDE9FE\"\n              textColor=\"#6D28D9\"\n              [label]=\"videoUrls.length + ' clip' + (videoUrls.length === 1 ? '' : 's')\">\n            </cqa-badge>\n            <span class=\"video-library__subtitle\"\n                  [matTooltip]=\"isVideoFullMode ? 'Playing all clips as one continuous video' : 'Each clip covers execution since last capture'\"\n                  matTooltipPosition=\"below\">{{ isVideoFullMode ? '· Playing all clips as one continuous video' : '· Each clip covers execution since last capture' }}</span>\n          </div>\n          <div class=\"video-library__actions\">\n            <cqa-button\n              *ngIf=\"!isVideoFullMode\"\n              variant=\"filled\"\n              btnSize=\"md\"\n              icon=\"play_arrow\"\n              iconPosition=\"start\"\n              text=\"Show Full Video\"\n              (clicked)=\"onShowFullVideo()\">\n            </cqa-button>\n            <cqa-button\n              *ngIf=\"isVideoFullMode\"\n              variant=\"outlined\"\n              btnSize=\"md\"\n              icon=\"close\"\n              iconPosition=\"start\"\n              text=\"Exit Full Video\"\n              (clicked)=\"onExitFullVideo()\">\n            </cqa-button>\n            <button type=\"button\" class=\"video-library__collapse\" (click)=\"toggleVideoLibraryCollapsed()\"\n                    [attr.aria-label]=\"isVideoLibraryCollapsed ? 'Show video library' : 'Hide video library'\">\n              <svg *ngIf=\"!isVideoLibraryCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                <path d=\"M3 7.5L6 4.5L9 7.5\" stroke=\"#6B7280\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n              <svg *ngIf=\"isVideoLibraryCollapsed\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                <path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"#6B7280\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n            </button>\n          </div>\n        </div>\n\n        <!-- Body (cards) — max-height animates from 0 (collapsed) to a fixed height (open). -->\n        <div class=\"video-library__body\"\n             [class.video-library__body--open]=\"!isVideoLibraryCollapsed\"\n             [attr.aria-hidden]=\"isVideoLibraryCollapsed ? true : null\">\n          <div class=\"clips-row\"\n               #clipsScroller\n               [class.clips-row--dragging]=\"clipsDragActive\"\n               (mousedown)=\"onClipsMouseDown($event, clipsScroller)\"\n               (mousemove)=\"onClipsMouseMove($event, clipsScroller)\"\n               (mouseup)=\"onClipsMouseUp($event)\"\n               (mouseleave)=\"onClipsMouseLeave($event)\">\n            <div\n              *ngFor=\"let url of videoUrls; let i = index; trackBy: trackLibraryClipByIndex\"\n              class=\"clip-card\"\n              [class.clip-card--playing]=\"i === currentVideoIndex\">\n              <div class=\"clip-thumb\"\n                   [class.clip-thumb--ready]=\"libraryVideoDurations.has(i)\"\n                   (click)=\"selectLibraryClip(i)\">\n                <video\n                  #clipVideo\n                  class=\"clip-thumb__video\"\n                  [src]=\"url\"\n                  preload=\"metadata\"\n                  playsinline\n                  muted\n                  (loadedmetadata)=\"onLibraryClipMetadataLoaded(i, clipVideo)\"\n                  (durationchange)=\"onLibraryClipMetadataLoaded(i, clipVideo)\"></video>\n                <div class=\"clip-thumb__overlay\">\n                  <div class=\"clip-thumb__play-circle\">\n                    <svg *ngIf=\"!(i === currentVideoIndex && isPlaying)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                      <path d=\"M3.5 1.75L11.375 7L3.5 12.25V1.75Z\" fill=\"#FFFFFF\"/>\n                    </svg>\n                    <svg *ngIf=\"i === currentVideoIndex && isPlaying\" xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                      <rect x=\"3.5\" y=\"2.5\" width=\"2.5\" height=\"9\" rx=\"0.5\" fill=\"#FFFFFF\"/>\n                      <rect x=\"8\" y=\"2.5\" width=\"2.5\" height=\"9\" rx=\"0.5\" fill=\"#FFFFFF\"/>\n                    </svg>\n                  </div>\n                </div>\n                <span *ngIf=\"i === currentVideoIndex && isPlaying\" class=\"clip-thumb__badge clip-thumb__badge--playing\">PLAYING</span>\n                <span *ngIf=\"newVideoIndexes.has(i) && i !== currentVideoIndex\" class=\"clip-thumb__badge clip-thumb__badge--new\">NEW</span>\n                <span class=\"clip-thumb__duration\">{{ formatTime(libraryVideoDurations.get(i) || 0) }}</span>\n              </div>\n              <div class=\"clip-meta\">\n                <div class=\"clip-meta__title\">Clip {{ i + 1 }}</div>\n                <button\n                  type=\"button\"\n                  class=\"clip-download-btn\"\n                  [class.clip-download-btn--downloading]=\"downloadingIndexes.has(i)\"\n                  [disabled]=\"downloadingIndexes.has(i)\"\n                  (click)=\"downloadClip(i); $event.stopPropagation()\">\n                  <ng-container *ngIf=\"!downloadingIndexes.has(i)\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                      <!-- Figma icon: upward arrow with a short tray line at the bottom (share/export glyph). -->\n                      <path d=\"M6 8.5V2M6 2L3 5M6 2L9 5M3 10.5H9\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    </svg>\n                    <span>Download</span>\n                  </ng-container>\n                  <ng-container *ngIf=\"downloadingIndexes.has(i)\">\n                    <svg class=\"clip-download-btn__ring\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                      <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#E5E7EB\" stroke-width=\"1.5\" fill=\"none\"/>\n                      <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\"\n                              stroke-linecap=\"round\"\n                              [attr.stroke-dasharray]=\"downloadRingCircumference\"\n                              [attr.stroke-dashoffset]=\"downloadRingDashoffset(i)\"\n                              transform=\"rotate(-90 7 7)\"/>\n                    </svg>\n                    <span>{{ downloadProgress.get(i) || 0 }}%</span>\n                  </ng-container>\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n       </div>\n      </div>\n\n      <div class=\"cqa-px-2 cqa-py-2 cqa-bg-white\" style=\"border-top: 1px solid #E5E7EB;\" [ngClass]=\"{'cqa-mt-auto': hasDeviceFrame && !(showVideoLibrary && videoUrls && videoUrls.length > 0)}\" *ngIf=\"currentVideoUrl && (!isLive || liveSessionView === 'captured')\">\n        <span *ngIf=\"!isVideoFullMode\"\n              class=\"cqa-text-[#6B7280] cqa-text-[12px] cqa-font-medium cqa-mb-2 cqa-whitespace-nowrap cqa-block\">\n          Video {{ currentVideoIndex + 1 }} playing out of {{ videoUrls?.length || 0 }}\n        </span>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <button\n            *ngIf=\"hasMultipleVideos && !isVideoFullMode\"\n            type=\"button\"\n            class=\"cqa-bg-transparent cqa-border-none cqa-cursor-pointer !cqa-px-0 cqa-flex cqa-items-center cqa-justify-center hover:cqa-opacity-70 cqa-transition-opacity cqa-outline-none\"\n            style=\"pointer-events: auto;\"\n            [disabled]=\"currentVideoIndex === 0\"\n            [ngClass]=\"{'cqa-opacity-50 cqa-cursor-not-allowed': currentVideoIndex === 0}\"\n            (click)=\"prevVideo()\"\n            matTooltip=\"Previous video\"\n            matTooltipPosition=\"above\">\n            <mat-icon class=\"cqa-w-4 cqa-h-4 !cqa-text-[16px] cqa-text-[#374151]\" [ngClass]=\"{'cqa-opacity-50 cqa-cursor-not-allowed': currentVideoIndex === 0}\">skip_previous</mat-icon>\n          </button>\n\n          <div class=\"cqa-flex cqa-items-center cqa-justify-center\" style=\"width: 16px; height: 16px;\">\n            <mat-progress-spinner\n              *ngIf=\"isPlayerSwitching\"\n              mode=\"indeterminate\"\n              diameter=\"16\"\n              class=\"cqa-inline-block\">\n            </mat-progress-spinner>\n            <button \n              *ngIf=\"!isPlayerSwitching\"\n              type=\"button\"\n              class=\"cqa-bg-transparent cqa-border-none cqa-cursor-pointer !cqa-px-0 cqa-flex cqa-items-center cqa-justify-center hover:cqa-opacity-70 cqa-transition-opacity cqa-outline-none\"\n              style=\"pointer-events: auto;\"\n              (click)=\"togglePlay()\"\n              matTooltip=\"{{ isPlaying ? 'Pause' : 'Play' }}\"\n              matTooltipPosition=\"above\">\n              <span *ngIf=\"!isPlaying\" class=\"cqa-flex cqa-items-center cqa-justify-center\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <path d=\"M3 2L13 8L3 14V2Z\" fill=\"#374151\"/>\n                </svg>\n              </span>\n              <span *ngIf=\"isPlaying\" class=\"cqa-flex cqa-items-center cqa-justify-center\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                  <rect x=\"3\" y=\"2\" width=\"3\" height=\"12\" fill=\"#374151\"/>\n                  <rect x=\"10\" y=\"2\" width=\"3\" height=\"12\" fill=\"#374151\"/>\n                </svg>\n              </span>\n            </button>\n          </div>\n\n          <button\n            *ngIf=\"hasMultipleVideos && !isVideoFullMode\"\n            type=\"button\"\n            class=\"cqa-bg-transparent cqa-border-none cqa-cursor-pointer !cqa-px-0 cqa-flex cqa-items-center cqa-justify-center hover:cqa-opacity-70 cqa-transition-opacity cqa-outline-none\"\n            style=\"pointer-events: auto;\"\n            [disabled]=\"videoUrls && (currentVideoIndex >= videoUrls.length - 1)\"\n            [ngClass]=\"{'cqa-opacity-50 cqa-cursor-not-allowed': videoUrls && (currentVideoIndex >= videoUrls.length - 1)}\"\n            (click)=\"nextVideo()\"\n            matTooltip=\"Next video\"\n            matTooltipPosition=\"above\">\n            <mat-icon class=\"cqa-w-4 cqa-h-4 !cqa-text-[16px] cqa-text-[#374151]\" [ngClass]=\"{'cqa-opacity-50 cqa-cursor-not-allowed': videoUrls && (currentVideoIndex >= videoUrls.length - 1)}\">skip_next</mat-icon>\n          </button>\n\n          <span\n            class=\"cqa-text-[#9CA3AF] cqa-text-[9px] cqa-font-normal cqa-whitespace-nowrap cqa-select-none cqa-inline-block\"\n            style=\"width: 40px; text-align: center;\">\n            {{ formatTime(isVideoFullMode ? (globalCurrentTimeMs / 1000) : (vplayer?.nativeElement?.currentTime || 0)) }}\n          </span>\n\n          <div #speedControlContainer class=\"cqa-relative cqa-mr-[8px] cqa-flex cqa-items-center cqa-justify-center\">\n            <button\n              type=\"button\"\n              class=\"cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-text-[#9CA3AF] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-whitespace-nowrap cqa-select-none hover:cqa-opacity-70 cqa-transition-opacity cqa-outline-none cqa-px-1\"\n              (click)=\"toggleSpeedControl()\"\n              [matTooltip]=\"'Playback Speed'\"\n              [matTooltipPosition]=\"'below'\">\n              {{ currentSpeed }}\n            </button>\n            \n            <div \n              *ngIf=\"isSpeedControlOpen\"\n              class=\"cqa-absolute cqa-bottom-full cqa-mb-2 cqa-right-0 cqa-bg-[#F0F0F1] cqa-rounded-lg cqa-overflow-hidden cqa-shadow-lg cqa-z-50\"\n              style=\"min-width: max-content; left: 50%; bottom: 0%; transform: translate(-50%, -50%); z-index: 101;\">\n              <cqa-segment-control\n                [segments]=\"speedSegments\"\n                [value]=\"currentSpeed\"\n                [containerBgColor]=\"'#F0F0F1'\"\n                (valueChange)=\"onSpeedChange($event)\">\n              </cqa-segment-control>\n            </div>\n          </div>\n    \n          <div class=\"cqa-flex-1 cqa-min-w-0\">\n            <div \n              #timelineBar\n              class=\"cqa-relative cqa-h-1 cqa-bg-gray-200 cqa-rounded-full cqa-cursor-pointer cqa-w-full\"\n              (click)=\"onTimelineClick($event)\">\n            \n            <div\n              *ngFor=\"let marker of (isVideoFullMode ? fullVideoMarkers : currentVideoMarkers)\"\n              class=\"cqa-absolute cqa-rounded-full\"\n              [style.left.%]=\"isVideoFullMode ? getGlobalFullStepLeftPosition(marker) : getStepLeftPosition(marker)\"\n              [style.width]=\"'8px'\"\n              [style.height]=\"'8px'\"\n              [style.background]=\"getGlobalMarkerColor(marker.level)\"\n              [style.border]=\"'2px solid ' + getGlobalMarkerResultColor(marker.result)\"\n              [style.box-sizing]=\"'border-box'\"\n              [attr.title]=\"marker.title || ''\"\n              style=\"pointer-events: auto; z-index: 50; cursor: pointer; transform: translate(-50%, -50%); top: 50%;\"\n              (click)=\"onMarkerClick($event, marker)\">\n            </div>\n            \n            <div\n              class=\"cqa-absolute cqa-left-0 cqa-top-0 cqa-h-full cqa-bg-blue-500 cqa-rounded-full\"\n              [style.width.%]=\"isVideoFullMode ? globalScrubberPercent : progress\"\n              [style.transition]=\"dragging ? 'none' : 'width 100ms'\"\n              style=\"pointer-events: none; z-index: 2;\">\n            </div>\n            \n            <div\n              class=\"cqa-absolute cqa-top-1/2 cqa-w-3 cqa-h-3 cqa-bg-blue-600 cqa-rounded-full cqa-cursor-grab active:cqa-cursor-grabbing cqa-shadow-md\"\n              [style.left.%]=\"isVideoFullMode ? globalScrubberPercent : progress\"\n              style=\"transform: translate(-50%, -50%); z-index: 60;\"\n              (mousedown)=\"startDrag($event)\">\n            </div>\n            </div>\n          </div>\n\n          <span class=\"cqa-text-[#9CA3AF] cqa-text-[9px] cqa-font-normal cqa-whitespace-nowrap cqa-select-none cqa-mr-2\">\n            {{ formatTime(isVideoFullMode ? (totalDuration / 1000) : (vplayer?.nativeElement?.duration || 0)) }}\n          </span>\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"!isFastForwarding && !isLive && currentView === 'screenshots'\" class=\"cqa-h-full\">\n      <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center\" *ngIf=\"screenShotUrl\">\n        <ng-container *ngIf=\"hasDeviceFrame; else screenshotNoFrame\">\n          <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-4\">\n            <div class=\"cqa-relative cqa-h-full cqa-w-auto cqa-flex cqa-items-center cqa-justify-center cqa-max-h-full\" [ngClass]=\"{'cqa-rounded-md cqa-overflow-hidden': effectivePlatformType === 'browser', 'cqa-min-w-max': effectivePlatformType === 'device'}\">\n              <img\n                [src]=\"deviceMockupImage\"\n                alt=\"Device mockup\"\n                class=\"cqa-h-full cqa-w-auto cqa-object-contain cqa-block cqa-pointer-events-none cqa-z-10\"\n                [ngClass]=\"{'cqa-max-h-[inherit]': effectivePlatformType === 'browser', 'cqa-max-h-full': effectivePlatformType !== 'browser'}\"\n              />\n              <div class=\"cqa-absolute cqa-flex cqa-flex-col\" [ngStyle]=\"deviceScreenStyle\" [ngClass]=\"{'cqa-bg-white': effectivePlatformType !== 'browser'}\">\n                <img\n                  [src]=\"screenShotUrl\"\n                  alt=\"Screenshot\"\n                  [ngClass]=\"{'cqa-z-20': effectivePlatformType === 'browser'}\"\n                  class=\"cqa-object-contain cqa-w-full cqa-h-full cqa-block cqa-bg-[##F2F2F2]\"\n                />\n              </div>\n            </div>\n          </div>\n        </ng-container>\n        <ng-template #screenshotNoFrame>\n          <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-justify-center cqa-p-4\">\n            <img\n              [src]=\"screenShotUrl\"\n              alt=\"Screenshot\"\n              class=\"cqa-object-contain cqa-w-full cqa-h-full cqa-block cqa-bg-[##F2F2F2]\"\n            />\n          </div>\n        </ng-template>\n      </div>\n    \n      <div class=\"cqa-p-10 cqa-text-center cqa-text-gray-400 cqa-text-sm cqa-h-full cqa-flex cqa-items-center cqa-justify-center\" *ngIf=\"!screenShotUrl\">\n        No screenshot available\n      </div>\n    </div>\n\n    <div *ngIf=\"!isFastForwarding && !isLive && currentView === 'trace'\" class=\"cqa-h-full cqa-flex cqa-flex-col cqa-justify-center\">\n      <div class=\"cqa-w-full cqa-h-full cqa-flex cqa-items-center cqa-relative\" *ngIf=\"traceViewUrl\" [ngClass]=\"{'!cqa-h-full': effectivePlatformType === 'device'}\" style=\"padding-top: 48px; padding-bottom: 0px;\">\n        <div class=\"cqa-w-full cqa-h-full cqa-overflow-hidden cqa-relative\">\n          <iframe \n            [src]=\"safeTraceUrl\" \n            title=\"Trace Viewer\"\n            class=\"cqa-object-contain cqa-w-full cqa-min-h-[250px] cqa-max-h-full cqa-block cqa-bg-[##F2F2F2]\"\n            style=\"margin-top: -48px; height: calc(100% + 48px);\"\n            frameborder=\"0\"\n            allowfullscreen\n            width=\"100%\"\n            loading=\"lazy\"\n            (load)=\"onTraceViewerLoad()\"\n            (error)=\"onTraceViewerError()\">\n          </iframe>\n        </div>\n        \n        <div *ngIf=\"traceViewerLoading\" class=\"cqa-absolute cqa-inset-0 cqa-bg-[#F3F4F6] cqa-flex cqa-items-center cqa-justify-center cqa-z-10\">\n          <div class=\"cqa-text-center cqa-text-gray-400 cqa-text-sm\">\n            Loading trace viewer...\n          </div>\n        </div>\n        \n        <div *ngIf=\"traceViewerError\" class=\"cqa-absolute cqa-inset-0 cqa-bg-[#F3F4F6] cqa-flex cqa-items-center cqa-justify-center cqa-z-10\">\n          <div class=\"cqa-text-center cqa-text-gray-400 cqa-text-sm\">\n            Failed to load trace viewer\n          </div>\n        </div>\n      </div>\n    \n      <div class=\"cqa-p-10 cqa-text-center cqa-text-gray-400 cqa-text-sm cqa-h-full cqa-flex cqa-items-center cqa-justify-center\" *ngIf=\"!traceViewUrl\">\n        No trace available\n      </div>\n    </div>  \n  </div>\n</div>","import { Component, Input } from '@angular/core';\n\nexport type ConsoleAlertType = 'error' | 'warn' | 'info';\n\n@Component({\n  selector: 'cqa-console-alert',\n  templateUrl: './console-alert.component.html',\n  styleUrls: []\n})\nexport class ConsoleAlertComponent {\n  @Input() type: ConsoleAlertType = 'info';\n  @Input() message: string = '';\n  @Input() timestamp: string = '';\n\n  get iconName(): string {\n    switch (this.type) {\n      case 'error':\n        return 'error_outline';\n      case 'warn':\n        return 'warning_amber';\n      case 'info':\n        return 'info';\n      default:\n        return 'info';\n    }\n  }\n\n  get typeColor(): string {\n    switch (this.type) {\n      case 'error':\n        return '#E7000B';\n      case 'warn':\n        return '#E17100';\n      case 'info':\n        return '#155DFC';\n      default:\n        return '#155DFC';\n    }\n  }\n\n  get typeTextColor(): string {\n    switch (this.type) {\n      case 'error':\n        return '#E7000B';\n      case 'warn':\n        return '#E17100';\n      case 'info':\n        return '#155DFC';\n      default:\n        return '#155DFC';\n    }\n  }\n}\n\n","<div class=\"cqa-ui-root\">\n  <div \n    class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-px-4 cqa-py-3 cqa-transition-colors\"\n    style=\"width: 100%; border-radius: 10px; border: 1px solid #F5F5F5\">\n    \n    <mat-icon \n      class=\"cqa-flex-shrink-0 !cqa-w-[20px] !cqa-h-[20px] !cqa-text-[20px]\" \n      [style.color]=\"typeColor\">\n      {{ iconName }}\n    </mat-icon>\n    \n    <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-2 cqa-min-w-0\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n        <span \n          class=\"cqa-px-2 cqa-py-0.5 cqa-rounded cqa-text-xs cqa-font-medium cqa-border cqa-border-solid cqa-border-gray-200\"\n          [style.color]=\"typeTextColor\">\n          {{ type }}\n        </span>\n        \n        <span class=\"cqa-text-xs cqa-text-gray-500 cqa-font-normal\">\n          {{ timestamp }}\n        </span>\n      </div>\n      \n      <p class=\"cqa-text-sm cqa-text-gray-700 cqa-m-0 cqa-break-words\">\n        {{ message }}\n      </p>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-ai-debug-alert',\n  templateUrl: './ai-debug-alert.component.html',\n  styleUrls: []\n})\nexport class AiDebugAlertComponent {\n  @Input() message: string = '';\n  @Input() timestamp: string = '';\n}\n\n","<div class=\"cqa-ui-root\">\n  <div \n    class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-p-[13px] cqa-transition-colors\"\n    style=\"width: 100%; border-radius: 10px; border: 1px solid #E9D4FF; background-color: #FAF5FF;\">\n    \n    <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px] cqa-mt-[2px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <path d=\"M2.66503 9.33377C2.53888 9.3342 2.41519 9.29882 2.30834 9.23175C2.20148 9.16468 2.11586 9.06867 2.0614 8.95487C2.00694 8.84107 1.9859 8.71416 2.0007 8.58887C2.0155 8.46359 2.06555 8.34507 2.14503 8.2471L8.74503 1.4471C8.79454 1.38996 8.86201 1.35134 8.93636 1.33759C9.0107 1.32384 9.08752 1.33578 9.15419 1.37144C9.22086 1.4071 9.27342 1.46437 9.30326 1.53384C9.33309 1.60331 9.33842 1.68087 9.31837 1.75377L8.03837 5.7671C8.00062 5.86812 7.98795 5.97678 8.00143 6.08377C8.01491 6.19076 8.05414 6.29289 8.11576 6.38139C8.17738 6.46988 8.25955 6.54211 8.35522 6.59187C8.45089 6.64164 8.5572 6.66745 8.66503 6.6671H13.3317C13.4579 6.66667 13.5815 6.70205 13.6884 6.76912C13.7952 6.83619 13.8809 6.9322 13.9353 7.046C13.9898 7.1598 14.0108 7.28671 13.996 7.412C13.9812 7.53728 13.9312 7.6558 13.8517 7.75377L7.2517 14.5538C7.20219 14.6109 7.13473 14.6495 7.06038 14.6633C6.98603 14.677 6.90922 14.6651 6.84255 14.6294C6.77588 14.5938 6.72331 14.5365 6.69348 14.467C6.66364 14.3976 6.65832 14.32 6.67837 14.2471L7.95837 10.2338C7.99611 10.1328 8.00879 10.0241 7.99531 9.9171C7.98183 9.81011 7.94259 9.70798 7.88097 9.61948C7.81935 9.53099 7.73719 9.45876 7.64152 9.40899C7.54585 9.35923 7.43954 9.33342 7.3317 9.33377H2.66503Z\" stroke=\"#9810FA\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n    </mat-icon>\n    \n    <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap\">\n        <span class=\"cqa-text-[13px] cqa-text-[#A1A1A1] cqa-font-normal\">\n          {{ timestamp }}\n        </span>\n      </div>\n      \n      <p class=\"cqa-text-[14px] sm:!cqa-text-[16px] cqa-text-[#404040] cqa-m-0 cqa-break-words cqa-whitespace-normal\">\n        {{ message }}\n      </p>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-network-request',\n  templateUrl: './network-request.component.html',\n  styleUrls: []\n})\nexport class NetworkRequestComponent {\n  @Input() statusCode: number = 200;\n  @Input() requestType: string = 'GET';\n  @Input() timestamp: string = '';\n  @Input() apiRoute: string = '';\n  @Input() duration: number = 0;\n  @Input() progress: number = 0; \n  private readonly MAX_DURATION = 1000;\n\n  get statusColor(): string {\n    if (this.statusCode >= 200 && this.statusCode < 300) {\n      return '#10B981';\n    }\n  \n    if (this.statusCode >= 300 && this.statusCode < 400) {\n      return '#F59E0B';\n    }\n  \n    return '#EF4444';\n  }\n\n  get progressPercentage(): number {\n    return Math.min(100, Math.max(0, this.progress));\n  }\n\n  get formattedDuration(): string {\n    return `${this.duration}ms`;\n  }\n}\n\n","<div class=\"cqa-ui-root\">\n  <div \n    class=\"cqa-flex cqa-flex-col cqa-px-4 cqa-py-3 cqa-transition-colors cqa-gap-1\" style=\"border-top: 1px solid #F5F5F5;\">\n    \n    <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n        <span \n          class=\"cqa-px-2 cqa-py-1 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-text-[#525252] cqa-uppercase\" style=\"border: 1px solid #0000001A;\">\n          {{ requestType }}\n        </span>\n        \n        <span \n          class=\"cqa-text-[16px] cqa-font-normal\"\n          [style.color]=\"statusColor\">\n          {{ statusCode }}\n        </span>\n\n        <span class=\"cqa-text-[13px] cqa-text-[#A1A1A1] cqa-font-normal\">\n            {{ timestamp }}\n          </span>\n      </div>\n    </div>\n    \n    <p class=\"cqa-text-[13px] cqa-text-[#171717] cqa-break-words\">\n      {{ apiRoute }}\n    </p>\n    \n    <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n      <span class=\"cqa-text-[13px] cqa-text-[#737373] cqa-font-normal\">\n        Duration: {{ formattedDuration }}\n      </span>\n      \n      <div class=\"cqa-max-w-[120px] !cqa-w-[120px] cqa-h-1 cqa-bg-gray-200 cqa-rounded-full cqa-overflow-hidden\">\n        <div \n          class=\"cqa-h-full cqa-transition-all cqa-duration-300\"\n          [style.width.%]=\"progressPercentage\"\n          [style.background-color]=\"statusColor\">\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\n\nexport type RunStatus = 'passed' | 'failed' | 'aborted' | 'running' | 'stopped' | 'queued' | 'not-executed' | 'unknown';\nexport type RunType = 'automated' | 'manual';\nexport type CardSize = 'normal' | 'small';\nexport type Platform = 'ios' | 'android' | 'web' | 'chromium' | 'desktop';\n\n@Component({\n  selector: 'cqa-run-history-card',\n  templateUrl: './run-history-card.component.html',\n  styleUrls: []\n})\nexport class RunHistoryCardComponent {\n  @Input() id!: number;\n  @Input() status!: RunStatus;\n  @Input() type!: RunType;\n  @Input() timestamp!: string;\n  @Input() duration!: string;\n  @Input() runLabel?: string;\n  @Input() errorMessage?: string;\n  @Input() size: CardSize = 'normal';\n  @Input() durationTooltip?: string;\n  @Input() platform?: Platform;\n  @Output() headingClicked = new EventEmitter<void>();\n\n  get statusLabel(): string {\n    switch (this.status) {\n      case 'passed':\n        return 'Passed';\n      case 'failed':\n        return 'Failed';\n      case 'aborted':\n        return 'Aborted';\n      case 'running':\n        return 'Running';\n      case 'stopped':\n        return 'Stopped';\n      case 'queued':\n        return 'Queued';\n      case 'not-executed':\n        return 'Not Executed';\n      case 'unknown':\n        return 'Unknown';\n      default:\n        return '';\n    }\n  }\n\n  get statusColor(): string {\n    switch (this.status) {\n      case 'passed':\n        return '#00C950';\n      case 'failed':\n        return '#FB2C36';\n      case 'aborted':\n        return '#F97316';\n      case 'running':\n        return '#3B82F6';\n      case 'stopped':\n        return '#EF4444';\n      case 'queued':\n        return '#8B5CF6';\n      case 'not-executed':\n        return '#6B7280';\n      case 'unknown':\n        return '#9CA3AF';\n      default:\n        return '#6B7280';\n    }\n  }\n\n  get statusIconBgColor(): string {\n    switch (this.status) {\n        case 'passed':\n            return '#DCFCE7';\n        case 'failed':\n            return '#ffe2e2';\n        case 'aborted':\n            return '#FFEDD5'; \n        case 'running':\n            return '#DBEAFE';\n        case 'stopped':\n            return '#FEE2E2';\n        case 'queued':\n            return '#EDE9FE';\n        case 'not-executed':\n            return '#F3F4F6';\n        case 'unknown':\n            return '#F3F4F6';\n        default:\n            return '#E5E7EB';\n    }\n  }\n\n  get statusIcon(): string {\n    switch (this.status) {\n      case 'passed':\n        return 'check';\n      case 'failed':\n        return 'close';\n      case 'aborted':\n        return 'warning';\n      case 'running':\n        return 'schedule';\n      case 'stopped':\n        return 'stop';\n      case 'queued':\n        return 'hourglass_empty';\n      case 'not-executed':\n        return 'remove_circle_outline';\n      case 'unknown':\n        return 'help_outline';\n      default:\n        return 'help_outline';\n    }\n  }\n\n  get typeIcon(): string {\n    return this.type === 'automated' ? 'settings' : 'person';\n  }\n\n  get typeLabel(): string {\n    return this.type === 'automated' ? 'Automated' : 'Manual';\n  }\n\n  get isSmall(): boolean {\n    return this.size === 'small';\n  }\n\n  get statusIconContainerStyles(): { [key: string]: string } {\n    return {\n      'background-color': this.statusIconBgColor,\n      'width': this.isSmall ? '16px' : '20px',\n      'height': this.isSmall ? '16px' : '20px',\n      'border-radius': '4px',\n      'display': 'inline-flex',\n      'align-items': 'center',\n      'justify-content': 'center'\n    };\n  }\n\n  get statusIconStyles(): { [key: string]: string } {\n    return {\n      'color': this.statusColor,\n      'font-size': this.isSmall ? '10px' : '12px',\n      'width': this.isSmall ? '10px' : '12px',\n      'height': this.isSmall ? '10px' : '12px'\n    };\n  }\n\n  get statusBadgeStyles(): { [key: string]: string } {\n    return {\n      'background-color': this.statusColor\n    };\n  }\n\n  get runLabelStyles(): { [key: string]: string } {\n    return {\n      'background-color': '#ecedfe',\n      'padding': this.isSmall ? '2px 6px' : '2px 8px',\n      'border-radius': this.isSmall ? '5px' : '4px',\n      'font-size' : this.isSmall ? '8px' : '10px',\n      'line-height': this.isSmall ? '12px' : '15px'\n    };\n  }\n\n  get cardPadding(): string {\n    return this.isSmall ? '10px' : '12px';\n  }\n\n  get borderLeftWidth(): string {\n    return this.isSmall ? '3px' : '4px';\n  }\n\n  get platformIcon(): string {\n    if (!this.platform) return '';\n    switch (this.platform) {\n      case 'ios':\n        return 'fab fa-apple';\n      case 'android':\n        return 'android';\n      case 'web':\n        return 'language';\n      case 'chromium':\n        return 'web';\n      case 'desktop':\n        return 'desktop_windows';\n      default:\n        return '';\n    }\n  }\n\n  get platformIconLibrary(): 'mat' | 'fa' {\n    if (!this.platform) return 'mat';\n    return this.platform === 'ios' ? 'fa' : 'mat';\n  }\n\n  get platformLabel(): string {\n    if (!this.platform) return '';\n    switch (this.platform) {\n      case 'ios':\n        return 'iOS';\n      case 'android':\n        return 'Android';\n      case 'web':\n        return 'Web';\n      case 'chromium':\n        return 'Chromium';\n      case 'desktop':\n        return 'Web';\n      default:\n        return '';\n    }\n  }\n\n  linkClicked(){\n    this.headingClicked.emit();\n  }\n\n}","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px;\">\n  <div class=\"cqa-bg-white cqa-rounded-lg cqa-shadow-sm cqa-flex cqa-flex-col\" [ngStyle]=\"{\n      padding: cardPadding,\n      border: '1px solid #E4E4E4',\n      'border-left-color': statusColor,\n      'border-left-width': borderLeftWidth\n    }\">\n\n    <!-- Header: Run ID and Status Badge -->\n    <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2 cqa-flex-wrap\" [ngClass]=\"{\n        'cqa-mb-[10px]': isSmall,\n        'cqa-mb-2': !isSmall\n      }\">\n      <div class=\"cqa-flex cqa-items-center\" [ngClass]=\"{ 'cqa-gap-[6px]': isSmall, 'cqa-gap-2': !isSmall }\">\n        <span [ngStyle]=\"statusIconContainerStyles\">\n          <mat-icon [ngStyle]=\"statusIconStyles\">\n            {{ statusIcon }}\n          </mat-icon>\n        </span>\n        <span class=\"cqa-font-semibold cqa-cursor-pointer cqa-underline cqa-text-[#3f43ee]\" [ngClass]=\"{\n            'cqa-text-xs': isSmall,\n            'cqa-text-sm': !isSmall\n          }\" (click)=\"linkClicked()\">\n          #{{ id }}\n        </span>\n      </div>\n\n      <!-- Status Badge -->\n      <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-rounded-md cqa-font-medium cqa-text-white cqa-px-2\"\n        [ngClass]=\"{\n          'cqa-py-[2px] cqa-text-[10px]': isSmall,\n          'cqa-py-1 cqa-text-xs': !isSmall\n        }\" [ngStyle]=\"statusBadgeStyles\">\n        {{ statusLabel }}\n      </span>\n    </div>\n\n    <!-- Type and Timestamp -->\n    <div class=\"cqa-flex cqa-items-center cqa-text-[#636363]\" [ngClass]=\"{\n          'cqa-gap-1': isSmall,\n          'cqa-gap-[6px]': !isSmall,\n          'cqa-mb-2': isSmall,\n          'cqa-mb-[6px]': !isSmall\n        }\">\n      <mat-icon [ngClass]=\"{\n        'cqa-text-[12px] cqa-w-3 cqa-h-3': isSmall,\n        'cqa-text-[14px] cqa-w-[14px] cqa-h-[14px]': !isSmall }\">\n        {{ typeIcon }}\n      </mat-icon>\n      <span [ngClass]=\"{ 'cqa-text-[10px]': isSmall, 'cqa-text-xs': !isSmall }\">\n        {{ typeLabel }}\n      </span>\n    </div>\n\n    <!-- Timestamp -->\n    <div class=\"cqa-font-normal cqa-text-[#0B0B0B] cqa-leading-normal\" [ngClass]=\"{\n        'cqa-text-sm': !isSmall,\n        'cqa-text-[11px]': isSmall,\n        'cqa-mb-2': isSmall,\n        'cqa-mb-[6px]': !isSmall\n      }\">\n      {{ timestamp }}\n    </div>\n\n    <!-- Duration, Platform and Run Label -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\" [ngClass]=\"{\n        'cqa-gap-1': isSmall,\n        'cqa-gap-2': !isSmall\n      }\">\n        <div class=\"cqa-flex cqa-items-center cqa-text-[#636363]\" [ngClass]=\"{\n          'cqa-gap-1': isSmall,\n          'cqa-gap-[6px]': !isSmall\n        }\" [title]=\"durationTooltip\">\n          <mat-icon [ngClass]=\"{\n            'cqa-text-[12px] cqa-w-3 cqa-h-3': isSmall,\n            'cqa-text-[14px] cqa-w-[14px] cqa-h-[14px]': !isSmall }\" style=\"flex-shrink: 0;\">\n            schedule\n          </mat-icon>\n          <span [ngClass]=\"{\n            'cqa-text-[8px]': isSmall,\n            'cqa-text-[10px]': !isSmall\n          }\">\n            {{ duration }}\n          </span>\n        </div>\n\n        <cqa-badge \n          *ngIf=\"platform\"\n          [label]=\"platformLabel\"\n          [icon]=\"platformIcon\"\n          [iconLibrary]=\"platformIconLibrary\"\n          [size]=\"isSmall ? 'extra-small' : 'small'\"\n          variant=\"default\"\n          [iconSize]=\"isSmall ? 10 : 12\">\n        </cqa-badge>\n      </div>\n\n      <span *ngIf=\"runLabel\" class=\"cqa-text-[#3F43EE] cqa-rounded-md cqa-whitespace-nowrap\"\n        [ngStyle]=\"runLabelStyles\"\n        [ngClass]=\"{ 'cqa-font-medium': !isSmall }\">\n        {{ runLabel }}\n      </span>\n    </div>\n\n    <!-- Error Message (only for failed status and normal size) -->\n    <div *ngIf=\"errorMessage && status === 'failed' && !isSmall\" class=\"cqa-mt-2 cqa-pt-2\"\n      style=\"border-top: 1px solid #E4E4E4;\">\n      <p class=\"cqa-text-[10px] cqa-text-[#E7000B]\">\n        {{ errorMessage }}\n      </p>\n    </div>\n  </div>\n</div>","import { Component, Input } from '@angular/core';\n\nexport type AiPromptCardOperation = 'created' | 'edited' | 'duplicated' | 'deleted' | 'converted';\n\n@Component({\n  selector: 'cqa-ai-prompt-card',\n  templateUrl: './ai-prompt-card.component.html',\n  styleUrls: []\n})\nexport class AiPromptCardComponent {\n  @Input() stepNumber!: string;\n  @Input() stepName!: string;\n  @Input() timestamp!: string;\n  @Input() runVersion?: string;\n  @Input() promptText!: string;\n  @Input() isFailed = false;\n  @Input() operationLabel?: AiPromptCardOperation;\n\n  get accentColor(): string {\n    return this.isFailed ? '#FB2C36' : '#3F43EE';\n  }\n\n  get titleColor(): string {\n    return this.isFailed ? '#FB2C36' : '#161617';\n  }\n\n  get stepPrefix(): string {\n    return `Step ${this.stepNumber} — `;\n  }\n\n  get metaLine(): string {\n    return this.runVersion ? `${this.timestamp} · Run ${this.runVersion}` : this.timestamp;\n  }\n\n  get operationBadgeText(): string {\n    switch (this.operationLabel) {\n      case 'created':    return 'Created';\n      case 'edited':     return 'Edited';\n      case 'duplicated': return 'Duplicated';\n      case 'deleted':    return 'Deleted';\n      case 'converted':  return 'Converted';\n      default: return '';\n    }\n  }\n\n  get operationBadgeColors(): { bg: string; text: string; border: string } {\n    switch (this.operationLabel) {\n      case 'created':    return { bg: '#ECFDF5', text: '#047857', border: '#A7F3D0' };\n      case 'edited':     return { bg: '#FFFBEB', text: '#B45309', border: '#FDE68A' };\n      case 'duplicated': return { bg: '#EEF2FF', text: '#4338CA', border: '#C7D2FE' };\n      case 'deleted':    return { bg: '#FEF2F2', text: '#B42318', border: '#FECACA' };\n      case 'converted':  return { bg: '#CFFAFE', text: '#155E75', border: '#A5F3FC' };\n      default: return { bg: '#F3F4F6', text: '#374151', border: '#E5E7EB' };\n    }\n  }\n}\n","<div class=\"cqa-ui-root cqa-font-inter\" style=\"display: block; width: 100%;\">\n  <div class=\"cqa-bg-white cqa-rounded-lg cqa-overflow-hidden\"\n    style=\"border: 1px solid #E4E4E499;\">\n\n    <!-- Header section: sparkle icon + step title + meta line -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"padding: 6px 12px; border-bottom: 1px solid #E4E4E499;\">\n      <svg class=\"cqa-ai-prompt-card__logo\" width=\"18\" height=\"19\" viewBox=\"0 0 18 19\" fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\"\n        [ngStyle]=\"{ color: accentColor, 'flex-shrink': '0', 'margin-top': '2px' }\">\n        <path d=\"M9.01881 0C9.12979 0.0480032 9.17718 0.165227 9.22261 0.274119C9.24539 0.337566 9.26628 0.401358 9.28657 0.465659C9.29452 0.490298 9.30246 0.514938 9.31065 0.540324C9.41613 0.871899 9.51008 1.20702 9.60457 1.54191C9.62593 1.61751 9.64739 1.69308 9.66885 1.76865C9.7781 2.15341 9.88654 2.5384 9.99438 2.92356C10.0095 2.97765 10.0247 3.03175 10.0398 3.08584C10.0826 3.23834 10.1252 3.39085 10.1677 3.54344C10.2573 3.86586 10.3495 4.18733 10.4476 4.50724C10.4561 4.53523 10.4647 4.56321 10.4735 4.59205C10.7284 5.41499 11.0896 6.15257 11.6818 6.78081C11.6965 6.79715 11.7111 6.81349 11.7262 6.83032C11.979 7.10257 12.3034 7.32071 12.6276 7.49678C12.6441 7.5059 12.6606 7.51501 12.6776 7.5244C13.6317 8.04176 14.779 8.2693 15.8124 8.57217C16.2652 8.70496 16.7166 8.84194 17.1663 8.98495C17.1979 8.99499 17.2296 9.00502 17.2612 9.01503C17.3557 9.04495 17.45 9.07539 17.5442 9.10622C17.5662 9.11323 17.5882 9.12024 17.6108 9.12746C17.7406 9.17079 17.8648 9.22194 17.9713 9.31057C18.0038 9.38216 18.0038 9.38216 17.995 9.45376C17.8913 9.55776 17.7884 9.60653 17.6516 9.6541C17.632 9.66112 17.6124 9.66815 17.5923 9.67538C17.3612 9.7572 17.127 9.8288 16.8925 9.89975C16.8444 9.91442 16.7963 9.9291 16.7482 9.94378C16.4514 10.0341 16.1542 10.1226 15.8566 10.21C15.4646 10.3252 15.0733 10.4423 14.6822 10.5607C14.6182 10.5801 14.5541 10.5994 14.49 10.6187C14.1534 10.7199 13.8185 10.8248 13.4863 10.94C13.4587 10.9495 13.4312 10.959 13.4028 10.9688C12.2902 11.3595 11.4422 12.0884 10.9114 13.1543C10.6253 13.7534 10.4565 14.4012 10.2843 15.0405C10.2377 15.2131 10.1882 15.3846 10.1381 15.5561C10.0988 15.6911 10.0604 15.8262 10.023 15.9617C10.0185 15.9778 10.0141 15.9939 10.0095 16.0106C9.98788 16.0886 9.96638 16.1668 9.94503 16.2449C9.89039 16.443 9.83156 16.6395 9.77111 16.8359C9.66383 17.1849 9.5662 17.5365 9.46917 17.8885C9.32288 18.4185 9.32288 18.4185 9.23993 18.6733C9.23443 18.6904 9.22893 18.7076 9.22326 18.7252C9.19298 18.8159 9.16183 18.8994 9.10453 18.9761C9.01734 18.9955 9.01734 18.9955 8.93901 19C8.84946 18.8682 8.79016 18.7406 8.74265 18.5885C8.73574 18.567 8.72882 18.5454 8.7217 18.5232C8.63368 18.2452 8.55502 17.9644 8.47634 17.6836C8.45832 17.6194 8.44021 17.5552 8.42211 17.4911C8.2872 17.0127 8.15451 16.5337 8.02202 16.0546C7.47014 13.6847 7.47014 13.6847 6.078 11.7687C6.05569 11.7504 6.03338 11.732 6.01039 11.7131C5.09826 10.9757 3.89667 10.7027 2.7963 10.3827C2.52415 10.3035 2.2521 10.224 1.98006 10.1444C1.95628 10.1374 1.95628 10.1374 1.93201 10.1303C1.53962 10.0155 1.14735 9.90032 0.756448 9.78042C0.739911 9.77539 0.723375 9.77035 0.706338 9.76517C0.105798 9.58198 0.105798 9.58198 0.00129307 9.45376C-0.00166252 9.39559 -0.00166252 9.39559 0.0249378 9.33443C0.134167 9.22639 0.240153 9.18012 0.38432 9.13307C0.405194 9.12599 0.426068 9.11891 0.447574 9.11162C0.511506 9.09007 0.575577 9.069 0.639702 9.04805C0.658001 9.04198 0.676301 9.03592 0.695155 9.02968C0.82457 8.98684 0.95445 8.94561 1.08452 8.90485C1.11648 8.8948 1.11648 8.8948 1.14909 8.88454C1.70454 8.71017 2.26361 8.54789 2.82252 8.38525C3.23899 8.26404 3.65476 8.14082 4.06921 8.01269C4.08825 8.00683 4.1073 8.00097 4.12692 7.99493C5.087 7.69914 6.02557 7.27945 6.64547 6.44669C6.65475 6.43434 6.66403 6.42199 6.6736 6.40927C7.36395 5.48498 7.63315 4.36097 7.93391 3.26421C8.03285 2.90351 8.13298 2.54314 8.23345 2.18287C8.26127 2.0831 8.28906 1.98333 8.31673 1.88352C8.42788 1.48261 8.5407 1.08224 8.66 0.683712C8.67116 0.646393 8.68227 0.609057 8.69333 0.571704C8.86035 0.00841829 8.86035 0.00841828 9.01881 0Z\" fill=\"currentColor\"/>\n        <path d=\"M14.4717 1.17245C14.5802 1.29646 14.6019 1.4422 14.6357 1.60054C14.7485 2.09799 14.8783 2.55539 15.3291 2.84435C15.6072 2.99959 15.9386 3.07024 16.2468 3.13696C16.3768 3.16569 16.4867 3.20383 16.5982 3.28009C16.6234 3.32036 16.6234 3.32036 16.6219 3.39046C16.596 3.47572 16.5733 3.50321 16.5051 3.55901C16.4306 3.58419 16.4306 3.58419 16.3411 3.60376C16.3073 3.61161 16.2734 3.61954 16.2396 3.62753C16.2215 3.63178 16.2034 3.63602 16.1847 3.64039C15.6337 3.76904 15.6337 3.76904 15.1574 4.06019C15.1419 4.07277 15.1264 4.08536 15.1105 4.09832C14.7701 4.40129 14.6981 4.90525 14.5956 5.32743C14.5897 5.35062 14.5839 5.3738 14.5778 5.39769C14.5727 5.41822 14.5677 5.43874 14.5624 5.45989C14.5403 5.52256 14.5174 5.56343 14.4717 5.61146C14.3444 5.62777 14.3444 5.62777 14.2825 5.61146C14.1841 5.53443 14.162 5.44669 14.1363 5.3288C14.132 5.31054 14.1277 5.29229 14.1233 5.27348C14.1095 5.21517 14.0962 5.15678 14.083 5.09835C13.9793 4.64335 13.8623 4.19694 13.4488 3.93024C13.1256 3.74834 12.7327 3.66231 12.3715 3.59284C12.2725 3.57204 12.2158 3.54587 12.1545 3.46355C12.1412 3.38002 12.1412 3.38002 12.1545 3.29649C12.2487 3.19808 12.3478 3.17406 12.4752 3.14435C12.5153 3.13432 12.5554 3.12422 12.5955 3.11405C12.6163 3.10883 12.637 3.10361 12.6583 3.09824C12.764 3.07078 12.8686 3.04 12.9732 3.00861C12.9922 3.00305 13.0112 2.99749 13.0308 2.99175C13.2434 2.92759 13.4269 2.84553 13.5968 2.69985C13.6127 2.68669 13.6285 2.67352 13.6449 2.65995C13.9094 2.41969 13.9992 2.05873 14.0808 1.72192C14.087 1.69635 14.0932 1.67078 14.0997 1.64444C14.112 1.59308 14.1242 1.54165 14.1361 1.49018C14.1446 1.45436 14.1446 1.45436 14.1533 1.41782C14.1583 1.39643 14.1633 1.37503 14.1684 1.35298C14.1902 1.28487 14.2188 1.23138 14.2589 1.17245C14.336 1.13356 14.39 1.15114 14.4717 1.17245Z\" fill=\"currentColor\"/>\n        <path d=\"M3.5901 13.1885C3.61823 13.1887 3.61823 13.1887 3.64693 13.1889C3.84874 13.1951 3.9853 13.2604 4.13393 13.3974C4.30688 13.5859 4.38674 13.7987 4.3822 14.0528C4.36277 14.2589 4.24237 14.4388 4.09467 14.5781C3.92083 14.7198 3.74546 14.7666 3.52332 14.76C3.33602 14.738 3.15981 14.6482 3.02706 14.5131C2.86197 14.2857 2.8137 14.0772 2.8379 13.7971C2.88788 13.5766 3.03195 13.3976 3.21621 13.2721C3.34422 13.2066 3.44718 13.1873 3.5901 13.1885Z\" fill=\"currentColor\"/>\n      </svg>\n      <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"gap: 2px;\">\n        <div class=\"cqa-font-semibold cqa-text-[12px] cqa-flex cqa-items-center\" style=\"gap: 6px;\" [ngStyle]=\"{ color: titleColor }\">\n          <span>{{ stepPrefix }}</span><span class=\"cqa-ai-prompt-card__step-name\" [innerHTML]=\"stepName\"></span>\n          <span *ngIf=\"operationLabel\" class=\"cqa-inline-flex cqa-items-center\"\n            [ngStyle]=\"{\n              'background-color': operationBadgeColors.bg,\n              'color': operationBadgeColors.text,\n              'border': '1px solid ' + operationBadgeColors.border,\n              'border-radius': '10px',\n              'padding': '1px 8px',\n              'font-size': '10px',\n              'font-weight': '600',\n              'line-height': '14px'\n            }\">\n            {{ operationBadgeText }}\n          </span>\n        </div>\n        <div class=\"cqa-text-[11px]\" style=\"color: #99999E;\">\n          {{ metaLine }}\n        </div>\n      </div>\n    </div>\n\n    <!-- Body section: quoted prompt with left accent bar -->\n    <div style=\"padding: 6px 12px;\">\n      <div style=\"background-color: #F7F7FA; padding: 10px 12px;  border-radius: 6px;\"\n      [ngStyle]=\"{ 'border-left': '3px solid ' + accentColor }\">\n      <p class=\"cqa-text-xs cqa-italic cqa-m-0\"\n        style=\"color: #4C4C51; line-height: 20.4px;\">\n        \"<span class=\"cqa-ai-prompt-card__prompt-body\" [innerHTML]=\"promptText\"></span>\"\n      </p>\n    </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input } from \"@angular/core\";\n\ntype ValueType = string | number | boolean | null | undefined;\nexport interface ConfigurationItem {\n  label: string;\n  value: ValueType;\n  icon?: string;\n  iconLibrary?: 'mat' | 'fa';\n  isFlag?: boolean;\n}\n\n@Component({\n  selector: 'cqa-configuration-card',\n  templateUrl: './configuration-card.component.html',\n  styleUrls: []\n})\nexport class ConfigurationCardComponent {\n  @Input() icon!: string;\n  @Input() title!: string;\n  @Input() data: ConfigurationItem[] = [];\n\n  // Check if value is empty/null/undefined\n  isEmptyValue(value: ValueType): boolean {\n    return value === null || value === undefined || value === '';\n  }\n\n  // Check if value is boolean\n  isBoolean(value: ValueType): boolean {\n    return typeof value === 'boolean';\n  }\n\n  // Get display value for item\n  getDisplayValue(item: ConfigurationItem): string {\n    if (this.isEmptyValue(item.value)) {\n      return 'Not set';\n    }\n    \n    if (this.isBoolean(item.value)) {\n      return item.value ? 'On' : 'Off';\n    }\n\n    if (item.isFlag && item.value) {\n      return String(item.value);\n    }\n    \n    return String(item.value);\n  }\n\n\n  getValueClass(item: ConfigurationItem): string {\n    const value = String(item.value).toLowerCase();\n    switch (value) {\n      case 'enabled':\n        return 'cqa-text-[#059669] cqa-bg-[#ECFDF5]';\n      case 'on failure':\n        return 'cqa-text-[#D97706] cqa-bg-[#FFFBEB]';\n      default:\n        return 'cqa-text-[#475569] cqa-bg-[#F1F5F9]';\n    }\n  }\n\n  getValueBorder(item: ConfigurationItem): string {\n    const value = String(item.value).toLowerCase();\n    switch (value) {\n      case 'enabled':\n        return '1px solid #D1FAE5';\n      case 'on failure':\n        return '1px solid #FEF3C7';\n      default:\n        return '1px solid #E2E8F0';\n    }\n  }\n\n  // Styles for header icon\n  get headerIconStyles(): { [key: string]: string } {\n    return {\n      'color': '#1A4EDA',\n      'font-size': '16px',\n      'width': '16px',\n      'height': '16px'\n    };\n  }\n}\n","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; min-width: 180px;\">\n\t<div class=\"cqa-bg-white cqa-rounded-lg\" style=\"border: 1px solid #E2E8F0; height: 100%;\">\n\t\t<!-- Section Header -->\n\t\t<div class=\"cqa-p-3 cqa-pb-2 cqa-flex cqa-items-center cqa-gap-2 cqa-bg-[#F5F5F566]\"\n\t\t\tstyle=\"border-bottom: 1px solid #E2E8F0;\">\n\t\t\t<ng-container *ngIf=\"icon\">\n\t\t\t\t<mat-icon [ngStyle]=\"headerIconStyles\">\n\t\t\t\t\t{{ icon }}\n\t\t\t\t</mat-icon>\n\t\t\t</ng-container>\n\t\t\t<div class=\"cqa-text-xs cqa-font-semibold cqa-color-[#636363] cqa-leading-normal\">\n\t\t\t\t{{ title }}\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- Configuration Items -->\n\t\t<div class=\"cqa-p-4 cqa-pt-3\" *ngIf=\"data.length > 0\">\n\t\t\t<div class=\"cqa-grid cqa-grid-cols-1 cqa-gap-y-[10px]\">\n\t\t\t\t<ng-container *ngFor=\"let item of data\">\n\t\t\t\t\t<!-- *ngIf=\"!isBoolean(item.value)\" -->\n\t\t\t\t\t<div class=\"cqa-flex cqa-gap-2 cqa-justify-between cqa-items-center cqa-h-[15px]\"\n\t\t\t\t\t\t[ngClass]=\"{ 'cqa-h-[21px]': isBoolean(item.value) || item.isFlag }\">\n\t\t\t\t\t\t<!-- Label -->\n\t\t\t\t\t\t<span class=\"cqa-text-xs cqa-text-[#64748B] cqa-font-regular\">\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t<!-- Value -->\n\t\t\t\t\t\t<div class=\"cqa-flex cqa-items-center cqa-gap-[6px]\">\n\t\t\t\t\t\t\t<mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"material-icons cqa-text-[#94A3B8] cqa-text-[12px]\n\t\t\t\t\t\t\t\tcqa-w-3 cqa-h-3\">\n\t\t\t\t\t\t\t\t{{ item.icon }}\n\t\t\t\t\t\t\t</mat-icon>\n\t\t\t\t\t\t\t<i *ngIf=\"item.icon && item.iconLibrary === 'fa'\" [ngClass]=\"item.icon\" class=\"cqa-text-[#94A3B8] cqa-text-[12px] cqa-w-3 cqa-h-3\"></i>\n\t\t\t\t\t\t\t<ng-container *ngIf=\"!item.isFlag\">\n\t\t\t\t\t\t\t\t<span *ngIf=\"!isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#334155] cqa-font-regular\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t<span *ngIf=\"isBoolean(item.value)\" class=\"cqa-text-xs cqa-text-[#475569] cqa-bg-[#F1F5F9] cqa-rounded-[4px] cqa-font-regular cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: '1px solid #E2E8F0' }\">\n\t\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</ng-container>\n\n\t\t\t\t\t\t\t<span *ngIf=\"item.isFlag\" class=\"cqa-text-xs cqa-rounded-[4px] cqa-font-medium cqa-py-1 cqa-px-[6px]\"\n\t\t\t\t\t\t\t\t[ngClass]=\"getValueClass(item)\"\n\t\t\t\t\t\t\t\t[ngStyle]=\"{ border: getValueBorder(item) }\">\n\t\t\t\t\t\t\t\t{{ getDisplayValue(item) }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>","import { Component, EventEmitter, Output, ChangeDetectionStrategy, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-view-compare-button',\n  template: `\n    <button\n      type=\"button\"\n      class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-min-w-[92px] cqa-px-3 cqa-py-1.5 cqa-text-xs cqa-font-medium cqa-rounded-[6px] cqa-border\"\n      [ngClass]=\"isFailureAction ? 'cqa-border-[#F7C9CD] cqa-text-[#FB2C36] cqa-bg-[#FDE8EA]' : 'cqa-border-[#D1D5DB] cqa-text-[#636363] cqa-bg-[#F9FAFB]'\"\n      (click)=\"clicked.emit()\"\n    >\n      {{ label }}\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ViewCompareButtonComponent {\n  @Input() label: string = 'View Compare';\n  @Input() isFailureAction = false;\n  @Output() clicked = new EventEmitter<void>();\n}\n","import { Component, EventEmitter, Input, Output, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n  selector: 'cqa-test-case-link-cell',\n  template: `\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-0.5\">\n      <button\n        type=\"button\"\n        class=\"cqa-text-xs cqa-font-medium cqa-text-[#155DFC] cqa-text-left cqa-bg-transparent cqa-border-0 cqa-p-0 cqa-cursor-pointer\"\n        (click)=\"onClick()\"\n      >\n        TC-{{ testCaseDisplayId }}\n      </button>\n      <span class=\"cqa-text-xs cqa-text-[#0B0B0B]\">{{ testCaseName || '—' }}</span>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TestCaseLinkCellComponent {\n  @Input() testCaseDisplayId: string | number = '—';\n  @Input() testCaseId?: number;\n  @Input() testCaseName: string = '';\n  @Output() clicked = new EventEmitter<number>();\n\n  onClick(): void {\n    if (this.testCaseId == null || Number.isNaN(this.testCaseId)) {\n      return;\n    }\n    this.clicked.emit(this.testCaseId);\n  }\n}\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DynamicSelectFieldConfig } from '../dynamic-select/dynamic-select-field.component';\nimport { DynamicTableColumn } from '../table/dynamic-table/dynamic-table.component';\nimport { ComponentRenderConfig } from '../table/dynamic-table/component-render-config.interface';\nimport { EmptyStateConfig } from '../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\nimport { ViewCompareButtonComponent } from './view-compare-button.component';\nimport { TestCaseLinkCellComponent } from './test-case-link-cell.component';\n\nexport interface TestDevice {\n  id: number;\n  testPlanId: number;\n  title: string;\n  browser: string;\n  platform: string;\n  browserVersion: string;\n}\n\nexport interface TestDeviceSettings {\n  title: string;\n  osVersion: string;\n  browser: string;\n  browserVersion: string;\n  resolution: string;\n  platform: string;\n  deviceName: string | null;\n}\n\nexport interface TestDeviceResult {\n  testDevice: TestDevice;\n  testDeviceSettings: TestDeviceSettings;\n}\n\nexport interface TestCaseResultData {\n  id: number;\n  browser: string;\n  testCaseId: number;\n  testPlanResultId: number;\n  result: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED';\n  status: 'STATUS_COMPLETED' | 'STATUS_IN_PROGRESS' | 'STATUS_QUEUED';\n  startTime: number;\n  platform: string;\n  endTime: number;\n  duration: number;\n  testDataSetName: string;\n  environment: string;\n  testDeviceResult: TestDeviceResult;\n}\n\nexport interface RunData {\n  id: number;\n  label: string;\n  result: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED';\n  startTime: number;\n  duration: number;\n  testDataSetName: string;\n  device: string;\n  browser: string;\n  platform: string;\n  environment?: string;\n}\n\nexport interface ComparisonSummary {\n  unchanged: number;\n  statusChanged: number;\n  added: number;\n  removed: number;\n  timing: number;\n}\n\nexport interface StepComparison {\n  stepId: string;\n  stepTitle: string;\n  testCaseId?: string;\n  priorityName?: string | null;\n  runAId?: number;\n  runBId?: number;\n  runAStatus?: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED';\n  runADuration?: number;\n  runBStatus?: 'SUCCESS' | 'FAILURE' | 'ABORTED' | 'NOT_EXECUTED' | 'QUEUED' | 'STOPPED';\n  runBDuration?: number;\n  change: string;\n  /** 1-based row index in full comparison list (test plan table; set by compare-runs). */\n  _compareRowOrdinal?: number;\n}\n\nexport interface ComparisonResponse {\n  summary: ComparisonSummary;\n  stepsComparison: StepComparison[];\n}\n\n/** Derived counts for test-plan compare summary cards (from step rows). */\nexport interface TestPlanCompareCardSummary {\n  totalCases: number;\n  passed: number;\n  failed: number;\n  regressions: number;\n  fixed: number;\n  newSteps: number;\n  removed: number;\n  noChange: number;\n}\n\nexport interface CompareRequest {\n  runAId: number;\n  runBId: number;\n}\n\nexport interface SearchRequest {\n  key: string;\n  query: string;\n}\n\n@Component({\n  selector: 'cqa-compare-runs',\n  templateUrl: './compare-runs.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CompareRunsComponent implements OnInit, OnChanges {\n  @Input() runs: TestCaseResultData[] = [];\n  @Input() comparisonData?: ComparisonResponse;\n  @Input() compareMode: 'testCase' | 'testPlan' = 'testCase';\n  @Input() initialRunAId?: number | null;\n  @Input() initialRunBId?: number | null;\n  @Input() autoCompareOnInit: boolean = false;\n  @Input() isLoadingRuns: boolean = false;\n  @Input() hasMoreRuns: boolean = false;\n  @Input() isComparingRuns: boolean = false;\n  @Input() hasComparedRuns: boolean = false;\n  @Input() pageSizeMenuDirection: 'auto' | 'up' | 'down' = 'auto';\n  /** When true, hides Run A/B dropdowns and the primary \"Compare Runs\" action (e.g. nested dialog from test plan View Compare). */\n  @Input() hideRunSelectorsAndCompareButton = false;\n  /** While test plan compare export API is in flight; drives Export button loading state. */\n  @Input() isExportingTestPlanCompare = false;\n\n  @Output() searchRuns = new EventEmitter<SearchRequest>();\n  @Output() loadMoreRuns = new EventEmitter<string>();\n  @Output() compareRuns = new EventEmitter<CompareRequest>();\n  @Output() viewCompare = new EventEmitter<{\n    runAId: number;\n    runBId: number;\n    row: StepComparison;\n    sourceRunAId: number | null;\n    sourceRunBId: number | null;\n  }>();\n  @Output() testCaseClick = new EventEmitter<number>();\n  /** Test plan modal: export compare results (GET test_plan_results/compare/export). */\n  @Output() exportTestPlanCompare = new EventEmitter<{ runAId: number; runBId: number }>();\n\n  form!: FormGroup;\n  runASelectConfig!: DynamicSelectFieldConfig;\n  runBSelectConfig!: DynamicSelectFieldConfig;\n\n  selectedRunA?: RunData;\n  selectedRunB?: RunData;\n  comparisonSummary?: ComparisonSummary;\n  stepComparisons: StepComparison[] = [];\n  /** Populated when test-plan comparison data is loaded; drives summary metric cards. */\n  testPlanCardSummary?: TestPlanCompareCardSummary;\n  tableColumns: DynamicTableColumn[] = [];\n  \n  pageIndex: number = 0;\n  pageSize: number = 10;\n  \n  emptyStateConfig: EmptyStateConfig = {\n    title: 'No Comparison Data',\n    description: 'Select two other runs to compare and see detailed step-by-step comparison results.',\n    imageUrl: EMPTY_STATE_IMAGES.COMPARE_RUNS,\n    actions: []\n  };\n\n  constructor(\n    private fb: FormBuilder,\n    private cdr: ChangeDetectorRef\n  ) { }\n\n  ngOnInit(): void {\n    this.initializeForm();\n    this.setupSelectConfigs();\n    this.setupTableColumns();\n    this.applyInitialSelectionsIfNeeded();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['runs'] && !changes['runs'].firstChange) {\n      this.setupSelectConfigs();\n      this.applyInitialSelectionsIfNeeded();\n      this.cdr.markForCheck();\n    }\n    \n    if (changes['comparisonData'] && this.comparisonData) {\n      this.handleComparisonData();\n    }\n\n    if (changes['compareMode'] && !changes['compareMode'].firstChange) {\n      this.setupTableColumns();\n      this.cdr.markForCheck();\n    }\n\n    if (changes['initialRunAId'] || changes['initialRunBId'] || changes['autoCompareOnInit']) {\n      this.autoCompareTriggered = false;\n      this.applyInitialSelectionsIfNeeded();\n      this.cdr.markForCheck();\n    }\n    \n    if (changes['isLoadingRuns']) {\n      this.updateSelectConfigsLoading();\n      this.cdr.markForCheck();\n    }\n  }\n\n  private initializeForm(): void {\n    this.form = this.fb.group({\n      runA: [null],\n      runB: [null]\n    });\n\n    this.form.valueChanges.subscribe(() => {\n      this.updateSelectedRuns();\n    });\n  }\n\n  private allOptionsCache: any[] = [];\n  private lastRuns: TestCaseResultData[] = [];\n  private autoCompareTriggered = false;\n\n  private setupSelectConfigs(): void {\n    const runAId = this.form?.get('runA')?.value;\n    const runBId = this.form?.get('runB')?.value;\n    \n    if (this.runs !== this.lastRuns) {\n      this.allOptionsCache = this.runs.map(run => {\n        const label = this.formatRunLabel(run);\n        const statusColor = this.getResultStatusColor(run.result);\n        const durationFormatted = this.formatDurationString(run.duration);\n\n        const [runNumberPartRaw, datePartRaw] = label.split('•');\n        const runNumberPart = runNumberPartRaw ? runNumberPartRaw.trim() : label;\n        const datePart = datePartRaw ? datePartRaw.trim() : '';\n\n        const runNumberLabel = datePart ? `${runNumberPart} •` : runNumberPart;\n        const runDateLabel = datePart;\n\n        return {\n          id: run.id,\n          value: run.id,\n          label,\n          name: label,\n          runNumberLabel,\n          runDateLabel,\n          status: run.result,\n          statusColor,\n          duration: run.duration,\n          durationFormatted\n        };\n      });\n      this.lastRuns = this.runs;\n    }\n\n    const hourRunFound = this.allOptionsCache.some(opt => opt?.durationFormatted?.includes('h'));\n    const minuteRunFound = this.allOptionsCache.some(opt => opt?.durationFormatted?.includes('m '));\n    if (hourRunFound || minuteRunFound) {\n      this.allOptionsCache.forEach(opt => {\n        opt.hasHourRun = hourRunFound;\n        opt.hasMinuteRun = minuteRunFound;\n      });\n    }\n\n    const runAOptions = this.allOptionsCache.filter(opt => opt.id !== runBId);\n    const runBOptions = this.allOptionsCache.filter(opt => opt.id !== runAId);\n\n    this.runASelectConfig = {\n      key: 'runA',\n      label: '',\n      placeholder: 'Search and select run',\n      options: runAOptions,\n      isCompareRuns: true,\n      searchable: true,\n      hasMore: this.hasMoreRuns,\n      isLoading: this.isLoadingRuns,\n      onSearch: (query: string) => this.handleSearchRuns(query, 'runA'),\n      onLoadMore: (query?: string) => this.handleLoadMoreRuns(query || '')\n    };\n\n    this.runBSelectConfig = {\n      key: 'runB',\n      label: '',\n      placeholder: 'Search and select run',\n      options: runBOptions,\n      isCompareRuns: true,\n      searchable: true,\n      hasMore: this.hasMoreRuns,\n      isLoading: this.isLoadingRuns,\n      onSearch: (query: string) => this.handleSearchRuns(query, 'runB'),\n      onLoadMore: (query?: string) => this.handleLoadMoreRuns(query || '')\n    };\n  }\n\n  private runLabelCache = new Map<number, string>();\n\n  private formatRunLabel(run: TestCaseResultData): string {\n    if (this.runLabelCache.has(run.id)) {\n      return this.runLabelCache.get(run.id)!;\n    }\n\n    const date = new Date(run.startTime);\n    const formattedDate = date.toLocaleString('en-US', {\n      month: 'short',\n      day: 'numeric',\n      hour: '2-digit',\n      minute: '2-digit',\n      second: '2-digit'\n    });\n    const label = `Run #${run.id} • ${formattedDate}`;\n    this.runLabelCache.set(run.id, label);\n    return label;\n  }\n\n  private updateSelectConfigsLoading(): void {\n    if (this.runASelectConfig) {\n      this.runASelectConfig = {\n        ...this.runASelectConfig,\n        isLoading: this.isLoadingRuns,\n        hasMore: this.hasMoreRuns\n      };\n    }\n    if (this.runBSelectConfig) {\n      this.runBSelectConfig = {\n        ...this.runBSelectConfig,\n        isLoading: this.isLoadingRuns,\n        hasMore: this.hasMoreRuns\n      };\n    }\n  }\n\n  handleSearchRuns(query: string, key: string): void {\n    this.searchRuns.emit({ key, query });\n  }\n\n  handleLoadMoreRuns(query: string): void {\n    this.loadMoreRuns.emit(query);\n  }\n\n  onSearchChange(event: SearchRequest): void {\n    console.log('onSearchChange', event);\n    this.searchRuns.emit(event);\n  }\n\n  onLoadMore(event: { key: string; query: string }): void {\n    this.loadMoreRuns.emit(event.query);\n  }\n\n  private updateSelectedRuns(): void {\n    const runAId = this.form.get('runA')?.value;\n    const runBId = this.form.get('runB')?.value;\n\n    const runA = this.runs.find(r => r.id === runAId);\n    const runB = this.runs.find(r => r.id === runBId);\n\n    this.selectedRunA = runA ? this.convertToRunData(runA) : undefined;\n    this.selectedRunB = runB ? this.convertToRunData(runB) : undefined;\n\n    this.setupSelectConfigs();\n    this.setupTableColumns();\n    this.cdr.markForCheck();\n  }\n\n  private convertToRunData(data: TestCaseResultData): RunData {\n    const device = data?.browser\n      ? data?.browser?.charAt(0)?.toUpperCase() + data?.browser?.slice(1)\n      : '';\n    const browser = data?.browser || '';\n    const platform = data?.platform || '';\n\n    return {\n      id: data.id,\n      label: this.formatRunLabel(data),\n      result: data.result,\n      startTime: data.startTime,\n      duration: data.duration,\n      testDataSetName: data.testDataSetName,\n      device,\n      browser,\n      platform,\n      environment: data.environment\n    };\n  }\n\n  private setupTableColumns(): void {\n    if (this.compareMode === 'testPlan') {\n      this.tableColumns = [\n        {\n          fieldId: 'rowIndex',\n          fieldName: '',\n          fieldValue: '_compareRowOrdinal',\n          isShow: true,\n          fixedPx: 44,\n          align: 'center'\n        },\n        {\n          fieldId: 'testCase',\n          fieldName: 'Test Cases',\n          isShow: true,\n          weight: 3,\n          render: (row: StepComparison): ComponentRenderConfig => ({\n            component: TestCaseLinkCellComponent,\n            inputs: {\n              testCaseDisplayId: row.testCaseId || row.stepId || '—',\n              testCaseId: this.getNumericTestCaseId(row),\n              testCaseName: row.stepTitle || '—'\n            },\n            outputs: {\n              clicked: () => this.onTestCaseClick(row)\n            }\n          })\n        },\n        {\n          fieldId: 'runA',\n          fieldName: 'Run A',\n          isShow: true,\n          weight: 1.2,\n          align: 'center',\n          render: (row: StepComparison) => this.renderStatusWithDuration(row.runAStatus, row.runADuration)\n        },\n        {\n          fieldId: 'runB',\n          fieldName: 'Run B',\n          isShow: true,\n          weight: 1.2,\n          align: 'center',\n          render: (row: StepComparison) => this.renderStatusWithDuration(row.runBStatus, row.runBDuration)\n        },\n        {\n          fieldId: 'change',\n          fieldName: 'Change Type',\n          fieldValue: 'change',\n          isShow: true,\n          weight: 1.4,\n          render: (row: StepComparison) => this.renderChangeChip(row.change)\n        },\n        {\n          fieldId: 'priority',\n          fieldName: 'Priority',\n          isShow: true,\n          weight: 1.1,\n          align: 'center',\n          render: (row: StepComparison) => this.renderPriorityChip(row.priorityName)\n        },\n        {\n          fieldId: 'actions',\n          fieldName: 'Actions',\n          isShow: true,\n          weight: 0.8,\n          align: 'center',\n          render: (row: StepComparison): ComponentRenderConfig => ({\n            component: ViewCompareButtonComponent,\n            inputs: {\n              label: this.getActionLabel(row),\n              isFailureAction: this.isFailureAction(row)\n            },\n            outputs: {\n              clicked: () => this.onViewCompare(row)\n            }\n          })\n        }\n      ];\n      return;\n    }\n\n    this.tableColumns = [\n      {\n        fieldId: 'rowIndex',\n        fieldName: '',\n        fieldValue: '_compareRowOrdinal',\n        isShow: true,\n        fixedPx: 44,\n        align: 'center'\n      },\n      {\n        fieldId: 'step',\n        fieldName: 'Step',\n        fieldValue: 'stepTitle',\n        isShow: true,\n        weight: 3,\n        render: (row: StepComparison) => {\n          const inner =\n            row.stepTitle != null && String(row.stepTitle).trim() !== ''\n              ? row.stepTitle\n              : '<span class=\"cqa-text-xs cqa-text-[#9CA3AF]\">—</span>';\n          return `\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"min-width:0;\">\n              <span class=\"cqa-text-xs cqa-text-[#0B0B0B]\">${inner}</span>\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'runA',\n        fieldName: this.getRunColumnHeader('A'),\n        isShow: true,\n        weight: 1.5,\n        align: 'center',\n        render: (row: StepComparison) => {\n          if (!row.runAStatus) {\n            return '<span class=\"cqa-text-xs cqa-text-[#9CA3AF]\">—</span>';\n          }\n          return `\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n              ${this.renderStatusIcon(row.runAStatus)}\n              <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">${this.formatDuration(row.runADuration || 0)}</span>\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'runB',\n        fieldName: this.getRunColumnHeader('B'),\n        isShow: true,\n        weight: 1.5,\n        align: 'center',\n        render: (row: StepComparison) => {\n          if (!row.runBStatus) {\n            return '<span class=\"cqa-text-xs cqa-text-[#636363]\"> — </span>';\n          }\n          return `\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-0.5\">\n              ${this.renderStatusIcon(row.runBStatus)}\n              <span class=\"cqa-text-[10px] cqa-text-[#636363]\">${this.formatDuration(row.runBDuration || 0)}</span>\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'change',\n        fieldName: 'Change',\n        fieldValue: 'change',\n        isShow: true,\n        weight: 1.5,\n        align: 'center',\n        render: (row: StepComparison) => this.renderChangeChip(row.change)\n      }\n    ];\n  }\n\n  private renderStatusOnly(status?: string): string {\n    if (!status) {\n      return '<span class=\"cqa-text-xs cqa-text-[#9CA3AF]\">—</span>';\n    }\n    return `\n      <div class=\"cqa-inline-flex cqa-items-center cqa-gap-1\">\n        ${this.renderStatusIcon(status)}\n        <span class=\"cqa-text-xs cqa-text-[#0B0B0B]\">${this.getStatusLabel(status)}</span>\n      </div>\n    `;\n  }\n\n  private renderStatusWithDuration(status?: string, duration?: number): string {\n    if (!status) {\n      return '<span class=\"cqa-text-xs cqa-text-[#9CA3AF]\">—</span>';\n    }\n    return `\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n        <div class=\"cqa-inline-flex cqa-items-center cqa-justify-center\">\n          ${this.renderStatusIcon(status)}\n        </div>\n        <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">${this.formatDuration(duration || 0)}</span>\n      </div>\n    `;\n  }\n\n  private applyInitialSelectionsIfNeeded(): void {\n    const runAId = this.initialRunAId;\n    const runBId = this.initialRunBId;\n    if (!this.form || runAId == null || runBId == null) {\n      return;\n    }\n\n    const hasRunA = this.runs?.some(r => r.id === runAId);\n    const hasRunB = this.runs?.some(r => r.id === runBId);\n    if (!hasRunA || !hasRunB) {\n      return;\n    }\n\n    if (this.form.get('runA')?.value !== runAId || this.form.get('runB')?.value !== runBId) {\n      this.form.patchValue({ runA: runAId, runB: runBId });\n    }\n\n    if (this.autoCompareOnInit && !this.autoCompareTriggered && !this.isComparingRuns) {\n      this.autoCompareTriggered = true;\n      setTimeout(() => this.onCompareClick());\n    }\n  }\n\n  private onViewCompare(row: StepComparison): void {\n    if (row.runAId == null || row.runBId == null) {\n      return;\n    }\n    const sourceRunAId = this.form?.get('runA')?.value ?? null;\n    const sourceRunBId = this.form?.get('runB')?.value ?? null;\n\n    this.viewCompare.emit({\n      runAId: row.runAId,\n      runBId: row.runBId,\n      row,\n      sourceRunAId,\n      sourceRunBId\n    });\n  }\n\n  private getNumericTestCaseId(row: StepComparison): number | null {\n    const candidate = row?.testCaseId ?? row?.stepId;\n    if (candidate == null) {\n      return null;\n    }\n    const parsed = Number(candidate);\n    return Number.isNaN(parsed) ? null : parsed;\n  }\n\n  private onTestCaseClick(row: StepComparison): void {\n    const testCaseId = this.getNumericTestCaseId(row);\n    if (testCaseId == null) {\n      return;\n    }\n    this.testCaseClick.emit(testCaseId);\n  }\n\n  onExportTestPlanCompare(): void {\n    const runAId = this.form?.get('runA')?.value;\n    const runBId = this.form?.get('runB')?.value;\n    if (runAId == null || runBId == null) {\n      return;\n    }\n    this.exportTestPlanCompare.emit({ runAId, runBId });\n  }\n\n  private renderChangeChip(change: string): string {\n    const normalizedChange = (change || '').toString().toUpperCase().trim();\n    const changeLabels: Record<string, string> = {\n      'UNCHANGED': 'Unchanged',\n      'NO CHANGE': 'No Change',\n      'STATUS_CHANGED': 'Status Changed',\n      'TIMING_CHANGED': 'Timing Changed',\n      'FIXED': 'Fixed',\n      'REGRESSION': 'Regression',\n      'ADDED': 'New',\n      'NEW STEP': 'New',\n      'REMOVED': 'Removed'\n      ,\n      'DELETED STEP': 'Deleted Step'\n    };\n    const changeColors: Record<string, { text: string; bg: string; dot: string }> = {\n      'UNCHANGED': { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' },\n      'NO CHANGE': { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' },\n      'TIMING_CHANGED': { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' },\n      'FIXED': { text: '#00A63E', bg: '#DDF5E8', dot: '#00C950' },\n      'REGRESSION': { text: '#FB2C36', bg: '#FDE8EA', dot: '#FB2C36' },\n      'STATUS_CHANGED': { text: '#FB2C36', bg: '#FDE8EA', dot: '#FB2C36' },\n      'ADDED': { text: '#155DFC', bg: '#DBEAFE', dot: '#0A84FF' },\n      'NEW STEP': { text: '#155DFC', bg: '#DBEAFE', dot: '#0A84FF' },\n      'REMOVED': { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' },\n      'DELETED STEP': { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' }\n    };\n\n    const label = changeLabels[normalizedChange] || change;\n    const token = changeColors[normalizedChange] || { text: '#6B7280', bg: '#F3F4F6', dot: '#9CA3AF' };\n\n    return `\n      <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-3 cqa-py-1 cqa-rounded-full cqa-text-xs cqa-font-medium cqa-leading-none cqa-w-max\" \n            style=\"background-color: ${token.bg}; color: ${token.text};\">\n        <span style=\"width: 10px; height: 10px; border-radius: 50%; background-color: ${token.dot}; display: inline-block;\"></span>\n        ${label}\n      </span>\n    `;\n  }\n\n  private renderPriorityChip(priority?: string | null): string {\n    const raw = (priority || '').toString().trim();\n    const normalized = raw.toUpperCase();\n\n    const priorityTokens: Record<string, { label: string; text: string; bg: string }> = {\n      CRITICAL: { label: 'Critical', text: '#FB2C36', bg: '#FDE8EA' },\n      HIGH: { label: 'High', text: '#FB2C36', bg: '#FDE8EA' },\n      MEDIUM: { label: 'Medium', text: '#D97706', bg: '#FEF3C7' },\n      NORMAL: { label: 'Normal', text: '#EA580C', bg: '#FDEFE3' },\n      LOW: { label: 'Low', text: '#A16207', bg: '#F5EEDC' }\n    };\n\n    const token = priorityTokens[normalized];\n    if (!token) {\n      const fallback = raw || 'Unassigned';\n      return `\n        <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-3 cqa-py-1 cqa-rounded-full cqa-text-xs cqa-font-medium cqa-leading-none cqa-w-max\"\n              style=\"background-color: #F3F4F6; color: #6B7280;\">\n          ${fallback}\n        </span>\n      `;\n    }\n\n    return `\n      <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-3 cqa-py-1 cqa-rounded-full cqa-text-xs cqa-font-medium cqa-leading-none cqa-w-max\"\n            style=\"background-color: ${token.bg}; color: ${token.text};\">\n        ${token.label}\n      </span>\n    `;\n  }\n\n  private isFailureAction(row: StepComparison): boolean {\n    const runBStatus = (row?.runBStatus || '').toString().toUpperCase().trim();\n    return runBStatus === 'FAILURE';\n  }\n\n  private getActionLabel(row: StepComparison): string {\n    return this.isFailureAction(row) ? 'View Failure' : 'View Compare';\n  }\n\n  private getRunColumnHeader(run: 'A' | 'B'): string {\n    const selectedRun = run === 'A' ? this.selectedRunA : this.selectedRunB;\n    if (selectedRun && selectedRun.id != null) {\n      return `Run #${selectedRun.id}`;\n    }\n    return run === 'A' ? 'Run A' : 'Run B';\n  }\n\n  private renderStatusIcon(status: string): string {\n    const upperStatus = status.toUpperCase();\n    if (upperStatus === 'SUCCESS') {\n      return `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <path d=\"M7.99998 14.6663C11.6819 14.6663 14.6666 11.6816 14.6666 7.99967C14.6666 4.31778 11.6819 1.33301 7.99998 1.33301C4.31808 1.33301 1.33331 4.31778 1.33331 7.99967C1.33331 11.6816 4.31808 14.6663 7.99998 14.6663Z\" stroke=\"#00C950\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M6 8.00033L7.33333 9.33366L10 6.66699\" stroke=\"#00C950\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>`;\n    } else if (upperStatus === 'FAILURE') {\n      return `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <path d=\"M8.00004 14.6673C11.6819 14.6673 14.6667 11.6825 14.6667 8.00065C14.6667 4.31875 11.6819 1.33398 8.00004 1.33398C4.31814 1.33398 1.33337 4.31875 1.33337 8.00065C1.33337 11.6825 4.31814 14.6673 8.00004 14.6673Z\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M10 6L6 10\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M6 6L10 10\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>`;\n    } else if (upperStatus === 'ABORTED' || upperStatus === 'STOPPED' || upperStatus === 'NOT_EXECUTED') {\n      return `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n        <path d=\"M8.00004 14.6673C11.6819 14.6673 14.6667 11.6825 14.6667 8.00065C14.6667 4.31875 11.6819 1.33398 8.00004 1.33398C4.31814 1.33398 1.33337 4.31875 1.33337 8.00065C1.33337 11.6825 4.31814 14.6673 8.00004 14.6673Z\" stroke=\"#9CA3AF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M6 8H10\" stroke=\"#9CA3AF\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>`;\n    } else if (upperStatus === 'QUEUED') {\n      return `\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" class=\"cqa-animate-spin\">\n        <path d=\"M8 1.33331V3.99998\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M8 12V14.6666\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M1.33337 8H4.00004\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M12 8H14.6667\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M3.28662 3.28662L5.17329 5.17329\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M10.8267 10.8267L12.7133 12.7133\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M3.28662 12.7133L5.17329 10.8267\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M10.8267 5.17329L12.7133 3.28662\" stroke=\"#3B82F6\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>`;\n    } else {\n      return `<span class=\"cqa-text-xs cqa-text-[#636363]\"> — </span>`;\n    }\n  }\n\n  private getStatusLabel(status: string): string {\n    const labels: Record<string, string> = {\n      'SUCCESS': 'Passed',\n      'FAILURE': 'Failed',\n      'ABORTED': 'Aborted',\n      'QUEUED': 'Queued',\n      'NOT_EXECUTED': 'Not Executed',\n      'STOPPED': 'Stopped'\n    };\n    return labels[status?.toUpperCase()] || status;\n  }\n\n  private formatDuration(ms: number): string {\n    if (!ms || ms < 0) {\n      return '0ms';\n    }\n\n    if (ms < 1000) {\n      return `${ms}ms`;\n    }\n\n    const totalSeconds = Math.floor(ms / 1000);\n    const hours = Math.floor(totalSeconds / 3600);\n    const minutes = Math.floor((totalSeconds % 3600) / 60);\n    const seconds = totalSeconds % 60;\n\n    const parts: string[] = [];\n\n    if (hours > 0) {\n      parts.push(`${hours}h`);\n    }\n    if (minutes > 0) {\n      parts.push(`${minutes}m`);\n    }\n    if (seconds > 0 || parts.length === 0) {\n      parts.push(`${seconds}s`);\n    }\n\n    return parts.join(' ');\n  }\n\n  private getResultStatusColor(result: string | undefined): string | undefined {\n    if (!result) {\n      return undefined;\n    }\n    const colors: Record<string, string> = {\n      'SUCCESS': '#0B9D68',\n      'FAILURE': '#FB2C36',\n      'ABORTED': '#F59E0B',\n      'QUEUED': '#3B82F6',\n      'NOT_EXECUTED': '#6B7280',\n      'STOPPED': '#6B7280'\n    };\n    return colors[result] || undefined;\n  }\n\n  private handleComparisonData(): void {\n    if (!this.comparisonData) return;\n\n    this.comparisonSummary = this.comparisonData.summary;\n    const steps = this.comparisonData.stepsComparison || [];\n    this.stepComparisons = steps.map((row, i) => ({ ...row, _compareRowOrdinal: i + 1 }));\n    this.testPlanCardSummary = this.computeTestPlanCardSummary(this.stepComparisons);\n    this.pageIndex = 0;\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Builds summary card counts for test-plan compare: pass/fail from Run B vs total;\n   * change buckets from `change` (REGRESSION, FIXED, NEW STEP, etc.).\n   */\n  private computeTestPlanCardSummary(steps: StepComparison[]): TestPlanCompareCardSummary {\n    const totalCases = steps.length;\n    let passed = 0;\n    let regressions = 0;\n    let fixed = 0;\n    let newSteps = 0;\n    let removed = 0;\n    let noChange = 0;\n\n    for (const row of steps) {\n      const b = (row.runBStatus || '').toUpperCase().trim();\n      if (b === 'SUCCESS') {\n        passed++;\n      }\n\n      const changeUpper = (row.change || '').toString().toUpperCase().trim();\n      if (changeUpper === 'REGRESSION') {\n        regressions++;\n      } else if (changeUpper === 'FIXED') {\n        fixed++;\n      } else if (changeUpper === 'NEW STEP' || changeUpper === 'ADDED') {\n        newSteps++;\n      } else if (changeUpper === 'DELETED STEP' || changeUpper === 'REMOVED') {\n        removed++;\n      } else if (\n        changeUpper === 'NO CHANGE' ||\n        changeUpper === 'UNCHANGED' ||\n        changeUpper === 'TIMING_CHANGED' ||\n        changeUpper === 'TIMING CHANGED'\n      ) {\n        noChange++;\n      } else if (changeUpper === 'STATUS_CHANGED') {\n        const ra = (row.runAStatus || '').toUpperCase().trim();\n        const rb = (row.runBStatus || '').toUpperCase().trim();\n        if (ra === 'SUCCESS' && rb === 'FAILURE') {\n          regressions++;\n        } else if (ra === 'FAILURE' && rb === 'SUCCESS') {\n          fixed++;\n        } else {\n          regressions++;\n        }\n      } else {\n        noChange++;\n      }\n    }\n\n    const failed = Math.max(0, totalCases - passed);\n\n    return {\n      totalCases,\n      passed,\n      failed,\n      regressions,\n      fixed,\n      newSteps,\n      removed,\n      noChange\n    };\n  }\n\n  onPageChange(event: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = event.pageIndex;\n    this.pageSize = event.pageSize;\n    this.cdr.markForCheck();\n  }\n  \n  get isEmptyState(): boolean {\n    return this.hasComparedRuns && (!this.showComparison || !this.stepComparisons || this.stepComparisons.length === 0);\n  }\n\n  onCompareClick(): void {\n    const runAId = this.form.get('runA')?.value;\n    const runBId = this.form.get('runB')?.value;\n\n    if (runAId && runBId && !this.isComparingRuns) {\n      this.compareRuns.emit({\n        runAId,\n        runBId\n      });\n    }\n  }\n\n  get canCompare(): boolean {\n    const runAId = this.form.get('runA')?.value;\n    const runBId = this.form.get('runB')?.value;\n    return !!(runAId && runBId && !this.isComparingRuns);\n  }\n\n  get runAStatusColor(): string {\n    if (!this.selectedRunA) return '#6B7280';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#0B9D68',\n      'FAILURE': '#FB2C36',\n      'ABORTED': '#F59E0B',\n      'QUEUED': '#3B82F6',\n      'NOT_EXECUTED': '#6B7280',\n      'STOPPED': '#6B7280'\n    };\n    return colors[this.selectedRunA.result] || '#6B7280';\n  }\n\n  get runBStatusColor(): string {\n    if (!this.selectedRunB) return '#6B7280';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#0B9D68',\n      'FAILURE': '#FB2C36',\n      'ABORTED': '#F59E0B',\n      'QUEUED': '#3B82F6',\n      'NOT_EXECUTED': '#6B7280',\n      'STOPPED': '#6B7280'\n    };\n    return colors[this.selectedRunB.result] || '#6B7280';\n  }\n\n  get runAStatusBorderColor(): string {\n    if (!this.selectedRunA) return '#F3F4F6';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#CFF2E5',\n      'FAILURE': '#FCD9D9',\n      'ABORTED': '#FEF3C7',\n      'QUEUED': '#DBEAFE',\n      'NOT_EXECUTED': '#F3F4F6',\n      'STOPPED': '#F3F4F6'\n    };\n    return colors[this.selectedRunA.result] || '#F3F4F6';\n  }\n\n  get runBStatusBorderColor(): string {\n    if (!this.selectedRunB) return '#F3F4F6';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#CFF2E5',\n      'FAILURE': '#FCD9D9',\n      'ABORTED': '#FEF3C7',\n      'QUEUED': '#DBEAFE',\n      'NOT_EXECUTED': '#F3F4F6',\n      'STOPPED': '#F3F4F6'\n    };\n    return colors[this.selectedRunB.result] || '#F3F4F6';\n  }\n\n  get runAStatusBgColor(): string {\n    if (!this.selectedRunA) return '#F3F4F6';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#0DBD7D1A',\n      'FAILURE': '#EE3F3F1A',\n      'ABORTED': '#FEF3C7',\n      'QUEUED': '#DBEAFE',\n      'NOT_EXECUTED': '#F3F4F6',\n      'STOPPED': '#F3F4F6'\n    };\n    return colors[this.selectedRunA.result] || '#F3F4F6';\n  }\n\n  get runBStatusBgColor(): string {\n    if (!this.selectedRunB) return '#F3F4F6';\n    const colors: Record<string, string> = {\n      'SUCCESS': '#0DBD7D1A',\n      'FAILURE': '#EE3F3F1A',\n      'ABORTED': '#FEF3C7',\n      'QUEUED': '#DBEAFE',\n      'NOT_EXECUTED': '#F3F4F6',\n      'STOPPED': '#F3F4F6'\n    };\n    return colors[this.selectedRunB.result] || '#F3F4F6';\n  }\n\n  formatTime(timestamp: number): string {\n    const date = new Date(timestamp);\n    return date.toLocaleString('en-US', {\n      month: 'short',\n      day: 'numeric',\n      hour: '2-digit',\n      minute: '2-digit'\n    });\n  }\n\n  formatDurationString(milliseconds: number): string {\n    return this.formatDuration(milliseconds);\n  }\n\n  get showComparison(): boolean {\n    return !!(this.comparisonData && this.comparisonSummary);\n  }\n\n  get runAStatusLabel(): string {\n    if (!this.selectedRunA) return '';\n    const labels: Record<string, string> = {\n      'SUCCESS': 'Passed',\n      'FAILURE': 'Failed',\n      'ABORTED': 'Aborted',\n      'QUEUED': 'Queued',\n      'NOT_EXECUTED': 'Not Executed',\n      'STOPPED': 'Stopped'\n    };\n    return labels[this.selectedRunA.result] || this.selectedRunA.result;\n  }\n\n  get runBStatusLabel(): string {\n    if (!this.selectedRunB) return '';\n    const labels: Record<string, string> = {\n      'SUCCESS': 'Passed',\n      'FAILURE': 'Failed',\n      'ABORTED': 'Aborted',\n      'QUEUED': 'Queued',\n      'NOT_EXECUTED': 'Not Executed',\n      'STOPPED': 'Stopped'\n    };\n    return labels[this.selectedRunB.result] || this.selectedRunB.result;\n  }\n}\n\n","<div class=\"cqa-ui-root\" style=\"display: flex; flex-direction: column; width: 100%; height: 100%;\">\n  <div class=\"cqa-flex cqa-flex-col\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-3 sm:cqa-gap-4 cqa-py-3 sm:cqa-py-4 cqa-px-4 sm:cqa-px-6\" style=\"border-bottom: 1px solid #E4E4E4\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-mb-1\">\n          <span class=\"cqa-text-[11px] cqa-text-[#6B7280]\">Status legend:</span>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-3\">\n            <!-- Passed -->\n            <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n                <path d=\"M7.99998 14.6663C11.6819 14.6663 14.6666 11.6816 14.6666 7.99967C14.6666 4.31778 11.6819 1.33301 7.99998 1.33301C4.31808 1.33301 1.33331 4.31778 1.33331 7.99967C1.33331 11.6816 4.31808 14.6663 7.99998 14.6663Z\" stroke=\"#0B9D68\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 8.00033L7.33333 9.33366L10 6.66699\" stroke=\"#0B9D68\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n              <span class=\"cqa-text-[11px] cqa-text-[#0B9D68] cqa-font-medium\">Passed</span>\n            </span>\n            <!-- Failed -->\n            <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n                <path d=\"M8.00004 14.6673C11.6819 14.6673 14.6667 11.6825 14.6667 8.00065C14.6667 4.31875 11.6819 1.33398 8.00004 1.33398C4.31814 1.33398 1.33337 4.31875 1.33337 8.00065C1.33337 11.6825 4.31814 14.6673 8.00004 14.6673Z\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M10 6L6 10\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 6L10 10\" stroke=\"#FB2C36\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n              <span class=\"cqa-text-[11px] cqa-text-[#FB2C36] cqa-font-medium\">Failed</span>\n            </span>\n            <!-- Aborted -->\n            <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n                <path d=\"M8.00004 14.6673C11.6819 14.6673 14.6667 11.6825 14.6667 8.00065C14.6667 4.31875 11.6819 1.33398 8.00004 1.33398C4.31814 1.33398 1.33337 4.31875 1.33337 8.00065C1.33337 11.6825 4.31814 14.6673 8.00004 14.6673Z\" stroke=\"#F59E0B\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6 8H10\" stroke=\"#F59E0B\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n              <span class=\"cqa-text-[11px] cqa-text-[#F59E0B] cqa-font-medium\">Aborted</span>\n            </span>\n          </div>\n        </div>\n\n        <div *ngIf=\"!hideRunSelectorsAndCompareButton\" class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4 md:cqa-gap-16 cqa-relative\">\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run A (Base)</span>\n              <cqa-dynamic-select \n                [form]=\"form\" \n                [config]=\"runASelectConfig\"\n                (searchChange)=\"onSearchChange($event)\"\n                (loadMore)=\"onLoadMore($event)\">\n              </cqa-dynamic-select>\n            </div>\n      \n            <div class=\"cqa-hidden md:cqa-flex cqa-items-center cqa-justify-center\" style=\"position: absolute; left: 50%; transform: translateX(-50%); top: 30px;\">\n                <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n                    <path d=\"M4.16669 10H15.8334\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    <path d=\"M10 4.16699L15.8333 10.0003L10 15.8337\" stroke=\"#636363\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                    </svg>\n            </div>\n      \n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#636363]\">Run B (Compare)</span>\n              <cqa-dynamic-select \n                [form]=\"form\" \n                [config]=\"runBSelectConfig\"\n                (searchChange)=\"onSearchChange($event)\"\n                (loadMore)=\"onLoadMore($event)\">\n              </cqa-dynamic-select>\n            </div>\n          </div>\n      \n          <ng-container *ngIf=\"selectedRunA || selectedRunB\">\n            <div class=\"cqa-grid cqa-grid-cols-1 md:cqa-grid-cols-2 cqa-gap-4\">\n              <div class=\"cqa-bg-white cqa-rounded-lg cqa-p-3\"\n                  [style.background-color]=\"selectedRunA ? runAStatusBgColor : null\"\n                  [style.border-color]=\"selectedRunA ? runAStatusBorderColor : null\"\n                  [ngClass]=\"{'cqa-border cqa-border-solid': selectedRunA}\">\n                <ng-container *ngIf=\"selectedRunA\">\n                  <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n                    <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n                      <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunA.id }}</span>\n                    </div>\n                    <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n                          [style.background-color]=\"runAStatusColor\"\n                          [style.color]=\"'#FFFFFF'\">\n                      {{ runAStatusLabel }}\n                    </span>\n                  </div>\n                  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunA.startTime) }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunA.duration) }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Env: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.environment || 'NA' }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\" *ngIf=\"selectedRunA.device\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">{{ selectedRunA?.platform === 'desktop' ? 'Browser' : 'Device' }}: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunA.device }}</span>\n                    </div>\n                  </div>\n                </ng-container>\n              </div>\n        \n              <div class=\"cqa-bg-white cqa-rounded-lg cqa-p-3\"\n                  [style.background-color]=\"selectedRunB ? runBStatusBgColor : null\"\n                  [style.border-color]=\"selectedRunB ? runBStatusBorderColor : null\"\n                  [ngClass]=\"{'cqa-border cqa-border-solid': selectedRunB}\">\n                <ng-container *ngIf=\"selectedRunB\">\n                  <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-mb-2\">\n                    <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n                      <span class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B]\">Run #{{ selectedRunB.id }}</span>\n                    </div>\n                    <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-text-[10px] cqa-font-medium\"\n                          [style.background-color]=\"runBStatusColor\"\n                          [style.color]=\"'#FFFFFF'\">\n                      {{ runBStatusLabel }}\n                    </span>\n                  </div>\n                  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-3\">\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Time: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatTime(selectedRunB.startTime) }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Duration: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ formatDurationString(selectedRunB.duration) }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">Env: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.environment || 'NA' }}</span>\n                    </div>\n                    <div class=\"cqa-flex cqa-items-center cqa-gap-1\" *ngIf=\"selectedRunB.device\">\n                      <span class=\"cqa-text-xs cqa-text-[#636363]\">{{ selectedRunB?.platform === 'desktop' ? 'Browser' : 'Device' }}: </span>\n                      <span class=\"cqa-text-xs cqa-text-[#0B0B0B] cqa-font-medium\">{{ selectedRunB.device }}</span>\n                    </div>\n                  </div>\n                </ng-container>\n              </div>\n            </div>\n          </ng-container>\n\n          <div *ngIf=\"!hideRunSelectorsAndCompareButton\" class=\"cqa-w-full cqa-flex cqa-items-center cqa-justify-center cqa-gap-3\">\n            <cqa-button \n              variant=\"filled\" \n              [disabled]=\"!canCompare\"\n              (click)=\"onCompareClick()\">\n              {{ isComparingRuns ? 'Comparing...' : 'Compare Runs' }}\n            </cqa-button>\n            <cqa-button\n              *ngIf=\"compareMode === 'testPlan'\"\n              variant=\"outlined\"\n              [text]=\"isExportingTestPlanCompare ? 'Exporting…' : 'Export'\"\n              [loading]=\"isExportingTestPlanCompare\"\n              [disabled]=\"!canCompare\"\n              (clicked)=\"onExportTestPlanCompare()\"\n            ></cqa-button>\n          </div>\n    </div>\n\n    <div\n      *ngIf=\"showComparison && compareMode === 'testPlan' && testPlanCardSummary && stepComparisons && stepComparisons.length > 0\"\n      class=\"cqa-bg-white cqa-py-3 sm:cqa-py-4 cqa-px-3 sm:cqa-px-6\"\n      style=\"flex-shrink: 0;\"\n    >\n      <div\n        class=\"cqa-flex cqa-flex-row cqa-flex-wrap cqa-items-stretch cqa-justify-between sm:cqa-justify-start cqa-gap-2 sm:cqa-gap-3\"\n      >\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[92px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#A5B4FC] cqa-bg-[#EEF2FF] cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#1E293B]\">{{ testPlanCardSummary.totalCases }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#64748B]\">Total Cases</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#00A63E]\">{{ testPlanCardSummary.passed }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">Passed</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#FB2C36]\">{{ testPlanCardSummary.failed }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">Failed</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#FB2C36]\">{{ testPlanCardSummary.regressions }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">Regressions</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#00A63E]\">{{ testPlanCardSummary.fixed }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">Fixed</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#155DFC]\">{{ testPlanCardSummary.newSteps }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">New</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#6B7280]\">{{ testPlanCardSummary.removed }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">Removed</span>\n        </div>\n        <div\n          class=\"cqa-flex cqa-min-w-0 cqa-flex-[1_1_72px] sm:cqa-flex-none sm:cqa-w-[88px] cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-1 cqa-rounded-xl cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-white cqa-py-3 cqa-px-2\"\n        >\n          <span class=\"cqa-text-xl cqa-font-bold cqa-leading-none cqa-text-[#6B7280]\">{{ testPlanCardSummary.noChange }}</span>\n          <span class=\"cqa-text-center cqa-text-[10px] cqa-font-semibold cqa-leading-tight cqa-text-[#6B7280]\">No Change</span>\n        </div>\n      </div>\n    </div>\n\n    <div\n      *ngIf=\"showComparison && compareMode !== 'testPlan' && comparisonSummary && stepComparisons && stepComparisons.length > 0\"\n      class=\"cqa-bg-white cqa-py-3 sm:cqa-py-4 cqa-px-3 sm:cqa-px-6 cqa-flex cqa-items-center cqa-gap-3 sm:cqa-gap-4\"\n      style=\"flex-shrink: 0;\"\n    >\n      <p class=\"cqa-text-[12px] cqa-text-[#636363]\">Summary:</p>\n      <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <mat-icon class=\"cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n              <path d=\"M2.91669 5.25H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M2.91669 8.75H11.0834\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </mat-icon>\n          <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#0B0B0B]\">{{ comparisonSummary.unchanged }}</span>\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Unchanged</span>\n        </div>\n\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n            <svg fill=\"#000000\" viewBox=\"0 0 24 24\" id=\"update-alt-2\" data-name=\"Flat Color\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-color\">\n              <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n              <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n              <g id=\"SVGRepo_iconCarrier\">\n                <path id=\"primary\" d=\"M21.71,10.29a1,1,0,0,0-1.42,0L19,11.59V7a3,3,0,0,0-3-3H6A1,1,0,0,0,6,6H16a1,1,0,0,1,1,1v4.59l-1.29-1.3a1,1,0,0,0-1.42,1.42l3,3a1,1,0,0,0,1.42,0l3-3A1,1,0,0,0,21.71,10.29Z\" fill=\"#155DFC\"></path>\n                <path id=\"secondary\" d=\"M18,18H8a1,1,0,0,1-1-1V12.41l1.29,1.3a1,1,0,0,0,1.42,0,1,1,0,0,0,0-1.42l-3-3a1,1,0,0,0-1.42,0l-3,3a1,1,0,0,0,1.42,1.42L5,12.41V17a3,3,0,0,0,3,3H18a1,1,0,0,0,0-2Z\" fill=\"#155DFC\"></path>\n              </g>\n            </svg>\n          </mat-icon>\n          <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#155DFC]\">{{ comparisonSummary.statusChanged }}</span>\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Status Changed</span>\n        </div>\n\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n              <path d=\"M2.91669 7H11.0834\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M7 2.91699V11.0837\" stroke=\"#00C950\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </mat-icon>\n          <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#00A63E]\">{{ comparisonSummary.added }}</span>\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Added</span>\n        </div>\n\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <mat-icon class=\"cqa-flex-shrink-0 cqa-w-[14px] cqa-h-[14px] cqa-text-sm\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n              <path d=\"M2.91669 7H11.0834\" stroke=\"#FB2C36\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </mat-icon>\n          <span class=\"cqa-text-sm cqa-font-semibold leading-normal cqa-text-[#FB2C36]\">{{ comparisonSummary.removed }}</span>\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#6B7280]\">Removed</span>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"cqa-bg-white cqa-rounded-lg\" style=\"overflow-y: auto; max-height: calc(90dvh - 468px); scrollbar-width: thin;\">\n      <cqa-table-template style=\"height: 100%; display: block;\"\n        [columns]=\"tableColumns\"\n        [data]=\"stepComparisons\"\n        [pageIndex]=\"pageIndex\"\n        [pageSize]=\"pageSize\"\n        [pageSizeMenuDirection]=\"pageSizeMenuDirection\"\n        [isEmptyState]=\"isEmptyState\"\n        [emptyStateConfig]=\"emptyStateConfig\"\n        [isTableDataLoading]=\"isComparingRuns\"\n        [showSearchBar]=\"false\"\n        [showFilterButton]=\"false\"\n        [showSettingsButton]=\"false\"\n        [showAutoRefreshButton]=\"false\"\n        [showOtherButton]=\"false\"\n        [showFilterPanel]=\"false\"\n        [serverSidePagination]=\"false\"\n        (pageChange)=\"onPageChange($event)\">\n      </cqa-table-template>\n    </div>\n\n  </div>\n</div>\n\n","import { Component, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { DynamicTableColumn } from '../table/dynamic-table/dynamic-table.component';\nimport { EmptyStateConfig } from '../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../assets/images/image-assets.constants';\n\nexport interface IterationData {\n  index: number;\n  datasetId: string;\n  variables: Record<string, any>;\n  status: 'PASS' | 'FAIL' | 'IN_PROGRESS' | 'ABORTED';\n  duration: number;\n  [key: string]: any;\n}\n\nexport interface IterationSummary {\n  totalIterations: number;\n  passed: number;\n  failed: number;\n}\n\n@Component({\n  selector: 'cqa-iterations-loop',\n  templateUrl: './iterations-loop.component.html',\n  styleUrls: []\n})\nexport class IterationsLoopComponent implements OnInit, OnChanges {\n  @Input() iterations: IterationData[] = [];\n  @Input() summary?: IterationSummary;\n  @Input() isTableDataLoading: boolean = false;\n\n  tableColumns: DynamicTableColumn[] = [];\n  pageIndex: number = 0;\n  pageSize: number = 5;\n  pageSizeOptions: number[] = [5, 10, 20, 40, 60, 80];\n\n  emptyStateConfig: EmptyStateConfig = {\n    title: 'No Iterations',\n    description: 'There are no iterations to display for this loop.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: []\n  };\n\n  ngOnInit(): void {\n    this.setupTableColumns();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['iterations']) {\n      this.pageIndex = 0;\n    }\n  }\n\n  private setupTableColumns(): void {\n    this.tableColumns = [\n      {\n        fieldId: 'index',\n        fieldName: '#',\n        fieldValue: 'index',\n        isShow: true,\n        weight: 0.5,\n        render: (row: IterationData) => {\n          return `<span class=\"cqa-text-[16px] cqa-text-[#0A0A0A] cqa-font-regular\">${row.index}</span>`;\n        }\n      },\n      {\n        fieldId: 'datasetId',\n        fieldName: 'Dataset ID',\n        fieldValue: 'datasetId',\n        isShow: true,\n        weight: 1.5,\n        render: (row: IterationData) => {\n          return `<span class=\"cqa-text-sm cqa-text-[#0A0A0A] cqa-font-regular\">${row.datasetId}</span>`;\n        }\n      },\n      {\n        fieldId: 'variables',\n        fieldName: 'Variables',\n        isShow: true,\n        weight: 2,\n        render: (row: IterationData) => {\n          const variableEntries = Object.entries(row.variables || {});\n          const variablesHtml = variableEntries.map(([key, value], index) => {\n            return `<div class=\"cqa-flex cqa-items-center cqa-gap-0.5 ${index === variableEntries.length - 1 ? 'cqa-mb-0' : 'cqa-mb-1'}\">\n              <span class=\"cqa-px-1 cqa-text-[12px] cqa-text-[#4A5565] cqa-bg-[#F3F4F6] cqa-rounded-[4px]\">${key}:</span>\n              <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-font-medium\">${value}</span>\n            </div>`;\n          }).join('');\n          return `<div class=\"cqa-flex cqa-flex-col\">${variablesHtml}</div>`;\n        }\n      },\n      {\n        fieldId: 'status',\n        fieldName: 'Status',\n        fieldValue: 'status',\n        isShow: true,\n        weight: 1,\n        render: (row: IterationData) => {\n          return this.renderStatusIcon(row.status);\n        }\n      },\n      {\n        fieldId: 'duration',\n        fieldName: 'Duration',\n        isShow: true,\n        weight: 1,\n        render: (row: IterationData) => {\n          return `\n            <div class=\"cqa-flex cqa-items-center cqa-gap-1\">\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M7.00002 12.8337C10.2217 12.8337 12.8334 10.222 12.8334 7.00033C12.8334 3.77866 10.2217 1.16699 7.00002 1.16699C3.77836 1.16699 1.16669 3.77866 1.16669 7.00033C1.16669 10.222 3.77836 12.8337 7.00002 12.8337Z\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"#636363\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n              <span class=\"cqa-text-xs cqa-text-[#4A5565]\">${this.formatDuration(row.duration)}</span>\n            </div>\n          `;\n        }\n      }\n    ];\n  }\n\n  private renderStatusIcon(status: string): string {\n    const upperStatus = status.toUpperCase();\n    if (upperStatus === 'PASS') {\n      return `\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"#008236\" stroke-width=\"1.5\" fill=\"none\"/>\n            <path d=\"M5.5 8L7 9.5L10.5 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          <span class=\"cqa-rounded-[4px] cqa-leading-4 cqa-px-2 cqa-py-0.5 cqa-bg-[#DCFCE7] cqa-text-xs cqa-text-[#008236]\">Pass</span>\n        </div>\n      `;\n    } else if (upperStatus === 'FAIL') {\n      return `\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"#C10007\" stroke-width=\"1.5\" fill=\"none\"/>\n            <path d=\"M10 6L6 10M6 6L10 10\" stroke=\"#C10007\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          <span class=\"cqa-rounded-[4px] cqa-leading-4 cqa-px-2 cqa-py-0.5 cqa-bg-[#FFE2E2] cqa-text-xs cqa-text-[#C10007]\">Fail</span>\n        </div>\n      `;\n    } else if (upperStatus === 'IN_PROGRESS') {\n      return `\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n            <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"#3B82F6\" stroke-width=\"1.5\" fill=\"none\"/>\n          </svg>\n          <span class=\"cqa-rounded-[4px] cqa-leading-4 cqa-px-2 cqa-py-0.5 cqa-bg-[#EFF6FF] cqa-text-xs cqa-text-[#3B82F6]\">In Progress</span>\n        </div>\n      `;\n    } else {\n      return `<span class=\"cqa-rounded-[4px] cqa-leading-4 cqa-px-2 cqa-py-0.5 cqa-text-xs cqa-text-[#9CA3AF]\">—</span>`;\n    }\n  }\n\n  private formatDuration(seconds: number): string {\n    if (seconds < 1) {\n      return `${(seconds * 1000).toFixed(0)}ms`;\n    }\n\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = Math.floor(seconds % 60);\n\n    const parts: string[] = [];\n\n    if (hours > 0) {\n      parts.push(`${hours}h`);\n    }\n    if (minutes > 0) {\n      parts.push(`${minutes}m`);\n    }\n    if (secs > 0 || (hours === 0 && minutes === 0)) {\n      parts.push(`${secs}s`);\n    }\n\n    return parts.join(' ');\n  }\n\n  onPageChange(event: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = event.pageIndex;\n    this.pageSize = event.pageSize;\n  }\n\n  get isEmptyState(): boolean {\n    return !this.iterations || this.iterations.length === 0;\n  }\n\n  get computedSummary(): IterationSummary {\n    if (this.summary) {\n      return this.summary;\n    }\n    \n    const passed = this.iterations.filter(i => i.status === 'PASS').length;\n    const failed = this.iterations.filter(i => i.status === 'FAIL').length;\n    \n    return {\n      totalIterations: this.iterations.length,\n      passed,\n      failed\n    };\n  }\n}\n\n","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%;\">\n  <div class=\"cqa-flex cqa-flex-col\">\n    <div class=\"cqa-bg-white\">\n      <cqa-table-template\n        [columns]=\"tableColumns\"\n        [data]=\"iterations\"\n        [pageIndex]=\"pageIndex\"\n        [pageSize]=\"pageSize\"\n        [pageSizeOptions]=\"pageSizeOptions\"\n        [isEmptyState]=\"isEmptyState\"\n        [emptyStateConfig]=\"emptyStateConfig\"\n        [isTableDataLoading]=\"isTableDataLoading\"\n        [showSearchBar]=\"false\"\n        [showFilterButton]=\"false\"\n        [showSettingsButton]=\"false\"\n        [showAutoRefreshButton]=\"false\"\n        [showOtherButton]=\"false\"\n        [showFilterPanel]=\"false\"\n        [serverSidePagination]=\"false\"\n        (pageChange)=\"onPageChange($event)\">\n      </cqa-table-template>\n    </div>\n\n    <div *ngIf=\"!isEmptyState\" class=\"cqa-p-[17px] cqa-mt-6 cqa-bg-[#FBFCFF] cqa-rounded-[5px]\" style=\"border: 1px solid #E5E5E5;\">\n      <h4 class=\"cqa-text-[16px] cqa-text-[#111827] cqa-mb-3\">Summary</h4>\n      <div class=\"cqa-grid cqa-grid-cols-3 cqa-gap-4\">\n        <div class=\"cqa-flex cqa-flex-col\">\n          <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Total Iterations</span>\n          <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#0B0B0B]\">{{ computedSummary.totalIterations }}</span>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col\">\n          <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Passed</span>\n          <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#00C950]\">{{ computedSummary.passed }}</span>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col\">\n          <span class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mb-1\">Failed</span>\n          <span class=\"cqa-text-[22px] cqa-leading-[28px] cqa-font-semibold cqa-text-[#FB2C36]\">{{ computedSummary.failed }}</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input } from '@angular/core';\n\nexport interface FailedStepData {\n  expected_result: string;\n  actual_result: string;\n  failed_step_id: string;\n  isTimeouterror: boolean;\n  failed_step_index: string;\n  steps: any[];\n  timestamp: string;\n  duration: string;\n  stepScreenshotUrl: string | null;\n  suggestions: string;\n  reason: string;\n  stepTitle?: string;\n  errorMessage?: string;\n  /** From run result `executedResult.failure_type` (e.g. `SYNTAX_ERROR`). */\n  failure_type?: string;\n}\n\n@Component({\n  selector: 'cqa-failed-step-card',\n  templateUrl: './failed-step-card.component.html',\n  styleUrls: []\n})\nexport class FailedStepCardComponent {\n  @Input() failedStepData!: FailedStepData;\n\n  readonly syntaxErrorLeadMessage =\n    'No steps were executed due to a syntax error in the test case. Please review and fix the syntax issue before re-running.';\n\n  get isSyntaxErrorFailure(): boolean {\n    return this.failedStepData?.failure_type === 'SYNTAX_ERROR';\n  }\n\n  get headerTitle(): string {\n    if (this.failedStepData?.stepTitle) {\n      return `Failed at Step ${this.failedStepData.failed_step_index}: ${this.failedStepData.stepTitle}`;\n    }\n    return `Failed at Step ${this.failedStepData?.failed_step_index || ''}`;\n  }\n\n  get errorText(): string {\n    return this.failedStepData?.errorMessage || this.failedStepData?.reason || 'An error occurred';\n  }\n\n  get videoTimestamp(): string {\n    return this.failedStepData?.timestamp || '00:00';\n  }\n\n  get durationText(): string {\n    return this.failedStepData?.duration || '0s';\n  }\n\n  get expectedResult(): string {\n    return this.failedStepData?.expected_result || '';\n  }\n\n  get actualResult(): string {\n    return this.failedStepData?.actual_result || '';\n  }\n\n  get suggestions(): string {\n    return this.failedStepData?.suggestions || '';\n  }\n\n  get hasSuggestions(): boolean {\n    return !!this.failedStepData?.suggestions && this.failedStepData.suggestions.trim().length > 0;\n  }\n\n  getFormattedSuggestions(): string[] {\n    if (!this.suggestions) return [];\n    return this.suggestions.split('\\n').filter(s => s.trim().length > 0);\n  }\n}\n\n","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; max-height: 200px;\">\n  <div class=\"cqa-h-full cqa-overflow-y-auto cqa-bg-[#FEF2F2] cqa-p-[17px] cqa-rounded-lg cqa-overflow-hidden cqa-flex cqa-flex-col cqa-gap-3\" \n    style=\"border: 1px solid #FECACA; scrollbar-width: thin;\">\n    <div>\n      <p *ngIf=\"isSyntaxErrorFailure\"\n        class=\"cqa-text-sm cqa-font-semibold cqa-leading-relaxed cqa-text-[#B91C1C] cqa-mb-1\">\n        {{ syntaxErrorLeadMessage }}\n      </p>\n      <h3 class=\"cqa-text-sm cqa-leading-[18px] cqa-text-[#111827] cqa-mb-1\">{{ headerTitle }}</h3>\n      <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-3 cqa-text-xs\">\n        <span class=\"cqa-text-[12px] cqa-text-[#B91C1C]\"><span class=\"cqa-font-bold\">Error:</span> {{ errorText }}</span>\n        <span class=\"cqa-text-[#636363]\">•</span>\n        <span class=\"cqa-text-[#636363]\">Video timestamp: {{ videoTimestamp }}</span>\n        <span class=\"cqa-text-[#636363]\">•</span>\n        <span class=\"cqa-text-[#636363]\">Duration: {{ durationText }}</span>\n      </div>\n      <div *ngIf=\"hasSuggestions\" class=\"cqa-text-[12px] cqa-text-[#B91C1C] cqa-mt-1\">\n        <span class=\"cqa-font-bold\">Suggestions:</span> {{ suggestions }}\n      </div>\n    </div>\n\n    <div class=\"cqa-max-h-[120px] cqa-h-auto cqa-grid cqa-grid-cols-2 cqa-gap-0 cqa-rounded-[4px]\" style=\"border: 1px solid #E5E7EB\">\n      <div class=\"cqa-bg-white cqa-px-2 cqa-py-1 md:cqa-border-r cqa-flex cqa-flex-col\" style=\"border-right: 1px solid #E5E7EB\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#9CA3AF] cqa-uppercase cqa-tracking-wide\">EXPECTED</span>\n          <div class=\"cqa-text-[10px] cqa-text-[#0B0B0B] cqa-leading-relaxed cqa-h-auto cqa-max-h-[93px] cqa-overflow-y-auto cqa-font-medium\"\n            style=\"scrollbar-gutter: stable; scrollbar-width: thin;\">\n            {{ expectedResult }}\n          </div>\n        </div>\n      </div>\n\n      <div class=\"cqa-bg-[#FFF9F9] cqa-px-2 cqa-py-1 cqa-flex cqa-flex-col\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n          <span class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#9CA3AF] cqa-uppercase cqa-tracking-wide\">ACTUAL</span>\n          <div class=\"cqa-text-[10px] cqa-text-[#C10007] cqa-leading-relaxed cqa-h-auto cqa-max-h-[85px] cqa-overflow-y-auto cqa-font-medium\">\n            {{ actualResult }}\n          </div>\n        </div>\n        </div>\n    </div>\n  </div>\n</div>\n\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\n\nexport interface MixedSegment {\n  type: 'text' | 'variable';\n  value: string;\n}\n\nexport interface MixedVariableValidity {\n  valid: boolean;\n  error: string | null;\n}\n\nconst VAR_PATH = '[A-Za-z_][A-Za-z0-9_]*(?:\\\\.[A-Za-z_][A-Za-z0-9_]*|\\\\[\\\\d+\\\\])*';\nconst VAR_NAME_REGEX = new RegExp('^' + VAR_PATH + '$');\nconst VAR_TOKEN_REGEX = new RegExp('\\\\$\\\\{(' + VAR_PATH + ')\\\\}', 'g');\nconst VAR_PATH_TAIL_REGEX = new RegExp('(' + VAR_PATH + ')$');\nconst INVALID_VAR_MESSAGE = 'Invalid variable name.';\nconst BLUR_HIDE_DELAY_MS = 150;\n\n@Component({\n  selector: 'cqa-mixed-variable-input',\n  templateUrl: './mixed-variable-input.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root' },\n})\nexport class MixedVariableInputComponent implements OnChanges, AfterViewInit {\n  @Input() value = '';\n  @Input() placeholder = 'Text Input';\n  @Input() disabled = false;\n\n  @Output() valueChange = new EventEmitter<string>();\n  @Output() validityChange = new EventEmitter<MixedVariableValidity>();\n\n  @ViewChild('editor', { static: true }) editorRef!: ElementRef<HTMLDivElement>;\n\n  showSuggestion = false;\n  pendingWord = '';\n  canAddAsVariable = false;\n  errorMessage: string | null = null;\n\n  private selectionRange: Range | null = null;\n  private selectionMode = false;\n  private lastEmitted = '';\n  private lastValid: boolean | null = null;\n\n  constructor(\n    private cdr: ChangeDetectorRef,\n    private hostRef: ElementRef<HTMLElement>,\n  ) {}\n\n  // ---- Lifecycle ------------------------------------------------------------\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!changes['value'] || !this.editorRef) return;\n    const incoming = changes['value'].currentValue ?? '';\n    if (incoming === this.lastEmitted) return;\n    this.render(incoming);\n    this.validate(incoming);\n  }\n\n  ngAfterViewInit(): void {\n    const initial = this.value || '';\n    this.render(initial);\n    this.validate(initial);\n  }\n\n  // ---- Editor event handlers -----------------------------------------------\n\n  onInput(): void {\n    this.flattenStructure();\n    this.sanitizeChips();\n    this.autoChipify();\n    this.emitValue();\n    this.refreshSuggestion();\n  }\n\n  onEditorFocus(): void {\n    this.refreshSuggestion();\n  }\n\n  onEditorBlur(): void {\n    // Delay so clicks on suggestion buttons register before we hide them.\n    setTimeout(() => {\n      this.autoChipify(true);\n      this.hideSuggestion();\n    }, BLUR_HIDE_DELAY_MS);\n  }\n\n  onKeyDown(event: KeyboardEvent): void {\n    if (event.key === 'Enter') {\n      event.preventDefault();\n      return;\n    }\n    if (event.key === 'Tab') return;\n    if (event.key === 'Escape') {\n      if (this.showSuggestion) {\n        event.preventDefault();\n        this.hideSuggestion();\n      }\n      return;\n    }\n    if (event.key === 'Backspace') {\n      const node = this.getNodeBeforeCaret();\n      if (node && (node as HTMLElement).classList?.contains('cqa-var-chip')) {\n        event.preventDefault();\n        (node as HTMLElement).remove();\n        this.onInput();\n      }\n    }\n  }\n\n  onPaste(event: ClipboardEvent): void {\n    event.preventDefault();\n    const text = event.clipboardData?.getData('text/plain') ?? '';\n    if (!text) return;\n    this.insertPlainTextAtCaret(text);\n    this.onInput();\n  }\n\n  onDrop(event: DragEvent): void {\n    event.preventDefault();\n    const text = event.dataTransfer?.getData('text/plain') ?? '';\n    if (text) {\n      this.editorRef.nativeElement.focus();\n      this.insertPlainTextAtCaret(text);\n    }\n    this.onInput();\n  }\n\n  @HostListener('dragstart', ['$event'])\n  onDragStart(event: DragEvent): void {\n    event.preventDefault();\n  }\n\n  @HostListener('document:mousedown', ['$event'])\n  onDocumentMouseDown(event: MouseEvent): void {\n    if (!this.showSuggestion) return;\n    if (this.hostRef.nativeElement.contains(event.target as Node)) return;\n    this.hideSuggestion();\n  }\n\n  @HostListener('document:selectionchange')\n  onDocumentSelectionChange(): void {\n    if (document.activeElement !== this.editorRef?.nativeElement) return;\n    this.refreshSuggestion();\n  }\n\n  // ---- Suggestion actions ---------------------------------------------------\n\n  addAsText(): void {\n    this.hideSuggestion();\n    this.editorRef.nativeElement.focus();\n  }\n\n  addAsVariable(): void {\n    const name = this.normalizeCandidate(this.pendingWord || '');\n    if (!name || !VAR_NAME_REGEX.test(name)) {\n      this.hideSuggestion();\n      return;\n    }\n    if (this.selectionMode && this.selectionRange) {\n      if (this.rangeCrossesChip(this.selectionRange)) {\n        this.hideSuggestion();\n        return;\n      }\n      this.insertChipReplacingRange(name, this.selectionRange);\n    } else {\n      this.insertChipReplacingCurrentWord(name);\n    }\n    this.hideSuggestion();\n    this.emitValue();\n  }\n\n  // ---- Value emission / validation -----------------------------------------\n\n  private emitValue(): void {\n    const str = this.serialize();\n    if (str !== this.lastEmitted) {\n      this.lastEmitted = str;\n      this.valueChange.emit(str);\n    }\n    this.validate(str);\n  }\n\n  private validate(str: string): void {\n    const error = this.findValidationError(str);\n    const valid = error === null;\n    if (this.lastValid === valid && this.errorMessage === error) return;\n    this.lastValid = valid;\n    this.errorMessage = error;\n    this.validityChange.emit({ valid, error });\n    this.cdr.markForCheck();\n  }\n\n  private findValidationError(str: string): string | null {\n    if (!str) return null;\n    const braceBody = /\\$\\{([^}]*)\\}/g;\n    let m: RegExpExecArray | null;\n    braceBody.lastIndex = 0;\n    while ((m = braceBody.exec(str)) !== null) {\n      const body = m[1];\n      if (body !== body.trim() || !VAR_NAME_REGEX.test(body)) {\n        return INVALID_VAR_MESSAGE;\n      }\n    }\n    const openCount = (str.match(/\\$\\{/g) || []).length;\n    const closedCount = (str.match(braceBody) || []).length;\n    if (openCount > closedCount) return INVALID_VAR_MESSAGE;\n    return null;\n  }\n\n  // ---- Suggestion state -----------------------------------------------------\n\n  private refreshSuggestion(): void {\n    const selInfo = this.getSelectedInfo();\n    if (selInfo) {\n      const normalized = this.normalizeCandidate(selInfo.text);\n      this.pendingWord = normalized;\n      this.selectionRange = selInfo.range;\n      this.selectionMode = true;\n      this.showSuggestion = true;\n      this.canAddAsVariable =\n        !!normalized && VAR_NAME_REGEX.test(normalized) && !this.rangeCrossesChip(selInfo.range);\n      this.cdr.markForCheck();\n      return;\n    }\n    this.selectionMode = false;\n    this.selectionRange = null;\n    const word = this.getCurrentWord();\n    this.pendingWord = word;\n    this.showSuggestion = !!word;\n    this.canAddAsVariable = !!word && VAR_NAME_REGEX.test(word);\n    this.cdr.markForCheck();\n  }\n\n  private hideSuggestion(): void {\n    if (!this.showSuggestion && !this.pendingWord) return;\n    this.showSuggestion = false;\n    this.pendingWord = '';\n    this.canAddAsVariable = false;\n    this.cdr.markForCheck();\n  }\n\n  private normalizeCandidate(text: string): string {\n    let t = text.trim();\n    if (t.startsWith('${') && t.endsWith('}')) {\n      t = t.slice(2, -1).trim();\n    }\n    return t;\n  }\n\n  // ---- DOM sanitization -----------------------------------------------------\n\n  private flattenStructure(): void {\n    const editor = this.editorRef.nativeElement;\n    const wrappers = Array.from(editor.querySelectorAll('div, p')) as HTMLElement[];\n    const strayInlines = Array.from(editor.querySelectorAll('span')).filter(\n      (s) => !s.classList.contains('cqa-var-chip') && !s.closest('.cqa-var-chip'),\n    ) as HTMLElement[];\n    for (const el of [...wrappers, ...strayInlines]) {\n      if (el.closest('.cqa-var-chip')) continue;\n      while (el.firstChild) el.parentNode?.insertBefore(el.firstChild, el);\n      el.remove();\n    }\n    const brs = Array.from(editor.querySelectorAll('br')) as HTMLElement[];\n    for (const br of brs) {\n      if (br.closest('.cqa-var-chip')) continue;\n      br.parentNode?.replaceChild(document.createTextNode(' '), br);\n    }\n  }\n\n  private sanitizeChips(): void {\n    const editor = this.editorRef.nativeElement;\n    const chips = Array.from(editor.querySelectorAll('.cqa-var-chip')) as HTMLElement[];\n    for (const chip of chips) {\n      const name = (chip.getAttribute('data-var') || '').trim();\n      if (!name || !VAR_NAME_REGEX.test(name)) {\n        chip.parentNode?.replaceChild(document.createTextNode(chip.textContent || ''), chip);\n        continue;\n      }\n      const structureBroken =\n        chip.getAttribute('contenteditable') !== 'false' ||\n        !chip.querySelector('.cqa-var-chip__remove');\n      if (structureBroken) {\n        chip.parentNode?.replaceChild(this.buildChip(name), chip);\n      }\n    }\n    // Remove stray remove icons left from partial undo/redo states.\n    const orphans = Array.from(editor.querySelectorAll('.cqa-var-chip__remove')) as HTMLElement[];\n    for (const o of orphans) {\n      if (!o.closest('.cqa-var-chip')) o.remove();\n    }\n  }\n\n  // ---- Chipification --------------------------------------------------------\n\n  private autoChipify(force = false): void {\n    const editor = this.editorRef.nativeElement;\n    const caretRange = this.getSelectionRange();\n    let changed = false;\n    let lastChip: Node | null = null;\n\n    for (const tn of this.collectDescendantTextNodes(editor)) {\n      if (!tn.parentNode) continue;\n      const text = tn.nodeValue || '';\n      VAR_TOKEN_REGEX.lastIndex = 0;\n      if (!VAR_TOKEN_REGEX.test(text)) continue;\n      VAR_TOKEN_REGEX.lastIndex = 0;\n\n      const caretOffset =\n        !force && caretRange && caretRange.collapsed && caretRange.startContainer === tn\n          ? caretRange.startOffset\n          : -1;\n\n      const matches: Array<{ start: number; end: number; name: string }> = [];\n      let m: RegExpExecArray | null;\n      while ((m = VAR_TOKEN_REGEX.exec(text)) !== null) {\n        const start = m.index;\n        const end = start + m[0].length;\n        // Keep the token as plain text while the caret is strictly inside.\n        if (caretOffset > start && caretOffset < end) continue;\n        matches.push({ start, end, name: m[1] });\n      }\n      if (!matches.length) continue;\n\n      const frag = document.createDocumentFragment();\n      let cursor = 0;\n      for (const mt of matches) {\n        if (mt.start > cursor) {\n          frag.appendChild(document.createTextNode(text.slice(cursor, mt.start)));\n        }\n        const chip = this.buildChip(mt.name);\n        frag.appendChild(chip);\n        lastChip = chip;\n        cursor = mt.end;\n      }\n      if (cursor < text.length) {\n        frag.appendChild(document.createTextNode(text.slice(cursor)));\n      }\n      tn.parentNode.replaceChild(frag, tn);\n      changed = true;\n    }\n\n    if (changed && lastChip) this.placeCaretAfter(lastChip);\n  }\n\n  private collectDescendantTextNodes(root: Element): Text[] {\n    const out: Text[] = [];\n    const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {\n      acceptNode: (node) => {\n        let p: Node | null = node.parentNode;\n        while (p && p !== root) {\n          if ((p as Element).classList?.contains?.('cqa-var-chip')) {\n            return NodeFilter.FILTER_REJECT;\n          }\n          p = p.parentNode;\n        }\n        return NodeFilter.FILTER_ACCEPT;\n      },\n    });\n    let n: Node | null;\n    while ((n = walker.nextNode())) out.push(n as Text);\n    return out;\n  }\n\n  // ---- Render / serialize ---------------------------------------------------\n\n  private render(value: string): void {\n    const editor = this.editorRef.nativeElement;\n    editor.innerHTML = '';\n    if (!value) return;\n    VAR_TOKEN_REGEX.lastIndex = 0;\n    let lastIndex = 0;\n    let m: RegExpExecArray | null;\n    while ((m = VAR_TOKEN_REGEX.exec(value)) !== null) {\n      if (m.index > lastIndex) {\n        editor.appendChild(document.createTextNode(value.slice(lastIndex, m.index)));\n      }\n      editor.appendChild(this.buildChip(m[1]));\n      lastIndex = m.index + m[0].length;\n    }\n    if (lastIndex < value.length) {\n      editor.appendChild(document.createTextNode(value.slice(lastIndex)));\n    }\n  }\n\n  private serialize(): string {\n    const editor = this.editorRef.nativeElement;\n    let out = '';\n    const walk = (node: Node): void => {\n      if (node.nodeType === Node.TEXT_NODE) {\n        out += (node.nodeValue || '').replace(/\\u00a0/g, ' ');\n        return;\n      }\n      if (node.nodeType !== Node.ELEMENT_NODE) return;\n      const el = node as HTMLElement;\n      if (el.classList.contains('cqa-var-chip')) {\n        const name = el.getAttribute('data-var') || '';\n        if (name) out += '${' + name + '}';\n        return;\n      }\n      if (el.tagName === 'BR') {\n        out += '\\n';\n        return;\n      }\n      const isBlock = el.tagName === 'DIV' || el.tagName === 'P';\n      if (isBlock && out.length > 0 && !out.endsWith('\\n')) out += '\\n';\n      el.childNodes.forEach(walk);\n    };\n    editor.childNodes.forEach(walk);\n    return out;\n  }\n\n  private buildChip(name: string): HTMLElement {\n    const chip = document.createElement('span');\n    chip.className = 'cqa-var-chip';\n    chip.setAttribute('contenteditable', 'false');\n    chip.setAttribute('data-var', name);\n    const label = document.createElement('span');\n    label.className = 'cqa-var-chip__label';\n    label.textContent = '${' + name + '}';\n    const remove = document.createElement('span');\n    remove.className = 'cqa-var-chip__remove';\n    remove.textContent = '×';\n    remove.addEventListener('mousedown', (e) => e.preventDefault());\n    remove.addEventListener('click', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      chip.remove();\n      this.onInput();\n    });\n    chip.appendChild(label);\n    chip.appendChild(remove);\n    return chip;\n  }\n\n  // ---- Selection / caret helpers -------------------------------------------\n\n  private getSelectionRange(): Range | null {\n    const sel = window.getSelection();\n    if (!sel || sel.rangeCount === 0) return null;\n    const range = sel.getRangeAt(0);\n    if (!this.editorRef.nativeElement.contains(range.startContainer)) return null;\n    return range;\n  }\n\n  private getSelectedInfo(): { text: string; range: Range } | null {\n    const sel = window.getSelection();\n    if (!sel || sel.rangeCount === 0) return null;\n    const range = sel.getRangeAt(0);\n    if (range.collapsed) return null;\n    const editor = this.editorRef.nativeElement;\n    if (!editor.contains(range.startContainer) || !editor.contains(range.endContainer)) return null;\n    const text = range.toString();\n    if (!text) return null;\n    return { text, range: range.cloneRange() };\n  }\n\n  private rangeCrossesChip(range: Range): boolean {\n    const contents = range.cloneContents();\n    return !!contents.querySelector?.('.cqa-var-chip');\n  }\n\n  private getNodeBeforeCaret(): Node | null {\n    const range = this.getSelectionRange();\n    if (!range || !range.collapsed) return null;\n    const { startContainer, startOffset } = range;\n    if (startContainer.nodeType === Node.TEXT_NODE) {\n      if (startOffset > 0) return null;\n      return startContainer.previousSibling;\n    }\n    return startContainer.childNodes[startOffset - 1] || null;\n  }\n\n  private getCurrentWord(): string {\n    const range = this.getSelectionRange();\n    if (!range || !range.collapsed) return '';\n    let node: Node = range.startContainer;\n    let offset = range.startOffset;\n    if (node.nodeType !== Node.TEXT_NODE) {\n      const prev = node.childNodes[offset - 1];\n      if (!prev || prev.nodeType !== Node.TEXT_NODE) return '';\n      node = prev;\n      offset = (prev.nodeValue || '').length;\n    }\n    const text = (node as Text).nodeValue || '';\n    const braceOpen = text.lastIndexOf('${', offset - 1);\n    if (braceOpen !== -1) {\n      const closeIdx = text.indexOf('}', braceOpen + 2);\n      const tokenClosedBeforeCaret = closeIdx !== -1 && closeIdx < offset;\n      if (!tokenClosedBeforeCaret) {\n        const start = braceOpen + 2;\n        const end = closeIdx === -1 ? text.length : closeIdx;\n        return text.slice(start, end);\n      }\n    }\n    const match = text.slice(0, offset).match(VAR_PATH_TAIL_REGEX);\n    return match ? match[1] : '';\n  }\n\n  // ---- Chip insertion -------------------------------------------------------\n\n  private insertChipReplacingRange(name: string, range: Range): void {\n    const chip = this.buildChip(name);\n    range.deleteContents();\n    range.insertNode(chip);\n    this.stripBracesAround(chip);\n    this.placeCaretAfter(chip);\n  }\n\n  private insertChipReplacingCurrentWord(name: string): void {\n    const range = this.getSelectionRange();\n    const chip = this.buildChip(name);\n    if (!range) {\n      this.editorRef.nativeElement.appendChild(chip);\n      this.placeCaretAfter(chip);\n      return;\n    }\n    let node: Node = range.startContainer;\n    let offset = range.startOffset;\n    // Caret may sit on the editor element (e.g. right after a pasted text node).\n    // Walk into the previous text node so we replace the trailing word instead\n    // of just inserting the chip alongside it.\n    if (node.nodeType !== Node.TEXT_NODE) {\n      const prev = node.childNodes[offset - 1];\n      if (prev && prev.nodeType === Node.TEXT_NODE) {\n        node = prev;\n        offset = (prev.nodeValue || '').length;\n      } else {\n        range.insertNode(chip);\n        this.placeCaretAfter(chip);\n        return;\n      }\n    }\n    const text = node.nodeValue || '';\n    const before = text.slice(0, offset);\n    const after = text.slice(offset);\n    const wordMatch = before.match(VAR_PATH_TAIL_REGEX);\n    let beforeKept = wordMatch ? before.slice(0, before.length - wordMatch[1].length) : before;\n    let afterKept = after;\n    if (beforeKept.endsWith('${') && afterKept.startsWith('}')) {\n      beforeKept = beforeKept.slice(0, -2);\n      afterKept = afterKept.slice(1);\n    } else if (beforeKept.endsWith('${')) {\n      beforeKept = beforeKept.slice(0, -2);\n    }\n    const frag = document.createDocumentFragment();\n    if (beforeKept) frag.appendChild(document.createTextNode(beforeKept));\n    frag.appendChild(chip);\n    if (afterKept) frag.appendChild(document.createTextNode(afterKept));\n    node.parentNode!.replaceChild(frag, node);\n    this.placeCaretAfter(chip);\n  }\n\n  private stripBracesAround(chip: HTMLElement): void {\n    const prev = chip.previousSibling;\n    const next = chip.nextSibling;\n    if (prev && prev.nodeType === Node.TEXT_NODE) {\n      const t = prev.nodeValue || '';\n      if (t.endsWith('${')) prev.nodeValue = t.slice(0, -2);\n    }\n    if (next && next.nodeType === Node.TEXT_NODE) {\n      const t = next.nodeValue || '';\n      if (t.startsWith('}')) next.nodeValue = t.slice(1);\n    }\n  }\n\n  private insertPlainTextAtCaret(text: string): void {\n    const range = this.getSelectionRange();\n    if (!range) {\n      this.editorRef.nativeElement.appendChild(document.createTextNode(text));\n      this.placeCaretAtEnd();\n      return;\n    }\n    range.deleteContents();\n    const node = document.createTextNode(text);\n    range.insertNode(node);\n    this.placeCaretAfter(node);\n  }\n\n  private placeCaretAfter(node: Node): void {\n    const sel = window.getSelection();\n    if (!sel) return;\n    const range = document.createRange();\n    range.setStartAfter(node);\n    range.collapse(true);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n\n  private placeCaretAtEnd(): void {\n    const sel = window.getSelection();\n    if (!sel) return;\n    const range = document.createRange();\n    range.selectNodeContents(this.editorRef.nativeElement);\n    range.collapse(false);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n}\n","<div class=\"cqa-mixed-var-wrapper\">\n  <div\n    #editor\n    class=\"cqa-mixed-var-editor\"\n    role=\"textbox\"\n    spellcheck=\"false\"\n    [attr.contenteditable]=\"!disabled\"\n    [attr.data-placeholder]=\"placeholder\"\n    [attr.aria-invalid]=\"errorMessage ? 'true' : null\"\n    [class.cqa-mixed-var-editor--invalid]=\"errorMessage\"\n    (input)=\"onInput()\"\n    (keydown)=\"onKeyDown($event)\"\n    (focus)=\"onEditorFocus()\"\n    (paste)=\"onPaste($event)\"\n    (drop)=\"onDrop($event)\"\n    (blur)=\"onEditorBlur()\">\n  </div>\n  <p *ngIf=\"errorMessage\" class=\"cqa-mixed-var-error\" role=\"alert\">{{ errorMessage }}</p>\n\n  <div\n    *ngIf=\"showSuggestion\"\n    class=\"cqa-mixed-var-suggest\"\n    (mousedown)=\"$event.preventDefault()\">\n    <button type=\"button\" class=\"cqa-mixed-var-suggest__item\" (click)=\"addAsText()\">\n      Add as Text <span *ngIf=\"pendingWord\" class=\"cqa-mixed-var-suggest__hint\">\"{{ pendingWord }}\"</span>\n    </button>\n    <button *ngIf=\"canAddAsVariable\" type=\"button\"\n      class=\"cqa-mixed-var-suggest__item cqa-mixed-var-suggest__item--primary\"\n      (click)=\"addAsVariable()\">\n      Add as local variable <span class=\"cqa-mixed-var-suggest__hint\">${{ '{' }}{{ pendingWord }}{{ '}' }}</span>\n    </button>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges, ViewChild, ElementRef, AfterViewInit } from '@angular/core';\n\ntype TextareaSize = 'sm' | 'md' | 'lg';\n\n@Component({\n  selector: 'cqa-custom-textarea',\n  templateUrl: './custom-textarea.component.html',\n  host: { class: 'cqa-ui-root' }\n})\nexport class CustomTextareaComponent implements OnChanges, AfterViewInit {\n\n  @Input() label = '';\n\n  @Input() placeholder = '';\n\n  @Input() value = '';\n\n  /** When true, shows Trix rich text editor (Bold, Italic, etc.). Host app must load Trix JS/CSS. */\n  @Input() enableMarkdown = false;\n\n  @Input() disabled = false;\n\n  @Input() errors: string[] = [];\n\n  @Input() required = false;\n\n  @Input() ariaLabel = '';\n\n  @Input() size: TextareaSize = 'md';\n\n  @Input() fullWidth = false;\n\n  @Input() maxLength?: number;\n\n  @Input() showCharCount = false;\n\n  @Input() rows?: number;\n\n  @Input() cols?: number;\n\n  @Input() resize: 'none' | 'both' | 'horizontal' | 'vertical' = 'vertical';\n\n  @Input() textareaInlineStyle?: string;\n\n  @Input() labelInlineStyle?: string;\n\n  @Output() valueChange = new EventEmitter<string>();\n\n  @Output() blurred = new EventEmitter<FocusEvent>();\n\n  @Output() focused = new EventEmitter<FocusEvent>();\n\n  @ViewChild('trixEditor', { static: false }) trixEditor?: ElementRef<HTMLElement>;\n\n  textareaValue = '';\n  isFocused = false;\n  trixEditorId = 'cqa-trix-' + Math.random().toString(36).slice(2, 11);\n\n  ngAfterViewInit(): void {\n    if (this.enableMarkdown) {\n      this.syncTrixContent(this.value || this.textareaValue);\n    }\n  }\n\n  onTrixInitialize(_event: Event): void {\n    this.syncTrixContent(this.value || this.textareaValue);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['value'] && changes['value'].currentValue !== undefined) {\n      let newValue = changes['value'].currentValue ?? '';\n      \n      if (!this.enableMarkdown && this.maxLength && newValue.length > this.maxLength) {\n        newValue = newValue.substring(0, this.maxLength);\n      }\n      \n      if (newValue !== this.textareaValue) {\n        this.textareaValue = newValue;\n        if (this.enableMarkdown && (this.trixEditor?.nativeElement as unknown as Record<string, unknown>)?.['editor']) {\n          this.syncTrixContent(newValue);\n        }\n      }\n    }\n  }\n\n  private syncTrixContent(html: string): void {\n    const el = this.trixEditor?.nativeElement as unknown;\n    const editor = (el as { editor?: { loadHTML: (h: string) => void } })?.editor;\n    if (editor) {\n      try {\n        editor.loadHTML(html || '');\n      } catch {}\n    }\n  }\n\n  onTrixChange(event: Event): void {\n    const target = event.target as HTMLElement | null;\n    const html = target?.innerHTML ?? '';\n    this.textareaValue = html;\n    this.valueChange.emit(html);\n  }\n\n  onTrixFocus(event: FocusEvent): void {\n    this.isFocused = true;\n    this.focused.emit(event);\n  }\n\n  onTrixBlur(event: FocusEvent): void {\n    const target = event.target as HTMLElement | null;\n    const html = target?.innerHTML ?? '';\n    this.textareaValue = html;\n    this.valueChange.emit(html);\n    this.isFocused = false;\n    this.blurred.emit(event);\n  }\n\n  get hasError(): boolean {\n    return this.errors && this.errors.length > 0;\n  }\n\n  get textareaSizeClasses(): string {\n    switch (this.size) {\n      case 'sm':\n        return 'cqa-px-3 cqa-py-2 cqa-text-xs';\n      case 'md':\n        return 'cqa-px-4 cqa-py-2.5 cqa-text-sm';\n      case 'lg':\n        return 'cqa-px-5 cqa-py-3 cqa-text-base';\n      default:\n        return 'cqa-px-4 cqa-py-2.5 cqa-text-sm';\n    }\n  }\n\n  get labelSizeClasses(): string {\n    switch (this.size) {\n      case 'sm':\n        return 'cqa-text-xs cqa-mb-1';\n      case 'md':\n        return 'cqa-text-sm cqa-mb-1.5';\n      case 'lg':\n        return 'cqa-text-base cqa-mb-2';\n      default:\n        return 'cqa-text-sm cqa-mb-1.5';\n    }\n  }\n\n  get resizeClass(): string {\n    switch (this.resize) {\n      case 'none':\n        return 'cqa-resize-none';\n      case 'both':\n        return 'cqa-resize';\n      case 'horizontal':\n        return 'cqa-resize-x';\n      case 'vertical':\n        return 'cqa-resize-y';\n      default:\n        return 'cqa-resize-y';\n    }\n  }\n\n  onInput(event: Event): void {\n    const target = event.target as HTMLTextAreaElement | null;\n    let nextValue = target?.value ?? '';\n    \n    if (this.showCharCount && this.maxLength && nextValue.length > this.maxLength) {\n      nextValue = nextValue.substring(0, this.maxLength);\n      if (target) {\n        target.value = nextValue;\n      }\n    }\n    \n    this.textareaValue = nextValue;\n    this.valueChange.emit(this.textareaValue);\n  }\n\n  onFocus(event: FocusEvent): void {\n    this.isFocused = true;\n    this.focused.emit(event);\n  }\n\n  onBlur(event: FocusEvent): void {\n    this.isFocused = false;\n    this.blurred.emit(event);\n  }\n\n  get textareaStyles(): string {\n    return this.textareaInlineStyle || '';\n  }\n\n  get labelStyles(): string {\n    return this.labelInlineStyle || '';\n  }\n}\n\n","<div class=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n  <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n    <label \n      *ngIf=\"label\"\n      class=\"cqa-font-medium cqa-text-[#374151]\"\n      [ngClass]=\"labelSizeClasses\"\n      [style]=\"labelStyles\">\n      {{ label }}\n      <span *ngIf=\"required\" class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n    </label>\n\n    <!-- Markdown/rich text mode: Trix editor (host app must load Trix JS/CSS).\n         Use Trix's default toolbar (no toolbar attr) - custom toolbar had association issues. -->\n    <ng-container *ngIf=\"enableMarkdown\">\n      <form class=\"cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-overflow-hidden\" [style.width]=\"fullWidth ? '100%' : 'auto'\" (submit)=\"$event.preventDefault()\">\n        <input type=\"hidden\" [id]=\"trixEditorId\" [value]=\"textareaValue\">\n        <trix-editor\n          #trixEditor\n          [attr.input]=\"trixEditorId\"\n          class=\"cqa-w-full cqa-p-3 cqa-min-h-[120px] cqa-text-sm cqa-text-[#0A0A0A] cqa-outline-none cqa-border-0\"\n          [attr.placeholder]=\"placeholder\"\n          [attr.disabled]=\"disabled || null\"\n          (trix-initialize)=\"onTrixInitialize($event)\"\n          (trix-change)=\"onTrixChange($event)\"\n          (focus)=\"onTrixFocus($event)\"\n          (blur)=\"onTrixBlur($event)\">\n        </trix-editor>\n      </form>\n    </ng-container>\n\n    <!-- Plain text mode: standard textarea -->\n    <div *ngIf=\"!enableMarkdown\" class=\"cqa-relative\" [style.width]=\"fullWidth ? '100%' : 'auto'\">\n      <textarea\n        class=\"cqa-w-full !cqa-border !cqa-border-solid !cqa-border-gray-200 cqa-rounded-md cqa-bg-white cqa-font-['SF_Pro_Text'] cqa-font-normal cqa-leading-normal cqa-tracking-normal cqa-text-[#0A0A0A] placeholder:cqa-text-[#9CA3AF] cqa-transition-all cqa-duration-200 cqa-outline-none\"\n        [ngClass]=\"{\n          'cqa-border-[#D1D5DB] focus:cqa-border-[#3B82F6] focus:cqa-ring-1 focus:cqa-ring-[#3B82F6]': !hasError,\n          'cqa-border-[#EF4444] focus:cqa-border-[#EF4444] focus:cqa-ring-1 focus:cqa-ring-[#EF4444]': hasError,\n          'cqa-bg-[#F9FAFB] cqa-cursor-not-allowed cqa-text-[#9CA3AF]': disabled,\n          'cqa-outline-none': true\n        }\"\n        [ngClass]=\"textareaSizeClasses\"\n        [ngClass]=\"resizeClass\"\n        [style]=\"textareaStyles\"\n        [placeholder]=\"placeholder\"\n        [value]=\"textareaValue\"\n        (input)=\"onInput($event)\"\n        (focus)=\"onFocus($event)\"\n        (blur)=\"onBlur($event)\"\n        [disabled]=\"disabled\"\n        [attr.rows]=\"rows\"\n        [attr.cols]=\"cols\"\n        [attr.maxlength]=\"maxLength\"\n        [attr.aria-label]=\"ariaLabel || label\"\n        [attr.aria-invalid]=\"hasError\"\n        [attr.aria-required]=\"required\"\n      ></textarea>\n    </div>\n\n    <div *ngIf=\"!enableMarkdown && showCharCount && maxLength\" class=\"cqa-flex cqa-justify-end cqa-mt-1\">\n      <span class=\"cqa-text-xs cqa-text-[#6B7280]\">\n        {{ textareaValue.length }}/{{ maxLength }}\n      </span>\n    </div>\n\n    <div *ngIf=\"hasError\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n      <div *ngFor=\"let error of errors\" 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</div>\n\n","/**\n * Code editor styles as a string for use in component `styles` arrays.\n * Matches step-builder-custom-code form styling (custom-input, custom-textarea).\n * Using a string constant avoids Angular's style compiler receiving non-string values\n * (e.g. from styleUrls resolution in Storybook), which causes \"input.match is not a function\".\n */\nexport const CODE_EDITOR_STYLES = `\n.cqa-code-editor-container {\n  min-height: 200px;\n  height: 200px;\n  border: 1px solid #e5e7eb;\n  border-radius: 6px;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  background: #fff;\n  transition: border-color 0.2s, box-shadow 0.2s;\n}\n.cqa-code-editor-container:focus-within {\n  border-color: #3b82f6;\n  box-shadow: 0 0 0 1px #3b82f6;\n}\n.cqa-code-editor-container.cqa-has-errors {\n  border-color: #ef4444;\n}\n.cqa-code-editor-container.cqa-has-errors:focus-within {\n  border-color: #ef4444;\n  box-shadow: 0 0 0 1px #ef4444;\n}\n.cqa-code-editor-container .cqa-monaco-editor,\n.cqa-code-editor-container ngx-monaco-editor {\n  flex: 1;\n  min-height: 0;\n}\n.cqa-code-editor-container ::ng-deep .monaco-editor {\n  height: 100% !important;\n}\n.cqa-code-editor-fallback .cqa-code-editor-textarea {\n  width: 100%;\n  height: 100%;\n  min-height: 180px;\n  padding: 12px;\n  font-family: Monaco, Menlo, \"Ubuntu Mono\", Consolas, monospace;\n  font-size: 13px;\n  line-height: 1.5;\n  border: none;\n  resize: none;\n  outline: none;\n  background: #fff;\n  color: #0a0a0a;\n}\n.cqa-code-editor-fallback .cqa-code-editor-textarea::placeholder {\n  color: #9ca3af;\n}\n`;\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { CODE_EDITOR_STYLES } from './code-editor.styles';\n\n/** Maps custom code step language values to Monaco editor language IDs */\nexport const MONACO_LANGUAGE_MAP: Record<string, string> = {\n  javascript: 'javascript',\n  typescript: 'typescript',\n  python: 'python',\n  java: 'java',\n  ruby: 'ruby',\n  go: 'go',\n  rust: 'rust',\n  csharp: 'csharp',\n};\n\nexport interface CodeEditorMarker {\n  message: string;\n  severity: 'error' | 'warning' | 'info';\n  lineNumber: number;\n  column?: number;\n}\n\n@Component({\n  selector: 'cqa-code-editor',\n  templateUrl: './code-editor.component.html',\n  styles: [CODE_EDITOR_STYLES],\n  host: { class: 'cqa-ui-root' },\n})\nexport class CodeEditorComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() value = '';\n  @Input() language = 'javascript';\n  @Input() label = '';\n  @Input() required = false;\n  @Input() placeholder = '// Write your code here...';\n  @Input() fullWidth = true;\n  @Input() ariaLabel = '';\n  @Input() minHeight = '200px';\n  @Input() readOnly = false;\n  /** External error messages (e.g. from form validation). Shown alongside syntax errors. */\n  @Input() errors: string[] = [];\n  /** When true, use a plain textarea instead of Monaco (e.g. for Storybook where Monaco may not load) */\n  @Input() useFallback = false;\n\n  @Output() valueChange = new EventEmitter<string>();\n  @Output() validationChange = new EventEmitter<CodeEditorMarker[]>();\n  @Output() blur = new EventEmitter<void>();\n\n  @ViewChild('monacoEditor', { static: false }) monacoEditorRef: unknown;\n\n  codeValue = '';\n  validationErrors: CodeEditorMarker[] = [];\n  editorOptions: Record<string, unknown> = {};\n  private editorInstance: unknown = null;\n  private markersSubscription: (() => void) | null = null;\n  private fallbackSyntaxTimer: ReturnType<typeof setTimeout> | null = null;\n  private monacoMarkersTimer: ReturnType<typeof setTimeout> | null = null;\n\n  ngOnInit(): void {\n    this.codeValue = this.value ?? '';\n    this.updateEditorOptions();\n    // if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {\n    //   this.scheduleFallbackSyntaxCheck(this.codeValue);\n    // }\n  }\n\n  ngOnDestroy(): void {\n    if (this.fallbackSyntaxTimer) clearTimeout(this.fallbackSyntaxTimer);\n    if (this.monacoMarkersTimer) {\n      clearTimeout(this.monacoMarkersTimer);\n      this.monacoMarkersTimer = null;\n    }\n    this.markersSubscription?.();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['value'] && changes['value'].currentValue !== undefined) {\n      const newVal = changes['value'].currentValue ?? '';\n      // Only update when value actually changed - avoids overwriting user input during typing\n      // if (newVal !== this.codeValue) {\n      //   this.codeValue = newVal;\n      //   if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {\n      //     this.scheduleFallbackSyntaxCheck(newVal);\n      //   }\n      // }\n    }\n    // Only update editor options when language or readOnly changes - value changes must NOT\n    // recreate editorOptions or ngx-monaco-editor will re-init and dispose the editor,\n    // causing \"Canceled\" errors from Monaco's async operations (word highlighting, etc.)\n    if (changes['language'] || changes['readOnly']) {\n      this.updateEditorOptions();\n    }\n  }\n\n  private updateEditorOptions(): void {\n    const monacoLang = MONACO_LANGUAGE_MAP[this.language] || this.language || 'plaintext';\n    const hasDiagnostics = ['javascript', 'typescript'].includes(monacoLang);\n\n    this.editorOptions = {\n      theme: 'vs',\n      language: 'javascript',\n      minimap: { enabled: false },\n      scrollBeyondLastLine: false,\n      automaticLayout: true,\n      fontSize: 13,\n      lineNumbers: 'on',\n      roundedSelection: false,\n      readOnly: this.readOnly,\n      cursorStyle: 'line',\n      wordWrap: 'on',\n      // useWorker: false - Monaco workers require AMD loader (define) which fails in\n      // bundled environments (Storybook, some webpack setups). Running in main thread\n      // avoids \"define is not defined\" and worker creation errors.\n      ...(hasDiagnostics ? { quickSuggestions: true } : {}),\n      quickSuggestions: true,\n      suggestOnTriggerCharacters: true,\n      acceptSuggestionOnEnter: \"on\",\n      tabCompletion: \"on\",\n      wordBasedSuggestions: true,\n      parameterHints: {\n        enabled: true\n      },\n      // Disable TypeScript features\n      useWorker: false,\n      // Disable TypeScript validation\n      validate: false,\n      // Disable TypeScript diagnostics\n      diagnostics: false\n    };\n  }\n\n  onCodeChange(newValue: string): void {\n    this.codeValue = newValue;\n    this.valueChange.emit(newValue);\n    // if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {\n    //   this.scheduleFallbackSyntaxCheck(newValue);\n    // }\n  }\n\n  onFallbackInput(event: Event): void {\n    const target = event.target as HTMLTextAreaElement;\n    const newValue = target?.value ?? '';\n    this.codeValue = newValue;\n    this.valueChange.emit(newValue);\n    // if (['javascript', 'typescript'].includes(this.language)) {\n    //   this.scheduleFallbackSyntaxCheck(newValue);\n    // }\n  }\n\n  /** Debounced syntax check for fallback mode - avoids running on every keystroke */\n  private scheduleFallbackSyntaxCheck(code: string): void {\n    if (this.fallbackSyntaxTimer) clearTimeout(this.fallbackSyntaxTimer);\n    this.fallbackSyntaxTimer = setTimeout(() => {\n      this.fallbackSyntaxTimer = null;\n      this.checkFallbackSyntax(code);\n    }, 300);\n  }\n\n  /** Syntax validation for fallback (textarea) mode - JS/TS only */\n  private checkFallbackSyntax(code: string): void {\n    if (!['javascript', 'typescript'].includes(this.language)) {\n      this.validationErrors = [];\n      this.validationChange.emit(this.validationErrors);\n      return;\n    }\n    if (!code || !code.trim()) {\n      this.validationErrors = [];\n      this.validationChange.emit(this.validationErrors);\n      return;\n    }\n    try {\n      // Use AsyncFunction so that top-level `await` (valid in async contexts) is not\n      // flagged as a syntax error by the Function constructor.\n      const AsyncFunction = Object.getPrototypeOf(async function () {}).constructor;\n      new AsyncFunction(code);\n      this.validationErrors = [];\n    } catch (e) {\n      if (e instanceof SyntaxError) {\n        const err = e as SyntaxError & { lineNumber?: number; columnNumber?: number };\n        const line = err.lineNumber ?? 1;\n        this.validationErrors = [{\n          message: err.message || 'Syntax error',\n          severity: 'error',\n          lineNumber: line,\n          column: err.columnNumber,\n        }];\n      } else {\n        this.validationErrors = [];\n      }\n    }\n    this.validationChange.emit(this.validationErrors);\n  }\n\n  onEditorInit(editor: {\n    getModel?: () => { uri?: { toString?: () => string } };\n    onDidChangeModelContent?: (fn: () => void) => { dispose?: () => void };\n    onDidBlurEditorWidget?: (fn: () => void) => { dispose?: () => void };\n  }): void {\n    this.editorInstance = editor;\n    // this.configureMonacoForAsyncCode();\n    // this.setupMarkersListener(editor);\n    editor.onDidBlurEditorWidget?.(() => this.blur.emit());\n    // if (['javascript', 'typescript'].includes(this.language)) {\n    //   this.scheduleFallbackSyntaxCheck(this.codeValue);\n    // }\n  }\n\n  /** Configure Monaco JS/TS language defaults to allow top-level await.\n   *  Sets module target to ESNext (enables top-level await as a module) and\n   *  suppresses error code 1308 (\"await is only valid in async functions\") which\n   *  Monaco incorrectly raises when code runs in an async context on the test runner. */\n  private configureMonacoForAsyncCode(): void {\n    const win = window as unknown as {\n      monaco?: {\n        languages?: {\n          typescript?: {\n            javascriptDefaults?: {\n              setCompilerOptions?: (opts: Record<string, unknown>) => void;\n              getCompilerOptions?: () => Record<string, unknown>;\n              setDiagnosticsOptions?: (opts: Record<string, unknown>) => void;\n            };\n            ScriptTarget?: { ESNext?: number };\n            ModuleKind?: { ESNext?: number };\n          };\n        };\n      };\n    };\n    try {\n      const tsDefaults = win.monaco?.languages?.typescript;\n      if (!tsDefaults?.javascriptDefaults) return;\n      const jsDefaults = tsDefaults.javascriptDefaults;\n\n      // Set module to ESNext so Monaco treats code as a module → top-level await is valid\n      if (jsDefaults.setCompilerOptions) {\n        jsDefaults.setCompilerOptions({\n          ...(jsDefaults.getCompilerOptions?.() ?? {}),\n          target: tsDefaults.ScriptTarget?.ESNext ?? 99,\n          module: tsDefaults.ModuleKind?.ESNext ?? 99,\n        });\n      }\n\n      // Relax Monaco diagnostics so async snippets with top-level `await`\n      // (executed inside an async context in the runner) are not flagged.\n      if (jsDefaults.setDiagnosticsOptions) {\n        jsDefaults.setDiagnosticsOptions({\n          // Disable semantic diagnostics (where TS1308 comes from) but keep\n          // basic syntax highlighting/validation. Our own fallback checker\n          // still validates syntax using AsyncFunction.\n          noSemanticValidation: true,\n        });\n      }\n    } catch {\n      // Monaco not available — safe to ignore\n    }\n  }\n\n  private setupMarkersListener(editor: {\n    getModel?: () => { uri?: unknown };\n    onDidChangeModelContent?: (fn: () => void) => { dispose?: () => void };\n  }): void {\n    this.markersSubscription?.();\n\n    const model = editor.getModel?.();\n    if (!model?.uri) return;\n\n    const win = window as unknown as {\n      monaco?: {\n        editor?: {\n          getModelMarkers?: (filter: { resource?: unknown }) => Array<{\n            message?: string;\n            severity?: number;\n            startLineNumber?: number;\n            startColumn?: number;\n          }>;\n          onDidChangeMarkers?: (fn: (uris: unknown[]) => void) => { dispose?: () => void };\n        };\n      };\n    };\n\n    const checkMarkers = (): void => {\n      try {\n        if (!win.monaco?.editor?.getModelMarkers) return;\n        const markers = win.monaco.editor.getModelMarkers({ resource: model.uri }) || [];\n        const monacoErrors = markers\n          .filter((m) => m.severity === 8) // 8 = Error in Monaco\n          .map((m) => ({\n            message: m.message || 'Syntax error',\n            severity: 'error' as const,\n            lineNumber: m.startLineNumber || 1,\n            column: m.startColumn,\n          }));\n        // Only update from Monaco when it has markers - otherwise keep fallback results\n        // (Monaco may not produce markers when useWorker: false in bundled environments)\n        if (monacoErrors.length > 0) {\n          this.validationErrors = monacoErrors;\n          this.validationChange.emit(this.validationErrors);\n        }\n      } catch {\n        // Monaco may not be loaded yet\n      }\n    };\n\n    const disposeMarkers = win.monaco?.editor?.onDidChangeMarkers?.(() => {\n      checkMarkers();\n    });\n    const scheduleCheckMarkers = (): void => {\n      if (this.monacoMarkersTimer) clearTimeout(this.monacoMarkersTimer);\n      this.monacoMarkersTimer = setTimeout(() => {\n        this.monacoMarkersTimer = null;\n        checkMarkers();\n      }, 400);\n    };\n    editor.onDidChangeModelContent?.(scheduleCheckMarkers);\n    setTimeout(checkMarkers, 600);\n\n    this.markersSubscription = (): void => {\n      if (this.monacoMarkersTimer) {\n        clearTimeout(this.monacoMarkersTimer);\n        this.monacoMarkersTimer = null;\n      }\n      disposeMarkers?.dispose?.();\n    };\n  }\n\n  get hasValidationErrors(): boolean {\n    return this.validationErrors.length > 0;\n  }\n\n  get hasErrors(): boolean {\n    return (this.errors?.length ?? 0) > 0 || this.hasValidationErrors;\n  }\n\n  /** All error messages: external errors + syntax errors formatted as strings */\n  get allErrorMessages(): string[] {\n    const external = this.errors ?? [];\n    const syntax = this.validationErrors.map(\n      (e) => `Line ${e.lineNumber}: ${e.message}`\n    );\n    return [...external, ...syntax];\n  }\n}\n","<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","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'cqa-custom-toggle',\n  templateUrl: './custom-toggle.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class CustomToggleComponent {\n  @Input() checked: boolean = false;\n\n  @Input() disabled: boolean = false;\n\n  @Input() ariaLabel: string = '';\n\n  @Output() checkedChange = new EventEmitter<boolean>();\n\n  @Output() change = new EventEmitter<boolean>();\n\n  onToggle(): void {\n    if (!this.disabled) {\n      this.checked = !this.checked;\n      this.checkedChange.emit(this.checked);\n      this.change.emit(this.checked);\n    }\n  }\n}\n\n","<div class=\"cqa-ui-root\">\n  <button\n    type=\"button\"\n    class=\"cqa-custom-toggle\"\n    [class.cqa-toggle-checked]=\"checked\"\n    [class.cqa-toggle-disabled]=\"disabled\"\n    [disabled]=\"disabled\"\n    (click)=\"onToggle()\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-checked]=\"checked\"\n    role=\"switch\">\n    <span class=\"cqa-toggle-slider\"></span>\n  </button>\n</div>\n\n","import { Component, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\n\n@Component({\n  selector: 'cqa-file-upload',\n  templateUrl: './file-upload.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class FileUploadComponent {\n  /** Accepted file types (e.g., 'application/pdf,application/msword,.txt') */\n  @Input() accept: string = '.pdf,.doc,.docx,.txt';\n\n  /** Display text for accepted file types */\n  @Input() acceptedFileTypes: string = 'PDF, DOC, or TXT files';\n\n  /** Whether the component is disabled */\n  @Input() disabled: boolean = false;\n\n  /** Emit when file is selected */\n  @Output() fileSelected = new EventEmitter<File>();\n\n  /** Emit when file selection is cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  @ViewChild('fileInput') fileInput!: ElementRef<HTMLInputElement>;\n\n  isDragging: boolean = false;\n  selectedFile: File | null = null;\n\n  onDragOver(event: DragEvent): void {\n    if (this.disabled) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragging = true;\n  }\n\n  onDragLeave(event: DragEvent): void {\n    if (this.disabled) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragging = false;\n  }\n\n  onDrop(event: DragEvent): void {\n    if (this.disabled) return;\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragging = false;\n\n    const files = event.dataTransfer?.files;\n    if (files && files.length > 0) {\n      this.handleFile(files[0]);\n    }\n  }\n\n  onBrowseClick(): void {\n    if (this.disabled) return;\n    this.fileInput.nativeElement.click();\n  }\n\n  onFileInputChange(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    if (input.files && input.files.length > 0) {\n      this.handleFile(input.files[0]);\n    }\n  }\n\n  private handleFile(file: File): void {\n    this.selectedFile = file;\n    this.fileSelected.emit(file);\n  }\n\n  removeFile(): void {\n    this.selectedFile = null;\n    if (this.fileInput?.nativeElement) {\n      this.fileInput.nativeElement.value = '';\n    }\n    this.cancelled.emit();\n  }\n}\n\n","<div class=\"cqa-w-full\">\n  <!-- Drag and Drop Area -->\n  <div\n    class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-8 cqa-text-center cqa-cursor-pointer cqa-transition-colors\"\n    [class.cqa-border-[#3F43EE]]=\"isDragging\"\n    [class.cqa-bg-blue-50]=\"isDragging\"\n    [class.cqa-opacity-50]=\"disabled\"\n    [class.cqa-cursor-not-allowed]=\"disabled\"\n    (dragover)=\"onDragOver($event)\"\n    (dragleave)=\"onDragLeave($event)\"\n    (drop)=\"onDrop($event)\"\n    (click)=\"onBrowseClick()\">\n    \n    <!-- Upload Icon -->\n    <div class=\"cqa-flex cqa-justify-center cqa-mb-4\">\n      <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"40px\" viewBox=\"0 -960 960 960\" width=\"40px\" fill=\"#000000\"><path d=\"M440-320v-326L336-542l-56-58 200-200 200 200-56 58-104-104v326h-80ZM240-160q-33 0-56.5-23.5T160-240v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-160H240Z\"/></svg>\n    </div>\n\n    <!-- Upload Text -->\n    <p class=\"cqa-text-[14px] cqa-text-[#0A0A0A] cqa-mb-2\">\n      Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-cursor-pointer hover:cqa-underline\" (click)=\"onBrowseClick(); $event.stopPropagation()\">browse</span>\n    </p>\n\n    <!-- File Types -->\n    <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n      {{ acceptedFileTypes }}\n    </p>\n  </div>\n\n  <!-- Selected File Display -->\n  <div *ngIf=\"selectedFile\" class=\"cqa-mt-4 cqa-flex cqa-items-center cqa-justify-between cqa-bg-gray-50 cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-p-3\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M16.6667 15.8333V5.83333C16.6667 5.39131 16.4911 4.96738 16.1785 4.65482C15.866 4.34226 15.442 4.16667 15 4.16667H5C4.55797 4.16667 4.13405 4.34226 3.82149 4.65482C3.50893 4.96738 3.33333 5.39131 3.33333 5.83333V15.8333C3.33333 16.2754 3.50893 16.6993 3.82149 17.0118C4.13405 17.3244 4.55797 17.5 5 17.5H15C15.442 17.5 15.866 17.3244 16.1785 17.0118C16.4911 16.6993 16.6667 16.2754 16.6667 15.8333Z\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M6.66667 8.33333H13.3333M6.66667 11.6667H13.3333\" stroke=\"#6B7280\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n      <span class=\"cqa-text-[14px] cqa-text-gray-700 cqa-font-medium\">{{ selectedFile.name }}</span>\n    </div>\n    <button\n      type=\"button\"\n      (click)=\"removeFile(); $event.stopPropagation()\"\n      class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1\">\n      <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">close</mat-icon>\n    </button>\n  </div>\n\n  <!-- Hidden File Input -->\n  <input\n    #fileInput\n    type=\"file\"\n    [accept]=\"accept\"\n    (change)=\"onFileInputChange($event)\"\n    style=\"display: none;\"\n    [disabled]=\"disabled\">\n</div>\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-ai-reasoning',\n  templateUrl: './ai-reasoning.component.html',\n  styleUrls: []\n})\nexport class AiReasoningComponent {\n  @Input() reasoningPoints: string[] = [];\n}\n\n","<div class=\"cqa-ui-root\" style=\"display: block; width: 100%; height: 100%; max-height: 200px;\">\n  <div class=\"cqa-h-full cqa-bg-white cqa-rounded-lg cqa-flex cqa-flex-col cqa-gap-[10px]\" style=\"border: 1px solid #E5E7EB; box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2\">\n      <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n          <path d=\"M6.62467 10.3332C6.56515 10.1025 6.44489 9.89191 6.27641 9.72343C6.10793 9.55495 5.89738 9.43469 5.66667 9.37517L1.57667 8.32051C1.50689 8.3007 1.44547 8.25867 1.40174 8.2008C1.35801 8.14293 1.33435 8.07238 1.33435 7.99984C1.33435 7.9273 1.35801 7.85675 1.40174 7.79888C1.44547 7.74101 1.50689 7.69898 1.57667 7.67917L5.66667 6.62384C5.8973 6.56438 6.1078 6.44422 6.27627 6.27587C6.44474 6.10751 6.56504 5.8971 6.62467 5.66651L7.67933 1.57651C7.69894 1.50645 7.74092 1.44474 7.79888 1.40077C7.85684 1.35681 7.92759 1.33301 8.00033 1.33301C8.07308 1.33301 8.14383 1.35681 8.20179 1.40077C8.25974 1.44474 8.30173 1.50645 8.32133 1.57651L9.37533 5.66651C9.43485 5.89722 9.55511 6.10777 9.72359 6.27625C9.89207 6.44473 10.1026 6.56499 10.3333 6.62451L14.4233 7.67851C14.4937 7.69791 14.5557 7.73985 14.5999 7.79789C14.6441 7.85594 14.668 7.92688 14.668 7.99984C14.668 8.0728 14.6441 8.14374 14.5999 8.20179C14.5557 8.25983 14.4937 8.30177 14.4233 8.32117L10.3333 9.37517C10.1026 9.43469 9.89207 9.55495 9.72359 9.72343C9.55511 9.89191 9.43485 10.1025 9.37533 10.3332L8.32067 14.4232C8.30106 14.4932 8.25908 14.5549 8.20112 14.5989C8.14316 14.6429 8.07241 14.6667 7.99967 14.6667C7.92692 14.6667 7.85617 14.6429 7.79821 14.5989C7.74026 14.5549 7.69827 14.4932 7.67867 14.4232L6.62467 10.3332Z\" stroke=\"#0337DC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M13.3333 2V4.66667\" stroke=\"#0337DC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M14.6667 3.33301H12\" stroke=\"#0337DC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M2.66666 11.333V12.6663\" stroke=\"#0337DC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M3.33333 12H2\" stroke=\"#0337DC\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n      </mat-icon>\n      <h3 class=\"cqa-text-[10px] cqa-font-semibold cqa-text-[#0A0A0A]\" style=\"margin: 0;\">AI Reasoning</h3>\n    </div>\n\n    <ul class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-list-none cqa-m-0 cqa-px-3 cqa-pb-2 cqa-h-[100%-44px] cqa-overflow-y-auto\"\n      style=\"scrollbar-width: thin;\" \n      *ngIf=\"reasoningPoints && reasoningPoints.length > 0\">\n      <li *ngFor=\"let point of reasoningPoints\" class=\"cqa-flex cqa-items-start cqa-gap-2\">\n        <span class=\"cqa-w-1.5 cqa-h-1.5 cqa-rounded-full cqa-bg-[#0337DC] cqa-mt-1 cqa-flex-shrink-0\"></span>\n        <span class=\"cqa-text-[10px] cqa-text-[#737373]\" style=\"line-height: 1.5;\">{{ point }}</span>\n      </li>\n    </ul>\n\n    <div *ngIf=\"!reasoningPoints || reasoningPoints.length === 0\" class=\"cqa-text-[10px] cqa-text-[#737373]\n      cqa-px-3 cqa-pb-2\">\n      No reasoning points available.\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ButtonVariant } from '../button/button.component';\n\nexport type ExecutionStatus = 'passed' | 'failed' | 'aborted' | 'error';\n\nexport interface ExecutionResultButton {\n  label: string;\n  variant: ButtonVariant;\n  icon?: string;\n  action: string;\n  btnSize?: 'sm' | 'md' | 'lg';\n  fullWidth?: boolean;\n}\n\nexport interface FailedStep {\n  failedStep: number;\n  stepTitle?: string;\n  error?: string;\n  timestamp?: string;\n  suggestions?: string;\n  actual?: string;\n  expected?: string;\n}\n\nexport interface SkippedStep {\n  stepNumber: string;\n  label: string;\n}\n\n@Component({\n  selector: 'cqa-execution-result-modal',\n  templateUrl: './execution-result-modal.component.html',\n  styleUrls: []\n})\nexport class ExecutionResultModalComponent {\n  @Input() isOpen: boolean = false;\n  @Input() status: ExecutionStatus = 'passed';\n  @Input() title: string = '';\n  @Input() totalSteps: number = 0;\n  @Input() completedSteps: number = 0;\n  @Input() totalTime: string = '';\n  @Input() appTime: string = '';\n  @Input() toolTime: string = '';\n  @Input() lastCompletedStep?: string;\n  @Input() buttons: ExecutionResultButton[] = [];\n  @Input() failedSteps: FailedStep[] = [];\n  @Input() skippedSteps: SkippedStep[] = [];\n  @Input() showSessionChangesButton: boolean = false;\n  @Input() joinedInProgressMessage?: string;\n\n  @Output() buttonClick = new EventEmitter<string>();\n  @Output() closeModal = new EventEmitter<void>();\n  @Output() sessionChangesClick = new EventEmitter<void>();\n\n  get stepsBackgroundClass(): string {\n    switch (this.status) {\n      case 'passed':\n        return 'cqa-bg-[#0DBD7D1A]';\n      case 'failed':\n        return 'cqa-bg-[#EE3F3F1A]';\n      case 'aborted':\n        return 'cqa-bg-[#FBBF241A]';\n      default:\n        return 'cqa-bg-gray-100';\n    }\n  }\n\n  get stepsBorderClass(): string {\n    switch (this.status) {\n      case 'passed':\n        return '#BBF7D0';\n      case 'failed':\n        return '#FECACA';\n      case 'aborted':\n        return '#FDE68A';\n      default:\n        return '#E5E7EB';\n    }\n  }\n\n  get shouldShowLastCompletedStep(): boolean {\n    return this.status === 'aborted' && !!this.lastCompletedStep;\n  }\n\n  get shouldShowFailedSteps(): boolean {\n    return this.status === 'failed' && this.failedSteps && this.failedSteps.length > 0;\n  }\n\n  get shouldShowJoinedInProgressMessage(): boolean {\n    return !!this.joinedInProgressMessage;\n  }\n\n  get shouldShowSkippedSteps(): boolean {\n    return !!this.skippedSteps && this.skippedSteps.length > 0;\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    \n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.onClose();\n    }\n  }\n\n  onButtonClick(button: ExecutionResultButton): void {\n    this.buttonClick.emit(button.action);\n  }\n\n  onClose(): void {\n    this.closeModal.emit();\n  }\n\n  onSessionChangesClick(): void {\n    this.sessionChangesClick.emit();\n  }\n }\n \n","<div \n  *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div \n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808;\"\n    (click)=\"$event.stopPropagation()\">\n      \n      <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n          <div *ngIf=\"status === 'passed'\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\">\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#AEE9D4\"/>\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#CFF2E5\" stroke-width=\"8\"/>\n              <path d=\"M75.25 43.8549V46.4999C75.2465 52.6996 73.2389 58.732 69.5268 63.6976C65.8147 68.6632 60.5969 72.2957 54.6517 74.0536C48.7064 75.8114 42.3521 75.6003 36.5366 73.4518C30.7211 71.3033 25.7559 67.3324 22.3815 62.1314C19.0071 56.9305 17.4044 50.778 17.8123 44.5918C18.2202 38.4055 20.617 32.5168 24.6451 27.8039C28.6731 23.0911 34.1168 19.8066 40.164 18.4403C46.2113 17.074 52.5383 17.6991 58.2013 20.2224M75.25 23.4999L46.5 52.2786L37.875 43.6536\" stroke=\"#0DBD7D\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </div>\n  \n          <div *ngIf=\"status === 'failed'\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\">\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F9BFBF\"/>\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n              <path d=\"M55.125 37.875L37.875 55.125M37.875 37.875L55.125 55.125M75.25 46.5C75.25 62.3782 62.3782 75.25 46.5 75.25C30.6218 75.25 17.75 62.3782 17.75 46.5C17.75 30.6218 30.6218 17.75 46.5 17.75C62.3782 17.75 75.25 30.6218 75.25 46.5Z\" stroke=\"#EE3F3F\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </svg>\n          </div>\n  \n          <div *ngIf=\"status === 'aborted'\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\">\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#FEECBD\"/>\n              <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FFF9E9\" stroke-width=\"8\"/>\n              <path d=\"M46.5 17.75C30.63 17.75 17.75 30.63 17.75 46.5C17.75 62.37 30.63 75.25 46.5 75.25C62.37 75.25 75.25 62.37 75.25 46.5C75.25 30.63 62.37 17.75 46.5 17.75ZM46.5 69.5C33.7925 69.5 23.5 59.2075 23.5 46.5C23.5 33.7925 33.7925 23.5 46.5 23.5C59.2075 23.5 69.5 33.7925 69.5 46.5C69.5 59.2075 59.2075 69.5 46.5 69.5ZM58 58H35V35H58V58Z\" fill=\"#FBBF24\"/>\n              </svg>\n          </div>\n  \n        <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n          {{ title }}\n        </h2>\n      </div>\n  \n      <div class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-2\"\n           [ngClass]=\"stepsBackgroundClass\" style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n        <div class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n          <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n            <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n            <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n              {{ completedSteps }} / {{ totalSteps }}\n            </span>\n          </div>\n  \n          <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime && !shouldShowJoinedInProgressMessage\">\n            <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n            <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n              {{ totalTime }}\n            </span>\n          </div>\n\n          <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime && !shouldShowJoinedInProgressMessage\">\n            <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n            <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n              {{ appTime }}\n            </span>\n          </div>\n  \n          <!--\n            Tool Time is hidden until BE provides real values (CON-909).\n            Tracking ticket: https://linear.app/contextqa/issue/CON-909\n          <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n            <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n            <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n              {{ toolTime }}\n            </span>\n          </div>\n          -->\n        </div>\n      </div>\n\n      <div *ngIf=\"shouldShowJoinedInProgressMessage\"\n           class=\"cqa-rounded-[10px] cqa-p-[17px] cqa-my-2 cqa-text-[12px] cqa-text-[#364153] cqa-leading-[18px]\"\n           style=\"border: 1px solid #C7D2FE; background-color: #EEF2FF;\">\n        <div class=\"cqa-flex cqa-items-start cqa-gap-2\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" style=\"flex-shrink: 0; margin-top: 1px;\">\n            <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#6366F1\" stroke-width=\"2\"/>\n            <path d=\"M12 8h.01M11 12h1v4h1\" stroke=\"#6366F1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          <span>{{ joinedInProgressMessage }}</span>\n        </div>\n      </div>\n\n      <div *ngIf=\"shouldShowLastCompletedStep\" class=\"cqa-my-2 cqa-p-[17px] cqa-rounded-[10px] cqa-max-h-[200px] cqa-min-h-[80px] cqa-overflow-y-auto\" style=\"border: 1px solid #E5E7EB; scrollbar-width: thin; background-color: #F9FAFB;\">\n        <div class=\"cqa-text-[12px] cqa-text-[#364153] cqa-mb-1 cqa-leading-[18px]\">\n          Last completed step:\n        </div>\n        <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#101828] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n          <span [innerHTML]=\"lastCompletedStep\"></span>\n        </div>\n      </div>\n\n      <div *ngIf=\"shouldShowSkippedSteps\"\n      class=\"cqa-rounded-lg cqa-p-[17px] cqa-my-2 cqa-max-h-[200px] cqa-min-h-[80px] cqa-overflow-y-auto\"\n      style=\"border: 1px solid #E5E7EB; scrollbar-width: thin; background-color: #F9FAFB;\">\n        <div class=\"cqa-text-[12px] cqa-text-[#364153] cqa-mb-2 cqa-leading-[18px]\">\n          {{ skippedSteps.length }} step{{ skippedSteps.length === 1 ? '' : 's' }} skipped during execution (as configured) :\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n          <div *ngFor=\"let skipped of skippedSteps\"\n                class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#101828] cqa-leading-[18px]\"\n                style=\"word-break: break-word;\">\n            Step {{ skipped.stepNumber }}<span *ngIf=\"skipped.label\">: {{ skipped.label }}</span>\n          </div>\n        </div>\n      </div>\n\n      <div *ngIf=\"shouldShowFailedSteps\" class=\"cqa-my-2 cqa-max-h-[300px] cqa-min-h-[100px] cqa-overflow-y-auto\" style=\"scrollbar-width: thin;\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n          <div \n            *ngFor=\"let failedStep of failedSteps\" \n            class=\"cqa-rounded-lg cqa-p-[17px] cqa-bg-[#FEF2F2]\"\n            style=\"border: 1px solid #FECACA;\">\n            <div *ngIf=\"failedStep?.failedStep\" class=\"cqa-text-sm cqa-font-semibold cqa-text-[#111827] cqa-mb-2 cqa-leading-[18px]\">\n              Failed at Step {{ failedStep.failedStep }}<span *ngIf=\"failedStep.stepTitle\">: {{ failedStep.stepTitle }}</span>\n            </div>\n            <div *ngIf=\"failedStep.error\" class=\"cqa-text-[12px] cqa-text-[#B91C1C] cqa-mb-1 cqa-whitespace-normal cqa-break-anywhere\" style=\"word-break: break-word;\">\n              <span class=\"cqa-font-bold\">Error:</span> {{ failedStep.error }}\n            </div>\n            <div *ngIf=\"failedStep.actual\" class=\"cqa-text-[12px] cqa-text-[#B91C1C] cqa-mb-1 cqa-whitespace-normal cqa-break-anywhere\" style=\"word-break: break-word;\">\n              <span class=\"cqa-font-bold\">Actual:</span> {{ failedStep.actual }}\n            </div>\n            <div *ngIf=\"failedStep.expected\" class=\"cqa-text-[12px] cqa-text-[#B91C1C] cqa-mb-2 cqa-whitespace-normal cqa-break-anywhere\" style=\"word-break: break-word;\">\n              <span class=\"cqa-font-bold\">Expected:</span> {{ failedStep.expected }}\n            </div>\n            <div *ngIf=\"failedStep.suggestions\" class=\"cqa-text-[12px] cqa-text-[#B91C1C] cqa-mb-1 cqa-whitespace-normal cqa-break-anywhere\" style=\"word-break: break-word;\">\n              <span class=\"cqa-font-bold\">Suggestions:</span> {{ failedStep.suggestions }}\n            </div>\n            <div *ngIf=\"failedStep.timestamp\" class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[12px] cqa-text-[#636363]\">\n              <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                <path d=\"M6 1V6L9 7.5\" stroke=\"#636363\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"#636363\" stroke-width=\"1.5\"/>\n              </svg>\n              <span>View screenshot at {{ failedStep.timestamp }}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n  \n      <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n        <ng-container *ngFor=\"let button of buttons; let last = last\">\n          <cqa-button\n            *ngIf=\"showSessionChangesButton && last\"\n            variant=\"outlined\"\n            text=\"Review Session Changes\"\n            btnSize=\"lg\"\n            [fullWidth]=\"true\"\n            (clicked)=\"onSessionChangesClick()\">\n          </cqa-button>\n          <cqa-button\n            [variant]=\"button.variant\"\n            [text]=\"button.label\"\n            [icon]=\"button.icon\"\n            [btnSize]=\"button.btnSize || 'lg'\"\n            [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n            (clicked)=\"onButtonClick(button)\">\n          </cqa-button>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\n\nexport type SessionChangeType = 'added' | 'edited' | 'deleted';\n\nexport interface SessionChangeStep {\n  id: string;\n  uniqueId?: string;\n  stepNumber?: string;\n  stepDescription: string;\n  timestamp: string;\n  type: SessionChangeType;\n}\n\n@Component({\n  selector: 'cqa-session-changes-modal',\n  templateUrl: './session-changes-modal.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n})\nexport class SessionChangesModalComponent {\n  @Input() isOpen: boolean = false;\n  @Input() title: string = 'Session Changes';\n  @Input() addedSteps: SessionChangeStep[] = [];\n  @Input() editedSteps: SessionChangeStep[] = [];\n  @Input() deletedSteps: SessionChangeStep[] = [];\n  @Input() saveButtonLabel: string = 'Save to Test Case';\n  @Input() saveButtonDisabled: boolean = false;\n  @Input() executionInProgress: boolean = false;\n  @Input() commitMessageTemplate: string = 'This will commit all {{count}} changes to the test case';\n  @Input() showCancelButton: boolean = false;\n\n  @Output() closeModal = new EventEmitter<void>();\n  @Output() saveToTestCase = new EventEmitter<void>();\n  @Output() removeStep = new EventEmitter<{ id: string; type: SessionChangeType; uniqueId?: string }>();\n  @Output() cancel = new EventEmitter<void>();\n\n  get totalChangesCount(): number {\n    return (this.addedSteps?.length || 0) + (this.editedSteps?.length || 0) + (this.deletedSteps?.length || 0);\n  }\n\n  get commitMessage(): string {\n    const count = this.totalChangesCount;\n    return this.commitMessageTemplate.replace(/\\{\\{count\\}\\}/g, String(count));\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    if (target === currentTarget || target.classList.contains('session-changes-modal-backdrop')) {\n      this.onClose();\n    }\n  }\n\n  onClose(): void {\n    this.closeModal.emit();\n  }\n\n  get isSaveDisabled(): boolean {\n    return this.saveButtonDisabled || this.executionInProgress || this.totalChangesCount === 0;\n  }\n\n  get saveButtonTooltip(): string {\n    if (this.executionInProgress)return 'Button will be enabled after execution is complete';\n    return '';\n  }\n\n  onSave(): void {\n    if (!this.isSaveDisabled) {\n      this.saveToTestCase.emit();\n    }\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n  }\n\n  onRemoveStep(step: SessionChangeStep, event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.removeStep.emit({ id: step.id, type: step.type, uniqueId: step.uniqueId });\n  }\n\n  @HostListener('document:keydown.escape')\n  onEscape(): void {\n    if (this.isOpen) {\n      this.onClose();\n    }\n  }\n\n  trackByStepId(_index: number, step: SessionChangeStep): string {\n    return step.id;\n  }\n}\n","<div\n  *ngIf=\"isOpen\"\n  class=\"session-changes-modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-50 cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\"\n  role=\"dialog\"\n  aria-modal=\"true\"\n  [attr.aria-labelledby]=\"'session-changes-title'\"\n  [attr.aria-describedby]=\"'session-changes-content'\">\n  <div\n    class=\"cqa-rounded-[12px] cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[90vh] cqa-font-inter\"\n    style=\"box-shadow: 0px 8px 8px -4px rgba(16, 24, 40, 0.08);\"\n    (click)=\"$event.stopPropagation()\">\n    <!-- Header -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-6 cqa-pt-6 cqa-pb-4 cqa-border-b cqa-border-[#E5E7EB]\">\n      <h2\n        id=\"session-changes-title\"\n        class=\"cqa-text-[18px] cqa-font-semibold cqa-leading-[28px] cqa-text-[#333333] cqa-m-0\">\n        {{ title }}\n      </h2>\n      <cqa-button\n        type=\"button\"\n        variant=\"text\"\n        btnSize=\"md\"\n        icon=\"close\"\n        iconColor=\"#4A5565\"\n        [tooltip]=\"'Close modal'\"\n        tooltipPosition=\"below\"\n        customClass=\"!cqa-min-w-0 cqa-p-1\"\n        (clicked)=\"onClose()\">\n      </cqa-button>\n    </div>\n\n    <!-- Content -->\n    <div id=\"session-changes-content\" class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-6 cqa-py-4 cqa-flex cqa-flex-col cqa-gap-6\" style=\"scrollbar-width: thin;\">\n      <!-- Added Steps -->\n      <section\n        *ngIf=\"addedSteps?.length\"\n        class=\"cqa-flex cqa-flex-col cqa-gap-3\"\n        aria-labelledby=\"added-steps-heading\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <span class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5\" aria-hidden=\"true\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M7 2V12M2 7H12\" stroke=\"#22C55E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </span>\n          <h3 id=\"added-steps-heading\" class=\"cqa-text-[14px]  cqa-leading-[20px] cqa-m-0\" textColor=\"#0A0A0A\">\n            Added Steps\n          </h3>\n          <span\n            class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-py-0.5 cqa-px-2 cqa-rounded-full cqa-text-[12px] cqa-font-medium cqa-leading-[16px]\"\n            style=\"background-color: #E5E7EB; color: #6B7280;\">\n            {{ addedSteps.length }}\n          </span>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div\n            *ngFor=\"let step of addedSteps; trackBy: trackByStepId\"\n            class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-rounded-[8px] cqa-p-3 cqa-bg-[#F9FAFB] cqa-border cqa-border-[#E5E7EB]\">\n            <div class=\"cqa-flex-1 cqa-min-w-0\">\n              <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#0A0A0A] cqa-m-0\" style=\"word-break: break-word;\">\n                <span *ngIf=\"step.stepNumber\" class=\"cqa-font-semibold\">{{ step.stepNumber }}.</span>\n                {{ step.stepDescription }}\n              </p>\n              <p class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-[#6B7280] cqa-mt-1 cqa-m-0\">\n                {{ step.timestamp }}\n              </p>\n            </div>\n            <cqa-button\n              type=\"button\"\n              variant=\"text\"\n              btnSize=\"md\"\n              icon=\"delete_outline\"\n              iconColor=\"#99999E\"\n              [tooltip]=\"'Remove step: ' + step.stepDescription\"\n              tooltipPosition=\"below\"\n              customClass=\"cqa-shrink-0\"\n              (clicked)=\"onRemoveStep(step, $event)\">\n            </cqa-button>\n          </div>\n        </div>\n      </section>\n\n      <!-- Edited Steps -->\n      <section\n        *ngIf=\"editedSteps?.length\"\n        class=\"cqa-flex cqa-flex-col cqa-gap-3\"\n        aria-labelledby=\"edited-steps-heading\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <span class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5\" aria-hidden=\"true\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M8.5 2L12 5.5L5 12.5L1 13L2 9L8.5 2Z\" stroke=\"#F59E0B\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </span>\n          <h3 id=\"edited-steps-heading\" class=\"cqa-text-[14px] cqa-leading-[20px] cqa-m-0\" cqa-text-color=\"#0A0A0A\">\n            Edited Steps\n          </h3>\n          <span\n            class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-py-0.5 cqa-px-2 cqa-rounded-full cqa-text-[12px] cqa-font-medium cqa-leading-[16px]\"\n            style=\"background-color: #E5E7EB; color: #6B7280;\">\n            {{ editedSteps.length }}\n          </span>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div\n            *ngFor=\"let step of editedSteps; trackBy: trackByStepId\"\n            class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-rounded-[8px] cqa-p-3 cqa-bg-[#F9FAFB] cqa-border cqa-border-[#E5E7EB]\">\n            <div class=\"cqa-flex-1 cqa-min-w-0\">\n              <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#0A0A0A] cqa-m-0\" style=\"word-break: break-word;\">\n                <span *ngIf=\"step.stepNumber\" class=\"cqa-font-semibold\">{{ step.stepNumber }}.</span>\n                {{ step.stepDescription }}\n              </p>\n              <p class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-[#6B7280] cqa-mt-1 cqa-m-0\">\n                {{ step.timestamp }}\n              </p>\n            </div>\n            <cqa-button\n              type=\"button\"\n              variant=\"text\"\n              btnSize=\"md\"\n              icon=\"restore\"\n              iconColor=\"#99999E\"\n              [tooltip]=\"'Restore edited step: ' + step.stepDescription\"\n              tooltipPosition=\"below\"\n              customClass=\"cqa-shrink-0\"\n              (clicked)=\"onRemoveStep(step, $event)\">\n            </cqa-button>\n          </div>\n        </div>\n      </section>\n\n      <!-- Deleted Steps -->\n      <section\n        *ngIf=\"deletedSteps?.length\"\n        class=\"cqa-flex cqa-flex-col cqa-gap-3\"\n        aria-labelledby=\"deleted-steps-heading\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <span class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-5 cqa-h-5\" aria-hidden=\"true\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <path d=\"M2 7H12\" stroke=\"#EF4444\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </svg>\n          </span>\n          <h3 id=\"deleted-steps-heading\" class=\"cqa-text-[14px] cqa-leading-[20px] cqa-m-0\" textColor=\"#0A0A0A\">\n            Deleted Steps\n          </h3>\n          <span\n            class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-py-0.5 cqa-px-2 cqa-rounded-full cqa-text-[12px] cqa-font-medium cqa-leading-[16px]\"\n            style=\"background-color: #E5E7EB; color: #6B7280;\">\n            {{ deletedSteps.length }}\n          </span>\n        </div>\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div\n            *ngFor=\"let step of deletedSteps; trackBy: trackByStepId\"\n            class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-rounded-[8px] cqa-p-3 cqa-bg-[#F9FAFB] cqa-border cqa-border-[#E5E7EB]\">\n            <div class=\"cqa-flex-1 cqa-min-w-0\">\n              <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#0A0A0A] cqa-m-0\" style=\"word-break: break-word;\">\n                <span *ngIf=\"step.stepNumber\" class=\"cqa-font-semibold\">{{ step.stepNumber }}.</span>\n                {{ step.stepDescription }}\n              </p>\n              <p class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-[#6B7280] cqa-mt-1 cqa-m-0\">\n                {{ step.timestamp }}\n              </p>\n            </div>\n            <cqa-button\n              type=\"button\"\n              variant=\"text\"\n              btnSize=\"md\"\n              icon=\"restore\"\n              iconColor=\"#99999E\"\n              [tooltip]=\"'Restore deleted step: ' + step.stepDescription\"\n              tooltipPosition=\"below\"\n              customClass=\"cqa-shrink-0\"\n              (clicked)=\"onRemoveStep(step, $event)\">\n            </cqa-button>\n          </div>\n        </div>\n      </section>\n\n      <!-- Empty state -->\n      <p *ngIf=\"!addedSteps?.length && !editedSteps?.length && !deletedSteps?.length\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-m-0\">\n        No session changes to display.\n      </p>\n    </div>\n\n    <!-- Footer -->\n    <div class=\"cqa-px-6 cqa-pb-6 cqa-pt-2 cqa-border-t cqa-border-[#E5E7EB]\">\n      <div\n        *ngIf=\"totalChangesCount > 0\"\n        class=\"cqa-w-full cqa-rounded-[12px] cqa-bg-[#FCD9D9] cqa-px-3 cqa-py-[17px] cqa-mb-4\" style=\"border: 1px solid #F47F7F\">\n        <div class=\"cqa-flex cqa-gap-1\">\n          <span class=\"cqa-shrink-0 cqa-flex cqa-items-start cqa-mt-0.5\" aria-hidden=\"true\">\n            <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n              <g clip-path=\"url(#clip0_4369_21268)\">\n              <path d=\"M8 14.5C11.5899 14.5 14.5 11.5899 14.5 8C14.5 4.41015 11.5899 1.5 8 1.5C4.41015 1.5 1.5 4.41015 1.5 8C1.5 11.5899 4.41015 14.5 8 14.5Z\" stroke=\"#EE3F3F\" stroke-width=\"1.5\"/>\n              <path d=\"M8 4.66699V8.00032\" stroke=\"#EE3F3F\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n              <path d=\"M8 10.667H8.00667\" stroke=\"#EE3F3F\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n              </g>\n              <defs>\n              <clipPath id=\"clip0_4369_21268\">\n              <rect width=\"16\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n              </defs>\n              </svg>\n          </span>\n          <div class=\"cqa-min-w-0\">\n            <p class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#9F2A2A] cqa-m-0\">\n              This action cannot be undone\n            </p>\n            <p class=\"cqa-text-[12px] cqa-leading-[16px] cqa-text-[#9F2A2A] cqa-mt-1 cqa-m-0\">\n              The original test case will be permanently overwritten with your changes.\n            </p>\n          </div>\n        </div>\n      </div>\n      <div class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-mb-2 cqa-text-[12px] cqa-leading-[16px] cqa-text-[#414146]\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-mt-[1px]\">\n          <path d=\"M7 12.8334C10.2217 12.8334 12.8333 10.2217 12.8333 7.00008C12.8333 3.77842 10.2217 1.16675 7 1.16675C3.77834 1.16675 1.16667 3.77842 1.16667 7.00008C1.16667 10.2217 3.77834 12.8334 7 12.8334Z\" stroke=\"#4F46E5\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M7 9.33341V7.00008\" stroke=\"#4F46E5\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M7 4.66675H7.00583\" stroke=\"#4F46E5\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n        <span>After saving to test case, the steps will refresh to stay in sync.</span>\n      </div>\n      <cqa-button\n        [text]=\"saveButtonLabel\"\n        variant=\"filled\"\n        btnSize=\"lg\"\n        [fullWidth]=\"true\"\n        [disabled]=\"isSaveDisabled\"\n        [attr.aria-disabled]=\"isSaveDisabled\"\n        [tooltip]=\"saveButtonTooltip\"\n        tooltipPosition=\"above\"\n        (clicked)=\"onSave()\"\n        [inlineStyles]=\"'background-color: #4F46E5; border-color: #4F46E5; color: #FFFFFF;'\">\n      </cqa-button>\n      <p *ngIf=\"totalChangesCount > 0\" class=\"cqa-text-[10px] cqa-leading-[16px] cqa-text-[#414146] cqa-mt-2 cqa-mb-0 cqa-text-center\">\n        {{ commitMessage }}\n      </p>\n      <div *ngIf=\"showCancelButton\" class=\"cqa-flex cqa-justify-center cqa-mt-3\">\n        <cqa-button\n          [fullWidth]=\"true\"\n          variant=\"text\"\n          text=\"Cancel\"\n          (clicked)=\"onCancel()\">\n        </cqa-button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ButtonVariant } from '../button/button.component';\n\nexport interface ErrorModalButton {\n  label: string;\n  variant: ButtonVariant;\n  icon?: string;\n  action: string;\n  btnSize?: 'sm' | 'md' | 'lg';\n  fullWidth?: boolean;\n  /** When true, button is disabled and does not emit click */\n  disabled?: boolean;\n}\n\n@Component({\n  selector: 'cqa-error-modal',\n  templateUrl: './error-modal.component.html',\n  styleUrls: []\n})\nexport class ErrorModalComponent {\n  @Input() isOpen: boolean = false;\n  @Input() status: 'error' | 'success' = 'error';\n  @Input() title: string = 'Error';\n  @Input() instructionalMessage?: string;\n  @Input() errorMessage: string = '';\n  @Input() totalSteps: number = 0;\n  @Input() completedSteps: number = 0;\n  @Input() totalTime: string = '';\n  @Input() appTime: string = '';\n  @Input() toolTime: string = '';\n  @Input() buttons: ErrorModalButton[] = [];\n  /** When true, shows a loading badge instead of buttons (e.g. while waiting for async completion) */\n  @Input() showLoading: boolean = false;\n  /** Inline styles for the loading badge (e.g. min-height to match button). Pass from parent for reusability. */\n  @Input() loadingBadgeInlineStyles?: string;\n  /** Label shown inside the loading badge. Override per context (e.g. \"Restoring Session..\" vs \"Updating Steps..\"). */\n  @Input() loadingBadgeLabel: string = 'Updating Steps..';\n\n  @Output() buttonClick = new EventEmitter<string>();\n  @Output() closeModal = new EventEmitter<void>();\n\n  onBackdropClick(event: MouseEvent): void {\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    \n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.onClose();\n    }\n  }\n\n  onButtonClick(button: ErrorModalButton): void {\n    if (button.disabled) return;\n    this.buttonClick.emit(button.action);\n  }\n\n  onClose(): void {\n    this.closeModal.emit();\n  }\n\n  get stepsBackgroundClass(): string {\n    return 'cqa-bg-[#EE3F3F1A]';\n  }\n\n  get stepsBorderClass(): string {\n    return '#FECACA';\n  }\n\n  get hasTimingData(): boolean {\n    return !!(this.totalSteps || this.totalTime || this.appTime || this.toolTime);\n  }\n\n  getNonTextButtons(): ErrorModalButton[] {\n    return this.buttons.filter(button => button.variant !== 'text');\n  }\n\n  getTextButtons(): ErrorModalButton[] {\n    return this.buttons.filter(button => button.variant === 'text');\n  }\n}\n\n","<div *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n    <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n      <div *ngIf=\"status === 'error'\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n          <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n          </svg>\n      </div>\n      <div *ngIf=\"status === 'success'\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#AEE9D4\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#CFF2E5\" stroke-width=\"8\"/>\n          <path d=\"M75.25 43.8549V46.4999C75.2465 52.6996 73.2389 58.732 69.5268 63.6976C65.8147 68.6632 60.5969 72.2957 54.6517 74.0536C48.7064 75.8114 42.3521 75.6003 36.5366 73.4518C30.7211 71.3033 25.7559 67.3324 22.3815 62.1314C19.0071 56.9305 17.4044 50.778 17.8123 44.5918C18.2202 38.4055 20.617 32.5168 24.6451 27.8039C28.6731 23.0911 34.1168 19.8066 40.164 18.4403C46.2113 17.074 52.5383 17.6991 58.2013 20.2224M75.25 23.4999L46.5 52.2786L37.875 43.6536\" stroke=\"#0DBD7D\" stroke-width=\"4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </div>\n \n      <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n        {{ title }}\n      </h2>\n\n      <!-- Instructional Message -->\n      <p *ngIf=\"instructionalMessage\" class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n        {{ instructionalMessage }}\n      </p>\n    </div>\n\n    <!-- <div *ngIf=\"hasTimingData\" class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-4\" [ngClass]=\"stepsBackgroundClass\"\n      style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n      <div\n        class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n        <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n          <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n          <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n            {{ completedSteps }} / {{ totalSteps }}\n          </span>\n        </div>\n\n        <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime\">\n          <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n          <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n            {{ totalTime }}\n          </span>\n        </div>\n\n        <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime\">\n          <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n          <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n            {{ appTime }}\n          </span>\n        </div>\n\n        <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n          <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n          <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n            {{ toolTime }}\n          </span>\n        </div>\n      </div>\n    </div> -->\n\n    <!-- Error Message Section -->\n    <div *ngIf=\"errorMessage\" class=\"cqa-my-4 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n        {{ status === 'success' ? 'Details' : 'Error Message' }}\n      </div>\n      <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n        style=\"word-break: break-word; white-space: pre-line;\">\n        {{ errorMessage }}\n      </div>\n    </div>\n\n\n    <!-- Buttons (or loading badge when showLoading) -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n      <cqa-badge\n        *ngIf=\"showLoading\"\n        [label]=\"loadingBadgeLabel\"\n        icon=\"autorenew\"\n        [isLoading]=\"true\"\n        [fullWidth]=\"true\"\n        [centerContent]=\"true\"\n        variant=\"info\"\n        size=\"medium\"\n        [inlineStyles]=\"loadingBadgeInlineStyles\">\n      </cqa-badge>\n      <ng-container *ngIf=\"!showLoading\">\n        <cqa-button\n          *ngFor=\"let button of buttons; let i = index\"\n          [variant]=\"button.variant\"\n          [text]=\"button.label\"\n          [icon]=\"button.icon\"\n          [btnSize]=\"button.btnSize || 'lg'\"\n          [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n          [disabled]=\"button.disabled ?? false\"\n          (clicked)=\"onButtonClick(button)\">\n        </cqa-button>\n      </ng-container>\n    </div>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ButtonVariant } from '../button/button.component';\n\nexport type SessionRestorationState = 'restoring' | 'session-expired' | 'restoration-failed';\n\nexport interface SessionRestorationDialogButton {\n  label: string;\n  variant: ButtonVariant;\n  /** Action string emitted via `actionClick` when the button is pressed. */\n  action: string;\n  icon?: string;\n  btnSize?: 'sm' | 'md' | 'lg';\n  fullWidth?: boolean;\n  disabled?: boolean;\n}\n\nexport interface SessionRestorationFailedValidation {\n  level: string;\n  passed: boolean;\n  message: string;\n}\n\nexport interface SessionRestorationMetadata {\n  actualUrl?: string;\n  expectedUrl?: string;\n  targetStepId?: number | string;\n  targetStepUniqueId?: string;\n}\n\n/**\n * Dedicated dialog for the debug session-restoration flow. Replaces the\n * overloaded `cqa-error-modal` usage for these specific states:\n *\n *   1. `restoring`            — backend is restoring browser state (spinner only).\n *   2. `session-expired`      — validation failed; user must choose how to recover.\n *   3. `restoration-failed`   — restoration attempt failed; restart or stop.\n *\n * The component owns the action button set per state, so the consumer only\n * passes data and reacts to the emitted action.\n */\n@Component({\n  selector: 'cqa-session-restoration-dialog',\n  templateUrl: './session-restoration-dialog.component.html',\n  styleUrls: []\n})\nexport class SessionRestorationDialogComponent {\n  @Input() isOpen: boolean = false;\n  @Input() state: SessionRestorationState | null = null;\n\n  /** Optional title override. Defaults are derived from `state`. */\n  @Input() title?: string;\n  /** Optional instructional/sub message override. Defaults are derived from `state`. */\n  @Input() instructionalMessage?: string;\n\n  /** restoration-failed: the primary error text shown to the user. */\n  @Input() errorMessage?: string;\n\n  /** restoring: primary message inside the loader card. */\n  @Input() restoringMessage: string = 'Restoring browser session…';\n  /** restoring: small secondary line under the spinner. */\n  @Input() restoringSubMessage: string = 'This may take up to 30 seconds';\n\n  /** session-expired: list of failed validation checks. */\n  @Input() failedValidations?: SessionRestorationFailedValidation[];\n  /** session-expired and restoration-failed: warning bullets. */\n  @Input() warnings?: string[];\n  /** session-expired: URL comparison block. */\n  @Input() metadata?: SessionRestorationMetadata;\n\n  /**\n   * Action buttons rendered at the bottom of the dialog. Owned by the parent\n   * so each consumer decides which actions are appropriate (mirroring the\n   * pattern used by `cqa-error-modal`). Ignored when state === 'restoring'.\n   */\n  @Input() buttons: SessionRestorationDialogButton[] = [];\n\n  @Output() actionClick = new EventEmitter<string>();\n  @Output() closeModal = new EventEmitter<void>();\n\n  get resolvedTitle(): string {\n    if (this.title) return this.title;\n    switch (this.state) {\n      case 'restoring': return 'Restoring Session';\n      case 'session-expired': return 'Session Expired';\n      case 'restoration-failed': return 'Restoration Failed';\n      default: return '';\n    }\n  }\n\n  get resolvedInstructional(): string {\n    if (this.instructionalMessage != null) return this.instructionalMessage;\n    switch (this.state) {\n      case 'restoring': return this.restoringSubMessage;\n      case 'session-expired': return 'Choose an option below to continue:';\n      case 'restoration-failed': return 'Please choose an option below:';\n      default: return '';\n    }\n  }\n\n  get isRestoring(): boolean { return this.state === 'restoring'; }\n  get isSessionExpired(): boolean { return this.state === 'session-expired'; }\n  get isRestorationFailed(): boolean { return this.state === 'restoration-failed'; }\n\n  get hasUrlMetadata(): boolean {\n    return !!(this.metadata && (this.metadata.actualUrl || this.metadata.expectedUrl));\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    // Never dismiss while the backend is restoring — the user must wait.\n    if (this.isRestoring) return;\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.closeModal.emit();\n    }\n  }\n\n  onButtonClick(button: SessionRestorationDialogButton): void {\n    if (button.disabled) return;\n    this.actionClick.emit(button.action);\n  }\n}\n","<div *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n    <!-- Header (icon + title + sub-text) -->\n    <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n      <!-- Restoring: spinner icon -->\n      <div *ngIf=\"isRestoring\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#DBEAFE\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#EFF6FF\" stroke-width=\"8\"/>\n          <path d=\"M46.5 26.5V35.5M46.5 57.5V66.5M28.5 46.5H37.5M55.5 46.5H64.5M33.79 33.79L40.15 40.15M52.85 52.85L59.21 59.21M33.79 59.21L40.15 52.85M52.85 40.15L59.21 33.79\"\n                stroke=\"#2563EB\" stroke-width=\"4\" stroke-linecap=\"round\">\n            <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 46.5 46.5\" to=\"360 46.5 46.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n          </path>\n        </svg>\n      </div>\n\n      <!-- Session expired / restoration failed: warning icon -->\n      <div *ngIf=\"isSessionExpired || isRestorationFailed\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n          <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n        </svg>\n      </div>\n\n      <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n        {{ resolvedTitle }}\n      </h2>\n\n      <p *ngIf=\"resolvedInstructional\"\n         class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n        {{ resolvedInstructional }}\n      </p>\n    </div>\n\n    <!-- Restoring: centered message body -->\n    <div *ngIf=\"isRestoring\" class=\"cqa-my-2 cqa-p-4 cqa-rounded-lg cqa-bg-white cqa-text-center\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-medium\">\n        {{ restoringMessage }}\n      </div>\n    </div>\n\n    <!-- Restoration failed: error message -->\n    <div *ngIf=\"isRestorationFailed && errorMessage\"\n      class=\"cqa-my-1 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n        Error Message\n      </div>\n      <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n        style=\"word-break: break-word; white-space: pre-line;\">\n        {{ errorMessage }}\n      </div>\n    </div>\n\n    <!-- Failed validations (session-expired only) -->\n    <div *ngIf=\"isSessionExpired && failedValidations && failedValidations.length > 0\"\n      class=\"cqa-my-1 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-3 cqa-font-medium\">\n        Failed Validation Checks\n      </div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n        <div *ngFor=\"let validation of failedValidations\" class=\"cqa-flex cqa-flex-col\">\n          <div class=\"cqa-flex cqa-items-start cqa-gap-2\">\n            <svg *ngIf=\"!validation.passed\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n                 xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-mt-[2px]\">\n              <path d=\"M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM10 11C9.45 11 9 10.55 9 10V6C9 5.45 9.45 5 10 5C10.55 5 11 5.45 11 6V10C11 10.55 10.55 11 10 11ZM11 15H9V13H11V15Z\" fill=\"#EF4444\"/>\n            </svg>\n            <svg *ngIf=\"validation.passed\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\n                 xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-mt-[2px]\">\n              <path d=\"M10 0C4.48 0 0 4.48 0 10C0 15.52 4.48 20 10 20C15.52 20 20 15.52 20 10C20 4.48 15.52 0 10 0ZM8 15L3 10L4.41 8.59L8 12.17L15.59 4.58L17 6L8 15Z\" fill=\"#10B981\"/>\n            </svg>\n            <div class=\"cqa-flex-1\">\n              <div class=\"cqa-text-sm cqa-font-semibold cqa-text-[#111827]\">\n                {{ validation.level }}\n              </div>\n              <div class=\"cqa-text-xs cqa-text-[#6B7280] cqa-mt-1\">\n                {{ validation.message }}\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Warnings -->\n    <div *ngIf=\"(isSessionExpired || isRestorationFailed) && warnings && warnings.length > 0\"\n      class=\"cqa-my-1 cqa-p-4 cqa-rounded-lg cqa-bg-amber-50\"\n      style=\"border: 1px solid #FCD34D;\">\n      <div class=\"cqa-text-xs cqa-text-[#92400E] cqa-mb-2 cqa-font-medium\">\n        Warnings\n      </div>\n      <ul class=\"cqa-list-disc cqa-list-inside cqa-space-y-1\">\n        <li *ngFor=\"let warning of warnings\" class=\"cqa-text-sm cqa-text-[#78350F]\">\n          {{ warning }}\n        </li>\n      </ul>\n    </div>\n\n    <!-- URL metadata (session-expired only) -->\n    <div *ngIf=\"isSessionExpired && hasUrlMetadata\"\n      class=\"cqa-my-1 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n        <div *ngIf=\"metadata?.expectedUrl\">\n          <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-font-medium\">Expected URL</div>\n          <div class=\"cqa-text-sm cqa-text-[#111827] cqa-mt-1 cqa-break-all\">\n            {{ metadata?.expectedUrl }}\n          </div>\n        </div>\n        <div *ngIf=\"metadata?.actualUrl\">\n          <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-font-medium\">Actual URL</div>\n          <div class=\"cqa-text-sm cqa-text-[#EF4444] cqa-mt-1 cqa-break-all\">\n            {{ metadata?.actualUrl }}\n          </div>\n        </div>\n      </div>\n    </div>\n\n    <!-- Actions -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n      <!-- Restoring: spinner badge, no buttons -->\n      <cqa-badge\n        *ngIf=\"isRestoring\"\n        label=\"Restoring Session..\"\n        icon=\"autorenew\"\n        [isLoading]=\"true\"\n        [fullWidth]=\"true\"\n        [centerContent]=\"true\"\n        variant=\"info\"\n        size=\"medium\"\n        inlineStyles=\"min-height: 44px;\">\n      </cqa-badge>\n\n      <!-- Caller-supplied action buttons (session-expired / restoration-failed) -->\n      <ng-container *ngIf=\"!isRestoring\">\n        <cqa-button\n          *ngFor=\"let button of buttons\"\n          [variant]=\"button.variant\"\n          [text]=\"button.label\"\n          [icon]=\"button.icon\"\n          [btnSize]=\"button.btnSize || 'lg'\"\n          [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n          [disabled]=\"button.disabled ?? false\"\n          (clicked)=\"onButtonClick(button)\">\n        </cqa-button>\n      </ng-container>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\nimport { ButtonVariant } from '../button/button.component';\n\nexport type CaptureVideoDialogState = 'starting' | 'capturing' | 'ready' | 'failed';\n\nexport interface CaptureVideoDialogButton {\n  label: string;\n  variant: ButtonVariant;\n  action: string;\n  icon?: string;\n  btnSize?: 'sm' | 'md' | 'lg';\n  fullWidth?: boolean;\n  disabled?: boolean;\n}\n\n@Component({\n  selector: 'cqa-capture-video-dialog',\n  templateUrl: './capture-video-dialog.component.html',\n  styleUrls: []\n})\nexport class CaptureVideoDialogComponent {\n  @Input() isOpen: boolean = false;\n  @Input() state: CaptureVideoDialogState | null = null;\n\n  @Input() title?: string;\n  @Input() message?: string;\n  @Input() errorMessage?: string;\n\n  @Input() buttons: CaptureVideoDialogButton[] = [];\n\n  @Output() actionClick = new EventEmitter<string>();\n  @Output() closeModal = new EventEmitter<void>();\n\n  get isStarting(): boolean { return this.state === 'starting'; }\n  get isCapturing(): boolean { return this.state === 'capturing'; }\n  get isReady(): boolean { return this.state === 'ready'; }\n  get isFailed(): boolean { return this.state === 'failed'; }\n  get isInProgress(): boolean { return this.isStarting || this.isCapturing; }\n\n  get resolvedTitle(): string {\n    if (this.title) return this.title;\n    switch (this.state) {\n      case 'starting': return 'Starting Capture';\n      case 'capturing': return 'Capturing Video';\n      case 'ready': return 'Your Video is Ready';\n      case 'failed': return 'Video Capture Failed';\n      default: return '';\n    }\n  }\n\n  get resolvedMessage(): string {\n    if (this.message != null) return this.message;\n    switch (this.state) {\n      case 'starting': return 'Preparing the recorder for this segment.';\n      case 'capturing': return 'Recording the current segment. This will only take a few seconds.';\n      case 'ready': return 'Switch to the Captured tab in the simulator to watch it.';\n      case 'failed': return '';\n      default: return '';\n    }\n  }\n\n  get progressBadgeLabel(): string {\n    return this.isStarting ? 'Starting…' : 'Capturing…';\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    if (this.isInProgress) return;\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.closeModal.emit();\n    }\n  }\n\n  onButtonClick(button: CaptureVideoDialogButton): void {\n    if (button.disabled) return;\n    this.actionClick.emit(button.action);\n  }\n}\n","<div *ngIf=\"isOpen\"\n  class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n  (click)=\"onBackdropClick($event)\">\n  <div\n    class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[460px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-4 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n    style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n    <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n      <div *ngIf=\"isInProgress\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#DBEAFE\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#EFF6FF\" stroke-width=\"8\"/>\n          <path d=\"M46.5 26.5V35.5M46.5 57.5V66.5M28.5 46.5H37.5M55.5 46.5H64.5M33.79 33.79L40.15 40.15M52.85 52.85L59.21 59.21M33.79 59.21L40.15 52.85M52.85 40.15L59.21 33.79\"\n                stroke=\"#2563EB\" stroke-width=\"4\" stroke-linecap=\"round\">\n            <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 46.5 46.5\" to=\"360 46.5 46.5\" dur=\"1.5s\" repeatCount=\"indefinite\"/>\n          </path>\n        </svg>\n      </div>\n\n      <div *ngIf=\"isReady\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#10B981\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#D1FAE5\" stroke-width=\"8\"/>\n          <path d=\"M30 47L42 59L63 36\" stroke=\"white\" stroke-width=\"5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </div>\n\n      <div *ngIf=\"isFailed\">\n        <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n          <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n          <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n        </svg>\n      </div>\n\n      <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n        {{ resolvedTitle }}\n      </h2>\n\n      <p *ngIf=\"resolvedMessage\"\n         class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n        {{ resolvedMessage }}\n      </p>\n    </div>\n\n    <div *ngIf=\"isFailed && errorMessage\"\n      class=\"cqa-my-1 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n      style=\"border: 1px solid #E5E7EB;\">\n      <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n        Error Message\n      </div>\n      <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n        style=\"word-break: break-word; white-space: pre-line;\">\n        {{ errorMessage }}\n      </div>\n    </div>\n\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n      <cqa-badge\n        *ngIf=\"isInProgress\"\n        [label]=\"progressBadgeLabel\"\n        icon=\"autorenew\"\n        [isLoading]=\"true\"\n        [fullWidth]=\"true\"\n        [centerContent]=\"true\"\n        variant=\"info\"\n        size=\"medium\"\n        inlineStyles=\"min-height: 44px;\">\n      </cqa-badge>\n\n      <ng-container *ngIf=\"!isInProgress\">\n        <cqa-button\n          *ngFor=\"let button of buttons\"\n          [variant]=\"button.variant\"\n          [text]=\"button.label\"\n          [icon]=\"button.icon\"\n          [btnSize]=\"button.btnSize || 'lg'\"\n          [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n          [disabled]=\"button.disabled ?? false\"\n          (clicked)=\"onButtonClick(button)\">\n        </cqa-button>\n      </ng-container>\n    </div>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-progress-indicator',\n  templateUrl: './progress-indicator.component.html',\n  styleUrls: []\n})\nexport class ProgressIndicatorComponent {\n  @Input() variant: 'progress' | 'elapsed-time' = 'progress';\n  @Input() label: string = 'Progress'; \n  @Input() icon?: string;\n  \n  // Elapsed time specific inputs\n  @Input() value: string = '';\n  \n  // Progress specific inputs\n  @Input() progress: number = 0; \n  @Input() size: number = 32; // Size of the spinner in pixels\n  @Input() strokeWidth: number = 4; // Width of the progress circle \n  color: string = '#3F43EE';\n\n\n  // Calculate the stroke-dasharray and stroke-dashoffset for the SVG circle to represent the progress percentage\n  get circleStyles() {\n    const radius = (this.size - this.strokeWidth) / 2;\n    const circumference = 2 * Math.PI * radius;\n    const offset = circumference - (this.progress / 100) * circumference;\n    \n    return {\n      strokeDasharray: `${circumference} ${circumference}`,\n      strokeDashoffset: offset,\n      r: radius,\n      cx: this.size / 2,\n      cy: this.size / 2\n    };\n  }\n\n  get cardStyles() {\n    return {\n      'border': `1px solid ${this.color}`\n    };\n  }\n}","<div class=\"cqa-ui-root\">\n  <div \n    class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-p-[21px] cqa-transition-colors cqa-rounded-xl cqa-bg-surface-default\"\n    [ngStyle]=\"cardStyles\">\n    \n    <!-- Progress Spinner SVG -->\n    <div class=\"cqa-flex-shrink-0\" *ngIf=\"variant === 'progress' && !icon\">\n      <svg \n        [attr.width]=\"size\" \n        [attr.height]=\"size\" \n        class=\"cqa-transform cqa--rotate-90\"\n        style=\"overflow: visible;\">\n        <!-- Background circle -->\n        <circle\n          [attr.cx]=\"circleStyles.cx\"\n          [attr.cy]=\"circleStyles.cy\"\n          [attr.r]=\"circleStyles.r\"\n          fill=\"none\"\n          stroke=\"#D8D9FC\"\n          [attr.stroke-width]=\"strokeWidth\"\n        />\n        <!-- Progress circle -->\n        <circle\n          [attr.cx]=\"circleStyles.cx\"\n          [attr.cy]=\"circleStyles.cy\"\n          [attr.r]=\"circleStyles.r\"\n          fill=\"none\"\n          [attr.stroke]=\"color\"\n          [attr.stroke-width]=\"strokeWidth\"\n          [attr.stroke-dasharray]=\"circleStyles.strokeDasharray\"\n          [attr.stroke-dashoffset]=\"circleStyles.strokeDashoffset\"\n          stroke-linecap=\"round\"\n          class=\"cqa-transition-all cqa-duration-300 cqa-ease-in-out\"\n        />\n      </svg>\n    </div>\n    <mat-icon *ngIf=\"icon\" class=\"cqa-text-primary !cqa-text-[32px] cqa-w-[32px] cqa-h-[32px]\">{{ icon }}</mat-icon>\n    \n    <!-- Text Content -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n      <span class=\"cqa-text-sm cqa-font-normal cqa-leading-tight cqa-tracking-[-0.2px] cqa-text-primary-hover\">\n        {{ label }}\n      </span>\n      <span *ngIf=\"variant === 'progress'\" class=\"cqa-text-2xl cqa-font-bold cqa-leading-tight cqa-tracking-[-0.2px] cqa-text-primary\">\n        {{ progress }}%\n      </span>\n      <span *ngIf=\"variant === 'elapsed-time'\" class=\"cqa-text-2xl cqa-font-bold cqa-leading-tight cqa-tracking-[-0.2px] cqa-text-primary\">\n        {{ value }}\n      </span>\n    </div>\n  </div>\n</div>","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-step-progress-card',\n  templateUrl: './step-progress-card.component.html',\n  styleUrls: []\n})\nexport class StepProgressCardComponent {\n  @Input() currentStep: number = 4;\n  @Input() totalSteps: number = 6;\n  @Input() subText?: string;\n\n  get progressPercentage(): number {\n    return (this.currentStep / this.totalSteps) * 100;\n  }\n\n  get stepText(): string {\n    return `Step ${this.currentStep} of ${this.totalSteps}`;\n  }\n}\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-px-[25px] cqa-py-3 cqa-rounded-[14px] cqa-bg-surface-default cqa-flex cqa-flex-col cqa-relative cqa-shadow\"\n    [ngStyle]=\"{ border: '1px solid #E5E7EB' }\">\n    <!-- Card Header with Title and Step Info -->\n    <div class=\"cqa-flex cqa-justify-between cqa-items-center cqa-gap-2 cqa-mb-2\">\n      <span class=\"cqa-font-normal cqa-text-base cqa-leading-6 cqa-text-[#364153]\">Setup Progress</span>\n      <span class=\"cqa-font-normal cqa-text-sm cqa-leading-[18px] cqa-text-metadata-key\">{{ stepText }}</span>\n    </div>\n\n    <!-- Progress Bar -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1\">\n      <div class=\"cqa-w-full cqa-h-[10px] cqa-rounded-full cqa-bg-primary-surface cqa-overflow-hidden cqa-relative\">\n        <div \n          class=\"cqa-h-full cqa-bg-primary cqa-rounded-full cqa-transition-all cqa-duration-300 cqa-ease-in-out\" \n          [style.width.%]=\"progressPercentage\">\n        </div>\n      </div>\n    </div>\n\n    <!-- Sub Text -->\n    <div *ngIf=\"subText\" class=\"cqa-font-normal cqa-text-xs cqa-text-metadata-key cqa-mt-1 cqa-truncate cqa-whitespace-nowrap cqa-leading-tight\">\n        {{ subText }}\n    </div>\n  </div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-step-status-card',\n  templateUrl: './step-status-card.component.html',\n  styleUrls: []\n})\nexport class StepStatusCardComponent {\n  @Input() title: string = '';\n  @Input() description: string = '';\n  @Input() type: 'ready' | 'running' | 'waiting' = 'waiting';\n  @Input() icon?: string = '';\n\n  get statusConfig() {\n    const configs = {\n      ready: {\n        borderColor: '#B9F8CF',\n        bgColor: '#F0FDF4',\n        iconColor: '#00A63E',\n        statusColor: '#008236',\n        statusBgColor: '#DCFCE7',\n        icon: 'check_circle',\n        label: 'Ready'\n      },\n      running: {\n        borderColor: '#D8D9FC',\n        bgColor: '#D8D9FC4D',\n        iconColor: '#1B1FEB',\n        statusColor: '#1216CC',\n        statusBgColor: '#D8D9FC',\n        icon: '',\n        label: 'Running'\n      },\n      waiting: {\n        borderColor: '#E5E7EB',\n        bgColor: '#FFFFFF',\n        iconColor: '#99A1AF',\n        statusColor: '#4A5565',\n        statusBgColor: '#F3F4F6',\n        icon: 'schedule',\n        label: 'Waiting'\n      }\n    };\n    return configs[this.type];\n  }\n\n  get cardStyles() {\n    return {\n      'border': '1px solid '+ (this.statusConfig?.borderColor || '#E5E7EB'),\n      'background-color': (this.statusConfig?.bgColor || '#FFFFFF')\n    };\n  }\n}\n","<div class=\"cqa-ui-root\">\n  <div \n    class=\"cqa-p-4 cqa-rounded-[14px] cqa-shadow cqa-flex cqa-items-center cqa-justify-between cqa-transition-all\"\n    [ngStyle]=\"cardStyles\">\n    \n    <!-- Left Section: Icon and Text -->\n    <div class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-flex-1\">\n      <!-- Icon -->\n      <div class=\"cqa-mt-1\">\n        <mat-icon \n          *ngIf=\"icon || statusConfig?.icon\"\n          class=\"!cqa-text-[20px] cqa-w-[20px] cqa-h-[20px]\"\n          [ngClass]=\"{ 'cqa-animate-spin': type === 'running' }\"\n          [ngStyle]=\"{ color: statusConfig?.iconColor }\">\n          {{ icon || statusConfig?.icon }}\n        </mat-icon>\n\n        <svg *ngIf=\"type === 'running' && !icon\" class=\"cqa-animate-spin\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" \n          fill=\"none\" [attr.stroke]=\"statusConfig?.iconColor\" stroke-width=\"2\">\n          <path d=\"M21 12a9 9 0 1 1-6.219-8.56\"></path>\n        </svg>\n      </div>\n      \n      <!-- Text Content -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n        <span class=\"cqa-text-base cqa-leading-6 cqa-text-[#101828] cqa-tracking-normal\">\n          {{ title }}\n        </span>\n        <span class=\"cqa-text-sm cqa-font-normal cqa-leading-[18px] cqa-text-[#4A5565] cqa-tracking-normal\">\n          {{ description }}\n        </span>\n      </div>\n    </div>\n    \n    <!-- Right Section: Status Badge -->\n    <div class=\"cqa-flex-shrink-0\">\n      <span \n        class=\"cqa-px-2 cqa-py-0.5 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-leading-4 cqa-tracking-normal\"\n        [ngStyle]=\"{ color: statusConfig?.statusColor, backgroundColor: statusConfig?.statusBgColor}\">\n        {{ statusConfig?.label }}\n      </span>\n    </div>\n  </div>\n</div>\n","import { Component, Input, OnInit, ChangeDetectorRef } from '@angular/core';\nimport { DbQueryResult } from '../execution-step.models';\nimport { DynamicTableColumn } from '../../table/dynamic-table/dynamic-table.component';\nimport { EmptyStateConfig } from '../../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';\n\n@Component({\n  selector: 'cqa-db-query-execution-item',\n  templateUrl: './db-query-execution-item.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class DbQueryExecutionItemComponent implements OnInit {\n  @Input() queryNumber!: number;\n  @Input() queryKey!: string;\n  @Input() queryResult!: DbQueryResult;\n  @Input() status!: 'passed' | 'failed';\n  @Input() variableName?: string;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: string }) => void;\n\n  isExpanded: boolean = false;\n  responseTableColumns: DynamicTableColumn[] = [];\n  \n  // Tooltip states for collapsed view\n  showQueryCopiedCollapsed: boolean = false;\n  private queryCopiedCollapsedTimeout?: any;\n  showResponseCopiedCollapsed: boolean = false;\n  private responseCopiedCollapsedTimeout?: any;\n  \n  // Tooltip states for expanded view\n  showQueryCopiedExpanded: boolean = false;\n  private queryCopiedExpandedTimeout?: any;\n  showResponseCopiedExpanded: boolean = false;\n  private responseCopiedExpandedTimeout?: any;\n  \n  emptyStateConfig: EmptyStateConfig = {\n    title: 'No Data',\n    description: 'No data returned from this query.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: [],\n  };\n\n  pageIndex: number = 0;\n  pageSize: number = 10;\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.setupResponseTableColumns();\n  }\n\n  toggle(): void {\n    this.isExpanded = !this.isExpanded;\n    if (this.isExpanded) {\n      this.setupResponseTableColumns();\n    }\n    this.cdr.markForCheck();\n    this.cdr.detectChanges();\n  }\n\n  copyQueryCollapsed(): void {\n    if (this.queryResult?.query) {\n      navigator.clipboard.writeText(this.queryResult.query).then(() => {\n        this.showQueryCopiedCollapsed = true;\n        \n        // Clear any existing timeout\n        if (this.queryCopiedCollapsedTimeout) {\n          clearTimeout(this.queryCopiedCollapsedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.queryCopiedCollapsedTimeout = setTimeout(() => {\n          this.showQueryCopiedCollapsed = false;\n        }, 2000);\n      });\n    }\n  }\n\n  copyQueryExpanded(): void {\n    if (this.queryResult?.query) {\n      navigator.clipboard.writeText(this.queryResult.query).then(() => {\n        this.showQueryCopiedExpanded = true;\n        \n        // Clear any existing timeout\n        if (this.queryCopiedExpandedTimeout) {\n          clearTimeout(this.queryCopiedExpandedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.queryCopiedExpandedTimeout = setTimeout(() => {\n          this.showQueryCopiedExpanded = false;\n        }, 2000);\n      });\n    }\n  }\n\n  copyResponseCollapsed(): void {    \n    const response = JSON.stringify(this.queryResult.data, null, 2);\n    navigator.clipboard.writeText(response).then(() => {\n      this.showResponseCopiedCollapsed = true;\n      \n      // Clear any existing timeout\n      if (this.responseCopiedCollapsedTimeout) {\n        clearTimeout(this.responseCopiedCollapsedTimeout);\n      }\n      \n      // Hide tooltip after 2 seconds\n      this.responseCopiedCollapsedTimeout = setTimeout(() => {\n        this.showResponseCopiedCollapsed = false;\n      }, 2000);\n    });\n  }\n\n  copyResponseExpanded(): void {\n    const response = JSON.stringify(this.queryResult.data, null, 2);\n    navigator.clipboard.writeText(response).then(() => {\n      this.showResponseCopiedExpanded = true;\n      \n      // Clear any existing timeout\n      if (this.responseCopiedExpandedTimeout) {\n        clearTimeout(this.responseCopiedExpandedTimeout);\n      }\n      \n      // Hide tooltip after 2 seconds\n      this.responseCopiedExpandedTimeout = setTimeout(() => {\n        this.showResponseCopiedExpanded = false;\n      }, 2000);\n    });\n  }\n\n  formatDuration(seconds: number): string {\n    if (seconds < 1) {\n      return `${(seconds * 1000).toFixed(0)}ms`;\n    }\n    if (seconds < 60 && !Number.isInteger(seconds)) {\n      return `${seconds.toFixed(1)}s`;\n    }\n    const hours = Math.floor(seconds / 3600);\n    const minutes = Math.floor((seconds % 3600) / 60);\n    const secs = Math.floor(seconds % 60);\n    const parts: string[] = [];\n    if (hours > 0) {\n      parts.push(`${hours}h`);\n    }\n    if (minutes > 0) {\n      parts.push(`${minutes}m`);\n    }\n    if (secs > 0 || (hours === 0 && minutes === 0)) {\n      parts.push(`${secs}s`);\n    }\n    return parts.join(' ');\n  }\n\n  get isEmptyResponse(): boolean {\n    return this.queryResult?.data?.length === 0;\n  }\n\n  private setupResponseTableColumns(): void {\n    const data = this.queryResult?.data || [];\n    if (data.length === 0) {\n      this.responseTableColumns = [];\n      return;\n    }\n\n    // Get all unique keys from the data objects\n    const firstItem = data[0];\n    if (typeof firstItem !== 'object' || firstItem === null) {\n      this.responseTableColumns = [];\n      return;\n    }\n\n    const keys = Object.keys(firstItem);\n    this.responseTableColumns = keys.map(key => ({\n      fieldId: key,\n      fieldName: key,\n      fieldValue: key,\n      isShow: true,\n      weight: 1,\n      render: (row: any) => {\n        const value = row[key] ?? '-';\n        const displayValue = value === null || value === undefined ? '' : String(value);\n        return `\n          <div class=\"cqa-text-[12px] cqa-text-[#0F172B]\">\n            ${this.escapeHtml(displayValue)}\n          </div>\n        `;\n      }\n    }));\n  }\n\n  private escapeHtml(text: string): string {\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n\n  onPageChange(event: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = event.pageIndex;\n    this.pageSize = event.pageSize;\n  }\n\n  get cellJsonPathGetter(): (rowIndex: number, colId: string) => string {\n    const baseName = this.variableName || this.queryKey || 'data';\n    const pageIdx = this.pageIndex;\n    const pageSz = this.pageSize;\n    return (rowIndex: number, colId: string) => {\n      const actualIndex = pageIdx * pageSz + rowIndex;\n      return `${baseName}[${actualIndex}].${colId}`;\n    };\n  }\n}\n\n","<div class=\"cqa-border !cqa-border-b-2 cqa-border-solid cqa-rounded-lg cqa-overflow-hidden\" [ngClass]=\"{'cqa-bg-[#F8FAFC] cqa-border-[#E2E8F0]': status === 'passed', 'cqa-bg-[#FEF2F2] cqa-border-[#FFC9C9]': status === 'failed'}\">\n  <!-- Header (Collapsed View) -->\n  <div \n    class=\"cqa-flex cqa-items-center cqa-justify-between cqa-px-4 cqa-py-2 cqa-cursor-pointer cqa-flex-wrap\"\n    (click)=\"toggle()\"\n    role=\"button\">\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-wrap  cqa-gap-2 cqa-w-[calc(100%-15px)]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-1\">\n        <span class=\"cqa-font-semibold cqa-text-[10px] cqa-text-[#314158] cqa-min-w-max\">Query {{ queryNumber }}</span>\n        \n        <!-- Status Badge -->\n        <cqa-badge class=\"cqa-mb-0.5\"\n          *ngIf=\"status === 'passed'\"\n          label=\"Passed\"\n          backgroundColor=\"#DCFCE7\"\n          textColor=\"#22C55E\"\n          inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n          icon=\"check_circle\"\n          size=\"small\">\n        </cqa-badge>\n        <cqa-badge class=\"cqa-mb-0.5\"\n          *ngIf=\"status === 'failed'\"\n          label=\"Failed\"\n          backgroundColor=\"#FEE2E2\"\n          textColor=\"#DC2626\"\n          icon=\"error\"\n          inlineStyles=\"border-radius: 50px; margin-top: 2px;\"\n          size=\"small\">\n        </cqa-badge>\n        \n        <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#62748E] cqa-min-w-max\" *ngIf=\"queryResult?.duration || queryResult?.data?.length > 0\">\n          {{ formatDuration(queryResult?.duration) }}\n          <span *ngIf=\"queryResult?.data?.length > 0 && queryResult?.duration\"> • </span>\n          <span *ngIf=\"queryResult?.data?.length > 0\">{{ queryResult?.data?.length || 0 }} rows</span>\n        </span>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <button\n        (click)=\"copyQueryCollapsed(); $event.stopPropagation()\"\n        class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        Copy Query\n        \n        <!-- Copied Tooltip -->\n        <div \n          *ngIf=\"showQueryCopiedCollapsed\" \n          class=\"cqa-absolute cqa-top-0 cqa-left-7 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n          style=\"animation: fadeInOut 0.2s ease-in-out;\">\n          Copied!\n        </div>\n      </button>\n      <button\n        (click)=\"copyResponseCollapsed(); $event.stopPropagation()\"\n        class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-bg-transparent cqa-cursor-pointer cqa-relative\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        Copy Response\n        \n        <!-- Copied Tooltip -->\n        <div \n          *ngIf=\"showResponseCopiedCollapsed\" \n          class=\"cqa-absolute cqa-top-0 cqa-left-7  cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n          style=\"animation: fadeInOut 0.2s ease-in-out;\">\n          Copied!\n        </div>\n      </button>\n      </div>\n    </div>\n    \n    <div class=\"cqa-flex cqa-items-center cqa-min-w-max\">\n      <svg \n        [class.cqa-rotate-180]=\"isExpanded\" \n        [matTooltip]=\"isExpanded ? 'Collapse' : 'Expand to view the query and response.'\"\n        matTooltipPosition=\"above\"\n        class=\"cqa-transition-transform cqa-min-w-max\" \n        width=\"14\" \n        height=\"14\" \n        viewBox=\"0 0 14 14\" \n        fill=\"none\" \n        xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </div>\n  </div>\n\n  <!-- Expanded Content -->\n  <div *ngIf=\"isExpanded === true\" class=\"cqa-bg-white cqa-border-t cqa-border-b-0 cqa-border-l-0 cqa-border-r-0 cqa-border-solid\" [ngClass]=\"{'cqa-border-[#E2E8F0]': status === 'passed', 'cqa-border-[#FFC9C9]': status === 'failed'}\">\n    <!-- Query Section -->\n    <div class=\"cqa-px-4 cqa-py-3\">\n      <div class=\"cqa-text-[12px] cqa-leading-[16px] cqa-font-semibold cqa-text-[#314158] cqa-mb-2\">Query</div>\n      <div class=\"cqa-relative cqa-bg-[#0F172B] cqa-rounded-[10px] cqa-p-3 cqa-overflow-hidden\">\n        <button\n          (click)=\"copyQueryExpanded()\"\n          class=\"cqa-absolute cqa-top-2 cqa-right-2 cqa-p-1.5 cqa-cursor-pointer hover:cqa-bg-[#334155] cqa-rounded\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#94A3B8\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          \n          <!-- Copied Tooltip -->\n          <div \n            *ngIf=\"showQueryCopiedExpanded\" \n            class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n            style=\"animation: fadeInOut 0.2s ease-in-out;\">\n            Copied!\n          </div>\n        </button>\n        <pre class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#F1F5F9] cqa-font-mono cqa-whitespace-pre-wrap cqa-overflow-x-auto cqa-m-0\"><code>{{ queryResult?.query }}</code></pre>\n      </div>\n      <div *ngIf=\"variableName\" class=\"cqa-mt-4 cqa-text-[10px] cqa-leading-[15px] cqa-text-[#45556C]\">\n        Stored as variable: <span class=\"cqa-font-medium cqa-bg-[#F1F5F9] cqa-px-1 cqa-rounded-[4px] cqa-text-[#45556C]\">{{ variableName }}</span>\n      </div>\n\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mt-4\" *ngIf=\"queryResult?.data\">\n        <div class=\"cqa-text-[12px] cqa-text-[#314158]\">Response</div>\n        <button\n          (click)=\"copyResponseExpanded()\"\n          class=\"cqa-cursor-pointer cqa-rounded cqa-relative\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          \n          <!-- Copied Tooltip -->\n          <div \n            *ngIf=\"showResponseCopiedExpanded\" \n            class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n            style=\"animation: fadeInOut 0.2s ease-in-out;\">\n            Copied!\n          </div>\n        </button>\n      </div>\n      \n      <cqa-table-template\n        *ngIf=\"!isEmptyResponse && queryResult?.data\"\n        [columns]=\"responseTableColumns\"\n        [data]=\"queryResult?.data || []\"\n        [pageIndex]=\"pageIndex\"\n        [pageSize]=\"pageSize\"\n        [isEmptyState]=\"isEmptyResponse\"\n        [emptyStateConfig]=\"emptyStateConfig\"\n        [showSearchBar]=\"false\"\n        [showFilterButton]=\"false\"\n        [showSettingsButton]=\"false\"\n        [showAutoRefreshButton]=\"false\"\n        [showOtherButton]=\"false\"\n        [showFilterPanel]=\"false\"\n        [serverSidePagination]=\"false\"\n        [cellJsonPathGetter]=\"cellJsonPathGetter\"\n        [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n        (pageChange)=\"onPageChange($event)\">\n      </cqa-table-template>\n      \n      <div *ngIf=\"isEmptyResponse\" class=\"cqa-text-[10px] cqa-text-[#45556C] cqa-py-4 cqa-text-center\">\n        No data returned from this query.\n      </div>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, OnInit, OnChanges, SimpleChanges, EventEmitter, Output, DoCheck, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseStepComponent } from '../base-step.component';\nimport { DbVerificationStepConfig, DbTestResult, DbQueryResult, DbAssertionResult, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { DynamicTableColumn } from '../../table/dynamic-table/dynamic-table.component';\nimport { EmptyStateConfig } from '../../empty-state/empty-state-config.interface';\nimport { EMPTY_STATE_IMAGES } from '../../assets/images/image-assets.constants';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-db-verification-step',\n  templateUrl: './db-verification-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class DbVerificationStepComponent extends BaseStepComponent implements OnInit, OnChanges, DoCheck, OnDestroy {\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() dbTestResult!: DbTestResult;\n  @Input() dbConfig?: {\n    name: string;\n    dbType: string;\n  };\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() stepDeleted?: boolean;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: string }) => void;\n  @Input() isLive: boolean = false;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Input() subSteps: SubStep[] = [];\n\n  // Processed sub-steps for live mode (WAIT_FOR_LOCATOR countdown, AI_AUTO_HEAL grouping)\n  processedSubSteps: any[] = [];\n  private lastProcessedIndex: number = 0;\n  private waitLocatorGroupEntry: any | null = null;\n  private countdownIntervalId: any = null;\n  private aiAutoHealGroupEntry: any | null = null;\n\n  // Processed sub-steps for run result screen (filter and split AI_AUTO_HEAL_SUCCESS/FAILED)\n  processedSubStepsForRunResult: any[] = [];\n\n  showFailedStepDetails: boolean = false;\n\n  constructor(private cdr: ChangeDetectorRef) {\n    super();\n  }\n\n  /** Show debug icon only when this step has no child steps (leaf step: always show when isDebug). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n\n  showEnvironmentCopied: boolean = false;\n  private environmentCopiedTimeout?: any;\n\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  override config!: DbVerificationStepConfig;\n\n  verificationFilter: 'all' | 'failed' | 'passed' = 'all';\n\n  filterSegments = [\n    { label: 'All', value: 'all' },\n    { label: 'Failed only', value: 'failed' },\n    { label: 'Passed only', value: 'passed' },\n  ];\n\n  verificationTableColumns: DynamicTableColumn[] = [];\n\n  emptyStateConfig: EmptyStateConfig = {\n    title: 'No Assertions',\n    description: 'No verification assertions found for this database query.',\n    imageUrl: EMPTY_STATE_IMAGES.DASHBOARD,\n    actions: [],\n  };\n\n  pageIndex: number = 0;\n  pageSize: number = 10;\n\n  // Cached query results to avoid recreating components on every change detection\n  cachedQueryResults: Array<{ key: string; result: DbQueryResult }> = [];\n\n  override ngOnInit(): void {\n    this.updateConfig();\n    this.setupTableColumns();\n    this.updateCachedQueryResults();\n    super.ngOnInit();\n    if (this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n    }\n    if (this.isLive && this.subSteps && this.subSteps.length > 0) {\n      this.processLiveSubSteps();\n    } else if (!this.isLive && this.subSteps && this.subSteps.length > 0) {\n      this.processSubStepsForRunResult();\n    }\n  }\n\n  getStatus(): StepStatus {\n    return this.config?.status || this.status;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update config when inputs change\n    if (changes['dbTestResult'] || changes['dbConfig'] || changes['expanded'] || changes['status'] || changes['duration'] || changes['stepDeleted'] || changes['stepNumber']) {\n      this.updateConfig();\n      if (changes['dbTestResult']) {\n        this.setupTableColumns();\n        this.updateCachedQueryResults();\n      }\n    }\n\n    // Update config when subSteps changes\n    if (changes['subSteps'] && this.config) {\n      this.config.subSteps = this.subSteps || [];\n      if (this.isLive) {\n        this.processLiveSubSteps();\n      } else {\n        this.processSubStepsForRunResult();\n      }\n    }\n\n    // Re-process when isLive changes\n    if (changes['isLive'] && this.subSteps && this.subSteps.length > 0) {\n      if (this.isLive) {\n        this.processLiveSubSteps();\n      } else {\n        this.processSubStepsForRunResult();\n      }\n    }\n\n    // Update expanded state if changed\n    if (changes['expanded'] && this.expanded !== undefined) {\n      this.isExpanded = this.expanded;\n    }\n  }\n\n  ngDoCheck(): void {\n    if (!this.isLive) return;\n    const currentLength = (this.subSteps || []).length;\n    if (currentLength !== this.lastProcessedIndex) {\n      this.processLiveSubSteps();\n      this.cdr.markForCheck();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.clearCountdownTimer();\n  }\n\n  private updateConfig(): void {\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'db-verification',\n      dbTestResult: this.dbTestResult,\n      dbConfig: this.dbConfig,\n      subSteps: this.subSteps || [],\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n    } as DbVerificationStepConfig;\n  }\n\n  get hasSubSteps(): boolean {\n    return this.subSteps && this.subSteps.length > 0;\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  toggleHeader(event?: Event) {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n    if (!this.isExpanded) {\n      this.showFailedStepDetails = false;\n    }\n  }\n\n  private updateCachedQueryResults(): void {\n    if (!this.dbTestResult?.results) {\n      this.cachedQueryResults = [];\n      return;\n    }\n    this.cachedQueryResults = Object.entries(this.dbTestResult.results).map(([key, result]) => ({ key, result }));\n  }\n\n  getQueryResults(): Array<{ key: string; result: DbQueryResult }> {\n    return this.cachedQueryResults;\n  }\n\n  trackByQueryKey(index: number, item: { key: string; result: DbQueryResult }): string {\n    return item.key;\n  }\n\n  getTotalRowsReturned(): number {\n    if (!this.dbTestResult?.results) return 0;\n    return Object.values(this.dbTestResult.results).reduce((total, result) => {\n      return total + (Array.isArray(result.data) ? result.data.length : 0);\n    }, 0);\n  }\n\n  getQueryStatus(queryKey: string): 'passed' | 'failed' {\n    if (!this.dbTestResult?.assertionResults) return 'passed';\n    const queryAssertions = this.dbTestResult.assertionResults.filter(\n      assertion => assertion.variableName === queryKey\n    );\n    if (queryAssertions.length === 0) return 'passed';\n    return queryAssertions.every(a => a.passed) ? 'passed' : 'failed';\n  }\n\n  getFilteredAssertions(): DbAssertionResult[] {\n    if (!this.dbTestResult?.assertionResults) return [];\n    switch (this.verificationFilter) {\n      case 'failed':\n        return this.dbTestResult.assertionResults.filter(a => !a.passed);\n      case 'passed':\n        return this.dbTestResult.assertionResults.filter(a => a.passed);\n      default:\n        return this.dbTestResult.assertionResults;\n    }\n  }\n\n  setVerificationFilter(filter: 'all' | 'failed' | 'passed') {\n    this.verificationFilter = filter;\n  }\n\n  onFilterChange(value: string) {\n    this.verificationFilter = value as 'all' | 'failed' | 'passed';\n  }\n\n  private setupTableColumns(): void {\n    this.verificationTableColumns = [\n      {\n        fieldId: 'jsonPath',\n        fieldName: 'JSON path',\n        fieldValue: 'jsonPath',\n        isShow: true,\n        weight: 2,\n        render: (row: DbAssertionResult) => {\n          return `\n            <div class=\"cqa-text-[12px] cqa-text-[#4B5563] cqa-font-mono\">\n              ${this.escapeHtml(row.jsonPath)}\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'verificationType',\n        fieldName: 'Verification type',\n        fieldValue: 'verificationType',\n        isShow: true,\n        weight: 1.5,\n        render: (row: DbAssertionResult) => {\n          return `\n            <div class=\"cqa-text-[12px] cqa-text-[#4B5563]\">\n              ${this.escapeHtml(this.formatVerificationType(row.verificationType))}\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'actualValue',\n        fieldName: 'Actual value',\n        fieldValue: 'actualValue',\n        isShow: true,\n        weight: 1.5,\n        render: (row: DbAssertionResult) => {\n          const value = typeof row.actualValue === 'object' ? JSON.stringify(row.actualValue) : String(row.actualValue);\n          return `\n            <div class=\"cqa-text-[12px] cqa-text-[#4B5563]\">\n              ${this.escapeHtml(value)}\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'expectedValue',\n        fieldName: 'Expected value',\n        fieldValue: 'expectedValue',\n        isShow: true,\n        weight: 1.5,\n        render: (row: DbAssertionResult) => {\n          const value = typeof row.expectedValue === 'object' ? JSON.stringify(row.expectedValue) : String(row.expectedValue);\n          return `\n            <div class=\"cqa-text-[12px] cqa-text-[#4B5563]\">\n              ${this.escapeHtml(value)}\n            </div>\n          `;\n        }\n      },\n      {\n        fieldId: 'result',\n        fieldName: 'Result',\n        fieldValue: 'passed',\n        isShow: true,\n        weight: 1,\n        render: (row: DbAssertionResult) => {\n          if (row.passed) {\n            return `\n              <span class=\"cqa-inline-block cqa-text-center cqa-w-11 cqa-px-2 cqa-py-1 cqa-rounded-[5px] cqa-text-[12px] cqa-bg-[#2E7D32] cqa-text-[#FFFFFF]\">\n                Pass\n              </span>\n            `;\n          } else {\n            return `\n              <span class=\"cqa-inline-block cqa-text-center cqa-w-11 cqa-px-2 cqa-py-1 cqa-rounded-[5px] cqa-text-[12px] cqa-bg-[#DC2626] cqa-text-[#FFFFFF]\">\n                Fail\n              </span>\n            `;\n          }\n        }\n      },\n    ];\n  }\n\n  private escapeHtml(text: string): string {\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n\n  getTableData(): DbAssertionResult[] {\n    return this.getFilteredAssertions();\n  }\n\n  get isEmptyTable(): boolean {\n    return this.getTableData().length === 0;\n  }\n\n  onPageChange(event: { pageIndex: number; pageSize: number }): void {\n    this.pageIndex = event.pageIndex;\n    this.pageSize = event.pageSize;\n  }\n\n  copyQuery(query: string) {\n    navigator.clipboard.writeText(query).then(() => {\n    });\n  }\n\n  copyResponse(queryResult: DbQueryResult) {\n    const response = JSON.stringify(queryResult.data, null, 2);\n    navigator.clipboard.writeText(response).then(() => {\n    });\n  }\n\n  copyEnvironment() {\n    if (this.dbConfig?.name) {\n      navigator.clipboard.writeText(this.dbConfig.name).then(() => {\n        this.showEnvironmentCopied = true;\n        \n        // Clear any existing timeout\n        if (this.environmentCopiedTimeout) {\n          clearTimeout(this.environmentCopiedTimeout);\n        }\n        \n        // Hide tooltip after 2 seconds\n        this.environmentCopiedTimeout = setTimeout(() => {\n          this.showEnvironmentCopied = false;\n        }, 2000);\n      });\n    }\n  }\n\n  getFailureMessage(): string | null {\n    if (!this.dbTestResult || this.dbTestResult?.allAssertionsPassed) return null;\n\n    const failedAssertion = this.dbTestResult.assertionResults?.find(a => !a.passed);\n    if (failedAssertion) {\n      const queryKey = failedAssertion.variableName;\n      const queryIndex = this.getQueryResults().findIndex(q => q.key === queryKey) + 1;\n      return `Assertion failed in Query ${queryIndex}. Expected value \"${failedAssertion.expectedValue}\" but got \"${failedAssertion.actualValue}\".`;\n    }\n    return null;\n  }\n\n  formatVerificationType(type: string): string {\n    const typeMap: { [key: string]: string } = {\n      'equals': 'Equals',\n      'not_equals': 'Not Equals',\n      'contains': 'Contains',\n      'not_contains': 'Not Contains',\n      'greater_than': 'Greater Than',\n      'less_than': 'Less Than',\n      'greater_than_or_equals': 'Greater Than Or Equals',\n      'less_than_or_equals': 'Less Than Or Equals',\n      'exists': 'Exists',\n      'not_exists': 'Not Exists',\n    };\n    return typeMap[type] || type;\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    // Convert DB verification query results to SubStep[] for the failed step component\n    const subSteps: SubStep[] = [];\n\n    if (this.dbTestResult?.results) {\n      Object.entries(this.dbTestResult.results).forEach(([key, result], index) => {\n        subSteps.push({\n          id: `query-${index}`,\n          description: `Query ${index + 1}: ${key}`,\n          status: this.getQueryStatus(key) === 'passed' ? 'success' : 'failed',\n          duration: result.duration || 0,\n        });\n      });\n    }\n\n    // Add assertion results as sub-steps\n    if (this.dbTestResult?.assertionResults) {\n      this.dbTestResult.assertionResults.forEach((assertion, index) => {\n        subSteps.push({\n          id: `assertion-${index}`,\n          description: `Assertion: ${assertion.jsonPath} - ${this.formatVerificationType(assertion.verificationType)}`,\n          status: assertion.passed ? 'success' : 'failed',\n          duration: 0,\n        });\n      });\n    }\n\n    return subSteps;\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) || \n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  private processLiveSubSteps(): void {\n    const allSubSteps = (this.subSteps || []) as any[];\n\n    if (allSubSteps.length < this.lastProcessedIndex) {\n      this.resetLiveProcessing();\n    }\n\n    for (let i = this.lastProcessedIndex; i < allSubSteps.length; i++) {\n      const subStep = allSubSteps[i];\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n      const status: string = (subStep?.status || '').toLowerCase();\n\n      if (uiType === 'WAIT_FOR_LOCATOR') {\n        const timeoutSeconds = typeof subStep.value === 'number'\n          ? subStep.value\n          : (subStep.value ? parseFloat(subStep.value) : 30);\n\n        this.clearCountdownTimer();\n\n        this.waitLocatorGroupEntry = {\n          ...subStep,\n          remainingSeconds: timeoutSeconds,\n          status: 'running'\n        };\n        this.addDurationToWaitLocatorGroupEntry(subStep);\n        this.processedSubSteps.push(this.waitLocatorGroupEntry);\n\n        this.countdownIntervalId = setInterval(() => {\n          if (this.waitLocatorGroupEntry) {\n            this.waitLocatorGroupEntry.remainingSeconds = Math.max(0, this.waitLocatorGroupEntry.remainingSeconds - 1);\n            if (this.waitLocatorGroupEntry.remainingSeconds <= 0) {\n              this.waitLocatorGroupEntry.status = 'failed';\n              this.waitLocatorGroupEntry.remainingSeconds = null;\n              this.clearCountdownTimer();\n              this.waitLocatorGroupEntry = null;\n            }\n          }\n        }, 1000);\n\n      } else if (uiType === 'FIND_LOCATOR') {\n        if (status === 'failed' || status === 'failure') {\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else if (this.waitLocatorGroupEntry) {\n          const newText = subStep.description || subStep.text || subStep.title;\n          if (newText) this.waitLocatorGroupEntry.description = newText;\n          this.addDurationToWaitLocatorGroupEntry(subStep);\n        } else {\n          this.processedSubSteps.push({ ...subStep });\n        }\n\n      } else if (uiType === 'LOCATOR_FOUND') {\n        if (status === 'failed' || status === 'failure') {\n          if (this.waitLocatorGroupEntry) {\n            this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.waitLocatorGroupEntry);\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          }\n          this.processedSubSteps.push({ ...subStep, status: 'failed' });\n        } else {\n          if (this.waitLocatorGroupEntry) {\n            const newText = subStep.description || subStep.text || subStep.title;\n            if (newText) this.waitLocatorGroupEntry.description = newText;\n            this.waitLocatorGroupEntry.status = 'success';\n            this.addDurationToWaitLocatorGroupEntry(subStep);\n            this.waitLocatorGroupEntry.remainingSeconds = null;\n            this.clearCountdownTimer();\n            this.waitLocatorGroupEntry = null;\n          } else {\n            this.processedSubSteps.push({ ...subStep });\n          }\n        }\n\n      } else if (uiType === 'AI_AUTO_HEAL') {\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        this.aiAutoHealGroupEntry = {\n          ...subStep,\n          description: subStep.description || subStep.text || 'AI auto-heal started',\n          status: 'running',\n          uiType: 'AI_AUTO_HEAL'\n        };\n        this.processedSubSteps.push(this.aiAutoHealGroupEntry);\n\n      } else if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        if (this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n\n        if (this.aiAutoHealGroupEntry) {\n          this.processedSubSteps = this.processedSubSteps.filter(entry => entry !== this.aiAutoHealGroupEntry);\n          this.aiAutoHealGroupEntry = null;\n        }\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        const valueDescription = subStep.text || subStep.description || (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubSteps.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        if (reasoning) {\n          this.processedSubSteps.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n\n      } else {\n        if ((status === 'failed' || status === 'failure') && this.waitLocatorGroupEntry) {\n          this.waitLocatorGroupEntry.status = 'failed';\n          this.waitLocatorGroupEntry.remainingSeconds = null;\n          this.clearCountdownTimer();\n          this.waitLocatorGroupEntry = null;\n        }\n        this.processedSubSteps.push(subStep);\n      }\n    }\n\n    this.lastProcessedIndex = allSubSteps.length;\n  }\n\n  private resetLiveProcessing(): void {\n    this.clearCountdownTimer();\n    this.processedSubSteps = [];\n    this.lastProcessedIndex = 0;\n    this.waitLocatorGroupEntry = null;\n    this.aiAutoHealGroupEntry = null;\n  }\n\n  private clearCountdownTimer(): void {\n    if (this.countdownIntervalId !== null) {\n      clearInterval(this.countdownIntervalId);\n      this.countdownIntervalId = null;\n    }\n  }\n\n  private addDurationToWaitLocatorGroupEntry(subStep: any): void {\n    if (!this.waitLocatorGroupEntry) {\n      return;\n    }\n\n    const rawDuration = subStep?.duration;\n    let delta = 0;\n    if (typeof rawDuration === 'number') {\n      delta = rawDuration;\n    } else if (typeof rawDuration === 'string' && rawDuration.trim() !== '') {\n      const parsed = parseFloat(rawDuration);\n      delta = Number.isFinite(parsed) ? parsed : 0;\n    }\n\n    if (delta <= 0) {\n      return;\n    }\n\n    const currentRaw = this.waitLocatorGroupEntry.duration;\n    let current = 0;\n    if (typeof currentRaw === 'number') {\n      current = currentRaw;\n    } else if (typeof currentRaw === 'string' && currentRaw.trim() !== '') {\n      const parsedCurrent = parseFloat(currentRaw);\n      current = Number.isFinite(parsedCurrent) ? parsedCurrent : 0;\n    }\n\n    this.waitLocatorGroupEntry.duration = current + delta;\n  }\n\n  private processSubStepsForRunResult(): void {\n    const allSubSteps = (this.subSteps || []) as any[];\n    this.processedSubStepsForRunResult = [];\n\n    for (const subStep of allSubSteps) {\n      const uiType: string = subStep?.uiType || subStep?.type || '';\n\n      if (uiType === 'AI_AUTO_HEAL_SUCCESS' || uiType === 'AI_AUTO_HEAL_FAILED') {\n        const isSuccess = uiType === 'AI_AUTO_HEAL_SUCCESS';\n        const value = subStep.value ?? subStep.text ?? '';\n        const reasoning = subStep.reasoning ?? subStep.Reasoning ?? '';\n        const baseDuration = subStep.duration || 0;\n        const finalStatus = isSuccess ? 'success' : 'failed';\n\n        const valueDescription = (isSuccess\n          ? `AI auto-heal completed successfully`\n          : `AI auto-heal failed`);\n        this.processedSubStepsForRunResult.push({\n          ...subStep,\n          description: valueDescription,\n          value: value,\n          reasoning: null,\n          status: finalStatus,\n          uiType: 'AI_AUTO_HEAL_VALUE',\n          type: 'AI_AUTO_HEAL_VALUE',\n          duration: baseDuration,\n          isAiAutoHealResult: true\n        });\n\n        if (reasoning) {\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: reasoning,\n            value: null,\n            reasoning: reasoning,\n            status: finalStatus,\n            uiType: 'AI_AUTO_HEAL_REASONING',\n            type: 'AI_AUTO_HEAL_REASONING',\n            duration: baseDuration,\n            isAiAutoHealResult: true\n          });\n        }\n      } else {\n        const status = (subStep?.status ?? '').toString().toLowerCase();\n        const isFailed = status === 'failed' || status === 'failure';\n        const isLocatorStep = uiType === 'WAIT_FOR_LOCATOR' || uiType === 'FIND_LOCATOR' || uiType === 'LOCATOR_FOUND';\n        if (isLocatorStep && isFailed) {\n          const baseDesc = subStep?.description ?? subStep?.text ?? subStep?.title ?? '';\n          const notFoundSuffix = ' - Element not found';\n          this.processedSubStepsForRunResult.push({\n            ...subStep,\n            description: (baseDesc ? baseDesc + notFoundSuffix : notFoundSuffix.trim())\n          });\n        } else {\n          this.processedSubStepsForRunResult.push(subStep);\n        }\n      }\n    }\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" [style.background-color]=\"!isDebug ? null : getStatus().toLowerCase() === 'paused' ? '#FFF9E9' : getStatus().toLowerCase() === 'failed' ? '#FEF2F2' : null\" (click)=\"$event.stopPropagation()\">\n  <!-- Header -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-p-2 cqa-cursor-pointer\"\n    (click)=\"toggleHeader($event)\"\n    style=\"border-bottom: 1px solid #F3F4F6\">\n    <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n      [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n      matTooltipPosition=\"right\">\n      <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n        [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n        [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n        (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n        <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n        </svg>\n        <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n        </svg>\n      </button>\n    </div>\n    <!-- Status Icon -->\n    <!-- Success -->\n    <div *ngIf=\"getStatus().toLowerCase() === 'success'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Failure -->\n    <div *ngIf=\"getStatus().toLowerCase() === 'failure' || getStatus().toLowerCase() === 'failed'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Pending -->\n    <div *ngIf=\"getStatus().toLowerCase() === 'pending'\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n    <!-- Running - Show spinner -->\n    <div *ngIf=\"getStatus().toLowerCase() === 'running'\">\n      <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n        <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n      </svg>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center\" *ngIf=\"getStatus().toLowerCase() === 'skipped'\">\n      <span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">\n        skip_next\n      </span>\n    </div>\n    <div *ngIf=\"getStatus().toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n    <div><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"16\" viewBox=\"0 0 20 16\" fill=\"none\">\n      <rect width=\"20\" height=\"16\" rx=\"4\" fill=\"#F0F0F1\"/>\n      <path d=\"M13.5 3.5H6.5C5.95 3.5 5.5 3.95 5.5 4.5V11.5C5.5 12.05 5.95 12.5 6.5 12.5H13.5C14.05 12.5 14.5 12.05 14.5 11.5V4.5C14.5 3.95 14.05 3.5 13.5 3.5ZM13.5 4.5V6H6.5V4.5H13.5ZM13.5 7V9H6.5V7H13.5ZM6.5 11.5V10H13.5V11.5H6.5Z\" fill=\"#212122\"/>\n      </svg></div>\n\n    <!-- Step Number and Title -->\n    <div class=\"cqa-font-semibold cqa-flex-1 cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px] cqa-font-inter cqa-flex cqa-items-center cqa-gap-1\" style=\"word-break: break-word;\">\n      <span>{{ stepNumber }}. <span [innerHTML]=\"title\"></span></span>\n      <span class=\"cqa-ml-1 cqa-px-1.5 cqa-py-0.5 cqa-rounded-full cqa-font-medium cqa-text-[#212122] cqa-bg-[#F0F0F1] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max\">\n        Database\n      </span>\n      <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n        Deleted\n      </span>\n\n    </div>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n      <!-- Step Change Badges (debug only) -->\n      <ng-container *ngIf=\"isDebug\">\n        <ng-container *ngFor=\"let badge of stepBadges\">\n        <cqa-badge\n          *ngIf=\"badge === 'skipped'\"\n          label=\"Skipped\"\n          size=\"small\"\n          [textColor]=\"'#4A5565'\"\n          [borderColor]=\"'#99A1AF'\"\n          [backgroundColor]=\"'#FFFFFF'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'edited'\"\n          label=\"Edited\"\n          size=\"small\"\n          [textColor]=\"'#FBBF24'\"\n          [borderColor]=\"'#FDDF92'\"\n          [backgroundColor]=\"'#FFF9E9'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'added'\"\n          label=\"Added\"\n          size=\"small\"\n          [textColor]=\"'#0DBD7D'\"\n          [borderColor]=\"'#5ED3A8'\"\n          [backgroundColor]=\"'#CFF2E5'\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"badge === 'removed'\"\n          label=\"Removed\"\n          size=\"small\"\n          [textColor]=\"'#EE3F3F'\"\n          [borderColor]=\"'#F47F7F'\"\n          [backgroundColor]=\"'#FCD9D9'\">\n        </cqa-badge>\n        </ng-container>\n      </ng-container>\n      <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n          <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n          <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n          <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n          </svg>\n        Self-healed\n      </span>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\" \n           *ngIf=\"step?.executedResult?.video_start_time\" \n           [matTooltip]=\"'Jump to video time'\" \n           matTooltipPosition=\"below\"\n           (click)=\"onJumpToTimestamp($event)\">\n        <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n          play_arrow\n        </mat-icon>\n        <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n          {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n        </span>\n      </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Edit\" (click)=\"onEditStep($event)\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n        </button>\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n      <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n        {{ formatDuration(duration) }}\n      </span>\n      <svg *ngIf=\"hasSubSteps || !isLive\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n    </div>\n  </div>\n\n  <!-- Sub-steps (logs) - shown when expanded for both live and run result -->\n  <div *ngIf=\"isExpanded && hasSubSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pt-1 cqa-pl-9 cqa-pr-6 cqa-pb-2 cqa-bg-white\">\n    <ng-container *ngFor=\"let subStep of (isLive ? processedSubSteps : processedSubStepsForRunResult)\">\n      <cqa-ai-logs-with-reasoning\n        *ngIf=\"$any(subStep).isAiAutoHealResult\"\n        [status]=\"subStep.status\"\n        [text]=\"$any(subStep).text || subStep?.value\"\n        [description]=\"$any(subStep).description || subStep?.text || subStep?.value\"\n        [reasoning]=\"$any(subStep).reasoning || subStep?.reasoning\"\n        [duration]=\"subStep.duration\">\n      </cqa-ai-logs-with-reasoning>\n\n      <div\n        *ngIf=\"!$any(subStep).isAiAutoHealResult\"\n        class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n        <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </div>\n        <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </div>\n        <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </div>\n        <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n          <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n            <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n          </svg>\n        </div>\n\n        <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"white-space: pre-line; word-break: break-word;\">\n          {{ $any(subStep).description || $any(subStep).text }}\n          <span *ngIf=\"isLive && $any(subStep).remainingSeconds != null\" class=\"cqa-text-[#F97316] cqa-font-medium cqa-ml-1\">({{ $any(subStep).remainingSeconds }}s remaining)</span>\n        </span>\n\n        <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n          {{ formatDuration(subStep.duration) }}\n        </span>\n      </div>\n    </ng-container>\n  </div>\n\n  <!-- Expanded Content (db queries, assertions, etc.) - run result only -->\n  <div *ngIf=\"isExpanded && !isLive\" class=\"cqa-p-2 !cqa-pl-9 !cqa-pr-6 cqa-bg-white\" style=\"border-top: 1px solid #E4E4E4;\">\n    <!-- Summary Bar -->\n    <div class=\"cqa-mb-1.5 cqa-p-3 cqa-bg-[#FCFCFC] cqa-rounded-[6px] cqa-flex cqa-flex-col cqa-gap-2\" style=\"border: 1px solid #E5E7EB;\" *ngIf=\"getStatus() || duration || cachedQueryResults?.length > 0 || dbTestResult?.assertionResults?.length > 0 || getTotalRowsReturned() > 0 || getFailureMessage()\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n        <!-- Status Badge -->\n        <cqa-badge\n          *ngIf=\"getStatus()?.toLowerCase() === 'failure' || getStatus()?.toLowerCase() === 'failed'\"\n          label=\"FAIL\"\n          backgroundColor=\"#DC2626\"\n          textColor=\"#FFFFFF\"\n          size=\"small\">\n        </cqa-badge>\n        <cqa-badge\n          *ngIf=\"getStatus()?.toLowerCase() === 'success'\"\n          label=\"PASS\"\n          backgroundColor=\"#22C55E\"\n          textColor=\"#FFFFFF\"\n          size=\"small\">\n        </cqa-badge>\n\n        <div class=\"cqa-h-[19px] cqa-w-[1px] cqa-bg-[#E5E7EB]\"></div>\n        \n        <!-- Summary Stats -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-4 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#6B7280]\">\n          <span *ngIf=\"duration\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Total Time: <span class=\"cqa-text-[#4B5563]\">{{ formatDuration(duration) }}</span></span>\n          <span *ngIf=\"cachedQueryResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Queries: <span class=\"cqa-text-[#4B5563]\">{{ cachedQueryResults?.length || 0 }}</span></span>\n          <span *ngIf=\"dbTestResult?.assertionResults?.length > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Assertions: <span class=\"cqa-text-[#4B5563]\">{{ dbTestResult?.assertionResults?.length || 0 }}</span></span>\n          <span *ngIf=\"getTotalRowsReturned() > 0\" class=\"cqa-font-medium cqa-text-[10px] cqa-text-[#111827]\">Rows Returned: <span class=\"cqa-text-[#4B5563]\">{{ getTotalRowsReturned() }}</span></span>\n        </div>\n      </div>\n\n      <!-- Failure Banner -->\n      <div \n        *ngIf=\"getFailureMessage()\"\n        class=\"cqa-flex cqa-px-2 cqa-py-1 cqa-bg-[#FEF2F2] cqa-rounded-[4px]\" style=\"border: 1px solid #FEE2E2;\">\n        <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#B91C1C]\">\n          {{ getFailureMessage() }}\n        </span>\n      </div>\n    </div>\n\n    <!-- Database Environment Section -->\n    <div *ngIf=\"dbConfig\" class=\"cqa-mb-1.5\">\n      <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Database environment</div>\n      <div class=\"cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-4 cqa-py-2 cqa-relative cqa-flex cqa-flex-wrap cqa-gap-3\">\n        <!-- Environment -->\n        <div class=\"\">\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Environment</div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-4\">\n            <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.name }}</span>\n            <span (click)=\"copyEnvironment()\" class=\"cqa-cursor-pointer cqa-relative\">\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.33332 10.6667H3.99999C3.64637 10.6667 3.30723 10.5263 3.05718 10.2762C2.80713 10.0262 2.66666 9.68704 2.66666 9.33341V4.00008C2.66666 3.64646 2.80713 3.30732 3.05718 3.05727C3.30723 2.80722 3.64637 2.66675 3.99999 2.66675H9.33332C9.68695 2.66675 10.0261 2.80722 10.2761 3.05727C10.5262 3.30732 10.6667 3.64646 10.6667 4.00008V5.33341M6.66666 13.3334H12C12.3536 13.3334 12.6928 13.1929 12.9428 12.9429C13.1928 12.6928 13.3333 12.3537 13.3333 12.0001V6.66675C13.3333 6.31313 13.1928 5.97399 12.9428 5.72394C12.6928 5.47389 12.3536 5.33341 12 5.33341H6.66666C6.31303 5.33341 5.9739 5.47389 5.72385 5.72394C5.4738 5.97399 5.33332 6.31313 5.33332 6.66675V12.0001C5.33332 12.3537 5.4738 12.6928 5.72385 12.9429C5.9739 13.1929 6.31303 13.3334 6.66666 13.3334Z\" stroke=\"#636363\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n              \n              <!-- Copied Tooltip -->\n              <div \n                *ngIf=\"showEnvironmentCopied\" \n                class=\"cqa-absolute cqa-right-0 cqa-top-full cqa-mt-1 cqa-px-2 cqa-py-1 cqa-bg-[#0B0B0B] cqa-text-white cqa-text-[10px] cqa-rounded cqa-whitespace-nowrap cqa-z-50 cqa-shadow-lg\"\n                style=\"animation: fadeInOut 0.2s ease-in-out;\">\n                Copied!\n              </div>\n            </span>\n          </div>\n        </div>\n        \n        <div class=\"\">\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#45556C] cqa-mb-1\">Type</div>\n          <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-text-[#0F172B]\">{{ dbConfig.dbType }}</div>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"cqa-mb-1.5\" *ngIf=\"cachedQueryResults?.length > 0\">\n      <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Query Execution</div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-px-4 cqa-py-2 cqa-bg-white cqa-rounded-[10px]\" style=\"border: 1px solid #E2E8F0;\">\n        <cqa-db-query-execution-item\n          *ngFor=\"let queryItem of cachedQueryResults; let i = index; trackBy: trackByQueryKey\"\n          [queryNumber]=\"i + 1\"\n          [queryKey]=\"queryItem.key\"\n          [queryResult]=\"queryItem.result\"\n          [status]=\"getQueryStatus(queryItem.key)\"\n          [variableName]=\"queryItem.key\"\n          [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\">\n        </cqa-db-query-execution-item>\n      </div>\n    </div>\n\n    <!-- Verification Section -->\n    <div *ngIf=\"dbTestResult?.assertionResults && dbTestResult?.assertionResults?.length > 0\">\n      <div class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#0B0B0B] cqa-mb-2\">Verification</div>      \n      <!-- Verification Table -->\n      <div class=\"cqa-bg-white cqa-rounded-[10px] cqa-px-4 cqa-py-2 cqa-overflow-hidden\" style=\"border: 1px solid #E2E8F0;\">\n        <!-- Segment Control for Filters -->\n        <cqa-segment-control\n          [segments]=\"filterSegments\"\n          [value]=\"verificationFilter\"\n          (valueChange)=\"onFilterChange($event)\">\n        </cqa-segment-control>\n        <cqa-table-template\n          [columns]=\"verificationTableColumns\"\n          [data]=\"getTableData()\"\n          [pageIndex]=\"pageIndex\"\n          [pageSize]=\"pageSize\"\n          [isEmptyState]=\"isEmptyTable\"\n          [emptyStateConfig]=\"emptyStateConfig\"\n          [showSearchBar]=\"false\"\n          [showFilterButton]=\"false\"\n          [showSettingsButton]=\"false\"\n          [showAutoRefreshButton]=\"false\"\n          [showOtherButton]=\"false\"\n          [showFilterPanel]=\"false\"\n          [serverSidePagination]=\"false\"\n          (pageChange)=\"onPageChange($event)\">\n        </cqa-table-template>\n      </div>\n    </div>\n\n    <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis \n      *ngIf=\"selfHealAnalysis\" \n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-4 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-[#374151]\">{{ formatDuration(timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n\n    <!-- View More Failed Step Button - shown when expanded and failure details exist -->\n    <div *ngIf=\"showViewMoreButton\" class=\"cqa-mt-2 cqa-px-4\">\n      <cqa-view-more-failed-step-button\n        [timingBreakdown]=\"timingBreakdown\"\n        [subSteps]=\"getSubStepsForFailedStep()\"\n        [failureDetails]=\"failureDetails\"\n        [isExpanded]=\"showFailedStepDetails\"\n        (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n      </cqa-view-more-failed-step-button>\n    </div>\n\n    <!-- Updated Failed Step Component - shown when button is clicked -->\n    <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n      <cqa-updated-failed-step\n        [testStepResultId]=\"testStepResultId\"\n        [timingBreakdown]=\"timingBreakdown\"\n        [expanded]=\"true\"\n        [subSteps]=\"getSubStepsForFailedStep()\"\n        [failureDetails]=\"failureDetails\"\n        [reasoning]=\"reasoning\"\n        [confidence]=\"confidence\"\n        [isUploadingBaseline]=\"isUploadingBaseline\"\n        [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n        [isLive]=\"isLive\"\n        (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n        (uploadBaseline)=\"onUploadBaseline($event)\"\n        (analyze)=\"onAnalyze()\"\n        (viewFullLogs)=\"onViewFullLogs()\">\n      </cqa-updated-failed-step>\n    </div>\n  </div>\n</div>\n\n","/**\n * Step row action bar styles as a string for use in component `styles` arrays.\n * Using a string avoids Angular's style compiler receiving non-string values\n * (e.g. from styleUrls resolution in Storybook), which causes \"input.match is not a function\".\n */\nexport const STEP_ROW_ACTIONS_STYLES = `\n.step-actions {\n  opacity: 0;\n  transition: opacity 0.15s ease;\n}\n.step-row:hover .step-actions {\n  opacity: 1;\n}\n.step-row {\n  vertical-align: middle;\n  letter-spacing: normal;\n}\n`;\n","import { InjectionToken } from '@angular/core';\n\nexport interface CustomEditStepData {\n  description: string;\n  helpUrl?: string;\n}\n\n/** Sentinel returned from afterClosed() when user clicked \"Edit in depth\". */\nexport const CUSTOM_EDIT_STEP_EDIT_IN_DEPTH = Symbol('CustomEditStepEditInDepth');\n\nexport const CUSTOM_EDIT_STEP_DATA = new InjectionToken<CustomEditStepData>(\n  'CUSTOM_EDIT_STEP_DATA'\n);\n","import { InjectionToken } from '@angular/core';\nimport type { ParameterScopeFilter, ParameterItem } from './test-data-modal-parameter.model';\nimport type { EnvironmentItem } from './test-data-modal-environment.model';\n\nexport type TestDataModalTab = 'plain-text' | 'parameter' | 'environment' | 'runtime';\n\n/**\n * Config/data for Test Data Modal controls.\n * Mirrors Loop Step pattern: single config object holds all control state;\n * values are initialized from config and bound to editForm.\n */\nexport interface TestDataModalData {\n  /** Initial value for Plain Text tab (e.g. URL for navigate step). */\n  value?: string;\n  /** Optional help URL for \"Need help?\" link. */\n  helpUrl?: string;\n  /** Initially selected tab. Defaults to 'plain-text'. */\n  activeTab?: TestDataModalTab;\n  /** Parameter tab: scope filter (All / Global / Local). */\n  parameterScopeFilter?: ParameterScopeFilter;\n  /** Parameter tab: search query. */\n  parameterSearchQuery?: string;\n  /** Parameter tab: selected parameter id (for highlight). */\n  selectedParameterId?: string | null;\n  /** Parameter tab: list of parameters to display. */\n  parameters?: ParameterItem[];\n  /** Environment tab: search query. */\n  environmentSearchQuery?: string;\n  /** Environment tab: selected environment id (for highlight). */\n  selectedEnvironmentId?: string | null;\n  /** Environment tab: list of environment items to display. */\n  environmentItems?: EnvironmentItem[];\n  /** Runtime tab: value (independent from Plain Text / Parameter / Environment). */\n  runtimeValue?: string;\n}\n\n/** Sentinel returned from afterClosed() when user clicked \"Edit in depth\". */\nexport const TEST_DATA_MODAL_EDIT_IN_DEPTH = Symbol('TestDataModalEditInDepth');\n\nexport const TEST_DATA_MODAL_DATA = new InjectionToken<TestDataModalData>(\n  'TEST_DATA_MODAL_DATA'\n);\n","import { InjectionToken } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class CustomEditStepRef<TResult = string | undefined> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => {\n      this.finishClose(undefined);\n    });\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\nexport const CUSTOM_EDIT_STEP_REF = new InjectionToken<CustomEditStepRef>(\n  'CUSTOM_EDIT_STEP_REF'\n);\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Inject,\n  Optional,\n  Output,\n} from '@angular/core';\nimport {\n  CUSTOM_EDIT_STEP_DATA,\n  CUSTOM_EDIT_STEP_EDIT_IN_DEPTH,\n  CustomEditStepData,\n} from './custom-edit-step-data';\nimport { CUSTOM_EDIT_STEP_REF, CustomEditStepRef } from './../custom-edit-step/custom-edit-step-ref';\n\n@Component({\n  selector: 'cqa-custom-edit-step',\n  templateUrl: './custom-edit-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CustomEditStepComponent {\n  @Output() apply = new EventEmitter<string>();\n  @Output() cancel = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<void>();\n\n  /** Local value while editing (for two-way binding in textarea) */\n  value: string = '';\n  helpUrl: string = '';\n  /** Tooltip shown when hovering over the \"Need help ?\" icon and text */\n  helpTooltipText = 'Not sure what to do? Click to go to our detailed step creation documentation';\n  /** Whether the help tooltip is visible (custom tooltip for use inside overlay) */\n  showHelpTooltip = false;\n\n  constructor(\n    @Inject(CUSTOM_EDIT_STEP_REF) private ref: CustomEditStepRef,\n    @Optional() @Inject(CUSTOM_EDIT_STEP_DATA) data?: CustomEditStepData\n  ) {\n    if (data) {\n      this.value = data.description ?? '';\n      this.helpUrl = data.helpUrl ?? '';\n    }\n  }\n\n  onApply(): void {\n    this.apply.emit(this.value);\n    this.ref.close(this.value);\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n    this.ref.close(undefined);\n  }\n\n  onClose(): void {\n    this.onCancel();\n  }\n\n  onEditInDepth(event: Event): void {\n    event.preventDefault();\n    this.editInDepth.emit();\n    this.ref.close(CUSTOM_EDIT_STEP_EDIT_IN_DEPTH as any);\n  }\n\n  onHelp(event: Event): void {\n    if (this.helpUrl) {\n      event.preventDefault();\n      window.open(this.helpUrl, '_blank');\n    }\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\">\n  <!-- Header: title left; Need help? + close icon right -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n    <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n      Step Description\n    </h2>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-h-[28px]\">\n      <!-- Need help? with custom tooltip (works inside overlay) -->\n      <div class=\"cqa-relative cqa-inline-flex cqa-items-center\"\n        (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n        <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n          class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline hover:cqa-underline cqa-cursor-pointer\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n            <g clip-path=\"url(#help-icon-clip)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"help-icon-clip\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </a>\n        <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n            <g clip-path=\"url(#help-icon-clip-nolink)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"help-icon-clip-nolink\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </span>\n        <!-- Custom tooltip (exact spec: 306×20 content, 6px radius, #0A0A0A, no arrow) -->\n        <div *ngIf=\"showHelpTooltip\"\n          class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n          role=\"tooltip\">\n          <div\n            class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n            {{ helpTooltipText }}\n          </div>\n        </div>\n      </div>\n      <button type=\"button\" (click)=\"onClose()\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-[28px] cqa-min-w-[28px] cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0\"\n        title=\"Close\" aria-label=\"Close\">\n        <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px] !cqa-block !cqa-leading-none\">close</mat-icon>\n      </button>\n    </div>\n  </div>\n\n  <!-- Line below header (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Content: textarea + helper -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-px-2 cqa-py-1\">\n    <cqa-custom-textarea\n      [(value)]=\"value\"\n      placeholder=\"Enter description\"\n      [fullWidth]=\"true\"\n      [rows]=\"4\"\n      resize=\"vertical\"\n      size=\"md\"\n      customClass=\"cqa-p-2 cqa-text-[14px] cqa-leading-[20px]\">\n    </cqa-custom-textarea>\n    <p class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#0A0A0A] cqa-m-0\">\n      Provide a clear description of the step's purpose\n    </p>\n  </div>\n\n  <!-- Line below content (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Footer: Cancel, Apply (full width in one row) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n    <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"'Cancel'\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n          [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n      </div>\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"'Apply'\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n          [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\"></cqa-button>\n      </div>\n    </div>\n    <a href=\"#\" (click)=\"onEditInDepth($event)\"\n      class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center\">\n      <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n      Edit in depth (open detailed right panel)\n    </a>\n  </div>\n</div>\n","import { ElementRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { CustomEditStepComponent } from './custom-edit-step.component';\nimport { CustomEditStepRef } from './custom-edit-step-ref';\nimport {\n  CUSTOM_EDIT_STEP_DATA,\n  CUSTOM_EDIT_STEP_EDIT_IN_DEPTH,\n  CustomEditStepData,\n} from './custom-edit-step-data';\nimport { CUSTOM_EDIT_STEP_REF } from './custom-edit-step-ref';\n\nexport type CustomEditStepResult =\n  | string\n  | undefined\n  | typeof CUSTOM_EDIT_STEP_EDIT_IN_DEPTH;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CustomEditStepService {\n  /** Currently open Step Description overlay ref; only one panel is allowed at a time. */\n  private currentRef: CustomEditStepRef<CustomEditStepResult> | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  /**\n   * Opens the Step Description modal positioned just below the given origin element.\n   * If a panel is already open, returns the existing ref and does not open a duplicate.\n   * @param origin Element (e.g. description span or edit icon) to position below\n   * @param data Initial description and optional help URL\n   * @returns Ref with afterClosed() and close(); afterClosed emits the new description on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks \"Edit in depth\"\n   */\n  open(\n    origin: ElementRef<HTMLElement>,\n    data: CustomEditStepData\n  ): CustomEditStepRef<CustomEditStepResult> {\n    if (this.currentRef) {\n      return this.currentRef;\n    }\n    const originEl = origin.nativeElement;\n    const gap = 8;\n    const modalWidth = 500;\n    const margin = 8;\n\n    originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n\n    const positionStrategy = this.overlay.position().global();\n\n    const overlayRef = this.overlay.create(\n      new OverlayConfig({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.reposition(),\n        positionStrategy,\n        panelClass: ['cqa-custom-edit-step-panel', 'cqa-ui-root'],\n        width: 'min(560px, 90vw)',\n      })\n    );\n\n    const updatePosition = (): void => {\n      const rect = originEl.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      let top = rect.bottom + gap;\n      let left = rect.left;\n      if (left + modalWidth > viewportWidth - margin) {\n        left = viewportWidth - modalWidth - margin;\n      }\n      if (left < margin) {\n        left = margin;\n      }\n      if (top < margin) {\n        top = margin;\n      }\n      positionStrategy.top(`${top}px`).left(`${left}px`);\n      overlayRef.updatePosition();\n    };\n\n    const editStepRef = new CustomEditStepRef<CustomEditStepResult>(overlayRef);\n\n    const injector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: CUSTOM_EDIT_STEP_REF, useValue: editStepRef },\n        { provide: CUSTOM_EDIT_STEP_DATA, useValue: data },\n      ],\n    });\n\n    updatePosition();\n\n    const portal = new ComponentPortal(CustomEditStepComponent, undefined, injector);\n    overlayRef.attach(portal);\n\n    requestAnimationFrame(() => updatePosition());\n\n    const scrollListener = (): void => updatePosition();\n    window.addEventListener('scroll', scrollListener, true);\n    window.addEventListener('resize', scrollListener);\n    this.currentRef = editStepRef;\n    editStepRef.afterClosed().subscribe(() => {\n      this.currentRef = null;\n      window.removeEventListener('scroll', scrollListener, true);\n      window.removeEventListener('resize', scrollListener);\n    });\n\n    overlayRef.backdropClick().subscribe(() => editStepRef.close(undefined));\n    overlayRef\n      .keydownEvents()\n      .pipe(\n        filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc')\n      )\n      .subscribe(() => editStepRef.close(undefined));\n\n    return editStepRef;\n  }\n}\n","\nimport { InjectionToken } from '@angular/core';\n\nexport interface ElementPopupData {\n  element?: ElementPopupDataElements;\n  labels: string[];\n  elements: ElementPopupDataElements[];\n  description: string;\n  helpUrl?: string;\n}\n\n\n/** Screen name object from API (e.g. list elements response) */\nexport interface ElementPopupScreenNameObj {\n  id?: number;\n  workspaceVersionId?: number;\n  name: string;\n  url?: string;\n  elementCount?: number | null;\n}\n\nexport interface ElementPopupDataElements {\n  labels: string[];\n  title: string;\n  selector?: string;\n  id?: number;\n  screenName?: string;\n  screenNameId?: number;\n  /** Screen name object from API; display name via screenNameObj.name */\n  screenNameObj?: ElementPopupScreenNameObj;\n}\n/** Sentinel returned from afterClosed() when user clicked \"Edit in depth\". */\nexport const ELEMENT_POPUP_EDIT_IN_DEPTH = Symbol('ElementPopupEditInDepth');\n\nexport const ELEMENT_POPUP_DATA = new InjectionToken<ElementPopupData>(\n  'ELEMENT_POPUP_DATA'\n);\n","import { InjectionToken } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class ElementPopupRef<TResult = string | undefined> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => {\n      this.finishClose(undefined);\n    });\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\nexport const CUSTOM_ELEMENT_POPUP_REF = new InjectionToken<ElementPopupRef>(\n  'CUSTOM_ELEMENT_POPUP_REF'\n);\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../../dynamic-select/dynamic-select-field.component';\nimport { ElementCreatePayload, ElementUpdatePayload, ScreenNameOption } from '../element-popup-form-data';\nimport { ElementPopupDataElements } from '../element-popup-data';\n\n@Component({\n  selector: 'cqa-element-form',\n  templateUrl: './element-form.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElementFormComponent implements OnInit, OnChanges {\n  /** Element ID when editing existing element */\n  @Input() elementId?: number;\n  /** Current element data (for edit mode) */\n  @Input() element: ElementPopupDataElements = { title: '', selector: '', labels: [] };\n  /** Screen name options for autocomplete (from API) */\n  @Input() screenNameOptions: ScreenNameOption[] = [];\n  /** Elements (for the Label dropdown when a screen is selected) */\n  @Input() elements: ElementPopupDataElements[] = [];\n  /** Whether more screen names are available for infinite scroll */\n  @Input() hasMoreScreenNames: boolean = false;\n  /** True while parent is loading screen names (search or load more) */\n  @Input() isLoadingScreenNames: boolean = false;\n  /** Whether more elements are available for infinite scroll */\n  @Input() hasMoreElements: boolean = false;\n  /** True while parent is loading elements (search or load more) */\n  @Input() isLoadingElements: boolean = false;\n  /** True while parent is fetching latest element data for edit (shows loading state) */\n  @Input() isElementLoading: boolean = false;\n  /** Whether we're in edit mode */\n  @Input() isEditMode: boolean = false;\n  /** Whether we're in create mode */\n  @Input() isCreateMode: boolean = false;\n\n  /** Whether edit in depth is available */\n  @Input() isEditInDepthAvailable: boolean = true;\n\n  /** Emitted when user creates a new element (parent should call API) */\n  @Output() createElement = new EventEmitter<ElementCreatePayload>();\n  /** Emitted when user updates an element (parent should call API) */\n  @Output() updateElement = new EventEmitter<ElementUpdatePayload>();\n  /** Emitted when user requests to create a new screen name */\n  @Output() createScreenNameRequest = new EventEmitter<string>();\n  /** Emitted when user searches screen names (server search) */\n  @Output() searchScreenName = new EventEmitter<string>();\n  /** Emitted when user scrolls to load more screen names (passes current search query) */\n  @Output() loadMoreScreenNames = new EventEmitter<string>();\n  /** Emitted when user searches elements (server search) */\n  @Output() searchElements = new EventEmitter<string>();\n  /** Emitted when user scrolls to load more elements */\n  @Output() loadMoreElements = new EventEmitter<void>();\n  /** Emitted when user selects a screen so parent can fetch elements filtered by that screen */\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>();\n  /** Emitted when user clicks \"Select from Element list\" or \"Cancel\" */\n  @Output() cancel = new EventEmitter<void>();\n  /** Emitted when user clicks \"Edit in depth\" */\n  @Output() editInDepth = new EventEmitter<void>();\n\n  form!: FormGroup;\n  /** Labels (tags) as string array for multi-tag input */\n  formLabels: string[] = [];\n\n  /** Current tag input value */\n  tagInputValue = '';\n  /** Config for screen name dynamic-select (server search, allowCustomValue, infinite scroll) */\n  screenNameSelectConfig!: DynamicSelectFieldConfig;\n  /** Config for the Label dynamic-select (shown when a real screen is selected) */\n  elementSelectConfig!: DynamicSelectFieldConfig;\n  /** True when the user just created a brand-new screen name in this session (no elements exist yet for it). */\n  isNewScreenNameSelected = false;\n  /** Whether we're saving (disable buttons) */\n  saving = false;\n\n  private fb: FormBuilder;\n\n  constructor(\n    @Optional() fb?: FormBuilder,\n    @Optional() private readonly cdr?: ChangeDetectorRef\n  ) {\n    this.fb = fb || new FormBuilder();\n    this.initializeForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['screenNameOptions'] || changes['hasMoreScreenNames'] || changes['isLoadingScreenNames']) {\n      this.updateScreenNameSelectConfig();\n    }\n    if ((changes['element'] || changes['elementId']) && this.elementId) {\n      this.populateFormForEdit();\n    } else if (changes['element'] && !this.elementId && this.isCreateMode) {\n      this.populateFormForCreateWithElement();\n    }\n    if (changes['elements'] || changes['hasMoreElements'] || changes['isLoadingElements']) {\n      this.updateElementSelectConfig();\n    }\n  }\n\n  ngOnInit(): void {\n    if (this.elementId) {\n      this.populateFormForEdit();\n    } else if (this.isCreateMode && this.element) {\n      this.populateFormForCreateWithElement();\n    }\n  }\n\n  private initializeForm(): void {\n    this.form = this.fb.group({\n      name: ['', [Validators.required]],\n      screenNameId: ['none' as number | string | null],\n      value: ['', [Validators.required]],\n      selectedElementId: [null as number | null],\n    });\n    this.updateScreenNameSelectConfig();\n    this.updateElementSelectConfig();\n    this.form.get('screenNameId')?.valueChanges.subscribe((v) => {\n      this.isNewScreenNameSelected = false;\n      this.form.get('selectedElementId')?.setValue(null, { emitEvent: false });\n      this.updateElementSelectConfig();\n      if (v != null && v !== '' && v !== 'none') {\n        this.searchElementsByScreenName.emit({ screenNameId: Number(v), searchTerm: '' });\n      }\n    });\n    this.form.get('selectedElementId')?.valueChanges.subscribe((id) => {\n      if (id == null) return;\n      const match = (this.elements || []).find((el) => el.id === id);\n      if (match) {\n        this.form.get('name')?.setValue(match.title ?? '', { emitEvent: false });\n        this.form.get('value')?.setValue(match.selector ?? '', { emitEvent: false });\n      }\n      this.cdr?.markForCheck();\n    });\n  }\n\n  /** True when a real (non-None) screen is selected */\n  hasSelectedScreenName(): boolean {\n    const v = this.form?.get('screenNameId')?.value;\n    return v != null && v !== '' && v !== 'none';\n  }\n\n  private updateElementSelectConfig(): void {\n    const screenId = this.form?.get('screenNameId')?.value;\n    const list = (this.elements || []).filter((el) =>\n      screenId != null && screenId !== 'none'\n        ? el.screenNameId != null && Number(el.screenNameId) === Number(screenId)\n        : true\n    );\n    const opts: SelectOption[] = list.map((el) => ({\n      id: el.id ?? '',\n      value: el.id ?? '',\n      name: el.title ?? '',\n      label: el.title ?? '',\n    }));\n    const currentElementId = this.form?.get('selectedElementId')?.value;\n    if (currentElementId != null && this.element?.id === currentElementId) {\n      const exists = opts.some((o) => o.id === currentElementId);\n      if (!exists) {\n        opts.unshift({\n          id: currentElementId,\n          value: currentElementId,\n          name: this.element.title ?? '',\n          label: this.element.title ?? '',\n        });\n      }\n    }\n    this.elementSelectConfig = {\n      key: 'selectedElementId',\n      placeholder: 'Select element',\n      searchable: true,\n      serverSearch: true,\n      options: opts,\n      hasMore: this.hasMoreElements,\n      isLoading: this.isLoadingElements,\n      onSearch: (q) => this.searchElements.emit(q || ''),\n      onLoadMore: () => this.loadMoreElements.emit(),\n    };\n    this.cdr?.markForCheck();\n  }\n\n  private updateScreenNameSelectConfig(): void {\n    const opts: SelectOption[] = [\n      { id: 'none', value: 'none', name: 'None', label: 'None' },\n      ...(this.screenNameOptions || []).map((o) => ({\n        id: o.id,\n        value: o.id,\n        name: o.name,\n        label: o.name,\n      })),\n    ];\n    const currentId = this.form?.get('screenNameId')?.value;\n    if (currentId && this.element?.screenNameId === currentId && this.element?.screenName) {\n      const exists = opts.some((o) => o.id === currentId);\n      if (!exists) {\n        opts.unshift({\n          id: currentId,\n          value: currentId,\n          name: String(this.element.screenName),\n          label: String(this.element.screenName),\n        });\n      }\n    }\n    this.screenNameSelectConfig = {\n      key: 'screenNameId',\n      placeholder: 'Select or create screen',\n      searchable: true,\n      serverSearch: true,\n      allowCustomValue: true,\n      options: opts,\n      hasMore: this.hasMoreScreenNames,\n      isLoading: this.isLoadingScreenNames,\n      onSearch: (q) => this.searchScreenName.emit(q || ''),\n      onLoadMore: (q) => this.loadMoreScreenNames.emit(q || ''),\n    };\n    this.cdr?.markForCheck();\n  }\n\n  private populateFormForEdit(): void {\n    if (this.element && this.elementId != null) {\n      this.isEditMode = true;\n      this.isCreateMode = false;\n      this.form.patchValue({\n        name: this.element.title ?? '',\n        screenNameId: this.element.screenNameId ?? 'none',\n        value: this.element.selector ?? '',\n        selectedElementId: this.element.id ?? null,\n      }, { emitEvent: false });\n      this.formLabels = [...(this.element.labels || [])];\n      this.updateScreenNameSelectConfig();\n      this.updateElementSelectConfig();\n    } else {\n      this.isEditMode = false;\n      this.isCreateMode = false;\n      this.formLabels = [];\n    }\n    this.cdr?.markForCheck();\n  }\n\n  private populateFormForCreateWithElement(): void {\n    if (this.element) {\n      this.isCreateMode = true;\n      this.isEditMode = false;\n      this.form.patchValue({\n        name: this.element.title ?? '',\n        screenNameId: this.element.screenNameId ?? 'none',\n        value: this.element.selector ?? '',\n        selectedElementId: this.element.id ?? null,\n      }, { emitEvent: false });\n      this.formLabels = [...(this.element.labels || [])];\n      this.updateScreenNameSelectConfig();\n      this.updateElementSelectConfig();\n    } else {\n      this.isCreateMode = true;\n      this.isEditMode = false;\n      this.formLabels = [];\n    }\n    this.cdr?.markForCheck();\n  }\n\n  /** Called by parent when a new screen name was created (so we can set the selected value) */\n  setCreatedScreenName(opt: { id: number; name: string }): void {\n    this.isNewScreenNameSelected = true;\n    this.form.get('screenNameId')?.setValue(opt.id, { emitEvent: false });\n    this.form.get('selectedElementId')?.setValue(null, { emitEvent: false });\n    this.updateScreenNameSelectConfig();\n    this.updateElementSelectConfig();\n    this.cdr?.markForCheck();\n  }\n\n  onApply(): void {\n    if (this.form.invalid) {\n      Object.keys(this.form.controls).forEach((key) =>\n        this.form.get(key)?.markAsTouched()\n      );\n      return;\n    }\n\n    const formValue = this.form.value;\n    const rawScreenNameId = formValue.screenNameId;\n    const isNone = rawScreenNameId === 'none' || rawScreenNameId == null;\n    const selectedOpt = isNone ? undefined : this.screenNameOptions.find((o) => o.id === rawScreenNameId);\n    const screenNameName = selectedOpt?.name ? String(selectedOpt.name).trim() : '';\n    if (!isNone && (!rawScreenNameId || !screenNameName)) {\n      this.form.get('screenNameId')?.setErrors({ required: true });\n      this.form.get('screenNameId')?.markAsTouched();\n      return;\n    }\n\n    this.saving = true;\n    this.cdr?.markForCheck();\n\n    const payload = {\n      name: formValue.name.trim(),\n      screenNameId: isNone ? undefined : rawScreenNameId,\n      screenNameName: isNone ? '' : screenNameName,\n      locatorValue: formValue.value.trim(),\n      labels: [...this.formLabels],\n    };\n\n    if (this.isEditMode && this.elementId) {\n      this.updateElement.emit({\n        ...payload,\n        elementId: this.elementId,\n      });\n    } else {\n      this.createElement.emit(payload);\n    }\n  }\n\n  onCreateOrUpdateSuccess(): void {\n    this.saving = false;\n    this.cdr?.markForCheck();\n  }\n\n  onCreateOrUpdateError(): void {\n    this.saving = false;\n    this.cdr?.markForCheck();\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n  }\n\n  onEditInDepth(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editInDepth.emit();\n  }\n\n  getFormControl(controlName: string): FormControl {\n    return this.form.get(controlName) as FormControl;\n  }\n\n  getFormControlValue(controlName: string): string {\n    return this.form.get(controlName)?.value || '';\n  }\n\n  onFormControlChange(controlName: string, value: string): void {\n    this.form.patchValue({ [controlName]: value });\n    this.cdr?.markForCheck();\n  }\n\n  /** Add a tag (label) */\n  addTag(tag?: string): void {\n    const t = (tag || this.tagInputValue || '').trim();\n    if (t && !this.formLabels.includes(t)) {\n      this.formLabels = [...this.formLabels, t];\n      this.tagInputValue = '';\n      this.cdr?.markForCheck();\n    }\n  }\n\n  removeTag(tag: string): void {\n    this.formLabels = this.formLabels.filter((l) => l !== tag);\n    this.cdr?.markForCheck();\n  }\n\n  onTagInputKeydown(event: KeyboardEvent): void {\n    if (event.key === 'Enter' || event.key === ',') {\n      event.preventDefault();\n      this.addTag();\n    }\n  }\n\n  /** Tags to render as chips (limited) */\n  get visibleTags(): string[] {\n    if (!this.formLabels || this.formLabels.length) {\n      return this.formLabels || [];\n    }\n    return [];\n  }\n\n  /** Tooltip text showing all tags */\n  get allTagsTooltip(): string {\n    return (this.formLabels || []).join(', ');\n  }\n}\n\n\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n  <div *ngIf=\"isElementLoading && isEditMode\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-8\">\n    <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n      <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n      <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n    </svg>\n    <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading element data...</span>\n  </div>\n  <div *ngIf=\"!isElementLoading\" class=\"cqa-flex cqa-gap-1.5 cqa-items-start\">\n    <div class=\"cqa-flex cqa-flex-col cqa-w-1/2\">\n      <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1 cqa-leading-[1.4]\">\n        Label Screen Name<span class=\"cqa-text-red-500\">*</span>\n      </label>\n      <cqa-dynamic-select [form]=\"form\" [config]=\"screenNameSelectConfig\"\n        (addCustomValue)=\"createScreenNameRequest.emit($event.value)\"\n        class=\"cqa-w-full\">\n      </cqa-dynamic-select>\n      <div *ngIf=\"getFormControl('screenNameId')?.touched && getFormControl('screenNameId')?.invalid\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n        <div 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            Screen Name is required\n          </span>\n        </div>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col cqa-w-1/2\">\n      <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1 cqa-leading-[1.4]\">\n        Label<span class=\"cqa-text-red-500\">*</span>\n      </label>\n      <ng-container *ngIf=\"hasSelectedScreenName() && !isNewScreenNameSelected; else labelTextInput\">\n        <cqa-dynamic-select [form]=\"form\" [config]=\"elementSelectConfig\" class=\"cqa-w-full\">\n        </cqa-dynamic-select>\n      </ng-container>\n      <ng-template #labelTextInput>\n        <cqa-custom-input\n          class=\"cqa-w-full\"\n          placeholder=\"default-element\"\n          [inputInlineStyle]=\"'padding: 7px 11px; border: 1px solid #E5E5E5; border-radius: 8px; box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.05); box-sizing: border-box; font-size: 14px; line-height: 20px;'\"\n          [value]=\"getFormControlValue('name')\"\n          [errors]=\"getFormControl('name')?.touched && getFormControl('name')?.invalid ? ['Label is required'] : []\"\n          (valueChange)=\"onFormControlChange('name', $event)\">\n        </cqa-custom-input>\n      </ng-template>\n    </div>\n  </div>\n  <ng-container *ngIf=\"!isElementLoading\">\n    <cqa-custom-input \n      class=\"cqa-w-full\"  \n      label=\"Enter Value\" \n      placeholder=\"#default_id or xpath\"\n      [value]=\"getFormControlValue('value')\"\n      [errors]=\"getFormControl('value')?.touched && getFormControl('value')?.invalid ? ['Value is required'] : []\"\n      [required]=\"true\"\n      (valueChange)=\"onFormControlChange('value', $event)\">\n    </cqa-custom-input>\n    <div class=\"cqa-w-full\">\n      <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1\">Labels (tags)</label>\n      <div\n        class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px] cqa-max-h-[80px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\"\n        *ngIf=\"formLabels?.length; else noTagsContainer\">\n        <span *ngFor=\"let tag of visibleTags\"\n          class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-bg-[#eff6ff] cqa-border cqa-border-[#c8e0ff] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#3F43EE]\"\n          [matTooltip]=\"tag\"\n          matTooltipPosition=\"above\"\n          style=\"max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n          <span class=\"cqa-max-w-full cqa-truncate\">{{ tag }}</span>\n          <button type=\"button\" (click)=\"removeTag(tag)\" class=\"cqa-p-0.5 hover:cqa-bg-[#c8e0ff] cqa-rounded cqa-cursor-pointer cqa-h-[16px] cqa-w-[16px]\">\n            <mat-icon class=\"!cqa-w-3 !cqa-h-3 !cqa-text-[14px]\">close</mat-icon>\n          </button>\n        </span>\n        <input type=\"text\"\n          class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n          placeholder=\"Type and press Enter to add\"\n          [(ngModel)]=\"tagInputValue\"\n          (keydown)=\"onTagInputKeydown($event)\"\n          (blur)=\"addTag()\"\n          [ngModelOptions]=\"{standalone: true}\">\n      </div>\n      <ng-template #noTagsContainer>\n        <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px]\">\n          <input type=\"text\"\n            class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n            placeholder=\"Type and press Enter to add\"\n            [(ngModel)]=\"tagInputValue\"\n            (keydown)=\"onTagInputKeydown($event)\"\n            (blur)=\"addTag()\"\n            [ngModelOptions]=\"{standalone: true}\">\n        </div>\n      </ng-template>\n    </div>\n\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n      <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n        <div class=\"cqa-flex-1 cqa-min-w-0\">\n          <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"(elementId ? 'Cancel' : 'Select from Element list')\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n            [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\" [disabled]=\"saving\"></cqa-button>\n        </div>\n        <div class=\"cqa-flex-1 cqa-min-w-0\">\n          <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"saving ? 'Saving...' : ((isEditMode || !hasSelectedScreenName()) ? 'Update' : 'Create')\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n            [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\" [disabled]=\"saving\"></cqa-button>\n        </div>\n      </div>\n    </div>\n    <a role=\"button\" tabindex=\"0\" href=\"javascript:void(0)\" *ngIf=\"isEditInDepthAvailable\" (click)=\"onEditInDepth($event)\"\n      class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center cqa-cursor-pointer\">\n      <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n      Edit in depth (open detailed right panel)\n    </a>\n  </ng-container>\n</div>\n\n\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy, AfterViewInit, OnDestroy, ViewChild, ElementRef, OnChanges, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'cqa-element-list',\n  templateUrl: './element-list.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElementListComponent implements AfterViewInit, OnDestroy, OnChanges {\n  @ViewChild('scrollContainer', { static: false }) scrollContainer?: ElementRef<HTMLDivElement>;\n  \n  /** Array of items to display */\n  @Input() items: any[] = [];\n  \n  /** Key to access the title property from each item (default: 'title') */\n  @Input() titleKey: string = 'title';\n  \n  /** Key to access the selector property from each item (default: 'selector') */\n  @Input() selectorKey: string = 'selector';\n  \n  /** Key to access the labels array from each item (default: 'labels') */\n  @Input() labelsKey: string = 'labels';\n\n  /** Key on each item for the screen name object (e.g. 'screenNameObj'); its 'name' property is shown below the selector */\n  @Input() screenNameObjectKey: string = 'screenNameObj';\n  \n  /** Maximum height for the scrollable container (default: '200px') */\n  @Input() maxHeight: string = '200px';\n\n  /** Currently selected item to highlight in the list (same reference or matching id/title+selector) */\n  @Input() selectedItem: any = null;\n\n  /** Whether more items can be loaded */\n  @Input() hasMore: boolean = false;\n\n  /** Emitted when an item is clicked */\n  @Output() itemClick = new EventEmitter<any>();\n\n  /** Emitted when user scrolls near the bottom and more items should be loaded */\n  @Output() loadMore = new EventEmitter<void>();\n\n  private scrollObserver?: IntersectionObserver;\n  /** Skip the first intersection callback (fires immediately when observe() is called) to prevent duplicate API calls on load */\n  private skipNextIntersection = false;\n\n  /**\n   * Get the value from an item using the specified key\n   */\n  getItemValue(item: any, key: string): any {\n    return item?.[key];\n  }\n\n  /**\n   * Get screen name from item (screenNameObj.name or screenName string) for display below selector\n   */\n  getScreenName(item: any): string | null {\n    if (!item) return null;\n    const obj = item[this.screenNameObjectKey];\n    if (obj && obj.name != null && String(obj.name).trim() !== '') {\n      return String(obj.name).trim();\n    }\n    const flat = item['screenName'];\n    if (flat != null && String(flat).trim() !== '') {\n      return String(flat).trim();\n    }\n    return null;\n  }\n\n  /**\n   * Handle item click\n   */\n  onItemClick(item: any): void {\n    this.itemClick.emit(item);\n  }\n\n  /**\n   * Whether the given item is the selected one (for highlighting).\n   */\n  isSelected(item: any): boolean {\n    if (this.selectedItem == null) return false;\n    if (item === this.selectedItem) return true;\n    if (this.selectedItem.id != null && item?.id != null && Number(item.id) === Number(this.selectedItem.id)) return true;\n    const sameTitle = (this.getItemValue(item, this.titleKey) ?? '') === (this.getItemValue(this.selectedItem, this.titleKey) ?? '');\n    const sameSelector = (this.getItemValue(item, this.selectorKey) ?? '') === (this.getItemValue(this.selectedItem, this.selectorKey) ?? '');\n    return sameTitle && sameSelector;\n  }\n\n  ngAfterViewInit(): void {\n    if (this.hasMore) {\n      setTimeout(() => this.setupScrollObserver(), 0);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['hasMore'] && this.hasMore && this.scrollContainer) {\n      setTimeout(() => this.setupScrollObserver(), 0);\n    }\n  }\n\n  ngOnDestroy(): void {\n    if (this.scrollObserver) {\n      this.scrollObserver.disconnect();\n    }\n  }\n\n  private setupScrollObserver(): void {\n    if (!this.hasMore || !this.scrollContainer) {\n      return;\n    }\n\n    // Find the sentinel element (loading indicator)\n    const sentinel = this.scrollContainer.nativeElement.querySelector('.load-more-sentinel') as HTMLElement | null;\n    if (!sentinel) {\n      return;\n    }\n\n    // Disconnect existing observer if any\n    if (this.scrollObserver) {\n      this.scrollObserver.disconnect();\n    }\n\n    // Skip the first intersection callback - it fires immediately when observe() is called\n    // if the sentinel is already in view, causing duplicate API calls (page 0 + page 1) on load\n    this.skipNextIntersection = true;\n\n    // Create IntersectionObserver to detect when sentinel comes into view\n    this.scrollObserver = new IntersectionObserver(\n      (entries) => {\n        for (const entry of entries) {\n          if (entry.isIntersecting && this.hasMore) {\n            if (this.skipNextIntersection) {\n              this.skipNextIntersection = false;\n              return;\n            }\n            this.loadMore.emit();\n          }\n        }\n      },\n      {\n        root: this.scrollContainer.nativeElement,\n        rootMargin: '50px',\n        threshold: 0.1\n      }\n    );\n\n    this.scrollObserver.observe(sentinel);\n  }\n}\n\n","<div \n  #scrollContainer\n  class=\"cqa-max-h-[200px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB] cqa-flex cqa-items-center cqa-justify-center cqa-flex-col cqa-gap-2\"\n  [style.max-height]=\"maxHeight\">\n  <div *ngFor=\"let item of items\" (click)=\"onItemClick(item)\" class=\"cqa-w-full\">\n    <div class=\"hover:cqa-bg-[#F5F5F5] cqa-flex cqa-flex-col cqa-border cqa-border-solid cqa-rounded-lg cqa-p-3 cqa-cursor-pointer cqa-gap-1\"\n         [class.cqa-bg-[#EFF6FF]]=\"isSelected(item)\"\n         [class.cqa-border-2]=\"isSelected(item)\"\n         [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n         [class.cqa-border-[#FDE68A]]=\"!isSelected(item)\">\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-1\">\n        <div class=\"cqa-min-w-0 cqa-flex-1 cqa-break-words\">\n          <h6 class=\"cqa-text-[12px] cqa-leading-[100%] cqa-font-[400] cqa-text-[#171717]\">\n            {{ getItemValue(item, titleKey) }}\n          </h6>\n          <span class=\"cqa-text-[10px] cqa-leading-[100%] cqa-text-[#6B7280]\">\n            {{ getItemValue(item, selectorKey) }}\n          </span>\n        </div>\n        <div class=\"cqa-flex cqa-gap-1 cqa-min-w-[80px] cqa-justify-end\">\n          <span \n            *ngFor=\"let tag of getItemValue(item, labelsKey)\" \n            class=\"cqa-text-[11px] cqa-text-[#4b74ec] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\">\n            {{ tag }}\n          </span>\n        </div>\n      </div>\n      <div *ngIf=\"getScreenName(item)\" class=\"cqa-mt-2 cqa-flex cqa-justify-start cqa-items-center\">\n        <span class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-text-[11px] cqa-font-medium cqa-text-[#3F43EE] cqa-bg-[#EFF6FF] cqa-border cqa-border-solid cqa-border-[#C8E0FF] cqa-rounded-md cqa-px-2 cqa-py-0.5 cqa-w-fit\">\n          <span class=\"cqa-text-[#6B7280] cqa-font-normal\">Screen:</span> {{ getScreenName(item) }}\n        </span>\n      </div>\n    </div>\n  </div>\n  <!-- No elements found message -->\n  <div *ngIf=\"items.length === 0 && !hasMore\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-4 cqa-text-[12px] cqa-text-[#6B7280]\">\n    No elements found\n  </div>\n  <!-- Sentinel element for infinite scroll -->\n  <div *ngIf=\"hasMore\" class=\"load-more-sentinel cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-2\">\n    <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n      <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n      <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n    </svg>\n    <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">{{ items.length === 0 ? 'Loading...' : 'Loading more...' }}</span>\n  </div>\n</div>\n\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport {\n  ELEMENT_POPUP_DATA,\n  ELEMENT_POPUP_EDIT_IN_DEPTH,\n  ElementPopupData,\n  ElementPopupDataElements,\n} from './element-popup-data';\nimport { ElementCreatePayload, ElementUpdatePayload, ScreenNameOption } from './element-popup-form-data';\nimport { CUSTOM_ELEMENT_POPUP_REF, ElementPopupRef } from './../element-popup/element-popup-ref';\nimport { ElementFormComponent } from './element-form/element-form.component';\n\n@Component({\n  selector: 'cqa-element-popup',\n  templateUrl: './element-popup.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ElementPopupComponent implements OnInit, OnChanges {\n  @Input() value: string = '';\n  @Input() helpUrl: string = '';\n  @Input() labels: string[] = [];\n  @Input() element: ElementPopupDataElements = {title: '', selector: '', labels: []};\n  @Input() elements: ElementPopupDataElements[] = [];\n  @Input() enableForm: boolean = false;\n  @Input() isOnRecord: boolean = false;\n  @Input() hasMoreElements: boolean = false;\n  /** Element ID when editing existing element */\n  @Input() elementId?: number;\n  /** Screen name options for autocomplete (from API) */\n  @Input() screenNameOptions: ScreenNameOption[] = [];\n  /** Whether more screen names are available for infinite scroll */\n  @Input() hasMoreScreenNames: boolean = false;\n  /** True while parent is loading screen names (search or load more) */\n  @Input() isLoadingScreenNames: boolean = false;\n  /** True while parent is loading elements (search or load more) */\n  @Input() isLoadingElements: boolean = false;\n  /** Suggested tags from API for labels field */\n  @Input() suggestedTags: string[] = [];\n  /** True while parent is fetching latest element data for edit (shows loading state) */\n  @Input() isElementLoading: boolean = false;\n  /** Recent searched items to display in Recent section */\n  @Input() recentSearchedItems: string[] = [];\n\n  @Output() apply = new EventEmitter<string>();\n  @Output() cancel = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<void>();\n  @Output() searchElement = new EventEmitter<string>();\n  /** Emitted when user clicks on a recent searched item */\n  @Output() recentItemClick = new EventEmitter<string>();\n  @Output() loadMoreElements = new EventEmitter<void>();\n  /** Emitted when user creates a new element (parent should call API) */\n  @Output() createElement = new EventEmitter<ElementCreatePayload>();\n  /** Emitted when user updates an element (parent should call API) */\n  @Output() updateElement = new EventEmitter<ElementUpdatePayload>();\n  /** Emitted when user requests to create a new screen name */\n  @Output() createScreenNameRequest = new EventEmitter<string>();\n  /** Emitted when user searches screen names (server search) */\n  @Output() searchScreenName = new EventEmitter<string>();\n  /** Emitted when user scrolls to load more screen names (passes current search query) */\n  @Output() loadMoreScreenNames = new EventEmitter<string>();\n  /** Emitted when user selects a screen so parent can fetch elements filtered by that screen */\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>();\n  /** Emitted when Create or Edit form is opened - parent should fetch screen names and (for edit) latest element */\n  @Output() formOpenRequest = new EventEmitter<{ mode: 'create' | 'edit'; elementId?: number }>();\n  /** Emitted when user selects an element from the list - parent should set element and editingElementId for Edit flow */\n  @Output() elementSelect = new EventEmitter<ElementPopupDataElements>();\n  /** Emitted when user clicks Record - parent should check extension and call installPlugin or openSidePanelAndListSteps */\n  @Output() toggleRecord = new EventEmitter<void>();\n\n  @ViewChild(ElementFormComponent) elementFormComponent?: ElementFormComponent;\n\n  helpTooltipText = 'Not sure what to do? Click to go to our detailed step creation documentation';\n  showHelpTooltip = false;\n  isEditMode: boolean = false;\n  /** Whether we're in create mode (no elementId) */\n  isCreateMode: boolean = false;\n  /** Current search input value (bound to search bar) */\n  searchValue = '';\n\n  private injectedData?: ElementPopupData;\n\n  constructor(\n    @Optional() @Inject(CUSTOM_ELEMENT_POPUP_REF) private ref?: ElementPopupRef,\n    @Optional() @Inject(ELEMENT_POPUP_DATA) data?: ElementPopupData,\n    @Optional() private readonly cdr?: ChangeDetectorRef\n  ) {\n    this.injectedData = data;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if ((changes['element'] || changes['elementId']) && this.enableForm) {\n      if (this.elementId) {\n        this.isCreateMode = false;\n        this.isEditMode = true;\n      } else {\n        this.isCreateMode = true;\n        this.isEditMode = false;\n      }\n    }\n  }\n\n  ngOnInit(): void {\n    if (this.injectedData) {\n      if (!this.value) this.value = this.injectedData.description ?? '';\n      if (!this.helpUrl) this.helpUrl = this.injectedData.helpUrl ?? '';\n      if (this.labels.length === 0) this.labels = this.injectedData.labels ?? [];\n      if (this.elements.length === 0) this.elements = this.injectedData.elements ?? [];\n      if (!this.element || !this.element.title) {\n        this.element = this.injectedData.element ?? {title: '', selector: '', labels: []};\n      }\n    }\n  }\n\n  private resetForm(): void {\n    this.isEditMode = false;\n    this.isCreateMode = false;\n  }\n\n  onElementFormCreate(payload: ElementCreatePayload): void {\n    this.createElement.emit(payload);\n  }\n\n  onElementFormUpdate(payload: ElementUpdatePayload): void {\n    this.updateElement.emit(payload);\n  }\n\n  onElementFormCancel(): void {\n    this.toggleForm();\n  }\n\n  onCreateOrUpdateSuccess(): void {\n    this.enableForm = false;\n    this.resetForm();\n    this.cdr?.markForCheck();\n  }\n\n  onCreateOrUpdateError(): void {\n    this.cdr?.markForCheck();\n  }\n\n  toggleForm(): void {\n    if (!this.enableForm) {\n      // If no elementId, go to create mode instead of edit mode\n      if (!this.elementId) {\n        this.isCreateMode = true;\n        this.isEditMode = false;\n        this.formOpenRequest.emit({ mode: 'create' });\n      } else {\n        // Has elementId, go to edit mode\n        this.isCreateMode = false;\n        this.isEditMode = true;\n        this.formOpenRequest.emit({ mode: 'edit', elementId: this.elementId });\n      }\n    } else {\n      // Closing form - reset everything\n      // If in create mode, reset labels when going back to element list\n      if (this.isCreateMode) {\n        this.labels = [];\n      }\n      this.resetForm();\n      this.isCreateMode = false;\n    }\n    this.enableForm = !this.enableForm;\n    this.cdr?.markForCheck();\n  }\n\n  openCreateForm(): void {\n    this.isCreateMode = true;\n    this.isEditMode = false;\n    this.resetForm();\n    this.enableForm = true;\n    this.formOpenRequest.emit({ mode: 'create' });\n    this.cdr?.markForCheck();\n  }\n\n  onToggleRecordClick(): void {\n    this.toggleRecord.emit();\n  }\n\n  onCancel(): void {\n    if (this.enableForm) {\n      // If in create mode, go back to element list and reset labels\n      if (this.isCreateMode) {\n        this.resetForm();\n        this.enableForm = false;\n        this.isCreateMode = false;\n        // Reset labels when going back from create mode\n        this.labels = [];\n        this.cdr?.markForCheck();\n      } else {\n        // Edit mode - just reset form\n        this.resetForm();\n        this.enableForm = false;\n      }\n    }\n    this.cancel.emit();\n    if (this.ref) this.ref.close(undefined);\n  }\n\n  onClose(): void {\n    this.onCancel();\n  }\n\n  onEditInDepth(): void {\n    this.editInDepth.emit();\n    if (this.ref) this.ref.close(ELEMENT_POPUP_EDIT_IN_DEPTH as any);\n  }\n\n  search(event: string): void {\n    // Update searchValue to keep it in sync with search bar input\n    this.searchValue = event;\n    this.searchElement.emit(event);\n    this.cdr?.markForCheck();\n  }\n\n  onHelp(event: Event): void {\n    if (this.helpUrl) {\n      event.preventDefault();\n      window.open(this.helpUrl, '_blank');\n    }\n  }\n\n\n  onElementClick(element: ElementPopupDataElements): void {\n    this.element = element;\n    this.elementSelect.emit(element);\n    if (this.enableForm) {\n      this.enableForm = false;\n      this.isCreateMode = false;\n    }\n    this.cdr?.markForCheck();\n  }\n\n  onLoadMoreElements(): void {\n    this.loadMoreElements.emit();\n  }\n\n  onRecentItemClick(item: string): void {\n    // Update search bar input with the recent item\n    this.searchValue = item;\n    // Emit event to trigger search for this recent item\n    this.recentItemClick.emit(item);\n    // Also trigger search directly\n    this.searchElement.emit(item);\n    this.cdr?.markForCheck();\n  }\n\n  /** Called by parent when a new screen name was created (so we can set the selected value) */\n  setCreatedScreenName(opt: { id: number; name: string }): void {\n    this.elementFormComponent?.setCreatedScreenName(opt);\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\" style=\"width: 100%;\">\n  <!-- Header: title left; Need help? + close icon right -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n    <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n      Element\n    </h2>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <!-- Need help? with custom tooltip (works inside overlay) -->\n      <div class=\"cqa-relative cqa-inline-flex\"\n        (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n        <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n          class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n            <g clip-path=\"url(#help-icon-clip)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"help-icon-clip\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </a>\n        <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n            <g clip-path=\"url(#help-icon-clip-nolink)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"help-icon-clip-nolink\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </span>\n        <!-- Custom tooltip (exact spec: 306×20 content, 6px radius, #0A0A0A, no arrow) -->\n        <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-125px]\"\n          role=\"tooltip\">\n          <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px]\">\n            {{ helpTooltipText }}\n          </div>\n        </div>\n      </div>\n      <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n        [text]=\"''\"\n        icon=\"close\"\n        (clicked)=\"onClose()\"\n        [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-1 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n        title=\"Close\"\n        aria-label=\"Close\">\n      </cqa-button>\n    </div>\n  </div>\n\n  <!-- Line below header (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <ng-container *ngIf=\"enableForm && !isOnRecord\">\n    <cqa-element-form\n      #elementForm\n      [elementId]=\"elementId\"\n      [element]=\"element\"\n      [elements]=\"elements\"\n      [screenNameOptions]=\"screenNameOptions\"\n      [hasMoreScreenNames]=\"hasMoreScreenNames\"\n      [isLoadingScreenNames]=\"isLoadingScreenNames\"\n      [hasMoreElements]=\"hasMoreElements\"\n      [isLoadingElements]=\"isLoadingElements\"\n      [isElementLoading]=\"isElementLoading\"\n      [isEditMode]=\"isEditMode\"\n      [isCreateMode]=\"isCreateMode\"\n      (createElement)=\"onElementFormCreate($event)\"\n      (updateElement)=\"onElementFormUpdate($event)\"\n      (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n      (searchScreenName)=\"searchScreenName.emit($event)\"\n      (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n      (searchElements)=\"searchElement.emit($event)\"\n      (loadMoreElements)=\"loadMoreElements.emit()\"\n      (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n      (cancel)=\"onElementFormCancel()\"\n      (editInDepth)=\"onEditInDepth()\">\n    </cqa-element-form>\n  </ng-container>\n\n<ng-container *ngIf=\"isOnRecord && !enableForm\">\n  <div\n    class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n\n    <!-- Video Icon -->\n    <div\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2]\">\n      <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n        \n    </div>\n\n    <!-- Title -->\n    <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n      Recording Mode Active\n    </h4>\n\n    <!-- Subtitle -->\n    <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n      Click on any element in the browser to capture it\n    </p>\n  </div>\n\n  <!-- Footer -->\n  <div class=\"cqa-flex cqa-justify-center cqa-pb-4\">\n    <cqa-button\n      variant=\"outlined\"\n      btnSize=\"lg\"\n      [text]=\"'Cancel Recording'\"\n      (clicked)=\"onToggleRecordClick()\"\n      [customClass]=\"'cqa-text-[14px] cqa-px-16 cqa-py-[9px] cqa-border-[#414146]'\">\n    </cqa-button>\n  </div>\n</ng-container>\n\n\n  <ng-container *ngIf=\"!enableForm && !isOnRecord\">\n<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n\n  <!-- Selected -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Selected</span>\n\n    <div\n      class=\"cqa-flex cqa-items-center cqa-justify-between\n             cqa-bg-[#FFFBEB] cqa-border cqa-border-[#fadfba]\n             cqa-rounded-lg cqa-p-3 cqa-border-solid cqa-gap-3\">\n\n      <div class=\"cqa-flex cqa-px-3 cqa-py-2 cqa-rounded-lg cqa-flex-col cqa-gap-0.5 cqa-bg-[#f5f5f5] cqa-flex-1\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-min-w-0\">\n          <span class=\"cqa-text-[14px] cqa-font-[600] cqa-text-[#111827] cqa-min-w-0 cqa-flex-1\"\n          style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n          [matTooltip]=\"element.title\"\n          matTooltipPosition=\"above\">\n          {{element.title}}\n        </span>\n\n        <div class=\"cqa-flex cqa-gap-2 cqa-max-w-[80px] cqa-justify-end cqa-flex-wrap\">\n          <span *ngFor=\"let l of element.labels\"\n            class=\"cqa-text-[10px] cqa-px-1.5 cqa-py-0.5\n                  cqa-rounded cqa-bg-[#EEF2FF] cqa-text-[#3F43EE] cqa-rounded-full cqa-px-2 cqa-bg-[#eff6ff] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\"\n            style=\"display: -webkit-box; -webkit-line-clamp: 2; line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis;\"\n            [matTooltip]=\"l\"\n            matTooltipPosition=\"above\">\n            {{l}}\n          </span>\n        </div>\n      </div>\n\n      <span class=\"cqa-text-[10px] cqa-text-[#6B7280]\">\n          {{element.selector}}\n        </span>\n      </div>\n      <cqa-button variant=\"outlined\" icon=\"edit\" btnSize=\"lg\" [text]=\"'Edit'\" [fullWidth]=\"true\" (clicked)=\"toggleForm()\"\n              [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n    </div>\n  </div>\n\n  <!-- Recent -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" *ngIf=\"recentSearchedItems.length > 0\">\n    <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Recent</span>\n\n    <div class=\"cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\">\n\n      <div *ngFor=\"let item of recentSearchedItems\" \n        class=\"cqa-cursor-pointer cqa-inline-block\"\n        (click)=\"onRecentItemClick(item)\">\n        <cqa-badge  \n          class=\"cqa-element-badge cqa-mb-2 cqa-chip !cqa-bg-white !cqa-text-[12px] cqa-whitespace-nowrap\" \n          [label]=\"item\"></cqa-badge>\n      </div>\n    </div>\n  </div>\n\n  <!-- Element Library -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <span class=\"cqa-text-[12px] cqa-text-[#6B7280]\">Element Library</span>\n    <cqa-search-bar [fullWidth]=\"true\" [value]=\"searchValue\" placeholder=\"Search library\" (valueChange)=\"search($event)\"></cqa-search-bar>        \n  </div>\n\n  <cqa-element-list \n    [items]=\"elements\"\n    [selectedItem]=\"element\"\n    [titleKey]=\"'title'\"\n    [selectorKey]=\"'selector'\"\n    [labelsKey]=\"'labels'\"\n    [maxHeight]=\"'200px'\"\n    [hasMore]=\"hasMoreElements\"\n    (itemClick)=\"onElementClick($event)\"\n    (loadMore)=\"onLoadMoreElements()\">\n  </cqa-element-list>\n</div>\n\n\n      <!-- Footer: Cancel, Apply (full width in one row) -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n        <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n          <div class=\"cqa-flex-1 cqa-min-w-0\">\n            <cqa-button variant=\"outlined\" icon=\"radio_button_checked\" btnSize=\"lg\" [text]=\"'Record'\" [fullWidth]=\"true\" (clicked)=\"onToggleRecordClick()\"\n              [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n          </div>\n          <div class=\"cqa-flex-1 cqa-min-w-0\">\n            <cqa-button variant=\"outlined\" icon=\"add\" btnSize=\"lg\" [text]=\"'Create New'\" [fullWidth]=\"true\" (clicked)=\"openCreateForm()\"\n              [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n          </div>\n        </div>\n      </div>\n  </ng-container>\n\n</div>\n","import { ElementRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { ElementPopupComponent } from './element-popup.component';\nimport { ElementPopupRef } from './element-popup-ref';\nimport {\n  ELEMENT_POPUP_DATA,\n  ELEMENT_POPUP_EDIT_IN_DEPTH,\n  ElementPopupData,\n} from './element-popup-data';\nimport { CUSTOM_ELEMENT_POPUP_REF } from './element-popup-ref';\n\nexport type ElementPopupResult =\n  | string\n  | undefined\n  | typeof ELEMENT_POPUP_EDIT_IN_DEPTH;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ElementPopupService {\n  /** Currently open Step Description overlay ref; only one panel is allowed at a time. */\n  private currentRef: ElementPopupRef<ElementPopupResult> | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  /**\n   * Opens the Step Description modal positioned just below the given origin element.\n   * If a panel is already open, returns the existing ref and does not open a duplicate.\n   * @param origin Element (e.g. description span or edit icon) to position below\n   * @param data Initial description and optional help URL\n   * @returns Ref with afterClosed() and close(); afterClosed emits the new description on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks \"Edit in depth\"\n   */\n  open(\n    origin: ElementRef<HTMLElement>,\n    data: ElementPopupData\n  ): ElementPopupRef<ElementPopupResult> {\n    if (this.currentRef) {\n      return this.currentRef;\n    }\n    const originEl = origin.nativeElement;\n    const gap = 8;\n    const modalWidth = 500;\n    const margin = 8;\n\n    originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n\n    const positionStrategy = this.overlay.position().global();\n\n    const overlayRef = this.overlay.create(\n      new OverlayConfig({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.reposition(),\n        positionStrategy,\n        panelClass: ['cqa-element-popup-panel', 'cqa-ui-root'],\n        width: 'min(560px, 90vw)',\n      })\n    );\n\n    const updatePosition = (): void => {\n      const rect = originEl.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      let top = rect.bottom + gap;\n      let left = rect.left;\n      if (left + modalWidth > viewportWidth - margin) {\n        left = viewportWidth - modalWidth - margin;\n      }\n      if (left < margin) {\n        left = margin;\n      }\n      if (top < margin) {\n        top = margin;\n      }\n      positionStrategy.top(`${top}px`).left(`${left}px`);\n      overlayRef.updatePosition();\n    };\n\n    const editStepRef = new ElementPopupRef<ElementPopupResult>(overlayRef);\n\n    const injector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: CUSTOM_ELEMENT_POPUP_REF, useValue: editStepRef },\n        { provide: ELEMENT_POPUP_DATA, useValue: data },\n      ],\n    });\n\n    updatePosition();\n\n    const portal = new ComponentPortal(ElementPopupComponent, undefined, injector);\n    overlayRef.attach(portal);\n\n    requestAnimationFrame(() => updatePosition());\n\n    const scrollListener = (): void => updatePosition();\n    window.addEventListener('scroll', scrollListener, true);\n    window.addEventListener('resize', scrollListener);\n    this.currentRef = editStepRef;\n    editStepRef.afterClosed().subscribe(() => {\n      this.currentRef = null;\n      window.removeEventListener('scroll', scrollListener, true);\n      window.removeEventListener('resize', scrollListener);\n    });\n\n    overlayRef.backdropClick().subscribe(() => editStepRef.close(undefined));\n    overlayRef\n      .keydownEvents()\n      .pipe(\n        filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc')\n      )\n      .subscribe(() => editStepRef.close(undefined));\n\n    return editStepRef;\n  }\n}\n","import { InjectionToken } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class TestDataModalRef<TResult = string | undefined> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => {\n      this.finishClose(undefined);\n    });\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\nexport const TEST_DATA_MODAL_REF = new InjectionToken<TestDataModalRef>(\n  'TEST_DATA_MODAL_REF'\n);\n","/** Environment variable item for the Environment tab (variable library by environment). */\nexport interface EnvironmentItem {\n  id: string;\n  name: string;\n  value: string;\n  /** Display name of the environment group (e.g. \"OHRM login\", \"Halight Env\"). */\n  environment: string;\n  /** When true, show edit icon when selected. */\n  editable?: boolean;\n}\n\n/** Mock data for Environment tab (no API). Replace with API call when integrating. */\nexport const MOCK_ENVIRONMENT_ITEMS: EnvironmentItem[] = [\n  { id: 'e1', name: 'BASE_URL', value: 'https://ohrm.example.com', environment: 'OHRM login', editable: true },\n  { id: 'e2', name: 'USERNAME', value: 'admin', environment: 'OHRM login', editable: true },\n  { id: 'e3', name: 'PASSWORD', value: '••••••••', environment: 'OHRM login', editable: true },\n  { id: 'e4', name: 'API_BASE', value: 'https://api.halight.com/v1', environment: 'Halight Env', editable: true },\n  { id: 'e5', name: 'AUTH_TOKEN', value: 'Bearer eyJ...', environment: 'Halight Env', editable: true },\n  { id: 'e6', name: 'TENANT_ID', value: 'tenant-abc-123', environment: 'Halight Env', editable: false },\n];\n","/** Scope of a variable/parameter in the library. */\nexport type ParameterScope = 'Global' | 'Local';\n\nexport interface ParameterItem {\n  id: string;\n  name: string;\n  value: string;\n  scope: ParameterScope;\n}\n\n/** Mock data for Variable Library (no API). Replace with API call when integrating. */\nexport const MOCK_PARAMETERS: ParameterItem[] = [\n  { id: '1', name: 'user_email', value: 'test@example.com', scope: 'Local' },\n  { id: '2', name: 'API_BASE_URL', value: 'https://api.example.com', scope: 'Global' },\n  { id: '3', name: 'auth_token', value: 'eyJhbGciOiJIUzI1...', scope: 'Global' },\n  { id: '4', name: 'session_id', value: 'abc123xvz456...', scope: 'Local' },\n];\n\nexport type ParameterScopeFilter = 'all' | 'global' | 'local';\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport {\n  TEST_DATA_MODAL_DATA,\n  TEST_DATA_MODAL_EDIT_IN_DEPTH,\n  TestDataModalData,\n  TestDataModalTab,\n} from './test-data-modal-data';\nimport { TEST_DATA_MODAL_REF, TestDataModalRef } from './test-data-modal-ref';\nimport { TestDataModalResult } from './test-data-modal.service';\nimport {\n  MOCK_ENVIRONMENT_ITEMS,\n  EnvironmentItem,\n} from './test-data-modal-environment.model';\nimport {\n  MOCK_PARAMETERS,\n  ParameterItem,\n  ParameterScopeFilter,\n} from './test-data-modal-parameter.model';\nimport { CqaListItemConfig } from '../../item-list/item-list.model';\n\nconst TAB_SEGMENTS = [\n  { label: 'Plain Text', value: 'plain-text' },\n  { label: 'Parameter', value: 'parameter' },\n  { label: 'Environment', value: 'environment' },\n  { label: 'Runtime', value: 'runtime' },\n];\n\nconst PARAMETER_FILTER_TABS: { label: string; value: ParameterScopeFilter }[] = [\n  { label: 'All', value: 'all' },\n  { label: 'Global', value: 'global' },\n  { label: 'Local', value: 'local' },\n];\n\n/** Mock runtime variable suggestions (replace with API when integrating). */\nconst RUNTIME_SUGGESTED_VALUES = [\n  'runtime.MaxWaitTime',\n  'runtime.session_id',\n  'runtime.auth_token',\n  'runtime.step_index',\n  'runtime.timestamp',\n  'runtime.test_name',\n];\n\n@Component({\n  selector: 'cqa-test-data-modal',\n  templateUrl: './test-data-modal.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestDataModalComponent implements OnInit, OnChanges {\n  @Output() apply = new EventEmitter<{value: string, activeTab: TestDataModalTab}>();\n  @Output() cancel = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<void>();\n  @Output() parameterCreate = new EventEmitter<void>();\n  @Output() parameterEdit = new EventEmitter<string>();\n  @Output() environmentCreate = new EventEmitter<void>();\n  @Output() environmentEdit = new EventEmitter<string>();\n\n  readonly tabSegments = TAB_SEGMENTS;\n  readonly parameterFilterTabs = PARAMETER_FILTER_TABS;\n  /** Parameter list from input, falls back to mock data if not provided. */\n  @Input() parameters: ParameterItem[] = MOCK_PARAMETERS;\n  /** Environment list from input, falls back to mock data if not provided. */\n  @Input() environmentItems: EnvironmentItem[] = MOCK_ENVIRONMENT_ITEMS;\n  /** Runtime tab: suggested variable chips. */\n  readonly runtimeSuggestedValues: readonly string[] = RUNTIME_SUGGESTED_VALUES;\n\n  /** Form for all modal controls (same pattern as Loop Step editForm). */\n  editForm!: FormGroup;\n\n  /** Cached select configs (stable refs, same naming as Loop Step: xxxSelectConfig). */\n  activeTabSelectConfig!: DynamicSelectFieldConfig;\n  parameterScopeFilterSelectConfig!: DynamicSelectFieldConfig;\n\n  /** Local copy of form value for Cancel revert (same pattern as Loop Step editSnapshot). */\n  private editSnapshot: Record<string, unknown> = {};\n  /** Preserve user-entered plain text independently from parameter/environment/runtime selections. */\n  private plainTextValue = '';\n\n  /** State derived from config/editForm for template and getters (mirrors Loop Step inputs). */\n  @Input() activeTab: TestDataModalTab = 'plain-text';\n  @Input() value = '';\n  @Input() helpUrl = '';\n  helpTooltipText = 'Not sure what to do? Click to go to our detailed step creation documentation';\n  showHelpTooltip = false;\n\n  parameterScopeFilter: ParameterScopeFilter = 'all';\n  parameterSearchQuery = '';\n  selectedParameterId: string | null = null;\n\n  environmentSearchQuery = '';\n  selectedEnvironmentId: string | null = null;\n\n  runtimeValue = '';\n\n  constructor(\n    private readonly fb: FormBuilder,\n    private readonly cdr: ChangeDetectorRef,\n    @Inject(TEST_DATA_MODAL_REF) private ref: TestDataModalRef<TestDataModalResult>,\n    @Optional() @Inject(TEST_DATA_MODAL_DATA) data?: TestDataModalData\n  ) {\n    if (data) {\n      this.value = data.value ?? '';\n      this.helpUrl = data.helpUrl ?? '';\n      this.activeTab = (data.activeTab ?? 'plain-text') as TestDataModalTab;\n      this.parameterScopeFilter = data.parameterScopeFilter ?? 'all';\n      this.parameterSearchQuery = data.parameterSearchQuery ?? '';\n      this.selectedParameterId = data.selectedParameterId ?? null;\n      this.environmentSearchQuery = data.environmentSearchQuery ?? '';\n      this.selectedEnvironmentId = data.selectedEnvironmentId ?? null;\n      this.runtimeValue = data.runtimeValue ?? '';\n      // Set parameters and environmentItems from data if provided\n      if (data.parameters !== undefined) {\n        this.parameters = data.parameters;\n      }\n      if (data.environmentItems !== undefined) {\n        this.environmentItems = data.environmentItems;\n      }\n    }\n    this.plainTextValue = this.activeTab === 'plain-text' ? (this.value ?? '') : '';\n  }\n\n  ngOnInit(): void {\n    this.buildEditForm();\n    this.buildSelectConfigs();\n    this.editSnapshot = { ...this.editForm.value };\n    this.cdr.markForCheck();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!this.editForm) {\n      return;\n    }\n\n    if (changes['activeTab']) {\n      this.editForm.get('activeTab')?.setValue(this.activeTab ?? 'plain-text', { emitEvent: false });\n    }\n    if (changes['value']) {\n      this.editForm.get('value')?.setValue(this.value ?? '', { emitEvent: false });\n      this.plainTextValue = this.activeTab === 'plain-text' ? (this.value ?? '') : '';\n    }\n    if (changes['helpUrl']) {\n      this.helpUrl = this.helpUrl ?? '';\n    }\n\n    this.syncStateFromForm();\n    this.cdr.markForCheck();\n  }\n\n  /** Build form with all control values (same pattern as Loop Step buildEditForm). */\n  private buildEditForm(): void {\n    this.editForm = this.fb.group({\n      value: [this.value ?? ''],\n      activeTab: [this.activeTab ?? 'plain-text'],\n      parameterScopeFilter: [this.parameterScopeFilter ?? 'all'],\n      parameterSearchQuery: [this.parameterSearchQuery ?? ''],\n      selectedParameterId: [this.selectedParameterId ?? null],\n      environmentSearchQuery: [this.environmentSearchQuery ?? ''],\n      selectedEnvironmentId: [this.selectedEnvironmentId ?? null],\n      runtimeValue: [this.runtimeValue ?? ''],\n    });\n  }\n\n  /** Build select configs once (same pattern as Loop Step buildSelectConfigs). */\n  private buildSelectConfigs(): void {\n    const tabOptions: SelectOption[] = TAB_SEGMENTS.map((s) => ({\n      id: s.value,\n      value: s.value,\n      name: s.label,\n      label: s.label,\n    }));\n    const filterOptions: SelectOption[] = PARAMETER_FILTER_TABS.map((s) => ({\n      id: s.value,\n      value: s.value,\n      name: s.label,\n      label: s.label,\n    }));\n    this.activeTabSelectConfig = {\n      key: 'activeTab',\n      placeholder: 'Tab',\n      searchable: false,\n      options: tabOptions,\n    };\n    this.parameterScopeFilterSelectConfig = {\n      key: 'parameterScopeFilter',\n      placeholder: 'Scope',\n      searchable: false,\n      options: filterOptions,\n    };\n  }\n\n  /** Update form control and sync component state (same pattern as Loop Step onEditFormFieldChange). */\n  onEditFormFieldChange(controlName: string, value: string | number | null): void {\n    this.editForm.get(controlName)?.setValue(value);\n    if (controlName === 'value' && this.activeTab === 'plain-text') {\n      this.plainTextValue = String(value ?? '');\n    }\n    this.syncStateFromForm();\n    this.cdr.markForCheck();\n  }\n\n  /** Sync component state from editForm so getters (e.g. filteredParameters) stay correct. */\n  private syncStateFromForm(): void {\n    const v = this.editForm.value;\n    this.value = v.value ?? '';\n    this.activeTab = (v.activeTab ?? 'plain-text') as TestDataModalTab;\n    this.parameterScopeFilter = (v.parameterScopeFilter ?? 'all') as ParameterScopeFilter;\n    this.parameterSearchQuery = v.parameterSearchQuery ?? '';\n    this.selectedParameterId = v.selectedParameterId ?? null;\n    this.environmentSearchQuery = v.environmentSearchQuery ?? '';\n    this.selectedEnvironmentId = v.selectedEnvironmentId ?? null;\n    this.runtimeValue = v.runtimeValue ?? '';\n  }\n\n  /** Filtered parameters by scope and search (Parameter tab). */\n  get filteredParameters(): ParameterItem[] {\n    let list = this.parameters;\n    if (this.parameterScopeFilter === 'global') {\n      list = list.filter((p) => p.scope === 'Global');\n    } else if (this.parameterScopeFilter === 'local') {\n      list = list.filter((p) => p.scope === 'Local');\n    }\n    const q = this.parameterSearchQuery.trim().toLowerCase();\n    if (q) {\n      list = list.filter((p) => p.name.toLowerCase().includes(q));\n    }\n    return list;\n  }\n\n  /** Filtered environment items by search (Environment tab). */\n  get filteredEnvironments(): EnvironmentItem[] {\n    const q = this.environmentSearchQuery.trim().toLowerCase();\n    if (!q) {\n      return this.environmentItems;\n    }\n    return this.environmentItems.filter(\n      (e) =>\n        e.name.toLowerCase().includes(q) || e.value.toLowerCase().includes(q)\n    );\n  }\n\n  /** Parameter tab: list config for cqa-item-list (search-friendly: bind filtered list). */\n  get parameterListConfig(): CqaListItemConfig[] {\n    return this.filteredParameters.map((p) => ({\n      id: p.id,\n      title: p.name,\n      subtitle: p.value,\n      badge: p.scope,\n      showEdit: this.selectedParameterId === p.id,\n    }));\n  }\n\n  /** Environment tab: list config for cqa-item-list. */\n  get environmentListConfig(): CqaListItemConfig[] {\n    return this.filteredEnvironments.map((e) => ({\n      id: e.id,\n      title: e.name,\n      subtitle: `Value: ${e.value}`,\n      badge: e.environment,\n      showEdit: this.selectedEnvironmentId === e.id && (e.editable ?? true),\n    }));\n  }\n\n  onTabChange(tabValue: string): void {\n    if (this.activeTab === 'plain-text') {\n      this.plainTextValue = this.editForm.get('value')?.value ?? '';\n    }\n    this.onEditFormFieldChange('activeTab', tabValue);\n    if (tabValue === 'plain-text') {\n      this.onEditFormFieldChange('value', this.plainTextValue ?? '');\n    }\n  }\n\n  onParameterScopeFilterChange(filter: ParameterScopeFilter): void {\n    this.onEditFormFieldChange('parameterScopeFilter', filter);\n  }\n\n  onParameterSearchInput(value: string): void {\n    this.onEditFormFieldChange('parameterSearchQuery', value);\n  }\n\n  onParameterSelect(paramId: string): void {\n    const param = this.parameters.find((p) => p.id === paramId);\n    if (param) {\n      this.selectedParameterId = this.selectedParameterId === param.id ? null : param.id;\n      this.onEditFormFieldChange('selectedParameterId', this.selectedParameterId);\n      this.onEditFormFieldChange('value', param.name);\n    }\n  }\n\n  /** Handle row click (select parameter). Edit button uses onParameterEditClick to avoid triggering this. */\n  onParameterRowClick(event: Event, item: { id: string }): void {\n    const target = event.target as HTMLElement;\n    if (target.closest('button, mat-icon, [aria-label=\"Edit\"]')) {\n      return;\n    }\n    this.onParameterSelect(item.id);\n  }\n\n  /** Handle Edit button click - stop propagation and emit so parent can navigate. */\n  onParameterEditClick(event: MouseEvent, paramId: string): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.onParameterEdit(paramId);\n  }\n\n  onParameterEdit(paramId: string): void {\n    this.parameterEdit.emit(paramId);\n  }\n\n  onCreateNewVariable(event: Event): void {\n    event.preventDefault();\n    this.parameterCreate.emit();\n  }\n\n  onEnvironmentSearchInput(value: string): void {\n    this.onEditFormFieldChange('environmentSearchQuery', value);\n  }\n\n  onEnvironmentSelect(itemId: string): void {\n    const item = this.environmentItems.find((e) => e.id === itemId);\n    if (item) {\n      this.selectedEnvironmentId =\n        this.selectedEnvironmentId === item.id ? null : item.id;\n      this.onEditFormFieldChange('selectedEnvironmentId', this.selectedEnvironmentId);\n      this.onEditFormFieldChange('value', item.name);\n    }\n  }\n\n  onEnvironmentEdit(itemId: string): void {\n    this.environmentEdit.emit(itemId);\n  }\n\n  onCreateNewEnvironment(event: Event): void {\n    event.preventDefault();\n    this.environmentCreate.emit();\n  }\n\n  /** Runtime tab: replace the runtime input with the selected suggestion. */\n  onRuntimeChipInsert(snippet: string): void {\n    this.onEditFormFieldChange('runtimeValue', snippet);\n  }\n\n  onApply(): void {\n    this.syncStateFromForm();\n    let valueToApply = this.activeTab === 'runtime' ? this.runtimeValue : this.value;\n\n    if (this.activeTab === 'parameter') {\n      valueToApply = this.selectedParameterId ? this.parameters.find((p) => p.id === this.selectedParameterId)?.name ?? '' : '';\n    } else if (this.activeTab === 'environment') {\n      valueToApply = this.selectedEnvironmentId ? this.environmentItems.find((e) => e.id === this.selectedEnvironmentId)?.name ?? '' : '';\n    }\n\n    // Wrap valueToApply based on active tab\n    if (this.activeTab === 'parameter' && valueToApply) {\n      valueToApply = `@|${valueToApply}|`;\n    } else if (this.activeTab === 'runtime' && valueToApply) {\n      valueToApply = `$|${valueToApply}|`;\n    } else if (this.activeTab === 'environment' && valueToApply) {\n      valueToApply = `*|${valueToApply}|`;\n    }\n    // plain-text tab: no wrapping, use value as is\n\n    // Build result with only the active tab's data, clear other tabs' data\n    const result: TestDataModalData = {\n      value: valueToApply,\n      activeTab: this.activeTab,\n      // Only include parameter data if parameter tab is active\n      parameterScopeFilter: this.activeTab === 'parameter' ? this.parameterScopeFilter : undefined,\n      parameterSearchQuery: this.activeTab === 'parameter' ? this.parameterSearchQuery : undefined,\n      selectedParameterId: this.activeTab === 'parameter' ? this.selectedParameterId : undefined,\n      // Only include environment data if environment tab is active\n      environmentSearchQuery: this.activeTab === 'environment' ? this.environmentSearchQuery : undefined,\n      selectedEnvironmentId: this.activeTab === 'environment' ? this.selectedEnvironmentId : undefined,\n      // Only include runtime data if runtime tab is active\n      runtimeValue: this.activeTab === 'runtime' ? this.runtimeValue : undefined,\n    };\n\n    this.apply.emit({value: valueToApply, activeTab: this.activeTab as TestDataModalTab});\n    this.ref.close(result);\n  }\n\n  onCancel(): void {\n    this.editForm.patchValue(this.editSnapshot);\n    this.syncStateFromForm();\n    this.cancel.emit();\n    this.ref.close(undefined);\n  }\n\n  onClose(): void {\n    this.onCancel();\n  }\n\n  onEditInDepth(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editInDepth.emit();\n    this.ref.close(TEST_DATA_MODAL_EDIT_IN_DEPTH as any);\n  }\n\n  onHelp(event: Event): void {\n    if (this.helpUrl) {\n      event.preventDefault();\n      window.open(this.helpUrl, '_blank');\n    }\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-max-h-[77vh] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border cqa-min-h-0\">\n  <!-- Header: title left; Need help? + close icon right (no overflow here so tooltip is not clipped) -->\n  <div class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n    <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n      Test Data\n    </h2>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-h-[28px]\">\n      <!-- Need help? with custom tooltip: show below trigger so it is not clipped by modal overflow-y-auto -->\n      <div class=\"cqa-relative cqa-inline-flex cqa-items-center\"\n        (mouseenter)=\"showHelpTooltip = true\" (mouseleave)=\"showHelpTooltip = false\">\n        <a *ngIf=\"helpUrl\" href=\"#\" (click)=\"onHelp($event)\"\n          class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline hover:cqa-underline cqa-cursor-pointer\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0\" aria-hidden=\"true\">\n            <g clip-path=\"url(#test-data-help-clip)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"test-data-help-clip\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </a>\n        <span *ngIf=\"!helpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default\">\n          <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n            <g clip-path=\"url(#test-data-help-clip-nolink)\">\n              <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            </g>\n            <defs>\n              <clipPath id=\"test-data-help-clip-nolink\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n              </clipPath>\n            </defs>\n          </svg>\n          Need help ?\n        </span>\n        <!-- Tooltip above trigger (same as element-popup); header has no overflow so tooltip is not clipped -->\n        <div *ngIf=\"showHelpTooltip\"\n          class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-bottom-[100%] cqa-mb-1 cqa-top-[22px]\"\n          role=\"tooltip\">\n          <div class=\"cqa-text-white cqa-text-left cqa-w-[306px] cqa-max-w-[306px] cqa-min-h-[20px] cqa-rounded-[6px] cqa-py-1 cqa-px-2 cqa-bg-[#0A0A0A] cqa-leading-[20px] cqa-text-[8px] cqa-break-words\">\n            {{ helpTooltipText }}\n          </div>\n        </div>\n      </div>\n      <cqa-button type=\"button\" variant=\"text\" btnSize=\"md\"\n        [text]=\"''\"\n        icon=\"close\"\n        (clicked)=\"onClose()\"\n        [customClass]=\"'cqa-min-h-[28px] cqa-min-w-[28px] cqa-p-0 cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6]'\"\n        title=\"Close\"\n        aria-label=\"Close\">\n      </cqa-button>\n    </div>\n  </div>\n\n  <!-- Line below header (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Tabs: Plain Text, Parameter, Environment, Runtime (full-width, cqa-button) -->\n  <div class=\"cqa-w-full cqa-min-w-0 cqa-test-data-modal-tabs cqa-flex cqa-flex-row cqa-p-[3.5px] cqa-h-[31.5px] cqa-rounded-[8px] cqa-bg-[#F3F4F6] cqa-gap-0\" role=\"tablist\">\n    <div *ngFor=\"let segment of tabSegments\" class=\"cqa-flex-1 cqa-min-w-0 cqa-flex\">\n      <cqa-button\n        type=\"button\"\n        [attr.role]=\"'tab'\"\n        [attr.aria-selected]=\"(editForm.get('activeTab')?.value ?? activeTab) === segment.value\"\n        [text]=\"segment.label\"\n        [variant]=\"(editForm.get('activeTab')?.value ?? activeTab) === segment.value ? 'filled' : 'text'\"\n        btnSize=\"md\"\n        [fullWidth]=\"true\"\n        (clicked)=\"onTabChange(segment.value)\"\n        [customClass]=\"(editForm.get('activeTab')?.value ?? activeTab) === segment.value ? 'cqa-h-[25px] cqa-rounded-[8px] cqa-text-[12px] cqa-bg-[#3F43EE] cqa-text-white cqa-font-medium' : 'cqa-h-[25px] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#6B7280] hover:cqa-text-[#111827]'\">\n      </cqa-button>\n    </div>\n  </div>\n\n  <!-- Content per tab: only this section scrolls (overflow here, not on root), so header tooltip is never clipped -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-h-0 cqa-overflow-y-auto\"\n    [class.cqa-flex-1]=\"activeTab === 'parameter' || activeTab === 'environment' || activeTab === 'runtime'\">\n    <!-- Plain Text tab (form-bound like Loop Step editForm + onEditFormFieldChange) -->\n    <ng-container *ngIf=\"activeTab === 'plain-text'\">\n      <cqa-custom-input\n        label=\"Value\"\n        [value]=\"editForm.get('value')?.value ?? ''\"\n        (valueChange)=\"onEditFormFieldChange('value', $event)\"\n        placeholder=\"https://example.com/dashboard\"\n        [fullWidth]=\"true\"\n        size=\"md\">\n      </cqa-custom-input>\n      <p class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#0A0A0A] cqa-m-0\">\n        Enter a static text value that won't change during execution.\n      </p>\n    </ng-container>\n\n    <!-- Parameter tab: Variable Library -->\n    <ng-container *ngIf=\"activeTab === 'parameter'\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0 cqa-flex-1 cqa-min-h-[18rem]\">\n        <!-- Variable Library header -->\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-shrink-0\">\n          <h3 class=\"cqa-text-[12px] cqa-leading-[20px] cqa-font-semibold cqa-text-[#111827] cqa-m-0\">\n            Parameters\n          </h3>\n          <a href=\"#\" (click)=\"onCreateNewVariable($event)\"\n            class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-no-underline hover:cqa-opacity-90 cqa-cursor-pointer\">\n            Create New +\n          </a>\n        </div>\n        <!-- Search: bound to editForm (same pattern as Loop Step control binding) -->\n        <div class=\"cqa-flex-shrink-0\">\n          <cqa-search-bar\n            [placeholder]=\"'Search library'\"\n            [value]=\"editForm.get('parameterSearchQuery')?.value ?? ''\"\n            [fullWidth]=\"true\"\n            [showClear]=\"true\"\n            [ariaLabel]=\"'Search library'\"\n            (valueChange)=\"onParameterSearchInput($event)\">\n          </cqa-search-bar>\n        </div>\n        <!-- Parameter list (scrollable, search-integrated via filtered list binding) -->\n        <div class=\"cqa-min-h-[200px] cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0 cqa-overflow-y-auto\">\n          <div\n            *ngFor=\"let item of parameterListConfig\"\n            role=\"button\"\n            tabindex=\"0\"\n            (click)=\"onParameterRowClick($event, item)\"\n            (keydown.enter)=\"onParameterRowClick($event, item)\"\n            (keydown.space)=\"onParameterRowClick($event, item)\"\n            [class.cqa-bg-[#D8D9FC]]=\"selectedParameterId === item.id\"\n            [class.cqa-border]=\"selectedParameterId === item.id\"\n            [class.cqa-border-solid]=\"selectedParameterId === item.id\"\n            [class.cqa-border-[#3F43EE]]=\"selectedParameterId === item.id\"\n            class=\"cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC] cqa-cursor-pointer\">\n            <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n              <div class=\"cqa-flex-1 cqa-min-w-0\">\n                <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n                  {{ item.title }}\n                </p>\n                <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n                  {{ item.subtitle }}\n                </p>\n              </div>\n              <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n                <span *ngIf=\"item.badge\"\n                  class=\"cqa-inline-flex cqa-items-center cqa-px-2 cqa-rounded-[8px] cqa-text-[10px] cqa-font-normal cqa-whitespace-nowrap cqa-bg-[#eff6ff] cqa-text-[#1447E6] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\">\n                  {{ item.badge }}\n                </span>\n                <button\n                  *ngIf=\"item.showEdit\"\n                  type=\"button\"\n                  class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-p-1 cqa-min-w-0 cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-bg-transparent cqa-border-none cqa-rounded-[6px] cqa-cursor-pointer\"\n                  (click)=\"onParameterEditClick($event, item.id)\"\n                  title=\"Edit\"\n                  aria-label=\"Edit\">\n                  <mat-icon\n                    class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\"\n                    (click)=\"onParameterEditClick($event, item.id)\">edit</mat-icon>\n                </button>\n              </div>\n            </div>\n          </div>\n          <p *ngIf=\"parameterListConfig.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n            No parameters match your search.\n          </p>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Environment tab: Variable library by environment -->\n    <ng-container *ngIf=\"activeTab === 'environment'\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0 cqa-flex-1 cqa-min-h-[18rem]\">\n        <!-- Section header -->\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-flex-shrink-0\">\n          <h3 class=\"cqa-text-[12px] cqa-leading-[20px] cqa-font-semibold cqa-text-[#111827] cqa-m-0\">\n            Environment\n          </h3>\n          <a href=\"#\" (click)=\"onCreateNewEnvironment($event)\"\n            class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-no-underline hover:cqa-opacity-90 cqa-cursor-pointer\">\n            Create New +\n          </a>\n        </div>\n        <!-- Search: bound to editForm (same pattern as Loop Step control binding) -->\n        <div class=\"cqa-flex-shrink-0\">\n          <cqa-search-bar\n            [placeholder]=\"'Search Environment'\"\n            [value]=\"editForm.get('environmentSearchQuery')?.value ?? ''\"\n            [fullWidth]=\"true\"\n            [showClear]=\"true\"\n            [ariaLabel]=\"'Search Environment'\"\n            (valueChange)=\"onEnvironmentSearchInput($event)\">\n          </cqa-search-bar>\n        </div>\n        <!-- Environment list (scrollable, search-integrated via filtered list binding) -->\n        <div class=\"cqa-min-h-[220px] cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0 cqa-overflow-y-auto\">\n          <button\n            *ngFor=\"let item of environmentListConfig\"\n            type=\"button\"\n            (click)=\"onEnvironmentSelect(item.id)\"\n            [class.cqa-bg-[#D8D9FC]]=\"selectedEnvironmentId === item.id\"\n            [class.cqa-border]=\"selectedEnvironmentId === item.id\"\n            [class.cqa-border-solid]=\"selectedEnvironmentId === item.id\"\n            [class.cqa-border-[#3F43EE]]=\"selectedEnvironmentId === item.id\"\n            class=\"cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n            <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n              <div class=\"cqa-flex-1 cqa-min-w-0\">\n                <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n                  {{ item.title }}\n                </p>\n                <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n                  {{ item.subtitle }}\n                </p>\n              </div>\n              <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n                <span *ngIf=\"item.badge\"\n                  class=\"cqa-inline-flex cqa-items-center cqa-px-2 cqa-rounded-[8px] cqa-text-[10px] cqa-font-normal cqa-whitespace-nowrap cqa-bg-[#eff6ff] cqa-text-[#1447E6] cqa-border cqa-border-solid cqa-border-[#c8e0ff]\">\n                  {{ item.badge }}\n                </span>\n              </div>\n            </div>\n          </button>\n          <p *ngIf=\"environmentListConfig.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n            No environment variables match your search.\n          </p>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Runtime tab: dynamic value injector -->\n    <ng-container *ngIf=\"activeTab === 'runtime'\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-min-h-0 cqa-h-full cqa-overflow-y-auto\">\n        <h3 class=\"cqa-text-[12px] cqa-leading-[20px] cqa-font-semibold cqa-text-[#111827] cqa-m-0 cqa-flex-shrink-0\">\n          Runtime\n        </h3>\n        <div class=\"cqa-flex-shrink-0\">\n          <cqa-custom-input\n            [value]=\"editForm.get('runtimeValue')?.value ?? ''\"\n            (valueChange)=\"onEditFormFieldChange('runtimeValue', $event)\"\n            placeholder=\"input text\"\n            [fullWidth]=\"true\"\n            size=\"md\">\n          </cqa-custom-input>\n          <p class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-mt-1.5 cqa-mb-0\">\n            Values resolved during test execution based on session and step state.\n          </p>\n        </div>\n        <!-- Recommended: suggestion chips -->\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n            <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px] cqa-text-[#9CA3AF]\" aria-hidden=\"true\">schedule</mat-icon>\n            <span class=\"cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-text-[#6B7280]\">Recommended</span>\n          </div>\n          <div class=\"cqa-test-data-runtime-chips-scroll cqa-flex cqa-gap-2 cqa-overflow-x-auto cqa-min-w-0 cqa-pb-1\">\n            <cqa-button\n              *ngFor=\"let snippet of runtimeSuggestedValues\"\n              type=\"button\"\n              variant=\"outlined\"\n              btnSize=\"md\"\n              [text]=\"snippet\"\n              (clicked)=\"onRuntimeChipInsert(snippet)\"\n              [customClass]=\"'cqa-flex-shrink-0 cqa-px-2 cqa-py-1 cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-text-[#374151] cqa-bg-[#FFFFFF] cqa-border-[#E5E7EB] cqa-rounded-[8px] cqa-whitespace-nowrap'\">\n            </cqa-button>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n  </div>\n\n  <!-- Line below content (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Footer: Cancel, Apply (full width in one row) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n    <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"'Cancel'\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n          [customClass]=\"'cqa-text-[12px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n      </div>\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"'Apply'\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n          [customClass]=\"'cqa-text-[12px] cqa-py-[9px] cqa-border-[#3F43EE]'\"></cqa-button>\n      </div>\n    </div>\n    <a role=\"button\" tabindex=\"0\" href=\"javascript:void(0)\" (click)=\"onEditInDepth($event)\"\n      class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center cqa-cursor-pointer\">\n      <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n      Edit in depth (open detailed right panel)\n    </a>\n  </div>\n</div>\n","import { ElementRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { TestDataModalComponent } from './test-data-modal.component';\nimport { TestDataModalRef } from './test-data-modal-ref';\nimport {\n  TEST_DATA_MODAL_DATA,\n  TEST_DATA_MODAL_EDIT_IN_DEPTH,\n  TestDataModalData,\n} from './test-data-modal-data';\nimport { TEST_DATA_MODAL_REF } from './test-data-modal-ref';\n\nexport type TestDataModalResult =\n  | string\n  | TestDataModalData\n  | undefined\n  | typeof TEST_DATA_MODAL_EDIT_IN_DEPTH;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TestDataModalService {\n  /** Currently open Test Data overlay ref; only one panel is allowed at a time. */\n  private currentRef: TestDataModalRef<TestDataModalResult> | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  /**\n   * Opens the Test Data modal positioned just below the given origin element.\n   * If a panel is already open, returns the existing ref and does not open a duplicate.\n   * @param origin Element (e.g. test data trigger) to position below\n   * @param data Initial value, optional help URL, and optional active tab\n   * @returns Ref with afterClosed() and close(); afterClosed emits the value on Apply, undefined on Cancel, or EDIT_IN_DEPTH symbol when user clicks \"Edit in depth\"\n   */\n  open(\n    origin: ElementRef<HTMLElement>,\n    data: TestDataModalData\n  ): TestDataModalRef<TestDataModalResult> {\n    if (this.currentRef) {\n      return this.currentRef;\n    }\n    const originEl = origin.nativeElement;\n    const gap = 8;\n    const modalWidth = 500;\n    const margin = 8;\n\n    originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n\n    const positionStrategy = this.overlay.position().global();\n\n    const overlayRef = this.overlay.create(\n      new OverlayConfig({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.reposition(),\n        positionStrategy,\n        panelClass: ['cqa-test-data-modal-panel', 'cqa-ui-root'],\n        width: 'min(560px, 90vw)',\n      })\n    );\n\n    const updatePosition = (): void => {\n      const rect = originEl.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      let top = rect.bottom + gap;\n      let left = rect.left;\n      if (left + modalWidth > viewportWidth - margin) {\n        left = viewportWidth - modalWidth - margin;\n      }\n      if (left < margin) {\n        left = margin;\n      }\n      if (top < margin) {\n        top = margin;\n      }\n      positionStrategy.top(`${top}px`).left(`${left}px`);\n      overlayRef.updatePosition();\n    };\n\n    const modalRef = new TestDataModalRef<TestDataModalResult>(overlayRef);\n\n    const childInjector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: TEST_DATA_MODAL_REF, useValue: modalRef },\n        { provide: TEST_DATA_MODAL_DATA, useValue: data },\n      ],\n    });\n\n    updatePosition();\n\n    const portal = new ComponentPortal(TestDataModalComponent, undefined, childInjector);\n    overlayRef.attach(portal);\n\n    requestAnimationFrame(() => updatePosition());\n\n    const scrollListener = (): void => updatePosition();\n    window.addEventListener('scroll', scrollListener, true);\n    window.addEventListener('resize', scrollListener);\n    this.currentRef = modalRef;\n    modalRef.afterClosed().subscribe(() => {\n      this.currentRef = null;\n      window.removeEventListener('scroll', scrollListener, true);\n      window.removeEventListener('resize', scrollListener);\n    });\n\n    overlayRef.backdropClick().subscribe(() => modalRef.close(undefined));\n    overlayRef\n      .keydownEvents()\n      .pipe(\n        filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc')\n      )\n      .subscribe(() => modalRef.close(undefined));\n\n    return modalRef;\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  OnInit,\n  HostListener,\n  ElementRef,\n  ViewChild,\n  ChangeDetectorRef,\n  NgZone,\n} from '@angular/core';\nimport { NormalStepConfig, TestCaseEventType, EventTypeConfig, StepParameter, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport {\n  CustomEditStepResult,\n  CustomEditStepService,\n} from '../custom-edit-step/custom-edit-step.service';\nimport { CUSTOM_EDIT_STEP_EDIT_IN_DEPTH } from '../custom-edit-step/custom-edit-step-data';\nimport { ElementPopupResult, ElementPopupService } from '../element-popup/element-popup.service';\nimport {\n  TestDataModalResult,\n  TestDataModalService,\n} from '../test-data-modal/test-data-modal.service';\nimport {\n  TEST_DATA_MODAL_EDIT_IN_DEPTH,\n  TestDataModalData,\n} from '../test-data-modal/test-data-modal-data';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-normal-step',\n  templateUrl: './normal-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseNormalStepComponent implements OnInit {\n  @ViewChild('dropdownContainer', { static: false }) dropdownContainer?: ElementRef;\n  @ViewChild('descriptionTrigger', { static: false }) descriptionTrigger?: ElementRef<HTMLElement>;\n  @ViewChild('testDataTrigger', { static: false }) testDataTrigger?: ElementRef<HTMLElement>;\n  @ViewChild('editTrigger', { static: false }) editTrigger?: ElementRef<HTMLElement>;\n  @ViewChild('elementTrigger', { static: false }) elementTrigger?: ElementRef<HTMLElement>;\n  @ViewChild('clickElementTrigger', { static: false }) clickElementTrigger?: ElementRef<HTMLElement>;\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n  @Input() config!: NormalStepConfig;\n  @Input() stepNumber!: number | string;\n  /** Array index from parent renderer - use for editInDepth (stepNumber \"10.3\" parses wrong) */\n  @Input() index?: number;\n  @Input() action!: string;\n  @Input() eventType!: TestCaseEventType;\n  @Input() parameters: StepParameter[] = [];\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isReorder: boolean = false;\n  /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */\n  @Input() isParentSkipped: boolean = false;\n  @Input() editable: boolean = true;\n  @Input() stepIndex?: number;\n  @Input() isDuplicating: boolean = false;\n  /** Visual indentation level for nested structures (passed down from renderer). */\n  @Input() nestingLevel: number = 0;\n\n  @Output() eventTypeChange = new EventEmitter<TestCaseEventType>();\n  @Output() parameterChange = new EventEmitter<{ parameter: StepParameter; value: string }>();\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() clickAction = new EventEmitter<MouseEvent>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  eventTypeDropdownOpen: boolean = false;\n  /** Stored test data modal state for reopening with same selections. */\n  private testDataModalState: TestDataModalData | null = null;\n\n  constructor(\n    private readonly customEditStep: CustomEditStepService,\n    private readonly elementPopup: ElementPopupService,\n    private readonly testDataModal: TestDataModalService,\n    private readonly cdr: ChangeDetectorRef,\n    private readonly ngZone: NgZone,\n    private readonly sanitizer: DomSanitizer\n  ) {}\n\n  /** Base left padding for step rows (matches px-4 = 16px) plus 24px per nesting level (matches pl-10 = 40px at level 1). */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  /** Unique colors per event type; badge uses consistent size (w-8 h-8 rounded-lg). */\n  eventTypeConfigs: EventTypeConfig[] = [\n    { type: 'navigate', label: 'Navigate', icon: 'paper_plane', color: '#4338CA', backgroundColor: '#E0E7FF' },\n    { type: 'custom', label: 'Custom', icon: 'settings', color: '#475569', backgroundColor: '#F1F5F9' },\n    { type: 'ai-agent', label: 'AI Agent', icon: 'star', color: '#7C3AED', backgroundColor: '#EDE9FE' },\n    { type: 'type', label: 'Type', icon: 'T', color: '#A21CAF', backgroundColor: '#FAE8FF' },\n    { type: 'click', label: 'Click', icon: 'cursor', color: '#0284C7', backgroundColor: '#E0F2FE' },\n    { type: 'doubleClick', label: 'Double Click', icon: 'cursor-double', color: '#0891B2', backgroundColor: '#CFFAFE' },\n    { type: 'pressEnter', label: 'Press Enter', icon: 'enter', color: '#0D9488', backgroundColor: '#CCFBF1' },\n    { type: 'enter', label: 'Enter', icon: 'T', color: '#059669', backgroundColor: '#D1FAE5' },\n    { type: 'verify', label: 'Verify', icon: 'check', color: '#16A34A', backgroundColor: '#DCFCE7' },\n    { type: 'wait', label: 'Wait', icon: 'clock', color: '#6B7280', backgroundColor: '#F3F4F6' }\n  ];\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.action = this.config.action || '';\n      this.stepNumber = this.config.stepNumber;\n      this.eventType = this.config.eventType;\n      this.parameters = this.config.parameters || [];\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  getCurrentEventTypeConfig(): EventTypeConfig {\n    return this.eventTypeConfigs.find(etc => etc.type === this.eventType) || this.eventTypeConfigs[0];\n  }\n\n  /**\n   * Convert escaped newline sequences to real newlines for AI Agent text rendering.\n   * Handles both JSON-escaped \"\\\\n\" and existing CR/LF variants.\n   */\n  private normalizeAiAgentNewlinesForDisplay(html: string): string {\n    if (!html) return html;\n    return html\n      .replace(/\\\\r\\\\n/g, '\\n')\n      .replace(/\\\\n/g, '\\n')\n      .replace(/\\r\\n/g, '\\n')\n      .replace(/\\r/g, '\\n');\n  }\n\n  getActionDescription(): string {\n    // const config = this.getCurrentEventTypeConfig();\n    // switch (this.eventType) {\n    //   case 'navigate':\n    //     return 'Navigate to';\n    //   case 'type':\n    //     return 'Type';\n    //   case 'click':\n    //     return 'Click on';\n    //   case 'doubleClick':\n    //     return 'Double click on';\n    //   case 'pressEnter':\n    //     return 'Press Enter on';\n    //   case 'enter':\n    //     return 'Enter';\n    //   case 'wait':\n    //     return 'Wait';\n    //   case 'verify':\n    //     return 'Verify';\n    //   case 'custom':\n    //     return 'Custom step';\n    //   case 'ai-agent':\n    //     return 'AI Agent';\n    //   default:\n    //     return '';\n    // }\n    if (this.action) {\n      let html = this.action;\n      if (this.eventType === 'ai-agent') {\n        html = this.normalizeAiAgentNewlinesForDisplay(html);\n        // Strip leading \"AI Agent\" prefix — rendered as a separate label span (see template).\n        html = html.replace(/^\\s*(?:<[^>]+>\\s*)*AI\\s+Agent\\s*:?\\s*/i, '');\n      }\n      return html ? (this.sanitizer.bypassSecurityTrustHtml(html) as string) : '';\n    }\n    return '';\n  }\n\n  getActionSuffix(): string {\n    switch (this.eventType) {\n      case 'type':\n        return 'into';\n      case 'wait':\n        if (this.parameters.length > 0 && this.parameters[0].name === 'duration') {\n          return 'seconds';\n        }\n        return 'for element';\n      default:\n        return '';\n    }\n  }\n\n  /** Current description for custom event type (first parameter value). */\n  getCustomDescription(): string {\n    if (this.eventType !== 'custom' || !this.parameters?.length) {\n      return '';\n    }\n    const first = this.parameters[0];\n    return first?.value ?? first?.displayValue ?? '';\n  }\n\n  /**\n   * Get the URL parameter for navigate steps (old UI style - show only URL)\n   * Returns the first parameter with name 'url' or 'URL', or the first parameter if none found\n   */\n  getNavigateUrlParameter(): StepParameter | null {\n    if (this.eventType !== 'navigate' || !this.parameters || this.parameters.length === 0) {\n      return null;\n    }\n    // Try to find parameter with name 'url' or 'URL'\n    const urlParam = this.parameters.find(p => p.name?.toLowerCase() === 'url');\n    // If not found, return the first parameter (likely the URL)\n    return urlParam || this.parameters[0] || null;\n  }\n\n  /** Current URL value for navigate step (for Test Data modal). */\n  getNavigateUrlValue(): string {\n    const param = this.getNavigateUrlParameter();\n    return param?.value ?? param?.displayValue ?? '';\n  }\n\n  /** Opens Test Data modal below the given trigger; used when eventType === 'navigate'. */\n  openTestDataModal(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void {\n    if (this.isInsideStepGroup || this.eventType !== 'navigate') {\n      return;\n    }\n    const el =\n      origin instanceof MouseEvent\n        ? (origin.currentTarget as HTMLElement)\n        : origin instanceof ElementRef\n          ? origin.nativeElement\n          : (origin as HTMLElement);\n    const originRef = new ElementRef(el);\n    \n    // Use stored state if available, otherwise use current URL value\n    const modalData: TestDataModalData = this.testDataModalState ?? {\n      value: this.getNavigateUrlValue(),\n    };\n    \n    const ref = this.testDataModal.open(originRef, modalData);\n    ref.afterClosed().subscribe((result: TestDataModalResult) => {\n      this.ngZone.run(() => {\n        if (result === TEST_DATA_MODAL_EDIT_IN_DEPTH) {\n          this.moreOptions.emit();\n          this.cdr.markForCheck();\n          return;\n        }\n        \n        // Handle TestDataModalData object (full state)\n        if (result !== undefined && typeof result === 'object' && 'value' in result) {\n          const modalDataResult = result as TestDataModalData;\n          this.testDataModalState = modalDataResult; // Store state for reopening\n          const urlParam = this.getNavigateUrlParameter();\n          if (urlParam && modalDataResult.value) {\n            urlParam.value = modalDataResult.value;\n            urlParam.displayValue = modalDataResult.value;\n            this.parameterChange.emit({ parameter: urlParam, value: modalDataResult.value });\n            this.cdr.markForCheck();\n            this.cdr.detectChanges();\n          }\n          return;\n        }\n        \n        // Handle string result (backward compatibility)\n        if (typeof result === 'string') {\n          const urlParam = this.getNavigateUrlParameter();\n          if (urlParam) {\n            urlParam.value = result;\n            urlParam.displayValue = result;\n            this.parameterChange.emit({ parameter: urlParam, value: result });\n            // Clear stored state when using string result\n            this.testDataModalState = null;\n            this.cdr.markForCheck();\n            this.cdr.detectChanges();\n          }\n        }\n      });\n    });\n  }\n\n  /** Opens Step Description modal below the given trigger; used when eventType === 'custom'. */\n  openStepDescriptionModal(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void {\n    if (this.eventType !== 'custom') {\n      return;\n    }\n    const el =\n      origin instanceof MouseEvent\n        ? (origin.currentTarget as HTMLElement)\n        : origin instanceof ElementRef\n          ? origin.nativeElement\n          : (origin as HTMLElement);\n    const originRef = new ElementRef(el);\n    const ref = this.customEditStep.open(originRef, {\n      description: this.getCustomDescription(),\n    });\n    ref.afterClosed().subscribe((result: CustomEditStepResult) => {\n      this.ngZone.run(() => {\n        if (result === CUSTOM_EDIT_STEP_EDIT_IN_DEPTH) {\n          this.moreOptions.emit();\n          this.cdr.markForCheck();\n          return;\n        }\n        if (typeof result === 'string' && this.parameters?.length) {\n          const first = this.parameters[0];\n          if (first) {\n            first.value = result;\n            first.displayValue = result;\n            this.parameterChange.emit({ parameter: first, value: result });\n            this.cdr.markForCheck();\n            this.cdr.detectChanges();\n          }\n        }\n      });\n    });\n  }\n\n  openElementPopup(origin: ElementRef<HTMLElement> | HTMLElement | MouseEvent): void {\n    if (this.isInsideStepGroup) return;\n    const elementParam = this.parameters.find(p => p.name === 'element');\n    const elementData = this.config.elementData;\n\n    let el: HTMLElement;\n    if (this.elementTrigger?.nativeElement) {\n      el = this.elementTrigger.nativeElement;\n    } else if (this.clickElementTrigger?.nativeElement) {\n      el = this.clickElementTrigger.nativeElement;\n    } else {\n      el =\n        origin instanceof MouseEvent\n          ? (origin.currentTarget as HTMLElement)\n          : origin instanceof ElementRef\n            ? origin.nativeElement\n            : (origin as HTMLElement);\n    }\n    const originRef = new ElementRef(el);\n    const elementTitle = elementData?.label || elementParam?.value || 'Element';\n    const elementSelector = elementData?.selector || elementParam?.value || '';\n    const elementLabels = elementData?.labels || (elementData?.label ? [elementData.label] : []);\n    const allLabels = elementLabels.length > 0 ? elementLabels : ['css', 'xpath', 'id'];\n    \n    const elementPopupRef = this.elementPopup.open(originRef, {\n      element: {\n        title: elementTitle,\n        selector: elementSelector,\n        labels: elementLabels\n      },\n      labels: allLabels,\n      description: this.config.description || 'Element details',\n      helpUrl: '',\n      elements: elementData ? [\n        {\n          title: elementTitle,\n          selector: elementSelector,\n          labels: elementLabels\n        }\n      ] : []\n    });\n    elementPopupRef.afterClosed().subscribe((result: ElementPopupResult) => {\n      if (result !== undefined && typeof result === 'string') {\n        this.parameterChange.emit({ parameter: { name: 'element', value: result, displayValue: result }, value: result });\n      }\n    });\n  }\n\n  onEventTypeSelect(eventType: TestCaseEventType): void {\n    this.eventType = eventType;\n    this.eventTypeDropdownOpen = false;\n    this.eventTypeChange.emit(eventType);\n  }\n\n  onParameterChange(parameter: StepParameter, value: string): void {\n    parameter.value = value;\n    this.parameterChange.emit({ parameter, value });\n  }\n\n  onEdit(): void {\n    if (this.eventType === 'custom' && this.descriptionTrigger?.nativeElement) {\n      this.openStepDescriptionModal(new ElementRef(this.descriptionTrigger.nativeElement));\n      return;\n    }\n    if (this.eventType === 'navigate' && this.testDataTrigger?.nativeElement) {\n      this.openTestDataModal(new ElementRef(this.testDataTrigger.nativeElement));\n      return;\n    }\n    // Emit editInDepth - prefer renderer index (correct); stepNumber \"10.3\" parses to 10 - wrong\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : (this.stepIndex ?? 0)));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n\n  onLink(): void {\n    this.link.emit();\n  }\n\n  onDuplicate(): void {\n    if (this.isDuplicating) return;\n    this.duplicate.emit();\n  }\n\n  onDelete(): void {\n    this.delete.emit();\n  }\n\n  onSkipToggle(): void {\n    if (this.isParentSkipped) {\n      return;\n    }\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n\n  onMoreOptions(): void {\n    this.moreOptions.emit();\n  }\n\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      const title = this.getStepTitle();\n      this.viewDetails.emit({\n        event,\n        title,\n        description: this.config.description,\n      });\n    }\n  }\n\n  private getStepTitle(): string {\n    switch (this.eventType) {\n      case 'ai-agent':\n        return 'Agent Instructions';\n      case 'custom':\n        return 'Step Description';\n      case 'navigate':\n        return 'Navigate Step';\n      case 'type':\n        return 'Type Step';\n      case 'click':\n        return 'Click Step';\n      case 'doubleClick':\n        return 'Double Click Step';\n      case 'pressEnter':\n        return 'Press Enter Step';\n      case 'enter':\n        return 'Enter Step';\n      case 'verify':\n        return 'Verify Step';\n      case 'wait':\n        return 'Wait Step';\n      default:\n        return 'Step Details';\n    }\n  }\n\n  onSelectionChange(checked: boolean): void {\n    this.selected = checked;\n    this.selectionChange.emit(checked);\n  }\n\n  toggleEventTypeDropdown(): void {\n    this.eventTypeDropdownOpen = !this.eventTypeDropdownOpen;\n  }\n\n  closeEventTypeDropdown(): void {\n    this.eventTypeDropdownOpen = false;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    if (this.dropdownContainer && !this.dropdownContainer.nativeElement.contains(event.target)) {\n      this.closeEventTypeDropdown();\n    }\n  }\n\n  clickOnAction(event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.isInsideStepGroup) return;\n    this.clickAction.emit(event);\n  }\n}\n","<div\n  [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + ((config?.shouldSkip || isParentSkipped) ? ' cqa-step-skipped' : '')\"\n  [style.opacity]=\"(config?.shouldSkip || isParentSkipped) ? '0.6' : null\"\n  [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n  [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\"\n  style=\"border-bottom: 1px solid #E5E7EB;\">\n\n  <div *ngIf=\"!isInsideStepGroup\" 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, editable, and not inside step group - hide for steps inside step groups) -->\n    <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n\n  <!-- Step Number -->\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">\n    {{ stepNumber }}\n  </span>\n\n  <!-- Event Type Selector (Pill Button) #### (click)=\"toggleEventTypeDropdown(); $event.stopPropagation()\" -->\n  <div class=\"cqa-relative\" #dropdownContainer>\n    <button type=\"button\" \n      [attr.title]=\"getCurrentEventTypeConfig().label\"\n      [style.background-color]=\"getCurrentEventTypeConfig().backgroundColor\"\n      [style.color]=\"getCurrentEventTypeConfig().color\"\n      class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-cursor-pointer\">\n      <!-- Icon -->\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'paper_plane'\">\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 6.41663L12.8333 1.16663L7.58333 12.25L6.41667 7.58329L1.75 6.41663Z\" stroke=\"currentColor\"\n            stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'star'\">\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.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\"\n            stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          <path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'T'\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n          <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor'\">\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 1.75L5.87417 11.6492L7.33833 7.33833L11.6492 5.87417L1.75 1.75Z\" stroke=\"currentColor\"\n            stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          <path d=\"M7.58398 7.58325L11.084 11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'cursor-double'\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 20px; height: 20px;\">\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n          <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n          <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'clock'\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M6.99935 12.8334C10.221 12.8334 12.8327 10.2217 12.8327 7.00008C12.8327 3.77842 10.221 1.16675 6.99935 1.16675C3.77769 1.16675 1.16602 3.77842 1.16602 7.00008C1.16602 10.2217 3.77769 12.8334 6.99935 12.8334Z\"\n            stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          <path d=\"M7 3.5V7L9.33333 8.16667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'settings'\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </span>\n      <span *ngIf=\"getCurrentEventTypeConfig().icon === 'check'\">\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </span>\n\n      <!-- Label (show only when no icon; all types have icon now – tooltip on button) -->\n      <span *ngIf=\"!getCurrentEventTypeConfig().icon\" class=\"cqa-text-[#432DD7] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{\n        getCurrentEventTypeConfig().label }}</span>\n    </button>\n\n    <!-- Dropdown Menu -->\n    <div *ngIf=\"eventTypeDropdownOpen\" (click)=\"$event.stopPropagation()\"\n      class=\"cqa-absolute cqa-top-full cqa-left-0 cqa-mt-1 cqa-bg-white cqa-rounded-lg cqa-shadow-lg cqa-border cqa-border-gray-200 cqa-z-50 cqa-min-w-[150px] cqa-py-1\">\n      <button *ngFor=\"let etc of eventTypeConfigs\" type=\"button\" (click)=\"onEventTypeSelect(etc.type)\"\n        [class.cqa-bg-primary-50]=\"eventType === etc.type\"\n        class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-text-left cqa-flex cqa-items-center cqa-gap-2 hover:cqa-bg-gray-50 cqa-transition-colors\">\n        <span *ngIf=\"etc.icon === 'paper_plane'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M1 5.5L11 1M11 1L7.5 11L6 6.5L1 5.5M11 1L1 5.5\" stroke=\"currentColor\" stroke-width=\"1.5\"\n              stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'star'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M6 1L7.5 4.5L11 5L7.5 5.5L6 9L4.5 5.5L1 5L4.5 4.5L6 1Z\" fill=\"currentColor\" />\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'T'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M2.33398 4.08325V2.33325H11.6673V4.08325\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M5.25 11.6667H8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M7 2.33325V11.6666\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'cursor'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M2 2L9 1L10 8L7 7L5 9L4 7L2 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'cursor-double'\">\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.16667 2.3916L7 3.49993\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.97487 4.66662L1.2832 4.19995\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M3.50091 7L2.39258 8.16667\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.19922 1.28345L4.66589 2.97511\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.27114 5.65255C5.24852 5.59926 5.24234 5.54043 5.25338 5.48361C5.26443 5.42678 5.2922 5.37455 5.33313 5.33362C5.37407 5.29269 5.4263 5.26492 5.48312 5.25387C5.53994 5.24283 5.59877 5.24901 5.65206 5.27163L12.0687 7.89663C12.1258 7.92006 12.174 7.961 12.2064 8.01357C12.2388 8.06613 12.2536 8.12761 12.2488 8.18915C12.244 8.25069 12.2198 8.30912 12.1797 8.35603C12.1396 8.40295 12.0856 8.43592 12.0256 8.45021L9.48864 9.05746C9.38391 9.08248 9.28815 9.13599 9.21196 9.21208C9.13578 9.28816 9.08213 9.38385 9.05698 9.48855L8.45031 12.026C8.43617 12.0863 8.40323 12.1405 8.35626 12.1808C8.30928 12.2211 8.25071 12.2454 8.189 12.2502C8.1273 12.255 8.06567 12.2401 8.01302 12.2075C7.96037 12.175 7.91944 12.1266 7.89614 12.0692L5.27114 5.65255Z\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>  \n        </span>\n        <span *ngIf=\"etc.icon === 'enter'\" class=\"cqa-enter-key-icon cqa-inline-flex cqa-flex-shrink-0\" style=\"width: 16px; height: 16px;\">\n          <svg width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-w-full cqa-h-full\">\n            <path fill=\"#6B7280\" transform=\"translate(14,5)\" d=\"M0 0 C4.29 0 8.58 0 13 0 C13 7.26 13 14.52 13 22 C5.74 22 -1.52 22 -9 22 C-9 16.72 -9 11.44 -9 6 C-6.03 6 -3.06 6 0 6 C0 4.02 0 2.04 0 0 Z M2 2 C2 3.98 2 5.96 2 8 C-0.97 8 -3.94 8 -7 8 C-7 11.96 -7 15.92 -7 20 C-1.06 20 4.88 20 11 20 C11 14.06 11 8.12 11 2 C8.03 2 5.06 2 2 2 Z\"/>\n            <path fill=\"#6B7280\" transform=\"translate(19,13)\" d=\"M0 0 C0.66 0 1.32 0 2 0 C2 2.31 2 4.62 2 7 C0.02 7 -1.96 7 -4 7 C-4.33 8.32 -4.66 9.64 -5 11 C-6.65 9.68 -8.3 8.36 -10 7 C-8.63016497 3.83884224 -8.0109362 3.0072908 -5 1 C-4.67 2.32 -4.34 3.64 -4 5 C-2.68 5 -1.36 5 0 5 C0 3.35 0 1.7 0 0 Z\"/>\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'clock'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n            <path d=\"M6 3V6L8 7\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'settings'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M7 4.66667C5.71133 4.66667 4.66667 5.71133 4.66667 7C4.66667 8.28867 5.71133 9.33333 7 9.33333C8.28867 9.33333 9.33333 8.28867 9.33333 7C9.33333 5.71133 8.28867 4.66667 7 4.66667Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M11.0833 7.58333C11.1417 7.29167 11.1417 6.70833 11.0833 6.41667L12.25 5.83333C12.4167 5.70833 12.4833 5.48333 12.4167 5.25L11.6667 3.41667C11.6 3.18333 11.3917 3.04167 11.1417 3.04167L9.91667 3.5C9.56667 3.20833 9.19167 2.95833 8.75 2.79167L8.4 1.45833C8.34167 1.225 8.14167 1.16667 7.93333 1.16667H6.06667C5.85833 1.16667 5.65833 1.225 5.6 1.45833L5.25 2.79167C4.80833 2.95833 4.43333 3.20833 4.08333 3.5L2.85833 3.04167C2.60833 3.04167 2.4 3.18333 2.33333 3.41667L1.58333 5.25C1.51667 5.48333 1.58333 5.70833 1.75 5.83333L2.91667 6.41667C2.85833 6.70833 2.85833 7.29167 2.91667 7.58333L1.75 8.16667C1.58333 8.29167 1.51667 8.51667 1.58333 8.75L2.33333 10.5833C2.4 10.8167 2.60833 10.9583 2.85833 10.9583L4.08333 10.5C4.43333 10.7917 4.80833 11.0417 5.25 11.2083L5.6 12.5417C5.65833 12.775 5.85833 12.8333 6.06667 12.8333H7.93333C8.14167 12.8333 8.34167 12.775 8.4 12.5417L8.75 11.2083C9.19167 11.0417 9.56667 10.7917 9.91667 10.5L11.1417 10.9583C11.3917 10.9583 11.6 10.8167 11.6667 10.5833L12.4167 8.75C12.4833 8.51667 12.4167 8.29167 12.25 8.16667L11.0833 7.58333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </span>\n        <span *ngIf=\"etc.icon === 'check'\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M11.6667 3.5L5.25 10.5L2.33333 7.58333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </span>\n        <span>{{ etc.label }}</span>\n      </button>\n    </div>\n  </div>\n\n  <!-- AI Agent: label + single cohesive box for action line + task content (ai_task) -->\n  <span\n    *ngIf=\"eventType === 'ai-agent' && getActionDescription()\"\n    style=\"white-space: nowrap; flex-shrink: 0; min-width: fit-content;\"\n    class=\"cqa-min-w-fit cqa-flex-shrink-0 cqa-whitespace-nowrap cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">AI Agent</span>\n  <div\n    *ngIf=\"eventType === 'ai-agent' && getActionDescription()\"\n    class=\"cqa-ai-agent-unified-box cqa-min-w-0 cqa-flex-1\">\n    <span\n      class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] !cqa-inline-flex cqa-items-center cqa-action-format cqa-ai-agent-unified-inner\"\n      style=\"white-space: pre-wrap;\"\n      [innerHTML]=\"getActionDescription()\"\n      (click)=\"clickOnAction($event)\">\n    </span>\n  </div>\n  <!-- Other step types: action HTML as before -->\n  <span\n    class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\"\n    *ngIf=\"eventType !== 'ai-agent' && getActionDescription()\"\n    [innerHTML]=\"getActionDescription()\"\n    (click)=\"clickOnAction($event)\">\n  </span>\n  <!-- <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" *ngIf=\"getActionDescription()\">\n    {{ getActionDescription() }}\n  </span> -->\n\n  <!-- Parameters -->\n  <div class=\"cqa-flex cqa-items-center cqa-gap-3\" *ngIf=\"false\">\n    <!-- Navigate: URL as clickable trigger for Test Data modal -->\n    <span *ngIf=\"eventType === 'navigate' && getNavigateUrlParameter()\" #testDataTrigger\n      (click)=\"openTestDataModal($event)\"\n      class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\">\n      {{ getNavigateUrlParameter()?.value || getNavigateUrlParameter()?.displayValue }}\n    </span>\n    \n    <!-- Other event types: loop through parameters (navigate excluded) -->\n    <ng-container *ngFor=\"let param of parameters; let i = index\">\n      <!-- Skip navigate parameters in the loop (already shown above) -->\n      <ng-container *ngIf=\"eventType !== 'navigate'\">\n\n      <!-- Type: First param (text value like {{username}}) -->\n      <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        {{ param.value }}\n      </span>\n\n      <!-- Type: \"into\" text -->\n      <span *ngIf=\"eventType === 'type' && i === 0\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        into\n      </span>\n\n      <!-- Type: Second param (selector) -->\n      <span *ngIf=\"eventType === 'type' && i === 1\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n\n      <!-- Click: Selector input/display -->\n      <span *ngIf=\"eventType === 'click' && param.name === 'element'\"\n       #clickElementTrigger\n       (click)=\"openElementPopup($event)\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n\n      <!-- Click: Suffix text (like \"if Present\") -->\n      <span *ngIf=\"eventType === 'click' && param.name === 'suffix'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        {{ param.value }}\n      </span>\n\n      <!-- Double Click: Selector input/display -->\n      <span *ngIf=\"eventType === 'doubleClick' && i === 0\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n\n      <!-- Press Enter: Selector input/display with HTML support -->\n      <span *ngIf=\"eventType === 'pressEnter' && i === 0\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\"\n        [innerHTML]=\"param.displayValue || param.value\">\n      </span>\n\n      <!-- Enter: Value display with quotes (like click action) -->\n      <span *ngIf=\"eventType === 'enter' && param.name === 'value'\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n\n      <!-- Enter: \"in the\" text -->\n      <span *ngIf=\"eventType === 'enter' && param.name === 'value'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        in the\n      </span>\n\n      <!-- Enter: Label display with quotes (like click action) -->\n      <span *ngIf=\"eventType === 'enter' && param.name === 'label'\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n\n      <!-- Enter: \"field\" text -->\n      <span *ngIf=\"eventType === 'enter' && param.name === 'label'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        field\n      </span>\n\n      <!-- Wait: Duration input -->\n      <input *ngIf=\"eventType === 'wait' && param.name === 'duration'\" type=\"number\" [value]=\"param.value\"\n        (input)=\"onParameterChange(param, $any($event.target).value)\" placeholder=\"2\"\n        class=\"cqa-w-16 cqa-px-2 cqa-py-1.5 cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#9E9EE3] cqa-bg-[#D1C4E9] cqa-text-[#3F43EE] cqa-text-sm cqa-font-medium cqa-outline-none focus:cqa-ring-2 focus:cqa-ring-[#3F43EE] focus:cqa-ring-opacity-50\" />\n      <span *ngIf=\"eventType === 'wait' && param.name === 'duration'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        seconds\n      </span>\n\n      <!-- Wait: Element selector -->\n      <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        for element\n      </span>\n      <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" \n       #elementTrigger\n       (click)=\"openElementPopup($event)\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-cursor-pointer cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n      <span *ngIf=\"eventType === 'wait' && param.name === 'element'\" class=\"cqa-text-gray-900 cqa-text-sm\">\n        to be visible\n      </span>\n\n      <!-- Custom: Description (clickable to open Step Description modal; pass $event so modal opens below this trigger) -->\n      <span *ngIf=\"eventType === 'custom'\" #descriptionTrigger\n        (click)=\"openStepDescriptionModal($event)\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC] cqa-cursor-pointer hover:cqa-opacity-90\"\n        [innerHTML]=\"param.displayValue || param.value\">\n      </span>\n\n      <!-- AI Agent: Instructions -->\n      <span *ngIf=\"eventType === 'ai-agent'\"\n        class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#8A8CF4] cqa-rounded cqa-bg-[#D8D9FC]\">\n        {{ param.displayValue || param.value }}\n      </span>\n      </ng-container>\n    </ng-container>\n  </div>\n\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when step is inside step-group) - placed first -->\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n      <button type=\"button\" #editTrigger (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" 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\" stroke-linejoin=\"round\"/>\n          <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </button>\n      <!-- Skip / Unskip (after Edit icon) -->\n      <button\n        type=\"button\"\n        (click)=\"onSkipToggle(); $event.stopPropagation()\"\n        [disabled]=\"isParentSkipped\"\n        [attr.title]=\"isParentSkipped ? 'Cannot change skip while parent step is skipped' : (config?.shouldSkip ? 'Unskip step' : 'Skip step')\"\n        [style.color]=\"config?.shouldSkip ? '#1447E6' : null\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\"\n      >\n        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" 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\" 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=\"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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path 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\" 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\" 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 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path 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\" 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\" 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\" stroke-linejoin=\"round\"/>\n          <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path 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\" 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\" stroke-linejoin=\"round\"/>\n          <path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </button>\n    </div>\n\n    <!-- View Details Link (show only if description is not empty) -->\n    <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\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 * Models and interfaces for test case details step components\n */\n\nexport type TestCaseEventType = 'navigate' | 'custom' | 'ai-agent' | 'type' | 'click' | 'doubleClick' | 'pressEnter' | 'enter' | 'verify' | 'wait';\n\n\nexport enum StepTypes {\n  NORMAL = 'NORMAL',\n  API = 'API',\n  DATABASE = 'DATABASE',\n  AI_AGENT = 'AI_AGENT',\n  AI_VERIFY = 'AI_VERIFY',\n  UPLOAD = 'UPLOAD',\n  SCREENSHOT = 'SCREENSHOT',\n  VERIFY_URL = 'VERIFY_URL',\n  RESTORE_SESSION = 'RESTORE_SESSION',\n  CUSTOM_CODE = 'CUSTOM_CODE',\n  FOR_LOOP = 'FOR_LOOP',\n  WHILE_LOOP = 'WHILE_LOOP',\n  BREAK_LOOP = 'BREAK_LOOP',\n  CONTINUE_LOOP = 'CONTINUE_LOOP',\n  CONDITION_IF = 'CONDITION_IF',\n  STEP_GROUP= 'STEP_GROUP',\n  SCROLL = 'SCROLL'\n}\n\n// export type StepType = StepTypes.NORMAL | StepTypes.API | StepTypes.DATABASE | StepTypes.AI_AGENT | StepTypes.UPLOAD | StepTypes.SCREENSHOT | StepTypes.CUSTOM_CODE | StepTypes.FOR_LOOP | StepTypes.WHILE_LOOP | StepTypes.BREAK_LOOP | StepTypes.CONTINUE_LOOP;\n\nexport interface EventTypeConfig {\n  type: TestCaseEventType;\n  label: string;\n  icon?: string;\n  color: string;\n  backgroundColor: string;\n}\n\nexport interface StepParameter {\n  name: string;\n  value: string;\n  displayValue?: string; // For display purposes (e.g., with quotes)\n}\n\n/** Base interface containing common properties for all step configurations */\nexport interface BaseStepConfig {\n  id: string;\n  action?: string;\n  stepNumber: number | string;\n  stepType: StepTypes;\n  description?: string;\n  selected?: boolean;\n  disabled?: boolean;\n  expanded?: boolean;\n  event?: Record<string, unknown>;\n  /** Creation timestamp from API (milliseconds since epoch) */\n  createdDate?: number;\n  /** When true, this step is marked to be skipped during execution */\n  shouldSkip?: boolean;\n}\n\nexport interface NormalStepConfig extends BaseStepConfig {\n  stepType: StepTypes.NORMAL;\n  eventType: TestCaseEventType;\n  parameters: StepParameter[];\n  elementData?: {\n    label?: string;\n    selector?: string;\n    pwLocator?: string[];\n    labels?: string[];\n  };\n}\n\n/** API Step Configuration */\nexport interface ApiStepConfig extends BaseStepConfig {\n  stepType: StepTypes.API;\n  method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';\n  endpoint: string;\n  baseUrl?: string;\n  requestBody?: string;\n  headers?: Record<string, string>;\n  headersCount?: number;\n  hasBody?: boolean;\n  saveTo?: string;\n  expectedStatus?: number;\n}\n\n/** Database Step Configuration */\nexport interface DatabaseStepConfig extends BaseStepConfig {\n  stepType: StepTypes.DATABASE;\n  query: string;\n  databaseType?: 'mysql' | 'postgresql' | 'mongodb' | 'mssql' | 'oracle';\n  connectionName?: string;\n  saveTo?: string;\n}\n\n/** AI Agent Step Configuration */\nexport interface AiAgentStepConfig extends BaseStepConfig {\n  stepType: StepTypes.AI_AGENT;\n  instructions: string;\n}\n\n/** AI Verify Step Configuration */\nexport interface AiVerifyStepConfig extends BaseStepConfig {\n  stepType: StepTypes.AI_VERIFY;\n  instructions: string;\n}\n\n/** Upload Step Configuration */\nexport interface UploadStepConfig extends BaseStepConfig {\n  stepType: StepTypes.UPLOAD;\n  selector: string;\n  fileName: string;\n  source: 'Data Library' | 'Local' | 'URL';\n  sourcePath: string;\n}\n\n/** Screenshot Step Configuration */\nexport interface ScreenshotStepConfig extends BaseStepConfig {\n  stepType: StepTypes.SCREENSHOT;\n  name?: string;\n  fullPage?: boolean;\n  selector?: string;\n}\n\n/** Scroll Step Configuration */\nexport interface ScrollStepConfig extends BaseStepConfig {\n  stepType: StepTypes.SCROLL;\n  selector: string;\n  direction?: 'top' | 'bottom' | 'up' | 'down' | 'left' | 'right';\n  description?: string;\n}\n\n/** Verify URL Step Configuration */\nexport interface VerifyUrlStepConfig extends BaseStepConfig {\n  stepType: StepTypes.VERIFY_URL;\n  action?: string; // e.g., \"Verify that the URL of current page is\"\n  url?: string; // The URL to verify\n}\n\n/** Restore Session Step Configuration */\nexport interface RestoreSessionStepConfig extends BaseStepConfig {\n  stepType: StepTypes.RESTORE_SESSION;\n  action?: string; // Action text/HTML for the restore session step\n}\n\n/** Custom Code Step Configuration */\nexport interface CustomCodeStepConfig extends BaseStepConfig {\n  stepType: StepTypes.CUSTOM_CODE;\n  language: 'javascript' | 'python' | 'typescript';\n  code: string;\n}\n\nexport interface LoopStepConfig extends BaseStepConfig {\n  loopType: 'for' | 'while';\n  stepType: StepTypes.FOR_LOOP | StepTypes.WHILE_LOOP;\n  condition?: string; // For while loop: \"While element \\\".notification-badge\\\" exists (max 5 iterations)\"\n  maxIterations?: number; // For while loop\n  testDataProfile?: string; // For for loop\n  startStep?: number;\n  endStep?: number;\n  /** FOR loop: API values for display (Start/End labels and Test Data profile id) */\n  forLoopStartIndex?: number;\n  forLoopEndIndex?: number;\n  forLoopTestDataId?: number;\n  /** FOR loop: optional HTML string for display (e.g. with test_data badges). When set, used instead of building from values. */\n  forLoopDisplayHtml?: string;\n  nestedSteps: TestCaseStepConfig[];\n  childId?: string;\n}\n\nexport interface ConditionBranch {\n  id?: number; // Branch step id (IF/ELSE IF/ELSE row) for API parentId when adding steps\n  type: 'if' | 'else' | 'else-if';\n  stepType: StepTypes.CONDITION_IF;\n  label: string; // e.g., \"IF TRUE\", \"ELSE\"\n  action?: string; // Action text/HTML for the branch (e.g., \"Check the text 'Kishan' is present on the current page\")\n  /** Event key-value pairs for display badges (e.g. selector, element) - same as config.event */\n  event?: Record<string, unknown>;\n  /** Creation timestamp from API (milliseconds since epoch) - for branch header date display */\n  createdDate?: number;\n  nestedSteps: TestCaseStepConfig[];\n  /**\n   * The next branch in the condition chain (ELSE IF or ELSE whose parentId points to this branch,\n   * rather than to the root IF step). Used for chained conditions where ELSE IF / ELSE steps\n   * are nested under a previous ELSE IF instead of directly under the root IF.\n   */\n  nextBranch?: ConditionBranch;\n}\n\nexport interface ConditionStepConfig extends BaseStepConfig {\n  condition: string; // e.g., \"If element `.success-message` is visible\"\n  branches: ConditionBranch[];\n  nestedSteps: TestCaseStepConfig[];\n}\n\nexport interface StepGroupConfig extends BaseStepConfig {\n  stepGroupId: number;\n  groupName: string; // e.g., \"Checkout Flow\"\n  reusable?: boolean; // Whether the group is reusable\n  stepType: StepTypes.STEP_GROUP\n  nestedSteps: TestCaseStepConfig[];\n  loading?: boolean; // Loading state when fetching nested steps\n}\n\n// Union type for all test case step configurations (supports recursive nesting)\nexport type TestCaseStepConfig =\n  | NormalStepConfig\n  | LoopStepConfig\n  | ConditionStepConfig\n  | StepGroupConfig\n  | ApiStepConfig\n  | DatabaseStepConfig\n  | AiAgentStepConfig\n  | AiVerifyStepConfig\n  | UploadStepConfig\n  | ScreenshotStepConfig\n  | ScrollStepConfig\n  | VerifyUrlStepConfig\n  | RestoreSessionStepConfig\n  | CustomCodeStepConfig;\n\n/** Type guards for dispatching step type (e.g. in test-case-details-renderer) */\nexport function isNormalStepConfig(step: TestCaseStepConfig): step is NormalStepConfig {\n  return step != null && 'eventType' in step && 'parameters' in step;\n}\n\nexport function isLoopStepConfig(step: TestCaseStepConfig): step is LoopStepConfig {\n  return step != null && 'loopType' in step;\n}\n\nexport function isConditionStepConfig(step: TestCaseStepConfig): step is ConditionStepConfig {\n  return step != null && 'condition' in step && 'branches' in step;\n}\n\nexport function isStepGroupConfig(step: TestCaseStepConfig): step is StepGroupConfig {\n  return step != null && 'groupName' in step;\n}\n\nexport function isApiStepConfig(step: TestCaseStepConfig): step is ApiStepConfig {\n  return step != null && 'stepType' in step && (step as ApiStepConfig).stepType === StepTypes.API;\n}\n\nexport function isDatabaseStepConfig(step: TestCaseStepConfig): step is DatabaseStepConfig {\n  return step != null && 'stepType' in step && (step as DatabaseStepConfig).stepType === StepTypes.DATABASE;\n}\n\nexport function isAiAgentStepConfig(step: TestCaseStepConfig): step is AiAgentStepConfig {\n  return step != null && 'stepType' in step && (step as AiAgentStepConfig).stepType === StepTypes.AI_AGENT;\n}\n\nexport function isAiVerifyStepConfig(step: TestCaseStepConfig): step is AiVerifyStepConfig {\n  return step != null && 'stepType' in step && (step as AiVerifyStepConfig).stepType === StepTypes.AI_VERIFY;\n}\n\nexport function isUploadStepConfig(step: TestCaseStepConfig): step is UploadStepConfig {\n  return step != null && 'stepType' in step && (step as UploadStepConfig).stepType === StepTypes.UPLOAD;\n}\n\nexport function isScreenshotStepConfig(step: TestCaseStepConfig): step is ScreenshotStepConfig {\n  return step != null && 'stepType' in step && (step as ScreenshotStepConfig).stepType === StepTypes.SCREENSHOT;\n}\n\nexport function isScrollStepConfig(step: TestCaseStepConfig): step is ScrollStepConfig {\n  return step != null && 'stepType' in step && (step as ScrollStepConfig).stepType === StepTypes.SCROLL;\n}\n\nexport function isVerifyUrlStepConfig(step: TestCaseStepConfig): step is VerifyUrlStepConfig {\n  return step != null && 'stepType' in step && (step as VerifyUrlStepConfig).stepType === StepTypes.VERIFY_URL;\n}\n\nexport function isRestoreSessionStepConfig(step: TestCaseStepConfig): step is RestoreSessionStepConfig {\n  return step != null && 'stepType' in step && (step as RestoreSessionStepConfig).stepType === StepTypes.RESTORE_SESSION;\n}\n\nexport function isCustomCodeStepConfig(step: TestCaseStepConfig): step is CustomCodeStepConfig {\n  return step != null && 'stepType' in step && (step as CustomCodeStepConfig).stepType === StepTypes.CUSTOM_CODE;\n}\n","import { InjectionToken, Type } from '@angular/core';\n\n/** Map of step type key to component type. Used by test-case-details-renderer to avoid circular deps. */\nexport interface TestCaseStepComponentMap {\n  stepGroup: Type<unknown>;\n  conditionStep: Type<unknown>;\n  conditionDebugStep: Type<unknown>;\n  loopStep: Type<unknown>;\n  normalStep: Type<unknown>;\n  apiStep: Type<unknown>;\n  databaseStep: Type<unknown>;\n  aiAgentStep: Type<unknown>;\n  aiVerifyStep: Type<unknown>;\n  uploadStep: Type<unknown>;\n  screenshotStep: Type<unknown>;\n  scrollStep: Type<unknown>;\n  verifyUrlStep: Type<unknown>;\n  restoreSessionStep: Type<unknown>;\n  customCodeStep: Type<unknown>;\n}\n\nexport const TEST_CASE_STEP_COMPONENT_MAP = new InjectionToken<TestCaseStepComponentMap>(\n  'TEST_CASE_STEP_COMPONENT_MAP'\n);\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ViewChild,\n  ViewContainerRef,\n  OnChanges,\n  SimpleChange,\n  SimpleChanges,\n  Inject,\n  AfterViewInit,\n  DoCheck,\n  OnDestroy,\n  ChangeDetectorRef,\n  ComponentRef,\n} from '@angular/core';\nimport { TEST_CASE_STEP_COMPONENT_MAP, TestCaseStepComponentMap } from '../test-case-step-components.token';\nimport {\n  TestCaseStepConfig,\n  isStepGroupConfig,\n  isConditionStepConfig,\n  isLoopStepConfig,\n  isNormalStepConfig,\n  isApiStepConfig,\n  isDatabaseStepConfig,\n  isAiAgentStepConfig,\n  isAiVerifyStepConfig,\n  isUploadStepConfig,\n  isScreenshotStepConfig,\n  isScrollStepConfig,\n  isVerifyUrlStepConfig,\n  isRestoreSessionStepConfig,\n  isCustomCodeStepConfig,\n  ConditionBranch,\n  LoopStepConfig,\n} from '../test-case-step.models';\n\n@Component({\n  selector: 'cqa-test-case-details-renderer',\n  templateUrl: './test-case-details-renderer.component.html',\n  host: { class: 'cqa-ui-root' },\n})\nexport class TestCaseDetailsRendererComponent implements OnChanges, AfterViewInit, DoCheck, OnDestroy {\n  @ViewChild('stepHost', { read: ViewContainerRef }) stepHost!: ViewContainerRef;\n\n  @Input() step!: TestCaseStepConfig;\n  @Input() index!: number;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  /** True when this step is nested (at any depth) inside a FOR loop specifically. */\n  @Input() isInsideForLoop: boolean = false;\n  /** When true, step is rendered inside a step-group; row actions (Edit/Duplicate/Delete) are hidden. */\n  @Input() isInsideStepGroup: boolean = false;\n  /** Visual indentation level for nested structures (loops/step-groups/conditions). */\n  @Input() nestingLevel: number = 0;\n  /** When rendering a step inside a condition branch, the branch context (for addStepForBranch / deleteStepWithBranch). */\n  @Input() branch?: ConditionBranch;\n  /** When true, enables drag-and-drop reordering and shows drag handle icon instead of checkbox */\n  @Input() isReorder: boolean = false;\n  /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */\n  @Input() isParentSkipped: boolean = false;\n  /** Current selection state; when changed (e.g. from Select all), the created step component is updated so the checkbox reflects it */\n  @Input() selected?: boolean;\n  /** Global duplicate-in-progress state used to disable duplicate actions and show loading feedback. */\n  @Input() isDuplicating: boolean = false;\n  /** Show \"Add Step Between\" button above the step */\n  @Input() addStepBetweenAbove: boolean = true;\n  /** Show \"Add Step Between\" button below the step */\n  @Input() addStepBetweenBelow: boolean = true;\n  /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */\n  @Input() addStepBetween: boolean = false;\n  /** When false, hides edit/duplicate/delete actions and add-step-between buttons on steps (e.g. for trashed test cases). */\n  @Input() editable: boolean = true;\n  /** Current test case id (portal). Used so reusable step groups can hide the \"edit in source test case\" hint when already viewing that step group's test case. */\n  @Input() currentTestCaseId?: number | string;\n  /** Test case's default test data profile id (testCase.testDataId). Forwarded to nested loop steps. */\n  @Input() testCaseTestDataId?: number | string;\n\n  @Output() nestedStepChange = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() addStep = new EventEmitter<void>();\n  @Output() deleteStep = new EventEmitter<number>();\n  @Output() toggleExpanded = new EventEmitter<boolean | {config: TestCaseStepConfig, expanded: boolean}>();\n  @Output() groupNameChange = new EventEmitter<string>();\n  @Output() descriptionChange = new EventEmitter<string>();\n  @Output() reusableChange = new EventEmitter<boolean>();\n  @Output() openExternal = new EventEmitter<{step: TestCaseStepConfig}>();\n  @Output() edit = new EventEmitter<{step: TestCaseStepConfig, index: number}>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<{ step: TestCaseStepConfig } | void>();\n  @Output() viewDetails = new EventEmitter<import('../step-details-modal/step-details-modal-data').ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() conditionChange = new EventEmitter<string>();\n  @Output() branchStepChange = new EventEmitter<{ branch: ConditionBranch; step: TestCaseStepConfig; stepIndex: number }>();\n  @Output() addStepForBranch = new EventEmitter<{ branch: ConditionBranch }>();\n  /** Emitted when empty loop step plus is clicked; same behaviour as add-step-between (parentId = loop step id). */\n  @Output() addStepForLoop = new EventEmitter<{ loopStepConfig: LoopStepConfig }>();\n  @Output() deleteStepWithBranch = new EventEmitter<{ branch: ConditionBranch; stepIndex: number }>();\n  @Output() addBranch = new EventEmitter<void>();\n  /** Emitted when user clicks \"Add Else\" in a condition step; parent should call POST test_steps with conditionType CONDITION_ELSE */\n  @Output() addElse = new EventEmitter<{ conditionStepConfig: TestCaseStepConfig }>();\n  @Output() deleteBranch = new EventEmitter<ConditionBranch>();\n  @Output() testDataProfileChange = new EventEmitter<string>();\n  @Output() startStepChange = new EventEmitter<number>();\n  @Output() endStepChange = new EventEmitter<number>();\n  @Output() maxIterationsChange = new EventEmitter<number>();\n  @Output() eventTypeChange = new EventEmitter<any>();\n  @Output() parameterChange = new EventEmitter<any>();\n  @Output() clickAction = new EventEmitter<{ event: MouseEvent; step: TestCaseStepConfig }>();\n  /** Emitted when a step is dropped in a nested dropzone (step-group, loop, condition). Payload: { event, targetList }. */\n  @Output() dndDropInZone = new EventEmitter<{ event: any; targetList: TestCaseStepConfig[] }>();\n  /** Data profile options for loop steps */\n  @Input() dataProfileOptions: any[] = [];\n  /** Indicates if more data profiles are available for loading */\n  @Input() hasMoreDataProfiles: boolean = false;\n  /** Loading state for data profiles */\n  @Input() isLoadingDataProfiles: boolean = false;\n  /** Natural text actions options for while loop condition */\n  @Input() naturalTextActionsOptions: any[] = [];\n  /** Function to process template variables for condition steps */\n  @Input() setConditionTemplateVariables: (template: any) => any[] = () => [];\n  /** Emit when more data profiles need to be loaded */\n  @Output() loadMoreDataProfiles = new EventEmitter<string>();\n  /** Emit when data profile search query changes */\n  @Output() searchDataProfiles = new EventEmitter<string>();\n  /** Emit when a step is updated (e.g., Apply button clicked in loop-step edit mode) */\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n  @Output() addStepBetweenClick = new EventEmitter<{step: TestCaseStepConfig, index: number, position: 'ABOVE' | 'BELOW'}>();\n  /** Emit when user clicks \"Edit In depth\" in condition-step (or other steps that support it) */\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number; templateOverride?: any; isCreateMode?: boolean; createModeBranchData?: any }>();\n\n  private componentRef: ComponentRef<any> | null = null;\n  private lastSyncedStepNumber: number | string | undefined;\n\n  constructor(\n    @Inject(TEST_CASE_STEP_COMPONENT_MAP) private componentMap: TestCaseStepComponentMap,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngAfterViewInit(): void {\n    this.renderStep();\n  }\n\n  ngDoCheck(): void {\n    // Step numbers are frequently recomputed in-place on existing step objects.\n    // For dynamically created child components, that doesn't trigger ngOnChanges,\n    // so keep the rendered stepNumber input in sync manually.\n    if (!this.componentRef?.instance || !this.step) return;\n    const latestStepNumber = (this.step as any).stepNumber;\n    if (this.lastSyncedStepNumber !== latestStepNumber) {\n      (this.componentRef.instance as any).stepNumber = latestStepNumber;\n      this.lastSyncedStepNumber = latestStepNumber;\n      this.cdr.detectChanges();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const structuralChange = changes['step'] || changes['index'] || changes['isNested'] || changes['isInsideLoop'] || changes['isInsideForLoop'] ||\n        changes['isInsideStepGroup'] || changes['isReorder'] || changes['editable'] || changes['isParentSkipped'];\n    const optionsOnlyChange = (changes['dataProfileOptions'] || changes['hasMoreDataProfiles'] || changes['isLoadingDataProfiles'] ||\n        changes['naturalTextActionsOptions'] || changes['setConditionTemplateVariables']) && !structuralChange;\n\n    if (structuralChange) {\n      this.renderStep();\n    } else if (optionsOnlyChange && this.componentRef?.instance != null && this.step != null) {\n      // Update only profile/options inputs so we don't destroy the step (e.g. opening data profile dropdown\n      // loads options and would otherwise recreate the component and collapse inline edit)\n      this.updateOptionsInputs(this.componentRef.instance);\n      this.cdr.detectChanges();\n    } else if (changes['selected'] && this.componentRef?.instance != null) {\n      (this.componentRef.instance as any).selected = this.selected;\n      this.cdr.detectChanges();\n    } else if (changes['isDuplicating'] && this.componentRef?.instance != null) {\n      (this.componentRef.instance as any).isDuplicating = this.isDuplicating;\n      this.cdr.detectChanges();\n    } else if (changes['currentTestCaseId'] && this.componentRef?.instance != null &&\n        (isStepGroupConfig(this.step!) || isLoopStepConfig(this.step!) || isConditionStepConfig(this.step!))) {\n      (this.componentRef.instance as any).currentTestCaseId = this.currentTestCaseId;\n      this.cdr.detectChanges();\n    }\n  }\n\n  /** Update only data profile / options inputs on existing instance (avoids full recreate and losing isEditing). */\n  private updateOptionsInputs(instance: any): void {\n    if (isLoopStepConfig(this.step!) || isConditionStepConfig(this.step!) || isStepGroupConfig(this.step!)) {\n      const prevOptions = (instance as any).dataProfileOptions;\n      const prevHasMore = (instance as any).hasMoreDataProfiles;\n      const prevLoading = (instance as any).isLoadingDataProfiles;\n      (instance as any).dataProfileOptions = this.dataProfileOptions;\n      (instance as any).hasMoreDataProfiles = this.hasMoreDataProfiles;\n      (instance as any).isLoadingDataProfiles = this.isLoadingDataProfiles;\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      (instance as any).addStepBetweenAbove = this.addStepBetweenAbove;\n      (instance as any).addStepBetweenBelow = this.addStepBetweenBelow;\n      (instance as any).addStepBetween = this.addStepBetween;\n      // Trigger ngOnChanges so the step updates its Test Data profile select config (search/load more options).\n      // Dynamically created components do not get @Input() change detection from the template.\n      if (typeof instance.ngOnChanges === 'function') {\n        const changes: SimpleChanges = {\n          dataProfileOptions: new SimpleChange(prevOptions, this.dataProfileOptions, false),\n          hasMoreDataProfiles: new SimpleChange(prevHasMore, this.hasMoreDataProfiles, false),\n          isLoadingDataProfiles: new SimpleChange(prevLoading, this.isLoadingDataProfiles, false),\n        };\n        instance.ngOnChanges(changes);\n      }\n    }\n    if (isLoopStepConfig(this.step!)) {\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      (instance as any).setConditionTemplateVariables = this.setConditionTemplateVariables;\n    }\n    if (isConditionStepConfig(this.step!)) {\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      (instance as any).setConditionTemplateVariables = this.setConditionTemplateVariables;\n    }\n  }\n\n  private getComponentType(step: TestCaseStepConfig): any {\n    if (isStepGroupConfig(step)) return this.componentMap.stepGroup;\n    if (isConditionStepConfig(step)) return this.componentMap.conditionStep;\n    if (isLoopStepConfig(step)) return this.componentMap.loopStep;\n    if (isApiStepConfig(step)) return this.componentMap.apiStep;\n    if (isDatabaseStepConfig(step)) return this.componentMap.databaseStep;\n    if (isAiAgentStepConfig(step)) return this.componentMap.aiAgentStep;\n    if (isAiVerifyStepConfig(step)) return this.componentMap.aiVerifyStep;\n    if (isUploadStepConfig(step)) return this.componentMap.uploadStep;\n    if (isScreenshotStepConfig(step)) return this.componentMap.screenshotStep;\n    if (isScrollStepConfig(step)) return this.componentMap.scrollStep;\n    if (isVerifyUrlStepConfig(step)) return this.componentMap.verifyUrlStep;\n    if (isRestoreSessionStepConfig(step)) return this.componentMap.restoreSessionStep;\n    if (isCustomCodeStepConfig(step)) return this.componentMap.customCodeStep;\n    if (isNormalStepConfig(step)) return this.componentMap.normalStep;\n    return null;\n  }\n\n  private renderStep(): void {\n    if (!this.stepHost || !this.step) return;\n\n    const componentType = this.getComponentType(this.step);\n    if (!componentType) return;\n\n    this.stepHost.clear();\n    this.componentRef = this.stepHost.createComponent(componentType);\n    const instance = this.componentRef.instance;\n\n    instance.config = this.step;\n    instance.stepNumber = (this.step as any).stepNumber;\n    this.lastSyncedStepNumber = (this.step as any).stepNumber;\n    (instance as any).index = this.index; // Correct edit-in-depth for all step types (stepNumber \"10.3\" parses wrong)\n    instance.isNested = this.isNested;\n    instance.isInsideLoop = this.isInsideLoop;\n    (instance as any).isInsideForLoop = this.isInsideForLoop;\n    instance.isInsideStepGroup = this.isInsideStepGroup;\n    instance.isReorder = this.isReorder;\n    (instance as any).nestingLevel = this.nestingLevel;\n    (instance as any).isDuplicating = this.isDuplicating;\n    (instance as any).editable = this.editable !== false;\n    (instance as any).isParentSkipped = this.isParentSkipped;\n    Object.keys(this.step).forEach((key) => {\n      if (key !== 'stepType' && key !== 'nestedSteps' && key !== 'branches') {\n        (instance as any)[key] = (this.step as any)[key];\n      }\n    });\n    if ((this.step as any).nestedSteps) (instance as any).nestedSteps = (this.step as any).nestedSteps;\n    if ((this.step as any).branches) (instance as any).branches = (this.step as any).branches;\n\n    // Pass data profile inputs to step instances that can contain nested loop steps\n    if (isLoopStepConfig(this.step) || isConditionStepConfig(this.step) || isStepGroupConfig(this.step)) {\n      (instance as any).currentTestCaseId = this.currentTestCaseId;\n      (instance as any).testCaseTestDataId = this.testCaseTestDataId;\n      (instance as any).dataProfileOptions = this.dataProfileOptions;\n      (instance as any).hasMoreDataProfiles = this.hasMoreDataProfiles;\n      (instance as any).isLoadingDataProfiles = this.isLoadingDataProfiles;\n      // Also pass natural text actions options (for nested loop steps with while loop and condition steps)\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      // Pass addStepBetween inputs to nested step components\n      (instance as any).addStepBetweenAbove = this.addStepBetweenAbove;\n      (instance as any).addStepBetweenBelow = this.addStepBetweenBelow;\n      // Keep backward compatibility with deprecated addStepBetween\n      (instance as any).addStepBetween = this.addStepBetween;\n      (instance as any).editable = this.editable !== false;\n    }\n    \n    // Pass natural text actions options and template variables function to loop steps (for while loop condition, same as condition-step)\n    if (isLoopStepConfig(this.step)) {\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      (instance as any).setConditionTemplateVariables = this.setConditionTemplateVariables;\n    }\n    \n    // Pass natural text actions options and template variables function to condition steps\n    if (isConditionStepConfig(this.step)) {\n      (instance as any).naturalTextActionsOptions = this.naturalTextActionsOptions;\n      (instance as any).setConditionTemplateVariables = this.setConditionTemplateVariables;\n    }\n\n    this.wireOutputs(instance);\n    this.cdr.detectChanges();\n  }\n\n  private wireOutputs(instance: any): void {\n    // Store subscriptions on the instance to prevent duplicates\n    if (!(instance as any)._cqaSubscriptions) {\n      (instance as any)._cqaSubscriptions = new Map<string, any>();\n    }\n    const subscriptions = (instance as any)._cqaSubscriptions;\n    \n    const wire = (key: string, emitter: EventEmitter<any>) => {\n      if (instance[key] && typeof instance[key].subscribe === 'function') {\n        // Unsubscribe from previous subscription if exists\n        const existingSub = subscriptions.get(key);\n        if (existingSub) {\n          existingSub.unsubscribe();\n        }\n        \n        // Create new subscription\n        const subscription = instance[key].subscribe((v: any) => {\n          emitter.emit(v);\n        });\n        subscriptions.set(key, subscription);\n      }\n    };\n    wire('nestedStepChange', this.nestedStepChange as any);\n    wire('addStep', {\n      emit: (v: any) => {\n        if (v != null && typeof v === 'object' && 'branch' in v) this.addStepForBranch.emit(v);\n        else if (v != null && typeof v === 'object' && 'loopStepConfig' in v) this.addStepForLoop.emit(v);\n        else this.addStep.emit(v);\n      },\n    } as any);\n    wire('deleteStep', {\n      emit: (v: any) => {\n        if (v != null && typeof v === 'object' && 'branch' in v && 'stepIndex' in v) this.deleteStepWithBranch.emit(v);\n        else this.deleteStep.emit(v);\n      },\n    } as any);\n    wire('toggleExpanded', {\n      emit: (v: any) => {\n        // Handle both boolean and object formats\n        // If it's an object with config and expanded, emit it as-is\n        // If it's just a boolean, emit it as-is\n        this.toggleExpanded.emit(v);\n      },\n    } as any);\n    wire('groupNameChange', this.groupNameChange as any);\n    wire('descriptionChange', this.descriptionChange as any);\n    wire('reusableChange', this.reusableChange as any);\n    wire('openExternal', this.openExternal as any);\n    wire('edit', {\n      emit: (v: any) => {\n        // If child component emits void or nothing, use current step and index\n        // If child component already emits an object, merge it with step and index\n        if (v != null && typeof v === 'object' && 'step' in v && 'index' in v) {\n          // Already has step and index, emit as-is\n          this.edit.emit(v);\n        } else {\n          // Emit with current step and index\n          this.edit.emit({ step: this.step, index: this.index });\n        }\n      },\n    } as any);\n    wire('link', this.link as any);\n    wire('duplicate', this.duplicate as any);\n    // Wire delete event - intercept and emit with step data (forward payload when child emits { step } for nested deletes)\n    if (instance.delete && typeof instance.delete.subscribe === 'function') {\n      const existingSub = subscriptions.get('delete');\n      if (existingSub) {\n        existingSub.unsubscribe();\n      }\n      const deleteSub = instance.delete.subscribe((v: any) => {\n        if (v != null && typeof v === 'object' && v.step) {\n          // A nested step is propagating its own deletion (e.g. normal step inside a loop inside a branch).\n          // Forward it so it bubbles up to step-list for correct single-step deletion, do NOT treat as parent step deletion.\n          this.delete.emit(v);\n        } else if (this.branch != null && this.index != null) {\n          // The current step (directly inside a condition branch) is deleting itself.\n          this.deleteStepWithBranch.emit({ branch: this.branch, stepIndex: this.index });\n        } else {\n          this.delete.emit({ step: this.step });\n        }\n      });\n      subscriptions.set('delete', deleteSub);\n    }\n    wire('viewDetails', this.viewDetails as any);\n    wire('selectionChange', this.selectionChange as any);\n    wire('conditionChange', this.conditionChange as any);\n    wire('branchStepChange', this.branchStepChange as any);\n    wire('addStepForBranch', this.addStepForBranch as any);\n    wire('deleteStepWithBranch', this.deleteStepWithBranch as any);\n    wire('addBranch', this.addBranch as any);\n    wire('addElse', this.addElse as any);\n    wire('deleteBranch', this.deleteBranch as any);\n    wire('addStepForLoop', this.addStepForLoop as any);\n    wire('testDataProfileChange', this.testDataProfileChange as any);\n    wire('startStepChange', this.startStepChange as any);\n    wire('endStepChange', this.endStepChange as any);\n    wire('maxIterationsChange', this.maxIterationsChange as any);\n    wire('eventTypeChange', this.eventTypeChange as any);\n    wire('parameterChange', this.parameterChange as any);\n    // Wire clickAction - wrap MouseEvent with step data\n    if (instance.clickAction && typeof instance.clickAction.subscribe === 'function') {\n      const existingSub = subscriptions.get('clickAction');\n      if (existingSub) {\n        existingSub.unsubscribe();\n      }\n      const clickActionSub = instance.clickAction.subscribe((v: any) => {\n        // If child component emits an object with event and step, use it; otherwise wrap MouseEvent with current step\n        if (v != null && typeof v === 'object' && 'event' in v && 'step' in v) {\n          this.clickAction.emit(v);\n        } else {\n          // Assume v is a MouseEvent, wrap it with current step\n          this.clickAction.emit({ event: v as MouseEvent, step: this.step });\n        }\n      });\n      subscriptions.set('clickAction', clickActionSub);\n    }\n    wire('dndDropInZone', this.dndDropInZone as any);\n    wire('loadMoreDataProfiles', this.loadMoreDataProfiles as any);\n    wire('searchDataProfiles', this.searchDataProfiles as any);\n    wire('addStepBetweenClick', this.addStepBetweenClick as any);\n    // Wire editInDepth - check if it exists on instance\n    if (instance.editInDepth && typeof instance.editInDepth.subscribe === 'function') {\n      const existingSub = subscriptions.get('editInDepth');\n      if (existingSub) {\n        existingSub.unsubscribe();\n      }\n      const editInDepthSub = instance.editInDepth.subscribe((v: any) => {\n        // If child component emits an object with step, use it; otherwise use current step and index\n        if (v != null && typeof v === 'object' && 'step' in v) {\n          const payload: { step: TestCaseStepConfig; index: number; templateOverride?: any; isCreateMode?: boolean; createModeBranchData?: any } = {\n            step: v.step,\n            index: v.index ?? this.index,\n          };\n          if (v.templateOverride) {\n            payload.templateOverride = v.templateOverride;\n          }\n          if (v.isCreateMode) {\n            payload.isCreateMode = true;\n          }\n          if (v.createModeBranchData != null) {\n            payload.createModeBranchData = v.createModeBranchData;\n          }\n          this.editInDepth.emit(payload);\n        } else {\n          this.editInDepth.emit({ step: this.step, index: this.index });\n        }\n      });\n      subscriptions.set('editInDepth', editInDepthSub);\n    }\n    // Wire stepUpdate - check if it exists on instance\n    if (instance.stepUpdate) {\n      console.log('Renderer: Found stepUpdate EventEmitter, wiring it');\n      wire('stepUpdate', this.stepUpdate as any);\n    } else {\n      console.warn('Renderer: stepUpdate EventEmitter not found on instance during wireOutputs', {\n        stepId: this.step?.id,\n        stepType: this.step?.stepType,\n        instanceKeys: Object.keys(instance)\n      });\n    }\n  }\n\n  ngOnDestroy(): void {\n    // Clean up subscriptions when component is destroyed\n    if (this.componentRef?.instance) {\n      const subscriptions = (this.componentRef.instance as any)._cqaSubscriptions;\n      if (subscriptions) {\n        subscriptions.forEach((sub: any) => {\n          if (sub && typeof sub.unsubscribe === 'function') {\n            sub.unsubscribe();\n          }\n        });\n        subscriptions.clear();\n      }\n    }\n  }\n}\n\n","<div class=\"cqa-relative cqa-step-renderer-hover-container\">\n    <button *ngIf=\"editable && !isReorder && (addStepBetweenAbove && addStepBetween)\"\n        class=\"cqa-absolute cqa-top-[calc(0 - 12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n        style=\"top: -12px;\" (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'ABOVE'})\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n            <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n    </button>\n    <div class=\"cqa-step-host-wrapper\">\n        <ng-container #stepHost></ng-container>\n    </div>\n    <button *ngIf=\"editable && !isReorder && (addStepBetweenBelow && addStepBetween)\"\n        class=\"cqa-absolute cqa-top-[calc(100%-12px)] cqa-left-[50%] cqa-translate-x-[-50%] cqa-p-0 cqa-z-[1] cqa-add-step-between-btn\"\n        (click)=\"addStepBetweenClick.emit({step: step, index: index, position: 'BELOW'})\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n            <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n    </button>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { LoopStepConfig, TestCaseStepConfig, NormalStepConfig, ConditionStepConfig, StepGroupConfig, ConditionBranch, StepTypes } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { DataProfileOption } from '../../step-builder/step-builder-loop/step-builder-loop.component';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\nimport { CqaAutocompleteOption } from '../../autocomplete/autocomplete.model';\n\nconst LOOP_STEP_EMPTY_STYLES = `\n  /* Empty loop: plus icon always visible when expanded and no steps */\n  .loop-step-empty {\n    opacity: 1;\n  }\n  .loop-step-empty-add {\n    padding: 0;\n    background: transparent;\n    border: 0;\n    cursor: pointer;\n    color: #3F43EE;\n    transition: opacity 0.15s ease;\n  }\n  .loop-step-empty-add:hover {\n    opacity: 0.9;\n  }\n`;\n\nconst LOOP_STEP_FOR_DISPLAY_STYLES = `\n  .for-loop-range-row {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5rem;\n    flex-wrap: wrap;\n  }\n  .for-loop-range-row .for-loop-range-part + .for-loop-range-part {\n    margin-left: 0.25rem;\n  }\n`;\n@Component({\n  selector: 'cqa-test-case-loop-step',\n  templateUrl: './loop-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [\n    STEP_ROW_ACTIONS_STYLES,\n    LOOP_STEP_EMPTY_STYLES,\n    LOOP_STEP_FOR_DISPLAY_STYLES,\n  ],\n})\nexport class TestCaseLoopStepComponent implements OnInit, OnChanges {\n  @Input() config!: LoopStepConfig;\n  @Input() id!: string;\n  @Input() loopType: 'for' | 'while' = 'for';\n  @Input() stepNumber!: number | string;\n  /** Array index from parent renderer - use this for editInDepth instead of stepNumber (stepNumber \"10.3\" parses to 10) */\n  @Input() index?: number;\n  @Input() condition?: string;\n  @Input() maxIterations?: number;\n  @Input() testDataProfile?: string;\n  @Input() startStep?: number;\n  @Input() endStep?: number;\n  @Input() nestedSteps: TestCaseStepConfig[] = [];\n  @Input() expanded: boolean = true;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  /** True when this step is nested (at any depth) inside another FOR loop. Used to keep\n   *  the test-data-profile dropdown enabled only for nested FOR loops; root-level FOR\n   *  loops auto-inherit the test case's default profile and are disabled. */\n  @Input() isInsideForLoop: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isReorder: boolean = false;\n  /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */\n  @Input() isParentSkipped: boolean = false;\n  @Input() selected: boolean = false;\n  @Input() isDuplicating: boolean = false;\n  /** Options for the data profile dropdown - accepts DataProfileOption objects */\n  @Input() dataProfileOptions: DataProfileOption[] = [];\n  /** Indicates if more data profiles are available for loading */\n  @Input() hasMoreDataProfiles: boolean = false;\n  /** Loading state for data profiles */\n  @Input() isLoadingDataProfiles: boolean = false;\n  /** Options for natural text actions (for while loop condition) */\n  @Input() naturalTextActionsOptions: SelectOption[] = [];\n  /** Passed to nested renderers (e.g. reusable step group hint). */\n  @Input() currentTestCaseId?: number | string;\n  /** The default test data profile ID configured on the test case (testCase.testDataId). When the\n   *  FOR loop is at root level (not nested inside another FOR loop), the dropdown will be auto-set\n   *  to this id and disabled. */\n  @Input() testCaseTestDataId?: number | string;\n  /** Function to process template variables for while condition (same as condition-step) */\n  @Input() setConditionTemplateVariables: (template: any) => any[] = () => [];\n  /** Show \"Add Step Between\" button above nested steps */\n  @Input() addStepBetweenAbove: boolean = false;\n  /** Show \"Add Step Between\" button below nested steps */\n  @Input() addStepBetweenBelow: boolean = false;\n  /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */\n  @Input() addStepBetween: boolean = false;\n  @Input() editable: boolean = true;\n  /** Visual indentation level for nested structures (passed down from renderer). */\n  @Input() nestingLevel: number = 0;\n\n  @Output() toggleExpanded = new EventEmitter<{config: LoopStepConfig, expanded: boolean}>();\n  @Output() testDataProfileChange = new EventEmitter<string>();\n  @Output() startStepChange = new EventEmitter<number>();\n  @Output() endStepChange = new EventEmitter<number>();\n  @Output() conditionChange = new EventEmitter<string>();\n  @Output() maxIterationsChange = new EventEmitter<number>();\n  @Output() nestedStepChange = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  /** Emits void when add is from nested content; emits { loopStepConfig } when empty-state add is clicked (same behaviour as add-step-between). */\n  @Output() addStep = new EventEmitter<void | { loopStepConfig: LoopStepConfig }>();\n  @Output() deleteStep = new EventEmitter<number>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number; templateOverride?: any }>();\n  @Output() edit = new EventEmitter<void>();\n  @Output() dndDropInZone = new EventEmitter<{ event: DndDropEvent; targetList: TestCaseStepConfig[] }>();\n  /** Emit when more data profiles need to be loaded */\n  @Output() loadMoreDataProfiles = new EventEmitter<string>();\n  /** Emit when data profile search query changes */\n  @Output() searchDataProfiles = new EventEmitter<string>();\n  /** Emit when this step (or nested steps) is updated. */\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n  /** Re-emit when a nested step (e.g. normal-step) emits clickAction (e.g. element/label click for popup) */\n  @Output() clickAction = new EventEmitter<{ event: MouseEvent; step: TestCaseStepConfig }>();\n  /** Re-emit addStepBetweenClick from nested renderers */\n  @Output() addStepBetweenClick = new EventEmitter<{step: TestCaseStepConfig, index: number, position: 'ABOVE' | 'BELOW'}>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() deleteBranch = new EventEmitter<ConditionBranch>();\n  /** Re-emit when nested condition step emits addStepForBranch (add step to empty IF/ELSE IF/ELSE branch). Required for condition inside loop. */\n  @Output() addStepForBranch = new EventEmitter<{ branch: ConditionBranch }>();\n  /** Re-emit when nested condition step emits deleteStepWithBranch. Required for condition inside loop. */\n  @Output() deleteStepWithBranch = new EventEmitter<{ branch: ConditionBranch; stepIndex: number }>();\n  /** Re-emit when nested step group emits openExternal (redirect to step group in new tab) */\n  @Output() openExternal = new EventEmitter<{ step: TestCaseStepConfig }>();\n\n  onDndDrop(event: DndDropEvent): void {\n    this.dndDropInZone.emit({ event, targetList: this.nestedSteps });\n  }\n\n  /** Emit clickAction when user clicks on loop display badges (element, test_data, etc.) so parent can open edit modals */\n  onLoopActionClick(event: MouseEvent): void {\n    if (this.isInsideStepGroup) return;\n    // FOR loop: profile / start / end values are read-only badges — do not bubble to step-list (which opens test-data modal)\n    if (this.loopType === 'for') {\n      const node = event.target as Node;\n      const el =\n        node.nodeType === Node.ELEMENT_NODE\n          ? (node as HTMLElement)\n          : (node.parentElement as HTMLElement | null);\n      if (el?.closest('.test_data, [data-key=\"test-data\"]')) {\n        event.preventDefault();\n        event.stopPropagation();\n        return;\n      }\n    }\n    this.clickAction.emit({ event, step: this.config });\n  }\n\n  /** Forward clickAction from nested steps only when not inside a step-group (Element/Test Data modals disabled there). */\n  onNestedClickAction(payload: { event: MouseEvent; step: TestCaseStepConfig }): void {\n    if (!this.isInsideStepGroup) {\n      this.clickAction.emit(payload);\n    }\n  }\n\n  /** Expose global constructors for template (Angular templates don't have String/Number) */\n  readonly stringFn = String;\n  readonly numberFn = Number;\n\n  /** When true, header shows inline edit form (dropdowns, inputs, Cancel/Apply) */\n  isEditing: boolean = false;\n\n  /** Form for edit mode; bound to cqa-dynamic-select (same pattern as default stories) */\n  editForm!: FormGroup;\n\n  /** Cached select configs (stable refs to avoid change-detection loops) */\n  forOptionTypeSelectConfig!: DynamicSelectFieldConfig;\n  testDataProfileSelectConfig!: DynamicSelectFieldConfig;\n  startStepSelectConfig!: DynamicSelectFieldConfig;\n  endStepSelectConfig!: DynamicSelectFieldConfig;\n  conditionSelectConfig!: DynamicSelectFieldConfig;\n  /** While loop: config for autocomplete options (WHILE_CONDITION only) */\n  whileConditionSelectConfig!: DynamicSelectFieldConfig;\n\n  /** Selected template for while condition (same pattern as condition-step) */\n  selectedTemplate: any = null;\n  /** Template variables for while condition */\n  templateVariables: any[] = [];\n  /** Form group for template variables */\n  templateVariablesForm!: FormGroup;\n\n  /** Default max for Loop Start / End when no profile selected (options 1..10) */\n  private static readonly DEFAULT_LOOP_OPTIONS_MAX = 10;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  /** Local copy of values while editing (for Cancel revert) */\n  private editSnapshot: {\n    testDataProfile?: string;\n    startStep?: number;\n    endStep?: number;\n    condition?: string;\n    maxIterations?: number;\n    selectedTemplate?: any;\n    templateVariables?: any[];\n    conditionTemplateFormValue?: any;\n  } = {};\n\n  constructor(\n    private fb: FormBuilder,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.id = this.config.id;\n      this.loopType = this.config.loopType;\n      this.stepNumber = this.config.stepNumber;\n      this.condition = this.config.condition;\n      this.maxIterations = this.config.maxIterations;\n      this.testDataProfile = this.getStoredTestDataProfileLabel();\n      this.startStep = this.config.startStep;\n      this.endStep = this.config.endStep;\n      this.nestedSteps = this.config.nestedSteps || [];\n      this.expanded = this.config.expanded !== undefined ? this.config.expanded : true;\n      this.selected = (this.config as any).selected || false;\n    }\n    this.buildEditForm();\n    this.buildSelectConfigs();\n  }\n\n  /** Base left padding for step rows (matches px-4 = 16px) plus 24px per nesting level (matches pl-10 = 40px at level 1). */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['config'] && this.config) {\n      this.selected = (this.config as any).selected || false;\n      this.testDataProfile = this.getStoredTestDataProfileLabel();\n      if (this.loopType === 'while') {\n        this.rebuildWhileConditionFromNaturalTextAction();\n      }\n      // FOR loop: when step config has forLoopTestDataId/forLoopStartIndex/forLoopEndIndex, sync form and refresh select configs so dropdowns show selected\n      if (this.loopType === 'for') {\n        this.updateForLoopSelectConfigsSelectedValues();\n        if (this.editForm) this.syncForLoopEditFormFromConfig();\n        this.cdr.detectChanges();\n      }\n    }\n    if (changes['dataProfileOptions'] || changes['hasMoreDataProfiles'] || changes['isLoadingDataProfiles'] ||\n        changes['isInsideForLoop'] || changes['testCaseTestDataId']) {\n      this.updateTestDataProfileSelectConfig();\n      // When data profiles load in edit mode, sync form value so dropdown shows selected (forLoopTestDataId or testDataProfile)\n      if (this.loopType === 'for' && this.editForm && this.dataProfileOptions?.length) {\n        const cfg = this.config as any;\n        if (cfg?.forLoopTestDataId != null || this.testDataProfile) this.syncForLoopEditFormFromConfig();\n        this.cdr.detectChanges();\n      }\n    }\n    if (changes['naturalTextActionsOptions']) {\n      this.updateConditionSelectConfig();\n      // When options load, populate condition + template from naturalTextActionId (same as condition-step)\n      if (this.loopType === 'while' && this.editForm && this.naturalTextActionsOptions?.length) {\n        this.rebuildWhileConditionFromNaturalTextAction();\n      }\n    }\n  }\n\n  /** Derive forOptionType for FOR loop from config so dropdown shows existing selection */\n  private getForOptionTypeFromConfig(): string | null {\n    if (this.loopType !== 'for') return null;\n    const cfg = this.config as any;\n    const hasTestDataId = cfg?.forLoopTestDataId != null || cfg?.dataMapJson?.forLoopTestDataId != null || cfg?.dataMapBean?.for_loop?.testDataId != null;\n    if (hasTestDataId || this.testDataProfile) return 'test-data';\n    const hasFixed = cfg?.forLoopStartIndex != null || cfg?.forLoopEndIndex != null\n      || cfg?.dataMapJson?.forLoopStartIndex != null || cfg?.dataMapJson?.forLoopEndIndex != null\n      || cfg?.dataMapBean?.for_loop?.startIndex != null || cfg?.dataMapBean?.for_loop?.endIndex != null;\n    if (this.startStep != null || this.endStep != null || hasFixed) return 'fixed';\n    return null;\n  }\n\n  /** Test Data Profile dropdown value: prefer forLoopTestDataId from config (or dataMapJson/dataMapBean). Use option.id when options loaded so type matches select. */\n  private getTestDataProfileFormValue(): string | number {\n    const currentFormValue = this.editForm?.get('testDataProfile')?.value;\n    if (currentFormValue !== null && currentFormValue !== undefined && currentFormValue !== '') {\n      return currentFormValue as string | number;\n    }\n    const cfg = this.config as any;\n    const idFromConfig = cfg?.forLoopTestDataId ?? cfg?.dataMapJson?.forLoopTestDataId ?? cfg?.dataMapBean?.for_loop?.testDataId;\n    // When we have options, resolve by id so form value matches option.id (strict equality in dynamic-select)\n    if (this.loopType === 'for' && this.dataProfileOptions?.length) {\n      if (idFromConfig != null) {\n        const match = this.dataProfileOptions.find(\n          o => o.id === idFromConfig || String(o.id) === String(idFromConfig)\n        );\n        if (match) return match.id;\n        return idFromConfig as string | number;\n      }\n      const value = this.testDataProfile ?? '';\n      if (value !== '') {\n        const match = this.dataProfileOptions.find(\n          o => o.name === value || String(o.id) === String(value)\n        );\n        if (match) return match.id;\n      }\n      return value as string | number;\n    }\n    if (idFromConfig != null) return idFromConfig as string | number;\n    return (this.testDataProfile ?? '') as string | number;\n  }\n\n  /** Loop Start dropdown value: prefer forLoopStartIndex from config (or dataMapJson/dataMapBean), else startStep */\n  private getLoopStartFormValue(): number | null {\n    const currentFormValue = this.editForm?.get('startStep')?.value;\n    if (currentFormValue !== null && currentFormValue !== undefined) return Number(currentFormValue);\n    const cfg = this.config as any;\n    const v = cfg?.forLoopStartIndex ?? cfg?.dataMapJson?.forLoopStartIndex ?? cfg?.dataMapBean?.for_loop?.startIndex;\n    if (v != null) return Number(v);\n    return this.startStep ?? null;\n  }\n\n  /** Loop End dropdown value: prefer forLoopEndIndex from config (or dataMapJson/dataMapBean), else endStep */\n  private getLoopEndFormValue(): number | null {\n    const currentFormValue = this.editForm?.get('endStep')?.value;\n    if (currentFormValue !== null && currentFormValue !== undefined) return Number(currentFormValue);\n    const cfg = this.config as any;\n    const v = cfg?.forLoopEndIndex ?? cfg?.dataMapJson?.forLoopEndIndex ?? cfg?.dataMapBean?.for_loop?.endIndex;\n    if (v != null) return Number(v);\n    return this.endStep ?? null;\n  }\n\n  private buildEditForm(): void {\n    // For while loop: if config has naturalTextActionId and options are already loaded, use them for initial condition + template\n    let conditionValue = this.condition ?? '';\n    if (this.loopType === 'while') {\n      const populated = this.populateWhileConditionFromNaturalTextActionId();\n      if (populated?.condition != null) {\n        conditionValue = populated.condition;\n      }\n    }\n    // For FOR loop: initial form values so dropdowns show existing selection (forOptionType, forLoopTestDataId/testDataProfile, forLoopStartIndex/forLoopEndIndex)\n    const forOptionType = this.getForOptionTypeFromConfig();\n    const testDataProfileValue = this.loopType === 'for' ? this.getTestDataProfileFormValue() : (this.testDataProfile ?? '');\n    const loopStartValue = this.loopType === 'for' ? this.getLoopStartFormValue() : (this.startStep ?? null);\n    const loopEndValue = this.loopType === 'for' ? this.getLoopEndFormValue() : (this.endStep ?? null);\n    this.editForm = this.fb.group({\n      forOptionType: [forOptionType as string | null],\n      testDataProfile: [testDataProfileValue],\n      startStep: [loopStartValue as number | null],\n      endStep: [loopEndValue as number | null],\n      condition: [conditionValue],\n      maxIterations: [this.maxIterations ?? 5],\n    });\n    if (!this.templateVariablesForm) {\n      this.templateVariablesForm = this.fb.group({});\n    }\n  }\n\n  /**\n   * Populate condition, selectedTemplate and template variables from config.naturalTextActionId when options are available.\n   * Returns { condition } if a match was found so buildEditForm can set initial form value.\n   */\n  private populateWhileConditionFromNaturalTextActionId(): { condition: string } | null {\n    const configWithId = this.config as any;\n    if (!configWithId?.naturalTextActionId || !this.naturalTextActionsOptions?.length) {\n      return null;\n    }\n    const matchingOption = (this.naturalTextActionsOptions as any[]).find(\n      (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n    );\n    if (!matchingOption) {\n      return null;\n    }\n    const naturalText = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n    if (!naturalText) {\n      return null;\n    }\n    this.condition = naturalText;\n    const fullTemplate = matchingOption.template || matchingOption;\n    this.selectedTemplate = fullTemplate;\n    if (fullTemplate?.variables) {\n      this.templateVariables = this.setConditionTemplateVariables(fullTemplate) || [];\n      this.buildTemplateVariablesForm();\n    } else {\n      this.templateVariables = [];\n    }\n    this.cdr.detectChanges();\n    return { condition: naturalText };\n  }\n\n  /** Rebuild condition + template state when naturalTextActionsOptions load or config changes (same as condition-step). */\n  private rebuildWhileConditionFromNaturalTextAction(): void {\n    if (!this.editForm || this.loopType !== 'while') {\n      return;\n    }\n    const configWithId = this.config as any;\n    if (!configWithId?.naturalTextActionId || !this.naturalTextActionsOptions?.length) {\n      return;\n    }\n    const matchingOption = (this.naturalTextActionsOptions as any[]).find(\n      (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n    );\n    if (!matchingOption) {\n      return;\n    }\n    const naturalText = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n    if (naturalText) {\n      const currentValue = this.editForm.get('condition')?.value ?? '';\n      if (!currentValue || currentValue !== naturalText) {\n        this.editForm.get('condition')?.setValue(naturalText);\n      }\n      this.condition = naturalText;\n    }\n    const fullTemplate = matchingOption.template || matchingOption;\n    this.selectedTemplate = fullTemplate;\n    if (fullTemplate?.variables) {\n      this.templateVariables = this.setConditionTemplateVariables(fullTemplate) || [];\n      this.buildTemplateVariablesForm();\n    } else {\n      this.templateVariables = [];\n    }\n    this.cdr.detectChanges();\n  }\n\n  /** Build select configs once (same option shape as default stories: id + name); FOR loop adds selectedValue from step */\n  private buildSelectConfigs(): void {\n    this.forOptionTypeSelectConfig = {\n      key: 'forOptionType',\n      placeholder: 'Select option',\n      searchable: false,\n      options: [\n        { id: 'test-data', value: 'test-data', name: 'Test Data Profile', label: 'Test Data Profile' },\n        { id: 'fixed', value: 'fixed', name: 'Fixed count', label: 'Fixed count' },\n      ],\n    };\n    this.updateTestDataProfileSelectConfig();\n    const startVal = this.loopType === 'for' ? this.getLoopStartFormValue() : null;\n    const endVal = this.loopType === 'for' ? this.getLoopEndFormValue() : null;\n    this.startStepSelectConfig = {\n      key: 'startStep',\n      placeholder: 'Loop Start',\n      searchable: false,\n      options: this.getLoopStartSelectOptions(),\n      ...(startVal != null && { selectedValue: startVal }),\n    };\n    this.endStepSelectConfig = {\n      key: 'endStep',\n      placeholder: 'Loop End',\n      searchable: false,\n      options: this.getLoopEndSelectOptions(),\n      ...(endVal != null && { selectedValue: endVal }),\n    };\n    this.updateConditionSelectConfig();\n  }\n\n  /** Update condition select config with natural text actions options (legacy mat-select) */\n  private updateConditionSelectConfig(): void {\n    this.conditionSelectConfig = {\n      key: 'condition',\n      placeholder: 'Select condition',\n      searchable: true,\n      options: this.naturalTextActionsOptions || [],\n    };\n    this.updateWhileConditionSelectConfig();\n  }\n\n  /** While loop: only show options with stepActionType === \"WHILE_LOOP\" */\n  private updateWhileConditionSelectConfig(): void {\n    const filteredOptions = (this.naturalTextActionsOptions || []).filter((option: any) => {\n      return option.stepActionType === 'WHILE_LOOP';\n    });\n    this.whileConditionSelectConfig = {\n      key: 'condition',\n      placeholder: 'Select condition',\n      searchable: true,\n      options: filteredOptions,\n    };\n  }\n\n  /** Options for the while condition autocomplete (WHILE_LOOP natural text actions only) */\n  get whileConditionAutocompleteOptions(): (CqaAutocompleteOption & { template?: any })[] {\n    const opts = this.whileConditionSelectConfig?.options ?? [];\n    return opts.map((option: any) => {\n      const naturalText = option.naturalText ?? option.name ?? option.value ?? String(option.id ?? '');\n      return {\n        value: naturalText,\n        label: naturalText,\n        template: option.template || option,\n      } as CqaAutocompleteOption & { template?: any };\n    });\n  }\n\n  /** Display value for while condition autocomplete: show natural text from option matching naturalTextActionId when available (including when form is empty on open), else form value. When user has selected a different option, show form value. */\n  get whileConditionDisplayValue(): string {\n    const configWithId = this.config as any;\n    const formValue = this.editForm?.get('condition')?.value ?? '';\n    const isFormHtml = formValue && (String(formValue).includes('<') || String(formValue).includes('>'));\n    if (configWithId?.naturalTextActionId != null && this.naturalTextActionsOptions?.length) {\n      const matchingOption = (this.naturalTextActionsOptions as any[]).find(\n        (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n      );\n      if (matchingOption) {\n        const naturalText = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n        if (naturalText) {\n          const naturalTextStr = String(naturalText);\n          // Show selected: when form is empty (initial open), or form matches this option, or form has HTML. Only use form value when user picked a different option.\n          if (!formValue || formValue === naturalTextStr || isFormHtml) return naturalTextStr;\n          return formValue;\n        }\n      }\n    }\n    if (isFormHtml) return '';\n    return formValue;\n  }\n\n  onConditionSelect(option: CqaAutocompleteOption & { template?: any }): void {\n    this.editForm?.get('condition')?.setValue(option.value);\n    const matchingTemplate = option.template;\n    let fullTemplate = matchingTemplate;\n    if (!fullTemplate || !fullTemplate.variables) {\n      const matchingOption = (this.naturalTextActionsOptions || []).find(\n        (opt: any) => opt.naturalText === option.value || opt.name === option.value || opt.value === option.value\n      ) as any;\n      fullTemplate = matchingOption?.template || matchingOption;\n    }\n    if (fullTemplate && fullTemplate.variables) {\n      this.selectedTemplate = fullTemplate;\n      this.templateVariables = this.setConditionTemplateVariables(fullTemplate) || [];\n      this.buildTemplateVariablesForm();\n      this.cdr.detectChanges();\n    } else {\n      this.selectedTemplate = null;\n      this.templateVariables = [];\n      if (!this.templateVariablesForm) {\n        this.templateVariablesForm = this.fb.group({});\n      }\n      this.cdr.detectChanges();\n    }\n    // Auto-open Edit In depth when user selects a condition from the autocomplete.\n    // Pass fullTemplate so the modal shows the newly selected template, not the old step template.\n    setTimeout(() => this.onEditInDepth(fullTemplate), 100);\n  }\n\n  private buildTemplateVariablesForm(): void {\n    if (!this.templateVariablesForm) {\n      this.templateVariablesForm = this.fb.group({});\n    }\n    Object.keys(this.templateVariablesForm.controls).forEach(key => {\n      this.templateVariablesForm.removeControl(key);\n    });\n    const configWithData = this.config as any;\n    const existingData = configWithData.templateVariablesData || {};\n    this.templateVariables.forEach(variable => {\n      let defaultValue: any;\n      if (existingData.hasOwnProperty(variable.name)) {\n        defaultValue = existingData[variable.name];\n      } else {\n        defaultValue = variable.type === 'boolean'\n          ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n          : (variable.value || '');\n      }\n      if (variable.type === 'boolean' && typeof defaultValue === 'string') {\n        defaultValue = defaultValue === 'true' || defaultValue === '1';\n      }\n      this.templateVariablesForm.addControl(variable.name, new FormControl(defaultValue));\n    });\n  }\n\n  getSelectConfigForVariable(variable: any): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (variable.options || []).map((opt: string) => ({\n      id: opt,\n      value: opt,\n      name: opt,\n      label: opt\n    }));\n    return {\n      key: variable.name,\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: options,\n      onChange: (value: any) => {\n        if (this.templateVariablesForm && this.templateVariablesForm.get(variable.name)) {\n          this.templateVariablesForm.get(variable.name)?.setValue(value);\n        }\n      }\n    };\n  }\n\n  /** Update test data profile select config with current options and selectedValue (forLoopTestDataId). Ensure selected id is in options so mat-select can display it. */\n  private updateTestDataProfileSelectConfig(): void {\n    let options = this.convertDataProfileOptionsToSelectOptions(this.dataProfileOptions);\n    const cfg = this.config as any;\n    const forLoopTestDataId = cfg?.forLoopTestDataId ?? cfg?.dataMapJson?.forLoopTestDataId ?? cfg?.dataMapBean?.for_loop?.testDataId;\n    let selectedVal = this.loopType === 'for' ? this.getTestDataProfileFormValue() : undefined;\n\n    // Root-level FOR loop (not nested inside another FOR loop): force-select the test case's\n    // default test data profile and disable the dropdown. Mirrors the create-flow behavior.\n    const isRootForLoop = this.loopType === 'for' && !this.isInsideForLoop;\n    const lockedToTestCaseProfile =\n      isRootForLoop && this.testCaseTestDataId != null && String(this.testCaseTestDataId) !== '';\n    if (lockedToTestCaseProfile) {\n      const lockedId = this.testCaseTestDataId as any;\n      // Patch the form so the value is included on Apply, even though config marks the field disabled.\n      const ctrl = this.editForm?.get('testDataProfile');\n      if (ctrl && String(ctrl.value ?? '') !== String(lockedId)) {\n        ctrl.setValue(lockedId, { emitEvent: false });\n      }\n      selectedVal = lockedId;\n    }\n\n    // Keep the selected profile visible by label even when server-search replaces the option list.\n    const selectedProfileId = selectedVal ?? forLoopTestDataId;\n    if (this.loopType === 'for' && selectedProfileId != null && selectedProfileId !== '') {\n      const idStr = String(selectedProfileId);\n      const alreadyInList = options.some((o: SelectOption) => String(o.id ?? o.value) === idStr);\n      if (!alreadyInList) {\n        const displayName = this.resolveTestDataProfileName(selectedProfileId) || this.resolveTestDataProfileName(this.testDataProfile) || 'Selected profile';\n        options = [{ id: selectedProfileId, value: selectedProfileId, name: displayName, label: displayName }, ...options];\n      }\n    }\n    this.testDataProfileSelectConfig = {\n      key: 'testDataProfile',\n      placeholder: 'Testdataprofile',\n      searchable: true,\n      serverSearch: true,\n      initialFetchOnOpen: true,\n      hasMore: this.hasMoreDataProfiles,\n      isLoading: this.isLoadingDataProfiles,\n      disabled: lockedToTestCaseProfile,\n      options,\n      ...(selectedVal !== undefined && selectedVal !== '' && { selectedValue: selectedVal }),\n      onChange: (value: any) => {\n        this.onDataProfileChange(value);\n      },\n      onSearch: (query: string) => {\n        this.onSearchDataProfiles(query);\n      },\n      onLoadMore: (query?: string) => {\n        this.onLoadMoreDataProfiles(query || '');\n      },\n    };\n  }\n\n  /** Update Loop Start / Loop End select configs with selectedValue (forLoopStartIndex, forLoopEndIndex) so dropdowns show selected */\n  private updateStartEndStepSelectConfigsSelectedValues(): void {\n    if (this.loopType !== 'for') return;\n    const startVal = this.getLoopStartFormValue();\n    const endVal = this.getLoopEndFormValue();\n    this.startStepSelectConfig = {\n      ...this.startStepSelectConfig,\n      options: this.getLoopStartSelectOptions(),\n      ...(startVal != null && { selectedValue: startVal }),\n    };\n    this.endStepSelectConfig = {\n      ...this.endStepSelectConfig,\n      options: this.getLoopEndSelectOptions(),\n      ...(endVal != null && { selectedValue: endVal }),\n    };\n  }\n\n  /** Update all FOR loop select configs (testDataProfile, startStep, endStep) with selectedValue from step so dropdowns show selected */\n  private updateForLoopSelectConfigsSelectedValues(): void {\n    if (this.loopType !== 'for') return;\n    this.updateTestDataProfileSelectConfig();\n    this.updateStartEndStepSelectConfigsSelectedValues();\n  }\n\n  /** Convert DataProfileOption[] to SelectOption[] */\n  private convertDataProfileOptionsToSelectOptions(options: DataProfileOption[]): SelectOption[] {\n    return options.map(option => ({\n      id: option.id,\n      value: option.id,\n      name: option.name,\n      label: option.name\n    }));\n  }\n\n  /** Best-known persisted label for the selected test data profile, even when current search results exclude it. */\n  private getStoredTestDataProfileLabel(): string {\n    const candidates = [\n      this.testDataProfile,\n      this.config?.testDataProfile,\n      (this.config as any)?.testData?.name,\n      this.config?.action,\n    ];\n    for (const candidate of candidates) {\n      const value = candidate != null ? String(candidate).trim() : '';\n      if (!value) continue;\n      if (value === 'Test Data profile') continue;\n      if (/^\\d+$/.test(value)) continue;\n      return value;\n    }\n    return '';\n  }\n\n  /** Resolve a data profile id/value back to the display name used by the dropdown trigger. */\n  private resolveTestDataProfileName(value: string | number | null | undefined): string {\n    if (value == null || value === '') return '';\n    const match = this.dataProfileOptions.find(\n      option => option.id === value || String(option.id) === String(value) || option.name === value\n    );\n    if (match?.name) return match.name;\n    const storedLabel = this.getStoredTestDataProfileLabel();\n    if (storedLabel) return storedLabel;\n    return typeof value === 'string' ? value : String(value);\n  }\n\n  /** Data length (N) of the currently selected test data profile; 0 if none selected or not found. */\n  private getSelectedProfileDataLength(): number {\n    const profileId = this.editForm?.get('testDataProfile')?.value ?? (this.config as any)?.forLoopTestDataId ?? (this.config as any)?.dataMapJson?.forLoopTestDataId ?? (this.config as any)?.dataMapBean?.for_loop?.testDataId;\n    if (profileId == null || !this.dataProfileOptions?.length) return 0;\n    const match = this.dataProfileOptions.find(\n      (o: DataProfileOption) => String(o.id) === String(profileId) || o.id === profileId\n    );\n    if (!match) return 0;\n    const len = (match.data && Array.isArray(match.data) ? match.data.length : 0) || (match.dataLength ?? 0);\n    return typeof len === 'number' ? len : 0;\n  }\n\n  /** Loop Start/End options: 1 to N based on selected data profile's data array length; falls back to 1..10 if no profile. */\n  getLoopStepOptions(): number[] {\n    const N = this.getSelectedProfileDataLength();\n    const max = N > 0 ? N : TestCaseLoopStepComponent.DEFAULT_LOOP_OPTIONS_MAX;\n    return Array.from({ length: max }, (_, i) => i + 1);\n  }\n\n  /** Sentinel value for \"Start\" / \"End\" options (same as old UI). */\n  static readonly LOOP_INDEX_START = -1;\n  static readonly LOOP_INDEX_END = -1;\n\n  /** Loop Start/End select options: same indices as getLoopStepOptions(), with label \"name (index)\" when profile data has row names, else \"Step (index)\". */\n  private getLoopStepSelectOptions(): SelectOption[] {\n    const indices = this.getLoopStepOptions();\n    return indices.map((n) => {\n      const rowName = this.getDataRowNameForOneBasedIndex(n);\n      const label = rowName ? `${rowName} (${n})` : `Step (${n})`;\n      return { id: n, value: n, name: label, label };\n    });\n  }\n\n  /** Loop Start dropdown options: \"Start\" (value -1) first, then data rows. Same values as old UI. */\n  private getLoopStartSelectOptions(): SelectOption[] {\n    const startOption: SelectOption = {\n      id: TestCaseLoopStepComponent.LOOP_INDEX_START,\n      value: TestCaseLoopStepComponent.LOOP_INDEX_START,\n      name: 'Start',\n      label: 'Start',\n    };\n    return [startOption, ...this.getLoopStepSelectOptions()];\n  }\n\n  /** Loop End dropdown options: data rows first, then \"End\" (value -1) last. Same values as old UI. */\n  private getLoopEndSelectOptions(): SelectOption[] {\n    const endOption: SelectOption = {\n      id: TestCaseLoopStepComponent.LOOP_INDEX_END,\n      value: TestCaseLoopStepComponent.LOOP_INDEX_END,\n      name: 'End',\n      label: 'End',\n    };\n    return [...this.getLoopStepSelectOptions(), endOption];\n  }\n\n  /** Handle data profile selection: update display and reset start/end like the old UI. */\n  private onDataProfileChange(profileId: any): void {\n    this.onTestDataProfileChange(profileId);\n    if (this.loopType !== 'for') return;\n    const startVal = TestCaseLoopStepComponent.LOOP_INDEX_START;\n    const endVal = TestCaseLoopStepComponent.LOOP_INDEX_END;\n    if (this.editForm) {\n      this.editForm.get('startStep')?.setValue(startVal);\n      this.editForm.get('endStep')?.setValue(endVal);\n    }\n    this.startStep = startVal;\n    this.endStep = endVal;\n    this.updateStartEndStepSelectConfigsSelectedValues();\n    this.cdr.detectChanges();\n  }\n\n  /** Handle search for data profiles */\n  private onSearchDataProfiles(query: string): void {\n    this.searchDataProfiles.emit(query);\n  }\n\n  /** Handle load more data profiles */\n  private onLoadMoreDataProfiles(query: string): void {\n    this.loadMoreDataProfiles.emit(query);\n  }\n\n  onEditFormFieldChange(controlName: string, value: string | number): void {\n    this.editForm.get(controlName)?.setValue(value);\n  }\n\n  getLoopTypeLabel(): string {\n    return this.loopType === 'for' ? 'FOR LOOP' : 'WHILE LOOP';\n  }\n\n  isWhileLoop(): boolean {\n    return this.loopType === 'while';\n  }\n\n  isForLoop(): boolean {\n    return this.loopType === 'for';\n  }\n\n  getStartLabel(): string {\n    return this.loopType === 'for' ? 'START FOR' : 'START WHILE';\n  }\n\n  getEndLabel(): string {\n    return this.loopType === 'for' ? 'END FOR' : 'END WHILE';\n  }\n\n  /** START loop body marker: first nested step's step number, or the loop row's step number if empty. */\n  getLoopMarkerStartStepDisplay(): string {\n    const first = this.nestedSteps?.[0] as any;\n    if (first?.stepNumber != null && first.stepNumber !== '') {\n      return String(first.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  /** END loop body marker: last nested step's step number, or the loop row's step number if empty. */\n  getLoopMarkerEndStepDisplay(): string {\n    const steps = this.nestedSteps;\n    if (!steps?.length) {\n      return String(this.stepNumber ?? '');\n    }\n    const last = steps[steps.length - 1] as any;\n    if (last?.stepNumber != null && last.stepNumber !== '') {\n      return String(last.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  /** Resolve display start index: prefer forLoopStartIndex from step (or dataMapJson/dataMapBean), else startStep, else from nested steps */\n  private getDisplayStartIndex(): number | undefined {\n    const cfg = this.config as any;\n    const v = cfg?.forLoopStartIndex ?? cfg?.dataMapJson?.forLoopStartIndex ?? cfg?.dataMapBean?.for_loop?.startIndex;\n    if (v != null) return Number(v);\n    if (this.startStep != null) return this.startStep;\n    return this.nestedSteps[0]?.stepNumber as number | undefined;\n  }\n\n  /** Resolve display end index: prefer forLoopEndIndex from step (or dataMapJson/dataMapBean), else endStep, else from nested steps */\n  private getDisplayEndIndex(): number | undefined {\n    const cfg = this.config as any;\n    const v = cfg?.forLoopEndIndex ?? cfg?.dataMapJson?.forLoopEndIndex ?? cfg?.dataMapBean?.for_loop?.endIndex;\n    if (v != null) return Number(v);\n    if (this.endStep != null) return this.endStep;\n    const last = this.nestedSteps[this.nestedSteps.length - 1];\n    return last?.stepNumber as number | undefined ?? this.nestedSteps.length;\n  }\n\n  /** Resolve display profile name: map forLoopTestDataId to profile name from dataProfileOptions, else use testDataProfile */\n  private getDisplayTestDataProfileName(): string {\n    const cfg = this.config as any;\n    const id = cfg?.forLoopTestDataId ?? cfg?.dataMapJson?.forLoopTestDataId ?? cfg?.dataMapBean?.for_loop?.testDataId;\n    if (id != null && this.dataProfileOptions?.length) {\n      const match = this.dataProfileOptions.find(\n        o => o.id === id || String(o.id) === String(id)\n      );\n      if (match) return match.name;\n    }\n    return this.testDataProfile ?? '';\n  }\n\n  /** Get the selected data profile (by forLoopTestDataId or form value), or null. */\n  private getSelectedDataProfile(): DataProfileOption | null {\n    const profileId = this.editForm?.get('testDataProfile')?.value ?? (this.config as any)?.forLoopTestDataId ?? (this.config as any)?.dataMapJson?.forLoopTestDataId ?? (this.config as any)?.dataMapBean?.for_loop?.testDataId;\n    if (profileId == null || !this.dataProfileOptions?.length) return null;\n    const match = this.dataProfileOptions.find(\n      (o: DataProfileOption) => String(o.id) === String(profileId) || o.id === profileId\n    );\n    return match ?? null;\n  }\n\n  /** Get display name for a 1-based row index from the selected profile's data array (data[index-1].name). Returns null if no name. */\n  private getDataRowNameForOneBasedIndex(oneBasedIndex: number): string | null {\n    const profile = this.getSelectedDataProfile();\n    if (!profile?.data || !Array.isArray(profile.data)) return null;\n    const idx = oneBasedIndex - 1;\n    if (idx < 0 || idx >= profile.data.length) return null;\n    const row = profile.data[idx];\n    return row && (row.name != null ? String(row.name) : null);\n  }\n\n  /** Whether test data profile is set (so we can show/hide the chip) */\n  hasTestDataProfile(): boolean {\n    return this.getDisplayTestDataProfileName().length > 0;\n  }\n\n  /** Whether start value is explicitly set (config or startStep input), not inferred from nested steps */\n  hasStartValue(): boolean {\n    const cfg = this.config as any;\n    const v = cfg?.forLoopStartIndex ?? cfg?.dataMapJson?.forLoopStartIndex ?? cfg?.dataMapBean?.for_loop?.startIndex;\n    if (v != null) return true;\n    if (this.startStep != null) return true;\n    return false;\n  }\n\n  /** Whether end value is explicitly set (config or endStep input), not inferred from nested steps */\n  hasEndValue(): boolean {\n    const cfg = this.config as any;\n    const v = cfg?.forLoopEndIndex ?? cfg?.dataMapJson?.forLoopEndIndex ?? cfg?.dataMapBean?.for_loop?.endIndex;\n    if (v != null) return true;\n    if (this.endStep != null) return true;\n    return false;\n  }\n\n  getStepsSummary(): string {\n    if (this.nestedSteps.length === 0) {\n      return '0 steps';\n    }\n    const count = this.nestedSteps.length;\n    const firstStepNum = (this.nestedSteps[0] as any)?.stepNumber ?? 1;\n    const lastStepNum = (this.nestedSteps[count - 1] as any)?.stepNumber ?? count;\n    if (count === 1) {\n      return `Steps ${firstStepNum} (1 step)`;\n    }\n    return `Steps ${firstStepNum}-${lastStepNum} (${count} steps)`;\n  }\n\n  getStartStepLabel(): string {\n    const start = this.getDisplayStartIndex();\n    if (start == null) return `Start: ${this.nestedSteps[0]?.stepNumber ?? 1}`;\n    // If start is -1, user selected \"Start\" option, just return \"Start\"\n    if (start === -1) return 'Start';\n    const name = this.getDataRowNameForOneBasedIndex(start);\n    return name != null ? `Start: ${name}` : `Start: ${start}`;\n  }\n\n  getEndStepLabel(): string {\n    const end = this.getDisplayEndIndex();\n    if (end == null) {\n      const defaultEnd = this.nestedSteps[this.nestedSteps.length - 1]?.stepNumber ?? this.nestedSteps.length;\n      return `End: ${defaultEnd}`;\n    }\n    // If end is -1, user selected \"End\" option, just return \"End\"\n    if (end === -1) return 'End';\n    const name = this.getDataRowNameForOneBasedIndex(end);\n    return name != null ? `End: ${name}` : `End: ${end}`;\n  }\n\n  getTestDataProfileLabel(): string {\n    const name = this.getDisplayTestDataProfileName();\n    if (name) return `Test Data profile: ${name}`;\n    return 'Test Data profile';\n  }\n\n  /** Test Data profile part only - for vertical stack layout (row 1) */\n  getForLoopProfileDisplay(): string {\n    const cfg = this.config as any;\n    // Always emit badges with data-event-key so portal preventPopup can suppress the test-data modal when needed\n    if (cfg?.forLoopDisplayHtml && this.hasTestDataProfile()) {\n      const name = this.getDisplayTestDataProfileName();\n      return `Test Data profile: <span data-key=\"test-data\" data-event-key=\"testDataProfile\" class=\"test_data\">${this.escapeForLoopHtml(name)}</span>`;\n    }\n    if (!this.hasTestDataProfile()) return '';\n    const name = this.getDisplayTestDataProfileName();\n    return `Test Data profile: <span data-key=\"test-data\" data-event-key=\"testDataProfile\" class=\"test_data\">${this.escapeForLoopHtml(name)}</span>`;\n  }\n\n  /** Start and End parts only - for vertical stack layout (row 2, stays together) */\n  getForLoopRangeDisplay(): string {\n    const cfg = this.config as any;\n    const parts: string[] = [];\n    if (this.hasStartValue()) {\n      const full = this.getStartStepLabel();\n      const value = full.replace(/^Start:\\s*/, '');\n      parts.push(`<span class=\"for-loop-range-part\">Start: <span data-key=\"test-data\" data-event-key=\"forLoopStartIndex\" class=\"test_data\">${this.escapeForLoopHtml(value)}</span></span>`);\n    }\n    if (this.hasEndValue()) {\n      const full = this.getEndStepLabel();\n      const value = full.replace(/^End:\\s*/, '');\n      parts.push(`<span class=\"for-loop-range-part\">End: <span data-key=\"test-data\" data-event-key=\"forLoopEndIndex\" class=\"test_data\">${this.escapeForLoopHtml(value)}</span></span>`);\n    }\n    if (cfg?.forLoopDisplayHtml && parts.length === 0) {\n      const startMatch = cfg.forLoopDisplayHtml.match(/Start:\\s*<[^>]*>([^<]*)</);\n      const endMatch = cfg.forLoopDisplayHtml.match(/End:\\s*<[^>]*>([^<]*)</);\n      if (startMatch) {\n        parts.push(\n          `<span class=\"for-loop-range-part\">Start: <span data-key=\"test-data\" data-event-key=\"forLoopStartIndex\" class=\"test_data\">${this.escapeForLoopHtml(startMatch[1])}</span></span>`\n        );\n      }\n      if (endMatch) {\n        parts.push(\n          `<span class=\"for-loop-range-part\">End: <span data-key=\"test-data\" data-event-key=\"forLoopEndIndex\" class=\"test_data\">${this.escapeForLoopHtml(endMatch[1])}</span></span>`\n        );\n      }\n    }\n    return parts.join('');\n  }\n\n  private escapeForLoopHtml(text: string): string {\n    if (!text) return '';\n    const div = document.createElement('div');\n    div.textContent = text;\n    return div.innerHTML;\n  }\n\n  /** Full display for while loop: substitutes #{variable} with HTML badges (element/test_data) so clicks open popup - max iterations shown as separate badge */\n  getConditionDisplay(): string {\n    let base = this.condition || 'element \".notification-badge\" exists';\n    const withWhile = base.toLowerCase().startsWith('while ') ? base : `While ${base}`;\n    // Strip (max N iterations) from text - shown as badge instead\n    const result = withWhile.replace(/\\s*\\(max\\s+\\d+\\s+iterations\\)\\s*$/i, '').trim();\n    return this.substituteTemplateVariablesToHtml(result);\n  }\n\n  /** Substitutes #{variable} placeholders with HTML badge spans using config.event - enables click-to-edit popup like condition step */\n  private substituteTemplateVariablesToHtml(text: string): string {\n    if (!text || typeof text !== 'string') return text;\n    const ev = (this.config as any)?.event ?? (this.config as any)?.templateVariablesData ?? {};\n    if (typeof ev !== 'object' || ev === null) return text;\n    const escape = (v: string) => {\n      const div = document.createElement('div');\n      div.textContent = v;\n      return div.innerHTML;\n    };\n    const elementVars = ['label', 'description', 'element', 'selector', 'ai_task', 'query', 'custom_code'];\n    const attributeVars = ['attribute'];\n    return text.replace(/\\#\\{([^}]+)\\}/g, (_, key: string) => {\n      const val = ev[key];\n      const displayVal = val != null && val !== '' ? String(val) : key;\n      const escaped = escape(displayVal);\n      if (elementVars.includes(key)) {\n        return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"element\">${escaped}</span>`;\n      }\n      if (attributeVars.includes(key)) {\n        return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"attribute\">${escaped}</span>`;\n      }\n      return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"test_data\">${escaped}</span>`;\n    });\n  }\n\n  /** Event key-value pairs for display (e.g. selector, element) - same as condition step getBranchEventDetailsForDisplay */\n  getLoopEventDetailsForDisplay(): { key: string; value: string }[] {\n    const event = this.config?.event;\n    if (!event || typeof event !== 'object') return [];\n    return Object.entries(event)\n      .filter(([key]) => key !== 'customEvent')\n      .map(([key, value]) => ({\n        key,\n        value: value != null ? String(value) : ''\n      }));\n  }\n\n  onToggleExpanded(): void {\n    this.expanded = !this.expanded;\n    this.toggleExpanded.emit({config:this.config, expanded:this.expanded});\n  }\n\n  onTestDataProfileChange(value: string): void {\n    const displayName = this.resolveTestDataProfileName(value);\n    this.testDataProfile = displayName;\n    this.testDataProfileChange.emit(displayName);\n  }\n\n  onStartStepChange(value: number): void {\n    this.startStep = value;\n    this.startStepChange.emit(value);\n  }\n\n  onEndStepChange(value: number): void {\n    this.endStep = value;\n    this.endStepChange.emit(value);\n  }\n\n  onConditionChange(value: string): void {\n    this.condition = value;\n    this.conditionChange.emit(value);\n  }\n\n  onMaxIterationsChange(value: number): void {\n    this.maxIterations = value;\n    this.maxIterationsChange.emit(value);\n  }\n\n  onNestedStepChange(step: TestCaseStepConfig, index: number): void {\n    this.nestedStepChange.emit({ step, index });\n  }\n\n  /** Re-emit openExternal from nested step group so redirect works for step groups inside loops. */\n  onNestedOpenExternal(payload: { step: TestCaseStepConfig }): void {\n    if (payload?.step) {\n      this.openExternal.emit(payload);\n    }\n  }\n\n  onNestedToggleExpanded(event: boolean | {config: TestCaseStepConfig, expanded: boolean}, step: TestCaseStepConfig, index: number): void {\n    // Handle both boolean and object formats\n    if (typeof event === 'object' && event !== null && 'expanded' in event) {\n      // Object format from step-group: {config, expanded}\n      (step as any).expanded = event.expanded;\n      // Check if the event's config is a step-group (not the current step)\n      // This ensures nested step-group events bubble up correctly even when condition step is inside loop step\n      if (this.isStepGroup(event.config)) {\n        // Re-emit the toggleExpanded event with the object format, preserving the original config\n        // Cast to satisfy TypeScript - the renderer accepts TestCaseStepConfig which includes StepGroupConfig\n        this.toggleExpanded.emit({config: event.config as any as LoopStepConfig, expanded: event.expanded});\n      }\n    } else {\n      // Boolean format from other step types\n      (step as any).expanded = event as boolean;\n    }\n    this.onNestedStepChange(step, index);\n  }\n\n  onAddStep(): void {\n    this.addStep.emit();\n  }\n\n  /** Re-emit addStepForLoop from nested loop so N-level nesting works (empty-state add step). */\n  onAddStepForLoopFromNested(event: { loopStepConfig: LoopStepConfig }): void {\n    if (event?.loopStepConfig) {\n      this.addStep.emit({ loopStepConfig: event.loopStepConfig });\n    } else {\n      this.addStep.emit();\n    }\n  }\n\n  /** Called from empty-state plus only; same behaviour as add-step-between (parentId = loop step id, position = parent + 1). */\n  onAddStepEmpty(): void {\n    this.addStep.emit({ loopStepConfig: this.config });\n  }\n\n  onDeleteStep(payloadOrIndex: any, index?: number): void {\n    const idx = typeof index === 'number' ? index : payloadOrIndex;\n    const payload = typeof index === 'number' ? payloadOrIndex : undefined;\n    this.deleteStep.emit(idx);\n    if (payload?.step) this.delete.emit(payload);\n  }\n\n  /** Re-emit edit from nested step so the portal can open edit modal (same as root level). */\n  onNestedEdit(event: { step: TestCaseStepConfig; index: number }): void {\n    if (event?.step != null) this.edit.emit(event as any);\n  }\n\n  /** Re-emit duplicate from nested step so the portal can duplicate (same as root level). */\n  onNestedDuplicate(event: any, step: TestCaseStepConfig): void {\n    this.duplicate.emit((event && event.step != null) ? event : { step } as any);\n  }\n\n  isNormalStep(step: TestCaseStepConfig): step is NormalStepConfig {\n    return 'eventType' in step;\n  }\n\n  isLoopStep(step: TestCaseStepConfig): step is LoopStepConfig {\n    return 'loopType' in step;\n  }\n\n  isConditionStep(step: TestCaseStepConfig): step is ConditionStepConfig {\n    return 'condition' in step && 'branches' in step;\n  }\n\n  isStepGroup(step: TestCaseStepConfig): step is StepGroupConfig {\n    return 'groupName' in step;\n  }\n\n  onAddBranch(): void {\n    // Not used in loop step, but needed for recursive condition steps\n  }\n\n  onDeleteBranch(branch: any): void {\n    // Not used in loop step, but needed for recursive condition steps\n  }\n\n  onNestedConditionAddBranch(nestedStep: ConditionStepConfig, index: number): void {\n    // Add a new branch to the nested condition step\n    if (!nestedStep.branches) {\n      nestedStep.branches = [];\n    }\n    const newBranch: ConditionBranch = {\n      type: nestedStep.branches.length === 0 ? 'if' : 'else',\n      label: nestedStep.branches.length === 0 ? 'IF TRUE' : 'ELSE', \n      stepType: StepTypes.CONDITION_IF,\n      nestedSteps: []\n    };\n    nestedStep.branches.push(newBranch);\n    this.onNestedStepChange(nestedStep, index);\n  }\n\n  onNestedConditionDeleteBranch(nestedStep: ConditionStepConfig, branch: any, index: number): void {\n    // Re-emit deleteBranch so step-list can open delete modal and call API\n    this.deleteBranch.emit(branch);\n  }\n\n  onOpenExternal(): void {\n    // Not used in loop step, but needed for recursive step groups\n  }\n\n  /** Sync FOR loop edit form so dropdowns show existing config (forOptionType, forLoopTestDataId/testDataProfile, forLoopStartIndex/forLoopEndIndex) */\n  private syncForLoopEditFormFromConfig(): void {\n    if (!this.editForm || this.loopType !== 'for') return;\n    const testDataVal = this.getTestDataProfileFormValue();\n    const startVal = this.getLoopStartFormValue();\n    const endVal = this.getLoopEndFormValue();\n    this.editForm.patchValue({\n      forOptionType: this.getForOptionTypeFromConfig() ?? null,\n      testDataProfile: testDataVal,\n      startStep: startVal,\n      endStep: endVal,\n    });\n    // Explicitly set each control so mat-select picks up the value (patchValue can be ignored by child in some timing cases)\n    const testDataCtrl = this.editForm.get('testDataProfile');\n    const startCtrl = this.editForm.get('startStep');\n    const endCtrl = this.editForm.get('endStep');\n    if (testDataCtrl && testDataVal !== undefined && testDataVal !== '') testDataCtrl.setValue(testDataVal, { emitEvent: false });\n    if (startCtrl && startVal != null) startCtrl.setValue(startVal, { emitEvent: false });\n    if (endCtrl && endVal != null) endCtrl.setValue(endVal, { emitEvent: false });\n    this.cdr.detectChanges();\n  }\n\n  onEdit(): void {\n    this.editSnapshot = {\n      testDataProfile: this.testDataProfile,\n      startStep: this.startStep,\n      endStep: this.endStep,\n      condition: this.condition,\n      maxIterations: this.maxIterations,\n      selectedTemplate: this.selectedTemplate,\n      templateVariables: this.templateVariables ? [...this.templateVariables] : [],\n      conditionTemplateFormValue: this.templateVariablesForm ? { ...this.templateVariablesForm.value } : undefined,\n    };\n    // FOR loop: refresh select configs (so Test Data Profile options include selected id if needed) then sync form so dropdowns show selected\n    if (this.loopType === 'for') {\n      this.updateForLoopSelectConfigsSelectedValues();\n      this.syncForLoopEditFormFromConfig();\n      setTimeout(() => {\n        this.syncForLoopEditFormFromConfig();\n        this.cdr.detectChanges();\n      }, 0);\n    } else {\n      this.editForm.patchValue({\n        testDataProfile: this.testDataProfile ?? '',\n        startStep: this.startStep ?? null,\n        endStep: this.endStep ?? null,\n        condition: this.condition ?? '',\n        maxIterations: this.maxIterations ?? 5,\n      });\n    }\n    if (this.loopType === 'while') {\n      // When naturalTextActionId exists, populate condition and selected template from options so autocomplete shows selected template\n      const configWithId = this.config as any;\n      if (configWithId?.naturalTextActionId != null && this.naturalTextActionsOptions?.length) {\n        this.rebuildWhileConditionFromNaturalTextAction();\n      } else if (this.condition || configWithId?.templateVariablesData) {\n        // Fallback: match by condition text when naturalTextActionId not set\n        const conditionStr = this.condition || configWithId?.condition || '';\n        if (conditionStr && (this.naturalTextActionsOptions || []).length > 0) {\n          const matchingOption = (this.naturalTextActionsOptions as any[]).find(\n            (opt: any) => (opt.naturalText || opt.name || opt.value) === conditionStr\n          );\n          const fullTemplate = matchingOption?.template || matchingOption;\n          if (fullTemplate && fullTemplate.variables) {\n            this.selectedTemplate = fullTemplate;\n            this.templateVariables = this.setConditionTemplateVariables(fullTemplate) || [];\n            this.buildTemplateVariablesForm();\n          }\n        }\n      }\n      this.editForm.patchValue({\n        condition: this.condition ?? '',\n        maxIterations: this.maxIterations ?? 5,\n      });\n    }\n    this.isEditing = true;\n    this.edit.emit();\n  }\n\n  onEditApply(): void {\n    const v = this.editForm.value;\n    const testDataProfileValue = v.testDataProfile ?? '';\n    this.startStep = v.startStep ?? undefined;\n    this.endStep = v.endStep ?? undefined;\n    this.condition = v.condition ?? '';\n    const maxVal = v.maxIterations;\n    this.maxIterations = typeof maxVal === 'number' ? maxVal : (maxVal != null && maxVal !== '' ? Number(maxVal) : undefined);\n    \n    // Find the selected data profile option to get both ID and name\n    let testDataProfileId: string | number | undefined;\n    let testDataProfileName: string = '';\n    \n    if (testDataProfileValue && this.dataProfileOptions.length > 0) {\n      // The form value might be ID (number) or name (string)\n      const selectedProfile = this.dataProfileOptions.find(\n        option => option.id === Number(testDataProfileValue) || option.name === testDataProfileValue || String(option.id) === String(testDataProfileValue)\n      );\n      if (selectedProfile) {\n        testDataProfileId = selectedProfile.id;\n        testDataProfileName = selectedProfile.name;\n        this.testDataProfile = testDataProfileName;\n      } else {\n        // If not found, use the value as-is (might be ID or name)\n        this.testDataProfile = testDataProfileValue;\n        testDataProfileId = Number(testDataProfileValue) || undefined;\n      }\n    } else {\n      this.testDataProfile = testDataProfileValue;\n    }\n    \n    // While loop: build templateVariablesData and naturalTextActionId from selected template (same as condition-step)\n    let templateVariablesData: any;\n    let naturalTextActionId: number | undefined;\n    if (this.loopType === 'while' && this.templateVariablesForm && this.templateVariables?.length) {\n      templateVariablesData = {};\n      this.templateVariables.forEach((variable: any) => {\n        const value = this.templateVariablesForm.get(variable.name)?.value;\n        if (value !== undefined && value !== null && value !== '') {\n          templateVariablesData[variable.name] = value;\n        }\n      });\n      if (this.selectedTemplate?.id != null) {\n        naturalTextActionId = this.selectedTemplate.id;\n      }\n    }\n    \n    // Update config with new values (include testDataProfileId, templateVariablesData, naturalTextActionId for while; forLoopTestDataId, forLoopStartIndex/forLoopEndIndex for for)\n    const updatedConfig: LoopStepConfig & { testDataProfileId?: string | number; templateVariablesData?: any; naturalTextActionId?: number } = {\n      ...this.config,\n      testDataProfile: this.testDataProfile,\n      testDataProfileId: testDataProfileId, // Add ID for API call\n      startStep: this.startStep,\n      endStep: this.endStep,\n      condition: this.condition,\n      maxIterations: this.maxIterations,\n      ...(this.loopType === 'while' && Object.keys(templateVariablesData || {}).length > 0 && { templateVariablesData }),\n      ...(this.loopType === 'while' && naturalTextActionId != null && { naturalTextActionId }),\n      ...(this.loopType === 'for' && testDataProfileId != null && { forLoopTestDataId: Number(testDataProfileId) }),\n      ...(this.loopType === 'for' && this.startStep != null && { forLoopStartIndex: this.startStep }),\n      ...(this.loopType === 'for' && this.endStep != null && { forLoopEndIndex: this.endStep }),\n    };\n    \n    // Emit individual change events\n    this.testDataProfileChange.emit(this.testDataProfile);\n    this.startStepChange.emit(this.startStep ?? 1);\n    this.endStepChange.emit(this.endStep ?? 1);\n    if (this.loopType === 'while') {\n      this.conditionChange.emit(this.condition);\n      this.maxIterationsChange.emit(this.maxIterations ?? 5);\n    }\n    \n    // Emit step update event with full config\n    console.log('Loop-step: Emitting stepUpdate event', updatedConfig);\n    this.stepUpdate.emit(updatedConfig);\n    \n    this.isEditing = false;\n  }\n\n  onEditCancel(): void {\n    this.testDataProfile = this.editSnapshot.testDataProfile;\n    this.startStep = this.editSnapshot.startStep;\n    this.endStep = this.editSnapshot.endStep;\n    this.condition = this.editSnapshot.condition;\n    this.maxIterations = this.editSnapshot.maxIterations;\n    this.selectedTemplate = this.editSnapshot.selectedTemplate;\n    this.templateVariables = this.editSnapshot.templateVariables || [];\n    if (this.templateVariablesForm && this.editSnapshot.conditionTemplateFormValue) {\n      this.templateVariablesForm.patchValue(this.editSnapshot.conditionTemplateFormValue);\n    }\n    // Reset form controls so that getTestDataProfileFormValue / getLoopStartFormValue / getLoopEndFormValue\n    // fall through to config on the next edit instead of returning the stale changed values.\n    if (this.editForm) {\n      this.editForm.patchValue({\n        testDataProfile: null,\n        startStep: null,\n        endStep: null,\n      }, { emitEvent: false });\n    }\n    this.isEditing = false;\n  }\n\n  onEditInDepth(templateOverride?: any): void {\n    // When switching to edit-in-depth modal, close inline edit mode first.\n    // This ensures modal Cancel returns the row to normal (non-editing) state.\n    if (this.isEditing) {\n      this.onEditCancel();\n    }\n    this.moreOptions.emit();\n    // Use renderer's index when available (correct for structural steps). stepNumber \"10.3\" parses to 10 - wrong.\n    const index = typeof this.index === 'number'\n      ? this.index\n      : (typeof this.stepNumber === 'number' ? this.stepNumber : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) : 0));\n    const payload: { step: TestCaseStepConfig; index: number; templateOverride?: any } = {\n      step: this.config as TestCaseStepConfig,\n      index: isNaN(index as number) ? 0 : (index as number),\n    };\n    if (templateOverride) {\n      payload.templateOverride = templateOverride;\n    }\n    this.editInDepth.emit(payload);\n  }\n\n  onLink(): void {\n    // Not used in loop step, but needed for recursive step groups\n  }\n\n  onDuplicate(): void {\n    if (this.isDuplicating) return;\n    this.duplicate.emit();\n  }\n\n  onDelete(): void {\n    this.delete.emit();\n  }\n\n  onSkipToggle(): void {\n    if (this.isParentSkipped) {\n      return;\n    }\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext });\n  }\n\n  onSelectionChange(checked: boolean): void {\n    this.selected = checked;\n    this.selectionChange.emit(checked);\n  }\n\n  onMoreOptions(): void {\n    this.moreOptions.emit();\n  }\n\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      const title = this.loopType === 'for' ? 'FOR LOOP Details' : 'WHILE LOOP Details';\n      this.viewDetails.emit({\n        event,\n        title,\n        description: this.config.description,\n      });\n    }\n  }\n}\n","<div class=\"loop-step-row cqa-flex cqa-flex-col\">\n  <!-- Inline Edit Mode: stop propagation so dropdown/select interactions don't bubble and collapse the step or start drag -->\n  <div *ngIf=\"isEditing\" class=\"cqa-py-2.5 cqa-px-4 cqa-flex cqa-flex-col cqa-gap-3\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-justify-between\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-grow cqa-flex-wrap cqa-min-w-0\">\n        <!-- Loop Type Label -->\n        <div class=\"cqa-font-semibold cqa-text-[#1C398E] cqa-text-[12px] cqa-leading-[15px]\">\n          {{ getLoopTypeLabel() }}\n        </div>\n\n        <!-- FOR LOOP inline edit: cqa-dynamic-select (same usage as default stories) -->\n        <ng-container *ngIf=\"loopType === 'for'\">\n          <!-- First select: width 216.25px, height 36px, gap 4px, opacity 1 -->\n          <cqa-dynamic-select [form]=\"editForm\" [config]=\"forOptionTypeSelectConfig\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-dynamic-select>\n          <cqa-dynamic-select [form]=\"editForm\" [config]=\"testDataProfileSelectConfig\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-dynamic-select>\n          <cqa-dynamic-select [form]=\"editForm\" [config]=\"startStepSelectConfig\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-dynamic-select>\n          <cqa-dynamic-select [form]=\"editForm\" [config]=\"endStepSelectConfig\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-dynamic-select>\n        </ng-container>\n\n        <!-- WHILE LOOP inline edit: cqa-autocomplete + template variables (same as condition-step) -->\n        <ng-container *ngIf=\"isWhileLoop()\">\n          <cqa-autocomplete\n            *ngIf=\"editForm\"\n            [options]=\"whileConditionAutocompleteOptions\"\n            [value]=\"whileConditionDisplayValue\"\n            (valueChange)=\"onEditFormFieldChange('condition', $event)\"\n            (optionSelect)=\"onConditionSelect($event)\"\n            placeholder=\"Select condition\"\n            [fullWidth]=\"true\"\n            class=\"cqa-w-full cqa-max-w-[216px]\">\n          </cqa-autocomplete>\n          <!-- Template variables hidden in while loop - use Edit In depth to configure -->\n        </ng-container>\n\n        <!-- Edit In depth link -->\n      <a href=\"#\" *ngIf=\"isWhileLoop()\" (click)=\"onEditInDepth(); $event.preventDefault()\"\n        class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">\n        Edit In depth\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\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1.5\">\n        <!-- Cancel / Apply -->\n      <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\"\n        (clicked)=\"onEditCancel()\"></cqa-button>\n      <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\"\n        (clicked)=\"onEditApply()\"></cqa-button>\n      </div>\n    </div>\n  </div>\n\n  <!-- Loop Header (normal view when not editing) -->\n  <div *ngIf=\"!isEditing\"\n    [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + ((config?.shouldSkip || isParentSkipped) ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"(config?.shouldSkip || isParentSkipped) ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\"\n    style=\"border-bottom: 1px solid #E5E7EB;\">\n    <!-- Drag handle / checkbox — omit entirely when inside step group to avoid phantom flex gap -->\n    <div *ngIf=\"!isInsideStepGroup\" class=\"cqa-inline-flex cqa-items-center\">\n      <!-- Drag Handle Icon (when isReorder is true) -->\n      <div *ngIf=\"isReorder\" 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 not reordering) -->\n      <label *ngIf=\"!isReorder\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n        <input type=\"checkbox\"\n          [ngModel]=\"selected\"\n          (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\"\n          [class.cqa-border-[#3F43EE]]=\"selected\"\n          id=\"check-loop-step\" />\n        <span 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\"\n          [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n        </span>\n      </label>\n    </div>\n    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\n    </div>\n    <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n    <!-- Expand/Collapse Icon -->\n    <button type=\"button\" (click)=\"onToggleExpanded()\" class=\"cqa-p-0\">\n      <svg [class.cqa-rotate-180]=\"!expanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\"\n        viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M12 10L8 6L4 10\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n          stroke-linejoin=\"round\" />\n      </svg>\n    </button>\n\n    <!-- Loop Icon -->\n    <div *ngIf=\"loopType === 'for'\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.334 1.33325L14.0007 3.99992L11.334 6.66659\" stroke=\"#1C398E\" stroke-width=\"1.33333\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M2 7.33333V6.66667C2 5.95942 2.28095 5.28115 2.78105 4.78105C3.28115 4.28095 3.95942 4 4.66667 4H14\"\n          stroke=\"#1C398E\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M4.66667 14.6666L2 11.9999L4.66667 9.33325\" stroke=\"#1C398E\" stroke-width=\"1.33333\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path\n          d=\"M14 8.66675V9.33341C14 10.0407 13.719 10.7189 13.219 11.219C12.7189 11.7191 12.0406 12.0001 11.3333 12.0001H2\"\n          stroke=\"#1C398E\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n    </div>\n    <div *ngIf=\"loopType === 'while'\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.334 1.33325L14.0007 3.99992L11.334 6.66659\" stroke=\"#59168B\" stroke-width=\"1.33333\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M2 7.33333V6.66667C2 5.95942 2.28095 5.28115 2.78105 4.78105C3.28115 4.28095 3.95942 4 4.66667 4H14\"\n          stroke=\"#59168B\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M4.66667 14.6666L2 11.9999L4.66667 9.33325\" stroke=\"#59168B\" stroke-width=\"1.33333\"\n          stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path\n          d=\"M14 8.66675V9.33341C14 10.0407 13.719 10.7189 13.219 11.219C12.7189 11.7191 12.0406 12.0001 11.3333 12.0001H2\"\n          stroke=\"#59168B\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n    </div>\n\n    <!-- Loop Type Label -->\n    <span class=\"cqa-font-semibold cqa-text-[#1C398E] cqa-text-[12px] cqa-leading-none\">\n      {{ getLoopTypeLabel() }}\n    </span>\n\n    <!-- For Loop Display: flex-col so profile/range each get a full row; no ml-2 since parent gap-3 handles spacing -->\n    <div *ngIf=\"loopType === 'for' && (hasTestDataProfile() || hasStartValue() || hasEndValue())\" class=\"cqa-flex cqa-flex-col cqa-gap-y-1 cqa-flex-1 cqa-min-w-0\">\n      <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-x-2 cqa-gap-y-1 cqa-min-w-0\">\n        <span *ngIf=\"getForLoopProfileDisplay()\" class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-inline-block cqa-max-w-full cqa-overflow-hidden\" [innerHTML]=\"getForLoopProfileDisplay()\" (click)=\"onLoopActionClick($event)\"></span>\n        <span *ngIf=\"getForLoopRangeDisplay()\" class=\"for-loop-range-row cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-inline-block cqa-max-w-full cqa-overflow-hidden\" [innerHTML]=\"getForLoopRangeDisplay()\" (click)=\"onLoopActionClick($event)\"></span>\n      </div>\n      <div *ngIf=\"getLoopEventDetailsForDisplay().length > 0\" class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-items-center\">\n        <span *ngFor=\"let item of getLoopEventDetailsForDisplay()\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-0.5 cqa-px-2 cqa-rounded cqa-text-[12px] cqa-leading-[15px] cqa-bg-[#F3F4F6] cqa-text-[#374151] cqa-border cqa-border-solid cqa-border-[#E5E7EB]\" (click)=\"onLoopActionClick($event)\">\n          <span class=\"cqa-font-medium cqa-text-[#6B7280]\">{{ item.key }}:</span>\n          <span class=\"cqa-text-[#111827] cqa-break-words\">{{ item.value }}</span>\n        </span>\n      </div>\n    </div>\n\n    <!-- While Loop Condition (only show if condition exists) - same styling as condition step -->\n    <div *ngIf=\"isWhileLoop() && condition\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-1 cqa-min-w-0\">\n      <!-- While condition text (separate block) -->\n      <div class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-w-full !cqa-inline-flex cqa-items-center cqa-flex-wrap cqa-action-format\" [innerHTML]=\"getConditionDisplay()\" (click)=\"onLoopActionClick($event)\"></div>\n      \n\n      <!-- While event details chips (separate block) -->\n      <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-2\">\n        <span *ngIf=\"maxIterations != null && maxIterations > 0\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-0.5 cqa-px-2 cqa-rounded cqa-text-[12px] cqa-leading-[15px] cqa-bg-[#F3F4F6] cqa-text-[#374151] cqa-border cqa-border-solid cqa-border-[#E5E7EB]\" (click)=\"onLoopActionClick($event)\" data-key=\"maxIterations\" data-event-key=\"maxIterations\">\n          <span class=\"cqa-font-medium cqa-text-[#6B7280]\">max iterations:</span>\n          <span class=\"cqa-text-[#111827]\">{{ maxIterations }}</span>\n        </span>\n        <ng-container *ngIf=\"getLoopEventDetailsForDisplay().length > 0\">\n          <span *ngFor=\"let item of getLoopEventDetailsForDisplay()\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-0.5 cqa-px-2 cqa-rounded cqa-text-[12px] cqa-leading-[15px] cqa-bg-[#F3F4F6] cqa-text-[#374151] cqa-border cqa-border-solid cqa-border-[#E5E7EB]\" (click)=\"onLoopActionClick($event)\">\n            <span class=\"cqa-font-medium cqa-text-[#6B7280]\">{{ item.key }}:</span>\n            <span class=\"cqa-text-[#111827]\">{{ item.value }}</span>\n          </span>\n        </ng-container>\n      </div>\n    </div>\n\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-ml-auto\">\n      <!-- Action Icons: Edit, Link, Duplicate, Delete (show on hover; hidden when inside step-group) — before steps summary -->\n      <!-- Skip badge (from API) -->\n      <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\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        <!-- Skip / Unskip icon (after Edit) -->\n        <button\n          type=\"button\"\n          (click)=\"onSkipToggle(); $event.stopPropagation()\"\n          [disabled]=\"isParentSkipped\"\n          [attr.title]=\"isParentSkipped ? 'Cannot change skip while parent step is skipped' : (config?.shouldSkip ? 'Unskip step' : 'Skip step')\"\n          [style.color]=\"config?.shouldSkip ? '#1447E6' : null\"\n          class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6] disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\"\n        >\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" 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\n      <!-- Steps Summary (after action icons) -->\n      <div\n        class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\">\n        {{ getStepsSummary() }}\n      </div>\n\n      <!-- View Details Link (show only if description is not empty) -->\n      <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\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\n  <!-- Expanded Content with Nested Steps (renderer dispatches by step type, n-level nesting) -->\n  <div *ngIf=\"expanded\" class=\"cqa-flex cqa-flex-col\">\n    <!-- Nested inside a step group with no steps: single empty state (no START/END) -->\n    <div\n      *ngIf=\"isInsideStepGroup && nestedSteps.length === 0\"\n      class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-text-center cqa-text-[#1C398E] cqa-font-semibold cqa-text-[12px] cqa-leading-[15px] cqa-bg-[rgba(219,234,254,0.5)]\">\n      No steps added\n    </div>\n\n    <!-- Empty loop (not in step group): add icon only — no START/END until at least one nested step exists -->\n    <div *ngIf=\"nestedSteps.length === 0 && !isInsideStepGroup && !isReorder\" class=\"loop-step-empty cqa-min-h-[52px] cqa-flex cqa-items-center cqa-justify-center cqa-pl-4 cqa-pr-4\">\n      <button type=\"button\" (click)=\"onAddStepEmpty(); $event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\" title=\"Add step\"\n        class=\"loop-step-empty-add\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n          <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n          <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n      </button>\n    </div>\n\n    <!-- Reorder mode, empty body: drop zone only — no START/END (not used when nested in step group; that case shows \"No steps added\" above) -->\n    <div *ngIf=\"nestedSteps.length === 0 && isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n         [style.min-height.px]=\"52\"\n         [dndDropzone]=\"['step']\"\n         dndEffectAllowed=\"move\"\n         dndDragoverClass=\"dndDragover\"\n         (dndDrop)=\"onDndDrop($event)\">\n      <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n    </div>\n\n    <!-- At least one nested step: START marker, body, END marker -->\n    <ng-container *ngIf=\"nestedSteps.length > 0\">\n    <!-- START Marker (centered label) -->\n    <div class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n      <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">{{ getStartLabel() }} : {{ getLoopMarkerStartStepDisplay() }}</span>\n    </div>\n    <div *ngIf=\"!isReorder\" class=\"cqa-flex cqa-flex-col\">\n      <cqa-test-case-details-renderer *ngFor=\"let step of nestedSteps; let i = index\" [step]=\"step\" [index]=\"i\"\n        [selected]=\"$any(step).selected\"\n        [isNested]=\"true\" [isInsideLoop]=\"true\" [isInsideForLoop]=\"loopType === 'for' || isInsideForLoop\" [isInsideStepGroup]=\"isInsideStepGroup\" [isReorder]=\"isReorder\"\n        [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n        [nestingLevel]=\"nestingLevel + 1\"\n        [addStepBetween]=\"addStepBetween\"\n        [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n        [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n        [currentTestCaseId]=\"currentTestCaseId\"\n        [testCaseTestDataId]=\"testCaseTestDataId\"\n        (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n        (addStep)=\"onAddStep()\" (addStepForLoop)=\"onAddStepForLoopFromNested($event)\" (deleteStep)=\"onDeleteStep($event)\"\n        (addStepForBranch)=\"addStepForBranch.emit($event)\" (deleteStepWithBranch)=\"deleteStepWithBranch.emit($event)\"\n        (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n        (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n        (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n        (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n        (openExternal)=\"onNestedOpenExternal($event)\" (edit)=\"onNestedEdit($event)\"\n        (link)=\"onNestedStepChange(step, i)\" (duplicate)=\"onNestedDuplicate($event, step)\" (delete)=\"onDeleteStep($event, i)\"\n        (viewDetails)=\"viewDetails.emit($event)\"\n        (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n        (branchStepChange)=\"onNestedStepChange(step, i)\" (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n        (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n        (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n        (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n        (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n        (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n        (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n        (parameterChange)=\"onNestedStepChange(step, i)\"\n        (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n        (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n        (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n        (dndDropInZone)=\"dndDropInZone.emit($event)\"\n        (clickAction)=\"clickAction.emit($event)\"\n        (stepUpdate)=\"stepUpdate.emit($event)\"\n        (editInDepth)=\"editInDepth.emit($event)\"\n        (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\">\n      </cqa-test-case-details-renderer>\n    </div>\n    <div *ngIf=\"isReorder\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n         [style.min-height.px]=\"nestedSteps.length === 0 ? 52 : null\"\n         [dndDropzone]=\"['step']\"\n         dndEffectAllowed=\"move\"\n         dndDragoverClass=\"dndDragover\"\n         (dndDrop)=\"onDndDrop($event)\">\n      <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n      <div *ngFor=\"let step of nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n           [dndDraggable]=\"step\"\n           dndEffectAllowed=\"move\"\n           dndType=\"step\">\n        <cqa-test-case-details-renderer [step]=\"step\" [index]=\"i\"\n          [selected]=\"$any(step).selected\"\n          [isNested]=\"true\" [isInsideLoop]=\"true\" [isInsideForLoop]=\"loopType === 'for' || isInsideForLoop\" [isInsideStepGroup]=\"isInsideStepGroup\" [isReorder]=\"isReorder\"\n          [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n          [nestingLevel]=\"nestingLevel + 1\"\n          [addStepBetweenAbove]=\"addStepBetweenAbove\"\n          [addStepBetweenBelow]=\"addStepBetweenBelow\"\n          [addStepBetween]=\"addStepBetween\"\n          [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n          [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n          [currentTestCaseId]=\"currentTestCaseId\"\n          [testCaseTestDataId]=\"testCaseTestDataId\"\n          (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n          (addStep)=\"onAddStep()\" (addStepForLoop)=\"onAddStepForLoopFromNested($event)\" (deleteStep)=\"onDeleteStep($event)\"\n          (addStepForBranch)=\"addStepForBranch.emit($event)\" (deleteStepWithBranch)=\"deleteStepWithBranch.emit($event)\"\n          (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n          (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n          (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n          (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n          (openExternal)=\"onNestedOpenExternal($event)\" (edit)=\"onNestedStepChange(step, i)\"\n          (link)=\"onNestedStepChange(step, i)\" (duplicate)=\"onNestedStepChange(step, i)\" (delete)=\"onDeleteStep($event, i)\"\n          (viewDetails)=\"viewDetails.emit($event)\"\n          (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n          (branchStepChange)=\"onNestedStepChange(step, i)\" (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n          (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n          (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n          (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n          (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n          (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n          (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n          (parameterChange)=\"onNestedStepChange(step, i)\"\n          (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n        (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n        (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n        (dndDropInZone)=\"dndDropInZone.emit($event)\"\n        (clickAction)=\"clickAction.emit($event)\"\n        (stepUpdate)=\"stepUpdate.emit($event)\"\n        (editInDepth)=\"editInDepth.emit($event)\"\n        (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\">\n        </cqa-test-case-details-renderer>\n      </div>\n    </div>\n\n    <!-- END Marker (centered label) -->\n    <div class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n      <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">{{ getEndLabel() }} : {{ getLoopMarkerEndStepDisplay() }}</span>\n    </div>\n    </ng-container>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, ChangeDetectorRef, ViewChild, ElementRef } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl } from '@angular/forms';\nimport { DndDropEvent } from 'ngx-drag-drop';\nimport { ConditionStepConfig, ConditionBranch, TestCaseStepConfig, NormalStepConfig, LoopStepConfig, StepGroupConfig, StepTypes } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { CqaAutocompleteOption } from '../../autocomplete/autocomplete.model';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\nconst CONDITION_BRANCH_EMPTY_STYLES = `\n  /* Empty drop zone: ensure min height for drag-drop to work (IF/ELSE IF/ELSE branches) */\n  .nested-step-drop-list:has(.step-drag-placeholder-nested:only-child) {\n    min-height: 52px;\n  }\n  /* Empty IF / ELSE IF / ELSE: always show plus icon when no steps (visible without hover) */\n  .condition-branch-empty {\n    opacity: 1;\n    transition: opacity 0.1s ease;\n  }\n  /* Show edit/delete icons when hovering over branch row header (IF TRUE, ELSE IF, ELSE) */\n  .condition-branch-row:hover .step-actions {\n    opacity: 1;\n  }\n  .condition-branch-empty-add {\n    padding: 0;\n    background: transparent;\n    border: 0;\n    cursor: pointer;\n    color: #3F43EE;\n    transition: opacity 0.15s ease;\n  }\n  .condition-branch-empty-add:hover {\n    opacity: 0.9;\n  }\n`;\n@Component({\n  selector: 'cqa-test-case-condition-step',\n  templateUrl: './condition-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [\n    STEP_ROW_ACTIONS_STYLES,\n    CONDITION_BRANCH_EMPTY_STYLES,\n  ],\n})\nexport class TestCaseConditionStepComponent implements OnInit, OnChanges {\n  @Input() config!: ConditionStepConfig;\n  @Input() id!: string;\n  @Input() stepNumber!: number | string;\n  /** Array index from parent renderer - use this for editInDepth instead of stepNumber (stepNumber \"10.3\" parses to 10) */\n  @Input() index?: number;\n  @Input() condition!: string;\n  @Input() branches: ConditionBranch[] = [];\n  @Input() expanded: boolean = true;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isInsideForLoop: boolean = false;\n  @Input() testCaseTestDataId?: number | string;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isReorder: boolean = false;\n  /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */\n  @Input() isParentSkipped: boolean = false;\n  @Input() editable: boolean = true;\n  /** Visual indentation level for nested structures (passed down from renderer). */\n  @Input() nestingLevel: number = 0;\n  @Input() selected: boolean = false;\n  /** Options for the data profile dropdown */\n  @Input() dataProfileOptions: any[] = [];\n  /** Indicates if more data profiles are available for loading */\n  @Input() hasMoreDataProfiles: boolean = false;\n  /** Loading state for data profiles */\n  @Input() isLoadingDataProfiles: boolean = false;\n  /** Natural text actions options for while loop condition */\n  @Input() naturalTextActionsOptions: any[] = [];\n  /** Passed to nested renderers (e.g. reusable step group hint). */\n  @Input() currentTestCaseId?: number | string;\n  /** Function to process template variables (similar to step-builder-condition) */\n  @Input() setConditionTemplateVariables: (template: any) => any[] = () => [];\n  /** Show \"Add Step Between\" button above nested steps */\n  @Input() addStepBetweenAbove: boolean = false;\n  /** Show \"Add Step Between\" button below nested steps */\n  @Input() addStepBetweenBelow: boolean = false;\n  /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */\n  @Input() addStepBetween: boolean = false;\n\n  /** When non-null, edit mode is open: 'stepRow' = edit UI in step row only, 'branchRow' = edit UI in branch row only */\n  editContext: 'stepRow' | 'branchRow' | null = null;\n\n  /** Base left padding for step rows (matches px-4 = 16px) plus 24px per nesting level (matches pl-10 = 40px at level 1). */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  /** Which branch index is being edited when editContext === 'branchRow' (0 = IF TRUE, 1+ = ELSE IF) */\n  editingBranchIndex: number = 0;\n\n  /** True when editContext is set (either step row or branch row edit). */\n  get isEditing(): boolean {\n    return this.editContext !== null;\n  }\n\n  /** Array of ELSE IF branches in edit mode */\n  elseIfBranches: Array<{\n    id: string;\n    form: FormGroup;\n    selectedTemplate: any;\n    templateVariables: any[];\n    templateVariablesForm: FormGroup;\n    snapshot: { conditionLeft?: string; conditionOperator?: string; conditionRight?: string };\n    /** Index of the branch row that triggered this \"Add ELSE IF\" (0 = IF TRUE) */\n    triggerBranchIndex: number;\n    /** Branch ID after which this new ELSE IF should be inserted */\n    insertAfterBranchId?: string;\n  }> = [];\n\n  /** Form for edit mode; bound to cqa-dynamic-select and cqa-custom-input */\n  editForm!: FormGroup;\n\n  /** Operator dropdown config (IS, IS NOT, CONTAINS, etc.) */\n  operatorSelectConfig!: DynamicSelectFieldConfig;\n  /** Condition left operand dropdown config (natural text actions with IF_CONDITION) */\n  conditionLeftSelectConfig!: DynamicSelectFieldConfig;\n\n  /** Snapshot for Cancel revert */\n  private editSnapshot: { conditionLeft?: string; conditionOperator?: string; conditionRight?: string } = {};\n  \n  /** Selected template for IF condition */\n  selectedTemplate: any = null;\n  /** Template variables for IF condition */\n  templateVariables: any[] = [];\n  /** Form group for template variables */\n  templateVariablesForm!: FormGroup;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() toggleExpanded = new EventEmitter<{config: ConditionStepConfig, expanded: boolean}>();\n  @Output() conditionChange = new EventEmitter<string>();\n  @Output() branchStepChange = new EventEmitter<{ branch: ConditionBranch; step: TestCaseStepConfig; stepIndex: number }>();\n  @Output() addStep = new EventEmitter<{ branch: ConditionBranch }>();\n  /** Emitted when a nested loop-step emits addStepForLoop (empty state plus button). */\n  @Output() addStepForLoop = new EventEmitter<{ loopStepConfig: LoopStepConfig }>();\n  @Output() deleteStep = new EventEmitter<{ branch: ConditionBranch; stepIndex: number }>();\n  @Output() addBranch = new EventEmitter<void>();\n  /** Emitted when user clicks \"Add Else\" so the parent can call POST test_steps with conditionType CONDITION_ELSE */\n  @Output() addElse = new EventEmitter<{ conditionStepConfig: ConditionStepConfig }>();\n  /** Payload can be branch only (legacy) or { branch, stepNumber } for delete modal label e.g. \"Step 5 ELSE\". */\n  @Output() deleteBranch = new EventEmitter<ConditionBranch | { branch: ConditionBranch; stepNumber?: number | string }>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<{ step: TestCaseStepConfig } | void>();\n  @Output() edit = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index?: number; templateOverride?: any; isCreateMode?: boolean; createModeBranchData?: any }>();\n  @Output() dndDropInZone = new EventEmitter<{ event: DndDropEvent; targetList: TestCaseStepConfig[] }>();\n  /** Emit when more data profiles need to be loaded */\n  @Output() loadMoreDataProfiles = new EventEmitter<string>();\n  /** Emit when data profile search query changes */\n  @Output() searchDataProfiles = new EventEmitter<string>();\n  /** Emit when a nested step is updated (e.g., Apply button clicked in loop-step edit mode) */\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n  /** Re-emit when a nested step (e.g. normal-step) emits clickAction (e.g. element/label click for popup) */\n  @Output() clickAction = new EventEmitter<{ event: MouseEvent; step: TestCaseStepConfig }>();\n  /** Re-emit addStepBetweenClick from nested renderers */\n  @Output() addStepBetweenClick = new EventEmitter<{step: TestCaseStepConfig, index: number, position: 'ABOVE' | 'BELOW'}>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  /** Re-emit when nested step group emits openExternal (redirect to step group in new tab) */\n  @Output() openExternal = new EventEmitter<{ step: TestCaseStepConfig }>();\n\n  onDndDrop(event: DndDropEvent, branch: ConditionBranch): void {\n    this.dndDropInZone.emit({ event, targetList: branch.nestedSteps });\n  }\n\n  /**\n   * Toggle skip state for the whole condition step.\n   * Uses the same payload shape as other step types (emits `stepUpdate` with `shouldSkip` flipped).\n   */\n  onSkipToggle(): void {\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n\n  /** Emit clickAction when user clicks on condition/branch action badges (element, test_data, etc.) so parent can open edit modals */\n  onConditionActionClick(event: MouseEvent, branch?: ConditionBranch): void {\n    if (this.isInsideStepGroup) return;\n    const step: TestCaseStepConfig = branch?.id != null\n      ? { ...this.config, id: String(branch.id) } as TestCaseStepConfig\n      : this.config;\n    this.clickAction.emit({ event, step });\n  }\n\n  /** Forward clickAction from nested steps only when not inside a step-group (Element/Test Data modals disabled there). */\n  onNestedClickAction(payload: { event: MouseEvent; step: TestCaseStepConfig }): void {\n    if (!this.isInsideStepGroup) {\n      this.clickAction.emit(payload);\n    }\n  }\n\n  constructor(\n    private fb: FormBuilder,\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.id = this.config.id;\n      this.stepNumber = this.config.stepNumber;\n      this.condition = this.config.condition;\n      this.branches = this.config.branches || [];\n      this.expanded = this.config.expanded !== undefined ? this.config.expanded : true;\n      this.selected = (this.config as any).selected || false;\n    }\n    this.buildEditForm();\n    this.buildOperatorSelectConfig();\n    this.updateConditionLeftSelectConfig();\n  }\n\n  ngOnChanges(changes: any): void {\n    if (changes['config'] && this.config) {\n      this.selected = (this.config as any).selected || false;\n      // Update condition and branches when config changes (important for immediate UI updates)\n      // This ensures the UI reflects changes immediately, even if config object reference doesn't change\n      if (this.config.condition !== undefined) {\n        this.condition = this.config.condition;\n      }\n      if (this.config.branches) {\n        this.branches = this.config.branches;\n      }\n      // Trigger change detection to ensure UI updates\n      this.cdr.detectChanges();\n    }\n    if (changes['condition'] && this.condition !== undefined) {\n      // Condition input changed, update from config if available\n      if (this.config && this.config.condition !== undefined) {\n        this.condition = this.config.condition;\n      }\n      // Trigger change detection\n      this.cdr.detectChanges();\n    }\n    if (changes['branches'] && this.branches) {\n      // Branches changed, trigger change detection\n      this.cdr.detectChanges();\n    }\n    if (changes['naturalTextActionsOptions']) {\n      this.updateConditionLeftSelectConfig();\n      // Rebuild form when options are loaded to populate initial value from naturalTextActionId\n      if (this.editForm && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n        this.rebuildEditFormWithNaturalTextAction();\n      }\n    }\n  }\n\n  /** Rebuild edit form when naturalTextActionsOptions are loaded to populate from naturalTextActionId */\n  private rebuildEditFormWithNaturalTextAction(): void {\n    if (!this.editForm) {\n      return;\n    }\n    const configWithId = this.config as any;\n    if (configWithId.naturalTextActionId && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n      const matchingOption = this.naturalTextActionsOptions.find(\n        (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n      );\n      if (matchingOption) {\n        const naturalText = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n        if (naturalText) {\n          const currentValue = this.editForm.get('conditionLeft')?.value ?? '';\n          // Only update if current value is empty or doesn't match\n          if (!currentValue || currentValue !== naturalText) {\n            this.editForm.get('conditionLeft')?.setValue(naturalText);\n          }\n        }\n        // Get the full template object (NaturalTextActions) from the option\n        const fullTemplate = matchingOption.template || matchingOption;\n        // Store selected template and get variables\n        this.selectedTemplate = fullTemplate;\n        if (fullTemplate && fullTemplate.variables) {\n          this.templateVariables = this.setConditionTemplateVariables(fullTemplate);\n          this.buildTemplateVariablesForm();\n        }\n      }\n    }\n  }\n\n  private buildEditForm(): void {\n    // If config has naturalTextActionId, find the matching natural text action\n    let conditionLeftValue = '';\n    const configWithId = this.config as any;\n    if (configWithId.naturalTextActionId && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n      const matchingOption = this.naturalTextActionsOptions.find(\n        (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n      );\n      if (matchingOption) {\n        // Use naturalText exactly as received from API\n        conditionLeftValue = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n        // Get the full template object (NaturalTextActions) from the option\n        const fullTemplate = matchingOption.template || matchingOption;\n        // Store selected template and get variables\n        this.selectedTemplate = fullTemplate;\n        if (fullTemplate && fullTemplate.variables) {\n          this.templateVariables = this.setConditionTemplateVariables(fullTemplate);\n          this.buildTemplateVariablesForm();\n        }\n      }\n    }\n    \n    // If no naturalTextActionId match found, parse from condition string\n    if (!conditionLeftValue) {\n      const { left } = this.parseCondition(this.condition);\n      conditionLeftValue = left;\n    }\n    \n    const { operator, right } = this.parseCondition(this.condition);\n    this.editForm = this.fb.group({\n      conditionLeft: [conditionLeftValue],\n      conditionOperator: [operator],\n      conditionRight: [right],\n    });\n    \n    // Initialize template variables form if not already initialized\n    if (!this.templateVariablesForm) {\n      this.templateVariablesForm = this.fb.group({});\n    }\n  }\n\n  private buildElseIfBranch(index?: number, triggerBranchIndex: number = 0): {\n    id: string;\n    form: FormGroup;\n    selectedTemplate: any;\n    templateVariables: any[];\n    templateVariablesForm: FormGroup;\n    snapshot: { conditionLeft?: string; conditionOperator?: string; conditionRight?: string };\n    triggerBranchIndex: number;\n    insertAfterBranchId?: string;\n  } {\n    // Initialize ELSE IF form with empty values or from existing ELSE IF branch if available\n    // Use getAllBranchesFlat to include chained nextBranch ELSE IFs\n    const elseIfBranches = this.getAllBranchesFlat().filter(b => b.type === 'else-if');\n    const branchIndex = index !== undefined ? index : elseIfBranches.length;\n    const elseIfBranch = elseIfBranches[branchIndex];\n    const elseCondition = elseIfBranch?.action || '';\n    const { left, operator, right } = this.parseCondition(elseCondition);\n    \n    const form = this.fb.group({\n      conditionLeft: [left],\n      conditionOperator: [operator],\n      conditionRight: [right],\n    });\n    \n    const templateVariablesForm = this.fb.group({});\n\n    // Compute which branch ID this new ELSE IF should be inserted after\n    const triggerBranch = this.branches && this.branches.length > triggerBranchIndex\n      ? this.branches[triggerBranchIndex]\n      : null;\n    const insertAfterBranchId = triggerBranch?.id != null\n      ? String(triggerBranch.id)\n      : (this.config.id != null ? String(this.config.id) : undefined);\n    \n    return {\n      id: `else-if-${Date.now()}-${Math.random()}`,\n      form,\n      selectedTemplate: null,\n      templateVariables: [],\n      templateVariablesForm,\n      snapshot: { conditionLeft: left, conditionOperator: operator, conditionRight: right },\n      triggerBranchIndex,\n      insertAfterBranchId,\n    };\n  }\n\n  private buildOperatorSelectConfig(): void {\n    const options: SelectOption[] = [\n      { id: 'is', value: 'is', name: 'IS', label: 'IS' },\n      { id: 'is not', value: 'is not', name: 'IS NOT', label: 'IS NOT' },\n      { id: 'contains', value: 'contains', name: 'CONTAINS', label: 'CONTAINS' },\n      { id: 'equals', value: 'equals', name: 'EQUALS', label: 'EQUALS' },\n      { id: 'starts with', value: 'starts with', name: 'STARTS WITH', label: 'STARTS WITH' },\n      { id: 'ends with', value: 'ends with', name: 'ENDS WITH', label: 'ENDS WITH' },\n    ];\n    this.operatorSelectConfig = {\n      key: 'conditionOperator',\n      placeholder: 'Operator',\n      searchable: false,\n      options,\n    };\n  }\n\n  /** Update condition left select config with filtered natural text actions (IF_CONDITION only) */\n  private updateConditionLeftSelectConfig(): void {\n    // Filter natural text actions to only include those with stepActionType === \"IF_CONDITION\"\n    const filteredOptions = (this.naturalTextActionsOptions || []).filter((option: any) => {\n      return option.stepActionType === 'IF_CONDITION';\n    });\n\n    this.conditionLeftSelectConfig = {\n      key: 'conditionLeft',\n      placeholder: 'Select Condition',\n      searchable: true,\n      options: filteredOptions,\n    };\n  }\n\n  /** Options for the condition left autocomplete (IF_CONDITION natural text actions) */\n  get conditionLeftAutocompleteOptions(): CqaAutocompleteOption[] {\n    const opts = this.conditionLeftSelectConfig?.options ?? [];\n    return opts.map((option: any) => {\n      // Use naturalText exactly as received from API, fallback to name/value/id\n      const naturalText = option.naturalText ?? option.name ?? option.value ?? String(option.id ?? '');\n      return {\n        value: naturalText,\n        label: naturalText,\n        // Store the full template object (NaturalTextActions) for template variables processing\n        // Use option.template if available (full NaturalTextActions), otherwise use option itself\n        template: option.template || option,\n      } as CqaAutocompleteOption & { template?: any };\n    });\n  }\n\n  /**\n   * Display value for IF/ELSE IF condition autocomplete.\n   * - For IF (step row / IF branch edit), show naturalText from option matching naturalTextActionId when form is empty.\n   * - For ELSE IF branch edit, always use the form value (so clearing leaves the field empty instead of reverting to IF).\n   */\n  get conditionLeftDisplayValue(): string {\n    const configWithId = this.config as any;\n    const formValue = this.editForm?.get('conditionLeft')?.value ?? '';\n    const isFormHtml = formValue && (String(formValue).includes('<') || String(formValue).includes('>'));\n\n    // When editing an ELSE IF branch, don't fall back to IF's naturalText; just show the current form value.\n    const isEditingElseIfBranch =\n      this.editContext === 'branchRow' &&\n      typeof this.editingBranchIndex === 'number' &&\n      this.editingBranchIndex > 0;\n    if (isEditingElseIfBranch) {\n      if (isFormHtml) return '';\n      return formValue;\n    }\n\n    if (configWithId?.naturalTextActionId != null && this.naturalTextActionsOptions?.length) {\n      const matchingOption = this.naturalTextActionsOptions.find(\n        (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n      );\n      if (matchingOption) {\n        const naturalText = matchingOption.naturalText ?? matchingOption.name ?? matchingOption.value ?? '';\n        if (naturalText) {\n          const naturalTextStr = String(naturalText);\n          if (!formValue || formValue === naturalTextStr || isFormHtml) return naturalTextStr;\n          return formValue;\n        }\n      }\n    }\n    if (isFormHtml) return '';\n    return formValue;\n  }\n\n  onConditionLeftSelect(option: CqaAutocompleteOption & { template?: any }): void {\n    this.editForm?.get('conditionLeft')?.setValue(option.value);\n    \n    // Get template from option - option.template should contain the full NaturalTextActions object\n    const matchingTemplate = option.template;\n    \n    // If template not in option, try to find from naturalTextActionsOptions by matching naturalText\n    let fullTemplate = matchingTemplate;\n    if (!fullTemplate || !fullTemplate.variables) {\n      const optVal = (option.value ?? '').toString().trim();\n      const matchingOption = this.naturalTextActionsOptions.find(\n        (opt: any) => {\n          const n = (opt.naturalText ?? opt.name ?? opt.value ?? '').toString().trim();\n          return n === optVal || (opt.template && (opt.template as any).naturalText?.toString().trim() === optVal);\n        }\n      );\n      // Use template property from option if available, otherwise use the option itself\n      fullTemplate = matchingOption?.template || matchingOption;\n    }\n    \n    if (fullTemplate && fullTemplate.variables) {\n      // Store the full template for reference\n      this.selectedTemplate = fullTemplate;\n      \n      // Get template variables using the provided function\n      // Pass the full NaturalTextActions object which has the variables property\n      const variables = this.setConditionTemplateVariables(fullTemplate);\n      console.log('Template variables loaded:', variables, 'from template:', fullTemplate);\n      \n      this.templateVariables = variables || [];\n      // Build form for template variables\n      this.buildTemplateVariablesForm();\n      // Trigger change detection to update the template\n      this.cdr.detectChanges();\n    } else {\n      console.log('No matching template found or template has no variables', {\n        fullTemplate,\n        hasVariables: fullTemplate?.variables,\n        optionValue: option.value,\n        optionTemplate: option.template\n      });\n      this.selectedTemplate = null;\n      this.templateVariables = [];\n      if (!this.templateVariablesForm) {\n        this.templateVariablesForm = this.fb.group({});\n      }\n      // Trigger change detection to update the template\n      this.cdr.detectChanges();\n    }\n    // Auto-open Edit In depth when user selects a condition from the autocomplete.\n    // Pass the selected template so the modal shows the newly selected template, not the old step template.\n    // Prefer selectedTemplate (validated), then fullTemplate, then option.template (from autocomplete)\n    const templateToPass = this.selectedTemplate || fullTemplate || option.template;\n    setTimeout(() => this.onEditInDepth(templateToPass), 100);\n  }\n  \n  private buildTemplateVariablesForm(): void {\n    if (!this.templateVariablesForm) {\n      this.templateVariablesForm = this.fb.group({});\n    }\n    \n    // Clear existing form controls\n    Object.keys(this.templateVariablesForm.controls).forEach(key => {\n      this.templateVariablesForm.removeControl(key);\n    });\n    \n    // Get existing template variables data from config if available\n    const configWithData = this.config as any;\n    const existingData = configWithData.templateVariablesData || {};\n    \n    // Add form controls for each variable\n    this.templateVariables.forEach(variable => {\n      // Try to get value from existing data first, then from variable default\n      let defaultValue: any;\n      if (existingData.hasOwnProperty(variable.name)) {\n        defaultValue = existingData[variable.name];\n      } else {\n        defaultValue = variable.type === 'boolean' \n          ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n          : (variable.value || '');\n      }\n      \n      // Convert boolean string to boolean\n      if (variable.type === 'boolean' && typeof defaultValue === 'string') {\n        defaultValue = defaultValue === 'true' || defaultValue === '1';\n      }\n      \n      this.templateVariablesForm.addControl(variable.name, new FormControl(defaultValue));\n    });\n  }\n\n  onElseConditionLeftSelect(option: CqaAutocompleteOption & { template?: any }, branchId: string): void {\n    const branch = this.elseIfBranches.find(b => b.id === branchId);\n    if (!branch) return;\n    \n    branch.form?.get('conditionLeft')?.setValue(option.value);\n    \n    // Get template from option - option.template should contain the full NaturalTextActions object\n    const matchingTemplate = option.template;\n    \n    // If template not in option, try to find from naturalTextActionsOptions by matching naturalText\n    let fullTemplate = matchingTemplate;\n    if (!fullTemplate || !fullTemplate.variables) {\n      const matchingOption = this.naturalTextActionsOptions.find(\n        (opt: any) => opt.naturalText === option.value || opt.name === option.value || opt.value === option.value\n      );\n      // Use template property from option if available, otherwise use the option itself\n      fullTemplate = matchingOption?.template || matchingOption;\n    }\n    \n    if (fullTemplate && fullTemplate.variables) {\n      // Store the full template for reference\n      branch.selectedTemplate = fullTemplate;\n      // Get template variables using the provided function\n      branch.templateVariables = this.setConditionTemplateVariables(fullTemplate);\n      // Build form for template variables\n      this.buildElseTemplateVariablesForm(branch);\n      // Trigger change detection to update the template\n      this.cdr.detectChanges();\n    } else {\n      branch.selectedTemplate = null;\n      branch.templateVariables = [];\n      if (!branch.templateVariablesForm) {\n        branch.templateVariablesForm = this.fb.group({});\n      }\n      // Trigger change detection to update the template\n      this.cdr.detectChanges();\n    }\n    // Auto-open Edit In depth when user selects a condition from the ELSE IF autocomplete.\n    // For existing branch: pass branch and branchIndex so modal shows \"Edit Step N\".\n    // For new branch (id starts with \"else-if-\" = temp UI id): pass isCreateMode so modal shows \"Create Step\" and calls create API on save.\n    const configBranch = this.getBranchById(branchId);\n    const branchIndex = this.getBranchIndexById(branchId);\n    const isNewBranch = typeof branchId === 'string' && branchId.startsWith('else-if-');\n\n    // Determine insertion point: use the branch-specific id stored when the form was created,\n    // falling back to the context-based helper for backward compatibility.\n    const insertAfterBranchId = branch.insertAfterBranchId ?? this.getInsertAfterBranchId();\n\n    setTimeout(() => this.onEditInDepth(fullTemplate, configBranch ?? undefined, branchIndex >= 0 ? branchIndex : undefined, isNewBranch, branch, insertAfterBranchId), 100);\n  }\n  \n  private buildElseTemplateVariablesForm(branch: {\n    id: string;\n    form: FormGroup;\n    selectedTemplate: any;\n    templateVariables: any[];\n    templateVariablesForm: FormGroup;\n    snapshot: { conditionLeft?: string; conditionOperator?: string; conditionRight?: string };\n  }): void {\n    if (!branch.templateVariablesForm) {\n      branch.templateVariablesForm = this.fb.group({});\n    }\n    \n    // Clear existing form controls\n    Object.keys(branch.templateVariablesForm.controls).forEach(key => {\n      branch.templateVariablesForm.removeControl(key);\n    });\n    \n    // Get existing template variables data from config if available (for ELSE IF branch)\n    const configWithData = this.config as any;\n    const existingData = configWithData.elseTemplateVariablesData || {};\n    \n    // Add form controls for each variable\n    branch.templateVariables.forEach(variable => {\n      // Try to get value from existing data first, then from variable default\n      let defaultValue: any;\n      if (existingData.hasOwnProperty(variable.name)) {\n        defaultValue = existingData[variable.name];\n      } else {\n        defaultValue = variable.type === 'boolean' \n          ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n          : (variable.value || '');\n      }\n      \n      // Convert boolean string to boolean\n      if (variable.type === 'boolean' && typeof defaultValue === 'string') {\n        defaultValue = defaultValue === 'true' || defaultValue === '1';\n      }\n      \n      branch.templateVariablesForm.addControl(variable.name, new FormControl(defaultValue));\n    });\n  }\n\n  onAddElse(triggerBranchIndex: number = 0): void {\n    // Add a new ELSE IF branch (UI row only; APIs are called when user clicks Apply)\n    const newBranch = this.buildElseIfBranch(undefined, triggerBranchIndex);\n    this.elseIfBranches.push(newBranch);\n  }\n\n  /** Returns the pending ELSE IF add-forms that belong after a specific branch row. */\n  getElseIfBranchesForBranchIndex(branchIndex: number): Array<{\n    id: string;\n    form: FormGroup;\n    selectedTemplate: any;\n    templateVariables: any[];\n    templateVariablesForm: FormGroup;\n    snapshot: { conditionLeft?: string; conditionOperator?: string; conditionRight?: string };\n    triggerBranchIndex: number;\n    insertAfterBranchId?: string;\n  }> {\n    return this.elseIfBranches.filter(b => b.triggerBranchIndex === branchIndex);\n  }\n\n  /** True when the given elseIfBranch is the last pending one (determines where Cancel/Apply are shown). */\n  isLastElseIfBranch(branchId: string): boolean {\n    return this.elseIfBranches.length > 0 &&\n      this.elseIfBranches[this.elseIfBranches.length - 1].id === branchId;\n  }\n\n  onAddElseBranch(): void {\n    // Emit so parent can call POST test_steps with conditionType CONDITION_ELSE\n    if (this.config) {\n      this.addElse.emit({ conditionStepConfig: this.config });\n    }\n  }\n\n  onRemoveElse(branchId: string): void {\n    // Remove the ELSE IF branch with the given ID\n    const index = this.elseIfBranches.findIndex(b => b.id === branchId);\n    if (index !== -1) {\n      this.elseIfBranches.splice(index, 1);\n    }\n  }\n\n  /** Strip HTML tags from a string to get plain text */\n  private stripHtmlTags(html: string): string {\n    if (!html || typeof html !== 'string') return html;\n    // Create a temporary div element to parse HTML and extract text\n    const div = document.createElement('div');\n    div.innerHTML = html;\n    return div.textContent || div.innerText || html.replace(/<[^>]*>/g, '');\n  }\n\n  /** Parse condition string into left, operator, right (e.g. \"Usertype is Premium\")\n   * Strips HTML tags before parsing to handle formatted conditions */\n  private parseCondition(c: string): { left: string; operator: string; right: string } {\n    if (!c || typeof c !== 'string') {\n      return { left: '', operator: 'is', right: '' };\n    }\n    // Strip HTML tags before parsing to avoid issues with formatted conditions\n    const plainText = this.stripHtmlTags(c).trim();\n    const operators = [' is not ', ' is ', ' contains ', ' equals ', ' starts with ', ' ends with '];\n    for (const op of operators) {\n      const i = plainText.toLowerCase().indexOf(op);\n      if (i !== -1) {\n        return {\n          left: plainText.slice(0, i).trim(),\n          operator: op.trim(),\n          right: plainText.slice(i + op.length).trim(),\n        };\n      }\n    }\n    return { left: plainText, operator: 'is', right: '' };\n  }\n\n  /** Build condition string from form values */\n  private buildConditionFromForm(): string {\n    let left = this.editForm.get('conditionLeft')?.value ?? '';\n    const op = this.editForm.get('conditionOperator')?.value ?? 'is';\n    const right = this.editForm.get('conditionRight')?.value ?? '';\n    \n    // If left is an ID (number), find the naturalText from options\n    if (left && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n      const leftValue = String(left);\n      // Check if it's a number (ID) or if we need to find the naturalText\n      const isNumericId = !isNaN(Number(leftValue)) && leftValue.trim() !== '';\n      \n      if (isNumericId) {\n        // Find the option by ID and use its naturalText\n        const selectedAction = this.naturalTextActionsOptions.find(\n          (option: any) => String(option.id) === leftValue\n        );\n        if (selectedAction && selectedAction.naturalText) {\n          left = String(selectedAction.naturalText);\n        }\n      } else {\n        // Check if it's already a naturalText or needs to be found\n        const selectedAction = this.naturalTextActionsOptions.find(\n          (option: any) => option.naturalText === left || option.name === left || option.value === left\n        );\n        if (selectedAction && selectedAction.naturalText) {\n          left = String(selectedAction.naturalText);\n        }\n      }\n    }\n    \n    return [left, op, right].filter(Boolean).join(' ');\n  }\n\n  onEditFormFieldChange(controlName: string, value: string): void {\n    this.editForm.get(controlName)?.setValue(value);\n  }\n\n  /** Count and summarize condition branches using their display step numbers.\n   * Example: IF + 2x ELSE IF + ELSE → \"Steps 6-9 (4 steps)\". */\n  /**\n   * Returns a flat list of all branches including those chained via nextBranch.\n   * Used for counting, badge display, and summary when the condition uses a chained structure.\n   */\n  getAllBranchesFlat(): ConditionBranch[] {\n    const result: ConditionBranch[] = [];\n    const traverse = (branches: ConditionBranch[]) => {\n      for (const b of branches) {\n        result.push(b);\n        if (b.nextBranch) traverse([b.nextBranch]);\n      }\n    };\n    traverse(this.branches || []);\n    return result;\n  }\n\n  getStepsSummary(): string {\n    const allBranches = this.getAllBranchesFlat();\n    const branchCount = allBranches.length;\n    if (branchCount === 0) {\n      return '0 steps';\n    }\n\n    const first = this.getBranchDisplayNumber(0);\n    const last = this.getBranchDisplayNumber(branchCount - 1);\n\n    if (branchCount === 1) {\n      return `Steps ${first} (1 step)`;\n    }\n    return `Steps ${first}-${last} (${branchCount} steps)`;\n  }\n\n  /** Branch type badges for step row: IF, ELSE IF (with count if multiple), ELSE */\n  getBranchTypeBadges(): { label: string; count?: number; type: 'if' | 'else-if' | 'else'; badgeClass: string }[] {\n    const badges: { label: string; count?: number; type: 'if' | 'else-if' | 'else'; badgeClass: string }[] = [];\n    const allBranches = this.getAllBranchesFlat();\n    const elseIfCount = allBranches.filter(b => b.type === 'else-if').length;\n    const hasElse = this.hasElseBranch;\n\n    badges.push({ label: 'IF', type: 'if', badgeClass: 'cqa-bg-[#0DBD7D1A] cqa-text-[#0D542B] cqa-border cqa-border-solid cqa-border-[#0DBD7D]' });\n    if (elseIfCount > 0) {\n      badges.push({\n        label: 'ELSE IF',\n        count: elseIfCount > 1 ? elseIfCount : undefined,\n        type: 'else-if',\n        badgeClass: 'cqa-bg-yellow-50 cqa-text-yellow-700 cqa-border cqa-border-solid cqa-border-yellow-200'\n      });\n    }\n    if (hasElse) {\n      badges.push({ label: 'ELSE', type: 'else', badgeClass: 'cqa-bg-red-50 cqa-text-red-700 cqa-border cqa-border-solid cqa-border-red-200' });\n    }\n    return badges;\n  }\n\n  /** Condition text as plain text (strips HTML), truncated with \"...\" if long */\n  getConditionPlainText(maxLength: number = 60): string {\n    if (!this.condition || typeof this.condition !== 'string') return '';\n    const plain = this.condition.replace(/<[^>]*>/g, '').trim();\n    if (plain.length <= maxLength) return plain;\n    let truncated = plain.slice(0, maxLength);\n    // Trim trailing punctuation to avoid \"....\" when text ends with \".\"\n    truncated = truncated.replace(/[.,;:!?]+$/, '');\n    return truncated + '...';\n  }\n\n  /** Event key-value pairs for display, excluding customEvent */\n  getEventDetailsForDisplay(): { key: string; value: string }[] {\n    const event = this.config?.event;\n    if (!event || typeof event !== 'object') return [];\n    return Object.entries(event)\n      .filter(([key]) => key !== 'customEvent')\n      .map(([key, value]) => ({\n        key,\n        value: value != null ? String(value) : ''\n      }));\n  }\n\n  /** Event key-value pairs for a branch (e.g. selector, element) - for IF uses config.event, for ELSE IF/ELSE uses branch.event */\n  getBranchEventDetailsForDisplay(branch: ConditionBranch): { key: string; value: string }[] {\n    const event = (branch as any).event ?? (branch.type === 'if' ? this.config?.event : undefined);\n    if (!event || typeof event !== 'object') return [];\n    return Object.entries(event)\n      .filter(([key]) => key !== 'customEvent')\n      .map(([key, value]) => ({\n        key,\n        value: value != null ? String(value) : ''\n      }));\n  }\n\n  onToggleExpanded(): void {\n    this.expanded = !this.expanded;\n    this.toggleExpanded.emit({config:this.config, expanded:this.expanded});\n  }\n\n  onConditionChange(value: string): void {\n    this.condition = value;\n    this.conditionChange.emit(value);\n  }\n\n  onBranchStepChange(branch: ConditionBranch, step: TestCaseStepConfig, stepIndex: number): void {\n    this.branchStepChange.emit({ branch, step, stepIndex });\n  }\n\n  /** Re-emit openExternal from nested step group so redirect works for step groups inside condition branches. */\n  onNestedOpenExternal(payload: { step: TestCaseStepConfig }): void {\n    if (payload?.step) {\n      this.openExternal.emit(payload);\n    }\n  }\n\n  onNestedToggleExpanded(event: boolean | {config: TestCaseStepConfig, expanded: boolean}, branch: ConditionBranch, step: TestCaseStepConfig, index: number): void {\n    // Handle both boolean and object formats\n    if (typeof event === 'object' && event !== null && 'expanded' in event) {\n      // Object format from step-group: {config, expanded}\n      (step as any).expanded = event.expanded;\n      // Check if the event's config is a step-group (not the current step)\n      // This ensures nested step-group events bubble up correctly\n      if (this.isStepGroup(event.config)) {\n        // Re-emit the toggleExpanded event with the object format, preserving the original config\n        // Cast to satisfy TypeScript - the renderer accepts TestCaseStepConfig which includes StepGroupConfig\n        this.toggleExpanded.emit({config: event.config as any as ConditionStepConfig, expanded: event.expanded});\n      }\n    } else {\n      // Boolean format from other step types\n      (step as any).expanded = event as boolean;\n    }\n    this.onBranchStepChange(branch, step, index);\n  }\n\n  onAddStep(branch: ConditionBranch): void {\n    this.addStep.emit({ branch });\n  }\n\n  /** Handle addStepForLoop event from nested loop-step (empty state plus button). */\n  onAddStepForLoop(event: { loopStepConfig: LoopStepConfig }, branch: ConditionBranch): void {\n    // Re-emit addStepForLoop so it bubbles up to the portal, which will handle creating the step\n    // with the correct parentId (loop step id) and branch context\n    this.addStepForLoop.emit(event);\n  }\n\n  onDeleteStep(branch: ConditionBranch, stepIndex: number): void {\n    this.deleteStep.emit({ branch, stepIndex });\n  }\n\n  /** Re-emit edit from nested step in a branch so the portal can open edit modal (same as root level). */\n  onNestedEdit(event: { step: TestCaseStepConfig; index: number }): void {\n    if (event?.step != null) this.edit.emit(event as any);\n  }\n\n  /** Re-emit duplicate from nested step in a branch so the portal can duplicate (same as root level). */\n  onNestedDuplicate(event: any, step: TestCaseStepConfig): void {\n    this.duplicate.emit((event && event.step != null) ? event : { step } as any);\n  }\n\n  onAddBranch(): void {\n    this.addBranch.emit();\n  }\n\n  onDeleteBranch(branch: ConditionBranch): void {\n    const branchIndex = this.branches?.indexOf(branch) ?? 0;\n    const displayNumber = this.getBranchDisplayNumber(branchIndex);\n    this.deleteBranch.emit({ branch, stepNumber: displayNumber });\n  }\n\n  onNestedConditionAddBranch(nestedStep: ConditionStepConfig): void {\n    // Add a new branch to the nested condition step\n    if (!nestedStep.branches) {\n      nestedStep.branches = [];\n    }\n    const newBranch: ConditionBranch = {\n      type: nestedStep.branches.length === 0 ? 'if' : 'else',\n      label: nestedStep.branches.length === 0 ? 'IF TRUE' : 'ELSE',\n      stepType: StepTypes.CONDITION_IF,\n      nestedSteps: []\n    };\n    nestedStep.branches.push(newBranch);\n  }\n\n  onNestedConditionDeleteBranch(nestedStep: ConditionStepConfig, payload: ConditionBranch | { branch: ConditionBranch; stepNumber?: number | string }): void {\n    // Re-emit deleteBranch so step-list can open delete modal and call API.\n    const branch = payload && typeof payload === 'object' && 'branch' in payload ? (payload as { branch: ConditionBranch }).branch : (payload as ConditionBranch);\n    const branchIndex = this.branches?.indexOf(branch) ?? 0;\n    const displayNumber = this.getBranchDisplayNumber(branchIndex);\n    const toEmit: { branch: ConditionBranch; stepNumber?: number | string } =\n      payload && typeof payload === 'object' && 'branch' in payload\n        ? { branch: (payload as { branch: ConditionBranch }).branch, stepNumber: (payload as any).stepNumber ?? displayNumber }\n        : { branch: payload as ConditionBranch, stepNumber: displayNumber };\n    this.deleteBranch.emit(toEmit);\n  }\n\n  /** Forward nested step's delete event upward (e.g. a step inside a loop inside a branch). */\n  onNestedStepDelete(payload: { step: TestCaseStepConfig } | void): void {\n    if (payload && (payload as any).step) {\n      this.delete.emit(payload as { step: TestCaseStepConfig });\n    }\n  }\n\n  isNormalStep(step: TestCaseStepConfig): step is NormalStepConfig {\n    return 'eventType' in step;\n  }\n\n  isLoopStep(step: TestCaseStepConfig): step is LoopStepConfig {\n    return 'loopType' in step;\n  }\n\n  isConditionStep(step: TestCaseStepConfig): step is ConditionStepConfig {\n    return 'condition' in step && 'branches' in step;\n  }\n\n  isStepGroup(step: TestCaseStepConfig): step is StepGroupConfig {\n    return 'groupName' in step;\n  }\n\n  getBranchLabel(branch: ConditionBranch): string {\n    return branch.label || (branch.type === 'if' ? 'IF TRUE' : branch.type === 'else-if' ? 'ELSE IF' : 'ELSE');\n  }\n\n  /** Condition text for branch header display: IF uses main condition, ELSE IF/ELSE use branch.action */\n  getBranchConditionDisplay(branch: ConditionBranch): string {\n    if (branch.type === 'if') {\n      return this.condition ?? '';\n    }\n    return branch.action ?? '';\n  }\n\n  /** Start marker label for each branch: START IF, START ELSE IF, or START ELSE */\n  getStartBranchLabel(branch: ConditionBranch): string {\n    return branch.type === 'if' ? 'START IF' : branch.type === 'else-if' ? 'START ELSE IF' : 'START ELSE';\n  }\n\n  /** End marker label for each branch: END IF, END ELSE IF, or END ELSE */\n  getEndBranchLabel(branch: ConditionBranch): string {\n    return branch.type === 'if' ? 'END IF' : branch.type === 'else-if' ? 'END ELSE IF' : 'END ELSE';\n  }\n\n  /** START branch marker: first nested step's step number in this branch. */\n  getBranchMarkerStartStep(branch: ConditionBranch): string {\n    const steps = branch.nestedSteps;\n    if (!steps?.length) {\n      return String(this.stepNumber ?? '');\n    }\n    const first = steps[0] as any;\n    if (first?.stepNumber != null && first.stepNumber !== '') {\n      return String(first.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  /** END branch marker: last nested step's step number in this branch. */\n  getBranchMarkerEndStep(branch: ConditionBranch): string {\n    const steps = branch.nestedSteps;\n    if (!steps?.length) {\n      return String(this.stepNumber ?? '');\n    }\n    const last = steps[steps.length - 1] as any;\n    if (last?.stepNumber != null && last.stepNumber !== '') {\n      return String(last.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  /** END CONDITION marker: this condition step's display number. */\n  getEndConditionMarkerStepDisplay(): string {\n    return String(this.stepNumber ?? '');\n  }\n\n  /** Branch display number: full hierarchical number. IF = stepNumber (e.g. 2.1.50), ELSE IF = 2.1.51, ELSE = 2.1.52. */\n  getBranchDisplayNumber(branchIndex: number): number | string {\n    if (branchIndex === 0) {\n      return this.stepNumber;\n    }\n    const parts = String(this.stepNumber).split('.');\n    const lastNum = parseInt(parts[parts.length - 1], 10) || 0;\n    parts[parts.length - 1] = String(lastNum + branchIndex);\n    return parts.join('.');\n  }\n\n  /** Return the branch id after which a new ELSE IF should be inserted, based on the current edit context. */\n  getInsertAfterBranchId(): string | undefined {\n    if (this.editContext === 'stepRow' || this.editingBranchIndex === 0) {\n      return this.config.id != null ? String(this.config.id) : undefined;\n    } else if (this.editContext === 'branchRow' && this.editingBranchIndex > 0) {\n      const activeBranch = this.branches && this.branches.length > this.editingBranchIndex\n        ? this.branches[this.editingBranchIndex]\n        : null;\n      return activeBranch?.id != null ? String(activeBranch.id) : undefined;\n    }\n    return undefined;\n  }\n\n  /** Find branch in branches by id (for elseIfBranches which use same id). */\n  getBranchById(branchId?: string | number): ConditionBranch | undefined {\n    if (branchId == null) return undefined;\n    return this.branches?.find(b => b.id != null && String(b.id) === String(branchId));\n  }\n\n  /** Get branch index in branches by id. */\n  getBranchIndexById(branchId?: string | number): number {\n    const branch = this.getBranchById(branchId);\n    return branch != null ? (this.branches?.indexOf(branch) ?? -1) : -1;\n  }\n\n  getBranchColorClass(branch: ConditionBranch): string {\n    if (branch.type === 'if') {\n      return 'cqa-bg-[#0DBD7D1A]';\n    } else if (branch.type === 'else-if') {\n      return 'cqa-bg-yellow-50 cqa-border-yellow-200';\n    } else {\n      return 'cqa-bg-red-50 cqa-border-red-200';\n    }\n  }\n\n  getBranchTextColor(branch: ConditionBranch): string {\n    if (branch.type === 'if') {\n      return 'cqa-text-[#0D542B]';\n    } else if (branch.type === 'else-if') {\n      return 'cqa-text-yellow-700';\n    } else {\n      return 'cqa-text-red-700';\n    }\n  }\n\n  /** Created date for branch header display: branch-specific or fallback to config. */\n  getBranchCreatedDate(branch: ConditionBranch): number | undefined {\n    return branch.createdDate ?? this.config?.createdDate;\n  }\n\n  /** True when condition already has an ELSE branch (disables Add ELSE IF / Add ELSE). */\n  get hasElseBranch(): boolean {\n    return this.getAllBranchesFlat().some(b => b.type === 'else');\n  }\n\n  onOpenExternal(): void {\n    // Not used in condition step, but needed for recursive step groups\n  }\n\n  /** Shared init for edit mode; then call onEditFromStepRow or onEditFromBranchRow to set context. */\n  private initEditForm(branch?: ConditionBranch | null): void {\n    this.editSnapshot = {\n      conditionLeft: this.editForm?.get('conditionLeft')?.value,\n      conditionOperator: this.editForm?.get('conditionOperator')?.value,\n      conditionRight: this.editForm?.get('conditionRight')?.value,\n    };\n\n    let conditionLeftValue = '';\n    const configWithId = this.config as any;\n    const editingElseIf = !!branch && branch.type === 'else-if';\n    const hasTemplate =\n      !editingElseIf &&\n      configWithId.naturalTextActionId &&\n      this.naturalTextActionsOptions &&\n      this.naturalTextActionsOptions.length > 0;\n\n    if (hasTemplate) {\n      const matchingAction = this.naturalTextActionsOptions.find(\n        (option: any) => String(option.id) === String(configWithId.naturalTextActionId)\n      );\n      if (matchingAction) {\n        // For template-based conditions, use the full naturalText (it's a complete sentence)\n        conditionLeftValue = matchingAction.naturalText ?? matchingAction.name ?? matchingAction.value ?? '';\n      }\n    }\n\n    if (!conditionLeftValue) {\n      // No template or editing ELSE IF: parse from the appropriate condition string\n      const sourceText =\n        editingElseIf && branch?.action ? String(branch.action) : (this.condition ?? '');\n      const { left } = this.parseCondition(sourceText);\n      conditionLeftValue = left;\n    }\n\n    // Only parse operator and right if we don't have a template (templates are complete sentences)\n    if (!hasTemplate) {\n      const sourceText =\n        editingElseIf && branch?.action ? String(branch.action) : (this.condition ?? '');\n      const { operator, right } = this.parseCondition(sourceText);\n      this.editForm?.get('conditionOperator')?.setValue(operator);\n      this.editForm?.get('conditionRight')?.setValue(right);\n    } else {\n      // For templates, clear operator and right (template naturalText is the full condition)\n      this.editForm?.get('conditionOperator')?.setValue('is');\n      this.editForm?.get('conditionRight')?.setValue('');\n    }\n    \n    this.editForm?.get('conditionLeft')?.setValue(conditionLeftValue);\n    this.elseIfBranches = [];\n  }\n\n  /** Edit from step row: edit UI appears in the step row only (first branch stays read-only). */\n  onEditFromStepRow(): void {\n    this.initEditForm();\n    this.editContext = 'stepRow';\n  }\n\n  /** Edit from branch row: edit UI appears in that branch row (IF TRUE or ELSE IF). */\n  onEditFromBranchRow(branchIndex: number = 0): void {\n    const branch = this.branches && this.branches.length > branchIndex\n      ? this.branches[branchIndex]\n      : undefined;\n    this.initEditForm(branch);\n    this.editingBranchIndex = branchIndex;\n    this.editContext = 'branchRow';\n  }\n\n  /** @deprecated Use onEditFromStepRow or onEditFromBranchRow. Kept for compatibility. */\n  onEdit(): void {\n    this.initEditForm();\n    this.editContext = 'branchRow';\n  }\n\n  onEditCancel(): void {\n    this.editForm?.get('conditionLeft')?.setValue(this.editSnapshot.conditionLeft ?? '');\n    this.editForm?.get('conditionOperator')?.setValue(this.editSnapshot.conditionOperator ?? 'is');\n    this.editForm?.get('conditionRight')?.setValue(this.editSnapshot.conditionRight ?? '');\n    \n    // Reset all ELSE IF branches to their snapshots\n    this.elseIfBranches.forEach(branch => {\n      branch.form?.get('conditionLeft')?.setValue(branch.snapshot.conditionLeft ?? '');\n      branch.form?.get('conditionOperator')?.setValue(branch.snapshot.conditionOperator ?? 'is');\n      branch.form?.get('conditionRight')?.setValue(branch.snapshot.conditionRight ?? '');\n    });\n    \n    // Clear all ELSE IF branches\n    this.elseIfBranches = [];\n\n    this.editContext = null;\n    this.editingBranchIndex = 0;\n  }\n\n  /**\n   * Build payload for one ELSE IF branch (action, naturalTextActionId, templateVariablesData, testDataList)\n   * so the parent can create the step via POST then PUT when Apply is clicked.\n   */\n  private buildElseIfBranchPayload(branch: {\n    form: FormGroup;\n    selectedTemplate: any;\n    templateVariables: any[];\n    templateVariablesForm: FormGroup;\n  }): { action: string; naturalTextActionId?: number; templateVariablesData?: any; testDataList?: Array<{ testData: string; testDataType: string }>; selectedTemplate?: any; templateVariables?: any[] } {\n    const conditionLeft = branch.form?.get('conditionLeft')?.value ?? '';\n    const conditionOperator = branch.form?.get('conditionOperator')?.value ?? 'is';\n    const conditionRight = branch.form?.get('conditionRight')?.value ?? '';\n    let naturalTextActionId: number | undefined;\n    let naturalTextValue: string = conditionLeft;\n    if (conditionLeft && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n      const leftValue = String(conditionLeft);\n      const isNumericId = !isNaN(Number(leftValue)) && leftValue.trim() !== '';\n      const selectedAction: any = isNumericId\n        ? this.naturalTextActionsOptions.find((opt: any) => String(opt.id) === leftValue)\n        : this.naturalTextActionsOptions.find(\n            (opt: any) => opt.naturalText === conditionLeft || opt.name === conditionLeft || opt.value === conditionLeft\n          );\n      if (selectedAction) {\n        naturalTextActionId = selectedAction.id;\n        naturalTextValue = selectedAction.naturalText || selectedAction.name || selectedAction.value || conditionLeft;\n      }\n    }\n    const templateVariablesData: any = {};\n    const testDataList: Array<{ testData: string; testDataType: string }> = [];\n    // Hydrate templateVariables with current form values so step-list can pass them to\n    // StepBuilderService.buildActionFromTemplate (same function used by Edit In Depth).\n    const hydratedTemplateVariables: any[] = [];\n    if (branch.templateVariablesForm && branch.templateVariables && branch.templateVariables.length > 0) {\n      branch.templateVariables.forEach((variable: any) => {\n        const value = branch.templateVariablesForm.get(variable.name)?.value;\n        if (value !== undefined && value !== null && value !== '') {\n          templateVariablesData[variable.name] = value;\n          testDataList.push({ testData: String(value), testDataType: 'raw' });\n        }\n        hydratedTemplateVariables.push({ ...variable, value: value ?? variable.value });\n      });\n    }\n    // Fallback action (used when selectedTemplate has no htmlGrammar)\n    const fallbackAction = [naturalTextValue, conditionOperator, conditionRight].filter(Boolean).join(' ');\n\n    return {\n      action: fallbackAction || (branch.selectedTemplate?.naturalText ?? ''),\n      ...(naturalTextActionId !== undefined && { naturalTextActionId }),\n      ...(Object.keys(templateVariablesData).length > 0 && { templateVariablesData }),\n      ...(testDataList.length > 0 && { testDataList }),\n      ...(branch.selectedTemplate && { selectedTemplate: branch.selectedTemplate }),\n      ...(hydratedTemplateVariables.length > 0 && { templateVariables: hydratedTemplateVariables }),\n    };\n  }\n\n  onEditApply(): void {\n    const formValues = this.editForm.value;\n    const conditionLeft = formValues.conditionLeft ?? '';\n    const conditionOperator = formValues.conditionOperator ?? 'is';\n    const conditionRight = formValues.conditionRight ?? '';\n\n    // Find the selected natural text action and get naturalText (not ID)\n    let naturalTextActionId: number | undefined;\n    let naturalTextValue: string = conditionLeft; // Default to conditionLeft\n    \n    if (conditionLeft && this.naturalTextActionsOptions && this.naturalTextActionsOptions.length > 0) {\n      const leftValue = String(conditionLeft);\n      const isNumericId = !isNaN(Number(leftValue)) && leftValue.trim() !== '';\n      \n      let selectedAction: any;\n      if (isNumericId) {\n        // Find by ID and get naturalText\n        selectedAction = this.naturalTextActionsOptions.find(\n          (option: any) => String(option.id) === leftValue\n        );\n      } else {\n        // Find by naturalText, name, or value\n        selectedAction = this.naturalTextActionsOptions.find(\n          (option: any) => option.naturalText === conditionLeft || option.name === conditionLeft || option.value === conditionLeft\n        );\n      }\n      \n      if (selectedAction) {\n        naturalTextActionId = selectedAction.id;\n        // Use naturalText if available, otherwise fall back to name or value\n        naturalTextValue = selectedAction.naturalText || selectedAction.name || selectedAction.value || conditionLeft;\n      }\n    }\n    \n    // Collect template variables values for event object\n    const templateVariablesData: any = {};\n    // Build testDataList array in the order of template variables\n    const testDataList: Array<{ testData: string; testDataType: string }> = [];\n    \n    if (this.templateVariablesForm && this.templateVariables.length > 0) {\n      this.templateVariables.forEach(variable => {\n        const value = this.templateVariablesForm.get(variable.name)?.value;\n        if (value !== undefined && value !== null && value !== '') {\n          // Add to event object (e.g., source_value, target_value)\n          templateVariablesData[variable.name] = value;\n          // Add to testDataList array (order matters - maintain template variable order)\n          testDataList.push({\n            testData: String(value),\n            testDataType: 'raw'\n          });\n        }\n      });\n    }\n    \n    // Build condition string\n    // If we have a naturalTextActionId (template), use the full naturalTextValue as-is (it's already a complete sentence)\n    // Otherwise, build from parts: conditionLeft + operator + conditionRight\n    let rawCondition: string;\n    if (naturalTextActionId !== undefined) {\n      // Template-based condition: naturalTextValue is the full template (e.g., \"Check the text #{label} is present on the current page\")\n      rawCondition = naturalTextValue;\n    } else {\n      // Manual condition: build from parts\n      rawCondition = [naturalTextValue, conditionOperator, conditionRight].filter(Boolean).join(' ');\n    }\n\n    const isEditingBranchRow = this.editContext === 'branchRow';\n    const branchForEdit = isEditingBranchRow && this.branches && this.branches.length > this.editingBranchIndex\n      ? this.branches[this.editingBranchIndex]\n      : null;\n    const isEditingElseIfBranch = !!branchForEdit && branchForEdit.type === 'else-if';\n\n    // For display in the header, substitute #{variable} placeholders with HTML badges using templateVariablesData.\n    // This mirrors the renderer behavior so users never see raw #{label} text while editing.\n    // - For IF (step row / IF branch edit), update main condition header.\n    // - For ELSE IF edit, update only that branch's action text; keep IF header unchanged.\n    const formattedForDisplay = this.substituteTemplateVariablesToHtmlForCondition(rawCondition, templateVariablesData);\n    if (isEditingElseIfBranch && branchForEdit) {\n      // Update ELSE IF branch action for immediate UI feedback\n      (branchForEdit as any).action = formattedForDisplay;\n    } else {\n      this.condition = formattedForDisplay;\n    }\n\n    // Build payload for each newly added ELSE IF (so parent can call POST then PUT when Apply is clicked)\n    const newElseIfBranches = this.elseIfBranches.map(b => this.buildElseIfBranchPayload(b));\n    \n    // Update config with new values\n    const updatedConfigBase: ConditionStepConfig & {\n      id?: string;\n      naturalTextActionId?: number;\n      templateVariablesData?: any;\n      testDataList?: Array<{ testData: string; testDataType: string }>;\n      newElseIfBranches?: Array<{ action: string; naturalTextActionId?: number; templateVariablesData?: any; testDataList?: Array<{ testData: string; testDataType: string }>; selectedTemplate?: any; templateVariables?: any[] }>;\n      isElseIfBranch?: boolean;\n      parentConditionId?: string;\n    } = {\n      ...this.config,\n      stepType: this.config.stepType || StepTypes.CONDITION_IF, // Ensure stepType is set\n      ...(naturalTextActionId !== undefined && { naturalTextActionId } as any),\n      ...(Object.keys(templateVariablesData).length > 0 && { templateVariablesData } as any),\n      ...(testDataList.length > 0 && { testDataList } as any),\n      ...(newElseIfBranches.length > 0 && { newElseIfBranches } as any),\n    };\n\n    let updatedConfig: typeof updatedConfigBase;\n    if (isEditingElseIfBranch && branchForEdit && branchForEdit.id != null) {\n      // Editing existing ELSE IF branch: target that branch's step ID and send raw condition so backend updates the branch only.\n      // Any new ELSE IF added here chains off this specific ELSE IF (handled by step-list since updatedConfig.id = this branch's id).\n      updatedConfig = {\n        ...updatedConfigBase,\n        id: String(branchForEdit.id),\n        condition: rawCondition,\n        isElseIfBranch: true,\n        parentConditionId: String(this.config.id),\n      } as any;\n    } else {\n      // IF condition edit (step row or IF branch row): use formatted condition for display.\n      // When editing from the IF TRUE branch row (branchIndex === 0), any new ELSE IFs must be\n      // inserted directly after the IF branch — not at the end of the chain.\n      // Pass insertAfterBranchId so step-list knows the exact insertion point.\n      const isEditingIfBranchRow = isEditingBranchRow && branchForEdit?.type === 'if' && branchForEdit.id != null;\n      updatedConfig = {\n        ...updatedConfigBase,\n        condition: this.condition,\n        ...(isEditingIfBranchRow && { insertAfterBranchId: String(branchForEdit!.id) } as any),\n      } as any;\n    }\n    \n    // Emit individual change event\n    this.conditionChange.emit(this.condition);\n    \n    // Emit step update event with full config (includes newElseIfBranches so parent can create steps on Apply)\n    console.log('Condition-step: Emitting stepUpdate event', updatedConfig);\n    this.stepUpdate.emit(updatedConfig);\n\n    this.editContext = null;\n  }\n\n  /**\n   * Local helper to substitute #{variable} placeholders in the condition text with HTML badge spans.\n   * Mirrors the portal renderer's substituteTemplateVariablesToHtml so inline edit mode never shows raw #{label}.\n   */\n  private substituteTemplateVariablesToHtmlForCondition(\n    text: string,\n    variables: Record<string, unknown> | null | undefined\n  ): string {\n    if (!text || typeof text !== 'string') return text;\n    const data = variables && typeof variables === 'object' ? variables : {};\n    const escape = (v: string) => {\n      const div = document.createElement('div');\n      div.textContent = v;\n      return div.innerHTML;\n    };\n    const elementVars = ['label', 'description', 'element', 'selector', 'ai_task', 'query', 'custom_code'];\n    const attributeVars = ['attribute'];\n\n    return text.replace(/\\#\\{([^}]+)\\}/g, (_, key: string) => {\n      const val = (data as any)[key];\n      const displayVal = val != null && val !== '' ? String(val) : key;\n      const escaped = escape(displayVal);\n      if (elementVars.includes(key)) {\n        return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"element\">${escaped}</span>`;\n      }\n      if (attributeVars.includes(key)) {\n        return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"attribute\">${escaped}</span>`;\n      }\n      return `<span data-key=\"${key}\" data-event-key=\"${key}\" class=\"test_data\">${escaped}</span>`;\n    });\n  }\n\n  /**\n   * Emit editInDepth. When branch is provided (ELSE IF/ELSE branch row), use branch's nested condition step\n   * and branch display number for correct \"Edit Step N\" title. When isCreateMode (new ELSE IF), modal shows \"Create In depth\" and calls create API on save.\n   */\n  onEditInDepth(templateOverride?: any, branch?: ConditionBranch, branchIndex?: number, isCreateMode?: boolean, elseIfBranch?: any, insertAfterBranchId?: string): void {\n    this.moreOptions.emit();\n    let step: TestCaseStepConfig;\n    let index: number | undefined;\n    if (branch != null && branchIndex != null && branchIndex >= 0 && !isCreateMode) {\n      // Branch row (ELSE IF/ELSE) - existing branch: use nested condition step if present, else main config with branch id\n      const nestedCondition = branch.nestedSteps?.[0] as ConditionStepConfig | undefined;\n      step = (nestedCondition && this.isConditionStep(nestedCondition))\n        ? nestedCondition\n        : ({ ...this.config, id: branch.id != null ? String(branch.id) : this.config.id } as TestCaseStepConfig);\n      // Display index: getBranchDisplayNumber(1)=93 -> index 92 for \"Edit Step 93\"\n      const displayNum = this.getBranchDisplayNumber(branchIndex);\n      index = typeof displayNum === 'number' ? displayNum - 1 : (typeof displayNum === 'string' ? parseInt(String(displayNum), 10) - 1 : 0);\n    } else if (isCreateMode) {\n      // Create mode (new ELSE IF branch) - don't set index so modal shows \"Create Step\"\n      step = this.config as TestCaseStepConfig;\n      index = undefined;\n    } else {\n      // Main step row, IF branch\n      index = typeof this.index === 'number'\n        ? this.index\n        : (typeof this.stepNumber === 'number' ? this.stepNumber : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) : 0));\n      step = this.config as TestCaseStepConfig;\n    }\n    const payload: { step: TestCaseStepConfig; index?: number; templateOverride?: any; isCreateMode?: boolean; createModeBranchData?: any } = {\n      step,\n      index: index !== undefined ? (isNaN(index) ? 0 : Math.max(0, index)) : undefined,\n    };\n    if (templateOverride) {\n      payload.templateOverride = templateOverride;\n    }\n    if (isCreateMode && elseIfBranch) {\n      payload.isCreateMode = true;\n      // Pass template variables form data and insertion point for create mode\n      payload.createModeBranchData = {\n        templateVariablesForm: elseIfBranch.templateVariablesForm,\n        selectedTemplate: elseIfBranch.selectedTemplate,\n        ...(insertAfterBranchId != null && { insertAfterBranchId })\n      };\n    }\n    this.editInDepth.emit(payload);\n  }\n\n  onLink(): void {\n    // Not used in condition step, but needed for recursive step groups\n  }\n\n  onDuplicate(): void {\n    this.duplicate.emit();\n  }\n\n  onDelete(): void {\n    this.delete.emit();\n  }\n\n  onSelectionChange(checked: boolean): void {\n    this.selected = checked;\n    this.selectionChange.emit(checked);\n  }\n\n  onMoreOptions(): void {\n    this.moreOptions.emit();\n  }\n\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'IF / ELSE Step Details',\n        description: this.config.description,\n      });\n    }\n  }\n  \n  /** Get select config for a template variable */\n  getSelectConfigForVariable(variable: any, branchIdOrIsElse: string | boolean = false): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (variable.options || []).map((opt: string) => ({\n      id: opt,\n      value: opt,\n      name: opt,\n      label: opt\n    }));\n\n    // If branchIdOrIsElse is a string, it's a branch ID; otherwise it's a boolean for backward compatibility\n    let form: FormGroup;\n    if (typeof branchIdOrIsElse === 'string') {\n      const branch = this.elseIfBranches.find(b => b.id === branchIdOrIsElse);\n      form = branch?.templateVariablesForm || this.fb.group({});\n    } else {\n      form = branchIdOrIsElse ? (this.elseIfBranches[0]?.templateVariablesForm || this.fb.group({})) : this.templateVariablesForm;\n    }\n\n    return {\n      key: variable.name,\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: options,\n      onChange: (value: any) => {\n        if (form && form.get(variable.name)) {\n          form.get(variable.name)?.setValue(value);\n        }\n      }\n    };\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-border cqa-border-solid cqa-border-[#E5E7EB]\" style=\"min-height: 50px\">\n  <!-- Inline Edit Mode: shown in first branch row below when user clicks Edit from branch row (top block hidden) -->\n  <div *ngIf=\"false && isEditing\" class=\"cqa-py-2.5 cqa-px-4 cqa-flex cqa-flex-col cqa-gap-3\" (click)=\"$event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\" style=\"min-height: 50px\">\n    <!-- First Row: CONDITION tag, autocomplete, IF/ELSE indicators, Edit In depth, Cancel/Apply -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-justify-between\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-grow\">\n        <!-- CONDITION Tag (orange) -->\n        <span class=\"cqa-px-1.5 cqa-rounded-md cqa-text-[#EA580C] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#FFEDD5]\">\n          CONDITION\n        </span>\n\n        <!-- First field: left operand (e.g. Usertype) - autocomplete with IF_CONDITION natural text actions -->\n        <cqa-autocomplete\n          *ngIf=\"editForm\"\n          [options]=\"conditionLeftAutocompleteOptions\"\n          [value]=\"conditionLeftDisplayValue\"\n          (valueChange)=\"onEditFormFieldChange('conditionLeft', $event)\"\n          (optionSelect)=\"onConditionLeftSelect($event)\"\n          placeholder=\"Select Condition\"\n          [fullWidth]=\"true\"\n          class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-autocomplete>\n\n        <!-- Second Row: Template Variables Section (shown when template is selected, inline before Edit In depth) -->\n        <div *ngIf=\"selectedTemplate && templateVariables && templateVariables.length > 0\" class=\"cqa-flex cqa-flex-row cqa-flex-wrap cqa-gap-3\">\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\">\n                <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-gray-700\">\n                  {{ variable.label }}\n                </label>\n                <mat-slide-toggle\n                  [checked]=\"templateVariablesForm.get(variable.name)?.value || variable.value || false\"\n                  (change)=\"templateVariablesForm.get(variable.name)?.setValue($event.checked)\"\n                  color=\"primary\">\n                </mat-slide-toggle>\n              </div>\n            </ng-container>\n            \n            <!-- Non-boolean variables -->\n            <ng-container *ngIf=\"variable.type !== 'boolean' && variable.name !== 'custom_code'\">\n              <!-- Dropdown for select variables -->\n              <ng-container *ngIf=\"variable.name === 'type' || variable.name === 'scrollTo' || variable.options\">\n                <div class=\"cqa-flex cqa-flex-col\" style=\"min-width: 150px;\">\n                  <!-- <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                    {{ variable.label }}\n                  </label> -->\n                  <cqa-dynamic-select \n                    [form]=\"templateVariablesForm\"\n                    [config]=\"getSelectConfigForVariable(variable, false)\">\n                  </cqa-dynamic-select>\n                </div>\n              </ng-container>\n              <!-- Text Input for other variables -->\n              <ng-container *ngIf=\"variable.name !== 'type' && variable.name !== 'scrollTo' && !variable.options\">\n                <div class=\"cqa-flex cqa-flex-col\" style=\"min-width: 150px;\">\n                  <!-- <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                    {{ variable.label }}\n                  </label> -->\n                  <cqa-custom-input\n                    [placeholder]=\"'Enter ' + variable.label\"\n                    [value]=\"templateVariablesForm.get(variable.name)?.value || variable.value || ''\"\n                    [fullWidth]=\"true\"\n                    (valueChange)=\"templateVariablesForm.get(variable.name)?.setValue($event)\">\n                  </cqa-custom-input>\n                </div>\n              </ng-container>\n            </ng-container>\n          </ng-container>\n        </div>\n\n        <!-- IF / ELSE indicators -->\n        <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF] cqa-flex cqa-items-center cqa-gap-1.5\">\n          <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6.66634 2L2.99967 5.66667L1.33301 4\" stroke=\"#008236\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          IF\n        </span>\n        <!-- Add ELSE IF button - disabled when ELSE already exists -->\n        <button\n          type=\"button\"\n          (click)=\"onAddElse()\"\n          [disabled]=\"hasElseBranch\"\n          class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors\"\n          [class.cqa-cursor-pointer]=\"!hasElseBranch\"\n          [class.cqa-cursor-not-allowed]=\"hasElseBranch\"\n          [class.cqa-opacity-60]=\"hasElseBranch\">\n          Add ELSE IF\n        </button>\n        <!-- Add Else button - disabled when ELSE already exists -->\n        <button\n          type=\"button\"\n          (click)=\"onAddElseBranch()\"\n          [disabled]=\"hasElseBranch\"\n          class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors\"\n          [class.cqa-cursor-pointer]=\"!hasElseBranch\"\n          [class.cqa-cursor-not-allowed]=\"hasElseBranch\"\n          [class.cqa-opacity-60]=\"hasElseBranch\">\n          Add ELSE\n        </button>\n\n        <!-- Edit In depth link -->\n        <a href=\"#\" (click)=\"onEditInDepth(); $event.preventDefault()\"\n          class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">\n          Edit In depth\n          <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg>\n        </a>      \n      </div>\n      <!-- Cancel / Apply buttons - shown on IF row when no ELSE IF branches are present -->\n      <div *ngIf=\"elseIfBranches.length === 0\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\" (clicked)=\"onEditCancel()\"></cqa-button>\n        <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\" (clicked)=\"onEditApply()\"></cqa-button>\n      </div>\n    </div>\n    \n    \n  </div>\n\n  <!-- Step row: always visible (no template edit here; template edit only in branch row below). Has edit/delete. -->\n  <div\n    [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + ((config?.shouldSkip || isParentSkipped) ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"(config?.shouldSkip || isParentSkipped) ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\"\n    style=\"border-bottom: 1px solid #E5E7EB; min-height: 50px\">\n    <!-- Checkbox/Drag Handle column - same structure as normal-step for alignment -->\n    <div *ngIf=\"!isInsideStepGroup\" class=\"cqa-inline-flex cqa-items-center\">\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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check-condition\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n    </div>\n    <!-- Lock: inside step row (same background/border as row when in group) -->\n    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\n    </div>\n    <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n    <!-- Expand/Collapse Icon -->\n    <button type=\"button\" (click)=\"onToggleExpanded()\" class=\"cqa-p-0\">\n      <svg [class.cqa-rotate-180]=\"!expanded\" class=\"cqa-transition-transform\" width=\"16\" height=\"16\"\n        viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M12 10L8 6L4 10\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n          stroke-linejoin=\"round\" />\n      </svg>\n    </button>\n\n    <!-- IF/ELSE Icon -->\n    <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M4 2V10\" stroke=\"#7B3306\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path\n          d=\"M12 6C13.1046 6 14 5.10457 14 4C14 2.89543 13.1046 2 12 2C10.8954 2 10 2.89543 10 4C10 5.10457 10.8954 6 12 6Z\"\n          stroke=\"#7B3306\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path\n          d=\"M4 14C5.10457 14 6 13.1046 6 12C6 10.8954 5.10457 10 4 10C2.89543 10 2 10.8954 2 12C2 13.1046 2.89543 14 4 14Z\"\n          stroke=\"#7B3306\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M12 6C12 7.5913 11.3679 9.11742 10.2426 10.2426C9.11742 11.3679 7.5913 12 6 12\" stroke=\"#7B3306\"\n          stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg></div>\n\n    <!-- IF/ELSE Label -->\n    <span class=\"cqa-font-semibold cqa-text-[#7B3306] cqa-text-[12px] cqa-leading-none\">\n      CONDITION\n    </span>\n\n    <!-- Step row: read-only (condition, summary, actions) when not editing step row -->\n    <ng-container *ngIf=\"editContext !== 'stepRow'\">\n      <!-- First condition text as plain text (no HTML) -->\n      <div *ngIf=\"getConditionPlainText()\" class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-ml-2 cqa-flex-1 cqa-flex-wrap cqa-px-1 cqa-min-w-0\">\n        <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-truncate\">{{ getConditionPlainText() }}</span>\n      </div>\n\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-ml-auto cqa-flex-wrap cqa-px-1 cqa-self-center\">\n        <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n        <button\n          *ngIf=\"editable && !isInsideStepGroup && !isReorder\"\n          type=\"button\"\n          (click)=\"onSkipToggle(); $event.stopPropagation()\"\n          [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\"\n          [style.color]=\"config?.shouldSkip ? '#1447E6' : null\"\n          class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"\n        >\n          <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </button>\n        <!-- Branch type badges: IF, ELSE IF (with count), ELSE -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-flex-shrink-0\">\n          <span *ngFor=\"let badge of getBranchTypeBadges()\"\n            [class]=\"'cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-0.5 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium ' + badge.badgeClass\">\n            {{ badge.label }}\n            <ng-container *ngIf=\"badge.count\">+{{ badge.count }}</ng-container>\n          </span>\n        </div>\n        <div\n          class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\">\n          {{ getStepsSummary() }}\n        </div>\n        <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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    </ng-container>\n\n    <!-- Step row: edit mode (CONDITION, autocomplete, IF, Add ELSE IF, Add ELSE, Edit In depth, Cancel, Apply) when editContext === 'stepRow' -->\n    <ng-container *ngIf=\"editContext === 'stepRow'\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-ml-2 cqa-flex-1 cqa-flex-wrap cqa-min-w-0\">\n        <span class=\"cqa-px-1.5 cqa-rounded-md cqa-text-[#EA580C] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#FFEDD5]\">CONDITION</span>\n        <cqa-autocomplete\n          *ngIf=\"editForm\"\n          [options]=\"conditionLeftAutocompleteOptions\"\n          [value]=\"conditionLeftDisplayValue\"\n          (valueChange)=\"onEditFormFieldChange('conditionLeft', $event)\"\n          (optionSelect)=\"onConditionLeftSelect($event)\"\n          placeholder=\"Select Condition\"\n          [fullWidth]=\"true\"\n          class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-autocomplete>\n        <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF] cqa-flex cqa-items-center cqa-gap-1.5\">IF</span>\n        <button type=\"button\" (click)=\"onAddElse(0)\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors cqa-cursor-pointer\">Add ELSE IF</button>\n        <button type=\"button\" (click)=\"onAddElseBranch()\" [disabled]=\"hasElseBranch\" [attr.aria-disabled]=\"hasElseBranch\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors\" [class.cqa-cursor-pointer]=\"!hasElseBranch\" [class.cqa-cursor-not-allowed]=\"hasElseBranch\" [class.cqa-opacity-60]=\"hasElseBranch\">Add ELSE</button>\n        <a href=\"#\" (click)=\"onEditInDepth(); $event.preventDefault()\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">Edit In depth<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-shrink-0\">\n        <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\" (clicked)=\"onEditCancel()\"></cqa-button>\n        <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\" (clicked)=\"onEditApply()\"></cqa-button>\n      </div>\n    </ng-container>\n  </div>\n\n  <!-- Expanded Content with Branches (shown when expanded or when editing so edit UI appears in first branch row) -->\n  <div *ngIf=\"expanded || isEditing\" class=\"cqa-flex cqa-flex-col\">\n    <!-- Branches (IF TRUE, ELSE IF, ELSE) -->\n    <ng-container *ngFor=\"let branch of branches; let branchIndex = index\">\n    <div class=\"condition-branch-row cqa-flex cqa-flex-col\" [attr.data-branch-id]=\"branch?.id\">\n      <!-- Edit mode (IF TRUE branch): shows CONDITION, autocomplete, IF, Add ELSE IF, Add ELSE, Edit In depth, Edit/Delete, Cancel/Apply -->\n      <div\n        *ngIf=\"editContext === 'branchRow' && branchIndex === 0 && editingBranchIndex === 0\"\n        (click)=\"$event.stopPropagation()\"\n        (mousedown)=\"$event.stopPropagation()\"\n        [class]=\"'cqa-px-4 cqa-py-2.5 cqa-text-[12px] cqa-leading-[15px] cqa-flex cqa-items-center cqa-gap-3 cqa-justify-between cqa-flex-wrap ' + getBranchTextColor(branch) + ' ' + getBranchColorClass(branch)\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-grow cqa-flex-wrap cqa-min-w-0\">\n          <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px] cqa-flex-shrink-0\">{{ getBranchDisplayNumber(branchIndex) }}</span>\n          <span>{{ getBranchLabel(branch) }}</span>\n          <span class=\"cqa-px-1.5 cqa-rounded-md cqa-text-[#EA580C] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#FFEDD5]\">CONDITION</span>\n          <cqa-autocomplete\n            *ngIf=\"editForm\"\n            [options]=\"conditionLeftAutocompleteOptions\"\n            [value]=\"conditionLeftDisplayValue\"\n            (valueChange)=\"onEditFormFieldChange('conditionLeft', $event)\"\n            (optionSelect)=\"onConditionLeftSelect($event)\"\n            placeholder=\"Select Condition\"\n            [fullWidth]=\"true\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-autocomplete>\n          <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF] cqa-flex cqa-items-center cqa-gap-1.5\">IF</span>\n          <button type=\"button\" (click)=\"onAddElse(0); $event.stopPropagation()\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors cqa-cursor-pointer\">Add ELSE IF</button>\n          <button type=\"button\" (click)=\"onAddElseBranch(); $event.stopPropagation()\" [disabled]=\"hasElseBranch\" [attr.aria-disabled]=\"hasElseBranch\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors\" [class.cqa-cursor-pointer]=\"!hasElseBranch\" [class.cqa-cursor-not-allowed]=\"hasElseBranch\" [class.cqa-opacity-60]=\"hasElseBranch\">Add ELSE</button>\n          <a href=\"#\" (click)=\"onEditInDepth(undefined, branch, 0); $event.preventDefault()\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">Edit In depth<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n        </div>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-shrink-0\">\n          <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\" (clicked)=\"onEditCancel()\"></cqa-button>\n          <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\" (clicked)=\"onEditApply()\"></cqa-button>\n        </div>\n      </div>\n      <!-- Edit mode (ELSE IF branch): shows CONDITION, autocomplete, Add ELSE IF / Add ELSE, Edit In depth, Cancel/Apply -->\n      <div\n        *ngIf=\"editContext === 'branchRow' && branchIndex === editingBranchIndex && branch.type === 'else-if'\"\n        (click)=\"$event.stopPropagation()\"\n        (mousedown)=\"$event.stopPropagation()\"\n        [class]=\"'cqa-px-4 cqa-py-2.5 cqa-text-[12px] cqa-leading-[15px] cqa-flex cqa-items-center cqa-gap-3 cqa-justify-between cqa-flex-wrap ' + getBranchTextColor(branch) + ' ' + getBranchColorClass(branch)\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-grow cqa-flex-wrap cqa-min-w-0\">\n          <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px] cqa-flex-shrink-0\">{{ getBranchDisplayNumber(branchIndex) }}</span>\n          <span>{{ getBranchLabel(branch) }}</span>\n          <span class=\"cqa-px-1.5 cqa-rounded-md cqa-text-[#EA580C] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#FFEDD5]\">CONDITION</span>\n          <!-- ELSE IF condition autocomplete: same options and value model as IF, but initialized from this branch's condition -->\n          <cqa-autocomplete\n            *ngIf=\"editForm\"\n            [options]=\"conditionLeftAutocompleteOptions\"\n            [value]=\"conditionLeftDisplayValue\"\n            (valueChange)=\"onEditFormFieldChange('conditionLeft', $event)\"\n            (optionSelect)=\"onConditionLeftSelect($event)\"\n            placeholder=\"Select Condition\"\n            [fullWidth]=\"true\"\n            class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-autocomplete>\n          <button type=\"button\" (click)=\"onAddElse(branchIndex); $event.stopPropagation()\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors cqa-cursor-pointer\">Add ELSE IF</button>\n          <button type=\"button\" (click)=\"onAddElseBranch(); $event.stopPropagation()\" [disabled]=\"hasElseBranch\" [attr.aria-disabled]=\"hasElseBranch\" class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors\" [class.cqa-cursor-pointer]=\"!hasElseBranch\" [class.cqa-cursor-not-allowed]=\"hasElseBranch\" [class.cqa-opacity-60]=\"hasElseBranch\">Add ELSE</button>\n          <a href=\"#\" (click)=\"onEditInDepth(undefined, branch, branchIndex); $event.preventDefault()\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">Edit In depth<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n        </div>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-shrink-0\">\n          <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\" (clicked)=\"onEditCancel()\"></cqa-button>\n          <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\" (clicked)=\"onEditApply()\"></cqa-button>\n        </div>\n      </div>\n      <!-- Branch Header (read-only): display when not editing this branch row. Order: branch content (left), then step-actions, then date (right, same as other steps). -->\n      <div\n        *ngIf=\"editContext !== 'branchRow' || branchIndex !== editingBranchIndex\"\n        [class]=\"'cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-leading-[15px] cqa-flex cqa-items-center cqa-gap-2 cqa-justify-between ' + getBranchTextColor(branch) + ' ' + getBranchColorClass(branch)\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-grow cqa-flex-wrap cqa-min-w-0\">\n          <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px] cqa-flex-shrink-0\">{{ getBranchDisplayNumber(branchIndex) }}</span>\n          <span>{{ getBranchLabel(branch) }}</span>\n          <span\n            *ngIf=\"getBranchConditionDisplay(branch)\"\n            [innerHTML]=\"getBranchConditionDisplay(branch) | cqaSafeHtml\"\n            (click)=\"onConditionActionClick($event, branch)\"\n            class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format\"></span>\n          <ng-container *ngIf=\"getBranchEventDetailsForDisplay(branch).length > 0\">\n            <span *ngFor=\"let item of getBranchEventDetailsForDisplay(branch)\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-py-0.5 cqa-px-2 cqa-rounded cqa-text-[12px] cqa-leading-[15px] cqa-bg-[#F3F4F6] cqa-text-[#374151] cqa-border cqa-border-solid cqa-border-[#E5E7EB]\" (click)=\"onConditionActionClick($event, branch)\">\n              <span class=\"cqa-font-medium cqa-text-[#6B7280]\">{{ item.key }}:</span>\n              <span class=\"cqa-text-[#111827]\">{{ item.value }}</span>\n            </span>\n          </ng-container>\n        </div>\n        <!-- Right section: step-actions then date (same order as other step types) -->\n        <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2 cqa-flex-shrink-0\">\n          <button *ngIf=\"branchIndex === 0 || branch.type === 'else-if'\" type=\"button\" (click)=\"onEditFromBranchRow(branchIndex); $event.stopPropagation()\" title=\"Edit\" 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\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n          <button *ngIf=\"branchIndex === 0 || branch.type === 'else-if'\" type=\"button\" (click)=\"onEditFromBranchRow(branchIndex); $event.stopPropagation()\" title=\"Edit\" 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\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n          <button type=\"button\" (click)=\"branchIndex === 0 ? onDelete() : onDeleteBranch(branch); $event.stopPropagation()\" title=\"{{ branchIndex === 0 ? 'Delete step' : 'Delete branch' }}\" 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\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n        </div>\n        <span *ngIf=\"getBranchCreatedDate(branch)\" class=\"step-date cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0 cqa-ml-auto\">{{ getBranchCreatedDate(branch) | date:'d MMM yyyy' }}</span>\n      </div>\n\n      <!-- Empty branch inside a step group: no START/END markers -->\n      <div\n        *ngIf=\"branch.nestedSteps?.length === 0 && isInsideStepGroup\"\n        class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-text-center cqa-text-[#1C398E] cqa-font-semibold cqa-text-[12px] cqa-leading-[15px] cqa-bg-[rgba(219,234,254,0.5)]\">\n        No steps added\n      </div>\n\n      <!-- START marker per branch: START IF, START ELSE IF, or START ELSE - only when branch has nested steps -->\n      <div *ngIf=\"branch.nestedSteps?.length > 0\" class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n        <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">{{ getStartBranchLabel(branch) }} : {{ getBranchMarkerStartStep(branch) }}</span>\n      </div>\n\n      <!-- Branch Content (Nested Steps – renderer dispatches by step type, n-level nesting) -->\n      <div *ngIf=\"!isReorder || isInsideStepGroup\" class=\"cqa-flex cqa-flex-col\">\n        <cqa-test-case-details-renderer\n          *ngFor=\"let step of branch.nestedSteps; let i = index\"\n          [step]=\"step\"\n          [index]=\"i\"\n          [selected]=\"$any(step).selected\"\n          [branch]=\"branch\"\n          [isNested]=\"true\"\n          [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n          [isInsideForLoop]=\"isInsideForLoop\"\n          [isInsideStepGroup]=\"isInsideStepGroup\"\n          [isReorder]=\"isReorder\"\n          [nestingLevel]=\"(nestingLevel || 0) + 1\"\n          [addStepBetween]=\"addStepBetween\"\n          [editable]=\"editable\"\n          [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n          [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n          [currentTestCaseId]=\"currentTestCaseId\"\n          [testCaseTestDataId]=\"testCaseTestDataId\"\n          (branchStepChange)=\"onBranchStepChange($event.branch, $event.step, $event.stepIndex)\"\n          (addStepForBranch)=\"onAddStep($event.branch)\"\n          (addStepForLoop)=\"onAddStepForLoop($event, branch)\"\n          (deleteStepWithBranch)=\"onDeleteStep($event.branch, $event.stepIndex)\"\n          (delete)=\"onNestedStepDelete($event)\"\n          (toggleExpanded)=\"onNestedToggleExpanded($event, branch, step, i)\"\n          (groupNameChange)=\"$any(step).groupName = $event; onBranchStepChange(branch, step, i)\"\n          (descriptionChange)=\"$any(step).description = $event; onBranchStepChange(branch, step, i)\"\n          (reusableChange)=\"$any(step).reusable = $event; onBranchStepChange(branch, step, i)\"\n          (openExternal)=\"onNestedOpenExternal($event)\"\n          (edit)=\"onNestedEdit($event)\"\n          (link)=\"onBranchStepChange(branch, step, i)\"\n          (duplicate)=\"onNestedDuplicate($event, step)\"\n          (viewDetails)=\"viewDetails.emit($event)\"\n          (conditionChange)=\"$any(step).condition = $event; onBranchStepChange(branch, step, i)\"\n          (addBranch)=\"onNestedConditionAddBranch($any(step)); onBranchStepChange(branch, step, i)\"\n          (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event); onBranchStepChange(branch, step, i)\"\n          (testDataProfileChange)=\"$any(step).testDataProfile = $event; onBranchStepChange(branch, step, i)\"\n          (startStepChange)=\"$any(step).startStep = $event; onBranchStepChange(branch, step, i)\"\n          (endStepChange)=\"$any(step).endStep = $event; onBranchStepChange(branch, step, i)\"\n          (maxIterationsChange)=\"$any(step).maxIterations = $event; onBranchStepChange(branch, step, i)\"\n          (eventTypeChange)=\"$any(step).eventType = $event; onBranchStepChange(branch, step, i)\"\n          (parameterChange)=\"onBranchStepChange(branch, step, i)\"\n          (selectionChange)=\"$any(step).selected = $event; onBranchStepChange(branch, step, i)\"\n          (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n          (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n          (stepUpdate)=\"stepUpdate.emit($event)\"\n          (dndDropInZone)=\"dndDropInZone.emit($event)\"\n          (clickAction)=\"onNestedClickAction($event)\"\n          (editInDepth)=\"editInDepth.emit($event)\"\n          (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\"\n        >\n        </cqa-test-case-details-renderer>\n      </div>\n      <div *ngIf=\"isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n           [style.min-height.px]=\"branch.nestedSteps.length === 0 ? 52 : null\"\n           [dndDropzone]=\"['step']\"\n           dndEffectAllowed=\"move\"\n           dndDragoverClass=\"dndDragover\"\n           (dndDrop)=\"onDndDrop($event, branch)\">\n        <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n        <div *ngFor=\"let step of branch.nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n             [dndDraggable]=\"step\"\n             dndEffectAllowed=\"move\"\n             dndType=\"step\">\n          <cqa-test-case-details-renderer\n            [step]=\"step\"\n            [index]=\"i\"\n            [selected]=\"$any(step).selected\"\n            [branch]=\"branch\"\n            [isNested]=\"true\"\n            [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n            [isInsideForLoop]=\"isInsideForLoop\"\n            [isInsideStepGroup]=\"isInsideStepGroup\"\n            [isReorder]=\"isReorder\"\n            [nestingLevel]=\"(nestingLevel || 0) + 1\"\n            [addStepBetweenAbove]=\"addStepBetweenAbove\"\n            [addStepBetweenBelow]=\"addStepBetweenBelow\"\n            [addStepBetween]=\"addStepBetween\"\n          [editable]=\"editable\"\n            [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n            [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n            [currentTestCaseId]=\"currentTestCaseId\"\n            [testCaseTestDataId]=\"testCaseTestDataId\"\n            (branchStepChange)=\"onBranchStepChange($event.branch, $event.step, $event.stepIndex)\"\n            (addStepForBranch)=\"onAddStep($event.branch)\"\n            (addStepForLoop)=\"onAddStepForLoop($event, branch)\"\n            (deleteStepWithBranch)=\"onDeleteStep($event.branch, $event.stepIndex)\"\n            (delete)=\"onNestedStepDelete($event)\"\n            (toggleExpanded)=\"onNestedToggleExpanded($event, branch, step, i)\"\n            (groupNameChange)=\"$any(step).groupName = $event; onBranchStepChange(branch, step, i)\"\n            (descriptionChange)=\"$any(step).description = $event; onBranchStepChange(branch, step, i)\"\n            (reusableChange)=\"$any(step).reusable = $event; onBranchStepChange(branch, step, i)\"\n            (openExternal)=\"onNestedOpenExternal($event)\"\n            (edit)=\"onNestedEdit($event)\"\n            (link)=\"onBranchStepChange(branch, step, i)\"\n            (duplicate)=\"onNestedDuplicate($event, step)\"\n            (viewDetails)=\"viewDetails.emit($event)\"\n            (conditionChange)=\"$any(step).condition = $event; onBranchStepChange(branch, step, i)\"\n            (addBranch)=\"onNestedConditionAddBranch($any(step)); onBranchStepChange(branch, step, i)\"\n            (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event); onBranchStepChange(branch, step, i)\"\n            (testDataProfileChange)=\"$any(step).testDataProfile = $event; onBranchStepChange(branch, step, i)\"\n            (startStepChange)=\"$any(step).startStep = $event; onBranchStepChange(branch, step, i)\"\n            (endStepChange)=\"$any(step).endStep = $event; onBranchStepChange(branch, step, i)\"\n            (maxIterationsChange)=\"$any(step).maxIterations = $event; onBranchStepChange(branch, step, i)\"\n            (eventTypeChange)=\"$any(step).eventType = $event; onBranchStepChange(branch, step, i)\"\n            (parameterChange)=\"onBranchStepChange(branch, step, i)\"\n            (selectionChange)=\"$any(step).selected = $event; onBranchStepChange(branch, step, i)\"\n            (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n            (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n            (stepUpdate)=\"stepUpdate.emit($event)\"\n            (dndDropInZone)=\"dndDropInZone.emit($event)\"\n            (clickAction)=\"onNestedClickAction($event)\"\n            (editInDepth)=\"editInDepth.emit($event)\"\n            (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\"\n          >\n          </cqa-test-case-details-renderer>\n        </div>\n      </div>\n\n      <!-- Empty branch (IF / ELSE IF / ELSE): show plus icon on hover when no steps, same as loop step.\n           When rendered inside a step group or when reordering, hide this Add button entirely. -->\n      <div *ngIf=\"branch.nestedSteps.length === 0 && editable && !isInsideStepGroup && !isReorder\" class=\"condition-branch-empty cqa-min-h-[52px] cqa-flex cqa-items-center cqa-justify-center cqa-pl-4 cqa-pr-4\">\n        <button type=\"button\" (click)=\"onAddStep(branch); $event.stopPropagation()\" (mousedown)=\"$event.stopPropagation()\" [attr.title]=\"'Add step to ' + getBranchLabel(branch)\"\n          class=\"condition-branch-empty-add\">\n          <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" fill=\"white\" />\n            <rect x=\"1\" y=\"1\" width=\"21.1822\" height=\"22\" rx=\"10.5911\" stroke=\"#3F43EE\" stroke-width=\"2\" />\n            <path d=\"M8.5 12H15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n            <path d=\"M12 8.5V15.5\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n          </svg>\n        </button>\n      </div>\n\n      <!-- END marker per branch - only when branch has nested steps -->\n      <div *ngIf=\"branch.nestedSteps?.length > 0\" class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n        <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">{{ getEndBranchLabel(branch) }} : {{ getBranchMarkerEndStep(branch) }}</span>\n      </div>\n    </div>\n\n    <!-- Inline ELSE IF add forms: shown at the end of the branch that triggered \"Add ELSE IF\" -->\n    <ng-container *ngIf=\"isEditing\">\n      <div *ngFor=\"let elseIfBranch of getElseIfBranchesForBranchIndex(branchIndex)\"\n        class=\"cqa-py-2.5 cqa-px-1 cqa-flex cqa-flex-col cqa-gap-3 cqa-border-t cqa-border-solid cqa-border-[#E5E7EB]\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-justify-between\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-flex-grow\">\n            <!-- Remove ELSE IF button -->\n            <button\n              type=\"button\"\n              (click)=\"onRemoveElse(elseIfBranch.id)\"\n              class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-cursor-pointer hover:cqa-bg-[#E5E7EB] cqa-transition-colors\">\n              Remove ELSE IF\n            </button>\n\n            <!-- ELSE IF autocomplete field -->\n            <cqa-autocomplete\n              *ngIf=\"elseIfBranch.form\"\n              [options]=\"conditionLeftAutocompleteOptions\"\n              [value]=\"elseIfBranch.form.get('conditionLeft')?.value ?? ''\"\n              (valueChange)=\"elseIfBranch.form.get('conditionLeft')?.setValue($event)\"\n              (optionSelect)=\"onElseConditionLeftSelect($event, elseIfBranch.id)\"\n              placeholder=\"Select Condition\"\n              [fullWidth]=\"true\"\n              [compact]=\"true\"\n              class=\"cqa-w-full cqa-max-w-[216px]\"></cqa-autocomplete>\n\n            <!-- ELSE IF Template Variables Section -->\n            <div *ngIf=\"elseIfBranch.selectedTemplate && elseIfBranch.templateVariables && elseIfBranch.templateVariables.length > 0\" class=\"cqa-flex cqa-flex-row cqa-flex-wrap cqa-gap-3\">\n              <ng-container *ngFor=\"let variable of elseIfBranch.templateVariables\">\n                <ng-container *ngIf=\"variable.type === 'boolean'\">\n                  <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n                    <mat-slide-toggle\n                      [checked]=\"elseIfBranch.templateVariablesForm.get(variable.name)?.value || variable.value || false\"\n                      (change)=\"elseIfBranch.templateVariablesForm.get(variable.name)?.setValue($event.checked)\"\n                      color=\"primary\">\n                    </mat-slide-toggle>\n                  </div>\n                </ng-container>\n                <ng-container *ngIf=\"variable.type !== 'boolean' && variable.name !== 'custom_code'\">\n                  <ng-container *ngIf=\"variable.name === 'type' || variable.name === 'scrollTo' || variable.options\">\n                    <div class=\"cqa-flex cqa-flex-col\" style=\"min-width: 150px;\">\n                      <cqa-dynamic-select\n                        [form]=\"elseIfBranch.templateVariablesForm\"\n                        [config]=\"getSelectConfigForVariable(variable, elseIfBranch.id)\">\n                      </cqa-dynamic-select>\n                    </div>\n                  </ng-container>\n                  <ng-container *ngIf=\"variable.name !== 'type' && variable.name !== 'scrollTo' && !variable.options\">\n                    <div class=\"cqa-flex cqa-flex-col\" style=\"min-width: 150px;\">\n                      <cqa-custom-input\n                        [value]=\"elseIfBranch.templateVariablesForm.get(variable.name)?.value || variable.value || ''\"\n                        (valueChange)=\"elseIfBranch.templateVariablesForm.get(variable.name)?.setValue($event)\"\n                        [placeholder]=\"variable.label\">\n                      </cqa-custom-input>\n                    </div>\n                  </ng-container>\n                </ng-container>\n              </ng-container>\n            </div>\n\n            <!-- Edit In depth link -->\n            <a href=\"#\" (click)=\"onEditInDepth(elseIfBranch.selectedTemplate || undefined, null, undefined, true, elseIfBranch, elseIfBranch.insertAfterBranchId); $event.preventDefault()\"\n              class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-[2px] cqa-no-underline\">\n              Edit In depth\n              <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg>\n            </a>\n          </div>\n          <!-- Cancel / Apply shown on the last pending ELSE IF form across all branches -->\n          <div *ngIf=\"isLastElseIfBranch(elseIfBranch.id)\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <cqa-button variant=\"outlined\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Cancel'\" (clicked)=\"onEditCancel()\"></cqa-button>\n            <cqa-button variant=\"filled\" btnSize=\"lg\" [customClass]=\"'cqa-text-[14px] cqa-py-[9px]'\" [text]=\"'Apply'\" (clicked)=\"onEditApply()\"></cqa-button>\n          </div>\n        </div>\n      </div>\n    </ng-container>\n    </ng-container><!-- end branch ng-container -->\n    <!-- END CONDITION: final marker after all branches -->\n    <div class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n      <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">END CONDITION : {{ getEndConditionMarkerStepDisplay() }}</span>\n    </div>\n  </div>\n</div>","import { DndDropEvent } from 'ngx-drag-drop';\nimport { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, DoCheck, ChangeDetectorRef, ViewChild, ElementRef } from '@angular/core';\nimport { StepGroupConfig, TestCaseStepConfig, NormalStepConfig, LoopStepConfig, ConditionStepConfig, ConditionBranch, StepTypes } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-step-group',\n  templateUrl: './step-group.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseStepGroupComponent implements OnInit, OnChanges, DoCheck {\n  @Input() config!: StepGroupConfig;\n  @Input() id!: string;\n  @Input() stepNumber!: number | string;\n  /** Array index from parent renderer - use for editInDepth (stepNumber \"10.3\" parses wrong) */\n  @Input() index?: number;\n  @Input() groupName!: string;\n  @Input() description?: string;\n  @Input() reusable: boolean = false;\n  @Input() nestedSteps: TestCaseStepConfig[] = [];\n  @Input() expanded: boolean = true;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isInsideForLoop: boolean = false;\n  @Input() testCaseTestDataId?: number | string;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isReorder: boolean = false;\n  /** True when any ancestor step is skipped; used to cascade skipped styling to nested rows. */\n  @Input() isParentSkipped: boolean = false;\n  @Input() editable: boolean = true;\n  /** Visual indentation level for nested structures (passed down from renderer). */\n  @Input() nestingLevel: number = 0;\n  @Input() selected: boolean = false;\n  @Input() isDuplicating: boolean = false;\n  @Input() loading: boolean = false;\n  /** Options for the data profile dropdown */\n  @Input() dataProfileOptions: any[] = [];\n  /** Indicates if more data profiles are available for loading */\n  @Input() hasMoreDataProfiles: boolean = false;\n  /** Loading state for data profiles */\n  @Input() isLoadingDataProfiles: boolean = false;\n  /** Natural text actions options for while loop condition */\n  @Input() naturalTextActionsOptions: any[] = [];\n  /** Current test case id (from portal). Used to hide the reusable nested-steps hint when viewing the step group's own test case (`stepGroupId`). */\n  @Input() currentTestCaseId?: number | string;\n  /** Show \"Add Step Between\" button above nested steps */\n  @Input() addStepBetweenAbove: boolean = false;\n  /** Show \"Add Step Between\" button below nested steps */\n  @Input() addStepBetweenBelow: boolean = false;\n  /** @deprecated Use addStepBetweenAbove and addStepBetweenBelow instead. If set, applies to both buttons. */\n  @Input() addStepBetween: boolean = false;\n\n  private previousNestedStepsLength: number = 0;\n  private previousNestedStepsReference: TestCaseStepConfig[] | null = null;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  constructor(\n    private cdr: ChangeDetectorRef\n  ) {}\n\n  /** Base left padding for step rows (matches px-4 = 16px) plus 24px per nesting level (matches pl-10 = 40px at level 1). */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  /**\n   * When reusable, show a banner that nested steps must be edited in the step group's source test case—except when\n   * the user is already on that test case (currentTestCaseId === stepGroupId).\n   */\n  shouldShowReusableNestedEditBanner(): boolean {\n    if (!this.reusable) {\n      return false;\n    }\n    const sgId = this.config?.stepGroupId;\n    if (sgId == null) {\n      return true;\n    }\n    if (this.currentTestCaseId == null || this.currentTestCaseId === '') {\n      return true;\n    }\n    return String(this.currentTestCaseId) !== String(sgId);\n  }\n\n  @Output() toggleExpanded = new EventEmitter<{config: StepGroupConfig, expanded: boolean}>();\n  @Output() groupNameChange = new EventEmitter<string>();\n  @Output() descriptionChange = new EventEmitter<string>();\n  @Output() reusableChange = new EventEmitter<boolean>();\n  @Output() nestedStepChange = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() addStep = new EventEmitter<void>();\n  @Output() deleteStep = new EventEmitter<number>();\n  @Output() openExternal = new EventEmitter<{step: TestCaseStepConfig}>();\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() dndDropInZone = new EventEmitter<{ event: DndDropEvent; targetList: TestCaseStepConfig[] }>();\n  /** Emit when more data profiles need to be loaded */\n  @Output() loadMoreDataProfiles = new EventEmitter<string>();\n  /** Emit when data profile search query changes */\n  @Output() searchDataProfiles = new EventEmitter<string>();\n  /** Emit when a nested step is updated (e.g., Apply button clicked in loop-step edit mode) */\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n  /** Re-emit addStepBetweenClick from nested renderers */\n  @Output() addStepBetweenClick = new EventEmitter<{step: TestCaseStepConfig, index: number, position: 'ABOVE' | 'BELOW'}>();\n  /** Re-emit addStepForLoop from nested loops so N-level nesting works (empty loop add step). */\n  @Output() addStepForLoop = new EventEmitter<{ loopStepConfig: LoopStepConfig }>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() deleteBranch = new EventEmitter<ConditionBranch>();\n\n  onDndDrop(event: DndDropEvent): void {\n    this.dndDropInZone.emit({ event, targetList: this.nestedSteps });\n  }\n\n  ngOnInit(): void {\n    this.updateFromConfig();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Detect changes to config or nestedSteps input\n    if (changes['config']) {\n      this.updateFromConfig();\n      this.previousNestedStepsReference = this.config?.nestedSteps || null;\n      this.previousNestedStepsLength = this.config?.nestedSteps?.length || 0;\n    } else if (changes['nestedSteps']) {\n      // If nestedSteps input changed directly, update it\n      if (changes['nestedSteps'].currentValue) {\n        this.nestedSteps = changes['nestedSteps'].currentValue;\n        this.previousNestedStepsReference = this.nestedSteps;\n        this.previousNestedStepsLength = this.nestedSteps.length;\n      }\n    } else if (changes['loading']) {\n      // Update loading state from input\n      this.loading = changes['loading'].currentValue || false;\n    }\n  }\n\n  ngDoCheck(): void {\n    // Sync loading from config when mutated (e.g. eager-load sets config.loading = true)\n    const configLoading = (this.config as any)?.loading;\n    if (typeof configLoading === 'boolean' && this.loading !== configLoading) {\n      this.loading = configLoading;\n      this.cdr.markForCheck();\n    }\n    // Check for deep changes in config.nestedSteps (when mutated directly)\n    if (this.config && this.config.nestedSteps !== undefined) {\n      const currentNestedSteps = this.config.nestedSteps;\n      const currentLength = currentNestedSteps.length;\n      // For nested step groups, avoid overwriting with empty when we already have steps\n      // (parent re-fetch or sync can temporarily set config.nestedSteps to [] before async load completes)\n      const shouldSync = this.previousNestedStepsReference !== currentNestedSteps ||\n          this.previousNestedStepsLength !== currentLength;\n      const wouldClearSteps = currentLength === 0 && this.nestedSteps.length > 0;\n      if (shouldSync && !wouldClearSteps) {\n        this.nestedSteps = currentNestedSteps;\n        this.previousNestedStepsReference = currentNestedSteps;\n        this.previousNestedStepsLength = currentLength;\n        this.cdr.markForCheck();\n      }\n    }\n  }\n\n  private updateFromConfig(): void {\n    if (this.config) {\n      this.id = this.config.id;\n      this.stepNumber = this.config.stepNumber;\n      this.groupName = this.config.groupName;\n      this.description = this.config.description;\n      this.reusable = this.config.reusable || false;\n      this.loading = this.config.loading || false;\n      this.selected = (this.config as any).selected || false;\n      // Update nestedSteps from config if available; for nested step groups, don't overwrite\n      // with empty when we already have steps (avoids \"0 steps\" flash when parent re-syncs)\n      if (this.config.nestedSteps !== undefined) {\n        const configSteps = this.config.nestedSteps;\n        if (configSteps.length > 0 || this.nestedSteps.length === 0) {\n          this.nestedSteps = configSteps;\n        }\n      } else if (this.nestedSteps === undefined || this.nestedSteps.length === 0) {\n        this.nestedSteps = [];\n      }\n      this.expanded = this.config.expanded !== undefined ? this.config.expanded : true;\n    } else if (this.nestedSteps === undefined) {\n      // If no config, ensure nestedSteps is initialized\n      this.nestedSteps = [];\n    }\n  }\n\n  /** True when this step group has at least one child step (used to hide \"0 steps\" badge). */\n  hasSteps(): boolean {\n    const fromConfig = this.config?.nestedSteps;\n    const fromInput = this.nestedSteps;\n    const steps = (fromConfig?.length ?? 0) >= (fromInput?.length ?? 0)\n      ? (fromConfig ?? fromInput)\n      : (fromInput ?? fromConfig);\n    return !!(steps && steps.length > 0);\n  }\n\n  /** Max length for start/end step number in summary; beyond this use local indices (1 to count). */\n  private static readonly MAX_STEP_NUMBER_DISPLAY_LENGTH = 20;\n\n  /**\n   * Step count is derived only from the child step array length.\n   * Runs on every render (no expand/collapse dependency). Used for initial load and all nesting levels.\n   * For deeply nested steps with long numbers, shows \"Steps 1-N (N steps)\" using local indices.\n   */\n  getStepsSummary(): string {\n    const fromConfig = this.config?.nestedSteps;\n    const fromInput = this.nestedSteps;\n    const steps = (fromConfig?.length ?? 0) >= (fromInput?.length ?? 0)\n      ? (fromConfig ?? fromInput)\n      : (fromInput ?? fromConfig);\n    if (!steps || steps.length === 0) {\n      return '0 steps';\n    }\n    const count = steps.length;\n    const firstStep = steps[0];\n    const lastStep = steps[steps.length - 1];\n    const startRaw = (firstStep as any).stepNumber ?? 1;\n    const endRaw = (lastStep as any).stepNumber ?? count;\n    const startStr = String(startRaw);\n    const endStr = String(endRaw);\n    const tooLong = startStr.length > TestCaseStepGroupComponent.MAX_STEP_NUMBER_DISPLAY_LENGTH ||\n      endStr.length > TestCaseStepGroupComponent.MAX_STEP_NUMBER_DISPLAY_LENGTH;\n    const start = tooLong ? 1 : startRaw;\n    const end = tooLong ? count : endRaw;\n    return `Steps ${start}-${end} (${count} step${count !== 1 ? 's' : ''})`;\n  }\n\n  /** START GROUP marker: first nested step's display step number (matches row numbering). */\n  getStartGroupMarkerStepDisplay(): string {\n    const steps = this.nestedSteps;\n    if (!steps?.length) {\n      return String(this.stepNumber ?? '');\n    }\n    const first = steps[0] as any;\n    if (first?.stepNumber != null && first.stepNumber !== '') {\n      return String(first.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  /** END GROUP marker: last nested step's display step number. */\n  getEndGroupMarkerStepDisplay(): string {\n    const steps = this.nestedSteps;\n    if (!steps?.length) {\n      return String(this.stepNumber ?? '');\n    }\n    const last = steps[steps.length - 1] as any;\n    if (last?.stepNumber != null && last.stepNumber !== '') {\n      return String(last.stepNumber);\n    }\n    return String(this.stepNumber ?? '');\n  }\n\n  onToggleExpanded(): void {\n    this.expanded = !this.expanded;\n    this.toggleExpanded.emit({config:this.config, expanded:this.expanded});\n  }\n\n  onGroupNameChange(value: string): void {\n    this.groupName = value;\n    this.groupNameChange.emit(value);\n  }\n\n  onDescriptionChange(value: string): void {\n    this.description = value;\n    this.descriptionChange.emit(value);\n  }\n\n  onReusableChange(checked: boolean): void {\n    this.reusable = checked;\n    this.reusableChange.emit(checked);\n  }\n\n  onNestedStepChange(step: TestCaseStepConfig, index: number): void {\n    this.nestedStepChange.emit({ step, index });\n  }\n\n  /** Re-emit openExternal from nested step group so redirect works for step groups inside step groups. */\n  onNestedOpenExternal(payload: { step: TestCaseStepConfig }): void {\n    if (payload?.step) {\n      this.openExternal.emit(payload);\n    }\n  }\n\n  onNestedToggleExpanded(event: boolean | {config: TestCaseStepConfig, expanded: boolean}, step: TestCaseStepConfig, index: number): void {\n    // Handle both boolean and object formats\n    if (typeof event === 'object' && event !== null && 'expanded' in event) {\n      // Object format from nested step-group: {config, expanded}\n      (step as any).expanded = event.expanded;\n      // Check if the event's config is a step-group (not the current step)\n      // This ensures nested step-group events bubble up correctly even when nested inside other step-groups\n      if (this.isStepGroup(event.config)) {\n        // Re-emit the toggleExpanded event with the object format, preserving the original config\n        this.toggleExpanded.emit({config: event.config as StepGroupConfig, expanded: event.expanded});\n      }\n    } else {\n      // Boolean format from other step types\n      (step as any).expanded = event as boolean;\n    }\n    this.onNestedStepChange(step, index);\n  }\n\n  onAddStep(): void {\n    this.addStep.emit();\n  }\n\n  onDeleteStep(payloadOrIndex: any, index?: number): void {\n    const idx = typeof index === 'number' ? index : payloadOrIndex;\n    const payload = typeof index === 'number' ? payloadOrIndex : undefined;\n    this.deleteStep.emit(idx);\n    if (payload?.step) this.delete.emit(payload);\n  }\n\n  /** Re-emit edit from nested step so the portal can open edit modal (same as root level). */\n  onNestedEdit(event: { step: TestCaseStepConfig; index: number }): void {\n    if (event?.step != null) this.edit.emit(event as any);\n  }\n\n  /** Re-emit duplicate from nested step so the portal can duplicate (same as root level). */\n  onNestedDuplicate(event: any, step: TestCaseStepConfig): void {\n    this.duplicate.emit((event && event.step != null) ? event : { step } as any);\n  }\n\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Step Group Details',\n        description: this.config.description,\n      });\n    }\n  }\n\n  onOpenExternal(): void {\n    this.openExternal.emit({step: this.config});\n  }\n\n  onEdit(): void {\n    // Emit editInDepth - prefer renderer index (correct); stepNumber \"10.3\" parses wrong\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n\n  onLink(): void {\n    this.link.emit();\n  }\n\n  onDuplicate(): void {\n    if (this.isDuplicating) return;\n    this.duplicate.emit();\n  }\n\n  onDelete(): void {\n    this.delete.emit();\n  }\n\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n\n  onSelectionChange(checked: boolean): void {\n    this.selected = checked;\n    this.selectionChange.emit(checked);\n  }\n\n  isNormalStep(step: TestCaseStepConfig): step is NormalStepConfig {\n    return 'eventType' in step;\n  }\n\n  isLoopStep(step: TestCaseStepConfig): step is LoopStepConfig {\n    return 'loopType' in step;\n  }\n\n  isConditionStep(step: TestCaseStepConfig): step is ConditionStepConfig {\n    return 'condition' in step && 'branches' in step;\n  }\n\n  isStepGroup(step: TestCaseStepConfig): step is StepGroupConfig {\n    return 'groupName' in step;\n  }\n\n  onAddBranch(): void {\n    // Not used in step group, but needed for recursive condition steps\n  }\n\n  onDeleteBranch(branch: any): void {\n    // Not used in step group, but needed for recursive condition steps\n  }\n\n  onNestedConditionAddBranch(nestedStep: ConditionStepConfig, index: number): void {\n    // Add a new branch to the nested condition step\n    if (!nestedStep.branches) {\n      nestedStep.branches = [];\n    }\n    const newBranch: ConditionBranch = {\n      type: nestedStep.branches.length === 0 ? 'if' : 'else',\n      stepType: StepTypes.CONDITION_IF,\n      label: nestedStep.branches.length === 0 ? 'IF TRUE' : 'ELSE',\n      nestedSteps: []\n    };\n    nestedStep.branches.push(newBranch);\n    this.onNestedStepChange(nestedStep, index);\n  }\n\n  onNestedConditionDeleteBranch(nestedStep: ConditionStepConfig, branch: any, index: number): void {\n    // Re-emit deleteBranch so step-list can open delete modal and call API\n    this.deleteBranch.emit(branch);\n  }\n}\n","<div [class]=\"'cqa-flex cqa-flex-col'\" style=\"border-bottom: 1px solid #E5E7EB;\">\n  <!-- Step Group Header -->\n  <div\n    [class]=\"'step-row cqa-flex cqa-gap-3 cqa-items-center cqa-py-2 cqa-pr-4' + ((config?.shouldSkip || isParentSkipped) ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"(config?.shouldSkip || isParentSkipped) ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    style=\"min-height: 50px; border-top: none;\">\n    <div *ngIf=\"!isInsideStepGroup\" class=\"cqa-inline-flex cqa-items-center\">\n    <!-- Drag Handle Icon (when isReorder is true and not inside step group - step groups inside step groups cannot be reordered) -->\n    <div *ngIf=\"isReorder\" 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=\"editable && !isReorder\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check-step-group\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n    </div>\n    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\n    </div>\n    <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n    <!-- Expand/Collapse Icon -->\n    <button type=\"button\" (click)=\"onToggleExpanded(); $event.stopPropagation()\" class=\"cqa-p-0\">\n      <svg [class.cqa-rotate-180]=\"expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\n        xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M4 6L8 10L12 6\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n          stroke-linejoin=\"round\" />\n      </svg>\n    </button>\n\n    <!-- Folder Icon -->\n    <div>\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path\n          d=\"M15 15C15.3978 15 15.7794 14.842 16.0607 14.5607C16.342 14.2794 16.5 13.8978 16.5 13.5V6C16.5 5.60217 16.342 5.22064 16.0607 4.93934C15.7794 4.65804 15.3978 4.5 15 4.5H9.075C8.82413 4.50246 8.57666 4.44196 8.35523 4.32403C8.13379 4.20611 7.94547 4.03453 7.8075 3.825L7.2 2.925C7.06342 2.7176 6.87748 2.54736 6.65887 2.42955C6.44027 2.31174 6.19583 2.25004 5.9475 2.25H3C2.60218 2.25 2.22064 2.40804 1.93934 2.68934C1.65804 2.97064 1.5 3.35218 1.5 3.75V13.5C1.5 13.8978 1.65804 14.2794 1.93934 14.5607C2.22064 14.842 2.60218 15 3 15H15Z\"\n          fill=\"#EFF6FF\" stroke=\"#60A5FA\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n    </div>\n\n    <!-- Group Name and Description -->\n    <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-gap-[2px]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <!-- Group Name Input -->\n        <p\n          class=\"cqa-m-0 cqa-border-0 cqa-bg-transparent cqa-p-0 cqa-text-[#3F43EE] cqa-text-[14px] cqa-leading-[18px] !cqa-font-[600]\"\n          [style.font-weight]=\"'600'\">{{groupName}}</p>\n        <!-- Reusable Tag -->\n        <span *ngIf=\"reusable\"\n          class=\"cqa-px-2 cqa-py-[1.5px] cqa-rounded-lg cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-bg-[#D8D9FC] cqa-border cqa-border-solid cqa-border-[#8A8CF4]\">\n          Reusable\n        </span>\n      </div>\n\n      <!-- Description -->\n      <p class=\"cqa-text-[#6B7280] cqa-text-[12px] cqa-leading-[15px]\">{{description}}</p>\n    </div>\n\n    <!-- Steps Summary and Action Icons -->\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n      <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n      <!-- Action Icons - placed first -->\n      <div *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n\n        <!-- Edit Icon -->\n        <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" 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)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" 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=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n            <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </button>\n\n        <!-- Link Icon -->\n        <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" 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            <g clip-path=\"url(#clip0_609_26588)\">\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            </g>\n            <defs>\n              <clipPath id=\"clip0_609_26588\">\n                <rect width=\"14\" height=\"14\" fill=\"white\" />\n              </clipPath>\n            </defs>\n          </svg>\n        </button> -->\n\n        <!-- Duplicate Icon -->\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\n        <!-- Delete Icon -->\n        <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" 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\n      <!-- External Link Icon -->\n      <button *ngIf=\"!isInsideStepGroup\" type=\"button\" (click)=\"onOpenExternal(); $event.stopPropagation()\" title=\"Open in new tab\"\n        class=\"cqa-p-0 cqa-text-[#99999E] hover:cqa-text-[#1447E6]\">\n        <svg width=\"16\" height=\"17\" viewBox=\"0 0 16 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M12 8.66667V12.6667C12 13.0203 11.8595 13.3594 11.6095 13.6095C11.3594 13.8595 11.0203 14 10.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V5.33333C2 4.97971 2.14048 4.64057 2.39052 4.39052C2.64057 4.14048 2.97971 4 3.33333 4H7.33333M10 2H14M14 2V6M14 2L6.66667 9.33333\"\n            stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n      </button>\n\n      <!-- Steps Summary (show loader when loading on expand) -->\n      <span *ngIf=\"loading || config?.loading\" class=\"cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\">\n        <span class=\"cqa-inline-block cqa-w-3 cqa-h-3 cqa-border-2 cqa-border-solid cqa-border-[#3F43EE] cqa-border-t-transparent cqa-rounded-full cqa-animate-spin\"></span>\n        Loading...\n      </span>\n      <span *ngIf=\"!(loading || config?.loading) && hasSteps()\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold\">\n        {{ getStepsSummary() }}\n      </span>\n\n      <!-- View Details Link (show only if description is not empty) -->\n      <a *ngIf=\"!isInsideStepGroup && config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\n\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\n  <!-- Expanded Content with Nested Steps (indent so 14.1.1, 14.1.2 sit under 14.1) -->\n  <div *ngIf=\"expanded\" class=\"cqa-flex cqa-flex-col\">\n    <!-- Reusable step groups: nested steps are not edited here — changes would affect every test that references this group -->\n    <div\n      *ngIf=\"shouldShowReusableNestedEditBanner()\"\n      role=\"status\"\n      aria-live=\"polite\"\n      class=\"cqa-flex cqa-gap-2 cqa-items-start cqa-py-2 cqa-pr-4 cqa-bg-[#FFFBEB] cqa-border-b cqa-border-solid cqa-border-[#FDE68A]\"\n      [style.padding-left.px]=\"getRowPaddingLeftPx()\">\n      <span class=\"cqa-mt-0.5 cqa-flex-shrink-0 cqa-text-[#D97706]\" aria-hidden=\"true\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M8 1.33334C4.31999 1.33334 1.33334 4.31999 1.33334 8C1.33334 11.68 4.31999 14.6667 8 14.6667C11.68 14.6667 14.6667 11.68 14.6667 8C14.6667 4.31999 11.68 1.33334 8 1.33334ZM8.66667 11.3333H7.33334V10H8.66667V11.3333ZM8.66667 8.66667H7.33334V4.66667H8.66667V8.66667Z\" fill=\"currentColor\"/>\n        </svg>\n      </span>\n      <div class=\"cqa-min-w-0 cqa-flex cqa-flex-col cqa-gap-1\">\n        <p class=\"cqa-m-0 cqa-text-[11px] cqa-leading-[16px] cqa-text-[#92400E]\">\n          <span class=\"cqa-font-semibold\">Reusable step group:</span>\n          You can review nested steps here, but you cannot edit them in this test case. This group may be used in many tests—edits must be made in the\n          <span class=\"cqa-whitespace-nowrap\">step group&apos;s own test case</span>\n          so changes stay in one place and apply everywhere this group is referenced.\n        </p>\n        <button\n          type=\"button\"\n          (click)=\"onOpenExternal(); $event.stopPropagation()\"\n          class=\"cqa-self-start cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-text-left cqa-text-[11px] cqa-font-semibold cqa-leading-[16px] cqa-text-[#3F43EE] hover:cqa-underline cqa-cursor-pointer\">\n          Open step group test case to edit\n        </button>\n      </div>\n    </div>\n    <!-- START GROUP Marker (centered) - only when there are nested steps -->\n    <div\n      *ngIf=\"nestedSteps.length > 0\"\n      class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n      <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">Start Group : {{ getStartGroupMarkerStepDisplay() }}</span>\n    </div>\n    <!-- Loading Indicator (only when there are no cached nested steps) -->\n    <div *ngIf=\"loading && nestedSteps.length === 0\" class=\"cqa-flex cqa-items-center cqa-justify-center cqa-py-8 cqa-px-4\">\n      <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-3\">\n        <!-- Spinner -->\n        <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n          <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n          <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n        </svg>\n        <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading steps...</span>\n      </div>\n    </div>\n\n    <!-- Nested step group inside another group: empty body (no START/END markers) -->\n    <div\n      *ngIf=\"!loading && nestedSteps.length === 0 && isInsideStepGroup\"\n      class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-text-center cqa-text-[#1C398E] cqa-font-semibold cqa-text-[12px] cqa-leading-[15px] cqa-bg-[rgba(219,234,254,0.5)]\">\n      No steps added\n    </div>\n    \n    <!-- Nested Steps Content (keep visible even while refreshing) -->\n    <div *ngIf=\"nestedSteps.length > 0\" class=\"cqa-flex cqa-flex-col\">\n      <!-- Steps inside step groups cannot be reordered - always use non-dnd list (no drag handle/dropzone) -->\n      <div class=\"cqa-flex cqa-flex-col\">\n      <cqa-test-case-details-renderer\n        *ngFor=\"let step of nestedSteps; let i = index\"\n        [step]=\"step\"\n        [index]=\"i\"\n        [selected]=\"$any(step).selected\"\n        [isNested]=\"true\"\n        [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n        [isInsideForLoop]=\"isInsideForLoop\"\n        [isInsideStepGroup]=\"true\"\n        [isReorder]=\"isReorder\"\n        [nestingLevel]=\"nestingLevel + 1\"\n        [addStepBetween]=\"false\"\n        [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n        [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n        [currentTestCaseId]=\"currentTestCaseId\"\n        [testCaseTestDataId]=\"testCaseTestDataId\"\n        (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n        (addStep)=\"onAddStep()\"\n        (deleteStep)=\"onDeleteStep($event)\"\n        (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n        (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n        (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n        (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n        (openExternal)=\"onNestedOpenExternal($event)\"\n        (edit)=\"onNestedEdit($event)\"\n        (link)=\"onNestedStepChange(step, i)\"\n        (duplicate)=\"onNestedDuplicate($event, step)\"\n        (delete)=\"onDeleteStep($event, i)\"\n        (viewDetails)=\"viewDetails.emit($event)\"\n        (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n        (branchStepChange)=\"onNestedStepChange(step, i)\"\n        (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n        (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n        (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n        (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n        (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n        (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n        (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n        (parameterChange)=\"onNestedStepChange(step, i)\"\n        (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n        (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n        (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n        (stepUpdate)=\"stepUpdate.emit($event)\"\n        (dndDropInZone)=\"dndDropInZone.emit($event)\"\n        (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\"\n        (addStepForLoop)=\"addStepForLoop.emit($event)\"\n      >\n      </cqa-test-case-details-renderer>\n    </div>\n    <!-- Steps inside step groups cannot be reordered - dnd list never shown -->\n    <div *ngIf=\"false\" class=\"cqa-flex cqa-flex-col nested-step-drop-list\"\n         [dndDropzone]=\"['step']\"\n         dndEffectAllowed=\"move\"\n         dndDragoverClass=\"dndDragover\"\n         (dndDrop)=\"onDndDrop($event)\">\n      <div dndPlaceholderRef class=\"step-drag-placeholder-nested cqa-my-1 cqa-min-h-[50px] cqa-border-2 cqa-border-dashed cqa-border-[#3F43EE] cqa-rounded cqa-bg-[rgba(63,67,238,0.08)] cqa-flex cqa-items-center cqa-justify-center cqa-text-[#3F43EE] cqa-text-xs\">Drop here</div>\n      <div *ngFor=\"let step of nestedSteps; let i = index\" class=\"nested-step-drag-item\"\n           [dndDraggable]=\"step\"\n           dndEffectAllowed=\"move\"\n           dndType=\"step\">\n        <cqa-test-case-details-renderer\n          [step]=\"step\"\n          [index]=\"i\"\n          [selected]=\"$any(step).selected\"\n          [isNested]=\"true\"\n          [isParentSkipped]=\"config?.shouldSkip || isParentSkipped\"\n          [isInsideStepGroup]=\"true\"\n          [isReorder]=\"isReorder\"\n          [nestingLevel]=\"nestingLevel + 1\"\n          [addStepBetween]=\"false\"\n          [dataProfileOptions]=\"dataProfileOptions\" [hasMoreDataProfiles]=\"hasMoreDataProfiles\" [isLoadingDataProfiles]=\"isLoadingDataProfiles\"\n          [naturalTextActionsOptions]=\"naturalTextActionsOptions\"\n          [currentTestCaseId]=\"currentTestCaseId\"\n          [testCaseTestDataId]=\"testCaseTestDataId\"\n          (nestedStepChange)=\"onNestedStepChange($event.step, $event.index)\"\n          (addStep)=\"onAddStep()\"\n          (deleteStep)=\"onDeleteStep($event)\"\n          (toggleExpanded)=\"onNestedToggleExpanded($event, step, i)\"\n          (groupNameChange)=\"$any(step).groupName = $event; onNestedStepChange(step, i)\"\n          (descriptionChange)=\"$any(step).description = $event; onNestedStepChange(step, i)\"\n          (reusableChange)=\"$any(step).reusable = $event; onNestedStepChange(step, i)\"\n          (openExternal)=\"onNestedOpenExternal($event)\"\n          (edit)=\"onNestedEdit($event)\"\n          (link)=\"onNestedStepChange(step, i)\"\n          (duplicate)=\"onNestedDuplicate($event, step)\"\n          (delete)=\"onDeleteStep($event, i)\"\n          (viewDetails)=\"viewDetails.emit($event)\"\n          (conditionChange)=\"$any(step).condition = $event; onNestedStepChange(step, i)\"\n          (branchStepChange)=\"onNestedStepChange(step, i)\"\n          (addBranch)=\"onNestedConditionAddBranch($any(step), i)\"\n          (deleteBranch)=\"onNestedConditionDeleteBranch($any(step), $event, i)\"\n          (testDataProfileChange)=\"$any(step).testDataProfile = $event; onNestedStepChange(step, i)\"\n          (startStepChange)=\"$any(step).startStep = $event; onNestedStepChange(step, i)\"\n          (endStepChange)=\"$any(step).endStep = $event; onNestedStepChange(step, i)\"\n          (maxIterationsChange)=\"$any(step).maxIterations = $event; onNestedStepChange(step, i)\"\n          (eventTypeChange)=\"$any(step).eventType = $event; onNestedStepChange(step, i)\"\n          (parameterChange)=\"onNestedStepChange(step, i)\"\n          (selectionChange)=\"$any(step).selected = $event; onNestedStepChange(step, i)\"\n          (loadMoreDataProfiles)=\"loadMoreDataProfiles.emit($event)\"\n          (searchDataProfiles)=\"searchDataProfiles.emit($event)\"\n        (stepUpdate)=\"stepUpdate.emit($event)\"\n        (dndDropInZone)=\"dndDropInZone.emit($event)\"\n        (addStepBetweenClick)=\"addStepBetweenClick.emit($event)\"\n        (addStepForLoop)=\"addStepForLoop.emit($event)\"\n        >\n        </cqa-test-case-details-renderer>\n      </div>\n    </div>\n\n      <!-- END GROUP Marker (centered) - only when there are nested steps -->\n      <div\n        *ngIf=\"nestedSteps.length > 0\"\n        class=\"cqa-grid cqa-w-full cqa-place-items-center cqa-gap-0 cqa-py-[8px] cqa-px-4 cqa-border-0 cqa-bg-[rgba(219,234,254,0.5)]\">\n        <span class=\"cqa-text-center cqa-text-[12px] cqa-leading-[15px] cqa-font-semibold cqa-whitespace-nowrap cqa-bg-transparent cqa-text-[#1C398E]\">End Group : {{ getEndGroupMarkerStepDisplay() }}</span>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, ElementRef, Input, Output, EventEmitter, OnInit, ViewChild } from '@angular/core';\nimport { OverlayContainer } from '@angular/cdk/overlay';\nimport { ApiStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { EnvironmentOptionInput } from '../api-edit-step/api-edit-step.component';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-api-step',\n  templateUrl: './api-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseApiStepComponent implements OnInit {\n  @ViewChild('editModalBackdrop') editModalBackdropRef?: ElementRef<HTMLElement>;\n\n  @Input() config!: ApiStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' = 'GET';\n  @Input() endpoint: string = '';\n  @Input() description?: string;\n  @Input() baseUrl?: string;\n  @Input() headersCount?: number;\n  @Input() hasBody?: boolean;\n  @Input() saveTo?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() nestingLevel: number = 0;\n  @Input() expanded: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n  @Input() isDuplicating: boolean = false;\n  /** Environment options for the API edit step dropdown: strings or { id, name, value, label }. Passed to cqa-api-edit-step. */\n  @Input() environmentOptions?: EnvironmentOptionInput[];\n  /** HTTP method options for the API edit step dropdown: strings or { id, name, value, label }. Passed to cqa-api-edit-step. */\n  @Input() httpMethodOptions?: EnvironmentOptionInput[];\n  /** Header name options for the API edit step (e.g. for header dropdown): strings or { id, name, value, label }. Passed to cqa-api-edit-step. */\n  @Input() headerNameOptions?: EnvironmentOptionInput[];\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() toggleExpanded = new EventEmitter<{config: ApiStepConfig, expanded: boolean}>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.method = this.config.method;\n      this.endpoint = this.config.endpoint;\n      this.description = this.config.description;\n      this.baseUrl = this.config.baseUrl;\n      this.headersCount = this.config.headersCount;\n      this.hasBody = this.config.hasBody;\n      this.saveTo = this.config.saveTo;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n      this.expanded = this.config.expanded || false;\n    }\n  }\n\n  getDisplayText(): string {\n    return [this.method, this.endpoint].join(' ');\n  }\n\n  onToggleExpanded(): void {\n    this.expanded = !this.expanded;\n    this.toggleExpanded.emit({config:this.config, expanded:this.expanded});\n  }\n\n  editModalOpen = false;\n\n  constructor(\n    private readonly overlayContainer: OverlayContainer\n  ) {}\n\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n\n  onEdit(): void {\n    // API steps use their own edit modal (don't open edit-in-depth modal)\n    this.editModalOpen = true;\n    this.edit.emit();\n    // Wait for modal to render, then attach overlay container so select panels open below trigger\n    setTimeout(() => {\n      requestAnimationFrame(() => this.attachOverlayToModalBackdrop());\n    }, 0);\n  }\n\n  closeEditModal(): void {\n    this.detachOverlayFromModalBackdrop();\n    this.editModalOpen = false;\n  }\n\n  /** Attach overlay container to modal backdrop so select panels position below trigger (same stacking context). */\n  private attachOverlayToModalBackdrop(): void {\n    const backdrop = this.editModalBackdropRef?.nativeElement;\n    const container = this.overlayContainer.getContainerElement();\n    if (backdrop && container.parentElement !== backdrop) {\n      backdrop.appendChild(container);\n      container.classList.add('cqa-api-step-edit-modal-overlay-host');\n    }\n  }\n\n  private detachOverlayFromModalBackdrop(): void {\n    const container = this.overlayContainer.getContainerElement();\n    container.classList.remove('cqa-api-step-edit-modal-overlay-host');\n    if (container.parentElement !== document.body) {\n      document.body.appendChild(container);\n    }\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void {\n    if (this.isDuplicating) return;\n    this.duplicate.emit();\n  }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.onToggleExpanded();\n      this.viewDetails.emit({\n        event,\n        title: 'API Step Details',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div class=\"cqa-flex cqa-flex-col\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB;\">\n  <div\n    [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"config?.shouldSkip ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\">\n    <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !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    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\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\">\n        <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ getDisplayText() }}</span>\n      </div>\n      <!-- Expanded details: light yellow box with summary, 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 class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n          <div *ngIf=\"description && description.trim() !== ''\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <span class=\"cqa-text-[#6B7280] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">Summary:</span>\n            <span class=\"cqa-text-[#111827] cqa-text-[12px] cqa-leading-[15px]\">{{ description }}</span>\n          </div>\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 || '—' }}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n      <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n      <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\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)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" 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=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" 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      <!-- View Details Link (show only if description is not empty) - after action buttons, before date -->\n      <a *ngIf=\"description && description.trim() !== ''\" #viewDetailsTrigger 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-1 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 d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/>\n        </svg>\n      </a>\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>","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { DatabaseStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-database-step',\n  templateUrl: './database-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseDatabaseStepComponent implements OnInit {\n  @Input() config!: DatabaseStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() query: string = '';\n  @Input() description?: string;\n  @Input() databaseType?: 'mysql' | 'postgresql' | 'mongodb' | 'mssql' | 'oracle';\n  @Input() connectionName?: string;\n  @Input() saveTo?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() nestingLevel: number = 0;\n  @Input() expanded: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n  @Input() isDuplicating: boolean = false;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() toggleExpanded = new EventEmitter<{config: DatabaseStepConfig, expanded: boolean}>();\n  @Output() connectionNameChange = new EventEmitter<string>();\n  @Output() queryChange = new EventEmitter<string>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.query = this.config.query;\n      this.description = this.config.description;\n      this.databaseType = this.config.databaseType;\n      this.connectionName = this.config.connectionName;\n      this.saveTo = this.config.saveTo;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n      this.expanded = this.config.expanded || false;\n    }\n  }\n\n  onToggleExpanded(): void { this.expanded = !this.expanded; this.toggleExpanded.emit({config:this.config, expanded:this.expanded}); }\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void {\n    if (this.isDuplicating) return;\n    this.duplicate.emit();\n  }\n  onDelete(): void { this.delete.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.onToggleExpanded();\n      this.viewDetails.emit({\n        event,\n        title: 'Database Step Details',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n  onConnectionChange(value: string): void { this.connectionName = value; this.connectionNameChange.emit(value); }\n  onQueryChange(value: string): void { this.query = value; this.queryChange.emit(value); }\n}\n","<div class=\"cqa-flex cqa-flex-col\" style=\"border-top: 1px solid #E5E7EB; border-bottom: 1px solid #E5E7EB;\">\n  <div\n    [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"config?.shouldSkip ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\">\n    <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !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    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\n    </div>\n    <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n    <span title=\"Database\"\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-[#CEFAFE] cqa-text-[#007595]\">\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <ellipse cx=\"7\" cy=\"3.5\" rx=\"4.66667\" ry=\"1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M2.33333 3.5V7C2.33333 7.96667 4.42333 8.75 7 8.75C9.57667 8.75 11.6667 7.96667 11.6667 7V3.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        <path d=\"M2.33333 7V10.5C2.33333 11.4667 4.42333 12.25 7 12.25C9.57667 12.25 11.6667 11.4667 11.6667 10.5V7\" 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]\" [innerHTML]=\"query | cqaSafeHtml\">\n        </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' }}<svg [class.cqa-rotate-90]=\"expanded\" width=\"8\" height=\"8\"\n            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></a>\n      </div>\n      <!-- Expanded details: light cyan panel with Connection, Query (custom-input), Save to -->\n      <div *ngIf=\"expanded\"\n        [class]=\"'cqa-py-1 cqa-px-3 cqa-rounded-lg cqa-border cqa-border-solid cqa-bg-[#ECFEFF] cqa-border-[#A2F4FD]' + (isInsideLoop ? ' cqa-ml-10' : '')\">\n        <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-2 cqa-text-[12px] cqa-leading-[16px]\">\n          <span class=\"cqa-text-[#104E64] cqa-font-semibold\">Connection:</span>\n          <span class=\"text-[#111827]\">{{connectionName}}</span>\n          <span class=\"cqa-py-1 cqa-px-2 cqa-rounded-[4px] cqa-border cqa-border-solid cqa-bg-[#fff] cqa-border-[#A2F4FD] cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{query}}</span>\n          <span class=\"cqa-text-[#6B7280]\">Save to: {{ saveTo || '—' }}</span>\n        </div>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n      <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n      <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n      <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></button>\n      <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n      <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></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      ><svg *ngIf=\"!isDuplicating\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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><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></button>\n      <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\"\n        class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></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>","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { AiAgentStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-ai-agent-step',\n  templateUrl: './ai-agent-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseAiAgentStepComponent implements OnInit {\n  @Input() config!: AiAgentStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() instructions: string = '';\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() nestingLevel: number = 0;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.instructions = this.config.instructions;\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  onEdit(): void {\n    // AI Agent steps use their own edit behavior (don't open edit-in-depth modal)\n    this.edit.emit();\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Agent Instructions',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n\n  /** Strips the leading \"AI Agent\" prefix because it is rendered as a separate label span. */\n  get displayInstructions(): string {\n    const raw = this.instructions || '';\n    return raw.replace(/^\\s*(?:<[^>]+>\\s*)*AI\\s+Agent\\s*:?\\s*/i, '');\n  }\n}\n","<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.padding-left.px]=\"getRowPaddingLeftPx()\" [style.border-bottom]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\">\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"AI Agent\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#EDE9FE] cqa-text-[#7C3AED]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n  </span>\n  <span style=\"white-space: nowrap; flex-shrink: 0; min-width: fit-content;\" class=\"cqa-min-w-fit cqa-flex-shrink-0 cqa-whitespace-nowrap cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">AI Agent</span>\n  <div class=\"cqa-ai-agent-unified-box cqa-min-w-0 cqa-flex-1\">\n    <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] !cqa-inline-flex cqa-items-center cqa-action-format cqa-ai-agent-unified-inner\"\n      style=\"white-space: pre-wrap;\"\n      [innerHTML]=\"displayInstructions | cqaSafeHtml\"></span>\n  </div>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"description && description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { AiVerifyStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-ai-verify-step',\n  templateUrl: './ai-verify-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseAiVerifyStepComponent implements OnInit {\n  @Input() config!: AiVerifyStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() instructions: string = '';\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n  /** Visual indentation level for nested structures (passed down from renderer). */\n  @Input() nestingLevel: number = 0;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  /** Matches NormalStepComponent padding logic (px-4 = 16px + 24px per nesting level). */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnInit(): void {\n    console.log(\"AiVerifyStepComponent ngOnInit - config:\", this.config);\n    console.log(\"AiVerifyStepComponent ngOnInit - instructions:\", this.instructions);\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.instructions = this.config.instructions;\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }  \n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'AI Verify Step Details',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n\n  /** Strips the leading \"AI Verification\" / \"AI Verify\" prefix because it is rendered as a separate label span. */\n  get displayInstructions(): string {\n    const raw = this.instructions || '';\n    return raw.replace(/^\\s*(?:<[^>]+>\\s*)*AI\\s+Verif(?:ication|y)\\s*:?\\s*/i, '');\n  }\n}\n","<div\n  [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '')\"\n  [style.opacity]=\"config?.shouldSkip ? '0.6' : null\"\n  [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\"\n  [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n>\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"AI Verify\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#F3E8FF] cqa-text-[#7E22CE]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.797 9.04165C5.74492 8.83977 5.63969 8.65554 5.49227 8.50812C5.34485 8.3607 5.16062 8.25548 4.95875 8.2034L1.38 7.28057C1.31894 7.26324 1.2652 7.22646 1.22694 7.17583C1.18867 7.12519 1.16797 7.06345 1.16797 6.99998C1.16797 6.93651 1.18867 6.87478 1.22694 6.82414C1.2652 6.7735 1.31894 6.73673 1.38 6.7194L4.95875 5.79598C5.16055 5.74395 5.34473 5.63882 5.49215 5.49151C5.63956 5.34419 5.74483 5.16008 5.797 4.95832L6.71983 1.37957C6.73698 1.31827 6.77372 1.26427 6.82443 1.2258C6.87515 1.18733 6.93705 1.1665 7.0007 1.1665C7.06436 1.1665 7.12626 1.18733 7.17698 1.2258C7.22769 1.26427 7.26442 1.31827 7.28158 1.37957L8.20383 4.95832C8.25591 5.16019 8.36113 5.34442 8.50855 5.49184C8.65597 5.63926 8.8402 5.74449 9.04208 5.79657L12.6208 6.71882C12.6824 6.73579 12.7366 6.77249 12.7753 6.82328C12.814 6.87407 12.8349 6.93614 12.8349 6.99998C12.8349 7.06382 12.814 7.1259 12.7753 7.17669C12.7366 7.22748 12.6824 7.26417 12.6208 7.28115L9.04208 8.2034C8.8402 8.25548 8.65597 8.3607 8.50855 8.50812C8.36113 8.65554 8.25591 8.83977 8.20383 9.04165L7.281 12.6204C7.26384 12.6817 7.22711 12.7357 7.17639 12.7742C7.12568 12.8126 7.06377 12.8335 7.00012 12.8335C6.93647 12.8335 6.87456 12.8126 6.82385 12.7742C6.77314 12.7357 6.7364 12.6817 6.71925 12.6204L5.797 9.04165Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M11.666 1.75V4.08333\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12.8333 2.91663H10.5\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.33398 9.91663V11.0833\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M2.91667 10.5H1.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n  </span>\n  <span style=\"white-space: nowrap; flex-shrink: 0; min-width: fit-content;\" class=\"cqa-min-w-fit cqa-flex-shrink-0 cqa-whitespace-nowrap cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">AI Verification</span>\n  <div class=\"cqa-ai-agent-unified-box cqa-min-w-0 cqa-flex-1\">\n    <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] !cqa-inline-flex cqa-items-center cqa-action-format cqa-ai-agent-unified-inner\"\n      style=\"white-space: pre-wrap;\"\n      [innerHTML]=\"displayInstructions | cqaSafeHtml\"></span>\n  </div>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"description && description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { UploadStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-upload-step',\n  templateUrl: './upload-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseUploadStepComponent implements OnInit {\n  @Input() config!: UploadStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() selector: string = '';\n  @Input() fileName: string = '';\n  @Input() source: 'Data Library' | 'Local' | 'URL' = 'Data Library';\n  @Input() sourcePath: string = '';\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.selector = this.config.selector;\n      this.fileName = this.config.fileName;\n      this.source = this.config.source;\n      this.sourcePath = this.config.sourcePath;\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Upload Step Details',\n        description: this.config.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div [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') + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\">\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"Upload\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#DBEAFE] cqa-text-[#2563EB]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12.25 8.75V11.0833C12.25 11.3928 12.1271 11.6895 11.9083 11.9083C11.6895 12.1271 11.3928 12.25 11.0833 12.25H2.91667C2.60725 12.25 2.3105 12.1271 2.09171 11.9083C1.87292 11.6895 1.75 11.3928 1.75 11.0833V8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M9.91667 4.66667L7 1.75L4.08333 4.66667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7 1.75V8.75\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n  </span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">Upload file to</span>\n  <span class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#2563EB] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#93C5FD] cqa-rounded cqa-bg-[#DBEAFE]\">{{ selector }}</span>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px]\">File:</span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ fileName }}</span>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px]\">Source:</span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ source }}</span>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px]\">{{ sourcePath }}</span>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { ScreenshotStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-screenshot-step',\n  templateUrl: './screenshot-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseScreenshotStepComponent implements OnInit {\n  @Input() config!: ScreenshotStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() name?: string;\n  @Input() fullPage: boolean = false;\n  @Input() selector?: string;\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.name = this.config.name;\n      this.fullPage = this.config.fullPage || false;\n      this.selector = this.config.selector;\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  getScreenshotDescription(): string {\n    if (this.description) return this.description;\n    const scope = this.fullPage ? 'full page' : 'viewport';\n    const file = this.name ? `${this.name}.png` : `screenshot-{{timestamp}}.png`;\n    return `Capture ${scope} screenshot ${file}`;\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Screenshot Step Details',\n        description: this.config.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div [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') + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\">\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"Screenshot\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#FCE7F3] cqa-text-[#DB2777]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11.0833 2.33333H2.91667C2.27233 2.33333 1.75 2.85567 1.75 3.5V10.5C1.75 11.1443 2.27233 11.6667 2.91667 11.6667H11.0833C11.7277 11.6667 12.25 11.1443 12.25 10.5V3.5C12.25 2.85567 11.7277 2.33333 11.0833 2.33333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.25 5.83333C5.73325 5.83333 6.125 5.44158 6.125 4.95833C6.125 4.47508 5.73325 4.08333 5.25 4.08333C4.76675 4.08333 4.375 4.47508 4.375 4.95833C4.375 5.44158 4.76675 5.83333 5.25 5.83333Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M12.25 8.75L9.33333 5.83333L2.91667 11.6667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n  </span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">{{ getScreenshotDescription() }}</span>\n  <span *ngIf=\"name\" class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#DB2777] cqa-text-[14px] cqa-leading-[17px] cqa-font-semibold cqa-border cqa-border-solid cqa-border-[#F9A8D4] cqa-rounded cqa-bg-[#FCE7F3]\">{{ name }}</span>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ScrollStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-scroll-step',\n  templateUrl: './scroll-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseScrollStepComponent implements OnInit {\n  @Input() config!: ScrollStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() selector: string = '';\n  @Input() direction?: 'top' | 'bottom' | 'up' | 'down' | 'left' | 'right';\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() nestingLevel: number = 0;\n  @Input() expanded: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n  /** Saved action HTML from API — when set, row shows same text as edit modal and badges are clickable */\n  @Input() action: string = '';\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() toggleExpanded = new EventEmitter<{config: ScrollStepConfig, expanded: boolean}>();\n  @Output() selectorChange = new EventEmitter<string>();\n  @Output() directionChange = new EventEmitter<'top' | 'bottom' | 'up' | 'down' | 'left' | 'right'>();\n  /** Same as normal-step: click on element/test_data badge opens popup */\n  @Output() clickAction = new EventEmitter<MouseEvent>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor(private readonly sanitizer: DomSanitizer) {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.selector = this.config.selector;\n      this.direction = this.config.direction;\n      if ((this.config as any).action && !this.action) {\n        this.action = String((this.config as any).action);\n      }\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n      this.expanded = this.config.expanded || false;\n    }\n  }\n\n  /**\n   * Maps stored direction values to the same natural language used in template htmlGrammar\n   * (e.g. \"Scroll one screen up\") so the step row matches the edit modal.\n   */\n  /** Public for template: expanded panel shows same label as main row. */\n  /** Matches normal-step: base 16px + 24px per nesting level. */\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  getDirectionLabel(): string {\n    if (!this.direction) return '';\n    return this.directionToNaturalPhrase(this.direction);\n  }\n\n  private directionToNaturalPhrase(direction: string): string {\n    // Align with template htmlGrammar in edit modal (e.g. \"Scroll one screen up/bottom\").\n    // Same step must show identical wording in the list row and Selected Template.\n    const map: Record<string, string> = {\n      up: 'one screen up',\n      down: 'one screen down',\n      top: 'one screen top',\n      bottom: 'one screen bottom',\n      // Horizontal directions: keep unless templates use \"one screen left/right\"\n      left: 'to the left',\n      right: 'to the right',\n    };\n    const phrase = map[direction.toLowerCase()];\n    return phrase ?? direction;\n  }\n\n  /** When action HTML exists, render it (mirrors normal-step / edit modal). */\n  hasActionHtml(): boolean {\n    return !!(this.action && String(this.action).trim());\n  }\n\n  getActionHtml(): string {\n    if (!this.action) return '';\n    return this.sanitizer.bypassSecurityTrustHtml(this.action) as unknown as string;\n  }\n\n  clickOnAction(event: MouseEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.isInsideStepGroup) return;\n    this.clickAction.emit(event);\n  }\n\n  getDisplayText(): string {\n    if (!this.direction) {\n      return this.selector ? `Scroll ${this.selector}` : 'Scroll';\n    }\n    const phrase = this.directionToNaturalPhrase(this.direction);\n    // Match template wording: \"Scroll one screen up\" etc.; append selector when present.\n    if (this.selector && String(this.selector).trim() !== '') {\n      return `Scroll ${phrase} — ${this.selector}`;\n    }\n    return `Scroll ${phrase}`;\n  }\n\n  onToggleExpanded(): void {\n    this.expanded = !this.expanded;\n    this.toggleExpanded.emit({config: this.config, expanded: this.expanded});\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onDelete(): void { this.delete.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.onToggleExpanded();\n      this.viewDetails.emit({\n        event,\n        title: 'Scroll Step Details',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n  onSelectorChange(value: string): void { this.selector = value; this.selectorChange.emit(value); }\n  onDirectionChange(value: 'top' | 'bottom' | 'up' | 'down' | 'left' | 'right'): void {\n    this.direction = value;\n    this.directionChange.emit(value);\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col\" style=\"border-bottom: 1px solid #E5E7EB;\">\n  <div\n    [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '')\"\n    [style.opacity]=\"config?.shouldSkip ? '0.6' : null\"\n    [style.padding-left.px]=\"getRowPaddingLeftPx()\"\n    [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : null\">\n    <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !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    <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n      </svg>\n    </div>\n    <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n    <span title=\"Scroll\"\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-[#E0F2FE] cqa-text-[#0EA5E9]\">\n      <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M5.24935 1.75L2.91602 4.0775H4.66602V8.16667H5.83268V4.0775H7.58268L5.24935 1.75ZM9.33268 9.9225V5.83333H8.16602V9.9225H6.41602L8.74935 12.25L11.0827 9.9225H9.33268Z\" fill=\"currentColor\"/>\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-min-w-0\">\n        <!-- Same action HTML as edit modal so wording matches; badges delegate to step-list clickAction (element/test-data modals) -->\n        <span *ngIf=\"hasActionHtml()\"\n          class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-action-format cqa-align-middle cqa-min-w-0 cqa-flex-1\"\n          [innerHTML]=\"getActionHtml()\"\n          (click)=\"clickOnAction($event)\">\n        </span>\n        <span *ngIf=\"!hasActionHtml()\"\n          class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\">\n          {{ getDisplayText() }}\n        </span>\n      </div>\n      <!-- Expanded details: light blue panel with Selector, Direction -->\n      <div *ngIf=\"expanded\"\n        [class]=\"'cqa-py-1 cqa-px-3 cqa-rounded-lg cqa-border cqa-border-solid cqa-bg-[#E3F2FD] cqa-border-[#90CAF9]' + (isInsideLoop && isInsideStepGroup ? ' cqa-ml-20' : (isInsideLoop || isInsideStepGroup) ? ' cqa-ml-10' : '')\">\n        <div class=\"cqa-flex cqa-flex-wrap cqa-items-center cqa-gap-2 cqa-text-[12px] cqa-leading-[16px]\">\n          <span class=\"cqa-text-[#0D47A1] cqa-font-semibold\">Selector:</span>\n          <span class=\"cqa-py-1 cqa-px-2 cqa-rounded-[4px] cqa-border cqa-border-solid cqa-bg-[#fff] cqa-border-[#90CAF9] cqa-text-[#111827] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium\">{{selector}}</span>\n          <span *ngIf=\"direction\" class=\"cqa-text-[#6B7280]\">Direction: {{ getDirectionLabel() }}</span>\n        </div>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n      <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n      <!-- Action Icons - placed first -->\n      <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n      <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></button>\n      <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n      <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></button> -->\n      <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\"\n        class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></button>\n      <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\"\n        class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\"\n          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></button>\n      </div>\n\n      <!-- View Details Link (show only if description is not empty) -->\n      <a *ngIf=\"description && description.trim() !== ''\" #viewDetailsTrigger 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-1 cqa-no-underline\">{{\n        expanded ? 'Hide Details' : 'View Details' }}<svg [class.cqa-rotate-90]=\"expanded\" width=\"8\" height=\"8\"\n          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></a>\n\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>\n","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { VerifyUrlStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-verify-url-step',\n  templateUrl: './verify-url-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseVerifyUrlStepComponent implements OnInit {\n  @Input() config!: VerifyUrlStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() action?: string;\n  @Input() url?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.action = this.config.action;\n      this.url = this.config.url;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  getVerifyUrlDescription(): string {\n    // Only return the action, don't append URL separately\n    // The action field already contains the complete HTML with URL embedded\n    if (this.action) {\n      return this.action;\n    }\n    // Fallback: if no action is provided\n    return 'Verify URL';\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Verify URL Step Details',\n        description: this.config.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div [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') + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\">\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"Verify URL\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#FFE4E6] cqa-text-[#E11D48]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" [innerHTML]=\"getVerifyUrlDescription()\"></span>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { RestoreSessionStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-restore-session-step',\n  templateUrl: './restore-session-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseRestoreSessionStepComponent implements OnInit {\n  @Input() config!: RestoreSessionStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() action?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() nestingLevel: number = 0;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  constructor() {}\n\n  getRowPaddingLeftPx(): number {\n    const level = Number(this.nestingLevel) || 0;\n    return 16 + (level * 24);\n  }\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.action = this.config.action;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  getRestoreSessionDescription(): string {\n    // Return the action content, which may contain HTML\n    if (this.action) {\n      return this.action;\n    }\n    // Fallback: if no action is provided\n    return 'Restore Session';\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.config.description || this.config.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Restore Session Step Details',\n        description: this.config.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div [class]=\"'step-row cqa-flex cqa-items-center cqa-gap-3 cqa-py-2 cqa-pr-4' + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.padding-left.px]=\"getRowPaddingLeftPx()\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\">\n  <div *ngIf=\"!isInsideStepGroup\" 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=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"Restore Session\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#FFEDD5] cqa-text-[#EA580C]\">\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 7C1.75 8.03835 2.05791 9.05339 2.63478 9.91674C3.21166 10.7801 4.0316 11.453 4.99091 11.8504C5.95022 12.2477 7.00582 12.3517 8.02422 12.1491C9.04262 11.9466 9.97808 11.4465 10.7123 10.7123C11.4465 9.97808 11.9466 9.04262 12.1491 8.02422C12.3517 7.00582 12.2477 5.95022 11.8504 4.99091C11.453 4.0316 10.7801 3.21166 9.91674 2.63478C9.05339 2.05791 8.03835 1.75 7 1.75C5.53231 1.75552 4.12357 2.32821 3.06833 3.34833L1.75 4.66667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      <path d=\"M1.75 1.75V4.66667H4.66667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n    </svg>\n  </span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px]\" [innerHTML]=\"getRestoreSessionDescription()\"></span>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"config.description && config.description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import { Component, Input, Output, EventEmitter, OnInit, ViewChild, ElementRef } from '@angular/core';\nimport { CustomCodeStepConfig, TestCaseStepConfig } from '../test-case-step.models';\nimport { STEP_ROW_ACTIONS_STYLES } from '../step-row-actions.styles';\nimport { ViewDetailsPayload } from '../step-details-modal/step-details-modal-data';\n\n@Component({\n  selector: 'cqa-test-case-custom-code-step',\n  templateUrl: './custom-code-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  styles: [STEP_ROW_ACTIONS_STYLES],\n})\nexport class TestCaseCustomCodeStepComponent implements OnInit {\n  @Input() config!: CustomCodeStepConfig;\n  @Input() stepNumber!: number | string;\n  @Input() index?: number;\n  @Input() language: 'javascript' | 'python' | 'typescript' = 'javascript';\n  @Input() code: string = '';\n  @Input() description?: string;\n  @Input() selected: boolean = false;\n  @Input() disabled: boolean = false;\n  @Input() isNested: boolean = false;\n  @Input() isInsideStepGroup: boolean = false;\n  @Input() isInsideLoop: boolean = false;\n  @Input() isReorder: boolean = false;\n  @Input() editable: boolean = true;\n\n  @ViewChild('viewDetailsTrigger', { static: false }) viewDetailsTrigger?: ElementRef<HTMLElement>;\n\n  constructor() {}\n\n  @Output() edit = new EventEmitter<void>();\n  @Output() editInDepth = new EventEmitter<{ step: TestCaseStepConfig; index: number }>();\n  @Output() link = new EventEmitter<void>();\n  @Output() duplicate = new EventEmitter<void>();\n  @Output() delete = new EventEmitter<void>();\n  @Output() moreOptions = new EventEmitter<void>();\n  @Output() viewDetails = new EventEmitter<ViewDetailsPayload>();\n  @Output() selectionChange = new EventEmitter<boolean>();\n  @Output() stepUpdate = new EventEmitter<TestCaseStepConfig>();\n\n  ngOnInit(): void {\n    if (this.config) {\n      this.stepNumber = this.config.stepNumber;\n      this.language = this.config.language;\n      this.code = this.config.code;\n      this.description = this.config.description;\n      this.selected = this.config.selected || false;\n      this.disabled = this.config.disabled || false;\n    }\n  }\n\n  getLanguageLabel(): string {\n    return this.language.charAt(0).toUpperCase() + this.language.slice(1);\n  }\n\n  getCodePreview(): string {\n    const firstLine = (this.code || '').split('\\n')[0] || '';\n    return firstLine.length > 60 ? firstLine.slice(0, 60) + '...' : firstLine;\n  }\n\n  onEdit(): void {\n    const idx = typeof this.index === 'number' ? this.index : (typeof this.stepNumber === 'number' ? this.stepNumber - 1 : (typeof this.stepNumber === 'string' ? parseInt(this.stepNumber, 10) - 1 : 0));\n    this.editInDepth.emit({ step: this.config as TestCaseStepConfig, index: isNaN(idx as number) ? 0 : (idx as number) });\n    this.edit.emit();\n  }\n  onSkipToggle(): void {\n    // Toggle: if currently true → pass false (unskip); if currently false/undefined → pass true (skip)\n    const currentlySkipped = !!(this.config?.shouldSkip);\n    const shouldSkipNext = !currentlySkipped;\n    this.stepUpdate.emit({ ...this.config, shouldSkip: shouldSkipNext } as TestCaseStepConfig);\n  }\n  onLink(): void { this.link.emit(); }\n  onDuplicate(): void { this.duplicate.emit(); }\n  onDelete(): void { this.delete.emit(); }\n  onMoreOptions(): void { this.moreOptions.emit(); }\n  onViewDetails(event?: MouseEvent): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    \n    if (!this.description || this.description.trim() === '') {\n      return;\n    }\n\n    if (event) {\n      this.viewDetails.emit({\n        event,\n        title: 'Custom Code Step Details',\n        description: this.description,\n      });\n    }\n  }\n  onSelectionChange(checked: boolean): void { this.selected = checked; this.selectionChange.emit(checked); }\n}\n","<div [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') + (config?.shouldSkip ? ' cqa-step-skipped' : '') \" [style.opacity]=\"config?.shouldSkip ? '0.6' : null\" [style.border-top]=\"isInsideStepGroup ? '1px solid #BEDBFF' : '1px solid #E5E7EB'\">\n  <div *ngIf=\"!isInsideStepGroup\" 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      </svg>\n    </div>\n    <!-- Checkbox (when isReorder is false and not inside step group - hide for steps inside step groups) -->\n    <label *ngIf=\"editable && !isReorder && !isInsideStepGroup\" class=\"cqa-flex cqa-items-center cqa-cursor-pointer cqa-relative cqa-mr-2\">\n      <input type=\"checkbox\"\n        [ngModel]=\"selected\"\n        [disabled]=\"disabled\"\n        (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\"\n        [class.cqa-border-[#3F43EE]]=\"selected\"\n        id=\"check\" />\n      <span 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\"\n        [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\"><path d=\"M10 3.125L4.5 8.625L2 6.125\" stroke=\"white\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </span>\n    </label>\n  </div>\n  <div *ngIf=\"isInsideStepGroup\" class=\"cqa-flex cqa-flex-shrink-0 cqa-items-center cqa-pl-0 cqa-pr-1 cqa-text-[#9CA3AF]\" aria-hidden=\"true\" title=\"Step is inside a group\">\n    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M11.9998 5.66667H11.3332V4.33333C11.3332 2.49333 9.83984 1 7.99984 1C6.15984 1 4.6665 2.49333 4.6665 4.33333V5.66667H3.99984C3.2665 5.66667 2.6665 6.26667 2.6665 7V13.6667C2.6665 14.4 3.2665 15 3.99984 15H11.9998C12.7332 15 13.3332 14.4 13.3332 13.6667V7C13.3332 6.26667 12.7332 5.66667 11.9998 5.66667ZM5.99984 4.33333C5.99984 3.22667 6.89317 2.33333 7.99984 2.33333C9.1065 2.33333 9.99984 3.22667 9.99984 4.33333V5.66667H5.99984V4.33333ZM11.9998 13.6667H3.99984V7H11.9998V13.6667ZM7.99984 11.6667C8.73317 11.6667 9.33317 11.0667 9.33317 10.3333C9.33317 9.6 8.73317 9 7.99984 9C7.2665 9 6.6665 9.6 6.6665 10.3333C6.6665 11.0667 7.2665 11.6667 7.99984 11.6667Z\" fill=\"currentColor\"/>\n    </svg>\n  </div>\n  <span class=\"cqa-text-[#6B7280] cqa-text-[14px] cqa-leading-[18px] cqa-min-w-[32px]\">{{ stepNumber }}</span>\n  <span title=\"Custom Code\" class=\"cqa-w-8 cqa-h-8 cqa-rounded-lg cqa-flex cqa-items-center cqa-justify-center cqa-flex-shrink-0 cqa-bg-[#F3F4F6] cqa-text-[#374151]\">\n    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4.66667 4.08333L1.75 7L4.66667 9.91667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M9.33333 4.08333L12.25 7L9.33333 9.91667\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16667 1.75L5.83333 12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n  </span>\n  <span class=\"cqa-py-0.5 cqa-px-2 cqa-text-[#374151] cqa-text-[12px] cqa-leading-[15px] cqa-font-medium cqa-border cqa-border-solid cqa-border-[#D1D5DB] cqa-rounded cqa-bg-[#F9FAFB]\">{{ getLanguageLabel() }}</span>\n  <span class=\"cqa-text-[#111827] cqa-text-[14px] cqa-leading-[18px] cqa-font-mono\">{{ getCodePreview() }}</span>\n  <div class=\"cqa-flex-grow\"></div>\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-self-center\">\n    <span *ngIf=\"config?.shouldSkip\" class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5] cqa-rounded-lg cqa-py-0.5 cqa-px-2 cqa-text-[#0A0A0A] cqa-text-[12px] cqa-leading-[15px] cqa-flex-shrink-0\">Skipped</span>\n    <div *ngIf=\"editable && !isInsideStepGroup && !isReorder\" class=\"step-actions cqa-flex cqa-items-center cqa-gap-1.5 cqa-pr-2\">\n    <button type=\"button\" (click)=\"onEdit(); $event.stopPropagation()\" title=\"Edit\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 11.6666H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onSkipToggle(); $event.stopPropagation()\" [attr.title]=\"config?.shouldSkip ? 'Unskip step' : 'Skip step'\" [style.color]=\"config?.shouldSkip ? '#1447E6' : null\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.25 8.75C9.2165 8.75 10 7.9665 10 7C10 6.0335 9.2165 5.25 8.25 5.25C7.2835 5.25 6.5 6.0335 6.5 7C6.5 7.9665 7.2835 8.75 8.25 8.75Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.75033 2.91663H5.25033C2.99516 2.91663 1.16699 4.7448 1.16699 6.99996C1.16699 9.25512 2.99516 11.0833 5.25033 11.0833H8.75033C11.0055 11.0833 12.8337 9.25512 12.8337 6.99996C12.8337 4.7448 11.0055 2.91663 8.75033 2.91663Z\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <!-- <button type=\"button\" (click)=\"onLink(); $event.stopPropagation()\" title=\"Link\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.33398 7H9.66732\" stroke=\"currentColor\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button> -->\n    <button type=\"button\" (click)=\"onDuplicate(); $event.stopPropagation()\" title=\"Duplicate\" class=\"cqa-p-0 cqa-text-[#99A1Af] hover:cqa-text-[#1447E6]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    <button type=\"button\" (click)=\"onDelete(); $event.stopPropagation()\" title=\"Delete\" class=\"cqa-p-0 cqa-text-[#ff6467] hover:cqa-text-[#C63535]\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1.75 3.5H12.25\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path 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\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M5.83398 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8.16602 6.41663V9.91663\" stroke=\"currentColor\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></button>\n    </div>\n    <a *ngIf=\"description && description.trim() !== ''\" #viewDetailsTrigger href=\"#\" (click)=\"onViewDetails($event)\" class=\"cqa-text-[#3F43EE] cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 cqa-no-underline\">View Details<svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2.03809 6.74329L2.62809 7.33329L5.96142 3.99996L2.62809 0.666626L2.03809 1.25663L4.78142 3.99996L2.03809 6.74329Z\" fill=\"#3F43EE\"/></svg></a>\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","import {\n  ChangeDetectionStrategy,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n} from '@angular/core';\nimport { CqaListItemConfig } from './item-list.model';\n\n@Component({\n  selector: 'cqa-item-list',\n  templateUrl: './item-list.component.html',\n  host: {\n    class: 'cqa-ui-root',\n    '[class.cqa-item-list-scrollable-host]': 'scrollable',\n  },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ItemListComponent {\n  /** List items to display (e.g. mapped from Parameter, Environment, or any domain model) */\n  @Input() items: CqaListItemConfig[] = [];\n\n  /** Id of the currently selected item; used for highlight and to show edit icon when showEdit is true */\n  @Input() selectedId: string | null = null;\n\n  /** Message shown when items array is empty (e.g. \"No parameters match your search.\") */\n  @Input() emptyMessage = 'No items to display.';\n\n  /** When true (default), the list container is scrollable (flex-1 min-h-0 overflow-y-auto). */\n  @Input() scrollable = true;\n\n  /** Emitted when an item row is clicked (passes the item id). */\n  @Output() itemSelect = new EventEmitter<string>();\n\n  /** Emitted when the edit icon is clicked (passes the item id). Call stopPropagation in parent if needed. */\n  @Output() itemEdit = new EventEmitter<string>();\n\n  /** Normalized items (never undefined) so template is safe. */\n  get displayItems(): CqaListItemConfig[] {\n    return this.items ?? [];\n  }\n\n  trackById(_index: number, item: CqaListItemConfig): string {\n    return item.id;\n  }\n\n  isSelected(item: CqaListItemConfig): boolean {\n    return this.selectedId === item.id;\n  }\n\n  onItemClick(item: CqaListItemConfig): void {\n    this.itemSelect.emit(item.id);\n  }\n\n  onEditClick(event: Event, item: CqaListItemConfig): void {\n    event.stopPropagation();\n    this.itemEdit.emit(item.id);\n  }\n}\n","<div\n  class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-h-0 cqa-max-h-[200px]\"\n  [class.cqa-flex-1]=\"scrollable\"\n  [class.cqa-min-h-0]=\"scrollable\"\n  [class.cqa-overflow-y-auto]=\"scrollable\"\n  [class.cqa-item-list-scroll-hide-scrollbar]=\"scrollable\">\n  <button\n    *ngFor=\"let item of displayItems; trackBy: trackById\"\n    type=\"button\"\n    (click)=\"onItemClick(item)\"\n    [class.cqa-bg-[#D8D9FC]]=\"isSelected(item)\"\n    [class.cqa-border]=\"isSelected(item)\"\n    [class.cqa-border-solid]=\"isSelected(item)\"\n    [class.cqa-border-[#3F43EE]]=\"isSelected(item)\"\n    class=\"cqa-item-list-row cqa-w-full cqa-text-left cqa-rounded-lg cqa-p-1 cqa-transition-colors cqa-bg-white hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#D8D9FC]\">\n    <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n      <div class=\"cqa-flex-1 cqa-min-w-0\">\n        <p class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-truncate\">\n          {{ item.title }}\n        </p>\n        <p *ngIf=\"item.subtitle\" class=\"cqa-text-[10px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5 cqa-truncate\">\n          {{ item.subtitle }}\n        </p>\n      </div>\n      <div class=\"cqa-flex cqa-flex-col cqa-items-end cqa-gap-1 cqa-flex-shrink-0\">\n        <span *ngIf=\"item.badge\" class=\"cqa-item-list-badge\">\n          {{ item.badge }}\n        </span>\n        <button\n          *ngIf=\"item.showEdit\"\n          type=\"button\"\n          (click)=\"onEditClick($event, item)\"\n          class=\"cqa-p-1 cqa-rounded cqa-text-[#1447E6] hover:cqa-bg-[#E5E7EB] cqa-flex cqa-items-center cqa-justify-center\"\n          title=\"Edit\"\n          aria-label=\"Edit\">\n          <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">edit</mat-icon>\n        </button>\n      </div>\n    </div>\n  </button>\n  <p *ngIf=\"displayItems.length === 0\" class=\"cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280] cqa-m-0 cqa-py-4 cqa-text-center\">\n    {{ emptyMessage }}\n  </p>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport {\n  TestCaseStepConfig,\n  NormalStepConfig,\n  TestCaseEventType,\n  isNormalStepConfig,\n} from '../test-case-step.models';\n\nexport interface CreateStepGroupFormData {\n  groupName: string;\n  /** When true, replace selected steps with the new group (same as cases screen Create and replace). */\n  isReplace?: boolean;\n}\n\n/**\n * Create Step Group panel/modal for Test Case Details.\n * Follows the same structure and validation pattern as Test Data Modal and Loop Step.\n * Displays selected steps and allows naming the new group; emits createGroup with group name\n * so the host can create the step group and replace selected steps with it.\n */\n@Component({\n  selector: 'cqa-create-step-group',\n  templateUrl: './create-step-group.component.html',\n  host: { class: 'cqa-ui-root' },\n})\nexport class CreateStepGroupComponent {\n  @Input() stepsToGroup: TestCaseStepConfig[] = [];\n  /** Pre-computed display labels from host (same order as stepsToGroup). When provided, used instead of computing from step. */\n  @Input() stepLabels: string[] = [];\n\n  @Output() createGroup = new EventEmitter<CreateStepGroupFormData>();\n  @Output() cancelled = new EventEmitter<void>();\n\n  form: FormGroup;\n\n  constructor(private readonly fb: FormBuilder) {\n    this.form = this.fb.group({\n      groupName: ['', [Validators.required, Validators.minLength(1)]],\n    });\n  }\n\n  get stepsCount(): number {\n    return this.stepsToGroup?.length ?? 0;\n  }\n\n  get subtitleText(): string {\n    const n = this.stepsCount;\n    return n === 1\n      ? 'Group 1 selected step into a container'\n      : `Group ${n} selected steps into a container`;\n  }\n\n  /** Display label for a step in the \"Steps to group\" list (same as main step list - use stepLabels when provided). */\n  getStepDisplayLabel(step: TestCaseStepConfig, index: number): string {\n    if (this.stepLabels?.length > index && this.stepLabels[index] != null && this.stepLabels[index] !== '') {\n      return this.stepLabels[index];\n    }\n    // Prefer step.action - it matches the full display in the step list (e.g. \"Enter @|password| in the Email\")\n    const rawAction = step.action != null && String(step.action).trim() !== '' ? String(step.action) : '';\n    if (rawAction) {\n      return this.stripHtml(rawAction);\n    }\n    if (isNormalStepConfig(step)) {\n      return this.getNormalStepLabel(step);\n    }\n    if ('groupName' in step && step.groupName) {\n      return step.groupName;\n    }\n    if ('condition' in step && step.condition) {\n      return step.condition;\n    }\n    if ('loopType' in step) {\n      const loop = step as { loopType: string; testDataProfile?: string; condition?: string };\n      if (loop.loopType === 'for' && loop.testDataProfile) {\n        return `For loop: ${loop.testDataProfile}`;\n      }\n      if (loop.loopType === 'while' && loop.condition) {\n        return `While: ${loop.condition}`;\n      }\n    }\n    if (step.description) {\n      return step.description;\n    }\n    return `Step ${index + 1}`;\n  }\n\n  /** Strip HTML tags for plain-text display (action may contain spans for badges). */\n  private stripHtml(html: string): string {\n    if (typeof document !== 'undefined') {\n      const tmp = document.createElement('div');\n      tmp.innerHTML = html;\n      return (tmp.textContent || tmp.innerText || '').trim();\n    }\n    return html.replace(/<[^>]*>/g, '').replace(/&nbsp;/g, ' ').trim();\n  }\n\n  private getNormalStepLabel(step: NormalStepConfig): string {\n    const params = step.parameters ?? [];\n    const getParam = (name: string) =>\n      params.find((p) => p.name?.toLowerCase() === name.toLowerCase());\n    const val = (p: { value?: string; displayValue?: string } | undefined) =>\n      p?.displayValue ?? p?.value ?? '';\n    /** Use raw value (strip surrounding quotes from displayValue) for building full sentences */\n    const rawVal = (p: { value?: string; displayValue?: string } | undefined) => {\n      const v = p?.value ?? p?.displayValue ?? '';\n      const s = String(v);\n      return s.replace(/^[\"']|[\"']$/g, '').trim() || s;\n    };\n\n    switch (step.eventType as TestCaseEventType) {\n      case 'navigate': {\n        const url = getParam('url') ?? params.find((p) => /url|baseUrl/i.test(p.name || ''));\n        return url ? `Navigate to ${rawVal(url)}` : 'Navigate';\n      }\n      case 'enter': {\n        const valueParam = getParam('value');\n        const labelParam = getParam('label');\n        const value = rawVal(valueParam);\n        const label = rawVal(labelParam);\n        if (value && label) return `Enter ${value} in the ${label}`;\n        if (value) return `Enter ${value}`;\n        if (label) return `Enter in the ${label}`;\n        return 'Enter';\n      }\n      case 'ai-agent': {\n        const instructions = getParam('instructions') ?? getParam('description');\n        return val(instructions) || 'AI Agent step';\n      }\n      case 'type': {\n        const textParam = getParam('text') ?? getParam('value');\n        const elementParam = getParam('element') ?? getParam('label') ?? getParam('selector');\n        const text = rawVal(textParam);\n        const element = rawVal(elementParam);\n        if (text && element) return `Enter ${text} in the ${element}`;\n        if (text) return `Enter ${text}`;\n        return 'Type';\n      }\n      case 'click': {\n        const selector = getParam('element') ?? getParam('selector');\n        return selector ? `Click on ${rawVal(selector)}` : 'Click';\n      }\n      case 'doubleClick': {\n        const selector = getParam('element') ?? getParam('selector');\n        return selector ? `Double click on ${rawVal(selector)}` : 'Double click';\n      }\n      case 'pressEnter': {\n        const element = getParam('element');\n        return element ? `Press Enter on ${rawVal(element)}` : 'Press Enter';\n      }\n      case 'verify':\n        return val(getParam('description')) || 'Verify';\n      case 'custom': {\n        const desc = getParam('description') ?? getParam('action');\n        return val(desc) || 'Custom step';\n      }\n      default:\n        return val(getParam('description')) || val(params[0]) || 'Step';\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onCreateGroup(isReplace = false): void {\n    if (this.form.invalid || this.stepsCount === 0) {\n      this.form.markAllAsTouched();\n      return;\n    }\n    const groupName = (this.form.get('groupName')?.value ?? '').trim();\n    if (!groupName) {\n      this.form.get('groupName')?.setErrors({ required: true });\n      return;\n    }\n    this.createGroup.emit({ groupName, isReplace });\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n  <!-- Header: title + close (X) -->\n  <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n      <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0\">\n        Create step group\n      </h2>\n      <p class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#64748B] cqa-m-0\">\n        {{ subtitleText }}\n      </p>\n    </div>\n    <button\n      type=\"button\"\n      (click)=\"onCancel()\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n      title=\"Close\"\n      aria-label=\"Close\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M18 6L6 18M6 6l12 12\" />\n      </svg>\n    </button>\n  </div>\n\n  <!-- Group name * -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#161617]\">\n      Group name <span class=\"cqa-text-red-500\">*</span>\n    </label>\n    <cqa-custom-input\n      placeholder=\"e.g., Authentication flow\"\n      [value]=\"form.get('groupName')?.value\"\n      [fullWidth]=\"true\"\n      size=\"md\"\n      (valueChange)=\"form.get('groupName')?.setValue($event); form.get('groupName')?.updateValueAndValidity()\">\n    </cqa-custom-input>\n    <p *ngIf=\"form.get('groupName')?.invalid && form.get('groupName')?.touched\" class=\"cqa-text-xs cqa-text-red-500 cqa-m-0\">\n      Group name is required.\n    </p>\n  </div>\n\n  <!-- Steps to group (N) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n      Steps to group ({{ stepsCount }})\n    </label>\n    <div class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-overflow-y-auto cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n      <div\n        *ngFor=\"let step of stepsToGroup; let i = index\"\n        class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-rounded-[4px] cqa-py-[4px] cqa-px-[8px] cqa-bg-[rgba(216,217,252,0.3)]\">\n        <!-- Numbered badge -->\n        <span\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#3F43EE] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n          {{ i + 1 }}\n        </span>\n        <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-action-format cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#0B0B0C] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n        </span>\n      </div>\n    </div>\n  </div>\n\n  <!-- Actions: Cancel | Create group | Create and replace -->\n  <div class=\"cqa-flex cqa-items-center cqa-w-full cqa-gap-3\">\n    <cqa-button\n      variant=\"outlined\"\n      btnSize=\"lg\"\n      text=\"Cancel\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146] cqa-whitespace-nowrap'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button\n      variant=\"filled\"\n      btnSize=\"lg\"\n      text=\"Create\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n      (clicked)=\"onCreateGroup(false)\">\n    </cqa-button>\n    <div class=\"cqa-flex-1 cqa-min-w-0\">\n      <cqa-button\n        variant=\"filled\"\n        btnSize=\"lg\"\n        text=\"Create and replace\"\n        [fullWidth]=\"true\"\n        [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE] cqa-whitespace-nowrap'\"\n        (clicked)=\"onCreateGroup(true)\">\n      </cqa-button>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output, Inject, Optional } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport {\n  TestCaseStepConfig,\n  NormalStepConfig,\n  TestCaseEventType,\n  isNormalStepConfig,\n} from '../test-case-step.models';\n\n/**\n * Delete Steps confirmation modal for Test Case Details.\n * Matches the design of Create Step Group: shows selected steps with context (e.g. \"IF lane\"),\n * warning text, and Cancel / Delete actions. Steps are shown with red/danger styling.\n */\n@Component({\n  selector: 'cqa-delete-steps',\n  templateUrl: './delete-steps.component.html',\n  host: { class: 'cqa-ui-root' },\n})\nexport class DeleteStepsComponent {\n  /** Steps that will be deleted (shown in the list). */\n  stepsToDelete: TestCaseStepConfig[] = [];\n\n  /** Context label for the sub-heading, e.g. \"IF lane\", \"ELSE\", \"For loop\". */\n  contextLabel = '';\n\n  /** Optional step images/screenshots map: stepId -> imageUrl */\n  stepImages: Map<string | number, string> = new Map();\n\n  /** Pre-computed display labels from host (e.g. ts-portal-ui), same order as stepsToDelete. */\n  stepLabels: string[] = [];\n\n  constructor(@Optional() @Inject(MAT_DIALOG_DATA) public data?: {\n    stepsToDelete?: TestCaseStepConfig[];\n    contextLabel?: string;\n    stepImages?: Map<string | number, string>;\n    stepLabels?: string[];\n  }) {\n    if (data) {\n      this.stepsToDelete = data.stepsToDelete || [];\n      this.contextLabel = data.contextLabel || '';\n      this.stepImages = data.stepImages || new Map();\n      this.stepLabels = data.stepLabels || [];\n    }\n  }\n\n  @Output() confirmDelete = new EventEmitter<void>();\n  @Output() cancelled = new EventEmitter<void>();\n\n  get stepsCount(): number {\n    return this.stepsToDelete?.length ?? 0;\n  }\n\n  get titleText(): string {\n    const n = this.stepsCount;\n    return n === 1 ? 'Delete 1 step?' : `Delete ${n} steps?`;\n  }\n\n  get selectedStepsSubtitle(): string {\n    return `Selected (${this.stepsCount}) steps for deletion, are you sure you want to delete these steps?`;\n  }\n\n  /** Display label: use stepLabels from host when provided, else compute from step. */\n  getStepDisplayLabel(step: TestCaseStepConfig, index: number): string {\n    if (this.stepLabels?.length > index && this.stepLabels[index] != null && this.stepLabels[index] !== '') {\n      return this.stepLabels[index];\n    }\n    if (isNormalStepConfig(step)) {\n      return this.getNormalStepLabel(step);\n    }\n    if ('groupName' in step && step.groupName) {\n      return step.groupName;\n    }\n    if ('condition' in step && step.condition) {\n      return step.condition;\n    }\n    if ('loopType' in step) {\n      const loop = step as { loopType: string; testDataProfile?: string; condition?: string };\n      if (loop.loopType === 'for' && loop.testDataProfile) {\n        return `For loop: ${loop.testDataProfile}`;\n      }\n      if (loop.loopType === 'while' && loop.condition) {\n        return `While: ${loop.condition}`;\n      }\n    }\n    if (step.description) {\n      return step.description;\n    }\n    return `Step ${index + 1}`;\n  }\n\n  private getNormalStepLabel(step: NormalStepConfig): string {\n    const params = step.parameters ?? [];\n    const getParam = (name: string) =>\n      params.find((p) => p.name?.toLowerCase() === name.toLowerCase());\n    const val = (p: { value?: string; displayValue?: string } | undefined) =>\n      p?.displayValue ?? p?.value ?? '';\n\n    switch (step.eventType as TestCaseEventType) {\n      case 'navigate': {\n        const url = getParam('url');\n        return url ? `Navigate to ${val(url)}` : 'Navigate to';\n      }\n      case 'ai-agent': {\n        const instructions = getParam('instructions') ?? getParam('description');\n        return val(instructions) || 'AI Agent step';\n      }\n      case 'type':\n        return val(getParam('text')) || 'Type';\n      case 'click':\n        return val(getParam('selector')) ? `Click ${val(getParam('selector'))}` : 'Click';\n      case 'verify':\n        return val(getParam('description')) || 'Verify';\n      case 'custom': {\n        const desc = getParam('description') ?? getParam('action');\n        return val(desc) || 'Custom step';\n      }\n      default:\n        return val(getParam('description')) || val(params[0]) || 'Step';\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onDelete(): void {\n    this.confirmDelete.emit();\n  }\n\n  /** Get step image URL if available */\n  getStepImage(step: TestCaseStepConfig): string | null {\n    if (!step?.id) return null;\n    return this.stepImages.get(step.id) || null;\n  }\n\n  /** Check if step has an image */\n  hasStepImage(step: TestCaseStepConfig): boolean {\n    return this.getStepImage(step) !== null;\n  }\n\n  /** Get step number from step data, falling back to index + 1 */\n  getStepNumber(step: TestCaseStepConfig, index: number): number | string {\n    const stepNum = (step as any)?.stepNumber;\n    if (stepNum != null && stepNum !== '') {\n      return stepNum;\n    }\n    return index + 1;\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n  <!-- Header: title + close (X) -->\n  <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n      <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n        {{ titleText }}\n      </h2>\n      <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n        This action cannot be undone, but you can use the undo function in the toolbar.\n      </p>\n    </div>\n    <button\n      type=\"button\"\n      (click)=\"onCancel()\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n      title=\"Close\"\n      aria-label=\"Close\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M18 6L6 18M6 6l12 12\" />\n      </svg>\n    </button>\n  </div>\n\n  <!-- Selected steps for [context] (N) – scroll when many steps, scrollbar hidden (same as create-step-group) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-h-0\">\n    <label class=\"cqa-font-semibold cqa-text-[12px] cqa-leading-[100%] cqa-tracking-normal cqa-text-[#0A0A0A] cqa-align-middle\">\n      {{ selectedStepsSubtitle }}\n    </label>\n    <div *ngIf=\"stepsCount === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280] cqa-p-4 cqa-text-center\">\n      No steps selected. Please select at least one step to delete.\n    </div>\n    <div *ngIf=\"stepsCount > 0\" class=\"cqa-scrollbar-hide cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[200px] cqa-min-h-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-rounded-[8px] cqa-p-[6px] cqa-border cqa-border-solid cqa-border-[rgba(0,0,0,0.1)]\">\n      <div\n        *ngFor=\"let step of stepsToDelete; let i = index\"\n        class=\"cqa-flex cqa-items-center cqa-gap-[8px] cqa-rounded-[4px] cqa-pt-[4px] cqa-pb-[4px] cqa-pl-[8px] cqa-pr-[8px] cqa-bg-[rgba(238,63,63,0.1)]\">\n        <!-- Numbered badge (red) -->\n        <span\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded-full cqa-bg-[#C63535] cqa-text-white cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex-shrink-0\">\n          {{ getStepNumber(step, i) }}\n        </span>\n        <!-- Step image if available -->\n        <img\n          *ngIf=\"hasStepImage(step)\"\n          [src]=\"getStepImage(step)\"\n          [alt]=\"'Step ' + getStepNumber(step, i)\"\n          class=\"cqa-w-8 cqa-h-8 cqa-rounded-[4px] cqa-object-cover cqa-flex-shrink-0 cqa-border cqa-border-solid cqa-border-[rgba(220,38,38,0.2)]\">\n        <span [innerHTML]=\"getStepDisplayLabel(step, i)\" class=\"cqa-font-medium cqa-text-[10px] cqa-leading-[15px] cqa-tracking-[0px] cqa-text-[#DC2626] cqa-flex-1 cqa-min-w-0 cqa-truncate\">\n        </span>\n      </div>\n    </div>\n  </div>  \n\n  <!-- Actions: Cancel | Delete (right-aligned) -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n    <cqa-button\n      variant=\"outlined\"\n      btnSize=\"lg\"\n      text=\"Cancel\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button\n      variant=\"filled\"\n      btnSize=\"lg\"\n      text=\"Delete\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#EE3F3F] cqa-text-white'\"\n      [disabled]=\"stepsCount === 0\"\n      (clicked)=\"onDelete()\">\n    </cqa-button>\n  </div>\n</div>\n","import { Component, EventEmitter, Output, Inject, Optional, Input } from '@angular/core';\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { FormGroup } from '@angular/forms';\nimport { DynamicSelectFieldConfig } from '../../dynamic-select/dynamic-select-field.component';\n\n/**\n * Run Execution alert modal when the user clicks Execution but the test case has no prerequisites.\n * Similar to delete-steps: two actions — \"Cancel\" (abort) and \"Run Anyway\" (proceed with execution).\n */\n@Component({\n  selector: 'cqa-run-execution-alert',\n  templateUrl: './run-execution-alert.component.html',\n  host: { class: 'cqa-ui-root' },\n})\nexport class RunExecutionAlertComponent {\n  /**\n   * Title text shown in the header.\n   * Can be provided either via @Input() or MAT_DIALOG_DATA.\n   */\n  @Input() title = 'No prerequisites';\n\n  /**\n   * Body message shown under the title.\n   * Can be provided either via @Input() or MAT_DIALOG_DATA.\n   */\n  @Input() message = 'This test case has no prerequisites. Do you want to run execution anyway?';\n\n  /**\n   * Optional form and config for a prerequisite select field.\n   * When provided, a cqa-dynamic-select will be rendered inside this component.\n   */\n  @Input() prerequisiteForm?: FormGroup | null;\n  @Input() prerequisiteSelectConfig?: DynamicSelectFieldConfig | null;\n\n  /** Emitted when user wants to run with prerequisites. */\n  @Output() runWithPrerequisites = new EventEmitter<void>();\n\n  constructor(\n    @Optional() @Inject(MAT_DIALOG_DATA) data?: { title?: string; message?: string }\n  ) {\n    // When used inside an Angular Material dialog, allow MAT_DIALOG_DATA\n    // to override the default title/message. @Input() bindings from a\n    // parent component will still run after this constructor.\n    if (data?.title) this.title = data.title;\n    if (data?.message) this.message = data.message;\n  }\n\n  /** Emitted when user confirms they want to proceed (Run Anyway). */\n  @Output() runAnyway = new EventEmitter<void>();\n\n  /** Emitted when user cancels/closes the alert. */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** True when \"Run with Prerequisites\" should be disabled (no selection). */\n  get disableRunWithPrereq(): boolean {\n    if (!this.prerequisiteForm || !this.prerequisiteSelectConfig?.key) {\n      return true;\n    }\n    const ctrl = this.prerequisiteForm.get(this.prerequisiteSelectConfig.key);\n    const value = ctrl?.value;\n    if (Array.isArray(value)) {\n      return value.length === 0;\n    }\n    return !value;\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onRunAnyway(): void {\n    this.runAnyway.emit();\n  }\n\n  onRunWithPrerequisites(): void {\n    this.runWithPrerequisites.emit();\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-full cqa-max-w-[500px] cqa-flex cqa-flex-col cqa-gap-4 cqa-p-6 cqa-box-border cqa-min-h-0\">\n  <!-- Header: title + close (X) -->\n  <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-2\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n      <h2 class=\"cqa-font-medium cqa-text-[22px] cqa-leading-[28px] cqa-tracking-normal cqa-text-[#101828] cqa-m-0\">\n        {{ title }}\n      </h2>\n      <p class=\"cqa-font-normal cqa-text-[14px] cqa-leading-[21px] cqa-tracking-[-0.15px] cqa-text-[#4A5565] cqa-m-0\">\n        {{ message }}\n      </p>\n    </div>\n    <button\n      type=\"button\"\n      (click)=\"onCancel()\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-7 cqa-min-w-7 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0 cqa-flex-shrink-0\"\n      title=\"Close\"\n      aria-label=\"Close\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n        <path d=\"M18 6L6 18M6 6l12 12\" />\n      </svg>\n    </button>\n  </div>\n\n  <!-- Optional prerequisite selector (rendered when inputs are provided) -->\n  <div *ngIf=\"prerequisiteForm && prerequisiteSelectConfig\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n    <label class=\"cqa-font-medium cqa-text-[13px] cqa-text-[#374151]\">Select Prerequisites</label>\n    <cqa-dynamic-select\n      [form]=\"prerequisiteForm\"\n      [config]=\"prerequisiteSelectConfig\">\n    </cqa-dynamic-select>\n  </div>\n\n  <!-- Actions: Cancel | Run Anyway (right-aligned) -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-end cqa-w-full cqa-gap-3\">\n    <cqa-button\n      variant=\"outlined\"\n      btnSize=\"lg\"\n      text=\"Cancel\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-white cqa-border cqa-border-solid cqa-border-[#414146] cqa-text-[#414146]'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button\n      variant=\"filled\"\n      btnSize=\"lg\"\n      text=\"Run Anyway\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] cqa-text-white'\"\n      (clicked)=\"onRunAnyway()\">\n    </cqa-button>\n    <cqa-button\n      variant=\"filled\"\n      btnSize=\"lg\"\n      text=\"Run with Prerequisites\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-rounded-[8px] cqa-border-0 cqa-bg-[#3F43EE] !cqa-text-white'\"\n      [disabled]=\"disableRunWithPrereq\"\n      (clicked)=\"onRunWithPrerequisites()\">\n    </cqa-button>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy } from '@angular/core';\nimport { FormArray, FormGroup, FormControl } from '@angular/forms';\n\nexport interface AdvancedVariable {\n  name: string;\n  label: string;\n  value: boolean | string[];\n  type?: string;\n}\n\n@Component({\n  selector: 'cqa-advanced-variables-form',\n  templateUrl: './advanced-variables-form.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AdvancedVariablesFormComponent implements OnChanges {\n  @Input() advancedVariables: AdvancedVariable[] = [];\n  @Input() advancedVariableForm: FormArray = new FormArray([]);\n  \n  @Output() variableBooleanChange = new EventEmitter<{ name: string; value: boolean }>();\n  @Output() variableValueChange = new EventEmitter<{ name: string; value: any }>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Handle changes if needed\n    if (changes['advancedVariables'] || changes['advancedVariableForm']) {\n      // Form is managed by parent component\n    }\n  }\n\n  /**\n   * Get the FormGroup at a specific index\n   */\n  getFormGroupAt(index: number): FormGroup | null {\n    if (this.advancedVariableForm && index >= 0 && index < this.advancedVariableForm.length) {\n      const control = this.advancedVariableForm.at(index);\n      return control instanceof FormGroup ? control : null;\n    }\n    return null;\n  }\n\n  /**\n   * Get the value from form or variable\n   */\n  getBooleanValue(variable: AdvancedVariable, index: number): boolean {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const value = formGroup.get('value')?.value;\n      return value !== null && value !== undefined ? value : (variable.value as boolean) || false;\n    }\n    return (variable.value as boolean) || false;\n  }\n\n  /**\n   * Get the value from form or variable (for non-boolean types)\n   */\n  getValue(variable: AdvancedVariable, index: number): any {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const value = formGroup.get('value')?.value;\n      return value !== null && value !== undefined ? value : variable.value;\n    }\n    return variable.value;\n  }\n\n  /**\n   * Check if variable is boolean type\n   */\n  isBooleanType(variable: AdvancedVariable): boolean {\n    return variable.type !== 'str_list' && typeof variable.value === 'boolean';\n  }\n\n  /**\n   * Check if variable is str_list type\n   */\n  isStrListType(variable: AdvancedVariable): boolean {\n    return variable.type === 'str_list';\n  }\n\n  /**\n   * Handle boolean value change\n   */\n  onVariableBooleanChange(variableName: string, value: boolean): void {\n    this.variableBooleanChange.emit({ name: variableName, value });\n  }\n\n  /**\n   * Handle value change for non-boolean types\n   */\n  onVariableValueChange(variableName: string, value: any): void {\n    this.variableValueChange.emit({ name: variableName, value });\n  }\n\n  /**\n   * Handle adding a new item to str_list\n   */\n  addStrListItem(variable: AdvancedVariable, index: number): void {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const valueControl = formGroup.get('value');\n      if (valueControl instanceof FormArray) {\n        valueControl.push(new FormControl(''));\n        // Emit the updated value\n        const currentValue = valueControl.value;\n        this.onVariableValueChange(variable.name, currentValue);\n      } else {\n        console.error('Expected FormArray for str_list variable, got:', valueControl);\n      }\n    }\n  }\n\n  /**\n   * Handle removing an item from str_list\n   */\n  removeStrListItem(variable: AdvancedVariable, index: number, itemIndex: number): void {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const valueControl = formGroup.get('value');\n      if (valueControl instanceof FormArray && itemIndex >= 0 && itemIndex < valueControl.length) {\n        valueControl.removeAt(itemIndex);\n        // Emit the updated value\n        const currentValue = valueControl.value;\n        this.onVariableValueChange(variable.name, currentValue);\n      }\n    }\n  }\n\n  /**\n   * Handle str_list item value change\n   */\n  onStrListItemChange(variable: AdvancedVariable, index: number, itemIndex: number, value: string): void {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const valueControl = formGroup.get('value');\n      if (valueControl instanceof FormArray && itemIndex >= 0 && itemIndex < valueControl.length) {\n        // Use emitEvent: false to prevent triggering change detection that causes focus loss\n        valueControl.at(itemIndex).setValue(value, { emitEvent: false });\n        // Emit the updated value after a short delay to avoid focus issues\n        setTimeout(() => {\n          const currentValue = valueControl.value;\n          this.onVariableValueChange(variable.name, currentValue);\n        }, 0);\n      }\n    }\n  }\n\n  /**\n   * Get FormArray for str_list variable\n   */\n  getStrListFormArray(variable: AdvancedVariable, index: number): FormArray | null {\n    const formGroup = this.getFormGroupAt(index);\n    if (formGroup) {\n      const formArray = formGroup.get('value');\n      return formArray instanceof FormArray ? formArray : null;\n    }\n    return null;\n  }\n\n  /**\n   * Track by function for ngFor\n   */\n  trackByVariable(index: number, variable: AdvancedVariable): string {\n    return variable.name || index.toString();\n  }\n\n  /**\n   * Track by function for form controls in str_list\n   */\n  trackByControl(index: number, control: any): any {\n    return control || index;\n  }\n}\n\n","<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap advanced-variables-form cqa-mb-4\">\n  <ng-container *ngFor=\"let variable of advancedVariables; let i = index; trackBy: trackByVariable\">\n    <!-- Boolean variables with mat-slide-toggle -->\n    <ng-container *ngIf=\"isBooleanType(variable)\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\" style=\"width: 100%\">\n        <mat-slide-toggle \n          [checked]=\"getBooleanValue(variable, i)\"\n          (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" \n          color=\"primary\">\n        </mat-slide-toggle>\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n          {{ variable.label }}\n        </label>\n      </div>\n    </ng-container>\n\n    <!-- str_list variables with dynamic list -->\n    <ng-container *ngIf=\"isStrListType(variable)\">\n      <div class=\"cqa-flex cqa-flex-col cqa-w-full\">\n        <ng-container *ngIf=\"getStrListFormArray(variable, i) as formArray\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mb-1\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n              {{ variable.label }}\n            </label>\n            <!-- Empty-state add button: no rows exist yet, so the usual per-row add icon isn't rendered.\n                 Placing the add button next to the label is the only way to get the first entry back. -->\n            <div\n              *ngIf=\"formArray.length === 0\"\n              class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\"\n              (click)=\"addStrListItem(variable, i)\">\n              <mat-icon style=\"display: flex; align-items: center; justify-content: center; font-size: 20px;\">add</mat-icon>\n            </div>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n            <div *ngFor=\"let control of formArray.controls; let itemIndex = index; trackBy: trackByControl\" class=\"cqa-flex cqa-gap-2 cqa-items-center\">\n              <cqa-custom-input\n                [placeholder]=\"'Enter locator'\"\n                [value]=\"control.value\"\n                [fullWidth]=\"true\"\n                (valueChange)=\"onStrListItemChange(variable, i, itemIndex, $event)\">\n              </cqa-custom-input>\n              <!-- Delete icon is always available so the user can remove ANY row, including the last one. -->\n              <div class=\"cqa-cursor-pointer cqa-text-red-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"removeStrListItem(variable, i, itemIndex)\">\n                <mat-icon style=\"font-size: 24px;\">delete</mat-icon>\n              </div>\n              <div *ngIf=\"itemIndex === formArray.length - 1\" class=\"cqa-cursor-pointer cqa-text-blue-600 cqa-flex cqa-items-center cqa-justify-center\" (click)=\"addStrListItem(variable, i)\">\n                <mat-icon style=\"font-size: 24px;\">add</mat-icon>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n    </ng-container>\n  </ng-container>\n</div>\n\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild,\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormControl, FormGroup } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { CqaAutocompleteOption } from '../../autocomplete/autocomplete.model';\n\nexport const API_EDIT_STEP_LABELS = {\n  REQUEST_DETAILS: 'Request Details',\n  STORE_RESPONSE: 'Store Response',\n  VALIDATION: 'Validation',\n} as const;\n\nexport type ApiEditPayloadTab = 'headers' | 'body' | 'params' | 'authorization';\n\n/** Which body content block is visible: headers (tabs) or import cURL textarea. */\nexport type ApiEditBodyView = 'headers' | 'import-curl';\n\nexport interface ApiEditHeaderRow {\n  name: string;\n  type: string;\n  value: string;\n}\n\n/** Payload emitted when user clicks Send Request (environment, method, url, headers, body). */\nexport interface ApiEditSendRequestPayload {\n  environment: string;\n  method: string;\n  url: string;\n  headers: ApiEditHeaderRow[];\n  payload?: string;\n  authType?: string;\n  bearerToken?: string;\n  oauth2?: ApiEditOAuth2Payload;\n  payloadType?: 'raw' | 'x-www-form-urlencoded' | 'form-data';\n  payloadFormat?: string;\n  payloadText?: string;\n  keyValueRows?: { key: string; value: string }[];\n  keyTypeValueRows?: { key: string; type: string; value: string }[];\n  paramsRows?: { key: string; value: string }[];\n}\n\n/** OAuth 2.0 auth fields (when auth type is OAuth 2.0). */\nexport interface ApiEditOAuth2Payload {\n  grantType: string;\n  accessTokenUrl: string;\n  clientId: string;\n  clientSecret: string;\n  scope: string;\n  clientAuthentication: string;\n}\n\n/** Step 1 request + body payload. */\nexport interface ApiEditStep1Payload {\n  summary?: string;\n  environment: string;\n  method: string;\n  url: string;\n  headers: ApiEditHeaderRow[];\n  /** Selected auth type: e.g. 'no-auth', 'bearer', 'oauth2'. */\n  authType: string;\n  /** Bearer token value when authType is 'bearer'. */\n  bearerToken?: string;\n  /** OAuth 2.0 fields when authType is 'oauth2'. */\n  oauth2?: ApiEditOAuth2Payload;\n  activePayloadTab: ApiEditPayloadTab;\n  payloadType: 'raw' | 'x-www-form-urlencoded' | 'form-data';\n  payloadFormat: string;\n  payloadText: string;\n  keyValueRows: { key: string; value: string }[];\n  keyTypeValueRows: { key: string; type: string; value: string }[];\n  paramsRows: { key: string; value: string }[];\n}\n\n/** Step 2 store-response payload. */\nexport interface ApiEditStep2Payload {\n  variableName: string;\n}\n\n/** Response body verification row. */\nexport interface ApiEditResponseBodyVerificationRow {\n  jsonPath: string;\n  verification: string;\n  dataType: string;\n  expectedValue: string;\n}\n\n/** Status verification row. */\nexport interface ApiEditStatusVerificationRow {\n  verification: string;\n  expectedValue: string;\n}\n\n/** Step 3 validation payload. */\nexport interface ApiEditStep3Payload {\n  activeResponseVerificationTab: 'response-body' | 'status';\n  responseBodyVerifications: ApiEditResponseBodyVerificationRow[];\n  statusVerifications: ApiEditStatusVerificationRow[];\n}\n\n/** Full payload emitted when user clicks Create (all steps’ data). */\nexport interface ApiEditCreatePayload {\n  step1: ApiEditStep1Payload;\n  step2: ApiEditStep2Payload;\n  step3: ApiEditStep3Payload;\n  /** Advanced settings variables for this API step (e.g. isStepOptional, shouldSkip). */\n  advancedSettingsVariables?: any[];\n}\n\n/** Environment option: either a string (display = value) or an object with id, name, value, label. */\nexport type EnvironmentOptionInput = string | SelectOption;\n\nconst METHODS_WITHOUT_BODY = ['GET', 'HEAD', 'DELETE'];\n\n/** Auto-close pairs for payload JSON editor: opening char -> closing char. */\nconst PAYLOAD_AUTO_CLOSE_PAIRS: Record<string, string> = { '{': '}', '[': ']', '\"': '\"', \"'\": \"'\" };\n\n/** Result of parsing a cURL command. */\nexport interface ParsedCurl {\n  method: string;\n  url: string;\n  headers: ApiEditHeaderRow[];\n  body: string;\n  /** Entries from -F / --form flags (multipart/form-data). */\n  formData: { key: string; type: 'text' | 'file'; value: string }[];\n}\n\nfunction isSingleQuote(ch: string): boolean {\n  return ch === \"'\" || ch === '\\u2018' || ch === '\\u2019';\n}\nfunction isDoubleQuote(ch: string): boolean {\n  return ch === '\"' || ch === '\\u201C' || ch === '\\u201D';\n}\nfunction isClosingQuote(ch: string, openQuote: string): boolean {\n  if (isSingleQuote(openQuote)) return isSingleQuote(ch);\n  if (isDoubleQuote(openQuote)) return isDoubleQuote(ch);\n  return ch === openQuote;\n}\n\n/**\n * Tokenize a cURL command string into argument tokens, matching bash quoting rules:\n *  - Single-quoted strings are FULLY LITERAL — backslash has no special meaning.\n *    This preserves JSON escape sequences (e.g. \\\") inside '--data-raw' bodies.\n *  - Double-quoted strings treat backslash as an escape character (\\\" → \").\n *    This handles Windows-CMD-normalised values and plain -d \"{\\\"k\\\":\\\"v\\\"}\" bodies.\n * Also handles straight and curly/smart quote characters.\n */\nfunction tokenizeCurlLine(line: string): string[] {\n  const tokens: string[] = [];\n  let i = 0;\n  const n = line.length;\n  while (i < n) {\n    while (i < n && /\\s/.test(line[i])) i++;\n    if (i >= n) break;\n    const ch = line[i];\n    if (isSingleQuote(ch) || isDoubleQuote(ch)) {\n      const quote = ch;\n      const singleQuoted = isSingleQuote(ch);\n      i++;\n      let value = '';\n      while (i < n && !isClosingQuote(line[i], quote)) {\n        if (!singleQuoted && line[i] === '\\\\') {\n          i++;\n          if (i < n) value += line[i++];\n        } else {\n          value += line[i++];\n        }\n      }\n      if (i < n) i++;\n      tokens.push(value);\n      continue;\n    }\n    let word = '';\n    while (i < n && !/\\s/.test(line[i]) && !isSingleQuote(line[i]) && !isDoubleQuote(line[i])) {\n      word += line[i++];\n    }\n    if (word) tokens.push(word);\n  }\n  return tokens;\n}\n\n/** Strip one layer of surrounding single or double quotes (used for inline --data= values). */\nfunction stripSurroundingQuotes(s: string): string {\n  if (s.length >= 2 && ((s.startsWith(\"'\") && s.endsWith(\"'\")) || (s.startsWith('\"') && s.endsWith('\"')))) {\n    return s.slice(1, -1);\n  }\n  return s;\n}\n\n/**\n * Flags that take one argument whose value should be consumed but DISCARDED.\n * Without this list, flags like --referer or --proxy would have their URL-like\n * argument mistakenly captured as the request URL by the pattern matcher below.\n */\nconst CURL_FLAGS_WITH_IGNORED_ARG = new Set([\n  '--referer', '-e', '--refer',\n  '--proxy', '-x', '--socks5', '--socks4', '--socks4a', '--socks5-hostname',\n  '--user-agent', '-A',\n  '--cookie', '-b',\n  '--cookie-jar', '-c',\n  '-o', '--output',\n  '-u', '--user',\n  '--cert', '--key', '--cacert', '--capath',\n  '--connect-timeout', '--max-time', '-m',\n  '--retry', '--retry-delay', '--retry-max-time',\n  '--max-redirs', '--interface', '--dns-servers',\n  '--proxy-user', '--proxy-header',\n  '--resolve', '--limit-rate',\n  '--tlspassword', '--tlsauthtype',\n  '--upload-file', '-T',\n  '--range', '-r',\n  '--pass', '--engine',\n  '--pinnedpubkey', '--hostpubmd5',\n]);\n\n/** Boolean flags that take no argument — skip without consuming the next token. */\nconst CURL_NO_ARG_FLAGS = new Set([\n  '--compressed', '--location', '-L', '--insecure', '-k',\n  '--silent', '-s', '--verbose', '-v', '--get', '-G',\n  '--fail', '-f', '--show-error', '-S',\n  '--head', '-I', '--include', '-i',\n  '--remote-name', '-O', '--remote-name-all',\n  '--ipv4', '-4', '--ipv6', '-6',\n  '--anyauth', '--basic', '--digest', '--ntlm', '--negotiate',\n  '--no-keepalive', '--no-sessionid', '--globoff', '-g',\n  '--remote-time', '-R', '--tcp-nodelay',\n  '--http1.0', '-0', '--http1.1', '--http2', '--http2-prior-knowledge',\n  '--http3', '--no-buffer', '-N',\n  '--trace-time', '--cert-status', '--false-start',\n  '--path-as-is', '--list-only', '-l',\n  '--append', '-a', '--use-ascii', '-B',\n  '--haproxy-protocol', '--netrc', '-n', '--netrc-optional',\n]);\n\n/** Parse a single -F/--form value (key=value | key=@file | key=<file) into a formData entry. */\nfunction parseFormEntry(raw: string): { key: string; type: 'text' | 'file'; value: string } | null {\n  const eq = raw.indexOf('=');\n  if (eq === -1) return null;\n  const key = raw.slice(0, eq).trim();\n  if (!key) return null;\n  const rest = raw.slice(eq + 1);\n  // Strip optional ;type=... suffix\n  const semi = rest.indexOf(';');\n  const val = (semi !== -1 ? rest.slice(0, semi) : rest).trim();\n  if (val.startsWith('@') || val.startsWith('<')) {\n    return { key, type: 'file', value: val.slice(1) };\n  }\n  return { key, type: 'text', value: val };\n}\n\n/**\n * Parse any cURL command string and return method, url, headers, body, and formData.\n *\n * Supported formats / features:\n *  • Unix/Mac  : single-quote args, backslash (\\) line continuation\n *  • PowerShell: backtick (`) line continuation\n *  • Windows CMD: ^\" quote delimiters, ^\\^\" inner escaped quote, ^ line continuation\n *  • HTTP method  : -X POST | --request POST | --request=POST | -XPOST\n *  • Headers      : -H / --header / --header='…' / -H='…' inline-= form\n *  • Body         : -d / --data / --data-raw / --data-binary / --data-ascii /\n *                   inline --data='…' / multiple -d flags (concatenated with &) /\n *                   --data-urlencode / --json (cURL 7.82+)\n *  • Form-data    : -F / --form / --form-string (multipart/form-data)\n *  • URL          : bare https?:// token or explicit --url flag\n *  • Auth infer   : Bearer token extracted from Authorization header\n *  • Method infer : GET→POST when body/form-data present and no explicit -X\n */\nfunction parseCurl(curlString: string): ParsedCurl | null {\n  const raw = (curlString ?? '').trim();\n  if (!raw) return null;\n\n  let s = raw;\n\n  // ── Windows CMD format (Chrome DevTools \"Copy as cURL (cmd)\") ──────────────\n  // Detected by presence of ^\" (caret + double-quote) as quote delimiter.\n  // Only applied when the cURL is NOT already using single-quotes as the primary\n  // quoting mechanism (i.e. not a Unix cURL that merely contains ^\" in a body).\n  if (/\\^\"/.test(s) && !/(?:^|\\s)'/.test(s)) {\n    s = s.replace(/\\s*\\^\\s*\\r?\\n\\s*/g, ' ');  // ^ line-continuation\n    s = s.replace(/\\^\\\\\\^\"/g, '\\\\\"');           // ^\\^\" → \\\" (inner escaped quote)\n    s = s.replace(/\\^\"/g, '\"');                 // ^\"  → \"  (quote delimiter)\n  }\n\n  // ── PowerShell backtick line continuation ──────────────────────────────────\n  s = s.replace(/`\\s*\\r?\\n\\s*/g, ' ');\n\n  // ── Unix/Mac backslash line continuation ───────────────────────────────────\n  s = s.replace(/\\\\\\s*\\r?\\n\\s*/g, ' ');\n\n  // Collapse remaining literal newlines and redundant spaces\n  const normalized = s.replace(/\\r?\\n/g, ' ').replace(/\\s+/g, ' ');\n  const tokens = tokenizeCurlLine(normalized);\n\n  let method = '';\n  let url = '';\n  const headers: ApiEditHeaderRow[] = [];\n  let body = '';\n  const formData: { key: string; type: 'text' | 'file'; value: string }[] = [];\n  const urlPattern = /^https?:\\/\\//i;\n\n  for (let i = 0; i < tokens.length; i++) {\n    const t = tokens[i];\n    const consumeNext = (): string => tokens[++i] ?? '';\n\n    // ── Skip boolean no-arg flags ──────────────────────────────────────────\n    if (CURL_NO_ARG_FLAGS.has(t)) continue;\n\n    // ── Consume-and-discard flags (their arg must not be mistaken for the URL) ──\n    if (CURL_FLAGS_WITH_IGNORED_ARG.has(t)) { consumeNext(); continue; }\n\n    // ── HTTP method ───────────────────────────────────────────────────────\n    if (t === '-X' || t === '--request') {\n      const v = consumeNext(); if (v) method = v.toUpperCase(); continue;\n    }\n    if (t.startsWith('--request=')) {\n      const v = t.slice(10); if (v) method = v.toUpperCase(); continue;\n    }\n    if (t.startsWith('-X') && t.length > 2) {\n      method = t.slice(2).toUpperCase(); continue;\n    }\n\n    // ── Headers: -H / --header / inline --header='…' / -H='…' ───────────\n    if (t === '-H' || t === '--header') {\n      const v = consumeNext();\n      const colon = v.indexOf(':');\n      if (colon !== -1) {\n        const name = v.slice(0, colon).trim();\n        const val  = v.slice(colon + 1).trim();\n        if (name) headers.push({ name, type: 'string', value: val });\n      }\n      continue;\n    }\n    // Inline --header='Name: Value' — tokenizer splits into ['--header=', 'Name: Value']\n    if (t.startsWith('--header=') || t.startsWith('-H=')) {\n      const prefixLen = t.startsWith('--header=') ? 9 : 3;\n      const inline = t.slice(prefixLen) || consumeNext();\n      const colon  = inline.indexOf(':');\n      if (colon !== -1) {\n        const name = inline.slice(0, colon).trim();\n        const val  = inline.slice(colon + 1).trim();\n        if (name) headers.push({ name, type: 'string', value: val });\n      }\n      continue;\n    }\n\n    // ── Request body ──────────────────────────────────────────────────────\n    // cURL concatenates multiple -d flags with '&'; replicate that behaviour.\n    if (t === '-d' || t === '--data' || t === '--data-raw' ||\n        t === '--data-binary' || t === '--data-ascii') {\n      const v = consumeNext();\n      if (v && !v.startsWith('@')) {\n        const chunk = stripSurroundingQuotes(v);\n        body = body ? `${body}&${chunk}` : chunk;\n      }\n      continue;\n    }\n    // --json flag (cURL 7.82+): sets Content-Type application/json + body\n    if (t === '--json') {\n      const v = consumeNext();\n      if (v && !v.startsWith('@')) body = stripSurroundingQuotes(v);\n      continue;\n    }\n    // Inline --data='…' / --data-raw='…' — tokenizer splits into ['--data=', value]\n    if (t.startsWith('--data=') || t.startsWith('--data-raw=') ||\n        t.startsWith('--data-binary=') || t.startsWith('--data-ascii=')) {\n      const eqIdx = t.indexOf('=');\n      const inline = t.slice(eqIdx + 1) || consumeNext();\n      if (inline && !String(inline).startsWith('@')) {\n        const chunk = stripSurroundingQuotes(String(inline));\n        body = body ? `${body}&${chunk}` : chunk;\n      }\n      continue;\n    }\n    // Inline short form -dVALUE or -d=VALUE\n    if (t.startsWith('-d') && t.length > 2) {\n      const v = t.startsWith('-d=') ? t.slice(3) : t.slice(2);\n      if (!v.startsWith('@')) {\n        const chunk = stripSurroundingQuotes(v);\n        body = body ? `${body}&${chunk}` : chunk;\n      }\n      continue;\n    }\n    // --data-urlencode name=value (treat as plain body entry)\n    if (t === '--data-urlencode') {\n      const v = consumeNext();\n      if (v && !v.includes('@')) body = body ? `${body}&${v}` : v;\n      continue;\n    }\n    if (t.startsWith('--data-urlencode=')) {\n      const inline = t.slice(17) || consumeNext();\n      if (inline && !String(inline).includes('@')) {\n        body = body ? `${body}&${inline}` : String(inline);\n      }\n      continue;\n    }\n\n    // ── Multipart form-data: -F / --form / --form-string ─────────────────\n    if (t === '-F' || t === '--form' || t === '--form-string') {\n      const v = consumeNext();\n      if (v) { const e = parseFormEntry(v); if (e) formData.push(e); }\n      continue;\n    }\n    if (t.startsWith('--form=') || t.startsWith('-F=')) {\n      const prefixLen = t.startsWith('--form=') ? 7 : 3;\n      const inline = t.slice(prefixLen) || consumeNext();\n      if (inline) { const e = parseFormEntry(String(inline)); if (e) formData.push(e); }\n      continue;\n    }\n\n    // ── URL ───────────────────────────────────────────────────────────────\n    if (t === '--url') {\n      const v = consumeNext(); if (v && !url) url = v; continue;\n    }\n    if (t.startsWith('--url=')) {\n      const v = t.slice(6) || consumeNext(); if (v && !url) url = v; continue;\n    }\n    if (urlPattern.test(t) && !url) { url = t; }\n  }\n\n  // Fallback: scan all tokens for the first URL-like value\n  if (!url) {\n    url = tokens.find(tok => urlPattern.test(tok)) ?? '';\n  }\n\n  // Infer method: if a body/form-data is present but no explicit -X was given,\n  // use POST (many browser DevTools cURLs omit -X POST).\n  const finalMethod = (method || 'GET').toUpperCase();\n  if ((body || formData.length > 0) && (finalMethod === 'GET' || finalMethod === 'HEAD')) {\n    return { method: 'POST', url, headers, body, formData };\n  }\n  return { method: finalMethod, url, headers, body, formData };\n}\n\n@Component({\n  selector: 'cqa-api-edit-step',\n  templateUrl: './api-edit-step.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class ApiEditStepComponent implements OnChanges, OnInit, AfterViewInit, OnDestroy {\n  @Input() initialMethod?: string;\n  @Input() initialEnvironment?: string;\n  @Input() initialStep?: number;\n  @Input() initialUrl?: string;\n  @Input() initialPayloadTab?: ApiEditPayloadTab;\n  /** Initial payload type (raw, x-www-form-urlencoded, form-data) when editing an existing step. */\n  @Input() initialPayloadType?: 'raw' | 'x-www-form-urlencoded' | 'form-data';\n  /** Initial payload text (body) when editing an existing step. */\n  @Input() initialPayloadText?: string;\n  /** Initial summary when editing an existing step (maps to step description). */\n  @Input() initialSummary?: string;\n  @Input() initialHeaders?: ApiEditHeaderRow[];\n  @Input() initialResponsePreview?: string;\n  @Input() initialVariableName?: string;\n  /** Initial response body verifications when editing an existing step. */\n  @Input() initialResponseBodyVerifications?: ApiEditResponseBodyVerificationRow[];\n  /** Initial status verifications when editing an existing step. */\n  @Input() initialStatusVerifications?: ApiEditStatusVerificationRow[];\n  /** Initial active response verification tab when editing an existing step. */\n  @Input() initialActiveResponseVerificationTab?: 'response-body' | 'status';\n  @Input() editMode?: boolean;\n  /** True while parent is creating the step (API in progress); show loader on Create/Update button */\n  @Input() isCreatingStep: boolean = false;\n\n  /** Emits the cURL string when user clicks Import (value from the textarea control). */\n  @Output() importCurl = new EventEmitter<string>();\n  /** Emits when user cancels the Import cURL panel (clicks Cancel). */\n  @Output() importCurlCancel = new EventEmitter<void>();\n  /** Emits when user clicks Send Request, with environment, method, url, and headers. */\n  @Output() sendRequest = new EventEmitter<ApiEditSendRequestPayload>();\n  @Output() back = new EventEmitter<void>();\n  /** Emits when user clicks the Cancel button (step 1). */\n  @Output() cancel = new EventEmitter<void>();\n  @Output() next = new EventEmitter<void>();\n  /** Emits when user clicks Create with all entered details: step1 (environment, HTTP method, URL, headers, body), step2 (variable name), step3 (verifications). */\n  @Output() create = new EventEmitter<ApiEditCreatePayload>();\n  /** Emits whenever headers change (add, remove, or edit) so the parent can reflect them in the canvas/controls. */\n  @Output() headersChange = new EventEmitter<ApiEditHeaderRow[]>();\n  /** Emits when the environment dropdown selection changes (selected value/id or null for None) so the parent can provide urlOptions. */\n  @Output() environmentChange = new EventEmitter<string | number | null>();\n\n  /** Form control for Import cURL textarea; value is emitted when user clicks Import. */\n  readonly importCurlControl = new FormControl('');\n\n  variableName = '';\n  variableNameError = '';\n  urlError = '';\n  /** Step summary (displayed in API step title; maps to step description). */\n  summary = '';\n\n  /** Controls which body content is visible: headers (default) or import-curl. */\n  bodyView: ApiEditBodyView = 'headers';\n\n  readonly stepLabels = [\n    { index: 1, label: API_EDIT_STEP_LABELS.REQUEST_DETAILS },\n    { index: 2, label: API_EDIT_STEP_LABELS.STORE_RESPONSE },\n    { index: 3, label: API_EDIT_STEP_LABELS.VALIDATION },\n  ];\n  currentStep = 1;\n\n  /** The label for the current step only (used when showing a single step in the indicator). */\n  get activeStepLabel(): { index: number; label: string } | undefined {\n    return this.stepLabels[this.currentStep - 1];\n  }\n\n  private readonly minStep = 1;\n  private readonly maxStep = 3;\n\n  /** Percentage to translate the step strip (0, -33.333, -66.666) for CSS transition. */\n  get stripTranslatePercent(): number {\n    return (this.currentStep - 1) * -33.333;\n  }\n\n  setStep(step: number): void {\n    if (step >= this.minStep && step <= this.maxStep) {\n      // Validate current step before allowing forward navigation\n      if (step > this.currentStep) {\n        // Validate URL before allowing navigation away from step 1\n        if (this.currentStep === 1) {\n          if (!this.validateUrl()) {\n            this.cdr.markForCheck();\n            return;\n          }\n        }\n        // Validate variable name before allowing navigation away from step 2\n        if (this.currentStep === 2 && !this.variableName?.trim()) {\n          this.variableNameError = 'Variable Name is required.';\n          this.cdr.markForCheck();\n          return;\n        }\n        this.variableNameError = '';\n      }\n      this.currentStep = step;\n    }\n  }\n\n  private applyInitialStep(value: number | undefined): void {\n    if (value == null) return;\n    const clamped = Math.max(this.minStep, Math.min(this.maxStep, Math.floor(value)));\n    this.currentStep = clamped;\n  }\n\n  /** HTTP method options: array of strings or objects with id, name, value, label (passed from parent). */\n  @Input() httpMethodOptions: EnvironmentOptionInput[] = [];\n\n  /** Form for HTTP method select (cqa-dynamic-select) */\n  methodForm!: FormGroup;\n\n  /** Config for method dropdown (updated when httpMethodOptions changes to avoid new reference every CD) */\n  methodSelectConfig: DynamicSelectFieldConfig = {\n    key: 'method',\n    placeholder: 'Method',\n    searchable: false,\n    options: [],\n  };\n\n  private updateMethodSelectConfig(): void {\n    const options = (this.httpMethodOptions ?? []).map((m) => ApiEditStepComponent.toSelectOption(m));\n    this.methodSelectConfig = {\n      ...this.methodSelectConfig,\n      options,\n    };\n  }\n\n  private getMethodValues(): string[] {\n    return (this.httpMethodOptions ?? [])\n      .map((m) => ApiEditStepComponent.getOptionValue(m))\n      .filter((v): v is string => v != null);\n  }\n\n  /** Form for environment select (cqa-dynamic-select) */\n  environmentForm!: FormGroup;\n\n  /** Environment options: array of strings or objects with id, name, value, label (passed from parent). */\n  @Input() environmentOptions: EnvironmentOptionInput[] = [];\n  /** Whether more environments are available for infinite scroll (provided by parent). */\n  @Input() hasMoreEnvironments: boolean = false;\n  /** True while parent is loading environments (search or load more). */\n  @Input() isLoadingEnvironments: boolean = false;\n  /** URL field options when an environment is selected (base URL + parameters as *|key|). Parent fills this when environmentChange fires. */\n  @Input() urlOptions: CqaAutocompleteOption[] = [];\n\n  /** Config for environment dropdown (updated when environmentOptions changes to avoid new reference every CD) */\n  environmentSelectConfig: DynamicSelectFieldConfig = {\n    key: 'environment',\n    placeholder: 'Environment',\n    searchable: false,\n    options: [],\n  };\n\n  private static toSelectOption(item: EnvironmentOptionInput): SelectOption {\n    if (typeof item === 'string') {\n      return { id: item, value: item, name: item, label: item };\n    }\n    const o = item as SelectOption;\n    return {\n      id: o.id ?? o.value,\n      value: o.value ?? o.id,\n      name: o.name ?? o.label ?? String(o.value ?? o.id),\n      label: o.label ?? o.name ?? String(o.value ?? o.id),\n    };\n  }\n\n  private static getOptionValue(item: EnvironmentOptionInput): string | undefined {\n    if (typeof item === 'string') return item;\n    const o = item as SelectOption;\n    const v = o.value ?? o.id;\n    return v != null ? String(v) : undefined;\n  }\n\n  private updateEnvironmentSelectConfig(): void {\n    const options = (this.environmentOptions ?? []).map((e) => ApiEditStepComponent.toSelectOption(e));\n    this.environmentSelectConfig = {\n      ...this.environmentSelectConfig,\n      searchable: true,\n      serverSearch: true,\n      options,\n      hasMore: this.hasMoreEnvironments,\n      isLoading: this.isLoadingEnvironments,\n      onLoadMore: () => {\n        this.environmentLoadMore.emit();\n      },\n      onSearch: (query: string) => {\n        this.environmentSearch.emit(query);\n      },\n    };\n  }\n\n  private getEnvironmentValues(): string[] {\n    return (this.environmentOptions ?? [])\n      .map((e) => ApiEditStepComponent.getOptionValue(e))\n      .filter((v): v is string => v != null);\n  }\n\n  /** Emit when user searches environments from the dropdown. */\n  @Output() environmentSearch = new EventEmitter<string>();\n\n  /** Emit when user scrolls to load more environments. */\n  @Output() environmentLoadMore = new EventEmitter<void>();\n\n  /** Form for Auth Type select (Authorization tab) */\n  authTypeForm!: FormGroup;\n\n  /** Auth type options: array of strings or objects with id, name, value, label (passed from parent). Falls back to built-in list when empty. */\n  @Input() authTypeOptions: EnvironmentOptionInput[] = [];\n\n  /** Initial auth type (string or option object). When not set, first of authTypeOptions or default \"No Auth\" is used. */\n  @Input() initialAuthType?: string | EnvironmentOptionInput;\n\n  /** Default options when authTypeOptions is empty (same shape as environment) */\n  private static readonly DEFAULT_AUTH_TYPE_OPTIONS: SelectOption[] = [\n    { id: 'no-auth', value: 'no-auth', name: 'No Auth', label: 'No Auth' },\n    { id: 'bearer', value: 'bearer', name: 'Bearer Token', label: 'Bearer Token' },\n    { id: 'oauth2', value: 'oauth2', name: 'OAuth 2.0', label: 'OAuth 2.0' },\n  ];\n\n  /** Config for Auth Type dropdown (updated when authTypeOptions changes, like environment) */\n  authTypeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'authType',\n    placeholder: 'No Auth',\n    searchable: false,\n    options: [],\n  };\n\n  private updateAuthTypeSelectConfig(): void {\n    const options =\n      this.authTypeOptions?.length > 0\n        ? this.authTypeOptions.map((a) => ApiEditStepComponent.toSelectOption(a))\n        : [...ApiEditStepComponent.DEFAULT_AUTH_TYPE_OPTIONS];\n    this.authTypeSelectConfig = {\n      ...this.authTypeSelectConfig,\n      options,\n    };\n  }\n\n  private getAuthTypeValues(): string[] {\n    const source =\n      this.authTypeOptions?.length > 0\n        ? this.authTypeOptions\n        : (ApiEditStepComponent.DEFAULT_AUTH_TYPE_OPTIONS as EnvironmentOptionInput[]);\n    return source\n      .map((a) => ApiEditStepComponent.getOptionValue(a as EnvironmentOptionInput))\n      .filter((v): v is string => v != null);\n  }\n\n  /** Current auth type value (e.g. 'no-auth') for template */\n  get selectedAuthType(): string {\n    const v = this.authTypeForm?.get('authType')?.value;\n    if (v == null || v === '') return 'no-auth';\n    return typeof v === 'object' ? (v?.value ?? v?.id ?? 'no-auth') : String(v);\n  }\n\n  /** Bearer token value (Authorization tab, when auth type is Bearer Token). */\n  bearerToken = '';\n\n  /** Form for OAuth 2.0 fields (Authorization tab when auth type is OAuth 2.0). */\n  oauth2Form!: FormGroup;\n\n  /** Grant type options for OAuth 2.0 */\n  private static readonly OAUTH_GRANT_TYPE_OPTIONS: SelectOption[] = [\n    { id: 'client_credentials', value: 'client_credentials', name: 'Client Credentials', label: 'Client Credentials' },\n    { id: 'authorization_code', value: 'authorization_code', name: 'Authorization Code', label: 'Authorization Code' },\n    { id: 'password', value: 'password', name: 'Password', label: 'Password' },\n    { id: 'implicit', value: 'implicit', name: 'Implicit', label: 'Implicit' },\n  ];\n\n  /** Client authentication method options for OAuth 2.0 */\n  private static readonly OAUTH_CLIENT_AUTH_OPTIONS: SelectOption[] = [\n    { id: 'basic', value: 'basic', name: 'Send as Basic Auth header', label: 'Send as Basic Auth header' },\n    { id: 'body', value: 'body', name: 'Send in body', label: 'Send in body' },\n  ];\n\n  readonly oauth2GrantTypeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'grantType',\n    placeholder: 'Select grant type',\n    searchable: false,\n    options: [...ApiEditStepComponent.OAUTH_GRANT_TYPE_OPTIONS],\n  };\n\n  readonly oauth2ClientAuthSelectConfig: DynamicSelectFieldConfig = {\n    key: 'clientAuthentication',\n    placeholder: 'Select method',\n    searchable: false,\n    options: [...ApiEditStepComponent.OAUTH_CLIENT_AUTH_OPTIONS],\n  };\n\n  /** Current HTTP method (from form or default: first of httpMethodOptions). Treats empty string as unset. */\n  get selectedMethod(): string {\n    const value = this.methodForm?.get('method')?.value;\n    const firstValue = this.httpMethodOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.httpMethodOptions[0])\n      : undefined;\n    const resolved = value != null && value !== '' ? (typeof value === 'object' ? ApiEditStepComponent.getOptionValue(value as EnvironmentOptionInput) : String(value)) : undefined;\n    return resolved ?? firstValue ?? 'GET';\n  }\n  set selectedMethod(v: string) {\n    this.methodForm?.patchValue({ method: v });\n  }\n\n  /** True when the selected HTTP method is GET, HEAD, or DELETE (no request body). */\n  get isMethodWithoutBody(): boolean {\n    const method = this.selectedMethod != null ? String(this.selectedMethod).toUpperCase() : '';\n    return METHODS_WITHOUT_BODY.includes(method);\n  }\n\n  /** Cached environment value from last selection (so Create payload has the selected value). */\n  private currentEnvironmentValue = '';\n\n  /** Cached HTTP method from last selection (so Create payload has the selected value). */\n  private currentMethodValue = '';\n\n  /** Current environment (from form or default: first of environmentOptions). Treats empty string as unset. */\n  get selectedEnvironment(): string {\n    const value = this.environmentForm?.get('environment')?.value;\n    const firstValue = this.environmentOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.environmentOptions[0])\n      : undefined;\n    const resolved = value != null && value !== '' ? (typeof value === 'object' ? ApiEditStepComponent.getOptionValue(value as EnvironmentOptionInput) : String(value)) : undefined;\n    return resolved ?? firstValue ?? 'Development';\n  }\n  set selectedEnvironment(v: string) {\n    this.environmentForm?.patchValue({ environment: v });\n  }\n\n  /** Called when user selects an environment; keeps currentEnvironmentValue in sync, sets request URL from environment when available, and notifies parent for urlOptions. */\n  onEnvironmentSelectionChange(event: { key: string; value: unknown }): void {\n    const v = event.value;\n    this.currentEnvironmentValue =\n      v != null\n        ? typeof v === 'object'\n          ? (ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? '')\n          : String(v)\n        : '';\n\n    // Clear URL field when environment changes\n    this.url = '';\n    this.urlError = ''; // Also clear any URL validation errors\n    this.cdr.markForCheck();\n\n    // Notify parent so it can provide urlOptions (environment parameters for \"Enter URL or select Parameter\")\n    const emitVal = this.currentEnvironmentValue === '' || this.currentEnvironmentValue === 'none'\n      ? null\n      : (typeof v === 'object' ? ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? this.currentEnvironmentValue : this.currentEnvironmentValue);\n    this.environmentChange.emit(emitVal === 'none' ? null : (emitVal as string | number | null));\n  }\n\n  /** When user selects an option from the URL autocomplete (e.g. environment parameter *|key|), set the URL field to that value. */\n  onUrlOptionSelect(option: CqaAutocompleteOption): void {\n    this.url = option.value ?? '';\n    this.urlError = ''; // Clear error when option is selected\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Resolve the request URL for the selected environment option.\n   * Environment options may carry an optional `url` (e.g. from Environment model); \"None\" has no url.\n   */\n  private getSelectedEnvironmentUrl(selectedValue: unknown): string | null {\n    if (selectedValue == null) return null;\n    const obj = selectedValue as Record<string, unknown>;\n    const urlProp = obj['url'];\n    if (typeof obj === 'object' && typeof urlProp === 'string' && urlProp.trim() !== '') {\n      return urlProp.trim();\n    }\n    const idOrValue =\n      typeof selectedValue === 'object'\n        ? (ApiEditStepComponent.getOptionValue(selectedValue as EnvironmentOptionInput) ?? '')\n        : String(selectedValue);\n    if (!idOrValue || idOrValue === 'none') return null;\n    const option = (this.environmentOptions ?? []).find(\n      (opt) => ApiEditStepComponent.getOptionValue(opt) === idOrValue\n    );\n    const url = option != null && typeof option === 'object' ? (option as Record<string, unknown>)['url'] : undefined;\n    return typeof url === 'string' && url.trim() !== '' ? url.trim() : null;\n  }\n\n  /** Called when user selects an HTTP method; keeps currentMethodValue in sync for create payload. */\n  onMethodSelectionChange(event: { key: string; value: unknown }): void {\n    const v = event.value;\n    this.currentMethodValue =\n      v != null\n        ? typeof v === 'object'\n          ? (ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? '')\n          : String(v)\n        : '';\n  }\n\n  private _url = '';\n\n  /** URL for the request. Getter/setter syncs query params with the Params tab (Postman-style). */\n  get url(): string {\n    return this._url;\n  }\n  set url(value: string) {\n    const next = value ?? '';\n    if (this._url === next) return;\n    this._url = next;\n    // Clear error when URL changes\n    this.urlError = '';\n    if (this.paramsFormArray) {\n      this.paramsSyncingFromUrl = true;\n      this.syncParamsFromUrl();\n      this.paramsSyncingFromUrl = false;\n    }\n  }\n\n  /** When true, params form changes should not update the URL (we're syncing from URL). */\n  private paramsSyncingFromUrl = false;\n\n  /** Placeholder for the URL field: show \"Enter URL or select Parameter *\" when urlOptions are available (environment selected). */\n  get urlPlaceholder(): string {\n    return (this.urlOptions?.length ?? 0) > 0 ? 'Enter URL or select Parameter *' : 'Enter URL *';\n  }\n\n  readonly payloadTabs: { value: ApiEditPayloadTab; label: string }[] = [\n    { value: 'authorization', label: 'Authorization' },\n    { value: 'headers', label: 'Headers' },\n    { value: 'body', label: 'Body' },\n    { value: 'params', label: 'Params' },\n  ];\n  activePayloadTab: ApiEditPayloadTab = 'headers';\n\n  /** Step 3: Response verification tabs */\n  readonly responseVerificationTabs: { value: 'response-body' | 'status'; label: string }[] = [\n    { value: 'response-body', label: 'Response Body' },\n    { value: 'status', label: 'Status' },\n  ];\n  activeResponseVerificationTab: 'response-body' | 'status' = 'response-body';\n\n  /** Payload type for Body/Params/Authorization: raw, x-www-form-urlencoded, form-data */\n  payloadType: 'raw' | 'x-www-form-urlencoded' | 'form-data' = 'raw';\n\n  /** Segment options for payload type (used by cqa-segment-control) */\n  readonly payloadTypeSegments = [\n    { label: 'Raw', value: 'raw' },\n    { label: 'x-www-form-urlencoded', value: 'x-www-form-urlencoded' },\n    { label: 'Form Data', value: 'form-data' },\n  ];\n\n  onPayloadTypeChange(val: string): void {\n    this.payloadType = val as 'raw' | 'x-www-form-urlencoded' | 'form-data';\n  }\n\n  /** Form for Format select (Body/Params/Authorization) */\n  payloadFormatForm!: FormGroup;\n\n  /** Format options: array of strings or objects (passed from parent). Falls back to JSON, XML, HTML, Text when empty. */\n  @Input() formatOptions: EnvironmentOptionInput[] = [];\n\n  @Input() initialFormat?: string;\n\n  private static readonly DEFAULT_FORMAT_OPTIONS: SelectOption[] = [\n    { id: 'json', value: 'json', name: 'JSON', label: 'JSON' },\n    { id: 'xml', value: 'xml', name: 'XML', label: 'XML' },\n    { id: 'html', value: 'html', name: 'HTML', label: 'HTML' },\n    { id: 'text', value: 'text', name: 'Text', label: 'Text' },\n  ];\n\n  /** Config for Format dropdown (updated when formatOptions changes, like Method dropdown) */\n  payloadFormatSelectConfig: DynamicSelectFieldConfig = {\n    key: 'format',\n    placeholder: 'Select',\n    searchable: false,\n    options: [...ApiEditStepComponent.DEFAULT_FORMAT_OPTIONS],\n  };\n\n  private updatePayloadFormatSelectConfig(): void {\n    const options =\n      this.formatOptions?.length > 0\n        ? this.formatOptions.map((f) => ApiEditStepComponent.toSelectOption(f))\n        : ApiEditStepComponent.DEFAULT_FORMAT_OPTIONS;\n    this.payloadFormatSelectConfig = {\n      ...this.payloadFormatSelectConfig,\n      options,\n    };\n  }\n\n  private getFormatValues(): string[] {\n    const source =\n      this.formatOptions?.length > 0\n        ? this.formatOptions\n        : (ApiEditStepComponent.DEFAULT_FORMAT_OPTIONS as EnvironmentOptionInput[]);\n    return source\n      .map((f) => ApiEditStepComponent.getOptionValue(f as EnvironmentOptionInput))\n      .filter((v): v is string => v != null);\n  }\n\n  /** Payload text area value for Body/Params/Authorization */\n  payloadText = '';\n\n  /** JSON parse error when format is JSON and payload is invalid; null when valid or not JSON. */\n  payloadJsonError: {\n    line: number;\n    column: number;\n    message: string;\n    excerpt: string;\n    caretOffset: number;\n  } | null = null;\n\n  /** Line numbers for payload textarea (1, 2, 3, ...) based on current line count. */\n  get payloadLineNumbers(): number[] {\n    const n = Math.max(1, (this.payloadText || '').split(/\\r?\\n/).length);\n    return Array.from({ length: n }, (_, i) => i + 1);\n  }\n\n  /** Whether current payload format is JSON (so we validate and show JSON editor behavior). */\n  get isPayloadFormatJson(): boolean {\n    const format = this.payloadFormatForm?.get('format')?.value;\n    return format === 'json';\n  }\n\n  /** Error messages for the payload textarea (red border + bottom line). */\n  get payloadJsonErrors(): string[] {\n    return this.payloadJsonError ? ['Invalid JSON format. Please check your syntax.'] : [];\n  }\n\n  /** Tooltip content for the line-level error icon (parse error on line X, excerpt, caret, message). */\n  get payloadJsonErrorTooltip(): string {\n    if (!this.payloadJsonError) return '';\n    const e = this.payloadJsonError;\n    const caret = ' '.repeat(e.caretOffset) + '^';\n    return `Parse error on line ${e.line}:\\n\\n${e.excerpt}\\n${caret}\\n\\n${e.message}`;\n  }\n\n  onPayloadTextChange(value: string): void {\n    this.payloadText = value;\n    this.validatePayloadJson();\n  }\n\n  onPayloadInput(event: Event): void {\n    const target = event.target as HTMLTextAreaElement | null;\n    this.onPayloadTextChange(target?.value ?? '');\n  }\n\n  onPayloadKeydown(event: KeyboardEvent): void {\n    if (!this.isPayloadFormatJson) return;\n    const key = event.key;\n    const close = PAYLOAD_AUTO_CLOSE_PAIRS[key];\n    if (!close) return;\n    const target = event.target as HTMLTextAreaElement | null;\n    if (!target) return;\n    event.preventDefault();\n    const start = target.selectionStart ?? 0;\n    const end = target.selectionEnd ?? start;\n    const before = this.payloadText.slice(0, start);\n    const after = this.payloadText.slice(end);\n    const insertPos = start + 1;\n    const newValue = before + key + close + after;\n    this.payloadText = newValue;\n    this.validatePayloadJson();\n    setTimeout(() => {\n      this.payloadTextareaRef?.nativeElement?.setSelectionRange(insertPos, insertPos);\n    }, 0);\n  }\n\n  /** Validate payload when format is JSON; sets payloadJsonError or clears it. */\n  validatePayloadJson(): void {\n    if (!this.isPayloadFormatJson) {\n      this.payloadJsonError = null;\n      return;\n    }\n    const text = this.payloadText ?? '';\n    if (text.trim() === '') {\n      this.payloadJsonError = null;\n      return;\n    }\n    try {\n      JSON.parse(text);\n      this.payloadJsonError = null;\n    } catch (err) {\n      const message = err instanceof Error ? err.message : String(err);\n      const position = this.extractPositionFromJsonError(message);\n      const { line, column } = this.positionToLineColumn(text, position);\n      const lines = text.split(/\\r?\\n/);\n      const lineIndex = Math.max(0, line - 1);\n      const lineContent = lines[lineIndex] ?? '';\n      const excerpt = lineContent || ' ';\n      const caretOffset = lineIndex === line - 1 ? Math.min(column - 1, lineContent.length) : 0;\n      this.payloadJsonError = {\n        line,\n        column,\n        message: this.normalizeJsonErrorMessage(message),\n        excerpt,\n        caretOffset,\n      };\n    }\n    this.cdr.markForCheck();\n  }\n\n  private extractPositionFromJsonError(message: string): number {\n    const match = message.match(/position\\s+(\\d+)/i) || message.match(/at\\s+position\\s+(\\d+)/i);\n    return match ? parseInt(match[1], 10) : 0;\n  }\n\n  private positionToLineColumn(text: string, position: number): { line: number; column: number } {\n    const before = text.slice(0, Math.min(position, text.length));\n    const lines = before.split(/\\r?\\n/);\n    const line = lines.length;\n    const lastLine = lines[lines.length - 1] ?? '';\n    return { line, column: lastLine.length + 1 };\n  }\n\n  private normalizeJsonErrorMessage(message: string): string {\n    if (message.includes('Expecting') || message.includes('expecting')) return message;\n    const tokenMatch = message.match(/Unexpected token\\s+['\"]?([^'\"]+)['\"]?/i)\n      || message.match(/unexpected character.*?([^\\s]+)/i);\n    const token = tokenMatch ? tokenMatch[1].trim() : 'undefined';\n    return `Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got '${token}'`;\n  }\n\n  @ViewChild('payloadEditorWithLinesRef') payloadEditorWithLinesRef?: ElementRef<HTMLElement>;\n  @ViewChild('payloadTextareaRef') payloadTextareaRef?: ElementRef<HTMLTextAreaElement>;\n\n  private static readonly DEFAULT_HEADER_NAME_OPTIONS: string[] = [\n    'Accept',\n    'Accept-Charset',\n    'Accept-Encoding',\n    'Accept-Language',\n    'Access-Control-Request-Headers',\n    'Access-Control-Request-Method',\n    'Scripts',\n    'Cache-Control',\n    'Content-MD5',\n    'Content-Length',\n    'Content-Transfer-Encoding',\n    'Content-Type',\n    'Cookie',\n    'Date',\n    'Expect',\n    'From',\n    'Host',\n    'If-Match',\n    'If-Modified-Since',\n    'If-None-Match',\n    'If-Unmodified-Since',\n    'If-Range',\n    'Keep-Alive',\n    'Max-Forwards',\n    'Origin',\n    'Pragma',\n    'Proxy-Authorization',\n    'Range',\n    'Referer',\n    'TE',\n    'Trailer',\n    'Transfer-Encoding',\n    'Upgrade',\n    'User-Agent',\n    'Via',\n    'Warning',\n    'X-Requested-With',\n    'X-Do-Not-Track',\n    'DNT',\n    'x-api-key',\n    'Connection',\n  ];\n\n  /** Header name options: array of strings or objects with id, name, value, label (passed from parent). Falls back to built-in list when empty. */\n  @Input() headerNameOptions: EnvironmentOptionInput[] = [];\n\n  /** Form array for header rows; each item is FormGroup({ name, value }) for cqa-dynamic-select and value input */\n  headersFormArray!: FormArray;\n\n  /** Typed accessor for template (FormArray.controls is AbstractControl[]) */\n  get headerRows(): FormGroup[] {\n    return (this.headersFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Config for header name dropdown (updated when headerNameOptions changes to avoid new reference every CD) */\n  headerNameSelectConfig: DynamicSelectFieldConfig = {\n    key: 'name',\n    placeholder: 'Select header',\n    searchable: true,\n    allowCustomValue: true,\n    options: [],\n  };\n\n  private updateHeaderNameSelectConfig(): void {\n    const source =\n      this.headerNameOptions?.length > 0\n        ? this.headerNameOptions\n        : (ApiEditStepComponent.DEFAULT_HEADER_NAME_OPTIONS as EnvironmentOptionInput[]);\n    const baseOptions = source.map((h) => ApiEditStepComponent.toSelectOption(h));\n    const baseValues = new Set(baseOptions.map((o) => String(o.value ?? o.id ?? '').trim()).filter(Boolean));\n    const currentNamesFromForm = this.getCurrentHeaderNamesFromForm();\n    const extraOptions: SelectOption[] = [];\n    for (const name of currentNamesFromForm) {\n      const key = name.trim();\n      if (key && !baseValues.has(key)) {\n        baseValues.add(key);\n        extraOptions.push({ id: key, value: key, name: key, label: key });\n      }\n    }\n    const options = [...baseOptions, ...extraOptions];\n    this.headerNameSelectConfig = {\n      ...this.headerNameSelectConfig,\n      options,\n    };\n  }\n\n  /** Collects distinct non-empty header names currently in the headers form (for dynamic options). */\n  private getCurrentHeaderNamesFromForm(): string[] {\n    const names: string[] = [];\n    const seen = new Set<string>();\n    if (!this.headersFormArray?.controls?.length) return names;\n    for (const control of this.headersFormArray.controls) {\n      const name = (control as FormGroup).get('name')?.value;\n      const str = name != null ? String(name).trim() : '';\n      if (str && !seen.has(str)) {\n        seen.add(str);\n        names.push(str);\n      }\n    }\n    return names;\n  }\n\n  private readonly defaultHeaders: ApiEditHeaderRow[] = [\n    { name: 'Content-Type', type: 'string', value: 'application/json' },\n  ];\n\n  /** Form array for key-value rows (Body payload); each item is FormGroup({ key, value }) */\n  keyValueFormArray!: FormArray;\n\n  get keyValueRows(): FormGroup[] {\n    return (this.keyValueFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Form array for key-type-value rows; each item is FormGroup({ key, type, value }) */\n  keyTypeValueFormArray!: FormArray;\n\n  get keyTypeValueRows(): FormGroup[] {\n    return (this.keyTypeValueFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Form array for Params tab key-value rows; each item is FormGroup({ key, value }) */\n  paramsFormArray!: FormArray;\n\n  get paramsRows(): FormGroup[] {\n    return (this.paramsFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Config for Type dropdown in key-type-value rows (Text, File) */\n  readonly keyTypeValueTypeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'type',\n    placeholder: 'Text',\n    searchable: false,\n    options: [\n      { id: 'text', value: 'text', name: 'Text', label: 'Text' },\n      { id: 'file', value: 'file', name: 'File', label: 'File' },\n    ],\n  };\n\n  /** Form array for response body verification rows; each item is FormGroup({ jsonPath, verification, dataType, expectedValue }) */\n  verificationFormArray!: FormArray;\n\n  get verificationRows(): FormGroup[] {\n    return (this.verificationFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Verification options: array of strings or objects (passed from parent). Falls back to built-in list when empty. */\n  @Input() verificationOptions: EnvironmentOptionInput[] = [];\n\n  private static readonly DEFAULT_VERIFICATION_OPTIONS: SelectOption[] = [\n    { id: 'equals', value: 'equals', name: 'Equals', label: 'Equals' },\n    { id: 'not-equal', value: 'not-equal', name: 'Not equal', label: 'Not equal' },\n    { id: 'less-than', value: 'less-than', name: 'Less than', label: 'Less than' },\n    { id: 'greater-than', value: 'greater-than', name: 'Greater than', label: 'Greater than' },\n    { id: 'is-null', value: 'is-null', name: 'Is null', label: 'Is null' },\n    { id: 'is-not-null', value: 'is-not-null', name: 'Is not null', label: 'Is not null' },\n  ];\n\n  /** Config for Verification dropdown (updated when verificationOptions changes, like Method dropdown) */\n  verificationSelectConfig: DynamicSelectFieldConfig = {\n    key: 'verification',\n    placeholder: 'Equals',\n    searchable: false,\n    options: [...ApiEditStepComponent.DEFAULT_VERIFICATION_OPTIONS],\n  };\n\n  private updateVerificationSelectConfig(): void {\n    const options =\n      this.verificationOptions?.length > 0\n        ? this.verificationOptions.map((v) => ApiEditStepComponent.toSelectOption(v))\n        : ApiEditStepComponent.DEFAULT_VERIFICATION_OPTIONS;\n    this.verificationSelectConfig = {\n      ...this.verificationSelectConfig,\n      options,\n    };\n  }\n\n  private getVerificationValues(): string[] {\n    const source =\n      this.verificationOptions?.length > 0\n        ? this.verificationOptions\n        : (ApiEditStepComponent.DEFAULT_VERIFICATION_OPTIONS as EnvironmentOptionInput[]);\n    return source\n      .map((v) => ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput))\n      .filter((v): v is string => v != null);\n  }\n\n  private getDefaultVerification(): string {\n    const values = this.getVerificationValues();\n    return values.length > 0 ? values[0] : 'equals';\n  }\n\n  /** Data Type options: array of strings or objects (passed from parent). Falls back to built-in list when empty. */\n  @Input() verificationDataTypeOptions: EnvironmentOptionInput[] = [];\n\n  private static readonly DEFAULT_DATA_TYPE_OPTIONS: SelectOption[] = [\n    { id: 'string', value: 'string', name: 'String', label: 'String' },\n    { id: 'number', value: 'number', name: 'Number', label: 'Number' },\n    { id: 'boolean', value: 'boolean', name: 'Boolean', label: 'Boolean' },\n    { id: 'array', value: 'array', name: 'Array', label: 'Array' },\n    { id: 'object', value: 'object', name: 'Object', label: 'Object' },\n  ];\n\n  /** Config for Data Type dropdown (updated when verificationDataTypeOptions changes, like Method dropdown) */\n  verificationDataTypeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'dataType',\n    placeholder: 'String',\n    searchable: false,\n    options: [...ApiEditStepComponent.DEFAULT_DATA_TYPE_OPTIONS],\n  };\n\n  private updateVerificationDataTypeSelectConfig(): void {\n    const options =\n      this.verificationDataTypeOptions?.length > 0\n        ? this.verificationDataTypeOptions.map((d) => ApiEditStepComponent.toSelectOption(d))\n        : ApiEditStepComponent.DEFAULT_DATA_TYPE_OPTIONS;\n    this.verificationDataTypeSelectConfig = {\n      ...this.verificationDataTypeSelectConfig,\n      options,\n    };\n  }\n\n  private getDataTypeValues(): string[] {\n    const source =\n      this.verificationDataTypeOptions?.length > 0\n        ? this.verificationDataTypeOptions\n        : (ApiEditStepComponent.DEFAULT_DATA_TYPE_OPTIONS as EnvironmentOptionInput[]);\n    return source\n      .map((d) => ApiEditStepComponent.getOptionValue(d as EnvironmentOptionInput))\n      .filter((v): v is string => v != null);\n  }\n\n  private getDefaultDataType(): string {\n    const values = this.getDataTypeValues();\n    return values.length > 0 ? values[0] : 'string';\n  }\n\n  /** Config for Expected Value when Data Type is Boolean (true/false dropdown) */\n  readonly verificationExpectedValueBooleanSelectConfig: DynamicSelectFieldConfig = {\n    key: 'expectedValue',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { id: 'true', value: 'true', name: 'true', label: 'true' },\n      { id: 'false', value: 'false', name: 'false', label: 'false' },\n    ],\n  };\n\n  /** Form array for Status tab verification rows; each item is FormGroup({ verification, expectedValue }) */\n  statusVerificationFormArray!: FormArray;\n\n  get statusVerificationRows(): FormGroup[] {\n    return (this.statusVerificationFormArray?.controls ?? []) as FormGroup[];\n  }\n\n  /** Config for Status tab Verification dropdown (Equals, Not equal, Less than, Greater than) */\n  /** Status tab Verification options (Equals, Not equal, etc.). Falls back to built-in list when empty. */\n  @Input() statusVerificationOptions: EnvironmentOptionInput[] = [];\n\n  private static readonly DEFAULT_STATUS_VERIFICATION_OPTIONS: SelectOption[] = [\n    { id: 'equals', value: 'equals', name: 'Equals', label: 'Equals' },\n    { id: 'not-equal', value: 'not-equal', name: 'Not equal', label: 'Not equal' },\n    { id: 'less-than', value: 'less-than', name: 'Less than', label: 'Less than' },\n    { id: 'greater-than', value: 'greater-than', name: 'Greater than', label: 'Greater than' },\n  ];\n\n  /** Config for Status tab Verification dropdown (updated when statusVerificationOptions changes). */\n  statusVerificationSelectConfig: DynamicSelectFieldConfig = {\n    key: 'verification',\n    placeholder: 'Equals',\n    searchable: false,\n    options: [...ApiEditStepComponent.DEFAULT_STATUS_VERIFICATION_OPTIONS],\n  };\n\n  private updateStatusVerificationSelectConfig(): void {\n    const options =\n      this.statusVerificationOptions?.length > 0\n        ? this.statusVerificationOptions.map((o) => ApiEditStepComponent.toSelectOption(o))\n        : ApiEditStepComponent.DEFAULT_STATUS_VERIFICATION_OPTIONS;\n    this.statusVerificationSelectConfig = {\n      ...this.statusVerificationSelectConfig,\n      options,\n    };\n  }\n\n  private getStatusVerificationValues(): string[] {\n    const source =\n      this.statusVerificationOptions?.length > 0\n        ? this.statusVerificationOptions\n        : (ApiEditStepComponent.DEFAULT_STATUS_VERIFICATION_OPTIONS as EnvironmentOptionInput[]);\n    return source\n      .map((o) => ApiEditStepComponent.getOptionValue(o as EnvironmentOptionInput))\n      .filter((v): v is string => v != null);\n  }\n\n  private getDefaultStatusVerification(): string {\n    const values = this.getStatusVerificationValues();\n    return values.length > 0 ? values[0] : 'equals';\n  }\n\n  responsePreview = ``;\n\n  /** Reference to the response preview section, used to scroll into view after Send Request completes. */\n  @ViewChild('responsePreviewRef', { static: false }) responsePreviewRef?: ElementRef<HTMLElement>;\n\n  private methodChangesSub?: Subscription;\n  private formatChangesSub?: Subscription;\n  private headerNameOptionsChangesSub?: Subscription;\n  private environmentFormChangesSub?: Subscription;\n  private methodFormChangesSub?: Subscription;\n  private paramsFormArrayChangesSub?: Subscription;\n\n  // Advanced settings: generic advanced variables for this API step (can be provided by parent)\n  advancedExpanded: boolean = true;\n  @Input() advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray = new FormArray([]);\n\n  constructor(\n    private readonly fb: FormBuilder,\n    private readonly cdr: ChangeDetectorRef,\n  ) {}\n\n  ngOnInit(): void {\n    this.applyInitialStep(this.initialStep);\n    this.updateMethodSelectConfig();\n    this.updateHeaderNameSelectConfig();\n    const firstMethodValue = this.httpMethodOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.httpMethodOptions[0])\n      : undefined;\n    const defaultMethod = this.initialMethod ?? firstMethodValue ?? 'GET';\n    this.currentMethodValue = typeof defaultMethod === 'string' ? defaultMethod : (ApiEditStepComponent.getOptionValue(defaultMethod as EnvironmentOptionInput) ?? '');\n    this.methodForm = this.fb.group({\n      method: [defaultMethod],\n    });\n    const firstValue = this.environmentOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.environmentOptions[0])\n      : undefined;\n    const defaultEnv = this.initialEnvironment ?? firstValue ?? 'Development';\n    this.currentEnvironmentValue = typeof defaultEnv === 'string' ? defaultEnv : (ApiEditStepComponent.getOptionValue(defaultEnv as EnvironmentOptionInput) ?? '');\n    this.environmentForm = this.fb.group({\n      environment: [defaultEnv],\n    });\n    this.updateAuthTypeSelectConfig();\n    const firstAuthValue = this.getAuthTypeValues()[0];\n    const defaultAuthType = this.initialAuthType ?? firstAuthValue ?? 'no-auth';\n    this.authTypeForm = this.fb.group({\n      authType: [defaultAuthType],\n    });\n    this.oauth2Form = this.fb.group({\n      grantType: ['client_credentials'],\n      accessTokenUrl: [''],\n      clientId: [''],\n      clientSecret: [''],\n      scope: [''],\n      clientAuthentication: ['basic'],\n    });\n    this.environmentFormChangesSub = this.environmentForm.get('environment')?.valueChanges?.subscribe((v: unknown) => {\n      const s = v != null && v !== '' ? (typeof v === 'object' ? ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) : String(v)) : '';\n      this.currentEnvironmentValue = s ?? '';\n    });\n    this.methodFormChangesSub = this.methodForm.get('method')?.valueChanges?.subscribe((v: unknown) => {\n      const s = v != null && v !== '' ? (typeof v === 'object' ? ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) : String(v)) : '';\n      this.currentMethodValue = s ?? '';\n    });\n    this.buildHeadersFormArray(\n      this.initialHeaders ?? [{ name: '', type: 'string', value: '' }]\n    );\n    this.headerNameOptionsChangesSub = this.headersFormArray?.valueChanges?.subscribe(() => {\n      this.updateHeaderNameSelectConfig();\n      this.headersChange.emit(this.headers);\n    });\n    this.updateHeaderNameSelectConfig();\n    this.headersChange.emit(this.headers);\n    this.updateEnvironmentSelectConfig();\n    this.updatePayloadFormatSelectConfig();\n    const firstFormatValue = this.getFormatValues()[0];\n    const defaultFormat = this.initialFormat ?? firstFormatValue ?? 'json';\n    this.payloadFormatForm = this.fb.group({ format: [defaultFormat] });\n\n    // Initialize payload type and text from inputs when editing\n    if (this.initialPayloadType) {\n      this.payloadType = this.initialPayloadType;\n    }\n    if (this.initialPayloadText != null) {\n      this.payloadText = this.initialPayloadText;\n    }\n\n    this.buildKeyValueFormArray();\n    this.buildKeyTypeValueFormArray();\n    this.buildParamsFormArray();\n    this.paramsFormArrayChangesSub = this.paramsFormArray.valueChanges?.subscribe(() => this.syncUrlFromParams());\n    if (this.initialUrl != null && this.initialUrl !== '') {\n      this._url = ApiEditStepComponent.decodeUrlForDisplay(this.initialUrl);\n      this.syncParamsFromUrl();\n    }\n    // Initialize variableName from initialVariableName\n    if (this.initialVariableName != null && this.initialVariableName !== '') {\n      this.variableName = this.initialVariableName;\n    }\n    // Initialize summary from initialSummary (step description)\n    if (this.initialSummary != null && this.initialSummary !== '') {\n      this.summary = this.initialSummary;\n    }\n    this.updateVerificationSelectConfig();\n    this.updateVerificationDataTypeSelectConfig();\n\n    // Initialize verification rows from inputs when provided; otherwise build defaults\n    const bodyRows =\n      this.initialResponseBodyVerifications && this.initialResponseBodyVerifications.length > 0\n        ? this.initialResponseBodyVerifications\n        : undefined;\n    this.buildVerificationFormArray(bodyRows);\n\n    this.updateStatusVerificationSelectConfig();\n    const statusRows =\n      this.initialStatusVerifications && this.initialStatusVerifications.length > 0\n        ? this.initialStatusVerifications\n        : undefined;\n    this.buildStatusVerificationFormArray(statusRows);\n    this.methodChangesSub = this.methodForm.get('method')?.valueChanges?.subscribe((value: string) => {\n      const method = value != null ? String(value).toUpperCase() : '';\n      if (METHODS_WITHOUT_BODY.includes(method) && this.activePayloadTab !== 'headers') {\n        this.activePayloadTab = 'headers';\n        this.cdr.detectChanges();\n      }\n    });\n    this.formatChangesSub = this.payloadFormatForm.get('format')?.valueChanges?.subscribe(() => {\n      this.validatePayloadJson();\n    });\n    this.validatePayloadJson();\n\n    // Initialize active response verification tab from input when provided\n    if (this.initialActiveResponseVerificationTab) {\n      this.activeResponseVerificationTab = this.initialActiveResponseVerificationTab;\n    }\n\n    // Build advanced settings form only from input variables (no local initialization)\n    if (this.advancedSettingsVariables && this.advancedSettingsVariables.length > 0) {\n      this.buildAdvancedVariablesForm();\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.setupPayloadTextareaScrollSync();\n  }\n\n  ngOnDestroy(): void {\n    this.methodChangesSub?.unsubscribe();\n    this.formatChangesSub?.unsubscribe();\n    this.headerNameOptionsChangesSub?.unsubscribe();\n    this.environmentFormChangesSub?.unsubscribe();\n    this.methodFormChangesSub?.unsubscribe();\n    this.paramsFormArrayChangesSub?.unsubscribe();\n  }\n\n  /** Sync line numbers column scroll with payload textarea scroll (Postman-style). */\n  private setupPayloadTextareaScrollSync(): void {\n    setTimeout(() => {\n      const host = this.payloadEditorWithLinesRef?.nativeElement;\n      if (!host) return;\n      const lineNumbersEl = host.querySelector('.cqa-api-edit-step-payload-line-numbers') as HTMLElement | null;\n      const textarea = host.querySelector('textarea') as HTMLTextAreaElement | null;\n      if (!lineNumbersEl || !textarea) return;\n      textarea.addEventListener('scroll', () => {\n        lineNumbersEl.scrollTop = textarea.scrollTop;\n      });\n      lineNumbersEl.addEventListener('scroll', () => {\n        textarea.scrollTop = lineNumbersEl.scrollTop;\n      });\n    }, 0);\n  }\n\n  private buildKeyValueFormArray(rows?: { key: string; value: string }[]): void {\n    const initial = rows ?? [{ key: '', value: '' }];\n    const groups = initial.map((r) => this.fb.group({ key: [r.key], value: [r.value] }));\n    this.keyValueFormArray = this.fb.array(groups);\n  }\n\n  private buildKeyTypeValueFormArray(rows?: { key: string; type: string; value: string }[]): void {\n    const initial = rows ?? [{ key: '', type: 'text', value: '' }];\n    const groups = initial.map((r) => this.fb.group({ key: [r.key], type: [r.type], value: [r.value] }));\n    this.keyTypeValueFormArray = this.fb.array(groups);\n  }\n\n  private buildParamsFormArray(rows?: { key: string; value: string }[]): void {\n    const initial = rows ?? [{ key: '', value: '' }];\n    const groups = initial.map((r) => this.fb.group({ key: [r.key], value: [r.value] }));\n    if (this.paramsFormArray) {\n      this.paramsFormArray.clear();\n      groups.forEach((g) => this.paramsFormArray.push(g));\n    } else {\n      this.paramsFormArray = this.fb.array(groups);\n    }\n  }\n\n  /** True if URL is a parameter placeholder (e.g. *|param|); must not be parsed with URL() which encodes | to %7C. */\n  private static isParameterUrl(urlStr: string): boolean {\n    if (!urlStr || typeof urlStr !== 'string') return false;\n    return /(\\*\\|[\\w-]+\\|(\\*)?|\\$\\|[\\w-]+\\|(\\*)?|@\\|[\\w-]+\\|(\\*)?|\\$\\{[^}]+\\})/.test(urlStr.trim());\n  }\n\n  /** Decode URL for display/payload: strip /* prefix and decode %7C to | so *|param| shows correctly. */\n  private static decodeUrlForDisplay(raw: string): string {\n    if (!raw || typeof raw !== 'string') return '';\n    let s = raw.trim();\n    if (!s) return '';\n    if (s.startsWith('/*')) s = s.slice(2).trim();\n    if (s.includes('%7C')) {\n      try {\n        s = decodeURIComponent(s);\n      } catch {\n        /* leave as-is */\n      }\n    }\n    return s;\n  }\n\n  /** Parse URL into base (without query/fragment) and query key-value pairs. Preserves relative URLs and parameter placeholders. */\n  private parseQueryParamsFromUrl(urlStr: string): { baseUrl: string; rows: { key: string; value: string }[] } {\n    const trimmed = urlStr?.trim() ?? '';\n    const empty = { baseUrl: trimmed || urlStr, rows: [{ key: '', value: '' }] };\n    if (!trimmed) return empty;\n    if (ApiEditStepComponent.isParameterUrl(urlStr)) return empty;\n    try {\n      const isAbsolute = /^https?:\\/\\//i.test(trimmed);\n      const url = new URL(urlStr, 'http://localhost');\n      const baseUrl = isAbsolute ? url.origin + url.pathname : url.pathname;\n      const rows: { key: string; value: string }[] = [];\n      url.searchParams.forEach((value, key) => {\n        rows.push({ key, value });\n      });\n      if (rows.length === 0) rows.push({ key: '', value: '' });\n      return { baseUrl, rows };\n    } catch {\n      return empty;\n    }\n  }\n\n  /** Get base URL (without query/fragment) for building URL from params. Preserves relative URLs and parameter placeholders. */\n  private getBaseUrl(urlStr: string): string {\n    if (!urlStr || !urlStr.trim()) return urlStr;\n    if (ApiEditStepComponent.isParameterUrl(urlStr)) return urlStr.trim();\n    try {\n      const isAbsolute = /^https?:\\/\\//i.test(urlStr.trim());\n      const url = new URL(urlStr, 'http://localhost');\n      return isAbsolute ? url.origin + url.pathname : url.pathname;\n    } catch {\n      return urlStr;\n    }\n  }\n\n  /**\n   * Set the payload format dropdown using the Content-Type header first, then\n   * fall back to inspecting the body content (JSON braces, XML tags, HTML doctype).\n   */\n  private applyBodyFormat(body: string, contentType: string): void {\n    const formatValues = this.getFormatValues();\n    if (!this.payloadFormatForm || formatValues.length === 0) return;\n    const ct = (contentType ?? '').toLowerCase();\n    const setFmt = (fmt: string) => {\n      if (formatValues.includes(fmt)) this.payloadFormatForm.patchValue({ format: fmt });\n    };\n    // Content-Type takes priority\n    if (ct.includes('application/json') || ct.includes('text/json'))                      return setFmt('json');\n    if (ct.includes('application/xml') || ct.includes('text/xml') || ct.includes('xhtml')) return setFmt('xml');\n    if (ct.includes('text/html'))                                                           return setFmt('html');\n    if (ct.includes('text/plain') || ct.includes('text/csv'))                              return setFmt('text');\n    // Fall back to body-content inspection\n    const t = (body ?? '').trim();\n    if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']')))  return setFmt('json');\n    if (t.startsWith('<?xml') || (t.startsWith('<') && !t.startsWith('<!') && !t.toLowerCase().startsWith('<!doctype')))\n                                                                                            return setFmt('xml');\n    if (t.toLowerCase().startsWith('<!doctype html') || t.toLowerCase().startsWith('<html')) return setFmt('html');\n  }\n\n  /** Parse application/x-www-form-urlencoded body (key=value&...) into key-value rows. */\n  private parseFormUrlEncodedBody(body: string): { key: string; value: string }[] {\n    const trimmed = (body ?? '').trim();\n    if (!trimmed) return [];\n    try {\n      const params = new URLSearchParams(trimmed);\n      const rows: { key: string; value: string }[] = [];\n      params.forEach((value, key) => rows.push({ key, value }));\n      return rows;\n    } catch {\n      return [];\n    }\n  }\n\n  /**\n   * If form body has a single key whose value is URL-decoded JSON, return it pretty-printed for Raw body.\n   * Otherwise return null (caller keeps x-www-form-urlencoded view).\n   */\n  private tryFormBodyValueAsRawJson(rows: { key: string; value: string }[]): string | null {\n    if (rows.length !== 1 || !rows[0].value?.trim()) return null;\n    const value = rows[0].value.trim();\n    if (!(value.startsWith('{') || value.startsWith('['))) return null;\n    try {\n      const parsed = JSON.parse(value);\n      return JSON.stringify(parsed, null, 2);\n    } catch {\n      return null;\n    }\n  }\n\n  /** Update Params table from current URL query string (Postman-style). */\n  private syncParamsFromUrl(): void {\n    const { baseUrl: _b, rows } = this.parseQueryParamsFromUrl(this._url);\n    this.buildParamsFormArray(rows);\n    this.cdr.markForCheck();\n  }\n\n  /** Update URL query string from Params table (Postman-style). */\n  private syncUrlFromParams(): void {\n    if (this.paramsSyncingFromUrl || !this.paramsFormArray) return;\n    const baseUrl = this.getBaseUrl(this._url);\n    const params = new URLSearchParams();\n    for (const c of this.paramsFormArray.controls) {\n      const key = ((c as FormGroup).get('key')?.value ?? '').trim();\n      const value = (c as FormGroup).get('value')?.value ?? '';\n      if (key !== '') params.set(key, value);\n    }\n    const queryString = params.toString();\n    const newUrl = queryString ? `${baseUrl}?${queryString}` : baseUrl;\n    if (this._url !== newUrl) {\n      this._url = newUrl;\n      this.cdr.markForCheck();\n    }\n  }\n\n  private buildVerificationFormArray(rows?: { jsonPath: string; verification: string; dataType: string; expectedValue: string }[]): void {\n    const defaultVerification = this.getDefaultVerification();\n    const defaultDataType = this.getDefaultDataType();\n    const initial = rows ?? [{ jsonPath: '', verification: defaultVerification, dataType: defaultDataType, expectedValue: '' }];\n    const groups = initial.map((r) =>\n      this.fb.group({\n        jsonPath: [r.jsonPath],\n        verification: [r.verification],\n        dataType: [r.dataType],\n        expectedValue: [r.expectedValue],\n      })\n    );\n    this.verificationFormArray = this.fb.array(groups);\n  }\n\n  private buildStatusVerificationFormArray(rows?: { verification: string; expectedValue: string }[]): void {\n    const defaultVerification = this.getDefaultStatusVerification();\n    const initial = rows ?? [{ verification: defaultVerification, expectedValue: '' }];\n    const groups = initial.map((r) =>\n      this.fb.group({\n        verification: [r.verification],\n        expectedValue: [r.expectedValue],\n      })\n    );\n    this.statusVerificationFormArray = this.fb.array(groups);\n  }\n\n  private buildHeadersFormArray(rows: ApiEditHeaderRow[]): void {\n    const groups = rows.map((h) =>\n      this.fb.group({\n        name: [h.name],\n        value: [h.value],\n      })\n    );\n    if (this.headersFormArray) {\n      this.headersFormArray.clear();\n      groups.forEach((g) => this.headersFormArray.push(g));\n    } else {\n      this.headersFormArray = this.fb.array(groups);\n    }\n  }\n\n  /** Reset all three steps and all entered data to initial/default state. Used when user cancels on step 1. */\n  private resetAllStepsAndData(): void {\n    this.currentStep = 1;\n\n    const firstMethodValue = this.httpMethodOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.httpMethodOptions[0])\n      : undefined;\n    const defaultMethod = this.initialMethod ?? firstMethodValue ?? 'GET';\n    const methodVal = typeof defaultMethod === 'string' ? defaultMethod : (ApiEditStepComponent.getOptionValue(defaultMethod as EnvironmentOptionInput) ?? '');\n    this.currentMethodValue = methodVal ?? '';\n    if (this.methodForm) this.methodForm.patchValue({ method: defaultMethod });\n\n    const firstEnvValue = this.environmentOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.environmentOptions[0])\n      : undefined;\n    const defaultEnv = this.initialEnvironment ?? firstEnvValue ?? 'Development';\n    const envVal = typeof defaultEnv === 'string' ? defaultEnv : (ApiEditStepComponent.getOptionValue(defaultEnv as EnvironmentOptionInput) ?? '');\n    this.currentEnvironmentValue = envVal ?? '';\n    if (this.environmentForm) this.environmentForm.patchValue({ environment: defaultEnv });\n\n    this.url = ApiEditStepComponent.decodeUrlForDisplay(this.initialUrl ?? '') || '';\n    this.buildHeadersFormArray(this.initialHeaders ?? [{ name: '', type: 'string', value: '' }]);\n    this.updateHeaderNameSelectConfig();\n    this.headersChange.emit(this.headers);\n\n    this.bodyView = 'headers';\n    this.activePayloadTab = 'headers';\n    this.payloadType = 'raw';\n    this.payloadText = '';\n    this.payloadJsonError = null;\n    const defaultFormat = this.initialFormat ?? this.getFormatValues()[0] ?? 'json';\n    if (this.payloadFormatForm) this.payloadFormatForm.patchValue({ format: defaultFormat });\n    this.buildKeyValueFormArray();\n    this.buildKeyTypeValueFormArray();\n    this.buildParamsFormArray();\n    this.importCurlControl.setValue('');\n\n    this.variableName = '';\n    this.variableNameError = '';\n    this.summary = this.initialSummary ?? '';\n\n    this.buildVerificationFormArray();\n    this.buildStatusVerificationFormArray();\n    this.activeResponseVerificationTab = 'response-body';\n\n    this.validatePayloadJson();\n    this.cdr.detectChanges();\n  }\n\n  /** Handler: show import cURL panel (called when user clicks \"Import API cURL\"). Resets textarea so it is cleared each time. */\n  openImportCurlPanel(): void {\n    this.importCurlControl.setValue('');\n    this.bodyView = 'import-curl';\n    this.cdr.detectChanges();\n  }\n\n  /** Reset URL, method, headers, body, and params to empty/default before applying imported cURL. */\n  private resetRequestFieldsBeforeCurlImport(): void {\n    const firstMethodValue = this.httpMethodOptions?.length\n      ? ApiEditStepComponent.getOptionValue(this.httpMethodOptions[0])\n      : undefined;\n    const defaultMethod = this.initialMethod ?? firstMethodValue ?? 'GET';\n    this.selectedMethod = typeof defaultMethod === 'string' ? defaultMethod : (ApiEditStepComponent.getOptionValue(defaultMethod as EnvironmentOptionInput) ?? '') ?? 'GET';\n    this.currentMethodValue = this.selectedMethod;\n    if (this.methodForm) this.methodForm.patchValue({ method: defaultMethod });\n\n    this.url = '';\n\n    // Reset auth so a previous Bearer token doesn't persist when re-importing\n    const firstAuthValue = this.getAuthTypeValues()[0] ?? 'no-auth';\n    if (this.authTypeForm) this.authTypeForm.patchValue({ authType: firstAuthValue });\n    this.bearerToken = '';\n\n    this.buildHeadersFormArray([{ name: '', type: 'string', value: '' }]);\n    this.updateHeaderNameSelectConfig();\n    this.headersChange.emit(this.headers);\n\n    this.payloadType = 'raw';\n    this.payloadText = '';\n    this.payloadJsonError = null;\n    const defaultFormat = this.initialFormat ?? this.getFormatValues()[0] ?? 'json';\n    if (this.payloadFormatForm) this.payloadFormatForm.patchValue({ format: defaultFormat });\n    this.buildKeyValueFormArray([{ key: '', value: '' }]);\n    this.buildKeyTypeValueFormArray([{ key: '', type: 'text', value: '' }]);\n    this.buildParamsFormArray([{ key: '', value: '' }]);\n\n    this.validatePayloadJson();\n    this.cdr.detectChanges();\n  }\n\n  /** Handler: parse cURL from control, bind to form fields, emit and close panel. */\n  onImportCurlConfirm(): void {\n    const value = this.importCurlControl.value ?? '';\n    const curlStr = typeof value === 'string' ? value : '';\n    this.importCurl.emit(curlStr);\n\n    this.resetRequestFieldsBeforeCurlImport();\n\n    const parsed = parseCurl(curlStr);\n    if (parsed) {\n      // ── Method ──────────────────────────────────────────────────────────\n      const methodValue = parsed.method && this.getMethodValues().includes(parsed.method)\n        ? parsed.method\n        : parsed.method || 'GET';\n      this.selectedMethod = methodValue;\n      this.currentMethodValue = methodValue;\n\n      // ── URL (also syncs Params tab from query string) ────────────────────\n      if (parsed.url) this.url = parsed.url;\n\n      // ── Authorization header → Bearer Token / auth type ─────────────────\n      let headerRows: ApiEditHeaderRow[] = parsed.headers;\n      const authHeader = headerRows.find(h => h.name.toLowerCase() === 'authorization');\n      if (authHeader?.value?.trim()) {\n        const bearerMatch = /^Bearer\\s+(.+)$/i.exec(authHeader.value.trim());\n        if (bearerMatch) {\n          const token = bearerMatch[1].trim();\n          if (this.getAuthTypeValues().includes('bearer') && this.authTypeForm) {\n            this.authTypeForm.patchValue({ authType: 'bearer' });\n            this.bearerToken = token;\n          }\n          // Remove Authorization from headers table (it lives in the Auth tab)\n          headerRows = headerRows.filter(h => h.name.toLowerCase() !== 'authorization');\n        }\n      }\n\n      // ── Headers table ────────────────────────────────────────────────────\n      headerRows = headerRows.length > 0 ? headerRows : [{ name: '', type: 'string', value: '' }];\n      this.buildHeadersFormArray(headerRows);\n      this.updateHeaderNameSelectConfig();\n      this.headersChange.emit(this.headers);\n\n      // ── Determine Content-Type for body/format decisions ─────────────────\n      const contentType = parsed.headers\n        .find(h => h.name.toLowerCase() === 'content-type')\n        ?.value?.toLowerCase() ?? '';\n\n      // ── Body / Form-data ─────────────────────────────────────────────────\n      let tabToActivate: ApiEditPayloadTab = 'headers';\n\n      if (parsed.formData.length > 0) {\n        // Multipart form-data (-F / --form entries)\n        this.payloadType = 'form-data';\n        this.buildKeyTypeValueFormArray(\n          parsed.formData.map(e => ({ key: e.key, type: e.type, value: e.value }))\n        );\n        this.payloadText = '';\n        this.payloadJsonError = null;\n        tabToActivate = 'body';\n\n      } else if (parsed.body) {\n        const isFormUrlEncoded = contentType.includes('application/x-www-form-urlencoded');\n\n        if (isFormUrlEncoded) {\n          const rows = this.parseFormUrlEncodedBody(parsed.body);\n          this.buildKeyValueFormArray(rows.length > 0 ? rows : [{ key: '', value: '' }]);\n          const decodedAsJson = this.tryFormBodyValueAsRawJson(rows);\n          if (decodedAsJson != null) {\n            this.payloadType = 'raw';\n            this.payloadText = decodedAsJson;\n            if (this.payloadFormatForm) this.payloadFormatForm.patchValue({ format: 'json' });\n            this.validatePayloadJson();\n            this.payloadJsonError = null;\n          } else {\n            this.payloadType = 'x-www-form-urlencoded';\n            this.payloadText = '';\n            this.payloadJsonError = null;\n          }\n        } else {\n          this.payloadText = parsed.body;\n          this.validatePayloadJson();\n          this.applyBodyFormat(parsed.body, contentType);\n        }\n        tabToActivate = 'body';\n      }\n\n      // ── Auto-switch to the most relevant tab ─────────────────────────────\n      if (tabToActivate === 'body') {\n        this.activePayloadTab = 'body';\n      } else if (authHeader?.value?.trim()) {\n        this.activePayloadTab = 'authorization';\n      }\n\n      this.cdr.detectChanges();\n    }\n\n    this.closeImportCurlPanel();\n  }\n\n  /** Handler: emit cancel and close panel. Called when user clicks Cancel in import cURL panel. */\n  onCancelImportCurl(): void {\n    this.importCurlCancel.emit();\n    this.closeImportCurlPanel();\n  }\n\n  /** Handler: show headers section (called from Cancel or after Import in import panel). */\n  closeImportCurlPanel(): void {\n    this.bodyView = 'headers';\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Validate URL: must be required and match http/https pattern\n   * Also allows parameter placeholders like @|paramName|\n   */\n  private validateUrl(): boolean {\n    const urlValue = this.url?.trim() || '';\n    \n    // Check if URL is empty\n    if (!urlValue) {\n      this.urlError = 'URL is required';\n      return false;\n    }\n    \n    // Check if it's a parameter placeholder (format: @|paramName|)\n    const isParameterPlaceholder = /^@\\|[^|]+\\|$/.test(urlValue);\n    if (isParameterPlaceholder) {\n      this.urlError = '';\n      return true;\n    }\n\n    // When an environment is selected, skip the http/https validation\n    // because the URL may be a relative path or parameter that gets resolved against the environment base URL.\n    const hasEnvironment = this.currentEnvironmentValue != null\n      && this.currentEnvironmentValue !== ''\n      && this.currentEnvironmentValue !== 'none';\n\n    if (!hasEnvironment) {\n      // Check if URL matches http or https pattern\n      const urlPattern = /^https?:\\/\\/.+/i;\n      if (!urlPattern.test(urlValue)) {\n        this.urlError = 'URL must start with http:// or https://';\n        return false;\n      }\n\n      // Additional validation: try to create URL object to ensure it's valid\n      try {\n        new URL(urlValue);\n      } catch {\n        this.urlError = 'Please enter a valid URL';\n        return false;\n      }\n    }\n\n    this.urlError = '';\n    return true;\n  }\n\n  /**\n   * Check if URL is valid (for button disabled state)\n   */\n  get isUrlValid(): boolean {\n    const urlValue = this.url?.trim() || '';\n    \n    // Empty URL is invalid\n    if (!urlValue) {\n      return false;\n    }\n    \n    // Parameter placeholder is valid\n    const isParameterPlaceholder = /^@\\|[^|]+\\|$/.test(urlValue);\n    if (isParameterPlaceholder) {\n      return true;\n    }\n\n    // When an environment is selected, skip the http/https validation\n    const hasEnvironment = this.currentEnvironmentValue != null\n      && this.currentEnvironmentValue !== ''\n      && this.currentEnvironmentValue !== 'none';\n\n    if (hasEnvironment) {\n      return true;\n    }\n\n    // Must match http/https pattern\n    const urlPattern = /^https?:\\/\\/.+/i;\n    if (!urlPattern.test(urlValue)) {\n      return false;\n    }\n\n    // Try to create URL object to ensure it's valid\n    try {\n      new URL(urlValue);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  onSendRequest(): void {\n    // Validate URL before sending request\n    if (!this.validateUrl()) {\n      this.cdr.markForCheck();\n      return;\n    }\n    \n    const environment = this.selectedEnvironment != null ? String(this.selectedEnvironment) : '';\n    const method = this.selectedMethod != null ? String(this.selectedMethod) : '';\n    try {\n      const step1 = this.getCreatePayload().step1;\n      this.sendRequest.emit({\n        environment: step1.environment ?? environment,\n        method: step1.method ?? method,\n        url: step1.url ?? (this.url ?? ''),\n        headers: step1.headers ?? this.headers,\n        authType: step1.authType,\n        bearerToken: step1.bearerToken,\n        oauth2: step1.oauth2,\n        payloadType: step1.payloadType,\n        payloadFormat: step1.payloadFormat,\n        payloadText: step1.payloadText,\n        keyValueRows: step1.keyValueRows,\n        keyTypeValueRows: step1.keyTypeValueRows,\n        paramsRows: step1.paramsRows,\n      });\n    } catch {\n      this.sendRequest.emit({\n        environment,\n        method,\n        url: this.url ?? '',\n        headers: this.headers,\n        authType: this.selectedAuthType,\n        bearerToken: this.bearerToken ?? '',\n        payloadType: this.payloadType,\n        payloadFormat: this.payloadFormatForm?.get('format')?.value ?? '',\n        payloadText: this.payloadText ?? '',\n      });\n    }\n  }\n\n  onVariableNameChange(): void {\n    this.variableNameError = '';\n  }\n\n  onBack(): void {\n    if (this.currentStep > 1) {\n      this.setStep(this.currentStep - 1);\n    } else {\n      this.resetAllStepsAndData();\n      this.back.emit();\n    }\n  }\n\n  /** Called when user clicks the Cancel button (step 1). Emits cancel then runs normal back flow. */\n  onCancel(): void {\n    this.cancel.emit();\n    this.onBack();\n  }\n\n  onNext(): void {\n    // Validate URL on step 1\n    if (this.currentStep === 1) {\n      if (!this.validateUrl()) {\n        this.cdr.markForCheck();\n        return;\n      }\n    }\n    \n    // Validate variable name on step 2\n    if (this.currentStep === 2 && !this.variableName?.trim()) {\n      this.variableNameError = 'Variable Name is required.';\n      return;\n    }\n    this.variableNameError = '';\n    if (this.currentStep < this.stepLabels.length) {\n      this.setStep(this.currentStep + 1);\n    } else {\n      this.next.emit();\n    }\n  }\n\n  setPayloadTab(value: ApiEditPayloadTab): void {\n    this.activePayloadTab = value;\n  }\n\n  setResponseVerificationTab(value: 'response-body' | 'status'): void {\n    this.activeResponseVerificationTab = value;\n  }\n\n  addHeader(): void {\n    this.headersFormArray.push(\n      this.fb.group({ name: [''], value: [''] })\n    );\n  }\n\n  removeHeader(index: number): void {\n    this.headersFormArray.removeAt(index);\n  }\n\n  /** When user adds a custom header name via the dropdown \"Add '…'\" option, set the control value. */\n  onHeaderNameAddCustomValue(event: { key: string; value: string }, row: FormGroup): void {\n    const control = row.get(event.key);\n    if (control && event.value != null) {\n      control.setValue(event.value.trim());\n    }\n  }\n\n  trackByHeader(index: number): number {\n    return index;\n  }\n\n  addKeyValueRow(): void {\n    this.keyValueFormArray.push(this.fb.group({ key: [''], value: [''] }));\n  }\n\n  removeKeyValueRow(index: number): void {\n    this.keyValueFormArray.removeAt(index);\n  }\n\n  trackByKeyValue(index: number): number {\n    return index;\n  }\n\n  addKeyTypeValueRow(): void {\n    this.keyTypeValueFormArray.push(this.fb.group({ key: [''], type: ['text'], value: [''] }));\n  }\n\n  removeKeyTypeValueRow(index: number): void {\n    this.keyTypeValueFormArray.removeAt(index);\n  }\n\n  trackByKeyTypeValue(index: number): number {\n    return index;\n  }\n\n  addParamsRow(): void {\n    this.paramsFormArray.push(this.fb.group({ key: [''], value: [''] }));\n  }\n\n  removeParamsRow(index: number): void {\n    this.paramsFormArray.removeAt(index);\n  }\n\n  trackByParams(index: number): number {\n    return index;\n  }\n\n  addVerificationRow(): void {\n    this.verificationFormArray.push(\n      this.fb.group({\n        jsonPath: [''],\n        verification: [this.getDefaultVerification()],\n        dataType: [this.getDefaultDataType()],\n        expectedValue: [''],\n      })\n    );\n  }\n\n  removeVerificationRow(index: number): void {\n    this.verificationFormArray.removeAt(index);\n  }\n\n  trackByVerification(index: number): number {\n    return index;\n  }\n\n  /** When Data Type changes in Response Body verification, reset Expected Value for that row. */\n  onVerificationDataTypeChange(row: FormGroup, event: { key: string; value: unknown }): void {\n    if (event.key === 'dataType') {\n      row.get('expectedValue')?.setValue('', { emitEvent: false });\n    }\n  }\n\n  addStatusVerificationRow(): void {\n    this.statusVerificationFormArray.push(\n      this.fb.group({ verification: [this.getDefaultStatusVerification()], expectedValue: [''] })\n    );\n  }\n\n  removeStatusVerificationRow(index: number): void {\n    this.statusVerificationFormArray.removeAt(index);\n  }\n\n  trackByStatusVerification(index: number): number {\n    return index;\n  }\n\n  /**\n   * Build reactive form for advanced settings variables.\n   */\n  private buildAdvancedVariablesForm(): void {\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    this.advancedSettingsVariables.forEach(variable => {\n      const defaultValue =\n        variable.type === 'boolean' || typeof variable.value === 'boolean'\n          ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n          : (variable.value || '');\n\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n\n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  /**\n   * Handle advanced boolean changes and keep both data and form in sync.\n   */\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  /**\n   * Handle non-boolean advanced values (kept for API compatibility; currently unused).\n   */\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  /** Emit all entered details (environment, HTTP method, URL, headers, body, step2 variable, step3 verifications) when user clicks Create. */\n  onCreate(): void {\n    console.log('9999999');\n    \n    try {\n      const payload = this.getCreatePayload();\n      console.log('9999999 payload', payload);\n      this.create.emit(payload);\n    } catch (err) {\n      console.error('ApiEditStep getCreatePayload error:', err);\n      this.create.emit(this.getCreatePayloadFallback());\n    }\n  }\n\n  /** Minimal payload when getCreatePayload throws (so create always emits). */\n  private getCreatePayloadFallback(): ApiEditCreatePayload {\n    const authType = this.selectedAuthType;\n    const bearerToken = authType === 'bearer' ? (this.bearerToken ?? '') : undefined;\n    let oauth2: ApiEditOAuth2Payload | undefined;\n    if (authType === 'oauth2' && this.oauth2Form) {\n      const grantType = ApiEditStepComponent.getControlValue(this.oauth2Form.get('grantType') as { value: unknown } | null);\n      const clientAuth = ApiEditStepComponent.getControlValue(this.oauth2Form.get('clientAuthentication') as { value: unknown } | null);\n      oauth2 = {\n        grantType: grantType !== '' ? grantType : 'client_credentials',\n        accessTokenUrl: (this.oauth2Form.get('accessTokenUrl')?.value ?? '') as string,\n        clientId: (this.oauth2Form.get('clientId')?.value ?? '') as string,\n        clientSecret: (this.oauth2Form.get('clientSecret')?.value ?? '') as string,\n        scope: (this.oauth2Form.get('scope')?.value ?? '') as string,\n        clientAuthentication: clientAuth !== '' ? clientAuth : 'basic',\n      };\n    }\n    return {\n      step1: {\n        summary: this.summary?.trim() || undefined,\n        environment: '',\n        method: '',\n        url: this.url ?? '',\n        headers: [],\n        authType,\n        ...(bearerToken !== undefined && { bearerToken }),\n        ...(oauth2 !== undefined && { oauth2 }),\n        activePayloadTab: this.activePayloadTab,\n        payloadType: this.payloadType,\n        payloadFormat: '',\n        payloadText: this.payloadText ?? '',\n        keyValueRows: [],\n        keyTypeValueRows: [],\n        paramsRows: [],\n      },\n      step2: { variableName: this.variableName ?? '' },\n      step3: {\n        activeResponseVerificationTab: this.activeResponseVerificationTab,\n        responseBodyVerifications: [],\n        statusVerifications: [],\n      },\n      advancedSettingsVariables: this.advancedSettingsVariables,\n    };\n  }\n\n  /** Normalize form control value to string (handles object or string). */\n  private static getControlValue(control: { value: unknown } | null | undefined): string {\n    const v = control?.value;\n    if (v == null || v === '') return '';\n    return typeof v === 'object' ? (ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? '') : String(v);\n  }\n\n  /** Build full create payload: environment, HTTP method, URL, headers, body (step1), variable name (step2), verifications (step3). */\n  private getCreatePayload(): ApiEditCreatePayload {\n    const envFromForm = ApiEditStepComponent.getControlValue(this.environmentForm?.get('environment') as { value: unknown } | null);\n    const environment =\n      envFromForm !== '' ? envFromForm : (this.currentEnvironmentValue !== '' ? this.currentEnvironmentValue : this.selectedEnvironment);\n    const methodFromForm = ApiEditStepComponent.getControlValue(this.methodForm?.get('method') as { value: unknown } | null);\n    const method =\n      methodFromForm !== '' ? methodFromForm : (this.currentMethodValue !== '' ? this.currentMethodValue : this.selectedMethod);\n    const format = this.payloadFormatForm?.get('format')?.value ?? '';\n    const keyValueFormArray = this.keyValueFormArray;\n    const keyValueRows = (keyValueFormArray?.controls ?? []).map((c) => ({\n      key: (c as FormGroup).get('key')?.value ?? '',\n      value: (c as FormGroup).get('value')?.value ?? '',\n    }));\n    const keyTypeValueFormArray = this.keyTypeValueFormArray;\n    const keyTypeValueRows = (keyTypeValueFormArray?.controls ?? []).map((c) => ({\n      key: (c as FormGroup).get('key')?.value ?? '',\n      type: (c as FormGroup).get('type')?.value ?? 'text',\n      value: (c as FormGroup).get('value')?.value ?? '',\n    }));\n    const paramsFormArray = this.paramsFormArray;\n    const paramsRows = (paramsFormArray?.controls ?? []).map((c) => ({\n      key: (c as FormGroup).get('key')?.value ?? '',\n      value: (c as FormGroup).get('value')?.value ?? '',\n    }));\n    const verificationFormArray = this.verificationFormArray;\n    const responseBodyVerifications = (verificationFormArray?.controls ?? []).map((c) => ({\n      jsonPath: (c as FormGroup).get('jsonPath')?.value ?? '',\n      verification: (c as FormGroup).get('verification')?.value ?? '',\n      dataType: (c as FormGroup).get('dataType')?.value ?? '',\n      expectedValue: (c as FormGroup).get('expectedValue')?.value ?? '',\n    }));\n    const statusVerificationFormArray = this.statusVerificationFormArray;\n    const statusVerifications = (statusVerificationFormArray?.controls ?? []).map((c) => ({\n      verification: (c as FormGroup).get('verification')?.value ?? '',\n      expectedValue: (c as FormGroup).get('expectedValue')?.value ?? '',\n    }));\n    const authType = this.selectedAuthType;\n    const bearerToken = authType === 'bearer' ? (this.bearerToken ?? '') : undefined;\n    let oauth2: ApiEditOAuth2Payload | undefined;\n    if (authType === 'oauth2' && this.oauth2Form) {\n      const grantType = ApiEditStepComponent.getControlValue(this.oauth2Form.get('grantType') as { value: unknown } | null);\n      const clientAuth = ApiEditStepComponent.getControlValue(this.oauth2Form.get('clientAuthentication') as { value: unknown } | null);\n      oauth2 = {\n        grantType: grantType !== '' ? grantType : 'client_credentials',\n        accessTokenUrl: (this.oauth2Form.get('accessTokenUrl')?.value ?? '') as string,\n        clientId: (this.oauth2Form.get('clientId')?.value ?? '') as string,\n        clientSecret: (this.oauth2Form.get('clientSecret')?.value ?? '') as string,\n        scope: (this.oauth2Form.get('scope')?.value ?? '') as string,\n        clientAuthentication: clientAuth !== '' ? clientAuth : 'basic',\n      };\n    }\n    return {\n      step1: {\n        summary: this.summary?.trim() || undefined,\n        environment,\n        method,\n        url: this.url ?? '',\n        headers: this.headers,\n        authType,\n        ...(bearerToken !== undefined && { bearerToken }),\n        ...(oauth2 !== undefined && { oauth2 }),\n        activePayloadTab: this.activePayloadTab,\n        payloadType: this.payloadType,\n        payloadFormat: format,\n        payloadText: this.payloadText ?? '',\n        keyValueRows,\n        keyTypeValueRows,\n        paramsRows,\n      },\n      step2: {\n        variableName: this.variableName ?? '',\n      },\n      step3: {\n        activeResponseVerificationTab: this.activeResponseVerificationTab,\n        responseBodyVerifications,\n        statusVerifications,\n      },\n      advancedSettingsVariables: this.advancedSettingsVariables,\n    };\n  }\n\n  /** Current header rows from form (for consumers that read headers) */\n  get headers(): ApiEditHeaderRow[] {\n    if (!this.headersFormArray) return [];\n    return this.headersFormArray.controls.map((c) => ({\n      name: (c as FormGroup).get('name')?.value ?? '',\n      type: 'string',\n      value: (c as FormGroup).get('value')?.value ?? '',\n    }));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['initialMethod']?.currentValue != null && this.methodForm) {\n      const v = changes['initialMethod'].currentValue;\n      this.currentMethodValue = typeof v === 'string' ? v : (ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? '');\n      this.methodForm.patchValue({ method: v });\n    }\n    if (changes['httpMethodOptions']) {\n      this.updateMethodSelectConfig();\n      if (this.methodForm && this.httpMethodOptions?.length) {\n        const current = this.methodForm.get('method')?.value;\n        const values = this.getMethodValues();\n        const valid = values.includes(current);\n        if (!valid) {\n          const firstValue = ApiEditStepComponent.getOptionValue(this.httpMethodOptions[0]);\n          if (firstValue != null) {\n            this.currentMethodValue = firstValue;\n            this.methodForm.patchValue({ method: firstValue });\n          }\n        }\n      }\n    }\n    if (changes['initialEnvironment']?.currentValue != null && this.environmentForm) {\n      const v = changes['initialEnvironment'].currentValue;\n      this.currentEnvironmentValue = typeof v === 'string' ? v : (ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput) ?? '');\n      this.environmentForm.patchValue({ environment: v });\n    }\n    if (changes['environmentOptions']) {\n      this.updateEnvironmentSelectConfig();\n      if (this.environmentForm && this.environmentOptions?.length) {\n        const current = this.environmentForm.get('environment')?.value;\n        const values = this.getEnvironmentValues();\n        const valid = values.includes(current);\n        if (!valid) {\n          const firstValue = ApiEditStepComponent.getOptionValue(this.environmentOptions[0]);\n          if (firstValue != null) {\n            this.currentEnvironmentValue = firstValue;\n            this.environmentForm.patchValue({ environment: firstValue });\n          }\n        }\n      }\n    }\n    if (changes['hasMoreEnvironments'] || changes['isLoadingEnvironments']) {\n      this.updateEnvironmentSelectConfig();\n    }\n    if (changes['initialAuthType']?.currentValue != null && this.authTypeForm) {\n      const v = changes['initialAuthType'].currentValue;\n      const resolved =\n        typeof v === 'string' ? v : ApiEditStepComponent.getOptionValue(v as EnvironmentOptionInput);\n      if (resolved != null) this.authTypeForm.patchValue({ authType: v });\n    }\n    if (changes['authTypeOptions']) {\n      this.updateAuthTypeSelectConfig();\n      if (this.authTypeForm) {\n        const values = this.getAuthTypeValues();\n        if (values.length > 0) {\n          const current = this.authTypeForm.get('authType')?.value;\n          const currentVal =\n            current != null && current !== ''\n              ? typeof current === 'object'\n                ? ApiEditStepComponent.getOptionValue(current as EnvironmentOptionInput)\n                : String(current)\n              : null;\n          const valid = currentVal != null && values.includes(currentVal);\n          if (!valid) {\n            const firstValue = values[0];\n            if (firstValue != null) {\n              this.authTypeForm.patchValue({ authType: firstValue });\n            }\n          }\n        }\n      }\n    }\n    if (changes['initialStep']) {\n      this.applyInitialStep(changes['initialStep'].currentValue);\n    }\n    if (changes['initialUrl']?.currentValue != null) {\n      this.url = ApiEditStepComponent.decodeUrlForDisplay(changes['initialUrl'].currentValue);\n    }\n    if (changes['initialPayloadTab']?.currentValue != null) {\n      this.activePayloadTab = changes['initialPayloadTab'].currentValue;\n    }\n    if (changes['headerNameOptions']) {\n      this.updateHeaderNameSelectConfig();\n    }\n    if (changes['initialHeaders']?.currentValue != null) {\n      this.buildHeadersFormArray(changes['initialHeaders'].currentValue as ApiEditHeaderRow[]);\n      this.updateHeaderNameSelectConfig();\n    }\n    if (changes['initialResponsePreview']?.currentValue != null) {\n      console.log('9999999 initialResponsePreview', this.initialResponsePreview);\n      this.responsePreview = changes['initialResponsePreview'].currentValue;\n      // When a new response preview is provided (after Send Request), scroll preview section into view\n      this.scrollPreviewIntoView();\n    }\n    if (changes['initialFormat']?.currentValue != null && this.payloadFormatForm) {\n      this.payloadFormatForm.patchValue({ format: changes['initialFormat'].currentValue });\n    }\n    if (changes['initialVariableName']?.currentValue != null) {\n      this.variableName = changes['initialVariableName'].currentValue;\n    }\n    if (changes['initialSummary']?.currentValue != null) {\n      this.summary = changes['initialSummary'].currentValue;\n    }\n    if (changes['formatOptions']) {\n      this.updatePayloadFormatSelectConfig();\n      if (this.payloadFormatForm) {\n        const current = this.payloadFormatForm.get('format')?.value;\n        const values = this.getFormatValues();\n        const valid = values.includes(current);\n        if (!valid && values.length > 0) {\n          const firstValue = values[0];\n          this.payloadFormatForm.patchValue({ format: firstValue });\n        }\n      }\n    }\n    if (changes['verificationOptions']) {\n      this.updateVerificationSelectConfig();\n      const values = this.getVerificationValues();\n      const defaultVerification = this.getDefaultVerification();\n      if (this.verificationFormArray && values.length > 0) {\n        this.verificationFormArray.controls.forEach((control) => {\n          const current = (control as FormGroup).get('verification')?.value;\n          if (current && !values.includes(current)) {\n            (control as FormGroup).patchValue({ verification: defaultVerification });\n          }\n        });\n      }\n    }\n    if (changes['verificationDataTypeOptions']) {\n      this.updateVerificationDataTypeSelectConfig();\n      const values = this.getDataTypeValues();\n      const defaultDataType = this.getDefaultDataType();\n      if (this.verificationFormArray && values.length > 0) {\n        this.verificationFormArray.controls.forEach((control) => {\n          const current = (control as FormGroup).get('dataType')?.value;\n          if (current && !values.includes(current)) {\n            (control as FormGroup).patchValue({ dataType: defaultDataType });\n          }\n        });\n      }\n    }\n    if (changes['statusVerificationOptions']) {\n      this.updateStatusVerificationSelectConfig();\n      const values = this.getStatusVerificationValues();\n      const defaultVerification = this.getDefaultStatusVerification();\n      if (this.statusVerificationFormArray && values.length > 0) {\n        this.statusVerificationFormArray.controls.forEach((control) => {\n          const current = (control as FormGroup).get('verification')?.value;\n          if (current && !values.includes(current)) {\n            (control as FormGroup).patchValue({ verification: defaultVerification });\n          }\n        });\n      }\n    }\n  }\n\n  /**\n   * Smoothly scrolls the response preview section into view within the scrollable container.\n   * Called when a fresh response preview value is set from the parent (API builder).\n   */\n  private scrollPreviewIntoView(): void {\n    if (!this.responsePreviewRef || !this.responsePreviewRef.nativeElement) {\n      return;\n    }\n\n    try {\n      this.responsePreviewRef.nativeElement.scrollIntoView({\n        behavior: 'smooth',\n        block: 'start',\n      });\n    } catch {\n      // Fallback: manually adjust closest scrollable parent if needed\n      const el = this.responsePreviewRef.nativeElement;\n      const scrollParent = el.closest('.cqa-api-edit-step-container') as HTMLElement | null;\n      if (scrollParent) {\n        const offsetTop = el.offsetTop - 16; // small padding\n        scrollParent.scrollTo({ top: offsetTop < 0 ? 0 : offsetTop, behavior: 'smooth' });\n      }\n    }\n  }\n}\n","<div class=\"cqa-api-edit-step-container cqa-bg-[#ffffff] cqa-flex cqa-flex-col cqa-w-full cqa-h-full cqa-p-[16px] cqa-gap-[12px] cqa-overflow-y-auto cqa-overflow-x-hidden cqa-box-border\">\n\n  <h2 class=\"cqa-api-edit-step-title cqa-font-inter cqa-text-[12px] cqa-font-semibold cqa-leading-[100%] cqa-tracking-normal cqa-text-[#000000] cqa-m-0\">\n    {{ editMode ? 'Update API Test Step' : 'Create API Test Step' }}\n  </h2>\n\n  <div class=\"cqa-api-edit-step-indicator cqa-flex cqa-items-center cqa-gap-0 cqa-max-[767px]:cqa-flex-wrap cqa-max-[767px]:cqa-gap-2 cqa-max-[767px]:cqa-justify-start\"\n    [class.cqa-justify-start]=\"stepLabels.length === 1\"\n    [class.cqa-justify-between]=\"stepLabels.length !== 1\">\n    <ng-container *ngFor=\"let step of stepLabels; let i = index\">\n      <cqa-button type=\"button\" variant=\"text\"\n        customClass=\"cqa-api-edit-step-indicator-item cqa-api-edit-step-indicator-item--clickable cqa-flex cqa-items-center cqa-gap-[10px] cqa-cursor-pointer cqa-border-none cqa-p-0 cqa-font-inherit cqa-text-inherit cqa-text-left !cqa-bg-transparent\"\n        [attr.aria-label]=\"'Step ' + step.index + ': ' + step.label\" [attr.aria-pressed]=\"step.index === currentStep\"\n        (clicked)=\"setStep(step.index)\">\n        <span class=\"cqa-api-edit-step-indicator-circle cqa-w-8 cqa-h-8 cqa-rounded-full cqa-inline-flex cqa-items-center cqa-justify-center cqa-text-sm cqa-font-medium cqa-leading-none cqa-border-none cqa-shrink-0\"\n          [ngClass]=\"step.index === currentStep ? 'cqa-bg-[#4F46E5] cqa-text-white' : 'cqa-bg-[#E0E0E0] cqa-text-[#666666]'\">\n          {{ step.index }}\n        </span>\n        <span class=\"cqa-api-edit-step-indicator-label cqa-text-sm cqa-leading-[18px] cqa-font-normal cqa-max-[767px]:cqa-text-xs\"\n          [ngClass]=\"step.index === currentStep ? 'cqa-text-[#4F46E5]' : 'cqa-text-[#666666]'\">\n          {{ step.label }}\n        </span>\n        <div *ngIf=\"i < stepLabels.length - 1\" class=\"cqa-api-edit-step-indicator-line cqa-w-[96px] cqa-h-[2px] cqa-bg-[#E0E0E0] cqa-my-0 cqa-mx-[6px] cqa-shrink-0 cqa-self-center cqa-max-[767px]:cqa-w-[24px] cqa-max-[767px]:cqa-mx-1\" aria-hidden=\"true\"></div>\n      </cqa-button>\n    </ng-container>\n  </div>\n\n  <!-- Step content viewport: only the active step body is shown (*ngIf) -->\n  <div class=\"cqa-api-edit-step-viewport cqa-w-full\">\n    <!-- Step 1: Environment, request, body, response -->\n    <div *ngIf=\"currentStep === 1\" class=\"cqa-api-edit-step-panel cqa-flex cqa-flex-col cqa-gap-6 cqa-box-border cqa-w-full\">\n        <!-- Summary field: label on top, input below (above Environment) -->\n        <div class=\"cqa-api-edit-step-summary-row cqa-flex cqa-flex-col cqa-gap-1.5 cqa-items-stretch\">\n          <label class=\"cqa-api-edit-step-summary-label cqa-m-0 cqa-text-[14px] cqa-font-semibold cqa-leading-[100%] cqa-tracking-normal\">Summary</label>\n          <cqa-custom-input [(value)]=\"summary\"\n            [label]=\"''\" placeholder=\"Enter Request summary\" [fullWidth]=\"true\" size=\"md\"\n            ariaLabel=\"Summary\">\n          </cqa-custom-input>\n        </div>\n        <!-- Environment row: label on top, select below (aligned right on desktop) -->\n        <div class=\"cqa-api-edit-step-environment-row cqa-flex cqa-flex-col cqa-gap-1.5 cqa-items-end cqa-max-[767px]:cqa-items-stretch\">\n          <span class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-max-[767px]:cqa-items-stretch\">\n          <label class=\"cqa-api-edit-step-environment-label cqa-m-0 cqa-text-[14px] cqa-font-semibold cqa-leading-[100%] cqa-tracking-normal\">Environments</label>\n          <cqa-dynamic-select *ngIf=\"environmentForm\"\n            [form]=\"environmentForm\"\n            [config]=\"environmentSelectConfig\"\n            class=\"cqa-api-edit-step-environment-select cqa-shrink-0 cqa-w-auto cqa-min-w-[315px] cqa-max-w-[315px] cqa-max-[767px]:cqa-min-w-0 cqa-max-[767px]:cqa-max-w-full cqa-max-[767px]:cqa-w-full [&_.mat-form-field-wrapper]:cqa-pb-0\"\n            aria-label=\"Environment\"\n            (selectionChange)=\"onEnvironmentSelectionChange($event)\">\n          </cqa-dynamic-select>\n        </span>\n        </div>\n\n        <!-- Request row: method, URL, buttons -->\n        <div class=\"cqa-api-edit-step-request-row cqa-flex cqa-items-start cqa-gap-3 cqa-flex-wrap cqa-max-[767px]:cqa-flex-col cqa-max-[767px]:cqa-items-stretch cqa-max-[767px]:cqa-gap-2.5\">\n          <cqa-dynamic-select *ngIf=\"methodForm\" [form]=\"methodForm\" [config]=\"methodSelectConfig\"\n            class=\"cqa-api-edit-step-method-select cqa-shrink-0 cqa-w-auto cqa-min-w-[152px] cqa-max-w-[152px] cqa-max-[767px]:cqa-min-w-0 cqa-max-[767px]:cqa-max-w-full cqa-max-[767px]:cqa-w-full\" aria-label=\"HTTP method\"\n            (selectionChange)=\"onMethodSelectionChange($event)\">\n          </cqa-dynamic-select>\n          <div class=\"cqa-api-edit-step-url-wrap cqa-flex-1 cqa-min-w-[200px] cqa-max-[767px]:cqa-min-w-0 cqa-max-[767px]:cqa-w-full\">\n            <cqa-autocomplete\n              [value]=\"url\"\n              (valueChange)=\"url = $event\"\n              [options]=\"urlOptions\"\n              [placeholder]=\"urlPlaceholder\"\n              ariaLabel=\"Enter URL or select Parameter\"\n              [fullWidth]=\"true\"\n              (optionSelect)=\"onUrlOptionSelect($event)\">\n            </cqa-autocomplete>\n            <div *ngIf=\"urlError\" class=\"cqa-text-red-600 cqa-text-sm cqa-mt-1\">\n              {{ urlError }}\n            </div>\n          </div>\n          <div class=\"cqa-api-edit-step-import-curl-trigger cqa-contents cqa-max-[767px]:cqa-w-full cqa-max-[767px]:!cqa-flex\" (click)=\"openImportCurlPanel()\">\n            <cqa-button type=\"button\" variant=\"outlined\" btnSize=\"lg\" text=\"Import API cURL\"\n              customClass=\"cqa-api-edit-step-btn-outline !cqa-bg-white !cqa-border !cqa-border-solid !cqa-border-[#6B7280] cqa-text-[#414146] cqa-font-inter cqa-text-[14px] cqa-font-semibold cqa-leading-[100%] cqa-tracking-normal hover:!cqa-bg-[#F9FAFB] hover:!cqa-text-[#414146] cqa-max-[767px]:cqa-w-full cqa-mt-1\">\n            </cqa-button>\n          </div>\n          <cqa-button variant=\"filled\" btnSize=\"lg\" text=\"Send Request\" (clicked)=\"onSendRequest()\"\n            [disabled]=\"!isUrlValid\"\n            customClass=\"cqa-api-edit-step-btn-primary cqa-font-inter cqa-text-[14px] cqa-font-semibold cqa-leading-[100%] cqa-tracking-normal !cqa-bg-[#3F43EE] cqa-text-[#FBFCFF] !cqa-border-none cqa-py-2.5 cqa-px-6 cqa-gap-2 cqa-rounded-lg cqa-min-h-[37px] cqa-box-border hover:!cqa-bg-[#1B1FEB] cqa-max-[767px]:cqa-w-full cqa-mt-1\"\n            [ngClass]=\"{'!cqa-opacity-50 !cqa-cursor-not-allowed': !isUrlValid}\">\n          </cqa-button>\n        </div>\n\n\n\n        <!-- Body content: header section (default) OR import cURL section -->\n        <ng-container *ngIf=\"bodyView === 'import-curl'\">\n          <div class=\"cqa-api-edit-step-import-curl-panel cqa-flex cqa-flex-col cqa-bg-white cqa-rounded-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-shadow-[0_1px_3px_rgba(0,0,0,0.08)] cqa-overflow-hidden\">\n            <div class=\"cqa-api-edit-step-import-curl-header cqa-flex cqa-items-center cqa-justify-between cqa-py-3 cqa-px-5 cqa-border-b cqa-border-solid cqa-border-[#E2E8F0] cqa-bg-[#F9FAFB] cqa-rounded-t-lg cqa-max-[767px]:cqa-px-4\">\n              <h3 class=\"cqa-api-edit-step-import-curl-title cqa-m-0 cqa-text-xs cqa-font-bold cqa-leading-[18px] cqa-text-[#374151]\">Import API cURL</h3>\n            </div>\n            <div class=\"cqa-api-edit-step-import-curl-separator cqa-h-px cqa-bg-[#E2E8F0] cqa-my-0 cqa-mx-5\"></div>\n            <div class=\"cqa-api-edit-step-import-curl-note cqa-px-5 cqa-pt-3\">\n              <cqa-badge label=\"cURL is supported in Bash format only.\" icon=\"info\" variant=\"info\" size=\"small\" [fullWidth]=\"true\"></cqa-badge>\n            </div>\n            <div class=\"cqa-api-edit-step-import-curl-body\">\n              <cqa-custom-textarea [value]=\"importCurlControl.value\"\n                (valueChange)=\"importCurlControl.setValue($event)\"\n                placeholder=\"Paste your cURL command here (e.g., curl -X POST https://api.example.com/users)\"\n                [fullWidth]=\"true\" [rows]=\"8\" resize=\"vertical\" size=\"md\"\n                class=\"cqa-api-edit-step-import-curl-textarea\">\n              </cqa-custom-textarea>\n            </div>\n            <div class=\"cqa-api-edit-step-import-curl-footer\">\n              <cqa-button type=\"button\" variant=\"outlined\" btnSize=\"lg\" text=\"Cancel\"\n                customClass=\"cqa-api-edit-step-import-curl-btn-cancel\" (clicked)=\"onCancelImportCurl()\"></cqa-button>\n              <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"Import\"\n                customClass=\"cqa-api-edit-step-import-curl-btn-import\" (clicked)=\"onImportCurlConfirm()\"></cqa-button>\n            </div>\n          </div>\n        </ng-container>\n\n        <ng-container *ngIf=\"bodyView === 'headers'\">\n          <div class=\"cqa-api-edit-step-tabs-wrapper cqa-flex cqa-flex-col cqa-gap-3\">\n            <div class=\"cqa-api-edit-step-tabs\">\n              <cqa-button *ngFor=\"let tab of payloadTabs\" type=\"button\" variant=\"text\" [text]=\"tab.label\"\n                [customClass]=\"'cqa-api-edit-step-tab' + (activePayloadTab === tab.value ? ' cqa-api-edit-step-tab--active' : '') + (isMethodWithoutBody && (tab.value === 'body' || tab.value === 'params') ? ' cqa-api-edit-step-tab--disabled' : '')\"\n                [disabled]=\"isMethodWithoutBody && (tab.value === 'body' || tab.value === 'params')\"\n                (clicked)=\"setPayloadTab(tab.value)\">\n              </cqa-button>\n            </div>\n\n            <!-- Payload content (Authorization) -->\n            <div *ngIf=\"activePayloadTab === 'authorization'\" class=\"cqa-api-edit-step-payload\"\n              [attr.style]=\"'padding: 20px; min-height: 200px;'\">\n              <div [attr.style]=\"'display: flex; flex-direction: column; gap: 20px;'\">\n                <div [attr.style]=\"'display: flex; flex-direction: column; gap: 8px; width: fit-content;'\">\n                  <span [attr.style]=\"'font-size: 11px; font-weight: 600; letter-spacing: 0.02em; color: #6B7280; text-transform: uppercase; line-height: 1.25;'\">AUTH TYPE</span>\n                  <cqa-dynamic-select *ngIf=\"authTypeForm\" [form]=\"authTypeForm\" [config]=\"authTypeSelectConfig\"\n                    class=\"cqa-api-edit-step-auth-type-select\" aria-label=\"Auth type\"\n                    [attr.style]=\"'min-width: 160px;'\">\n                  </cqa-dynamic-select>\n                </div>\n                <!-- No Auth: centered message -->\n                <div *ngIf=\"selectedAuthType === 'no-auth'\"\n                  [attr.style]=\"'flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; min-width: 0; text-align: center; border: 1px solid #E5E7EB; border-radius: 8px; padding-top: 16px; padding-bottom: 16px;'\">\n                  <div aria-hidden=\"true\"\n                    [attr.style]=\"'width: 48px; height: 48px; border-radius: 10px; background: #F3F4F6; display: flex; align-items: center; justify-content: center; flex-shrink: 0;'\">\n                    <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block;\">\n                      <rect x=\"5\" y=\"11\" width=\"14\" height=\"2\" rx=\"1\" fill=\"#9CA3AF\"/>\n                    </svg>\n                  </div>\n                  <span [attr.style]=\"'font-size: 16px; font-weight: 600; color: #374151; line-height: 1.25;'\">No Auth</span>\n                  <div [attr.style]=\"'display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap;'\">\n                    <span [attr.style]=\"'font-size: 14px; font-weight: 400; color: #9CA3AF; line-height: 1.4;'\">This request does not use any authorization.</span>\n                    <span role=\"img\" aria-label=\"More information\" title=\"This request does not use any authorization.\"\n                      [attr.style]=\"'display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; color: #9CA3AF; flex-shrink: 0;'\">\n                      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"display: block;\">\n                        <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"#9CA3AF\" stroke-width=\"1.5\" fill=\"none\"/>\n                        <path d=\"M8 7v4M8 5v.5\" stroke=\"#9CA3AF\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n                      </svg>\n                    </span>\n                  </div>\n                </div>\n                <!-- Bearer Token: Token label + textarea -->\n                <div *ngIf=\"selectedAuthType === 'bearer'\"\n                  [attr.style]=\"'flex: 1; display: flex; flex-direction: column; gap: 10px; min-width: 0;'\">\n                  <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Token</span>\n                  <cqa-custom-textarea [(value)]=\"bearerToken\"\n                    placeholder=\"Enter bearer token\"\n                    [fullWidth]=\"true\" [rows]=\"6\" resize=\"vertical\" size=\"md\"\n                    class=\"cqa-api-edit-step-auth-token-textarea\" ariaLabel=\"Bearer token\">\n                  </cqa-custom-textarea>\n                </div>\n                <!-- OAuth 2.0: Grant Type, Access Token URL, Client ID, Client Secret, Scope, Client Authentication -->\n                <div *ngIf=\"selectedAuthType === 'oauth2' && oauth2Form\"\n                  class=\"cqa-api-edit-step-oauth2-grid\"\n                  [attr.style]=\"'display: grid; grid-template-columns: 1fr 1fr; gap: 16px 24px; width: 100%;'\">\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Grant Type</span>\n                    <cqa-dynamic-select *ngIf=\"oauth2Form\" [form]=\"oauth2Form\" [config]=\"oauth2GrantTypeSelectConfig\"\n                      class=\"cqa-api-edit-step-auth-oauth-select\" aria-label=\"OAuth grant type\"\n                      [attr.style]=\"'min-width: 0; width: 100%;'\">\n                    </cqa-dynamic-select>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">OAuth grant type</span>\n                  </div>\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Access Token URL</span>\n                    <cqa-custom-input [value]=\"oauth2Form.get('accessTokenUrl')?.value\"\n                      (valueChange)=\"oauth2Form.get('accessTokenUrl')?.setValue($event)\"\n                      [label]=\"''\" placeholder=\"Enter OAuth token endpoint\" [fullWidth]=\"true\" size=\"md\"\n                      ariaLabel=\"Access Token URL\">\n                    </cqa-custom-input>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">OAuth token endpoint</span>\n                  </div>\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Client ID</span>\n                    <cqa-custom-input [value]=\"oauth2Form.get('clientId')?.value\"\n                      (valueChange)=\"oauth2Form.get('clientId')?.setValue($event)\"\n                      [label]=\"''\" placeholder=\"Enter OAuth client identifier\" [fullWidth]=\"true\" size=\"md\"\n                      ariaLabel=\"Client ID\">\n                    </cqa-custom-input>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">OAuth client identifier</span>\n                  </div>\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Client Secret</span>\n                    <cqa-custom-input [value]=\"oauth2Form.get('clientSecret')?.value\"\n                      (valueChange)=\"oauth2Form.get('clientSecret')?.setValue($event)\"\n                      type=\"password\" [label]=\"''\" placeholder=\"Enter OAuth client secret\" [fullWidth]=\"true\" size=\"md\"\n                      ariaLabel=\"Client Secret\">\n                    </cqa-custom-input>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">OAuth client secret</span>\n                  </div>\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Scope</span>\n                    <cqa-custom-input [value]=\"oauth2Form.get('scope')?.value\"\n                      (valueChange)=\"oauth2Form.get('scope')?.setValue($event)\"\n                      [label]=\"''\" placeholder=\"Enter space-separated scopes\" [fullWidth]=\"true\" size=\"md\"\n                      ariaLabel=\"Scope\">\n                    </cqa-custom-input>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">Space-separated scopes</span>\n                  </div>\n                  <div [attr.style]=\"'display: flex; flex-direction: column; gap: 6px; min-width: 0;'\">\n                    <span [attr.style]=\"'font-size: 12px; font-weight: 600; color: #374151; line-height: 1.25;'\">Client Authentication</span>\n                    <cqa-dynamic-select *ngIf=\"oauth2Form\" [form]=\"oauth2Form\" [config]=\"oauth2ClientAuthSelectConfig\"\n                      class=\"cqa-api-edit-step-auth-oauth-select\" aria-label=\"Client authentication method\"\n                      [attr.style]=\"'min-width: 0; width: 100%;'\">\n                    </cqa-dynamic-select>\n                    <span [attr.style]=\"'font-size: 11px; font-style: italic; color: #6B7280; line-height: 1.3;'\">Client authentication method</span>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <!-- Payload content (Headers) -->\n            <div *ngIf=\"activePayloadTab === 'headers'\" class=\"cqa-api-edit-step-payload\">\n              <div class=\"cqa-api-edit-step-headers-grid\">\n                <span class=\"cqa-api-edit-step-headers-label\">Header Name</span>\n                <span class=\"cqa-api-edit-step-headers-label\">Header Value</span>\n                <span class=\"cqa-api-edit-step-headers-label cqa-api-edit-step-headers-label--empty\"\n                  aria-hidden=\"true\"></span>\n              </div>\n              <div *ngFor=\"let row of headerRows; let i = index; trackBy: trackByHeader\" [formGroup]=\"row\"\n                class=\"cqa-api-edit-step-header-row\">\n                <cqa-dynamic-select [form]=\"row\" [config]=\"headerNameSelectConfig\"\n                  (addCustomValue)=\"onHeaderNameAddCustomValue($event, row)\"\n                  class=\"cqa-api-edit-step-header-type-select cqa-w-full\">\n                </cqa-dynamic-select>\n                <cqa-custom-input [value]=\"row.get('value')?.value ?? ''\"\n                  (valueChange)=\"row.get('value')?.setValue($event)\" placeholder=\"Value\" [fullWidth]=\"true\" size=\"sm\"\n                  class=\"cqa-api-edit-step-header-value-input\" ariaLabel=\"Header value\">\n                </cqa-custom-input>\n                <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-header-delete'\"\n                  [tooltip]=\"'Remove header'\" (clicked)=\"removeHeader(i)\">\n                  <svg class=\"cqa-api-edit-step-header-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                    fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path\n                      d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                      fill=\"#F9BFBF\" />\n                  </svg>\n                </cqa-button>\n              </div>\n              <div class=\"cqa-api-edit-step-add-header-wrap\">\n                <cqa-button type=\"button\" variant=\"text\" text=\"+ Add Header\"\n                  [customClass]=\"'cqa-api-edit-step-add-header-link'\" (clicked)=\"addHeader()\">\n                </cqa-button>\n              </div>\n            </div>\n\n            <!-- Payload content (Params): Key–Value table with add/delete rows -->\n            <div *ngIf=\"activePayloadTab === 'params'\" class=\"cqa-api-edit-step-payload\">\n              <div class=\"cqa-api-edit-step-key-value-grid cqa-api-edit-step-key-value-header\">\n                <span class=\"cqa-api-edit-step-key-value-label\">Key</span>\n                <span class=\"cqa-api-edit-step-key-value-label\">Value</span>\n                <span class=\"cqa-api-edit-step-key-value-label cqa-api-edit-step-key-value-label--empty\"\n                  aria-hidden=\"true\"></span>\n              </div>\n              <div *ngFor=\"let row of paramsRows; let i = index; trackBy: trackByParams\" [formGroup]=\"row\"\n                class=\"cqa-api-edit-step-key-value-row\">\n                <cqa-custom-input [value]=\"row.get('key')?.value ?? ''\"\n                  (valueChange)=\"row.get('key')?.setValue($event)\" placeholder=\"Key\" [fullWidth]=\"true\" size=\"sm\"\n                  class=\"cqa-api-edit-step-key-value-input\" ariaLabel=\"Key\">\n                </cqa-custom-input>\n                <cqa-custom-input [value]=\"row.get('value')?.value ?? ''\"\n                  (valueChange)=\"row.get('value')?.setValue($event)\" placeholder=\"Value\" [fullWidth]=\"true\" size=\"sm\"\n                  class=\"cqa-api-edit-step-key-value-input\" ariaLabel=\"Value\">\n                </cqa-custom-input>\n                <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-key-value-delete'\"\n                  [tooltip]=\"'Remove row'\" (clicked)=\"removeParamsRow(i)\">\n                  <svg class=\"cqa-api-edit-step-key-value-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                    fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path\n                      d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                      fill=\"#F9BFBF\" />\n                  </svg>\n                </cqa-button>\n              </div>\n              <div class=\"cqa-api-edit-step-key-value-add-wrap\">\n                <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"+ Add Row\"\n                  customClass=\"cqa-api-edit-step-key-value-add-btn\" (clicked)=\"addParamsRow()\">\n                </cqa-button>\n              </div>\n            </div>\n\n            <!-- Payload content (Body only): type, format, text area, Back/Next -->\n            <div *ngIf=\"activePayloadTab === 'body'\"\n              class=\"cqa-api-edit-step-payload cqa-api-edit-step-payload-editor\">\n              <div class=\"cqa-api-edit-step-payload-type-row\">\n                <span class=\"cqa-api-edit-step-payload-type-label\">Type</span>\n                <div class=\"cqa-api-edit-step-payload-type-radios\">\n                  <cqa-segment-control [value]=\"payloadType\" [segments]=\"payloadTypeSegments\"\n                    (valueChange)=\"onPayloadTypeChange($event)\"\n                    class=\"cqa-api-edit-step-payload-type-segment\">\n                  </cqa-segment-control>\n                </div>\n                <div *ngIf=\"payloadType === 'raw'\" class=\"cqa-api-edit-step-payload-format-wrap\">\n                  <span class=\"cqa-api-edit-step-payload-format-label\">Format:</span>\n                  <cqa-dynamic-select *ngIf=\"payloadFormatForm\" [form]=\"payloadFormatForm\"\n                    [config]=\"payloadFormatSelectConfig\" class=\"cqa-api-edit-step-payload-format-select\"\n                    aria-label=\"Format\">\n                  </cqa-dynamic-select>\n                </div>\n              </div>\n              <!-- Raw: text area with line numbers (Postman-style payload body) -->\n              <div *ngIf=\"payloadType === 'raw'\" class=\"cqa-api-edit-step-payload-body\" #payloadEditorWithLinesRef>\n                <div class=\"cqa-api-edit-step-payload-editor-with-lines\">\n                  <div class=\"cqa-api-edit-step-payload-line-numbers\" aria-hidden=\"true\">\n                    <span *ngFor=\"let n of payloadLineNumbers\" class=\"cqa-api-edit-step-payload-line-num\">\n                      <span *ngIf=\"payloadJsonError && payloadJsonError.line === n\"\n                        class=\"cqa-api-edit-step-payload-line-error-icon\" [title]=\"payloadJsonErrorTooltip\"\n                        aria-label=\"Parse error on this line\">\n                        <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n                          <circle cx=\"7\" cy=\"7\" r=\"6\" fill=\"#EF4444\"/>\n                          <path d=\"M4 4l6 6M10 4l-6 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n                        </svg>\n                      </span>\n                      <span class=\"cqa-api-edit-step-payload-line-num-text\">{{ n }}</span>\n                    </span>\n                  </div>\n                  <div class=\"cqa-api-edit-step-payload-textarea-cell\">\n                    <div class=\"cqa-api-edit-step-payload-textarea cqa-w-full cqa-flex cqa-flex-col cqa-min-h-0\"\n                      [ngClass]=\"{'cqa-api-edit-step-payload-textarea--error': payloadJsonError}\">\n                      <textarea #payloadTextareaRef\n                        class=\"cqa-api-edit-step-payload-textarea-input cqa-w-full cqa-outline-none cqa-box-border\"\n                        [ngClass]=\"{'cqa-api-edit-step-payload-textarea-input--error': payloadJsonError}\"\n                        [value]=\"payloadText\"\n                        placeholder=\"\"\n                        [attr.aria-label]=\"'Payload'\"\n                        [attr.aria-invalid]=\"!!payloadJsonError\"\n                        (input)=\"onPayloadInput($event)\"\n                        (keydown)=\"onPayloadKeydown($event)\">\n                      </textarea>\n                    </div>\n                  </div>\n                </div>\n                <p *ngIf=\"payloadJsonError\" class=\"cqa-api-edit-step-payload-json-error-msg\">\n                  Invalid JSON format. Please check your syntax.\n                </p>\n              </div>\n\n              <!-- x-www-form-urlencoded: Key–Value rows, add/remove dynamically -->\n              <div *ngIf=\"payloadType === 'x-www-form-urlencoded'\" class=\"cqa-api-edit-step-key-value\">\n                <div class=\"cqa-api-edit-step-key-value-grid cqa-api-edit-step-key-value-header\">\n                  <span class=\"cqa-api-edit-step-key-value-label\">Key</span>\n                  <span class=\"cqa-api-edit-step-key-value-label\">Value</span>\n                  <span class=\"cqa-api-edit-step-key-value-label cqa-api-edit-step-key-value-label--empty\"\n                    aria-hidden=\"true\"></span>\n                </div>\n                <div *ngFor=\"let row of keyValueRows; let i = index; trackBy: trackByKeyValue\" [formGroup]=\"row\"\n                  class=\"cqa-api-edit-step-key-value-row\">\n                  <cqa-custom-input [value]=\"row.get('key')?.value ?? ''\"\n                    (valueChange)=\"row.get('key')?.setValue($event)\" placeholder=\"Key\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-key-value-input\" ariaLabel=\"Key\">\n                  </cqa-custom-input>\n                  <cqa-custom-input [value]=\"row.get('value')?.value ?? ''\"\n                    (valueChange)=\"row.get('value')?.setValue($event)\" placeholder=\"Value\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-key-value-input\" ariaLabel=\"Value\">\n                  </cqa-custom-input>\n                  <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-key-value-delete'\"\n                    [tooltip]=\"'Remove row'\" (clicked)=\"removeKeyValueRow(i)\">\n                    <svg class=\"cqa-api-edit-step-key-value-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                      fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                      <path\n                        d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                        fill=\"#F9BFBF\" />\n                    </svg>\n                  </cqa-button>\n                </div>\n                <div class=\"cqa-api-edit-step-key-value-add-wrap\">\n                  <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"+ Add Row\"\n                    customClass=\"cqa-api-edit-step-key-value-add-btn\" (clicked)=\"addKeyValueRow()\">\n                  </cqa-button>\n                </div>\n              </div>\n\n              <!-- Form Data: Key–Type–Value rows; Type is a dropdown (Text/File), add/remove dynamically -->\n              <div *ngIf=\"payloadType === 'form-data'\" class=\"cqa-api-edit-step-key-type-value\">\n                <div class=\"cqa-api-edit-step-key-type-value-header\">\n                  <span class=\"cqa-api-edit-step-key-type-value-label\">Key</span>\n                  <span class=\"cqa-api-edit-step-key-type-value-label\">Type</span>\n                  <span class=\"cqa-api-edit-step-key-type-value-label\">Value</span>\n                  <span class=\"cqa-api-edit-step-key-type-value-label cqa-api-edit-step-key-type-value-label--empty\"\n                    aria-hidden=\"true\"></span>\n                </div>\n                <div *ngFor=\"let row of keyTypeValueRows; let i = index; trackBy: trackByKeyTypeValue\" [formGroup]=\"row\"\n                  class=\"cqa-api-edit-step-key-type-value-row\">\n                  <cqa-custom-input [value]=\"row.get('key')?.value ?? ''\"\n                    (valueChange)=\"row.get('key')?.setValue($event)\" placeholder=\"Key\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-key-type-value-input\" ariaLabel=\"Key\">\n                  </cqa-custom-input>\n                  <cqa-dynamic-select [form]=\"row\" [config]=\"keyTypeValueTypeSelectConfig\"\n                    class=\"cqa-api-edit-step-key-type-value-type-select cqa-w-full\">\n                  </cqa-dynamic-select>\n                  <cqa-custom-input [value]=\"row.get('value')?.value ?? ''\"\n                    (valueChange)=\"row.get('value')?.setValue($event)\" placeholder=\"Value\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-key-type-value-input\" ariaLabel=\"Value\">\n                  </cqa-custom-input>\n                  <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-key-type-value-delete'\"\n                    [tooltip]=\"'Remove row'\" (clicked)=\"removeKeyTypeValueRow(i)\">\n                    <svg class=\"cqa-api-edit-step-key-type-value-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                      fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                      <path\n                        d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                        fill=\"#F9BFBF\" />\n                    </svg>\n                  </cqa-button>\n                </div>\n                <div class=\"cqa-api-edit-step-key-type-value-add-wrap\">\n                  <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"+ Add Row\"\n                    customClass=\"cqa-api-edit-step-key-type-value-add-btn\" (clicked)=\"addKeyTypeValueRow()\">\n                  </cqa-button>\n                </div>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n\n        <!-- Advanced settings (step-level) -->\n        <div class=\"cqa-mt-4\">\n          <button\n            type=\"button\"\n            class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n            (click)=\"advancedExpanded = !advancedExpanded\">\n            <span class=\"cqa-text-[10px]\">Advanced</span>\n            <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [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              (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n            </cqa-advanced-variables-form>\n          </div>\n        </div>\n\n    </div>\n    <!-- Step 2: Variable Name: input, validation, Back / Next -->\n    <div *ngIf=\"currentStep === 2\" class=\"cqa-api-edit-step-panel cqa-flex cqa-flex-col cqa-gap-6 cqa-box-border cqa-w-full\">\n        <div class=\"cqa-api-edit-step-variable-section\">\n          <div class=\"cqa-api-edit-step-variable-input-wrap\">\n            <cqa-custom-input [(value)]=\"variableName\" [label]=\"''\" placeholder=\"Variable Name\" [fullWidth]=\"true\"\n              size=\"md\" (valueChange)=\"onVariableNameChange()\" aria-label=\"Variable Name\">\n            </cqa-custom-input>\n          </div>\n          <p *ngIf=\"variableNameError\" class=\"cqa-api-edit-step-variable-error\" role=\"alert\">{{ variableNameError }}</p>\n        </div>\n    </div>\n    <!-- Step 3: Response Body / Status tabs -->\n    <div *ngIf=\"currentStep === 3\" class=\"cqa-api-edit-step-panel cqa-flex cqa-flex-col cqa-gap-6 cqa-box-border cqa-w-full\">\n        <div class=\"cqa-api-edit-step-tabs-wrapper cqa-flex cqa-flex-col cqa-gap-3\">\n          <div class=\"cqa-api-edit-step-tabs\">\n            <cqa-button *ngFor=\"let tab of responseVerificationTabs\" type=\"button\" variant=\"text\" [text]=\"tab.label\"\n              [customClass]=\"'cqa-api-edit-step-tab' + (activeResponseVerificationTab === tab.value ? ' cqa-api-edit-step-tab--active' : '')\"\n              (clicked)=\"setResponseVerificationTab(tab.value)\">\n            </cqa-button>\n          </div>\n\n          <!-- Response Body tab content: verification grid -->\n          <div *ngIf=\"activeResponseVerificationTab === 'response-body'\" class=\"cqa-api-edit-step-step3-content\">\n            <div class=\"cqa-api-edit-step-verification-header-row cqa-flex cqa-flex-row cqa-justify-end cqa-items-center cqa-pt-0 cqa-pr-0 cqa-pb-2 cqa-pl-0\">\n              <span></span>\n              <cqa-button type=\"button\" variant=\"text\" text=\"Add Verification\"\n                customClass=\"cqa-api-edit-step-verification-add-link\" (clicked)=\"addVerificationRow()\">\n              </cqa-button>\n            </div>\n            <div class=\"cqa-api-edit-step-verification\">\n              <div class=\"cqa-api-edit-step-verification-grid cqa-api-edit-step-verification-grid-header\">\n                <span class=\"cqa-api-edit-step-verification-label\">S.no</span>\n                <span class=\"cqa-api-edit-step-verification-label\">JSON Path</span>\n                <span class=\"cqa-api-edit-step-verification-label\">Verification</span>\n                <span class=\"cqa-api-edit-step-verification-label\">Data Type</span>\n                <span class=\"cqa-api-edit-step-verification-label\">Expected Value</span>\n                <span class=\"cqa-api-edit-step-verification-label cqa-api-edit-step-verification-label--empty\"\n                  aria-hidden=\"true\"></span>\n              </div>\n              <div *ngFor=\"let row of verificationRows; let i = index; trackBy: trackByVerification\" [formGroup]=\"row\"\n                class=\"cqa-api-edit-step-verification-row\">\n                <span class=\"cqa-api-edit-step-verification-sno\">{{ i + 1 }}</span>\n                <cqa-custom-input [value]=\"row.get('jsonPath')?.value ?? ''\"\n                  (valueChange)=\"row.get('jsonPath')?.setValue($event)\" placeholder=\"Json Path\" [fullWidth]=\"true\"\n                  size=\"sm\" class=\"cqa-api-edit-step-verification-input\" ariaLabel=\"JSON Path\">\n                </cqa-custom-input>\n                <cqa-dynamic-select [form]=\"row\" [config]=\"verificationSelectConfig\"\n                  class=\"cqa-api-edit-step-verification-select cqa-w-full\">\n                </cqa-dynamic-select>\n                <cqa-dynamic-select [form]=\"row\" [config]=\"verificationDataTypeSelectConfig\"\n                  class=\"cqa-api-edit-step-verification-select cqa-w-full\"\n                  (selectionChange)=\"onVerificationDataTypeChange(row, $event)\">\n                </cqa-dynamic-select>\n                <!-- Expected Value: text for String/Array/Object, number for Number, dropdown for Boolean -->\n                <ng-container [ngSwitch]=\"row.get('dataType')?.value\">\n                  <cqa-dynamic-select *ngSwitchCase=\"'boolean'\" [form]=\"row\"\n                    [config]=\"verificationExpectedValueBooleanSelectConfig\"\n                    class=\"cqa-api-edit-step-verification-select cqa-api-edit-step-verification-expected-select cqa-w-full\">\n                  </cqa-dynamic-select>\n                  <cqa-custom-input *ngSwitchCase=\"'number'\" [value]=\"row.get('expectedValue')?.value ?? ''\"\n                    (valueChange)=\"row.get('expectedValue')?.setValue($event)\" placeholder=\"Expected Value (number)\"\n                    type=\"number\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-verification-input cqa-api-edit-step-verification-expected-number\"\n                    ariaLabel=\"Expected Value\">\n                  </cqa-custom-input>\n                  <cqa-custom-input *ngSwitchDefault [value]=\"row.get('expectedValue')?.value ?? ''\"\n                    (valueChange)=\"row.get('expectedValue')?.setValue($event)\"\n                    placeholder=\"Expected Value in String\" [fullWidth]=\"true\" size=\"sm\"\n                    class=\"cqa-api-edit-step-verification-input\" ariaLabel=\"Expected Value\">\n                  </cqa-custom-input>\n                </ng-container>\n                <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-verification-delete'\"\n                  [tooltip]=\"'Remove row'\" (clicked)=\"removeVerificationRow(i)\">\n                  <svg class=\"cqa-api-edit-step-verification-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                    fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path\n                      d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                      fill=\"#F9BFBF\" />\n                  </svg>\n                </cqa-button>\n              </div>\n            </div>\n          </div>\n\n          <!-- Status tab content: S.no, Verification dropdown, Expected Value, add/remove rows -->\n          <div *ngIf=\"activeResponseVerificationTab === 'status'\" class=\"cqa-api-edit-step-step3-content\">\n            <div class=\"cqa-api-edit-step-verification-header-row cqa-flex cqa-flex-row cqa-justify-end cqa-items-center cqa-pt-0 cqa-pr-0 cqa-pb-2 cqa-pl-0\">\n              <span></span>\n              <cqa-button type=\"button\" variant=\"text\" text=\"Add Verification\"\n                customClass=\"cqa-api-edit-step-verification-add-link\" (clicked)=\"addStatusVerificationRow()\">\n              </cqa-button>\n            </div>\n            <div class=\"cqa-api-edit-step-status-verification\">\n              <div class=\"cqa-api-edit-step-status-verification-header\">\n                <span class=\"cqa-api-edit-step-verification-label\">S.no</span>\n                <span class=\"cqa-api-edit-step-verification-label\">Verification</span>\n                <span class=\"cqa-api-edit-step-verification-label\">Expected Value</span>\n                <span class=\"cqa-api-edit-step-verification-label cqa-api-edit-step-verification-label--empty\"\n                  aria-hidden=\"true\"></span>\n              </div>\n              <div *ngFor=\"let row of statusVerificationRows; let i = index; trackBy: trackByStatusVerification\"\n                [formGroup]=\"row\" class=\"cqa-api-edit-step-status-verification-row\">\n                <span class=\"cqa-api-edit-step-verification-sno\">{{ i + 1 }}</span>\n                <cqa-dynamic-select [form]=\"row\" [config]=\"statusVerificationSelectConfig\"\n                  class=\"cqa-api-edit-step-status-verification-select cqa-w-full\">\n                </cqa-dynamic-select>\n                <cqa-custom-input [value]=\"row.get('expectedValue')?.value ?? ''\"\n                  (valueChange)=\"row.get('expectedValue')?.setValue($event)\" placeholder=\"Expected Value\"\n                  type=\"number\" [fullWidth]=\"true\" size=\"sm\" class=\"cqa-api-edit-step-verification-input\"\n                  ariaLabel=\"Expected Value\">\n                </cqa-custom-input>\n                <cqa-button type=\"button\" variant=\"text\" [customClass]=\"'cqa-api-edit-step-verification-delete'\"\n                  [tooltip]=\"'Remove row'\" (clicked)=\"removeStatusVerificationRow(i)\">\n                  <svg class=\"cqa-api-edit-step-verification-delete-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                    fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path\n                      d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                      fill=\"#F9BFBF\" />\n                  </svg>\n                </cqa-button>\n              </div>\n            </div>\n          </div>\n        </div>\n    </div>\n  </div>\n\n  <!-- Response Preview -->\n  <div #responsePreviewRef class=\"cqa-api-edit-step-response\">\n    <h3 class=\"cqa-api-edit-step-response-title cqa-text-[14px] cqa-font-bold cqa-leading-[20px] cqa-text-[#111827] cqa-m-0 cqa-mb-[12px] cqa-shrink-0\">Response Preview</h3>\n    <pre class=\"cqa-api-edit-step-response-content\">{{ responsePreview }}</pre>\n  </div>\n\n  <!-- Step actions: one row, full width. Step 1: Cancel + Next; Step 2: Back + Next; Step 3: Back + Create -->\n  <div class=\"cqa-api-edit-step-actions\">\n    <ng-container [ngSwitch]=\"currentStep\">\n      <ng-container *ngSwitchCase=\"1\">\n        <cqa-button type=\"button\" variant=\"outlined\" btnSize=\"lg\" text=\"Cancel\"\n          customClass=\"cqa-api-edit-step-actions-btn-cancel\" (clicked)=\"onCancel()\">\n        </cqa-button>\n        <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"Next\"\n          customClass=\"cqa-api-edit-step-actions-btn-next\" (clicked)=\"onNext()\">\n        </cqa-button>\n      </ng-container>\n      <ng-container *ngSwitchCase=\"2\">\n        <cqa-button type=\"button\" variant=\"outlined\" btnSize=\"lg\" text=\"Back\"\n          customClass=\"cqa-api-edit-step-actions-btn-back\" (clicked)=\"onBack()\">\n        </cqa-button>\n        <cqa-button type=\"button\" variant=\"filled\" btnSize=\"lg\" text=\"Next\"\n          customClass=\"cqa-api-edit-step-actions-btn-next\" (clicked)=\"onNext()\">\n        </cqa-button>\n      </ng-container>\n      <ng-container *ngSwitchCase=\"3\">\n        <cqa-button type=\"button\" variant=\"outlined\" btnSize=\"lg\" text=\"Back\"\n          customClass=\"cqa-api-edit-step-actions-btn-back\" (clicked)=\"onBack()\">\n        </cqa-button>\n        <cqa-button *ngIf=\"!isCreatingStep\" type=\"button\" variant=\"filled\" btnSize=\"lg\" [text]=\"editMode ? 'Update' : 'Create'\"\n          customClass=\"cqa-api-edit-step-actions-btn-create\" (clicked)=\"onCreate()\">\n        </cqa-button>\n        <!-- Match cqa-button flex: actions row styles > cqa-button { flex: 1 1 0 } — loader div must grow same width as Create -->\n        <div *ngIf=\"isCreatingStep\" class=\"cqa-api-edit-step-actions-loader cqa-w-full cqa-min-h-[38px] cqa-rounded-[8px] cqa-flex cqa-items-center cqa-justify-center\">\n          <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n            [inlineStyles]=\"'min-height: 38px; height: 38px; width: 100%; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n            variant=\"info\" size=\"medium\"></cqa-badge>\n        </div>\n      </ng-container>\n    </ng-container>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnDestroy } from '@angular/core';\nimport { Observable, BehaviorSubject, Subscription } from 'rxjs';\n\nexport interface ConversationData {\n  id?: number | string;\n  replyBack_id?: string;\n  stepStatus?: string;\n}\n\nexport type ConversationMode = 'step-regular' | 'step-debug' | 'test-case-group';\n\n@Component({\n  selector: 'cqa-live-conversation',\n  templateUrl: './live-conversation.component.html',\n  styleUrls: []\n})\nexport class LiveConversationComponent implements OnInit, OnDestroy {\n  @Input() conversation: ConversationData | null = null;\n  @Input() executionStatus: string = '';\n  @Input() stepFrom: string = '';\n  @Input() mode: ConversationMode = 'step-regular';\n  @Input() stepId?: number | string;\n  @Input() message: string = '';\n  @Input() remainingTime$?: Observable<number>;\n  @Input() circleCircumference: number = 2 * Math.PI * 52;\n  @Input() showUserInputField: boolean = false;\n  @Input() showUserInputFieldinDebug: boolean = false;\n\n  @Output() messageChange = new EventEmitter<string>();\n  @Output() sendMessage = new EventEmitter<{ type?: string; data?: any }>();\n  @Output() stopAgent = new EventEmitter<void>();\n  @Output() stepAction = new EventEmitter<{ action: string; stepId: number | string }>();\n  @Output() updateStepData = new EventEmitter<{ action: string; type: 'locator' | 'metadata'; stepId: number | string }>();\n  @Output() redirectToCE = new EventEmitter<void>();\n  @Output() showUserInputFieldChange = new EventEmitter<boolean>();\n  @Output() showUserInputFieldinDebugChange = new EventEmitter<boolean>();\n\n  internalRemainingTime$ = new BehaviorSubject<number>(0);\n  private timerSubscription: Subscription | null = null;\n\n  ngOnInit(): void {\n    if (!this.remainingTime$) {\n      this.remainingTime$ = this.internalRemainingTime$;\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.stopTimer();\n  }\n\n  onMessageChange(value: string): void {\n    this.message = value;\n    this.messageChange.emit(value);\n  }\n\n  onSendMessage(): void {\n    // For test case group mode with timeout\n    if (this.isTestCaseGroupMode && this.isTimeout && this.message) {\n      const timeValue = parseInt(this.message, 10);\n      if (!isNaN(timeValue)) {\n        this.sendMessage.emit({\n          type: 'test_case_time_add',\n          data: { time: timeValue }\n        });\n        return;\n      }\n    }\n    // Default\n    this.sendMessage.emit();\n  }\n\n  onStopAgent(): void {\n    this.stopAgent.emit();\n  }\n\n  onStepAction(action: string): void {\n    if (this.stepId) {\n      this.stepAction.emit({ action, stepId: this.stepId });\n    }\n  }\n\n  onUpdateStepData(action: string, type: 'locator' | 'metadata'): void {\n    if (this.stepId) {\n      this.updateStepData.emit({ action, type, stepId: this.stepId });\n    }\n  }\n\n  onRedirectToCE(): void {\n    this.redirectToCE.emit();\n  }\n\n  onShowUserInputFieldChange(value: boolean): void {\n    this.showUserInputFieldChange.emit(value);\n  }\n\n  onShowUserInputFieldinDebugChange(value: boolean): void {\n    this.showUserInputFieldinDebugChange.emit(value);\n  }\n\n  formatTime(seconds: number): string {\n    const minutes = Math.floor(seconds / 60);\n    const remainingSeconds = seconds % 60;\n    return `${minutes}:${remainingSeconds.toString().padStart(2, \"0\")}`;\n  }\n\n  getDashOffset(remainingTime: number): number {\n    const progress = 1 - remainingTime / (2 * 60);\n    return this.circleCircumference * progress;\n  }\n\n  private stopTimer(): void {\n    if (this.timerSubscription) {\n      this.timerSubscription.unsubscribe();\n      this.timerSubscription = null;\n    }\n  }\n\n  // Helper getters for template\n  get isStepRegularMode(): boolean {\n    return this.mode === 'step-regular';\n  }\n\n  get isStepDebugMode(): boolean {\n    return this.mode === 'step-debug';\n  }\n\n  get isTestCaseGroupMode(): boolean {\n    return this.mode === 'test-case-group';\n  }\n\n  get shouldShowStepRegular(): boolean {\n    return !!(this.isStepRegularMode &&\n      this.conversation &&\n      this.conversation.id === this.stepId &&\n      this.conversation.stepStatus === 'CONVERSATION' &&\n      this.stepFrom !== 'DEBUGGE_WITH_AI');\n  }\n\n  get shouldShowStepDebug(): boolean {\n    return !!(this.isStepDebugMode &&\n      this.conversation &&\n      this.conversation.id === this.stepId &&\n      this.conversation.stepStatus === 'CONVERSATION' &&\n      this.stepFrom === 'DEBUGGE_WITH_AI');\n  }\n\n  get shouldShowTestCaseGroup(): boolean {\n    return !!(this.isTestCaseGroupMode &&\n      this.conversation &&\n      this.executionStatus !== 'COMPLETED');\n  }\n\n  get isLocatorNotDetect(): boolean {\n    return this.conversation?.stepStatus === 'LOCATOR_NOT_DETECT';\n  }\n\n  get isTimeout(): boolean {\n    return this.conversation?.stepStatus === 'TIMEOUT';\n  }\n\n  get inputPlaceholder(): string {\n    return this.isTimeout ? 'Enter Timeout in sec' : 'Enter Input';\n  }\n\n  get inputType(): string {\n    return this.isTimeout ? 'number' : 'text';\n  }\n\n  get isInputDisabled(): boolean {\n    return !this.conversation || !this.conversation?.replyBack_id;\n  }\n\n  get isResumeDisabled(): boolean {\n    return !this.isLocatorNotDetect && (!this.message || this.message.trim() === '');\n  }\n}\n","<div class=\"cqa-ui-root\">\n  <!-- Step Regular Mode Conversation Section -->\n  <div\n    *ngIf=\"shouldShowStepRegular\"\n    class=\"conversation-section cqa-mt-2 cqa-p-3\"\n    style=\"background-color: #FEF3C7; border-radius: 8px; border: 1px solid #FCD34D;\"\n  >\n    <div class=\"user-action-prompt\" *ngIf=\"!showUserInputField\">\n      <div class=\"prompt-header cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8 11V8\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8 5H8.01\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n        <span style=\"font-weight: 600; color: #92400E;\">User input required to proceed</span>\n      </div>\n      <div class=\"prompt-actions cqa-flex cqa-gap-2\">\n        <button\n          class=\"action-btn primary\"\n          (click)=\"onShowUserInputFieldChange(true)\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: none; background-color: #3F43EE; color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Enter more details\n        </button>\n        <button\n          class=\"action-btn secondary\"\n          (click)=\"onStopAgent()\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Stop\n        </button>\n      </div>\n    </div>\n\n    <div class=\"user-input-section\" *ngIf=\"showUserInputField\">\n      <div class=\"input-container cqa-flex cqa-gap-2 cqa-mb-2\">\n        <textarea\n          class=\"input-field\"\n          placeholder=\"Type your response...\"\n          [ngModel]=\"message\"\n          (ngModelChange)=\"onMessageChange($event)\"\n          (keyup.enter)=\"onSendMessage()\"\n          rows=\"2\"\n          autofocus\n          style=\"flex: 1; padding: 8px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: #FFFFFF; color: #0A0A0A; resize: none;\"\n        ></textarea>\n        <button\n          class=\"send-button\"\n          [disabled]=\"!message\"\n          (click)=\"onSendMessage()\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: none; background-color: #3F43EE; color: white; cursor: pointer;\"\n        >\n          Send\n        </button>\n      </div>\n      <button\n        class=\"cancel-button\"\n        (click)=\"onShowUserInputFieldChange(false)\"\n        style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: white; cursor: pointer; font-size: 14px;\"\n      >\n        Back\n      </button>\n    </div>\n  </div>\n\n  <!-- Step Debug Mode Conversation Section -->\n  <div\n    *ngIf=\"shouldShowStepDebug\"\n    class=\"conversation-section cqa-mt-2 cqa-p-3\"\n    style=\"background-color: #FEF3C7; border-radius: 8px; border: 1px solid #FCD34D;\"\n  >\n    <div class=\"user-action-prompt\" *ngIf=\"!showUserInputFieldinDebug\">\n      <div class=\"prompt-header cqa-flex cqa-items-center cqa-gap-2 cqa-mb-2\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M8 14A6 6 0 1 0 8 2a6 6 0 0 0 0 12z\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8 11V8\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M8 5H8.01\" stroke=\"#92400E\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n        <span style=\"font-weight: 600; color: #92400E;\">User input required to proceed</span>\n      </div>\n      <div class=\"prompt-actions cqa-flex cqa-gap-2\">\n        <button\n          class=\"action-btn primary\"\n          (click)=\"onShowUserInputFieldinDebugChange(true)\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: none; background-color: #3F43EE; color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Enter more details\n        </button>\n        <button\n          class=\"action-btn secondary\"\n          (click)=\"onStepAction('skip')\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Skip Step\n        </button>\n        <button\n          class=\"action-btn secondary\"\n          (click)=\"onStepAction('skip_delete')\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Delete Step\n        </button>\n      </div>\n    </div>\n\n    <div class=\"user-input-section\" *ngIf=\"showUserInputFieldinDebug\">\n      <div class=\"input-container cqa-flex cqa-gap-2 cqa-mb-2\">\n        <textarea\n          class=\"input-field\"\n          placeholder=\"Type your response...\"\n          [ngModel]=\"message\"\n          (ngModelChange)=\"onMessageChange($event)\"\n          (keyup.enter)=\"onSendMessage()\"\n          rows=\"2\"\n          autofocus\n          style=\"flex: 1; padding: 8px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: #FFFFFF; color: #0A0A0A; resize: none;\"\n        ></textarea>\n      </div>\n      <div class=\"prompt-actions cqa-flex cqa-gap-2 cqa-mb-2\">\n        <button\n          class=\"action-btn primary\"\n          [disabled]=\"!message\"\n          (click)=\"onUpdateStepData('reRun', 'metadata')\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: none; background-color: #3F43EE; color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Update and Rerun\n        </button>\n        <button\n          class=\"action-btn primary\"\n          [disabled]=\"!message\"\n          (click)=\"onUpdateStepData('aiAgent', 'metadata')\"\n          style=\"padding: 8px 16px; border-radius: 6px; border: none; background-color: #3F43EE; color: white; cursor: pointer; font-size: 14px;\"\n        >\n          Add New Steps and Rerun\n        </button>\n      </div>\n      <button\n        class=\"cancel-button\"\n        (click)=\"onShowUserInputFieldinDebugChange(false)\"\n        style=\"padding: 8px 16px; border-radius: 6px; border: 1px solid #D1D5DB; background-color: white; cursor: pointer; font-size: 14px;\"\n      >\n        Back\n      </button>\n    </div>\n  </div>\n\n  <!-- Test Case Group Level Conversation Input Section -->\n  <div\n  *ngIf=\"shouldShowTestCaseGroup\"\n  class=\"conversation-input-section cqa-mt-3 cqa-p-3\"\n>\n  <div class=\"cqa-flex cqa-justify-between cqa-items-center cqa-gap-2\">\n    <div\n      *ngIf=\"remainingTime$ | async as remainingTime\"\n      class=\"mini-timer-container\"\n    >\n      <svg class=\"mini-progress-ring\" width=\"44\" height=\"44\">\n        <circle\n          class=\"mini-progress-ring__circle\"\n          stroke=\"#3e98c7\"\n          stroke-width=\"4\"\n          fill=\"transparent\"\n          r=\"20\"\n          cx=\"22\"\n          cy=\"22\"\n          [style.strokeDasharray]=\"circleCircumference\"\n          [style.strokeDashoffset.px]=\"getDashOffset(remainingTime)\"\n        />\n      </svg>\n      <div class=\"mini-timer-text\" style=\"color: #374151; font-size: 12px; font-weight: 500;\">\n        <span class=\"mini-time\">{{\n          formatTime(remainingTime)\n        }}</span>\n      </div>\n    </div>\n\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-1\" style=\"flex:1 1 0;\">\n      <div *ngIf=\"!isLocatorNotDetect\" class=\"cqa-text-md cqa-text-[#161617] cqa-font-medium cqa-font-inter\">Enter the timeout duration to continue execution.</div>\n      <div class=\"cqa-flex cqa-justify-between cqa-items-center cqa-gap-2\">\n        <input\n          *ngIf=\"!isLocatorNotDetect\"\n          [ngModel]=\"message\"\n          (ngModelChange)=\"onMessageChange($event)\"\n          [disabled]=\"isInputDisabled\"\n          [type]=\"inputType\"\n          class=\"form-control\"\n          style=\"\n            height: 36px;\n            flex: 1;\n            padding: 9px 13px;\n            border-radius: 5px;\n            border: 1px solid #E2E2E3;\n            background-color: #FFFFFF;\n            color: #0A0A0A;\n            font-size: 14px;\n            transition: border-color 0.2s ease, box-shadow 0.2s ease;\n            outline: none;\n          \"\n          [style.border-color]=\"isInputDisabled ? '#E5E7EB' : '#D1D5DB'\"\n          [style.background-color]=\"isInputDisabled ? '#F9FAFB' : '#FFFFFF'\"\n          [style.color]=\"isInputDisabled ? '#9CA3AF' : '#0A0A0A'\"\n          [style.cursor]=\"isInputDisabled ? 'not-allowed' : 'text'\"\n          [placeholder]=\"inputPlaceholder\"\n          onfocus=\"if (!this.disabled) { this.style.borderColor='#1447E6'; this.style.boxShadow='0 0 0 3px rgba(63, 67, 238, 0.1)'; }\"\n          onblur=\"this.style.borderColor='#D1D5DB'; this.style.boxShadow='none';\"\n        />\n          <div\n          *ngIf=\"isLocatorNotDetect\"\n          (click)=\"onRedirectToCE()\"\n          style=\"cursor: pointer;\"\n        >\n          <button\n            class=\"btn\"\n            style=\"\n              padding: 8px 16px;\n              border-radius: 8px;\n              border: 1px solid #D1D5DB;\n              background-color: #FFFFFF;\n              color: #374151;\n              cursor: pointer;\n              font-weight: 500;\n              font-size: 14px;\n              transition: background-color 0.2s ease;\n            \"\n            onmouseover=\"this.style.backgroundColor='#F9FAFB'\"\n            onmouseout=\"this.style.backgroundColor='#FFFFFF'\"\n          >\n            Record\n          </button>\n        </div>\n        <button\n          [disabled]=\"isResumeDisabled\"\n          class=\"btn\"\n          (click)=\"onSendMessage()\"\n          style=\"\n            height: 36px;\n            padding: 8px 16px;\n            border-radius: 8px;\n            border: none;\n            background-color: #1447E6;\n            color: #FFFFFF;\n            cursor: pointer;\n            font-weight: 500;\n            font-size: 14px;\n            transition: background-color 0.2s ease;\n          \"\n          [style.background-color]=\"isResumeDisabled ? '#E2E2E3' : '#1447E6'\"\n          [style.color]=\"isResumeDisabled ? '#9CA3AF' : '#FFFFFF'\"\n          [style.cursor]=\"isResumeDisabled ? 'not-allowed' : 'pointer'\"\n          onmouseover=\"if (!this.disabled) this.style.backgroundColor='#0F3CBA'\"\n          onmouseout=\"if (!this.disabled) this.style.backgroundColor='#1447E6'\"\n        >\n          Resume\n        </button>\n      </div>\n    </div>\n    \n   \n  </div>\n</div>\n</div>","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'cqaCamelToTitle' })\nexport class CamelToTitlePipe implements PipeTransform {\n  transform(value: string | null | undefined): string {\n    if (!value) return '';\n    return value\n      .replace(/([a-z])([A-Z])/g, '$1 $2')\n      .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n      .replace(/^./, ch => ch.toUpperCase());\n  }\n}\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { FormGroup, FormControl, FormArray, ValidatorFn, AbstractControl } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { ElementCreatePayload, ScreenNameOption } from '../../test-case-details/element-popup/element-popup-form-data';\n\n// Import Element type - using any for now since Element is from ts-portal-ui\n// In a real scenario, you might want to create a shared interface or import from a shared package\ninterface Element {\n  id?: number;\n  name: string;\n  locatorValue?: string;\n  otherLocator?: string[];\n  [key: string]: any;\n  screenNameId?: number;\n  screenNameObj?: any; // Fixed: use 'any' since 'ElementScreenName' is not defined\n}\n\nexport interface TemplateVariable {\n  name: string;\n  dataKey: string;\n  label: string;\n  value: any;\n  type?: string;\n  options?: { value: string; label: string }[];\n  // Additional properties for managing variable state\n  dataType?: 'plain-text' | 'parameter' | 'runtime' | 'environment';\n  rawValue?: string; // Raw value without formatting (for select dropdowns)\n  selectedEnvironment?: string; // Selected environment name (for environment type)\n  selectedEnvironmentId?: number; // Selected environment ID (for environment type)\n  selectedTestDataProfile?: string; // Selected test data profile name (for parameter type)\n  selectedTestDataProfileId?: number; // Selected test data profile ID (for parameter type)\n  selectedDataSet?: string; // Selected data set name (for parameter type)\n  selectedDataSetStart?: string; // Selected data set start name (for FOR loop context)\n  selectedDataSetEnd?: string; // Selected data set end name (for FOR loop context)\n  selectedScreenName?: string; // Selected screen name (for element type)\n  screenNameId?: number; // Selected screen name ID (for element type)\n  elementId?: number; // Selected element ID (for element type)\n  elementLocator?: string; // Selected element locator value (for element type)\n  elementName?: string; // Selected element name (for element type)\n}\n\n@Component({\n  selector: 'cqa-template-variables-form',\n  templateUrl: './template-variables-form.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TemplateVariablesFormComponent implements OnChanges {\n  @Input() templateVariables: TemplateVariable[] = [];\n  @Input() variablesForm: FormArray = new FormArray([]);\n  @Input() metadata: string = '';\n  @Input() description: string = '';\n  @Input() elementOptions: Element[] = []; // Element objects for element dropdown\n  @Input() hasMoreElements: boolean = false; // Whether more elements are available\n  @Input() isLoadingElements: boolean = false; // Loading state for elements\n  /** Screen name options for element form autocomplete (from API) */\n  @Input() screenNameOptions: ScreenNameOption[] = [];\n  /** Whether more screen names are available for infinite scroll */\n  @Input() hasMoreScreenNames: boolean = false;\n  /** True while parent is loading screen names (search or load more) */\n  @Input() isLoadingScreenNames: boolean = false;\n  /** Test data profiles for parameter dropdown (from API) - raw TestData objects */\n  @Input() parameterOptions: any[] = []; // TestData[] - using any to avoid circular dependency\n  /** Whether more parameters are available for infinite scroll */\n  @Input() hasMoreParameters: boolean = false;\n  /** True while parent is loading parameters (search or load more) */\n  @Input() isLoadingParameters: boolean = false;\n  /** Upload options for upload dropdown (from API) */\n  @Input() uploadOptions: any[] = [];\n  /** Whether more uploads are available for infinite scroll */\n  @Input() hasMoreUploads: boolean = false;\n  /** True while parent is loading uploads (search or load more) */\n  @Input() isLoadingUploads: boolean = false;\n  /** Environment options for environment parameter dropdown (from API) */\n  @Input() environmentOptions: { id: string; name: string; value: string; environment: string }[] = [];\n  /** Whether more environments are available for infinite scroll */\n  @Input() hasMoreEnvironments: boolean = false;\n  /** True while parent is loading environments (search or load more) */\n  @Input() isLoadingEnvironments: boolean = false;\n  /** Default test data profile ID from test case (if available, profile and data set dropdowns will be disabled) */\n  @Input() defaultTestDataProfileId?: number;\n  /** Default test data start index from test case (data set index in the profile) */\n  @Input() defaultTestDataStartIndex?: number;\n  /** Default test data end index from FOR loop context */\n  @Input() defaultTestDataEndIndex?: number;\n  /** True when the edited step is inside a FOR loop. */\n  @Input() isInsideForLoopStep: boolean = false;\n  /** True when the parent test case has a test data profile configured (testCase.testDataId is set). */\n  @Input() hasTestDataProfile: boolean = false;\n  @Input() isEditInDepth: boolean = false;\n  @Input() isDebug: boolean = false;\n  \n  @Output() variableValueChange = new EventEmitter<{ name: string; value: any }>();\n  @Output() variableBooleanChange = new EventEmitter<{ name: string; value: boolean }>();\n  @Output() metadataChange = new EventEmitter<string>();\n  @Output() descriptionChange = new EventEmitter<string>();\n  @Output() loadMoreElements = new EventEmitter<void>(); // Emit when load more is requested\n  @Output() searchElements = new EventEmitter<string>(); // Emit when user searches for elements\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>(); // Emit when screen name is selected to fetch elements filtered by screen name\n  @Output() createElement = new EventEmitter<ElementCreatePayload>(); // Emit when element is created with payload\n  @Output() searchScreenName = new EventEmitter<string>(); // Emit when user searches screen names\n  @Output() loadMoreScreenNames = new EventEmitter<string>(); // Emit when user scrolls to load more screen names\n  @Output() createScreenNameRequest = new EventEmitter<string>(); // Emit when user requests to create a new screen name\n  @Output() searchParameters = new EventEmitter<string>(); // Emit when user searches for parameters\n  @Output() loadMoreParameters = new EventEmitter<void>(); // Emit when user scrolls to load more parameters\n  @Output() searchUploads = new EventEmitter<string>(); // Emit when user searches for uploads\n  @Output() loadMoreUploads = new EventEmitter<void>(); // Emit when user scrolls to load more uploads\n  @Output() searchEnvironments = new EventEmitter<string>(); // Emit when user searches for environments\n  @Output() loadMoreEnvironments = new EventEmitter<void>(); // Emit when user scrolls to load more environments\n  @Output() cancelElementForm = new EventEmitter<void>(); // Emit when element form is cancelled\n  @Output() elementFormVisibilityChange = new EventEmitter<boolean>(); // Emit when element form visibility changes\n  \n  // Cache for select configs to avoid recalculating on every change detection\n  private selectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for data type select configs\n  private dataTypeSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for parameter select configs\n  private parameterSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for environment select configs\n  private environmentSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n\n  // Cache for the AI Ask / AI Verify environment-name dropdown configs.\n  // MUST be cached: the config builder is called from the template binding on\n  // every change-detection cycle. Returning a fresh object/array/closure each\n  // time triggers cqa-dynamic-select to re-emit, which re-runs CD, which calls\n  // this getter again — a tight loop that pegs CPU at 100%.\n  private environmentNameSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n\n  // Cache for environment parameter select configs\n  private environmentParameterSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for screen name select configs (for element variables)\n  private screenNameSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for element select configs (filtered by screen name)\n  private elementSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for test data profile select configs (first dropdown for parameters)\n  private testDataProfileSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for data set select configs (second dropdown for parameters - shows data sets from selected profile)\n  private dataSetSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  // Track which variable triggered the current environment search (to avoid resetting other variables)\n  private activeEnvironmentSearchVariable: string | null = null;\n  // Track which variable triggered the current parameter search (to avoid resetting other variables' profiles)\n  private activeParameterSearchVariable: string | null = null;\n  // Snapshot of the selected TestData profile for each variable, so that a search in another variable's\n  // dropdown doesn't lose the profile/dataset/parameter when parameterOptions is temporarily filtered.\n  private selectedParameterProfileSnapshot: Map<string, any> = new Map();\n\n  // Snapshot of environmentOptions for each variable's selected environment,\n  // so that a search in another variable's dropdown doesn't lose the parameter list.\n  private selectedEnvironmentOptionsSnapshot: Map<string, { id: string; name: string; value: string; environment: string }[]> = new Map();\n\n  // Cache for data set start/end configs (FOR loop context)\n  private dataSetRangeSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for parameter select configs for a specific data set (third dropdown for parameters)\n  private parameterForDataSetSelectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  \n  // Cache for computed properties\n  private needsDataTypeDropdownCache: Map<string, boolean> = new Map();\n  private shouldShowDropdownCache: Map<string, boolean> = new Map();\n  \n  // Pre-computed data type options (static, no need to recreate)\n  private readonly dataTypeOptions: SelectOption[] = [\n    { id: 'plain-text', value: 'plain-text', name: 'Plain Text', label: 'Plain Text' },\n    { id: 'parameter', value: 'parameter', name: '@|Parameter|', label: '@|Parameter|' },\n    { id: 'runtime', value: 'runtime', name: '$|Runtime|', label: '$|Runtime|' },\n    { id: 'environment', value: 'environment', name: '*|Environment|', label: '*|Environment|' }\n  ];\n\n  @Input() createElementVisible: boolean = false;\n  \n  constructor(private cdr: ChangeDetectorRef) {}\n\n  onCreateElement(payload: ElementCreatePayload): void {\n    this.createElement.emit(payload);\n    this.elementFormVisibilityChange.emit(false);\n    this.cdr.markForCheck();\n  }\n\n  onCancelElementForm(): void {\n    this.elementFormVisibilityChange.emit(false);\n    this.cancelElementForm.emit();\n    this.cdr.markForCheck();\n  }\n  \n  ngOnChanges(changes: SimpleChanges): void {\n    if(changes['defaultTestDataProfileId']) {\n      console.log(\"defaultTestDataProfileId changed\", changes['defaultTestDataProfileId']);\n    }\n    if(changes['defaultTestDataStartIndex']) {\n      console.log(\"defaultTestDataStartIndex changed\", changes['defaultTestDataStartIndex']);\n    }\n    if(changes['defaultTestDataEndIndex']) {\n      console.log(\"defaultTestDataEndIndex changed\", changes['defaultTestDataEndIndex']);\n    }\n    if(changes['isInsideForLoopStep']) {\n      console.log(\"isInsideForLoopStep changed\", changes['isInsideForLoopStep']);\n    }\n    if (changes['templateVariables'] || changes['variablesForm'] || changes['elementOptions'] || \n        changes['hasMoreElements'] || changes['isLoadingElements'] ||\n        changes['parameterOptions'] || changes['hasMoreParameters'] || changes['isLoadingParameters'] ||\n        changes['environmentOptions'] || changes['hasMoreEnvironments'] || changes['isLoadingEnvironments'] ||\n        changes['defaultTestDataProfileId'] || changes['defaultTestDataStartIndex'] || changes['defaultTestDataEndIndex'] || changes['isInsideForLoopStep'] || changes['hasTestDataProfile']) {\n\n      // Drop dataType option cache so dropdown options are re-filtered on input change.\n      if (changes['isInsideForLoopStep'] || changes['hasTestDataProfile']) {\n        this.dataTypeSelectConfigCache.clear();\n      }\n      \n      // Only clear caches for changed inputs, not all caches\n      if (changes['templateVariables'] || changes['variablesForm']) {\n        // Clear all caches when template variables or form changes\n        this.selectConfigCache.clear();\n        this.dataTypeSelectConfigCache.clear();\n        this.parameterSelectConfigCache.clear();\n        this.environmentSelectConfigCache.clear();\n        this.environmentNameSelectConfigCache.clear();\n        this.environmentParameterSelectConfigCache.clear();\n        this.selectedEnvironmentOptionsSnapshot.clear();\n        this.selectedParameterProfileSnapshot.clear();\n        this.screenNameSelectConfigCache.clear();\n        this.elementSelectConfigCache.clear();\n        this.testDataProfileSelectConfigCache.clear();\n        this.dataSetSelectConfigCache.clear();\n        this.dataSetRangeSelectConfigCache.clear();\n        this.parameterForDataSetSelectConfigCache.clear();\n        this.needsDataTypeDropdownCache.clear();\n        this.shouldShowDropdownCache.clear();\n      }\n      \n      // Clear element and screen name caches only when their options change\n      if (changes['elementOptions'] || changes['hasMoreElements'] || changes['isLoadingElements']) {\n        this.elementSelectConfigCache.clear();\n      }\n      \n      if (changes['screenNameOptions'] || changes['hasMoreScreenNames'] || changes['isLoadingScreenNames']) {\n        this.screenNameSelectConfigCache.clear();\n      }\n      \n      if (changes['parameterOptions'] || changes['hasMoreParameters'] || changes['isLoadingParameters']) {\n        console.log(\"parameterOptions changed\", changes['parameterOptions']);\n        if (this.activeParameterSearchVariable) {\n          // Only clear/rebuild cache for the variable that triggered the search\n          const searchVar = this.activeParameterSearchVariable;\n          this.testDataProfileSelectConfigCache.delete(`${searchVar}_testDataProfile`);\n          this.dataSetSelectConfigCache.delete(`${searchVar}_dataSet`);\n          this.dataSetRangeSelectConfigCache.delete(`${searchVar}_dataSetRange_start`);\n          this.dataSetRangeSelectConfigCache.delete(`${searchVar}_dataSetRange_end`);\n          this.parameterForDataSetSelectConfigCache.delete(`${searchVar}_paramForDataSet`);\n          this.parameterSelectConfigCache.delete(`${searchVar}_parameter`);\n          this.activeParameterSearchVariable = null;\n        } else {\n          // No specific variable triggered this — clear all (e.g. initial load, load more)\n          this.parameterSelectConfigCache.clear();\n          this.testDataProfileSelectConfigCache.clear();\n          this.dataSetSelectConfigCache.clear();\n          this.dataSetRangeSelectConfigCache.clear();\n          this.parameterForDataSetSelectConfigCache.clear();\n        }\n      }\n      \n      if (changes['uploadOptions'] || changes['hasMoreUploads'] || changes['isLoadingUploads']) {\n        // Clear select config cache for upload variables\n        this.selectConfigCache.clear();\n      }\n      \n      if (changes['environmentOptions'] || changes['hasMoreEnvironments'] || changes['isLoadingEnvironments']) {\n        if (this.activeEnvironmentSearchVariable) {\n          // Only clear/rebuild cache for the variable that triggered the search\n          const searchVar = this.activeEnvironmentSearchVariable;\n          this.environmentSelectConfigCache.delete(`${searchVar}_environment`);\n          this.environmentParameterSelectConfigCache.delete(`${searchVar}_envParam`);\n          this.environmentNameSelectConfigCache.delete(`${searchVar}_environmentName`);\n          this.activeEnvironmentSearchVariable = null;\n        } else {\n          // No specific variable triggered this — clear all (e.g. initial load, load more)\n          this.environmentSelectConfigCache.clear();\n          this.environmentParameterSelectConfigCache.clear();\n          this.environmentNameSelectConfigCache.clear();\n        }\n      }\n      \n      // Initialize data types and raw values for test-data variables\n      // NOTE: We do NOT include 'parameterOptions' here because it changes on every search,\n      // which would reset the test-data type dropdown. Instead, parameterOptions initialization\n      // is handled separately below with a firstChange guard.\n      if ((changes['templateVariables'] || changes['defaultTestDataProfileId'] || changes['defaultTestDataStartIndex'] || changes['defaultTestDataEndIndex'] || changes['isInsideForLoopStep']) && this.templateVariables) {\n        this.initializeTestDataVariables();\n      }\n      \n      // If templateVariables changed, initialize screen name form controls for element variables that have screenNameId\n      if (changes['templateVariables'] && this.templateVariables) {\n        this.templateVariables.forEach((variable) => {\n          if (this.isElementType(variable) && variable.screenNameId) {\n            const variableGroup = this.getVariableFormGroup(variable.name);\n            if (variableGroup) {\n              // Initialize screen name form control with screenNameId as string (to match option id format), or 'none' by default\n              if (!variableGroup.get('selectedScreenName')) {\n                const initialValue = variable.screenNameId ? String(variable.screenNameId) : 'none';\n                variableGroup.addControl('selectedScreenName', new FormControl(initialValue));\n              } else {\n                // Update form control value if it doesn't match\n                const currentValue = variableGroup.get('selectedScreenName')?.value;\n                const expectedValue = variable.screenNameId ? String(variable.screenNameId) : 'none';\n                const currentValueStr = currentValue != null ? String(currentValue) : null;\n                if (currentValueStr !== expectedValue && currentValue !== variable.screenNameId) {\n                  variableGroup.get('selectedScreenName')?.setValue(expectedValue, { emitEvent: false });\n                }\n              }\n              \n              // If we have screenNameId but not selectedScreenName, find it from screenNameOptions\n              if (!variable.selectedScreenName && this.screenNameOptions.length > 0) {\n                const matchingScreenName = this.screenNameOptions.find(sn => sn.id === variable.screenNameId);\n                if (matchingScreenName) {\n                  variable.selectedScreenName = matchingScreenName.name;\n                }\n              }\n            }\n          }\n        });\n      }\n      \n      // If screenNameOptions changed, update selectedScreenName for variables that have screenNameId\n      if (changes['screenNameOptions'] && this.templateVariables) {\n        this.templateVariables.forEach((variable) => {\n          if (this.isElementType(variable) && variable.screenNameId && !variable.selectedScreenName) {\n            const matchingScreenName = this.screenNameOptions.find(sn => sn.id === variable.screenNameId);\n            if (matchingScreenName) {\n              variable.selectedScreenName = matchingScreenName.name;\n            }\n          }\n        });\n      }\n      \n      // If elementOptions or screenNameOptions changed, re-initialize element variables\n      if ((changes['elementOptions'] || changes['screenNameOptions']) && this.templateVariables) {\n        // Clear element config cache when elementOptions changes to force recomputation\n        // This ensures that when elements are loaded after screen name selection, the config is recomputed\n        this.elementSelectConfigCache.clear();\n        \n        this.templateVariables.forEach((variable) => {\n          if (this.isElementType(variable)) {\n            const variableGroup = this.getVariableFormGroup(variable.name);\n            if (variableGroup) {\n              // Only try to find and set element if elementId exists in template data\n              // If no elementId, don't select anything - use default values\n              if (variable.elementId) {\n                let element: any = null;\n                \n                // Priority 1: Find by elementId (from setTemplateVariables)\n                element = this.elementOptions.find(el => el.id === variable.elementId);\n                \n                // Priority 2: Find by elementName if elementId search didn't find it (fallback)\n                if (!element && variable.elementName) {\n                  element = this.elementOptions.find(el => el.name === variable.elementName);\n                }\n                \n                // Priority 3: Find by locatorValue (for backward compatibility)\n                if (!element && variable.value) {\n                  const elementValue = variable.value;\n                  element = this.elementOptions.find(el => el.locatorValue === elementValue);\n                }\n                \n                if (element) {\n                  // Set screen name info from the found element\n                  if (element.screenNameId) {\n                    variable.screenNameId = element.screenNameId;\n                    // Prefer screenNameObj.name; fall back to screenNameOptions lookup when screenNameObj\n                    // is absent (e.g. elements returned by findAll() may lack the nested object).\n                    if (!variable.selectedScreenName) {\n                      if (element.screenNameObj?.name) {\n                        variable.selectedScreenName = element.screenNameObj.name;\n                      } else {\n                        const snOption = this.screenNameOptions.find(sn => sn.id === element.screenNameId);\n                        if (snOption) {\n                          variable.selectedScreenName = snOption.name;\n                        }\n                      }\n                    }\n                    \n                    // Set form controls\n                    // Store screenNameId as string to match option id format (for consistency with getScreenNameSelectConfig)\n                    const screenNameIdString = String(element.screenNameId);\n                    if (!variableGroup.get('selectedScreenName')) {\n                      variableGroup.addControl('selectedScreenName', new FormControl(screenNameIdString));\n                    } else {\n                      // Only update if form control doesn't already have a valid screen name selected\n                      // This prevents resetting user's selection when elementOptions changes\n                      const currentValue = variableGroup.get('selectedScreenName')?.value;\n                      const currentValueStr = currentValue != null ? String(currentValue) : null;\n                      if (currentValueStr !== screenNameIdString && currentValueStr !== 'none') {\n                        variableGroup.get('selectedScreenName')?.setValue(screenNameIdString, { emitEvent: false });\n                      }\n                    }\n                  }\n                  \n                  // Set/update element details from the found element\n                  variable.elementId = element.id;\n                  variable.elementLocator = element.locatorValue || '';\n                  // Only update elementName if it wasn't already set (preserve from setTemplateVariables)\n                  if (!variable.elementName) {\n                    variable.elementName = element.name || '';\n                  }\n                  \n                  // For selector, use elementLocator as value; for others, use elementName\n                  if (variable.name === 'selector') {\n                    variable.value = element.locatorValue || element.name || '';\n                  } else if (!variable.value || variable.value === '') {\n                    variable.value = element.name || element.locatorValue || '';\n                  }\n                  \n                  // Set element ID form control for the dropdown (key is 'id' in config)\n                  if (!variableGroup.get('id')) {\n                    variableGroup.addControl('id', new FormControl(element.id));\n                  } else {\n                    variableGroup.get('id')?.setValue(element.id, { emitEvent: false });\n                  }\n                  \n                  // Update value form control\n                  if (variableGroup.get('value')) {\n                    variableGroup.get('value')?.setValue(variable.value, { emitEvent: false });\n                  }\n                } else {\n                  // Element not found in elementOptions yet - might need to fetch\n                  // Keep elementId and elementName if they exist (from setTemplateVariables)\n                  // If we have elementId but element isn't found, we might need to fetch elements\n                  // However, we don't know the screen name yet, so we'll wait for elementOptions to be loaded\n                  // The initialization will run again when elementOptions changes via ngOnChanges\n                }\n              } else {\n                // No elementId in template data - clear all element-related fields and set defaults\n                // But don't override user's screen name selection if they've already selected one\n                variable.elementId = undefined;\n                variable.elementLocator = undefined;\n                variable.elementName = undefined;\n                \n                // Only clear screenNameId if it wasn't set by user selection\n                // Check if form control has a valid screen name (not 'none')\n                const currentScreenNameValue = variableGroup.get('selectedScreenName')?.value;\n                if (!currentScreenNameValue || currentScreenNameValue === 'none' || currentScreenNameValue === null) {\n                  variable.screenNameId = undefined;\n                  variable.selectedScreenName = undefined;\n                  \n                  // Set form controls to default values\n                  // Screen name should be 'none' (Select option)\n                  if (!variableGroup.get('selectedScreenName')) {\n                    variableGroup.addControl('selectedScreenName', new FormControl('none'));\n                  } else {\n                    variableGroup.get('selectedScreenName')?.setValue('none', { emitEvent: false });\n                  }\n                }\n                \n                // Element ID should be null\n                if (!variableGroup.get('id')) {\n                  variableGroup.addControl('id', new FormControl(null));\n                } else {\n                  variableGroup.get('id')?.setValue(null, { emitEvent: false });\n                }\n              }\n            }\n          }\n        });\n      }\n      \n      // If environment options changed: initialize saved environment variables BEFORE precomputeConfigs.\n      // Otherwise getEnvironmentSelectConfig runs with empty selectedEnvironment and caches stale UI state.\n      if (changes['environmentOptions']) {\n        const needsEnvironmentInit =\n          this.environmentOptions.length > 0 &&\n          this.templateVariables?.some(v => {\n            if (!this.needsDataTypeDropdown(v)) {\n              return false;\n            }\n            const parsed = this.parseTestDataValue(v.value || '');\n            const isEnvType =\n              v.dataType === 'environment' ||\n              v.selectedEnvironmentId != null ||\n              parsed.dataType === 'environment';\n            if (!isEnvType) {\n              return false;\n            }\n            if (v.selectedEnvironment) {\n              return false;\n            }\n            const raw = parsed.rawValue;\n            return Boolean(raw && String(raw).trim()) || v.selectedEnvironmentId != null;\n          });\n\n        if (needsEnvironmentInit) {\n          this.initializeTestDataVariables();\n        }\n\n        this.templateVariables?.forEach((variable, index) => {\n          if (this.isEnvironmentType(variable) && variable.selectedEnvironment) {\n            this.environmentParameterSelectConfigCache.delete(`${variable.name}_envParam`);\n            this.getEnvironmentParameterSelectConfig(variable, index);\n          }\n        });\n      }\n\n      // Pre-compute all configs to avoid calling methods in template\n      // This will recompute element configs with the new elementOptions\n      // Only precompute if templateVariables exist to avoid unnecessary work\n      if (this.templateVariables && this.templateVariables.length > 0) {\n        this.precomputeConfigs();\n      }\n      \n      // Force change detection after recomputing configs (only once at the end)\n      this.cdr.markForCheck();\n\n      // Re-run initializeTestDataVariables whenever parameterOptions changes and there are still\n      // variables that need initialization (have profileId but missing profile name or dataSet).\n      // We do NOT use firstChange here because the saved profile may arrive in a second API call\n      // (id@<profileId>) after the initial paginated list, so firstChange would miss it.\n      // The inner some() guard ensures we only re-run when variables are still incomplete,\n      // preventing unnecessary re-runs on user search updates.\n      if (\n        changes['parameterOptions'] &&\n        this.parameterOptions.length > 0 &&\n        (\n          // Check if any variable has selectedTestDataProfileId but is missing selectedTestDataProfile or selectedDataSet\n          // This happens when loading a saved step - setTemplateVariables sets the ID, but we need parameterOptions to set the name and data set\n          this.templateVariables?.some(v =>\n            this.needsDataTypeDropdown(v) &&\n            v.dataType === 'parameter' &&\n            v.selectedTestDataProfileId != null &&\n            (!v.selectedTestDataProfile || !v.selectedDataSet)\n          ) ||\n          (this.defaultTestDataProfileId && this.defaultTestDataStartIndex != null &&\n            this.templateVariables?.some(v =>\n              this.needsDataTypeDropdown(v) && v.dataType === 'parameter' && !v.selectedTestDataProfile\n            )\n          ) ||\n          // The extra uninitialized-variable check below is debug-only: only run it in debug mode\n          // to avoid double-initialising variables in non-debug step-builder flows.\n          (this.isDebug && this.templateVariables?.some(v =>\n            this.needsDataTypeDropdown(v) && v.dataType === 'parameter' && !v.selectedTestDataProfile\n          ))\n        )\n      ) {\n        console.log(\"parameterOptions InitializeTestDataVariables\", changes['parameterOptions']);\n        // Re-initialize to set default values now that parameterOptions are available\n        this.initializeTestDataVariables();\n        // Force change detection after initialization\n        this.cdr.markForCheck();\n      }\n      \n      // If parameter options or loading state changed, refresh test data profile configs (so search/load more and options stay in sync)\n      if (changes['parameterOptions'] || changes['hasMoreParameters'] || changes['isLoadingParameters'] ||\n          changes['defaultTestDataProfileId'] || changes['defaultTestDataStartIndex']) {\n        console.log(\"parameterOptions RefreshTestDataVariables\", changes['parameterOptions']);\n        // Clear test data profile select config cache since profiles list or loading state may have changed\n        this.testDataProfileSelectConfigCache.clear();\n        \n        this.templateVariables.forEach((variable, index) => {\n          if (this.isParameterType(variable)) {\n            // Recompute test data profile config\n            this.getTestDataProfileSelectConfig(variable, index);\n            \n            // If a profile is already selected, recompute data set config\n            if (variable.selectedTestDataProfile) {\n              this.getDataSetSelectConfig(variable, index);\n              \n              // If a data set is already selected, recompute parameter config\n              if (variable.selectedDataSet) {\n                // Clear and recompute parameter config for the selected data set\n                // Use profile ID if available for cache key\n                const profileIdentifier = variable.selectedTestDataProfileId ? String(variable.selectedTestDataProfileId) : variable.selectedTestDataProfile;\n                this.parameterForDataSetSelectConfigCache.delete(`${variable.name}_paramForDataSet_${profileIdentifier}_${variable.selectedDataSet}`);\n                this.getParameterSelectConfig(variable, index);\n              }\n            }\n          }\n        });\n      }\n      \n      // Mark for check since we're using OnPush\n      this.cdr.markForCheck();\n    }\n  }\n  \n  private initializeTestDataVariables(): void {\n    this.templateVariables.forEach((variable, index) => {\n      if (this.needsDataTypeDropdown(variable)) {\n        // Preserve existing dataType if already set (e.g., from setTemplateVariables when loading saved step)\n        const existingDataType = variable.dataType;\n        const { dataType, rawValue } = this.parseTestDataValue(variable.value || '');\n        // Auto-select 'parameter' when the test case has a default profile (testCase.testDataId or\n        // FOR-loop-derived) and the variable has no existing value/dataType. This keeps Edit-mode\n        // user selections intact (existingDataType set) and only kicks in for fresh fields.\n        const shouldDefaultToParameter = !existingDataType && dataType === 'plain-text' && (!variable.value || variable.value === '') && this.defaultTestDataProfileId != null;\n        variable.dataType = existingDataType || (shouldDefaultToParameter ? 'parameter' : dataType);\n        variable.rawValue = rawValue;\n        \n          // Ensure form control exists for data type in the FormArray\n          const variableGroup = this.getVariableFormGroup(variable.name);\n          if (variableGroup) {\n            const finalDataType = variable.dataType; // Use the final dataType (existing or parsed)\n            if (!variableGroup.get('dataType')) {\n              variableGroup.addControl('dataType', new FormControl(finalDataType));\n            } else {\n              variableGroup.get('dataType')?.setValue(finalDataType, { emitEvent: false });\n            }\n            \n            // For parameter type, parse the value to extract test data profile and parameter\n            if (finalDataType === 'parameter') {\n            // Priority 1: Use saved test data profile ID from testStep.testDataList (set by setTemplateVariables)\n            // Only proceed if parameterOptions are loaded\n            if (this.parameterOptions.length > 0) {\n              let profileToUse: any = null;\n              let dataSetToUse: any = null;\n              const hasDefaultProfile = this.defaultTestDataProfileId != null;\n              const hasSavedProfile = variable.selectedTestDataProfileId != null;\n              const profileMismatchWithDefault =\n                hasDefaultProfile &&\n                hasSavedProfile &&\n                Number(variable.selectedTestDataProfileId) !== Number(this.defaultTestDataProfileId);\n\n              // When default profile is different from saved profile, ignore saved template-variable selection.\n              // Use default profile/start-end and clear parameter value because profile context changed.\n              if (profileMismatchWithDefault) {\n                variable.selectedTestDataProfileId = undefined;\n                variable.selectedTestDataProfile = undefined;\n                variable.selectedDataSet = undefined;\n                variable.selectedDataSetStart = undefined;\n                variable.selectedDataSetEnd = undefined;\n                variable.rawValue = '';\n                variable.value = '';\n              }\n              \n              // First, check saved profile only when there is no default profile override.\n              if (!hasDefaultProfile && variable.selectedTestDataProfileId != null && !profileMismatchWithDefault) {\n                profileToUse = this.parameterOptions.find((testData: any) => testData.id === variable.selectedTestDataProfileId);\n                if (profileToUse && profileToUse.data && profileToUse.data.length > 0) {\n                  // If defaultTestDataStartIndex is provided, use it directly\n                  if (this.defaultTestDataStartIndex != null && profileToUse.data.length > this.defaultTestDataStartIndex) {\n                    dataSetToUse = profileToUse.data[this.defaultTestDataStartIndex];\n                  } else {\n                    // Find the data set that contains the parameter value\n                    const paramName = rawValue;\n                    if (paramName && paramName.trim()) {\n                      // Search through all data sets to find the one containing this parameter\n                      for (const dataSet of profileToUse.data) {\n                        if (dataSet && dataSet.data) {\n                          // Check if this data set has the parameter\n                          if (dataSet.data.hasOwnProperty(paramName)) {\n                            dataSetToUse = dataSet;\n                            break;\n                          }\n                        }\n                      }\n                    }\n                    // If not found by parameter name, use first data set as fallback\n                    if (!dataSetToUse && profileToUse.data.length > 0) {\n                      dataSetToUse = profileToUse.data[0];\n                    }\n                  }\n                }\n              }\n              \n              // Priority 2: Use default test data profile whenever provided (override template-variable profile).\n              if (!profileToUse && this.defaultTestDataProfileId != null) {\n                profileToUse = this.parameterOptions.find((testData: any) => testData.id === this.defaultTestDataProfileId);\n                if (profileToUse && profileToUse.data && profileToUse.data.length > 0) {\n                  if (this.defaultTestDataStartIndex != null && profileToUse.data.length > this.defaultTestDataStartIndex) {\n                    dataSetToUse = profileToUse.data[this.defaultTestDataStartIndex];\n                  } else if (profileToUse.data.length === 1) {\n                    // Only auto-select the data set when exactly one option is available.\n                    // With multiple data sets and no explicit start index, leave the choice to the user.\n                    dataSetToUse = profileToUse.data[0];\n                  }\n                }\n              }\n              \n              // If a default profile resolved but no data set was auto-picked (multi-dataset case),\n              // still select the profile so the user only needs to pick the data set.\n              if (profileToUse && !dataSetToUse) {\n                const profileName = profileToUse.name || profileToUse.testDataName;\n                variable.selectedTestDataProfile = profileName;\n                variable.selectedTestDataProfileId = profileToUse.id;\n                this.selectedParameterProfileSnapshot.set(variable.name, profileToUse);\n                const profileIdString = String(profileToUse.id);\n                if (!variableGroup.get('selectedTestDataProfile')) {\n                  variableGroup.addControl('selectedTestDataProfile', new FormControl(profileIdString));\n                } else {\n                  variableGroup.get('selectedTestDataProfile')?.setValue(profileIdString, { emitEvent: false });\n                }\n                this.testDataProfileSelectConfigCache.delete(`${variable.name}_testDataProfile`);\n              }\n\n              // If we found a profile and data set, set the variable properties\n              if (profileToUse && dataSetToUse) {\n                const profileName = profileToUse.name || profileToUse.testDataName;\n                const dataSetName = dataSetToUse.name;\n                \n                // Set variable properties - this ensures hasSelectedTestDataProfile() and hasSelectedDataSet() return true\n                variable.selectedTestDataProfile = profileName;\n                variable.selectedTestDataProfileId = profileToUse.id;\n                // Snapshot profile so it survives if another variable triggers a search\n                this.selectedParameterProfileSnapshot.set(variable.name, profileToUse);\n                variable.selectedDataSet = dataSetName;\n                if (this.isInsideForLoopStep) {\n                  variable.selectedDataSetStart = dataSetName;\n                  if (this.defaultTestDataEndIndex != null && profileToUse.data.length > this.defaultTestDataEndIndex) {\n                    const endDataSet = profileToUse.data[this.defaultTestDataEndIndex];\n                    variable.selectedDataSetEnd = endDataSet?.name || dataSetName;\n                  } else {\n                    variable.selectedDataSetEnd = dataSetName;\n                  }\n                }\n                \n                // Set form controls with the actual values so dropdowns display selected options\n                // Use profile ID (string) for selectedTestDataProfile form control to match option.id format\n                const profileIdString = String(profileToUse.id);\n                if (!variableGroup.get('selectedTestDataProfile')) {\n                  variableGroup.addControl('selectedTestDataProfile', new FormControl(profileIdString));\n                } else {\n                  variableGroup.get('selectedTestDataProfile')?.setValue(profileIdString, { emitEvent: false });\n                }\n                if (!variableGroup.get('selectedDataSet')) {\n                  variableGroup.addControl('selectedDataSet', new FormControl(dataSetName));\n                } else {\n                  variableGroup.get('selectedDataSet')?.setValue(dataSetName, { emitEvent: false });\n                }\n                if (this.isInsideForLoopStep) {\n                  if (!variableGroup.get('selectedDataSetStart')) {\n                    variableGroup.addControl('selectedDataSetStart', new FormControl(variable.selectedDataSetStart || dataSetName));\n                  } else {\n                    variableGroup.get('selectedDataSetStart')?.setValue(variable.selectedDataSetStart || dataSetName, { emitEvent: false });\n                  }\n                  if (!variableGroup.get('selectedDataSetEnd')) {\n                    variableGroup.addControl('selectedDataSetEnd', new FormControl(variable.selectedDataSetEnd || dataSetName));\n                  } else {\n                    variableGroup.get('selectedDataSetEnd')?.setValue(variable.selectedDataSetEnd || dataSetName, { emitEvent: false });\n                  }\n                }\n                // Set parameter value if we found it in the data set, otherwise clear it for user selection\n                if (variableGroup.get('value')) {\n                  // If we found the parameter in a data set, set it; otherwise clear for user selection\n                  const paramValue = rawValue && dataSetToUse && dataSetToUse.data && dataSetToUse.data.hasOwnProperty(rawValue)\n                    ? variable.value // Use the formatted value (e.g., @|t666666|)\n                    : '';\n                  variableGroup.get('value')?.setValue(paramValue, { emitEvent: false });\n                }\n                \n                // Clear caches to force recomputation of configs with new values\n                // Clear all cache entries for this variable to ensure fresh configs\n                this.testDataProfileSelectConfigCache.delete(`${variable.name}_testDataProfile`);\n                // Clear data set cache - need to clear all possible keys since we don't know the exact format\n                const dataSetKeysToDelete: string[] = [];\n                this.dataSetSelectConfigCache.forEach((value, key) => {\n                  if (key.startsWith(`${variable.name}_dataSet`)) {\n                    dataSetKeysToDelete.push(key);\n                  }\n                });\n                dataSetKeysToDelete.forEach(key => this.dataSetSelectConfigCache.delete(key));\n                this.dataSetRangeSelectConfigCache.clear();\n                // Clear parameter cache - need to clear all possible keys\n                const paramKeysToDelete: string[] = [];\n                this.parameterForDataSetSelectConfigCache.forEach((value, key) => {\n                  if (key.startsWith(`${variable.name}_paramForDataSet`)) {\n                    paramKeysToDelete.push(key);\n                  }\n                });\n                paramKeysToDelete.forEach(key => this.parameterForDataSetSelectConfigCache.delete(key));\n              }\n            }\n            \n            // Priority 3: If no default profile override and no saved profile found, search by parameter value\n            if (this.defaultTestDataProfileId == null && !variable.selectedTestDataProfileId && this.parameterOptions.length > 0) {\n              // No default values - use existing logic to find from parameter value\n              const paramName = rawValue;\n              if (paramName) {\n                // Find the test data profile and data set that contains this parameter\n                // Search through all test data profiles and their data sets\n                let foundProfile: any = null;\n                let foundDataSet: any = null;\n                \n                for (const testDataProfile of this.parameterOptions) {\n                  if (testDataProfile.data && testDataProfile.data.length > 0) {\n                    // Search through all data sets in this profile\n                    for (const dataSet of testDataProfile.data) {\n                      if (dataSet && dataSet.data && dataSet.data.hasOwnProperty(paramName)) {\n                        foundProfile = testDataProfile;\n                        foundDataSet = dataSet;\n                        break;\n                      }\n                    }\n                    if (foundProfile) break;\n                  }\n                }\n                \n                if (foundProfile && foundDataSet) {\n                  const profileName = foundProfile.name || foundProfile.testDataName;\n                  const dataSetName = foundDataSet.name;\n                  \n                  variable.selectedTestDataProfile = profileName;\n                  variable.selectedTestDataProfileId = foundProfile.id;\n                  variable.selectedDataSet = dataSetName;\n                  \n                  // Set form controls\n                  const profileIdString = String(foundProfile.id);\n                  if (!variableGroup.get('selectedTestDataProfile')) {\n                    variableGroup.addControl('selectedTestDataProfile', new FormControl(profileIdString));\n                  } else {\n                    variableGroup.get('selectedTestDataProfile')?.setValue(profileIdString, { emitEvent: false });\n                  }\n                  if (!variableGroup.get('selectedDataSet')) {\n                    variableGroup.addControl('selectedDataSet', new FormControl(dataSetName));\n                  } else {\n                    variableGroup.get('selectedDataSet')?.setValue(dataSetName, { emitEvent: false });\n                  }\n                  // Set form control to param name (for dropdown display)\n                  if (variableGroup.get('value')) {\n                    variableGroup.get('value')?.setValue(paramName, { emitEvent: false });\n                  }\n                  // Ensure variable.value is formatted correctly as @|paramName|\n                  variable.value = this.formatTestDataValue(paramName, 'parameter');\n                } else {\n                  // If parameter not found, format the raw value if it's a parameter type\n                  if (variableGroup.get('value')) {\n                    variableGroup.get('value')?.setValue(rawValue, { emitEvent: false });\n                  }\n                  // Ensure variable.value is formatted correctly\n                  variable.value = this.formatTestDataValue(rawValue, dataType);\n                }\n              }\n            }\n          }\n          \n          // For environment type, use finalDataType (from testDataList) — value may not parse as *|...| yet.\n          if (finalDataType === 'environment') {\n            const parsedEnv = this.parseTestDataValue(variable.value || '');\n            let paramName = parsedEnv.rawValue ? String(parsedEnv.rawValue).trim() : '';\n            if (\n              !paramName &&\n              variable.selectedEnvironmentId != null &&\n              this.environmentOptions.length > 0\n            ) {\n              const prefix = `env-${variable.selectedEnvironmentId}-`;\n              const candidates = this.environmentOptions.filter(env => env.id.indexOf(prefix) === 0);\n              if (candidates.length === 1) {\n                paramName = String(candidates[0].name || '').trim();\n              }\n            }\n            if (paramName) {\n              // If we have a saved environmentId, use it for an exact match (env-{id}-{param})\n              // to avoid selecting the wrong environment when multiple environments share param names.\n              let envOption: { id: string; name: string; value: string; environment: string } | undefined;\n              if (variable.selectedEnvironmentId != null) {\n                const exactId = `env-${variable.selectedEnvironmentId}-${paramName}`;\n                envOption = this.environmentOptions.find(env => env.id === exactId);\n              }\n              // Fallback: match by param name only (legacy / first-time save)\n              if (!envOption) {\n                envOption = this.environmentOptions.find(env => env.name === paramName);\n              }\n\n              if (envOption) {\n                variable.selectedEnvironment = envOption.environment;\n\n                // Extract and store environment ID from the option id\n                const idMatch = envOption.id.match(/env-(\\d+)-/);\n                if (idMatch && idMatch[1]) {\n                  variable.selectedEnvironmentId = parseInt(idMatch[1], 10);\n                }\n\n                // Set form controls\n                if (!variableGroup.get('selectedEnvironment')) {\n                  variableGroup.addControl('selectedEnvironment', new FormControl(envOption.environment));\n                } else {\n                  variableGroup.get('selectedEnvironment')?.setValue(envOption.environment, { emitEvent: false });\n                }\n                if (variableGroup.get('value')) {\n                  variableGroup.get('value')?.setValue(`*|${paramName}|`, { emitEvent: false });\n                }\n              }\n            }\n\n            // Step may only have environmentId (or value empty) while the env has multiple parameters:\n            // still bind Environment Name from saved id so the first dropdown preloads.\n            if (\n              !variable.selectedEnvironment &&\n              variable.selectedEnvironmentId != null &&\n              this.environmentOptions.length > 0\n            ) {\n              const prefix = `env-${variable.selectedEnvironmentId}-`;\n              const forEnv = this.environmentOptions.filter(env => env.id.indexOf(prefix) === 0);\n              const first = forEnv.length ? forEnv[0] : undefined;\n              if (first) {\n                variable.selectedEnvironment = first.environment;\n                const idMatch = first.id.match(/env-(\\d+)-/);\n                if (idMatch && idMatch[1]) {\n                  variable.selectedEnvironmentId = parseInt(idMatch[1], 10);\n                }\n                if (!variableGroup.get('selectedEnvironment')) {\n                  variableGroup.addControl('selectedEnvironment', new FormControl(first.environment));\n                } else {\n                  variableGroup.get('selectedEnvironment')?.setValue(first.environment, { emitEvent: false });\n                }\n                if (!paramName && forEnv.length === 1 && first.name) {\n                  const onlyParam = String(first.name).trim();\n                  if (onlyParam) {\n                    if (variableGroup.get('value')) {\n                      variableGroup.get('value')?.setValue(`*|${onlyParam}|`, { emitEvent: false });\n                    }\n                    variable.value = this.formatTestDataValue(onlyParam, 'environment');\n                  }\n                }\n              }\n            }\n          }\n          \n          // For element type, parse the value to extract screen name and element\n          if (this.isElementType(variable)) {\n            // Only try to find and set element if elementId exists in template data\n            // If no elementId, don't select anything - use default values\n            if (variable.elementId) {\n              let element: any = null;\n              \n              // Priority 1: Find by elementId (from setTemplateVariables)\n              element = this.elementOptions.find(el => el.id === variable.elementId);\n              \n              // Priority 2: Find by elementName if elementId search didn't find it (fallback)\n              if (!element && variable.elementName) {\n                element = this.elementOptions.find(el => el.name === variable.elementName);\n              }\n              \n              // Priority 3: Find by locatorValue (for backward compatibility)\n              if (!element && variable.value) {\n                const elementValue = variable.value;\n                element = this.elementOptions.find(el => el.locatorValue === elementValue);\n              }\n              \n              if (element) {\n                // Set screen name info from the found element\n                if (element.screenNameId) {\n                  variable.screenNameId = element.screenNameId;\n                  // Prefer screenNameObj.name; fall back to screenNameOptions lookup when screenNameObj\n                  // is absent (e.g. elements returned by findAll() may lack the nested object).\n                  if (!variable.selectedScreenName) {\n                    if (element.screenNameObj?.name) {\n                      variable.selectedScreenName = element.screenNameObj.name;\n                    } else {\n                      const snOption = this.screenNameOptions.find(sn => sn.id === element.screenNameId);\n                      if (snOption) {\n                        variable.selectedScreenName = snOption.name;\n                      }\n                    }\n                  }\n                  \n                  // Set form controls\n                  // Store screenNameId as string to match option id format (for consistency with getScreenNameSelectConfig)\n                  const screenNameIdString = String(element.screenNameId);\n                  if (!variableGroup.get('selectedScreenName')) {\n                    variableGroup.addControl('selectedScreenName', new FormControl(screenNameIdString));\n                  } else {\n                    // Only update if form control doesn't already have a valid screen name selected\n                    // This prevents resetting user's selection when elementOptions changes\n                    const currentValue = variableGroup.get('selectedScreenName')?.value;\n                    const currentValueStr = currentValue != null ? String(currentValue) : null;\n                    if (currentValueStr !== screenNameIdString && currentValueStr !== 'none') {\n                      variableGroup.get('selectedScreenName')?.setValue(screenNameIdString, { emitEvent: false });\n                    }\n                  }\n                }\n                \n                // Set/update element details from the found element\n                variable.elementId = element.id;\n                variable.elementLocator = element.locatorValue || '';\n                // Only update elementName if it wasn't already set (preserve from setTemplateVariables)\n                if (!variable.elementName) {\n                  variable.elementName = element.name || '';\n                }\n                \n                // For selector, use elementLocator as value; for others, use elementName\n                if (variable.name === 'selector') {\n                  variable.value = element.locatorValue || element.name || '';\n                } else if (!variable.value || variable.value === '') {\n                  variable.value = element.name || element.locatorValue || '';\n                }\n                \n                // Set element ID form control for the dropdown (key is 'id' in config)\n                if (!variableGroup.get('id')) {\n                  variableGroup.addControl('id', new FormControl(element.id));\n                } else {\n                  variableGroup.get('id')?.setValue(element.id, { emitEvent: false });\n                }\n                \n                // Update value form control\n                if (variableGroup.get('value')) {\n                  variableGroup.get('value')?.setValue(variable.value, { emitEvent: false });\n                }\n              } else {\n                // Element not found in elementOptions yet - might need to fetch\n                // Keep elementId and elementName if they exist (from setTemplateVariables)\n                // If we have elementId but element isn't found, we might need to fetch elements\n                // However, we don't know the screen name yet, so we'll wait for elementOptions to be loaded\n                // The initialization will run again when elementOptions changes via ngOnChanges\n              }\n            } else {\n              // No elementId in template data - clear all element-related fields and set defaults\n              // But don't override user's screen name selection if they've already selected one\n              variable.elementId = undefined;\n              variable.elementLocator = undefined;\n              variable.elementName = undefined;\n              \n              // Only clear screenNameId if it wasn't set by user selection\n              // Check if form control has a valid screen name (not 'none')\n              const currentScreenNameValue = variableGroup.get('selectedScreenName')?.value;\n              if (!currentScreenNameValue || currentScreenNameValue === 'none' || currentScreenNameValue === null) {\n                variable.screenNameId = undefined;\n                variable.selectedScreenName = undefined;\n                \n                // Set form controls to default values\n                // Screen name should be 'none' (Select option)\n                if (!variableGroup.get('selectedScreenName')) {\n                  variableGroup.addControl('selectedScreenName', new FormControl('none'));\n                } else {\n                  variableGroup.get('selectedScreenName')?.setValue('none', { emitEvent: false });\n                }\n              }\n              \n              // Element ID should be null\n              if (!variableGroup.get('id')) {\n                variableGroup.addControl('id', new FormControl(null));\n              } else {\n                variableGroup.get('id')?.setValue(null, { emitEvent: false });\n              }\n            }\n          }\n        }\n      }\n    });\n    \n    // Mark for check to ensure UI updates after initialization\n    this.cdr.markForCheck();\n  }\n  \n  /** Get form group for a variable by name from FormArray */\n  getVariableFormGroup(variableName: string): FormGroup | null {\n    const variableIndex = this.variablesForm.controls.findIndex(\n      control => (control as FormGroup).get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      return this.variablesForm.at(variableIndex) as FormGroup;\n    }\n    return null;\n  }\n  \n  /** Get form group at a specific index from FormArray (for template use) */\n  getFormGroupAt(index: number): FormGroup | null {\n    if (index >= 0 && index < this.variablesForm.length) {\n      return this.variablesForm.at(index) as FormGroup;\n    }\n    return null;\n  }\n  \n  private precomputeConfigs(): void {\n    if (!this.templateVariables) return;\n    \n    // Pre-compute all select configs\n    this.templateVariables.forEach((variable, index) => {\n      // Pre-compute regular select configs\n      if (this.shouldShowDropdown(variable)) {\n        this.getSelectConfig(variable, index);\n      }\n      \n      // Pre-compute data type select configs\n      if (this.needsDataTypeDropdown(variable)) {\n        this.getDataTypeSelectConfig(variable, index);\n        // Pre-compute parameter and environment select configs if needed\n        const dataType = variable.dataType || 'plain-text';\n        if (dataType === 'parameter') {\n          this.getTestDataProfileSelectConfig(variable, index);\n          // Pre-compute data set config if test data profile is already selected\n          if (variable.selectedTestDataProfile) {\n            this.getDataSetSelectConfig(variable, index);\n            // Pre-compute parameter config if data set is already selected\n            if (variable.selectedDataSet) {\n              this.getParameterSelectConfig(variable, index);\n            }\n          }\n        } else if (dataType === 'environment') {\n          this.getEnvironmentSelectConfig(variable, index);\n          // Pre-compute environment parameter config if environment is already selected\n          if (variable.selectedEnvironment) {\n            this.getEnvironmentParameterSelectConfig(variable, index);\n          }\n        }\n      }\n      \n      // Pre-compute element variable configs (screen name + element)\n      if (this.isElementType(variable)) {\n        this.getScreenNameSelectConfig(variable, index);\n        // Pre-compute element config if screen name is already selected\n        if (variable.selectedScreenName) {\n          this.getElementSelectConfig(variable, index);\n        }\n      }\n    });\n  }\n  \n  private parseTestDataValue(value: string): { dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment', rawValue: string } {\n    if (!value || typeof value !== 'string') {\n      return { dataType: 'plain-text', rawValue: '' };\n    }\n    \n    // Check for parameter format: @|value|\n    if (value.startsWith('@|') && value.endsWith('|')) {\n      return { dataType: 'parameter', rawValue: value.slice(2, -1) };\n    }\n    // Check for runtime format: $|value|\n    else if (value.startsWith('$|') && value.endsWith('|')) {\n      return { dataType: 'runtime', rawValue: value.slice(2, -1) };\n    }\n    // Check for environment format: *|value|\n    else if (value.startsWith('*|') && value.endsWith('|')) {\n      return { dataType: 'environment', rawValue: value.slice(2, -1) };\n    }\n    // Plain text (no formatting)\n    else {\n      return { dataType: 'plain-text', rawValue: value };\n    }\n  }\n  \n  private formatTestDataValue(rawValue: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment'): string {\n    if (!rawValue) {\n      return '';\n    }\n    \n    switch (dataType) {\n      case 'parameter':\n        return `@|${rawValue}|`;\n      case 'runtime':\n        return `$|${rawValue}|`;\n      case 'environment':\n        return `*|${rawValue}|`;\n      case 'plain-text':\n      default:\n        return rawValue;\n    }\n  }\n  \n  trackByVariable(index: number, variable: TemplateVariable): any {\n    return variable.name || index;\n  }\n  \n  getSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Use cache to avoid recalculating on every change detection\n    // For element variables, include elementOptions + hasMoreElements in cache key.\n    // Intentionally exclude isLoadingElements so search input instance stays stable while typing.\n    // For upload variables, include uploadOptions, hasMoreUploads, and isLoadingUploads in cache key\n    // Optimize cache key computation - use length instead of full array join for better performance\n    const isElementVariable = variable.dataKey === 'element' || variable.dataKey === 'label';\n    const isUploadVariable = variable.name === 'upload' && variable.type === 'dropdown';\n    \n    const optionsKey = isElementVariable\n      ? `${this.elementOptions.length}_${this.elementOptions.map(el => el.id || '').join(',')}`\n      : isUploadVariable\n      ? `${this.uploadOptions.length}_${this.uploadOptions.map((up: any) => up.id || up.name || '').join(',')}`\n      : `${variable.options?.length || 0}_${variable.options?.join(',') || ''}`;\n    \n    // Include hasMore and isLoading in cache key for element and upload variables\n    const cacheKey = isElementVariable\n      ? `${variable.name}_${optionsKey}_${this.hasMoreElements}`\n      : isUploadVariable\n      ? `${variable.name}_${optionsKey}_${this.hasMoreUploads}_${this.isLoadingUploads}`\n      : `${variable.name}_${optionsKey}`;\n    \n    if (this.selectConfigCache.has(cacheKey)) {\n      return this.selectConfigCache.get(cacheKey)!;\n    }\n\n    // Use elementOptions for element variables, uploadOptions for upload variables, otherwise use variable.options\n    let optionsArray: SelectOption[] = [];\n    if (isElementVariable) {\n      // For element options, use locatorValue as both id and value so the component returns locatorValue\n      // This ensures the selected value is the locatorValue (not the element id)\n      optionsArray = this.elementOptions\n        .map(el => {\n          const locatorValue = el.locatorValue || '';\n          return {\n            id: locatorValue, // Use locatorValue as id so it gets returned as the value\n            elementId: el.id?.toString() || '',\n            value: locatorValue, // Also set value for consistency\n            name: `${el.name} (${el.screenNameObj?.name || ''})`,\n            label: `${el.name} (${el.screenNameObj?.name || ''})`,\n            screenNameId: el.screenNameId?.toString() || '',\n            screenNameObj: el.screenNameObj,\n            otherLocator: el.otherLocator\n          };\n        });\n    } else if (isUploadVariable) {\n      // For upload options, map upload objects to SelectOption format\n      optionsArray = this.uploadOptions.map((upload: any) => {\n        // Assuming upload has id, name, or similar properties\n        const uploadId = upload.id?.toString() || upload.name || '';\n        const uploadName = upload.name || upload.fileName || uploadId;\n        return {\n          id: uploadId,\n          value: uploadId,\n          name: uploadName,\n          label: uploadName\n        };\n      });\n    } else {\n      optionsArray = variable.options?.map(opt => {return {id: opt.value, value: opt.value, name: opt.label, label: opt.label}}) as SelectOption[] || [];\n    }\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'value', // Use 'value' as key since we're accessing from FormArray\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: optionsArray,\n      onChange: (value: any) => {\n        this.onVariableValueChange(variable.name, value);\n      }\n    };\n    \n    // Add load more and search support for element variables\n    if (isElementVariable) {\n      config.searchable = true; // Enable search for selector dropdown\n      config.serverSearch = true; // Enable server-side search\n      config.hasMore = this.hasMoreElements;\n      config.isLoading = this.isLoadingElements;\n      config.onLoadMore = () => {\n        this.loadMoreElements.emit();\n      };\n      config.onSearch = (query: string) => {\n        // Emit search event when user types in the search box\n        this.searchElements.emit(query);\n      };\n    }\n    \n    // Add load more and search support for upload variables\n    if (isUploadVariable) {\n      config.searchable = true; // Enable search for upload dropdown\n      config.serverSearch = true; // Enable server-side search\n      config.hasMore = this.hasMoreUploads;\n      config.isLoading = this.isLoadingUploads;\n      config.onLoadMore = () => {\n        this.loadMoreUploads.emit();\n      };\n      config.onSearch = (query: string) => {\n        // Emit search event when user types in the search box\n        this.searchUploads.emit(query);\n      };\n    }\n    \n    this.selectConfigCache.set(cacheKey, config);\n    return config;\n  }\n  \n  onVariableValueChange(variableName: string, value: any): void {\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (!variable) return;\n    \n    // If this is a test-data variable, parse and update raw value and data type\n    if (this.needsDataTypeDropdown(variable)) {\n      const { dataType: parsedDataType, rawValue } = this.parseTestDataValue(value || '');\n      const currentDataType: 'plain-text' | 'parameter' | 'runtime' | 'environment' =\n        (variable.dataType as any) || 'plain-text';\n\n      // CRITICAL: When user is in 'parameter' mode and the value becomes empty (e.g., when\n      // selecting/changing test-data profile, which clears the value temporarily), we must\n      // NOT change the dataType back to 'plain-text'. Keep it as 'parameter'.\n      // Only change dataType if:\n      // 1. The parsed type matches current type (no change needed), OR\n      // 2. The value is not empty (user is actually typing/selecting a value), OR\n      // 3. We're switching FROM plain-text TO parameter (allow this transition)\n      let finalDataType = parsedDataType;\n      if (\n        currentDataType === 'parameter' &&\n        parsedDataType === 'plain-text' &&\n        (value === null || value === undefined || (typeof value === 'string' && value.trim() === ''))\n      ) {\n        // Keep as parameter - don't change to plain-text\n        finalDataType = 'parameter';\n      }\n\n      variable.dataType = finalDataType;\n      variable.rawValue = rawValue;\n      \n      // Update data type form control in FormArray\n      const variableGroup = this.getVariableFormGroup(variableName);\n      if (variableGroup && variableGroup.get('dataType')) {\n        variableGroup.get('dataType')?.setValue(finalDataType, { emitEvent: false });\n      }\n    }\n    \n    // Update the variable in templateVariables array\n    variable.value = value;\n    \n    // Also update form control in FormArray (use emitEvent: false to prevent triggering valueChanges)\n    const variableGroup = this.getVariableFormGroup(variableName);\n    if (variableGroup && variableGroup.get('value')) {\n      variableGroup.get('value')?.setValue(value, { emitEvent: false });\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n    \n    // Emit the change event\n    this.variableValueChange.emit({ name: variableName, value: value });\n  }\n  \n  onVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in templateVariables array\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form control in FormArray (use emitEvent: false to prevent triggering valueChanges)\n    const variableGroup = this.getVariableFormGroup(variableName);\n    if (variableGroup && variableGroup.get('value')) {\n      variableGroup.get('value')?.setValue(value, { emitEvent: false });\n    }\n    // Note: If variable doesn't exist in FormArray, it should be added by parent component\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n    \n    // Emit the change event\n    this.variableBooleanChange.emit({ name: variableName, value: value });\n  }\n  \n  shouldShowDropdown(variable: TemplateVariable): boolean {\n    // Type-override short-circuit (mirrors needsDataTypeDropdown): never show\n    // the generic dropdown for AI Ask / AI Verify's textarea or env-name fields.\n    if (variable?.type === 'textarea' || variable?.type === 'environment-name') {\n      return false;\n    }\n    // Use cache to avoid repeated calculations\n    if (this.shouldShowDropdownCache.has(variable.name)) {\n      return this.shouldShowDropdownCache.get(variable.name)!;\n    }\n    // For element variables (dataKey === 'element'), we use cascading dropdowns (screen name + element)\n    // So return false to use the cascading dropdown pattern\n    const result = variable.name === 'type' || variable.name === 'scrollTo' || variable.dataKey === 'label';\n    this.shouldShowDropdownCache.set(variable.name, result);\n    return result;\n  }\n  \n  needsDataTypeDropdown(variable: TemplateVariable): boolean {\n    // Type-override short-circuit: AI Ask / AI Verify mark `query` as\n    // 'textarea' and inject an 'environment-name' variable. Neither should\n    // surface the data-type dropdown.\n    if (variable?.type === 'textarea' || variable?.type === 'environment-name') {\n      return false;\n    }\n    // Use cache to avoid repeated calculations\n    if (this.needsDataTypeDropdownCache.has(variable.name)) {\n      return this.needsDataTypeDropdownCache.get(variable.name)!;\n    }\n    const dataKey = variable.dataKey?.toLowerCase() || '';\n    const result = dataKey === 'test_data' || dataKey === 'source_value' || dataKey === 'target_value';\n    this.needsDataTypeDropdownCache.set(variable.name, result);\n    return result;\n  }\n\n  /** True when the variable is the synthetic AI Ask / AI Verify environment dropdown. */\n  isEnvironmentNameType(variable: TemplateVariable): boolean {\n    return variable?.type === 'environment-name';\n  }\n\n  /**\n   * Builds the dynamic-select config for the synthetic AI Ask / AI Verify\n   * environment dropdown. Prepends a sentinel \"None\" entry (empty value) so\n   * the user can explicitly clear the choice — the empty value round-trips\n   * through onVariableValueChange → setValue('') → backend reads\n   * `event.environment` as '' and treats it as no environment context.\n   *\n   * Deduplicates by environment name to mirror getUniqueEnvironments() used\n   * by the existing test-data environment selector.\n   */\n  getEnvironmentNameSelectConfig(variable: TemplateVariable): DynamicSelectFieldConfig {\n    const cacheKey = `${variable.name}_environmentName`;\n    const cached = this.environmentNameSelectConfigCache.get(cacheKey);\n    if (cached) {\n      return cached;\n    }\n\n    // `environmentOptions` is a flat list of (environment × parameter) tuples\n    // shaped { id, name, value, environment }. We want one entry per unique\n    // environment, mirroring getUniqueEnvironments() used by the existing\n    // environment selector. Using `env.name` here would surface parameter\n    // names instead of environment names — that was the previous bug.\n    // Sentinel for the \"None\" option. Using the same string for `id` AND\n    // `value` matters: cqa-dynamic-select writes the option's `id` to the\n    // bound form control, so a mismatched `value: ''` would never round-trip\n    // — picking None would store the literal '__none__' in the form, the\n    // dropdown's pre-select would never match, and onChange wouldn't see a\n    // truly \"cleared\" signal. Keeping them aligned avoids that whole class.\n    const NONE_SENTINEL = '__none__';\n\n    const uniqueEnvironments = this.getUniqueEnvironments();\n    const envOptions: SelectOption[] = uniqueEnvironments.map(env => ({\n      id: env.id,\n      value: env.name,\n      name: env.name,\n      label: env.name,\n    }));\n    const none: SelectOption = {\n      id: NONE_SENTINEL,\n      value: NONE_SENTINEL,\n      name: 'None',\n      label: 'None',\n    };\n\n    // Pre-select on first render. Two paths:\n    //   (a) selectedEnvironmentId set → resolve env name from environmentOptions\n    //       (parses \"env-74-test\" → 74) and pre-set the form to that name.\n    //   (b) selectedEnvironmentId null → pre-set the form to NONE_SENTINEL so\n    //       the dropdown actively shows \"None\" instead of an empty placeholder\n    //       (per user request: \"when environment id is not available or null\n    //       we should display none as selected\").\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variable.selectedEnvironmentId != null) {\n      const envName = this.resolveEnvironmentNameById(Number(variable.selectedEnvironmentId));\n      if (envName) {\n        variable.value = envName;\n        variableGroup?.get('value')?.setValue(envName, { emitEvent: false });\n      } else {\n        // Env id present but not yet resolvable (env list still loading).\n        // Leave variable.value alone; the cache invalidation in ngOnChanges\n        // when environmentOptions arrives will rebuild this config.\n      }\n    } else {\n      variable.value = NONE_SENTINEL;\n      variableGroup?.get('value')?.setValue(NONE_SENTINEL, { emitEvent: false });\n    }\n\n    // The form group built by the parent (initializeVariablesForm) has\n    // controls { name, value } per variable. cqa-dynamic-select binds\n    // internally via formControlName, so the `key` here MUST match an\n    // existing control in the group — using `variable.name` ('environment')\n    // makes Angular look up a control that doesn't exist and throws\n    // `Cannot read properties of null (reading '_rawValidators')`.\n    const config: DynamicSelectFieldConfig = {\n      key: 'value',\n      placeholder: 'Select Environment',\n      multiple: false,\n      searchable: true,\n      options: [none, ...envOptions],\n      onChange: (value: any) => {\n        // None / empty / nullish all collapse to the cleared signal.\n        const isNone = value == null || value === '' || value === NONE_SENTINEL;\n        const envName = isNone ? NONE_SENTINEL : String(value);\n        this.onVariableValueChange(variable.name, envName);\n\n        if (isNone) {\n          // Cleared via None — explicitly drop the previous env id so the\n          // parent's save logic (edit-depth-modal.onSave, lines ~1714-1735)\n          // sees the cleared state and nulls testStep.environmentId.\n          variable.selectedEnvironmentId = undefined;\n          return;\n        }\n\n        // Mirror getEnvironmentSelectConfig: extract numeric env id from\n        // environmentOptions[].id (format \"env-74-test\" → 74) and store on\n        // the variable so edit-depth-modal.onSave() picks it up via the\n        // existing dataType==='environment' + selectedEnvironmentId path\n        // that derives step.environmentId.\n        const envOption = this.environmentOptions.find(env => env.environment === envName);\n        if (envOption) {\n          const idMatch = envOption.id.match(/env-(\\d+)-/);\n          if (idMatch && idMatch[1]) {\n            variable.selectedEnvironmentId = parseInt(idMatch[1], 10);\n          }\n        }\n      },\n    } as DynamicSelectFieldConfig;\n\n    this.environmentNameSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /** Look up an environment's display name from the numeric id stored on the variable. */\n  private resolveEnvironmentNameById(envId: number): string | null {\n    if (envId == null || !Number.isFinite(envId)) return null;\n    const target = String(envId);\n    const match = (this.environmentOptions || []).find(env => {\n      const m = (env.id || '').match(/env-(\\d+)-/);\n      return m && m[1] === target;\n    });\n    return match ? match.environment : null;\n  }\n  \n  getDataTypeOptions(): SelectOption[] {\n    // Hide @|Parameter| when the step is not inside a FOR loop AND the test case has no test data profile.\n    if (!this.isInsideForLoopStep && !this.hasTestDataProfile) {\n      return this.dataTypeOptions.filter(opt => opt.value !== 'parameter');\n    }\n    return this.dataTypeOptions;\n  }\n  \n  getDataTypeSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Use cache to avoid recalculating on every change detection\n    const cacheKey = `${variable.name}_dataType`;\n    if (this.dataTypeSelectConfigCache.has(cacheKey)) {\n      return this.dataTypeSelectConfigCache.get(cacheKey)!;\n    }\n    \n    // Ensure form control exists in FormArray\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup && !variableGroup.get('dataType')) {\n      const currentDataType = variable.dataType || 'plain-text';\n      variableGroup.addControl('dataType', new FormControl(currentDataType));\n    }\n    \n    const config: DynamicSelectFieldConfig = {\n      key: 'dataType', // Use 'dataType' as key since we're accessing from FormArray\n      placeholder: 'Select Type',\n      multiple: false,\n      searchable: false,\n      options: this.getDataTypeOptions(),\n      onChange: (value: any) => {\n        this.onDataTypeChange(variable.name, value);\n      }\n    };\n    \n    this.dataTypeSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n  \n  getCurrentDataType(variable: TemplateVariable): 'plain-text' | 'parameter' | 'runtime' | 'environment' {\n    return variable.dataType || 'plain-text';\n  }\n  \n  getRawValue(variable: TemplateVariable): string {\n    return variable.rawValue || '';\n  }\n\n  /**\n   * Check if selector variable is available in templateVariables\n   */\n  get selectorVariableAvailable(): boolean {\n    return this.templateVariables.some(v => v.dataKey === 'element' || v.dataKey === 'label');\n  }\n\n  /**\n   * Check if parameter variable is available (testData with parameter type)\n   */\n  get parameterVariableAvailable(): boolean {\n    return this.templateVariables.some(v => {\n      const dataKey = v.dataKey?.toLowerCase() || '';\n      if (dataKey === 'test_data' || dataKey === 'source_value' || dataKey === 'target_value') {\n        const dataType = v.dataType || 'plain-text';\n        return dataType === 'parameter';\n      }\n      return false;\n    });\n  }\n\n  /**\n   * Check if environment variable is available (testData with environment type)\n   */\n  get environmentVariableAvailable(): boolean {\n    return this.templateVariables.some(v => {\n      const dataKey = v.dataKey?.toLowerCase() || '';\n      if (dataKey === 'test_data' || dataKey === 'source_value' || dataKey === 'target_value') {\n        const dataType = v.dataType || 'plain-text';\n        return dataType === 'environment';\n      }\n      return false;\n    });\n  }\n  \n  onDataTypeChange(variableName: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment'): void {\n    // Find the variable\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (!variable) return;\n    \n    // Update stored data type on the variable object\n    variable.dataType = dataType;\n    \n    // Clear parameter and environment select config caches since data type changed\n    this.testDataProfileSelectConfigCache.delete(`${variableName}_testDataProfile`);\n    this.dataSetSelectConfigCache.delete(`${variableName}_dataSet`);\n    this.dataSetRangeSelectConfigCache.clear();\n    this.parameterForDataSetSelectConfigCache.delete(`${variableName}_paramForDataSet`);\n    this.environmentSelectConfigCache.delete(`${variableName}_environment`);\n    this.environmentParameterSelectConfigCache.delete(`${variableName}_envParam`);\n    \n    // Get the variable group\n    const variableGroup = this.getVariableFormGroup(variableName);\n    \n    // Clear selected test data profile and data set if switching away from parameter type\n    if (dataType !== 'parameter') {\n      variable.selectedTestDataProfile = undefined;\n      variable.selectedTestDataProfileId = undefined;\n      variable.selectedDataSet = undefined;\n      variable.selectedDataSetStart = undefined;\n      variable.selectedDataSetEnd = undefined;\n      variable.rawValue = '';\n      \n      // Remove parameter-related form controls when switching away from parameter type\n      if (variableGroup) {\n        if (variableGroup.get('selectedTestDataProfile')) {\n          variableGroup.removeControl('selectedTestDataProfile');\n        }\n        if (variableGroup.get('selectedDataSet')) {\n          variableGroup.removeControl('selectedDataSet');\n        }\n        if (variableGroup.get('selectedDataSetStart')) {\n          variableGroup.removeControl('selectedDataSetStart');\n        }\n        if (variableGroup.get('selectedDataSetEnd')) {\n          variableGroup.removeControl('selectedDataSetEnd');\n        }\n      }\n    } else {\n      // When switching TO parameter type, clear previous selections to start fresh\n      // (unless default values are provided, which will be set below)\n      if (!this.defaultTestDataProfileId || this.defaultTestDataStartIndex == null) {\n        variable.selectedTestDataProfile = undefined;\n        variable.selectedTestDataProfileId = undefined;\n        variable.selectedDataSet = undefined;\n        variable.selectedDataSetStart = undefined;\n        variable.selectedDataSetEnd = undefined;\n        variable.selectedDataSetStart = undefined;\n        variable.selectedDataSetEnd = undefined;\n        variable.rawValue = '';\n        \n        // Clear form controls if they exist\n        if (variableGroup) {\n          if (variableGroup.get('selectedTestDataProfile')) {\n            variableGroup.get('selectedTestDataProfile')?.setValue('', { emitEvent: false });\n          }\n          if (variableGroup.get('selectedDataSet')) {\n            variableGroup.get('selectedDataSet')?.setValue('', { emitEvent: false });\n          }\n          if (variableGroup.get('selectedDataSetStart')) {\n            variableGroup.get('selectedDataSetStart')?.setValue('', { emitEvent: false });\n          }\n          if (variableGroup.get('selectedDataSetEnd')) {\n            variableGroup.get('selectedDataSetEnd')?.setValue('', { emitEvent: false });\n          }\n        }\n      }\n    }\n    \n    // Clear selected environment if switching away from environment type\n    if (dataType !== 'environment') {\n      variable.selectedEnvironment = undefined;\n      variable.selectedEnvironmentId = undefined;\n      \n      // Remove environment-related form controls\n      if (variableGroup && variableGroup.get('selectedEnvironment')) {\n        variableGroup.removeControl('selectedEnvironment');\n      }\n    }\n    \n    // Clear value when switching data types (start fresh)\n    variable.value = '';\n    \n    // Format the value based on new data type (will be empty string)\n    const formattedValue = this.formatTestDataValue('', dataType);\n    \n    // Update variable value (always store formatted value in variable)\n    variable.value = formattedValue;\n    \n    // Update form control in FormArray\n    if (variableGroup) {\n      if (variableGroup.get('value')) {\n        // For all types, start with empty value when switching\n        variableGroup.get('value')?.setValue('', { emitEvent: false });\n        \n        // For environment type, also clear selectedEnvironment\n        if (dataType === 'environment' && variableGroup.get('selectedEnvironment')) {\n          variableGroup.get('selectedEnvironment')?.setValue('', { emitEvent: false });\n        }\n      }\n    }\n    \n    // If switching to parameter type, check for default values and initialize them\n    if (dataType === 'parameter') {\n      const index = this.templateVariables.indexOf(variable);\n      // Check if default test data profile is provided from test case/FOR context.\n      // Even when default start index is missing, profile should still be preselected.\n      if (this.defaultTestDataProfileId != null && this.parameterOptions.length > 0) {\n        // Find the test data profile by ID (numeric-safe match for string/number IDs)\n        const defaultProfile = this.parameterOptions.find((testData: any) =>\n          Number(testData.id) === Number(this.defaultTestDataProfileId)\n        );\n        if (defaultProfile) {\n          const profileName = defaultProfile.name || defaultProfile.testDataName;\n          const profileData: any[] = Array.isArray(defaultProfile.data) ? defaultProfile.data : [];\n          const defaultStartIndex = this.defaultTestDataStartIndex != null ? this.defaultTestDataStartIndex : 0;\n          const resolvedStartIndex = profileData.length > 0\n            ? Math.min(Math.max(defaultStartIndex, 0), profileData.length - 1)\n            : -1;\n          const defaultDataSet = resolvedStartIndex >= 0 ? profileData[resolvedStartIndex] : null;\n          const dataSetName = defaultDataSet?.name || '';\n\n          // Always set selected profile when default profile is available.\n          variable.selectedTestDataProfile = profileName;\n          variable.selectedTestDataProfileId = defaultProfile.id;\n          variable.selectedDataSet = dataSetName || undefined;\n          if (this.isInsideForLoopStep && dataSetName) {\n            variable.selectedDataSetStart = dataSetName;\n            if (this.defaultTestDataEndIndex != null && profileData.length > this.defaultTestDataEndIndex) {\n              const endDataSet = profileData[this.defaultTestDataEndIndex];\n              variable.selectedDataSetEnd = endDataSet?.name || dataSetName;\n            } else {\n              variable.selectedDataSetEnd = dataSetName;\n            }\n          }\n\n          // Set form controls with the actual values so dropdowns display selected options.\n          if (variableGroup) {\n            const profileIdString = String(defaultProfile.id);\n            if (!variableGroup.get('selectedTestDataProfile')) {\n              variableGroup.addControl('selectedTestDataProfile', new FormControl(profileIdString));\n            } else {\n              variableGroup.get('selectedTestDataProfile')?.setValue(profileIdString, { emitEvent: false });\n            }\n\n            if (dataSetName) {\n              if (!variableGroup.get('selectedDataSet')) {\n                variableGroup.addControl('selectedDataSet', new FormControl(dataSetName));\n              } else {\n                variableGroup.get('selectedDataSet')?.setValue(dataSetName, { emitEvent: false });\n              }\n            }\n\n            if (this.isInsideForLoopStep && dataSetName) {\n              if (!variableGroup.get('selectedDataSetStart')) {\n                variableGroup.addControl('selectedDataSetStart', new FormControl(variable.selectedDataSetStart || dataSetName));\n              } else {\n                variableGroup.get('selectedDataSetStart')?.setValue(variable.selectedDataSetStart || dataSetName, { emitEvent: false });\n              }\n              if (!variableGroup.get('selectedDataSetEnd')) {\n                variableGroup.addControl('selectedDataSetEnd', new FormControl(variable.selectedDataSetEnd || dataSetName));\n              } else {\n                variableGroup.get('selectedDataSetEnd')?.setValue(variable.selectedDataSetEnd || dataSetName, { emitEvent: false });\n              }\n            }\n          }\n\n          // Clear caches to force recomputation of configs with new values.\n          this.testDataProfileSelectConfigCache.delete(`${variableName}_testDataProfile`);\n          const dataSetKeysToDelete: string[] = [];\n          this.dataSetSelectConfigCache.forEach((value, key) => {\n            if (key.startsWith(`${variableName}_dataSet`)) {\n              dataSetKeysToDelete.push(key);\n            }\n          });\n          dataSetKeysToDelete.forEach(key => this.dataSetSelectConfigCache.delete(key));\n          this.dataSetRangeSelectConfigCache.clear();\n          const paramKeysToDelete: string[] = [];\n          this.parameterForDataSetSelectConfigCache.forEach((value, key) => {\n            if (key.startsWith(`${variableName}_paramForDataSet`)) {\n              paramKeysToDelete.push(key);\n            }\n          });\n          paramKeysToDelete.forEach(key => this.parameterForDataSetSelectConfigCache.delete(key));\n        }\n      }\n    }\n    \n    // Pre-compute the new select config if needed\n    if (variable) {\n      const index = this.templateVariables.indexOf(variable);\n      if (dataType === 'parameter') {\n        // Pre-compute test data profile config\n        this.getTestDataProfileSelectConfig(variable, index);\n        // If a profile is already selected, pre-compute data set config\n        if (variable.selectedTestDataProfile) {\n          this.getDataSetSelectConfig(variable, index);\n          // If a data set is already selected, pre-compute parameter config\n          if (variable.selectedDataSet) {\n            this.getParameterSelectConfig(variable, index);\n          }\n        }\n      } else if (dataType === 'environment') {\n        this.getEnvironmentSelectConfig(variable, index);\n      }\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n    console.log('onDataTypeChange', variableName, dataType, formattedValue);\n    // Emit the change event with formatted value\n    this.variableValueChange.emit({ name: variableName, value: formattedValue });\n  }\n  \n  onElementSearch(event: { key: string; query: string }): void {\n    // Only handle search for selector variables\n    // The key will be 'value' since that's what we set in the config\n    // Emit the search query to parent component\n    this.searchElements.emit(event.query);\n  }\n\n  // Tracks active variable-syntax errors by variable name. The validator below\n  // reads from this map so errors survive control re-validation on setValue().\n  private readonly variableSyntaxErrors = new Map<string, string>();\n  private readonly controlsWithSyntaxValidator = new WeakSet<AbstractControl>();\n\n  private makeSyntaxValidator(variableName: string): ValidatorFn {\n    return () => {\n      const err = this.variableSyntaxErrors.get(variableName);\n      return err ? { invalidVariableSyntax: err } : null;\n    };\n  }\n\n  onTestDataValidityChange(\n    variableName: string,\n    event: { valid: boolean; error: string | null },\n  ): void {\n    const valueControl = this.getVariableFormGroup(variableName)?.get('value');\n    if (!valueControl) return;\n\n    if (event.valid) {\n      this.variableSyntaxErrors.delete(variableName);\n    } else {\n      this.variableSyntaxErrors.set(variableName, event.error || 'Invalid variable name.');\n    }\n\n    if (!this.controlsWithSyntaxValidator.has(valueControl)) {\n      valueControl.addValidators(this.makeSyntaxValidator(variableName));\n      this.controlsWithSyntaxValidator.add(valueControl);\n    }\n    valueControl.updateValueAndValidity({ emitEvent: false });\n    valueControl.markAsTouched();\n    this.cdr.markForCheck();\n  }\n\n  onTestDataValueChange(variableName: string, rawValue: string): void {\n    // Find the variable\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (!variable) return;\n    \n    // Update stored raw value on the variable object\n    variable.rawValue = rawValue;\n    \n    // Get current data type\n    const dataType = variable.dataType || 'plain-text';\n    \n    // Format the value based on data type\n    const formattedValue = this.formatTestDataValue(rawValue, dataType);\n    \n    // Update variable value\n    variable.value = formattedValue;\n    \n    // Update form control in FormArray\n    const variableGroup = this.getVariableFormGroup(variableName);\n    if (variableGroup && variableGroup.get('value')) {\n      variableGroup.get('value')?.setValue(formattedValue, { emitEvent: false });\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n    \n    // Emit the change event\n    this.variableValueChange.emit({ name: variableName, value: formattedValue });\n  }\n\n  /**\n   * Get unique test data profiles from parameter options (raw TestData objects)\n   */\n  getUniqueTestDataProfiles(): { id: string; name: string }[] {\n    const profileMap = new Map<string, { id: string; name: string }>();\n    this.parameterOptions.forEach((testData: any) => {\n      // testData.name is the testDataName (profile name)\n      const profileName = testData.name || testData.testDataName;\n      if (profileName && !profileMap.has(profileName)) {\n        profileMap.set(profileName, {\n          id: String(testData.id),\n          name: profileName\n        });\n      }\n    });\n    // Also include any snapshotted profiles that aren't in the current parameterOptions\n    this.selectedParameterProfileSnapshot.forEach((profile: any) => {\n      const profileName = profile.name || profile.testDataName;\n      if (profileName && !profileMap.has(profileName)) {\n        profileMap.set(profileName, {\n          id: String(profile.id),\n          name: profileName\n        });\n      }\n    });\n    const profiles = Array.from(profileMap.values());\n    return profiles;\n  }\n\n  /**\n   * Get data sets for a specific test data profile\n   * Returns all data sets from the profile's data array\n   */\n  getDataSetsForTestDataProfile(profileId: string): { id: string; name: string }[] {\n    // Find the test data profile by id, fallback to snapshot if not in current parameterOptions\n    let testDataProfile = this.parameterOptions.find((testData: any) => {\n      return testData.id === Number(profileId);\n    });\n    if (!testDataProfile) {\n      testDataProfile = this.findProfileInSnapshot(Number(profileId));\n    }\n\n    if (!testDataProfile || !testDataProfile.data || testDataProfile.data.length === 0) {\n      return [];\n    }\n    \n    // Return all data sets from the profile\n    return testDataProfile.data.map((dataSet: any) => ({\n      id: dataSet.name,\n      name: dataSet.name\n    }));\n  }\n\n  /**\n   * Get parameters for a specific data set in a test data profile\n   * Extracts parameter names from the selected data set's data object\n   */\n  getParametersForDataSet(profileIdOrName: string, dataSetName: string): { id: string; name: string }[] {\n    // Find the test data profile by id or name, fallback to snapshot\n    let testDataProfile = this.parameterOptions.find((testData: any) => {\n      const idMatch = !isNaN(Number(profileIdOrName)) && testData.id === Number(profileIdOrName);\n      const nameMatch = (testData.name || testData.testDataName) === profileIdOrName;\n      return idMatch || nameMatch;\n    });\n    if (!testDataProfile && !isNaN(Number(profileIdOrName))) {\n      testDataProfile = this.findProfileInSnapshot(Number(profileIdOrName));\n    }\n\n    if (!testDataProfile || !testDataProfile.data || testDataProfile.data.length === 0) {\n      return [];\n    }\n    \n    // Find the specific data set by name\n    const dataSet = testDataProfile.data.find((ds: any) => ds.name === dataSetName);\n    if (!dataSet || !dataSet.data) {\n      return [];\n    }\n    \n    // Get all parameter keys from the data set's data object\n    const parameterNames = Object.keys(dataSet.data);\n    return parameterNames.map(paramName => ({\n      id: paramName,\n      name: paramName,\n    }));\n  }\n\n  /**\n   * Find a profile in the snapshot by numeric ID.\n   * Used as fallback when parameterOptions is temporarily filtered by another variable's search.\n   */\n  private findProfileInSnapshot(profileId: number): any | undefined {\n    for (const profile of this.selectedParameterProfileSnapshot.values()) {\n      if (profile && profile.id === profileId) {\n        return profile;\n      }\n    }\n    return undefined;\n  }\n\n  /**\n   * Get select config for test data profile dropdown (first dropdown for parameters)\n   */\n  getTestDataProfileSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    const cacheKey = `${variable.name}_testDataProfile`;\n    \n    // Get unique test data profiles\n    const profiles = this.getUniqueTestDataProfiles();\n    // Create options with profile name and ID (display name with ID)\n    let optionsArray: SelectOption[] = profiles.map(profile => {\n      // Find the test data profile to get the ID\n      const testDataProfile = this.parameterOptions.find((testData: any) => {\n        const name = testData.name || testData.testDataName;\n        return name === profile.name;\n      });\n      const profileId = testDataProfile?.id || profile.id;\n      \n      return {\n        id: String(profileId),\n        value: profile.name,\n        name: `${profile.name}`, // Display name with ID\n        label: `${profile.name}`\n      };\n    });\n\n    // Ensure form control exists for test data profile selection and update it\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup) {\n      if (!variableGroup.get('selectedTestDataProfile')) {\n        // Use profile ID if available, otherwise use profile name\n        const currentValue = variable.selectedTestDataProfileId \n          ? String(variable.selectedTestDataProfileId) \n          : (variable.selectedTestDataProfile || '');\n        variableGroup.addControl('selectedTestDataProfile', new FormControl(currentValue));\n      }\n      \n      // Always update form control value if variable has a selected profile\n      // This ensures the value is set even if config was cached\n      // Use profile ID (which matches opt.id) instead of profile name (which matches opt.value)\n      if (variable.selectedTestDataProfileId != null) {\n        const profileIdString = String(variable.selectedTestDataProfileId);\n        // Verify the profile ID exists in options before setting\n        const profileExists = optionsArray.some(opt => opt.id === profileIdString);\n        if (profileExists) {\n          const currentControlValue = variableGroup.get('selectedTestDataProfile')?.value;\n          if (currentControlValue !== profileIdString) {\n            variableGroup.get('selectedTestDataProfile')?.setValue(profileIdString, { emitEvent: false });\n          }\n        }\n      } else if (variable.selectedTestDataProfile) {\n        // Fallback: if we only have the profile name, find the matching option and use its ID\n        const matchingOption = optionsArray.find(opt => opt.value === variable.selectedTestDataProfile);\n        if (matchingOption) {\n          const currentControlValue = variableGroup.get('selectedTestDataProfile')?.value;\n          if (currentControlValue !== matchingOption.id) {\n            variableGroup.get('selectedTestDataProfile')?.setValue(matchingOption.id, { emitEvent: false });\n            // Also update the variable's profile ID for consistency\n            variable.selectedTestDataProfileId = Number(matchingOption.id);\n          }\n        }\n      }\n    }\n\n    // Ensure the currently selected profile is always in the options list so when the user\n    // reopens the select after searching/selecting, the selected option still shows.\n    const currentFormValue = variableGroup?.get('selectedTestDataProfile')?.value;\n    const selectedId = variable.selectedTestDataProfileId != null ? String(variable.selectedTestDataProfileId) : (currentFormValue != null && currentFormValue !== '' ? String(currentFormValue) : null);\n    if (selectedId && !optionsArray.some(opt => String(opt.id) === selectedId)) {\n      const displayName = variable.selectedTestDataProfile || selectedId;\n      optionsArray = [\n        { id: selectedId, value: displayName, name: displayName, label: displayName },\n        ...optionsArray\n      ];\n    }\n\n    // Only use cache if the cached config's options include the current selection (so reopening shows selected)\n    if (this.testDataProfileSelectConfigCache.has(cacheKey)) {\n      const cached = this.testDataProfileSelectConfigCache.get(cacheKey)!;\n      const controlVal = variableGroup?.get('selectedTestDataProfile')?.value;\n      const selectedInCached = controlVal == null || controlVal === '' || (cached.options || []).some((o: SelectOption) => String(o.id) === String(controlVal) || o.value === controlVal);\n      if (selectedInCached) {\n        return cached;\n      }\n      this.testDataProfileSelectConfigCache.delete(cacheKey);\n    }\n\n    // Check if default values are set - if so, disable the dropdown\n    const isDisabled = this.hasDefaultTestDataSelection();\n    \n    const config: DynamicSelectFieldConfig = {\n      key: 'selectedTestDataProfile',\n      placeholder: 'Select Test Data Profile',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: optionsArray,\n      hasMore: this.hasMoreParameters,\n      isLoading: this.isLoadingParameters,\n      disabled: isDisabled,\n      onSearch: (query: string) => {\n        this.activeParameterSearchVariable = variable.name;\n        this.searchParameters.emit(query);\n      },\n      onLoadMore: (query?: string) => {\n        this.loadMoreParameters.emit();\n      },\n      onChange: (value: any) => {\n        // Value is the profile ID (string) from the mat-option\n        // Find the test data profile by ID to get the name\n        const testDataProfile = this.parameterOptions.find((testData: any) => {\n          return testData.id === Number(value);\n        });\n        \n        // Store both ID and name\n        variable.selectedTestDataProfileId = testDataProfile?.id;\n        variable.selectedTestDataProfile = testDataProfile?.name || testDataProfile?.testDataName || '';\n\n        // Snapshot the full profile so it survives if another variable triggers a search\n        if (testDataProfile) {\n          this.selectedParameterProfileSnapshot.set(variable.name, testDataProfile);\n        }\n\n        // Clear data set and parameter selection when profile changes\n        variable.selectedDataSet = undefined;\n        variable.selectedDataSetStart = undefined;\n        variable.selectedDataSetEnd = undefined;\n        variable.rawValue = '';\n        variable.value = '';\n        \n        // Update form controls\n        const varGroup = this.getVariableFormGroup(variable.name);\n        if (varGroup) {\n          if (varGroup.get('selectedTestDataProfile')) {\n            varGroup.get('selectedTestDataProfile')?.setValue(value, { emitEvent: false });\n          }\n          if (varGroup.get('selectedDataSet')) {\n            varGroup.get('selectedDataSet')?.setValue('', { emitEvent: false });\n          }\n          if (varGroup.get('selectedDataSetStart')) {\n            varGroup.get('selectedDataSetStart')?.setValue('', { emitEvent: false });\n          }\n          if (varGroup.get('selectedDataSetEnd')) {\n            varGroup.get('selectedDataSetEnd')?.setValue('', { emitEvent: false });\n          }\n          if (varGroup.get('value')) {\n            varGroup.get('value')?.setValue('', { emitEvent: false });\n          }\n        }\n        \n        // Clear caches for data set and parameter select configs since profile changed\n        // Clear all data set and parameter configs for this variable\n        const dataSetKeysToDelete: string[] = [];\n        this.dataSetSelectConfigCache.forEach((value: DynamicSelectFieldConfig, key: string) => {\n          if (key.startsWith(`${variable.name}_dataSet`)) {\n            dataSetKeysToDelete.push(key);\n          }\n        });\n        dataSetKeysToDelete.forEach(key => this.dataSetSelectConfigCache.delete(key));\n        this.dataSetRangeSelectConfigCache.clear();\n        \n        const paramKeysToDelete: string[] = [];\n        this.parameterForDataSetSelectConfigCache.forEach((value: DynamicSelectFieldConfig, key: string) => {\n          if (key.startsWith(`${variable.name}_paramForDataSet`)) {\n            paramKeysToDelete.push(key);\n          }\n        });\n        paramKeysToDelete.forEach(key => this.parameterForDataSetSelectConfigCache.delete(key));\n        \n        // Clear selected data set when profile changes\n        variable.selectedDataSet = undefined;\n        \n        // Mark for check\n        this.cdr.markForCheck();\n      }\n    };\n\n    this.testDataProfileSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get select config for data set dropdown (second dropdown for parameters - shows data sets from selected profile)\n   */\n  getDataSetSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Get selected test data profile ID (preferred) or name (fallback)\n    const selectedProfileId = variable.selectedTestDataProfileId;\n    const selectedProfile = variable.selectedTestDataProfile;\n    \n    if (!selectedProfileId && !selectedProfile) {\n      // Return empty config if no profile is selected\n      return {\n        key: 'selectedDataSet',\n        placeholder: 'Select Test Data Profile first',\n        multiple: false,\n        searchable: false,\n        options: []\n      };\n    }\n\n    // Use profile ID if available, otherwise find ID from profile name\n    let profileIdToUse: string;\n    if (selectedProfileId) {\n      profileIdToUse = String(selectedProfileId);\n    } else {\n      // Find the profile ID from the profile name\n      const testDataProfile = this.parameterOptions.find((testData: any) => {\n        const name = testData.name || testData.testDataName;\n        return name === selectedProfile;\n      });\n      profileIdToUse = testDataProfile?.id ? String(testDataProfile.id) : '';\n    }\n\n    // Use profile ID for cache key if available, otherwise use profile name\n    const cacheKey = `${variable.name}_dataSet_${profileIdToUse || selectedProfile || ''}`;\n    if (this.dataSetSelectConfigCache.has(cacheKey)) {\n      return this.dataSetSelectConfigCache.get(cacheKey)!;\n    }\n\n    // Get data sets for the selected test data profile using ID\n    const dataSets = this.getDataSetsForTestDataProfile(profileIdToUse);\n    const optionsArray: SelectOption[] = dataSets.map(dataSet => ({\n      id: dataSet.name,\n      value: dataSet.name,\n      name: dataSet.name,\n      label: dataSet.name\n    }));\n\n    // Ensure form control exists for data set selection\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup) {\n      if (!variableGroup.get('selectedDataSet')) {\n        const currentDataSet = variable.selectedDataSet || '';\n        variableGroup.addControl('selectedDataSet', new FormControl(currentDataSet));\n      } else {\n        // Update form control value if variable has a selected data set\n        if (variable.selectedDataSet) {\n          variableGroup.get('selectedDataSet')?.setValue(variable.selectedDataSet, { emitEvent: false });\n        }\n      }\n    }\n\n    // Check if default values are set - if so, disable the dropdown\n    const isDisabled = this.hasDefaultTestDataSelection();\n    \n    const config: DynamicSelectFieldConfig = {\n      key: 'selectedDataSet',\n      placeholder: 'Select Data Set',\n      multiple: false,\n      searchable: false,\n      options: optionsArray,\n      hasMore: false,\n      isLoading: false,\n      disabled: isDisabled,\n      onChange: (value: any) => {\n        // Store selected data set\n        variable.selectedDataSet = value;\n        \n        // Clear parameter selection when data set changes\n        variable.rawValue = '';\n        variable.value = '';\n        \n        // Update form controls\n        const varGroup = this.getVariableFormGroup(variable.name);\n        if (varGroup) {\n          if (varGroup.get('selectedDataSet')) {\n            varGroup.get('selectedDataSet')?.setValue(value, { emitEvent: false });\n          }\n          if (varGroup.get('value')) {\n            varGroup.get('value')?.setValue('', { emitEvent: false });\n          }\n        }\n        \n        // Clear caches for parameter select config since data set changed\n        const paramKeysToDelete: string[] = [];\n        this.parameterForDataSetSelectConfigCache.forEach((configValue, key) => {\n          if (key.startsWith(`${variable.name}_paramForDataSet_`)) {\n            paramKeysToDelete.push(key);\n          }\n        });\n        paramKeysToDelete.forEach(key => this.parameterForDataSetSelectConfigCache.delete(key));\n        \n        // Mark for check\n        this.cdr.markForCheck();\n      }\n    };\n\n    this.dataSetSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /** Data Set Start/End select config for FOR-loop context. */\n  getDataSetRangeSelectConfig(variable: TemplateVariable, index: number, range: 'start' | 'end'): DynamicSelectFieldConfig {\n    const selectedProfileId = variable.selectedTestDataProfileId;\n    const selectedProfile = variable.selectedTestDataProfile;\n    if (!selectedProfileId && !selectedProfile) {\n      return {\n        key: range === 'start' ? 'selectedDataSetStart' : 'selectedDataSetEnd',\n        placeholder: 'Select Test Data Profile first',\n        multiple: false,\n        searchable: false,\n        options: []\n      };\n    }\n\n    let profileIdToUse: string;\n    if (selectedProfileId) {\n      profileIdToUse = String(selectedProfileId);\n    } else {\n      const testDataProfile = this.parameterOptions.find((testData: any) => {\n        const name = testData.name || testData.testDataName;\n        return name === selectedProfile;\n      });\n      profileIdToUse = testDataProfile?.id ? String(testDataProfile.id) : '';\n    }\n\n    const cacheKey = `${variable.name}_dataSetRange_${range}_${profileIdToUse || selectedProfile || ''}`;\n    if (this.dataSetRangeSelectConfigCache.has(cacheKey)) {\n      return this.dataSetRangeSelectConfigCache.get(cacheKey)!;\n    }\n\n    const dataSets = this.getDataSetsForTestDataProfile(profileIdToUse);\n    const optionsArray: SelectOption[] = dataSets.map(dataSet => ({\n      id: dataSet.name,\n      value: dataSet.name,\n      name: dataSet.name,\n      label: dataSet.name\n    }));\n\n    const key = range === 'start' ? 'selectedDataSetStart' : 'selectedDataSetEnd';\n    const currentVal = range === 'start' ? (variable.selectedDataSetStart || '') : (variable.selectedDataSetEnd || '');\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup) {\n      if (!variableGroup.get(key)) {\n        variableGroup.addControl(key, new FormControl(currentVal));\n      } else if (currentVal && variableGroup.get(key)?.value !== currentVal) {\n        variableGroup.get(key)?.setValue(currentVal, { emitEvent: false });\n      }\n    }\n\n    const isDisabled = this.hasDefaultTestDataSelection();\n    const config: DynamicSelectFieldConfig = {\n      key,\n      placeholder: range === 'start' ? 'Select Data Set Start' : 'Select Data Set End',\n      multiple: false,\n      searchable: false,\n      options: optionsArray,\n      hasMore: false,\n      isLoading: false,\n      disabled: isDisabled,\n      onChange: (value: any) => {\n        if (range === 'start') {\n          variable.selectedDataSetStart = value;\n          // Parameter options are resolved from selectedDataSet; keep this alias in sync.\n          variable.selectedDataSet = value;\n        } else {\n          variable.selectedDataSetEnd = value;\n        }\n\n        const varGroup = this.getVariableFormGroup(variable.name);\n        if (varGroup) {\n          varGroup.get(key)?.setValue(value, { emitEvent: false });\n          if (range === 'start' && varGroup.get('selectedDataSet')) {\n            varGroup.get('selectedDataSet')?.setValue(value, { emitEvent: false });\n          }\n          if (varGroup.get('value')) {\n            varGroup.get('value')?.setValue('', { emitEvent: false });\n          }\n        }\n        variable.rawValue = '';\n        variable.value = '';\n\n        const paramKeysToDelete: string[] = [];\n        this.parameterForDataSetSelectConfigCache.forEach((configValue, k) => {\n          if (k.startsWith(`${variable.name}_paramForDataSet_`)) {\n            paramKeysToDelete.push(k);\n          }\n        });\n        paramKeysToDelete.forEach(k => this.parameterForDataSetSelectConfigCache.delete(k));\n        this.cdr.markForCheck();\n      }\n    };\n    this.dataSetRangeSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get select config for parameter dropdown (third dropdown for parameters - shows parameters from selected data set)\n   */\n  getParameterSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Get selected test data profile ID (preferred) or name (fallback) and data set\n    const selectedProfileId = variable.selectedTestDataProfileId;\n    const selectedProfile = variable.selectedTestDataProfile;\n    const selectedDataSet = variable.selectedDataSet;\n    \n    if ((!selectedProfileId && !selectedProfile) || !selectedDataSet) {\n      // Return empty config if profile or data set is not selected\n      return {\n        key: 'value',\n        placeholder: (selectedProfileId || selectedProfile) ? 'Select Data Set first' : 'Select Test Data Profile first',\n        multiple: false,\n        searchable: false,\n        options: []\n      };\n    }\n\n    // Use profile ID if available, otherwise use profile name\n    const profileIdentifier = selectedProfileId ? String(selectedProfileId) : (selectedProfile || '');\n    const cacheKey = `${variable.name}_paramForDataSet_${profileIdentifier}_${selectedDataSet}`;\n    if (this.parameterForDataSetSelectConfigCache.has(cacheKey)) {\n      return this.parameterForDataSetSelectConfigCache.get(cacheKey)!;\n    }\n\n    // Get parameters for the selected data set using profile ID or name\n    const parameters = this.getParametersForDataSet(profileIdentifier, selectedDataSet);\n    const optionsArray: SelectOption[] = parameters.map(param => ({\n      id: `@|${param.name}|`, // Use param.name as id (mat-option will use this)\n      value: `@|${param.name}|`, // Formatted value for display\n      name: param.name,\n      label: param.name\n    }));\n\n    // Ensure form control exists and is initialized with the current value\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup && variableGroup.get('value')) {\n      // If we have a value, ensure form control matches the option id (formatted value)\n      const currentValue = variable.value || '';\n      // Check if value is already formatted (e.g., \"@|email|\")\n      const formattedValue = currentValue.startsWith('@|') && currentValue.endsWith('|')\n        ? currentValue\n        : (currentValue ? `@|${currentValue}|` : '');\n      // Set form control to formatted value (matches opt.id) so select displays correctly\n      if (formattedValue && parameters.some(p => `@|${p.name}|` === formattedValue)) {\n        variableGroup.get('value')?.setValue(formattedValue, { emitEvent: false });\n      }\n    }\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'value', // Use 'value' as key since we're accessing from FormArray\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: true,\n      serverSearch: false, // Client-side search since we already have all parameters from the selected data set\n      options: optionsArray,\n      hasMore: false, // No pagination for parameters within a data set\n      isLoading: false,\n      onChange: (value: any) => {\n        // Value received is the formatted value (e.g., \"@|email|\") because mat-option uses opt.id\n        // Extract parameter name from formatted value\n        const formattedValue = value; // This is already formatted as @|paramName|\n        const paramName = formattedValue.startsWith('@|') && formattedValue.endsWith('|')\n          ? formattedValue.slice(2, -1)\n          : formattedValue;\n        \n        // Update raw value (store parameter name without formatting)\n        variable.rawValue = paramName;\n        \n        // Update variable value (store formatted value for template)\n        variable.value = formattedValue;\n        \n        // Update form control in FormArray - use formatted value (matches opt.id) so select displays correctly\n        const varGroup = this.getVariableFormGroup(variable.name);\n        if (varGroup && varGroup.get('value')) {\n          // Set to formatted value so the select can match and display the selected option\n          varGroup.get('value')?.setValue(formattedValue, { emitEvent: false });\n        }\n        \n        // Mark for check and emit\n        this.cdr.markForCheck();\n        \n        // Emit formatted value for parent component (this is what gets used in the template)\n        this.variableValueChange.emit({ name: variable.name, value: formattedValue });\n      }\n    };\n\n    this.parameterForDataSetSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get unique environments from environment options\n   */\n  getUniqueEnvironments(): { id: string; name: string }[] {\n    const envMap = new Map<string, { id: string; name: string }>();\n    this.environmentOptions.forEach(env => {\n      if (!envMap.has(env.environment)) {\n        envMap.set(env.environment, {\n          id: env.environment,\n          name: env.environment\n        });\n      }\n    });\n    return Array.from(envMap.values());\n  }\n\n  /**\n   * Get parameters for a specific environment\n   */\n  getParametersForEnvironment(environmentName: string): { id: string; name: string }[] {\n    return this.environmentOptions\n      .filter(env => env.environment === environmentName)\n      .map(env => ({\n        id: env.name,\n        name: env.name\n      }));\n  }\n\n  /**\n   * Get select config for environment dropdown (first dropdown - select environment)\n   */\n  getEnvironmentSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    const cacheKey = `${variable.name}_environment`;\n    if (this.environmentSelectConfigCache.has(cacheKey)) {\n      return this.environmentSelectConfigCache.get(cacheKey)!;\n    }\n\n    // Get unique environments\n    const uniqueEnvironments = this.getUniqueEnvironments();\n    const optionsArray: SelectOption[] = uniqueEnvironments.map(env => ({\n      id: env.id,\n      value: env.name,\n      name: env.name,\n      label: env.name\n    }));\n\n    // Ensure the currently selected environment is always present in the options\n    // (it may be missing if the list was refreshed by a search in another variable's dropdown)\n    if (variable.selectedEnvironment && !optionsArray.some(o => o.value === variable.selectedEnvironment)) {\n      optionsArray.unshift({\n        id: variable.selectedEnvironment,\n        value: variable.selectedEnvironment,\n        name: variable.selectedEnvironment,\n        label: variable.selectedEnvironment\n      });\n    }\n\n    // Ensure form control exists for environment selection\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup && !variableGroup.get('selectedEnvironment')) {\n      const currentEnv = variable.selectedEnvironment || '';\n      variableGroup.addControl('selectedEnvironment', new FormControl(currentEnv));\n    }\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'selectedEnvironment', // Use 'selectedEnvironment' as key\n      placeholder: `Select Environment`,\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: optionsArray,\n      hasMore: this.hasMoreEnvironments,\n      isLoading: this.isLoadingEnvironments,\n      onChange: (value: any) => {\n        // Store selected environment name on the variable object\n        variable.selectedEnvironment = value;\n\n        // Extract and store environment ID from environmentOptions\n        // Find the first environment option with matching environment name to get the ID\n        const envOption = this.environmentOptions.find(env => env.environment === value);\n        if (envOption) {\n          // Extract numeric ID from envOption.id (format: \"env-74-test\" -> 74)\n          const idMatch = envOption.id.match(/env-(\\d+)-/);\n          if (idMatch && idMatch[1]) {\n            variable.selectedEnvironmentId = parseInt(idMatch[1], 10);\n          }\n        }\n\n        // Snapshot the environment's parameters so they survive if another variable triggers a search\n        const envParams = this.environmentOptions.filter(env => env.environment === value);\n        if (envParams.length > 0) {\n          this.selectedEnvironmentOptionsSnapshot.set(variable.name, envParams);\n        }\n\n        // Clear the parameter selection when environment changes\n        variable.rawValue = undefined;\n        variable.value = '';\n        \n        // Clear environment parameter config cache to force refresh\n        this.environmentParameterSelectConfigCache.delete(`${variable.name}_envParam`);\n        \n        // Update form control\n        const variableGroup = this.getVariableFormGroup(variable.name);\n        if (variableGroup) {\n          if (variableGroup.get('value')) {\n            variableGroup.get('value')?.setValue('', { emitEvent: false });\n          }\n          // Update selectedEnvironment control\n          if (variableGroup.get('selectedEnvironment')) {\n            variableGroup.get('selectedEnvironment')?.setValue(value, { emitEvent: false });\n          }\n        }\n        \n        // Pre-compute environment parameter config for the new environment\n        const index = this.templateVariables.findIndex(v => v.name === variable.name);\n        if (index !== -1) {\n          this.getEnvironmentParameterSelectConfig(variable, index);\n        }\n        \n        // Mark for check to update UI\n        this.cdr.markForCheck();\n      },\n      onLoadMore: () => {\n        this.loadMoreEnvironments.emit();\n      },\n      onSearch: (query: string) => {\n        this.activeEnvironmentSearchVariable = variable.name;\n        this.searchEnvironments.emit(query);\n      }\n    };\n\n    this.environmentSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get select config for environment parameter dropdown (second dropdown - select parameter from environment)\n   */\n  getEnvironmentParameterSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    const cacheKey = `${variable.name}_envParam`;\n    if (this.environmentParameterSelectConfigCache.has(cacheKey)) {\n      return this.environmentParameterSelectConfigCache.get(cacheKey)!;\n    }\n\n    // Get selected environment\n    const selectedEnvironment = variable.selectedEnvironment;\n    if (!selectedEnvironment) {\n      // Return empty config if no environment is selected\n      return {\n        key: 'value',\n        placeholder: 'Select Environment first',\n        multiple: false,\n        searchable: false,\n        options: []\n      };\n    }\n\n    // Get parameters for the selected environment.\n    // If live environmentOptions were filtered by another variable's search, fall back to the snapshot.\n    let parameters = this.getParametersForEnvironment(selectedEnvironment);\n    if (parameters.length === 0 && this.selectedEnvironmentOptionsSnapshot.has(variable.name)) {\n      const snapshot = this.selectedEnvironmentOptionsSnapshot.get(variable.name)!;\n      parameters = snapshot\n        .filter(env => env.environment === selectedEnvironment)\n        .map(env => ({ id: env.name, name: env.name }));\n    }\n    const optionsArray: SelectOption[] = parameters.map(param => ({\n      id: `*|${param.name}|`,\n      value: `*|${param.name}|`,\n      name: param.name,\n      label: param.name\n    }));\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'value', // Use 'value' as key since we're accessing from FormArray\n      placeholder: `Select Parameter`,\n      multiple: false,\n      searchable: false,\n      options: optionsArray,\n      onChange: (value: any) => {\n        // When parameter is selected, update raw value and format it\n        variable.rawValue = value;\n        const formattedValue = `${value}`;\n        \n        // Update variable value (store formatted value)\n        variable.value = formattedValue;\n        \n        // Environment ID is already stored on variable.selectedEnvironmentId\n        // (it was set when environment was selected)\n        \n        // Update form control in FormArray - keep raw value so select displays correctly\n        const variableGroup = this.getVariableFormGroup(variable.name);\n        if (variableGroup && variableGroup.get('value')) {\n          // Set to raw value so the select can match and display the selected option\n          variableGroup.get('value')?.setValue(value, { emitEvent: false });\n        }\n        \n        // Mark for check and emit\n        this.cdr.markForCheck();\n        // Emit formatted value for parent component\n        this.variableValueChange.emit({ name: variable.name, value: formattedValue });\n      }\n    };\n\n    this.environmentParameterSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get selected environment for a variable\n   */\n  getSelectedEnvironment(variable: TemplateVariable): string {\n    return variable.selectedEnvironment || '';\n  }\n\n  /**\n   * Check if environment is selected for a variable\n   */\n  hasSelectedEnvironment(variable: TemplateVariable): boolean {\n    return !!variable.selectedEnvironment;\n  }\n\n  /**\n   * Get selected environment ID for a variable\n   */\n  getSelectedEnvironmentId(variable: TemplateVariable): number | null {\n    return variable.selectedEnvironmentId || null;\n  }\n\n  /**\n   * Get all environment IDs for variables that use environment type\n   * Returns a map of variable name to environment ID\n   */\n  getEnvironmentIdsForVariables(): Map<string, number> {\n    const envIds = new Map<string, number>();\n    this.templateVariables.forEach(variable => {\n      if (this.isEnvironmentType(variable) && variable.selectedEnvironmentId) {\n        envIds.set(variable.name, variable.selectedEnvironmentId);\n      }\n    });\n    return envIds;\n  }\n\n  /**\n   * Check if current data type is plain-text\n   */\n  isPlainTextType(variable: TemplateVariable): boolean {\n    const dataType = variable.dataType || 'plain-text';\n    return dataType === 'plain-text';\n  }\n\n  /**\n   * Check if current data type is parameter\n   */\n  isParameterType(variable: TemplateVariable): boolean {\n    const dataType = variable.dataType || 'plain-text';\n    return dataType === 'parameter';\n  }\n\n  /**\n   * Check if test data profile is selected for a variable\n   */\n  hasSelectedTestDataProfile(variable: TemplateVariable): boolean {\n    return !!(variable.selectedTestDataProfile || variable.selectedTestDataProfileId != null);\n  }\n\n  /**\n   * Check if data set is selected for a variable\n   */\n  hasSelectedDataSet(variable: TemplateVariable): boolean {\n    return this.isInsideForLoopStep\n      ? !!(variable.selectedDataSetStart || variable.selectedDataSet)\n      : !!variable.selectedDataSet;\n  }\n\n  /**\n   * Check if default test data profile and data set are set (from test case)\n   * If true, profile and data set dropdowns should be disabled\n   */\n  hasDefaultTestDataSelection(): boolean {\n    if (this.isInsideForLoopStep) {\n      return !!(\n        this.defaultTestDataProfileId != null &&\n        this.defaultTestDataStartIndex != null &&\n        this.defaultTestDataEndIndex != null\n      );\n    }\n    return !!(this.defaultTestDataProfileId != null && this.defaultTestDataStartIndex != null);\n  }\n\n  /**\n   * Check if current data type is environment\n   */\n  isEnvironmentType(variable: TemplateVariable): boolean {\n    const dataType = variable.dataType || 'plain-text';\n    return dataType === 'environment';\n  }\n\n  /**\n   * Check if variable is element type (dataKey === 'element')\n   */\n  isElementType(variable: TemplateVariable): boolean {\n    return variable.dataKey === 'element';\n  }\n\n  /**\n   * Check if screen name is selected for an element variable\n   * Returns true if either selectedScreenName or screenNameId is set (and not \"None\")\n   */\n  hasSelectedScreenName(variable: TemplateVariable): boolean {\n    // Check if screenNameId exists and is a valid number (not null/undefined)\n    if (variable.screenNameId != null && typeof variable.screenNameId === 'number' && !isNaN(variable.screenNameId)) {\n      return true;\n    }\n    // Fallback: check selectedScreenName\n    return !!variable.selectedScreenName;\n  }\n\n  /**\n   * Get select config for screen name dropdown (first dropdown for element variables)\n   */\n  getScreenNameSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Include loading state in cache key to invalidate when loading completes\n    const cacheKey = `${variable.name}_screenName_${this.screenNameOptions.length}_${this.isLoadingScreenNames}`;\n    if (this.screenNameSelectConfigCache.has(cacheKey)) {\n      return this.screenNameSelectConfigCache.get(cacheKey)!;\n    }\n\n    // Build options: include a \"None\" option (displayed as \"Select\") plus screenNameOptions from API\n    const optionsArray: SelectOption[] = [\n      {\n        id: 'none',\n        value: 'Select',\n        name: 'None',\n        label: 'None'\n      },\n      ...this.screenNameOptions.map(screenName => ({\n        id: screenName.id?.toString() || '',\n        value: screenName.name,\n        name: screenName.name,\n        label: screenName.name\n      }))\n    ];\n    // Ensure form control exists for screen name selection\n    // The form control value should match the option id (string for \"none\", string representation of number for real screen names)\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup) {\n      if (!variableGroup.get('selectedScreenName')) {\n        // Initialize with screenNameId as string (to match option id format), or 'none' by default\n        const initialValue = variable.screenNameId ? String(variable.screenNameId) : 'none';\n        variableGroup.addControl('selectedScreenName', new FormControl(initialValue));\n      } else {\n        // Update form control value if variable has screenNameId but form control doesn't match\n        if (variable.screenNameId) {\n          const currentValue = variableGroup.get('selectedScreenName')?.value;\n          const expectedValue = String(variable.screenNameId);\n          // Compare as strings to handle both number and string values\n          const currentValueStr = currentValue != null ? String(currentValue) : null;\n          if (currentValueStr !== expectedValue) {\n            variableGroup.get('selectedScreenName')?.setValue(expectedValue, { emitEvent: false });\n          }\n        } else {\n          // If no screenNameId, ensure form control is 'none' (for \"None\" selection by default)\n          const currentValue = variableGroup.get('selectedScreenName')?.value;\n          if (currentValue !== 'none' && currentValue !== null && currentValue !== '') {\n            variableGroup.get('selectedScreenName')?.setValue('none', { emitEvent: false });\n          }\n        }\n      }\n    }\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'selectedScreenName',\n      placeholder: 'Select Screen Name',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: optionsArray,\n      hasMore: this.hasMoreScreenNames,\n      isLoading: this.isLoadingScreenNames,\n      onChange: (value: any) => {\n        // If \"None\" is selected (value is 'none' string or null), clear screen name and element info\n        if (value == null || value === 'none' || value === '') {\n          variable.screenNameId = undefined;\n          variable.selectedScreenName = undefined;\n          variable.elementId = undefined;\n          variable.elementLocator = undefined;\n          variable.elementName = undefined;\n          variable.value = '';\n\n          // Clear element config cache for this variable\n          const keysToDelete: string[] = [];\n          this.elementSelectConfigCache.forEach((_, key) => {\n            if (key.startsWith(`${variable.name}_element`)) {\n              keysToDelete.push(key);\n            }\n          });\n          keysToDelete.forEach(key => this.elementSelectConfigCache.delete(key));\n\n          // Update form controls - clear all element-related form controls\n          // Set selectedScreenName to 'none' to show \"None\" is selected\n          if (variableGroup) {\n            if (variableGroup.get('value')) {\n              variableGroup.get('value')?.setValue('', { emitEvent: false });\n            }\n            if (variableGroup.get('selectedScreenName')) {\n              variableGroup.get('selectedScreenName')?.setValue('none', { emitEvent: false });\n            }\n            // Clear element ID form control to ensure elementId is cleared\n            if (variableGroup.get('id')) {\n              variableGroup.get('id')?.setValue(null, { emitEvent: false });\n            }\n          }\n\n          // Mark for check and stop (no element fetch when None)\n          this.cdr.markForCheck();\n          return;\n        }\n\n        // value is the option id (string for \"none\", string representation of number for real screen names)\n        // Convert to number for screenNameId if it's a valid number\n        const screenNameIdNum = typeof value === 'string' && value !== 'none' ? parseInt(value, 10) : (typeof value === 'number' ? value : null);\n        \n        if (screenNameIdNum && !isNaN(screenNameIdNum)) {\n          // Store selected screen name on the variable object\n          variable.screenNameId = screenNameIdNum;\n\n          // Find and store screen name name from screenNameOptions\n          const screenNameOption = this.screenNameOptions.find(sn => sn.id === screenNameIdNum);\n          if (screenNameOption) {\n            variable.selectedScreenName = screenNameOption.name;\n          } else {\n            // Fallback: if not found, still set the ID but clear the name\n            variable.selectedScreenName = undefined;\n          }\n\n          // Clear the element selection when screen name changes\n          variable.elementId = undefined;\n          variable.elementLocator = undefined;\n          variable.elementName = undefined;\n          variable.value = '';\n\n          // Clear element config cache to force refresh\n          // Clear all element configs for this variable since screen name changed\n          const keysToDelete: string[] = [];\n          this.elementSelectConfigCache.forEach((_, key) => {\n            if (key.startsWith(`${variable.name}_element`)) {\n              keysToDelete.push(key);\n            }\n          });\n          keysToDelete.forEach(key => this.elementSelectConfigCache.delete(key));\n\n          // Update form control\n          if (variableGroup) {\n            if (variableGroup.get('value')) {\n              variableGroup.get('value')?.setValue('', { emitEvent: false });\n            }\n            // Ensure form control has the correct value (as string to match option id)\n            if (variableGroup.get('selectedScreenName')) {\n              variableGroup.get('selectedScreenName')?.setValue(String(screenNameIdNum), { emitEvent: false });\n            }\n          }\n\n          // Emit event to fetch elements filtered by selected screen name\n          this.searchElementsByScreenName.emit({\n            screenNameId: variable.screenNameId,\n            searchTerm: ''\n          });\n        } else {\n          // Invalid value - clear everything\n          variable.screenNameId = undefined;\n          variable.selectedScreenName = undefined;\n          variable.value = '';\n        }\n\n        // Mark for check to update UI first\n        this.cdr.markForCheck();\n\n        // The element config will be recomputed automatically when elementOptions input changes\n        // via ngOnChanges, which will clear the cache and trigger re-computation\n      },\n      onLoadMore: () => {\n        this.loadMoreScreenNames.emit('');\n      },\n      onSearch: (query: string) => {\n        this.searchScreenName.emit(query);\n      }\n    };\n\n    this.screenNameSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n  /**\n   * Get select config for element dropdown (second dropdown - filtered by screen name)\n   * Optimized to return immediately from cache to avoid repeated calls during change detection\n   */\n  getElementSelectConfig(variable: TemplateVariable, index: number): DynamicSelectFieldConfig {\n    // Get selected screen name ID\n    const selectedScreenNameId = variable.screenNameId;\n    // Include elementOptions length in cache key to invalidate when elements change.\n    // Exclude isLoadingElements so the dropdown/search input does not re-initialize every keystroke.\n    const cacheKey = `${variable.name}_element_${selectedScreenNameId || ''}_${this.elementOptions.length}`;\n    \n    // Early return from cache - this is the most common path and should be very fast\n    if (this.elementSelectConfigCache.has(cacheKey)) {\n      return this.elementSelectConfigCache.get(cacheKey)!;\n    }\n    \n    // If no screen name is selected, return empty config and cache it\n    if (!selectedScreenNameId) {\n      const emptyConfig: DynamicSelectFieldConfig = {\n        key: 'value',\n        placeholder: 'Select Screen Name first',\n        multiple: false,\n        searchable: false,\n        options: []\n      };\n      this.elementSelectConfigCache.set(cacheKey, emptyConfig);\n      return emptyConfig;\n    }\n    \n    // Filter elements by selected screen name\n    // Compare both as numbers to ensure type matching\n    const filteredElements = this.elementOptions.filter(el => {\n      const elScreenNameId = el.screenNameId;\n      // Handle both number and string comparisons\n      return elScreenNameId != null && Number(elScreenNameId) === Number(selectedScreenNameId);\n    });\n\n    // Convert to SelectOption format\n    const optionsArray: SelectOption[] = filteredElements.map(el => {\n      const locatorValue = el.locatorValue || '';\n      return {\n        id: el.id,\n        elementId: el.id?.toString() || '',\n        value: el.name,\n        locatorValue: locatorValue,\n        name: el.name,\n        label: el.name,\n        screenNameId: el.screenNameId?.toString() || '',\n        screenNameObj: el.screenNameObj,\n        otherLocator: el.otherLocator\n      };\n    });\n\n    // Ensure form control exists for element ID selection\n    const variableGroup = this.getVariableFormGroup(variable.name);\n    if (variableGroup && !variableGroup.get('id')) {\n      // If we have an existing element value, try to find the element and set the ID\n      let initialElementId: any = null;\n      if (variable.elementId) {\n        initialElementId = variable.elementId;\n      } else if (variable.value) {\n        // Try to find element by locatorValue or name\n        const element = this.elementOptions.find(el => \n          el.locatorValue === variable.value || el.name === variable.value\n        );\n        if (element) {\n          initialElementId = element.id;\n        }\n      }\n      variableGroup.addControl('id', new FormControl(initialElementId));\n    }\n\n    const config: DynamicSelectFieldConfig = {\n      key: 'id',\n      placeholder: 'Select Element',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: optionsArray,\n      hasMore: this.hasMoreElements,\n      isLoading: this.isLoadingElements,\n      onChange: (value: any) => {\n        // Find the selected element from elementOptions\n        // value is the element ID (since config key is 'id')\n        const selectedElement = this.elementOptions.find(el => el.id === value);\n        \n        if (selectedElement) {\n          variable.value = value;\n          \n          // Store element details on the variable\n          variable.elementId = selectedElement.id;\n          variable.elementLocator = selectedElement.locatorValue || '';\n          variable.elementName = selectedElement.name || '';\n          \n          // Update screen name from the selected element\n          // This ensures the screen name dropdown shows the correct selection\n          if (selectedElement.screenNameId) {\n            variable.screenNameId = selectedElement.screenNameId;\n            \n            // Find and store screen name name from screenNameOptions\n            const screenNameOption = this.screenNameOptions.find(sn => sn.id === selectedElement.screenNameId);\n            if (screenNameOption) {\n              variable.selectedScreenName = screenNameOption.name;\n            }\n          }\n          \n          // Find and patch the selector variable with dataKey 'not_found'\n          const selectorVariable = this.templateVariables.find(\n            v => v.name === 'selector' && v.dataKey === 'not_found'\n          );\n          \n          if (selectorVariable && selectedElement.locatorValue) {\n            // Get the form group for the selector variable\n            const selectorVariableGroup = this.getVariableFormGroup(selectorVariable.name);\n            if (selectorVariableGroup) {\n              // Update the selector variable's value with the element locator\n              selectorVariable.value = selectedElement.locatorValue;\n              \n              // Patch the form control value\n              if (selectorVariableGroup.get('value')) {\n                selectorVariableGroup.get('value')?.setValue(selectedElement.locatorValue, { emitEvent: false });\n              }\n            }\n          }\n        } else {\n          // Fallback: if element not found, just set the value\n          variable.value = value;\n        }\n        \n        // Update form control in FormArray\n        const variableGroup = this.getVariableFormGroup(variable.name);\n        if (variableGroup) {\n          if (variableGroup.get('value')) {\n            variableGroup.get('value')?.setValue(variable.value, { emitEvent: false });\n          }\n          // Set element ID form control for the dropdown (key is 'id' in config)\n          if (selectedElement && variableGroup.get('id')) {\n            variableGroup.get('id')?.setValue(selectedElement.id, { emitEvent: false });\n          }\n          // Update screen name form control if element has a screen name\n          if (selectedElement && selectedElement.screenNameId && variableGroup.get('selectedScreenName')) {\n            // Set the screen name ID as string to match option id format\n            variableGroup.get('selectedScreenName')?.setValue(String(selectedElement.screenNameId), { emitEvent: false });\n          }\n        }\n        \n        // Mark for check and emit\n        this.cdr.markForCheck();\n        this.variableValueChange.emit({ name: variable.name, value: variable.value });\n      },\n      onLoadMore: () => {\n        this.loadMoreElements.emit();\n      },\n      onSearch: (query: string) => {\n        this.searchElements.emit(query);\n      }\n    };\n\n    // Cache the config before returning\n    this.elementSelectConfigCache.set(cacheKey, config);\n    return config;\n  }\n\n\n  /**\n   * Check if current data type is runtime\n   */\n  isRuntimeType(variable: TemplateVariable): boolean {\n    const dataType = variable.dataType || 'plain-text';\n    return dataType === 'runtime';\n  }\n}\n\n","<style>\n  .capitalize-first::first-letter {\n    text-transform: uppercase;\n  }\n</style>\n<div class=\"cqa-flex cqa-gap-x-6 cqa-gap-y-4 cqa-flex-wrap template-variables-form\" [ngClass]=\"{'cqa-flex-col': isEditInDepth}\" *ngIf=\"!createElementVisible\">\n  \n  <!-- Metadata - Only show if element is available in form -->\n  <div *ngIf=\"selectorVariableAvailable\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n      Metadata\n    </label>\n    <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"metadata\" [fullWidth]=\"true\"\n      (valueChange)=\"metadataChange.emit($event)\">\n    </cqa-custom-input>\n  </div>\n\n  <!-- Description -->\n  <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n      Description\n    </label>\n    <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"description\" [fullWidth]=\"true\"\n      (valueChange)=\"descriptionChange.emit($event)\">\n    </cqa-custom-input>\n  </div>\n  \n  <ng-container *ngFor=\"let variable of templateVariables; let i = index; trackBy: trackByVariable\">\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]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 capitalize-first\">\n          {{ variable.label | cqaCamelToTitle }}\n        </label>\n        <mat-slide-toggle [checked]=\"variablesForm.at(i)?.get('value')?.value || variable.value || false\"\n          (change)=\"onVariableBooleanChange(variable.name, $event.checked)\" color=\"primary\">\n        </mat-slide-toggle>\n      </div>\n    </ng-container>\n\n    <ng-container *ngIf=\"variable.type === 'dropdown'\">\n      <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n          {{ variable.label | cqaCamelToTitle }}\n        </label>\n        <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getSelectConfig(variable, i)\">\n        </cqa-dynamic-select>\n      </div>\n    </ng-container>\n\n    <!-- Textarea variables -->\n    <ng-container *ngIf=\"variable.type === 'textarea'\">\n      <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n          {{ variable.label | cqaCamelToTitle }}\n        </label>\n        <textarea class=\"cqa-w-full cqa-border cqa-border-gray-300 cqa-rounded-lg cqa-px-3 cqa-py-2 cqa-text-sm cqa-text-gray-900 cqa-resize-y focus:cqa-outline-none focus:cqa-ring-1 focus:cqa-ring-indigo-500 focus:cqa-border-indigo-500\"\n          [value]=\"variable.value || ''\"\n          rows=\"4\"\n          style=\"min-height: 42px;\"\n          (input)=\"onVariableValueChange(variable.name, $any($event.target).value)\"></textarea>\n      </div>\n    </ng-container>\n\n    <!-- Environment-name dropdown (synthetic var injected for AI Ask / AI Verify only) -->\n    <ng-container *ngIf=\"isEnvironmentNameType(variable)\">\n      <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n          {{ variable.label | cqaCamelToTitle }}\n        </label>\n        <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getEnvironmentNameSelectConfig(variable)\">\n        </cqa-dynamic-select>\n      </div>\n    </ng-container>\n\n    <!-- Number variables with number input -->\n    <ng-container *ngIf=\"variable.type === 'number' && variable.dataKey !== 'element'\">\n      <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n          {{ variable.label | cqaCamelToTitle }}\n        </label>\n        <cqa-custom-input [type]=\"'number'\" [placeholder]=\"'Number Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n          (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n        </cqa-custom-input>\n      </div>\n    </ng-container>\n\n    <!-- Non-boolean, non-custom_code variables -->\n    <ng-container *ngIf=\"variable.name !== 'custom_code' && variable.type !== 'boolean' && variable.type !== 'dropdown' && variable.type !== 'textarea' && variable.type !== 'environment-name' && !(variable.type === 'number' && variable.dataKey !== 'element')\">\n      <!-- Element variables with cascading dropdowns (screen name + element) -->\n      <ng-container *ngIf=\"isElementType(variable)\">\n        <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n          <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n            {{ variable.label | cqaCamelToTitle }} Screen Name<span class=\"cqa-text-red-500\">*</span>\n          </label>\n          <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getScreenNameSelectConfig(variable, i)\">\n          </cqa-dynamic-select>\n        </div>\n        <div *ngIf=\"hasSelectedScreenName(variable); else elementManualInput\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n          <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n            {{ variable.label | cqaCamelToTitle }}<span class=\"cqa-text-red-500\">*</span>\n          </label>\n          <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getElementSelectConfig(variable, i)\">\n          </cqa-dynamic-select>\n        </div>\n        <ng-template #elementManualInput>\n          <ng-container *ngIf=\"variable.type === 'number'\">\n            <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n                {{ variable.label | cqaCamelToTitle }}<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-custom-input [type]=\"'number'\" [placeholder]=\"'Number Input'\" [value]=\"variable.value\" [fullWidth]=\"true\"\n                (valueChange)=\"onVariableValueChange(variable.name, $event)\">\n              </cqa-custom-input>\n            </div>\n          </ng-container>\n          <ng-container *ngIf=\"variable.type !== 'number'\">\n            <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n                {{ variable.label | cqaCamelToTitle }}<span class=\"cqa-text-red-500\">*</span>\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-container>\n        </ng-template>\n      </ng-container>\n      <ng-container *ngIf=\"!isElementType(variable)\">\n      <!-- Other dropdown variables (type, scrollTo, label) -->\n      <ng-container *ngIf=\"shouldShowDropdown(variable); else defaultInput\">\n        <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n          <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n            {{ variable.label | cqaCamelToTitle }}\n          </label>\n          <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getSelectConfig(variable, i)\">\n          </cqa-dynamic-select>\n        </div>\n      </ng-container>\n    </ng-container>\n      <ng-template #defaultInput>\n        <!-- Test-data, source-value, or target-value with data type dropdown -->\n        <ng-container *ngIf=\"needsDataTypeDropdown(variable); else regularInput\">\n          <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n              {{ variable.label | cqaCamelToTitle }} Type<span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getDataTypeSelectConfig(variable, i)\">\n            </cqa-dynamic-select>\n          </div>\n          <ng-container *ngIf=\"isEnvironmentType(variable)\">\n          <div *ngIf=\"isEnvironmentType(variable)\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n              Environment Name<span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getEnvironmentSelectConfig(variable, i)\">\n            </cqa-dynamic-select>\n          </div>\n          <div *ngIf=\"hasSelectedEnvironment(variable)\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n              Environment Value<span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getEnvironmentParameterSelectConfig(variable, i)\">\n            </cqa-dynamic-select>\n          </div>\n          </ng-container>\n          <ng-container *ngIf=\"isParameterType(variable)\">\n            <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                Test Data Profile<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getTestDataProfileSelectConfig(variable, i)\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"hasSelectedTestDataProfile(variable) && !isInsideForLoopStep\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                Data Set<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getDataSetSelectConfig(variable, i)\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"hasSelectedTestDataProfile(variable) && isInsideForLoopStep\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                Data Set Start<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getDataSetRangeSelectConfig(variable, i, 'start')\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"hasSelectedTestDataProfile(variable) && isInsideForLoopStep\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1\">\n                Data Set End<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getDataSetRangeSelectConfig(variable, i, 'end')\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"hasSelectedDataSet(variable)\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n                {{ variable.label | cqaCamelToTitle }}<span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-dynamic-select [form]=\"getFormGroupAt(i)!\" [config]=\"getParameterSelectConfig(variable, i)\">\n              </cqa-dynamic-select>\n            </div> \n          </ng-container>\n          <div *ngIf=\"isPlainTextType(variable) || isRuntimeType(variable)\" class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1  capitalize-first\">\n              {{ variable.label | cqaCamelToTitle }}<span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <ng-container *ngIf=\"isPlainTextType(variable); else runtimePlainInput\">\n              <cqa-mixed-variable-input\n                [placeholder]=\"'Text Input'\"\n                [value]=\"getRawValue(variable)\"\n                (valueChange)=\"onTestDataValueChange(variable.name, $event)\"\n                (validityChange)=\"onTestDataValidityChange(variable.name, $event)\">\n              </cqa-mixed-variable-input>\n            </ng-container>\n            <ng-template #runtimePlainInput>\n              <cqa-custom-input [placeholder]=\"'Text Input'\" [value]=\"getRawValue(variable)\" [fullWidth]=\"true\"\n                (valueChange)=\"onTestDataValueChange(variable.name, $event)\">\n              </cqa-custom-input>\n            </ng-template>\n          </div>\n        </ng-container>\n        <ng-template #regularInput>\n          <div class=\"cqa-flex cqa-flex-col\" [style.width]=\"isEditInDepth ? null : 'calc(50% - 12px)'\" [ngClass]=\"{'cqa-w-full': isEditInDepth}\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1 capitalize-first\">\n              {{ variable.label | cqaCamelToTitle }}\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-template>\n    </ng-container>\n  </ng-container>\n</div>\n\n<div *ngIf=\"createElementVisible\">\n  <cqa-element-form\n    [isCreateMode]=\"true\"\n    [screenNameOptions]=\"screenNameOptions\"\n    [hasMoreScreenNames]=\"hasMoreScreenNames\"\n    [isLoadingScreenNames]=\"isLoadingScreenNames\"\n    [isEditInDepthAvailable]=\"false\"\n    (createElement)=\"onCreateElement($event)\"\n    (cancel)=\"onCancelElementForm()\"\n    (searchScreenName)=\"searchScreenName.emit($event)\"\n    (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n    (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\">\n  </cqa-element-form>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, OnDestroy, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, FormArray } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { Subscription } from 'rxjs';\nimport { TemplateVariable, TemplateVariablesFormComponent } from '../template-variables-form/template-variables-form.component';\n\n// Import Element type - using any for now since Element is from ts-portal-ui\n// In a real scenario, you might want to create a shared interface or import from a shared package\ninterface Element {\n  id?: number;\n  name: string;\n  locatorValue?: string;\n  otherLocator?: string[];\n  [key: string]: any;\n}\n\nexport interface VariableDefinition {\n  path: string;\n  default: string | boolean | number | null;\n  mutable: boolean;\n  type?: string;\n  options?: string[];\n}\n\nexport interface ActionTemplate {\n  id?: number;\n  naturalText?: string;\n  displayName?: string;\n  htmlGrammar?: string;\n  searchableGrammar?: string;\n  workspaceType?: string;\n  action?: string;\n  isAddon?: boolean;\n  variables?: Record<string, VariableDefinition>;\n  allowedValues?: any;\n  data?: any;\n  stepActionType?: any;\n  stepType?: any;\n  displayOrder?: number;\n}\n\nexport interface ElementField {\n  key: string;\n  label: string;\n  value: string;\n  type: 'element' | 'test-data' | 'attribute';\n}\n\ntype StepTestDataListItem = {\n  testData: string;\n  testDataKey?: string;\n  testDataType: string;\n  testDataProfileId?: number;\n};\n\n/** Host passes this after elementService.show() so Label Screen Name / Label prefill on edit. */\nexport interface ElementScreenPrefill {\n  elementId: number;\n  screenNameId?: number;\n  selectedScreenName?: string;\n}\n\n@Component({\n  selector: 'cqa-step-builder-action',\n  templateUrl: './step-builder-action.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root', style: 'display: block;height: 100%;width: 100%;' }\n})\nexport class StepBuilderActionComponent implements OnInit, OnChanges, OnDestroy {\n  @Input() showHeader: boolean = true;\n  /** Increment this counter to trigger \"Change Template\" from a parent component. */\n  @Input() changeTemplateSignal: number = 0;\n  /** Increment this counter to trigger \"Cancel template selection\" from a parent component. */\n  @Input() cancelChangeTemplateSignal: number = 0;\n  /** List of action templates to display */\n  @Input() templates: ActionTemplate[] = [];\n  /** When provided, automatically selects this template on init (edit mode). */\n  @Input() initialTemplate?: ActionTemplate;\n  /** When provided, pre-populates the description field in edit mode. */\n  @Input() initialDescription?: string;\n  /** When provided, pre-populates the metadata field in edit mode. */\n  @Input() initialMetadata?: string;\n  /** When true, enables debug-mode behaviour: auto-selects initialTemplate and pre-fills description/metadata. */\n  @Input() isDebug: boolean = false;\n  /** When provided, overrides the default isEditMode logic (useful when parent knows edit state independently of initialTemplate). */\n  @Input() editMode?: boolean;\n\n  get isEditMode(): boolean {\n    if (this.editMode !== undefined) return this.editMode;\n    return this.isDebug && !!this.initialTemplate;\n  }\n\n  /** Placeholder text for search input */\n  @Input() searchPlaceholder: string = 'Search library';\n\n  /** Function to handle variable processing or custom logic. Can be passed from parent component. */\n  @Input() setTemplateVariables: (variables: ActionTemplate) => any = () => { return []};\n  \n  /** Function to handle advanced settings variables. Can be passed from parent component. */\n  @Input() setAdvancedSettingsVariables: (template: ActionTemplate, testStep?: any) => any[] = () => { return []};\n\n  /** Centralised HTML grammar computation function. Pass StepBuilderService.computeHtmlGrammar from the host app. */\n  @Input() computeHtmlGrammarFn?: (template: any, variables: any[]) => string;\n\n  @Input() preventSelectTemplate: string[] = ['databaseverification'];\n  @Input() elementOptions: Element[] = []; // Element objects for element dropdown\n  @Input() hasMoreElements: boolean = false; // Whether more elements are available\n  @Input() isLoadingElements: boolean = false; // Loading state for elements\n  /** Screen name options for element form autocomplete (from API) */\n  @Input() screenNameOptions: { id?: number; name: string }[] = [];\n  /** Whether more screen names are available for infinite scroll */\n  @Input() hasMoreScreenNames: boolean = false;\n  /** True while parent is loading screen names (search or load more) */\n  @Input() isLoadingScreenNames: boolean = false;\n  /** Parameter options for test data parameter dropdown (from API) */\n  @Input() parameterOptions: any[] = []; // TestData[] - raw test data profiles\n  /** Whether more parameters are available for infinite scroll */\n  @Input() hasMoreParameters: boolean = false;\n  /** True while parent is loading parameters (search or load more) */\n  @Input() isLoadingParameters: boolean = false;\n  /** Upload options for upload dropdown (from API) */\n  @Input() uploadOptions: any[] = [];\n  /** Whether more uploads are available for infinite scroll */\n  @Input() hasMoreUploads: boolean = false;\n  /** True while parent is loading uploads (search or load more) */\n  @Input() isLoadingUploads: boolean = false;\n  /** Environment options for environment parameter dropdown (from API) */\n  @Input() environmentOptions: { id: string; name: string; value: string; environment: string }[] = [];\n  /** Whether more environments are available for infinite scroll */\n  @Input() hasMoreEnvironments: boolean = false;\n  /** True while parent is loading environments (search or load more) */\n  @Input() isLoadingEnvironments: boolean = false;\n  /** Default test data profile ID from test case (if available, profile and data set dropdowns will be disabled) */\n  @Input() defaultTestDataProfileId?: number;\n  /** Default test data start index from test case (data set index in the profile) */\n  @Input() defaultTestDataStartIndex?: number;\n  /** Default test data end index from test case (used for FOR loop context) */\n  @Input() defaultTestDataEndIndex?: number;\n  /** Whether current step creation is happening inside FOR loop context */\n  @Input() isInsideForLoopStep: boolean = false;\n  /** True when the parent test case has a test data profile configured (testCase.testDataId is set). */\n  @Input() hasTestDataProfile: boolean = false;\n  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */\n  @Input() isCreatingStep: boolean = false;\n  @Input() elementScreenPrefill?: ElementScreenPrefill | null;\n  @Output() templateChanged = new EventEmitter<ActionTemplate>();\n  @Output() loadMoreElements = new EventEmitter<void>(); // Emit when load more is requested\n  @Output() searchElements = new EventEmitter<string>(); // Emit when user searches for elements\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>(); // Emit when screen name is selected to fetch elements filtered by screen name\n  @Output() createElement = new EventEmitter<any>(); // Emit when element is created\n  @Output() searchScreenName = new EventEmitter<string>(); // Emit when user searches screen names\n  @Output() loadMoreScreenNames = new EventEmitter<string>(); // Emit when user scrolls to load more screen names\n  @Output() createScreenNameRequest = new EventEmitter<string>(); // Emit when user requests to create a new screen name\n  @Output() searchParameters = new EventEmitter<string>(); // Emit when user searches for parameters\n  @Output() loadMoreParameters = new EventEmitter<void>(); // Emit when user scrolls to load more parameters\n  @Output() searchUploads = new EventEmitter<string>(); // Emit when user searches for uploads\n  @Output() loadMoreUploads = new EventEmitter<void>(); // Emit when user scrolls to load more uploads\n  @Output() searchEnvironments = new EventEmitter<string>(); // Emit when user searches for environments\n  @Output() loadMoreEnvironments = new EventEmitter<void>(); // Emit when user scrolls to load more environments\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<any>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n  @Output() redirectToParameter = new EventEmitter<void>();\n  @Output() redirectToEnvironment = new EventEmitter<void>();\n\n  filteredTemplates: ActionTemplate[] = [];\n  searchValue: string = '';\n  selectedTemplate: ActionTemplate | null = null;\n  private previousTemplateForEdit: ActionTemplate | null = null;\n  metadata: string = '';\n  description: string = '';\n  advancedExpanded: boolean = true;\n  templateVariables: TemplateVariable[] = [];\n  variablesForm: FormArray;\n  advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray;\n  updatedHtmlGrammar: string = ''; // Updated HTML grammar with variable values\n  createElementVisible = false;\n  // Track element form visibility\n  \n  @ViewChild(TemplateVariablesFormComponent, { static: false }) templateVariablesForm?: TemplateVariablesFormComponent;\n  \n  // Cache for select configs to avoid recalculating on every change detection\n  private selectConfigCache: Map<string, DynamicSelectFieldConfig> = new Map();\n  private formValidCache: boolean = false;\n  private lastFormValidationTime: number = 0;\n  private readonly FORM_VALIDATION_CACHE_MS = 100; // Cache for 100ms\n  private formValueChangesSubscription?: Subscription;\n\n  constructor(private fb: FormBuilder, private cdr: ChangeDetectorRef) {\n    this.variablesForm = this.fb.array([]);\n    this.advancedVariablesForm = this.fb.array([]);\n  }\n\n  /**\n   * Handle element form visibility change\n   */\n  onElementFormVisibilityChange(visible: boolean): void {\n    this.createElementVisible = visible;\n  }\n\n  onShowElementForm(): void {\n    this.createElementVisible = true;\n  }\n\n  ngOnInit(): void {\n    this.filteredTemplates = [...this.templates];\n    if (this.isDebug) {\n      if (this.initialDescription) this.description = this.initialDescription;\n      if (this.initialMetadata) this.metadata = this.initialMetadata;\n      if (this.initialTemplate) setTimeout(() => this.selectTemplate(this.initialTemplate!), 0);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['templates']) {\n      this.applyFilter();\n    }\n    if (changes['elementScreenPrefill'] && this.elementScreenPrefill) {\n      setTimeout(() => this.applyElementScreenPrefill(), 0);\n    }\n    // When initialTemplate is set after init (async pre-fill), auto-select it\n    if (changes['initialTemplate'] && this.isDebug && this.initialTemplate && !this.selectedTemplate) {\n      setTimeout(() => this.selectTemplate(this.initialTemplate!), 0);\n    }\n    // Parent can trigger \"Change Template\" by incrementing changeTemplateSignal\n    if (changes['changeTemplateSignal'] && !changes['changeTemplateSignal'].firstChange) {\n      this.onChangeTemplate();\n    }\n    // Parent can trigger \"Cancel template selection\" by incrementing cancelChangeTemplateSignal\n    if (changes['cancelChangeTemplateSignal'] && !changes['cancelChangeTemplateSignal'].firstChange) {\n      this.onCancelTemplateSelection();\n    }\n  }\n\n  onSearchChange(value: string): void {\n    this.searchValue = value;\n    this.applyFilter();\n  }\n\n  onSearchSubmit(value: string): void {\n    this.searchValue = value;\n    this.applyFilter();\n  }\n\n  onSearchCleared(): void {\n    this.searchValue = '';\n    this.applyFilter();\n  }\n\n  private applyElementScreenPrefill(): void {\n    const pre = this.elementScreenPrefill;\n    if (!pre || pre.elementId == null || !this.templateVariables?.length) {\n      return;\n    }\n    const targetId = Number(pre.elementId);\n    if (!Number.isFinite(targetId)) {\n      return;\n    }\n    let touched = false;\n    this.templateVariables.forEach((variable, index) => {\n      if (variable.dataKey !== 'element') {\n        return;\n      }\n      if (variable.elementId == null || Number(variable.elementId) !== targetId) {\n        return;\n      }\n      if (pre.screenNameId != null) {\n        variable.screenNameId = Number(pre.screenNameId);\n        touched = true;\n      }\n      if (pre.selectedScreenName) {\n        variable.selectedScreenName = String(pre.selectedScreenName);\n        touched = true;\n      }\n      const variableGroup = this.variablesForm.at(index) as FormGroup;\n      if (variableGroup && pre.screenNameId != null) {\n        const sid = String(pre.screenNameId);\n        if (!variableGroup.get('selectedScreenName')) {\n          variableGroup.addControl('selectedScreenName', new FormControl(sid));\n        } else {\n          variableGroup.get('selectedScreenName')?.setValue(sid, { emitEvent: false });\n        }\n      }\n    });\n    if (touched) {\n      this.templateVariables = [...this.templateVariables];\n      this.cdr.detectChanges();\n    }\n  }\n\n  applyFilter(): void {\n    if (!this.searchValue || this.searchValue.trim() === '') {\n      this.filteredTemplates = [...this.templates];\n      return;\n    }\n\n    const searchTerm = this.searchValue.toLowerCase().trim();\n    this.filteredTemplates = this.templates.filter(template => {\n      const naturalText = template.naturalText?.toLowerCase() || '';\n      // Strip HTML tags from htmlGrammar for searching (only search text content, not HTML markup)\n      const htmlGrammarText = this.stripHtmlTags(template.htmlGrammar || '').toLowerCase();\n      const searchableGrammar = template.searchableGrammar?.toLowerCase() || '';\n      \n      return naturalText.includes(searchTerm) || \n              htmlGrammarText.includes(searchTerm) || \n             searchableGrammar.includes(searchTerm);\n    });\n    console.log(\"filteredTemplates\", this.filteredTemplates);\n  }\n\n  /**\n   * Strip HTML tags from a string, returning only the text content\n   * @param htmlString - HTML string to strip tags from\n   * @returns Plain text without HTML tags\n   */\n  private stripHtmlTags(htmlString: string): string {\n    if (!htmlString) return '';\n    \n    // Use browser's DOMParser if available\n    if (typeof document !== 'undefined' && document.createElement) {\n      try {\n        const tempDiv = document.createElement('div');\n        tempDiv.innerHTML = htmlString;\n        return tempDiv.textContent || tempDiv.innerText || '';\n      } catch (error) {\n        // Fallback to regex if DOM parsing fails\n        return htmlString.replace(/<[^>]*>/g, '');\n      }\n    }\n    \n    // Fallback: regex-based tag removal for server-side rendering\n    return htmlString.replace(/<[^>]*>/g, '');\n  }\n\n  selectTemplate(template: ActionTemplate): void {\n    if(this.preventSelectTemplate.includes(template.displayName || '')) {\n      this.templateChanged.emit(template);\n      return;\n    }\n    this.templateChanged.emit(template);\n    this.selectedTemplate = template;\n    \n    // Clear cache when template changes\n    this.selectConfigCache.clear();\n    this.formValidCache = false;\n    \n    if(this.setTemplateVariables && template.variables) {\n      // Use setTimeout to defer heavy operations and prevent UI freezing\n      // This allows the UI to update first, then process the template variables\n      setTimeout(() => {\n        try {\n          this.templateVariables = this.setTemplateVariables(template);\n          console.log(\"templateVariables\", this.templateVariables);\n          \n          this.buildVariablesForm();\n          // Initialize updated HTML grammar\n          this.updateHtmlGrammar();\n          this.applyElementScreenPrefill();\n\n          // Initialize advanced settings variables\n          if (this.setAdvancedSettingsVariables) {\n            this.advancedSettingsVariables = this.setAdvancedSettingsVariables(template);\n            console.log(\"advancedSettingsVariables\", this.advancedSettingsVariables);\n            this.buildAdvancedVariablesForm();\n          }\n        } catch (error) {\n          console.error('Error processing template variables:', error);\n        }\n      }, 0);\n    } else {\n      // Initialize with template's HTML grammar if no variables\n      this.updatedHtmlGrammar = template.htmlGrammar || template.naturalText || '';\n      \n      // Initialize advanced settings variables even if no template variables\n      if (this.setAdvancedSettingsVariables) {\n        this.advancedSettingsVariables = this.setAdvancedSettingsVariables(template);\n        this.buildAdvancedVariablesForm();\n      }\n    }\n  }\n\n  private buildVariablesForm(): void {\n    // Clear existing form array\n    while (this.variablesForm.length !== 0) {\n      this.variablesForm.removeAt(0);\n    }\n\n    // Clear cache when form is rebuilt\n    this.selectConfigCache.clear();\n    this.formValidCache = false;\n\n    // Unsubscribe from previous subscription if it exists\n    if (this.formValueChangesSubscription) {\n      this.formValueChangesSubscription.unsubscribe();\n    }\n\n    // Add form groups for each variable\n    this.templateVariables.forEach(variable => {\n      // Handle boolean variables - use boolean value, others use string\n      const defaultValue = variable.type === 'boolean' \n        ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n        : (variable.value || '');\n      \n      // Create a FormGroup for each variable with name and value\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || ''],\n        options: [variable.options || []]\n      });\n      \n      // Add dataType control for test-data variables if needed\n      const label = variable.label?.toLowerCase() || '';\n      if (label === 'test_data' || label === 'source-value' || label === 'target-value' || \n          label === 'source_value' || label === 'target_value') {\n        // Parse the value to determine data type\n        const valueStr = String(defaultValue || '');\n        let dataType = 'plain-text';\n        if (valueStr.startsWith('@|') && valueStr.endsWith('|')) {\n          dataType = 'parameter';\n        } else if (valueStr.startsWith('$|') && valueStr.endsWith('|')) {\n          dataType = 'runtime';\n        } else if (valueStr.startsWith('*|') && valueStr.endsWith('|')) {\n          dataType = 'environment';\n        }\n        variableGroup.addControl('dataType', new FormControl(dataType));\n      }\n      \n      this.variablesForm.push(variableGroup);\n    });\n    \n    // Subscribe to form value changes to invalidate cache (only when user actually changes values)\n    // Note: We use emitEvent: false when programmatically setting values, so this won't fire unnecessarily\n    this.formValueChangesSubscription = this.variablesForm.valueChanges.subscribe(() => {\n      this.formValidCache = false;\n    });\n  }\n\n  private buildAdvancedVariablesForm(): void {\n    // Clear existing form array\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    this.advancedSettingsVariables.forEach(variable => {\n      // Handle different types\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        // For str_list, create a FormArray\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArray = this.fb.array(\n          valueArray.length > 0 \n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')] // Start with one empty control\n        );\n        defaultValue = formArray;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n      \n      // Create a FormGroup for each variable\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n      \n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n  \n  ngOnDestroy(): void {\n    // Clean up subscription to prevent memory leaks\n    if (this.formValueChangesSubscription) {\n      this.formValueChangesSubscription.unsubscribe();\n    }\n  }\n\n  getSelectConfig(variable: any, index: number): DynamicSelectFieldConfig {\n    // Use cache to avoid recalculating on every change detection\n    const cacheKey = `${variable.name}_${variable.options?.join(',') || ''}`;\n    if (this.selectConfigCache.has(cacheKey)) {\n      return this.selectConfigCache.get(cacheKey)!;\n    }\n\n    const options: SelectOption[] = (variable.options || []).map((opt: string) => ({\n      id: opt,\n      value: opt,\n      name: opt,\n      label: opt\n    }));\n\n    const config: DynamicSelectFieldConfig = {\n      key: `value`, // Use 'value' as key since we're accessing from FormArray\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: options,\n      onChange: (value: any) => {\n        this.onVariableValueChange(variable.name, value);\n      }\n    };\n    \n    this.selectConfigCache.set(cacheKey, config);\n    return config;\n  }\n  \n  /** Get form group for a variable by name */\n  getVariableFormGroup(variableName: string): FormGroup | null {\n    const variableIndex = this.variablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      return this.variablesForm.at(variableIndex) as FormGroup;\n    }\n    return null;\n  }\n  \n  /** Add a new variable to the form array dynamically */\n  addVariable(variable: any): void {\n    const defaultValue = variable.type === 'boolean' \n      ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n      : (variable.value || '');\n    \n    const variableGroup = this.fb.group({\n      name: [variable.name],\n      value: [defaultValue],\n      type: [variable.type || 'string'],\n      label: [variable.label || ''],\n      options: [variable.options || []]\n    });\n    \n    // Add dataType control for test-data variables if needed\n    const label = variable.label?.toLowerCase() || '';\n    if (label === 'test_data' || label === 'source-value' || label === 'target-value' || \n        label === 'source_value' || label === 'target_value') {\n      const valueStr = String(defaultValue || '');\n      let dataType = 'plain-text';\n      if (valueStr.startsWith('@|') && valueStr.endsWith('|')) {\n        dataType = 'parameter';\n      } else if (valueStr.startsWith('$|') && valueStr.endsWith('|')) {\n        dataType = 'runtime';\n      } else if (valueStr.startsWith('*|') && valueStr.endsWith('|')) {\n        dataType = 'environment';\n      }\n      variableGroup.addControl('dataType', new FormControl(dataType));\n    }\n    \n    this.variablesForm.push(variableGroup);\n    this.formValidCache = false;\n  }\n\n  onVariableValueChange(variableName: string, value: any): void {\n    console.log(\"onVariableValueChange\", variableName, value);\n    // Update the variable in templateVariables array\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array (use emitEvent: false to prevent triggering valueChanges)\n    const variableIndex = this.variablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.variablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n    // Invalidate form validation cache\n    this.formValidCache = false;\n    // Update HTML grammar with new value\n    this.updateHtmlGrammar();\n  }\n\n  onVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in templateVariables array\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array (use emitEvent: false to prevent triggering valueChanges)\n    const variableIndex = this.variablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.variablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    } else {\n      // Create new form group if it doesn't exist\n      const variableGroup = this.fb.group({\n        name: [variableName],\n        value: [value],\n        type: ['boolean'],\n        label: [variable?.label || ''],\n        options: [variable?.options || []]\n      });\n      this.variablesForm.push(variableGroup);\n    }\n    // Invalidate form validation cache\n    this.formValidCache = false;\n    // Update HTML grammar with new value\n    this.updateHtmlGrammar();\n  }\n\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      const formGroup = this.advancedVariablesForm.at(variableIndex) as FormGroup;\n      // For str_list, the FormArray is already managed inside AdvancedVariablesFormComponent,\n      // so we don't need to rebuild or update it here to avoid focus loss.\n      if (variable?.type !== 'str_list') {\n        formGroup.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  onChangeTemplate(): void {\n    if (this.isEditMode && this.selectedTemplate) {\n      this.previousTemplateForEdit = this.selectedTemplate;\n    }\n    this.selectedTemplate = null;\n    this.templateVariables = [];\n    this.advancedSettingsVariables = [];\n    this.updatedHtmlGrammar = '';\n    this.advancedExpanded = false;\n    // Clear form arrays\n    while (this.variablesForm.length !== 0) {\n      this.variablesForm.removeAt(0);\n    }\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n    this.searchValue = '';\n    this.applyFilter();\n  }\n\n  onCancelTemplateSelection(): void {\n    if (this.isEditMode && this.previousTemplateForEdit) {\n      this.selectTemplate(this.previousTemplateForEdit);\n    }\n  }\n\n  onBack(): void {\n    this.selectedTemplate = null;\n    this.metadata = '';\n    this.description = '';\n    this.advancedExpanded = false;\n    this.templateVariables = [];\n    this.advancedSettingsVariables = [];\n    this.updatedHtmlGrammar = '';\n    // Clear form arrays\n    while (this.variablesForm.length !== 0) {\n      this.variablesForm.removeAt(0);\n    }\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n    // Reapply filter to maintain search state\n    this.applyFilter();\n  }\n\n  onCancel(): void {\n    if (!this.isEditMode) this.onBack();\n    this.cancelled.emit();\n  }\n\n  isFormValid(): boolean {\n    if (!this.selectedTemplate) {\n      return false;\n    }\n    \n    // Use cached result if available and recent\n    const now = Date.now();\n    if (this.formValidCache && (now - this.lastFormValidationTime) < this.FORM_VALIDATION_CACHE_MS) {\n      return this.formValidCache;\n    }\n    \n    // Check if all required variables are filled:\n    // For any template variable with dataKey 'test_data' | 'source_value' | 'target_value'\n    // AND dataType 'plain-text' or 'runtime', the underlying value must be non-empty.\n    let customVariablesValid = true;\n    if (this.templateVariables && this.templateVariables.length > 0) {\n      customVariablesValid = this.templateVariables.every(variable => {\n        if (variable.dataKey === 'test_data' || variable.dataKey === 'source_value' || variable.dataKey === 'target_value') {\n          if (variable.dataType === 'plain-text' || variable.dataType === 'runtime') {\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n          if(variable.dataType === 'parameter'){\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n          if(variable.dataType === 'environment'){\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n        }\n        if(variable.dataKey === 'element'){\n          const value = variable.value;\n          return value !== null && value !== undefined && value !== '';\n        }\n        return true;\n      });\n    }\n\n    // Combine reactive form validity with custom variable validation\n    const reactiveValid = this.variablesForm.valid && this.advancedVariablesForm.valid;\n    const finalValid = reactiveValid && customVariablesValid;\n\n    // Cache the result\n    this.formValidCache = finalValid;\n    this.lastFormValidationTime = now;\n    return finalValid;\n  }\n  \n  trackByTemplate(index: number, template: ActionTemplate): any {\n    return template.id || template.displayName || index;\n  }\n  \n  trackByVariable(index: number, variable: any): any {\n    return variable.name || index;\n  }\n\n  onCreateStep(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n    \n    // Get environment IDs from template variables (if any environment type variables are selected)\n    const environmentIds = this.templateVariablesForm?.getEnvironmentIdsForVariables() || new Map<string, number>();\n    const currentTemplateVariables = this.getCurrentTemplateVariables();\n    \n    // Sync advanced variables from form to array\n    this.advancedSettingsVariables.forEach((variable, index) => {\n      const formGroup = this.advancedVariablesForm.at(index) as FormGroup;\n      if (formGroup) {\n        const formValue = formGroup.get('value')?.value;\n        if (variable.type === 'str_list' && formValue instanceof FormArray) {\n          // Extract values from FormArray\n          variable.value = formValue.controls.map(control => control.value).filter((val: string) => val && val.trim() !== '');\n        } else {\n          variable.value = formValue;\n        }\n      }\n    });\n    \n    const stepData = {\n      template: this.selectedTemplate,\n      metadata: this.metadata,\n      description: this.description,\n      templateVariables: currentTemplateVariables,\n      // testDataList: this.buildTestDataList(currentTemplateVariables),\n      advancedSettingsVariables: this.advancedSettingsVariables,\n      environmentIds: environmentIds // Map of variable name to environment ID\n    };\n    console.log(\"stepData\", stepData);\n    console.log(\"variablesForm\", this.variablesForm.value);\n    console.log(\"advancedVariablesForm\", this.advancedVariablesForm.value);\n    console.log(\"environmentIds\", environmentIds);\n    this.createStep.emit(stepData);\n  }\n\n  private getCurrentTemplateVariables(): TemplateVariable[] {\n    const childVariables = this.templateVariablesForm?.templateVariables;\n    if (childVariables && childVariables.length > 0) {\n      this.templateVariables = childVariables;\n      return childVariables;\n    }\n    return this.templateVariables || [];\n  }\n\n  private buildTestDataList(variables: TemplateVariable[]): StepTestDataListItem[] {\n    const testDataList: StepTestDataListItem[] = [];\n\n    for (const variable of variables || []) {\n      const formattedValue = variable?.value;\n      if (formattedValue === undefined || formattedValue === null || formattedValue === '') continue;\n\n      const item = this.resolveVariableTestDataValue(variable);\n      if (!item.testData) continue;\n      testDataList.push(item);\n    }\n\n    return testDataList;\n  }\n\n  private resolveVariableTestDataValue(variable: TemplateVariable): StepTestDataListItem {\n    const formattedValue = variable?.value != null ? String(variable.value) : '';\n    const rawValue = variable?.rawValue != null && String(variable.rawValue) !== '' ? String(variable.rawValue) : formattedValue;\n    const dataType = variable?.dataType || this.parseVariableDataType(formattedValue);\n    const selectedTestDataProfileId = this.resolveSelectedTestDataProfileId(variable);\n\n    if (dataType === 'parameter') {\n      return {\n        testData: rawValue,\n        testDataType: 'parameter',\n        testDataKey: variable.name,\n        ...(selectedTestDataProfileId != null && { testDataProfileId: selectedTestDataProfileId }),\n      };\n    }\n\n    if (dataType === 'runtime') {\n      return {\n        testData: rawValue,\n        testDataKey: variable.name,\n        testDataType: 'runtime',\n      };\n    }\n\n    if (dataType === 'environment') {\n      return {\n        testData: rawValue,\n        testDataKey: variable.name,\n        testDataType: 'environment',\n      };\n    }\n\n    return {\n      testData: formattedValue,\n      testDataKey: variable.name,\n      testDataType: 'raw',\n    };\n  }\n\n  private resolveSelectedTestDataProfileId(variable: TemplateVariable): number | undefined {\n    if (variable.selectedTestDataProfileId != null && !isNaN(Number(variable.selectedTestDataProfileId))) {\n      return Number(variable.selectedTestDataProfileId);\n    }\n\n    const variableGroup = this.templateVariablesForm?.getVariableFormGroup(variable.name);\n    const selectedProfileValue = variableGroup?.get('selectedTestDataProfile')?.value;\n\n    if (selectedProfileValue != null && selectedProfileValue !== '' && !isNaN(Number(selectedProfileValue))) {\n      return Number(selectedProfileValue);\n    }\n\n    const selectedProfileName = variable.selectedTestDataProfile || selectedProfileValue;\n    if (selectedProfileName != null && selectedProfileName !== '') {\n      const matchingProfile = this.parameterOptions.find((testData: any) => {\n        const profileName = testData.name || testData.testDataName;\n        return profileName === selectedProfileName;\n      });\n      if (matchingProfile?.id != null && !isNaN(Number(matchingProfile.id))) {\n        return Number(matchingProfile.id);\n      }\n    }\n\n    return undefined;\n  }\n\n  private parseVariableDataType(value: string): 'plain-text' | 'parameter' | 'runtime' | 'environment' {\n    if (value.startsWith('@|') && value.endsWith('|')) return 'parameter';\n    if (value.startsWith('$|') && value.endsWith('|')) return 'runtime';\n    if (value.startsWith('*|') && value.endsWith('|')) return 'environment';\n    return 'plain-text';\n  }\n\n  toggleAdvanced(): void {\n    this.advancedExpanded = !this.advancedExpanded;\n  }\n\n\n  onElementClick(elementKey: string): void {\n    // Focus on the corresponding input field\n    // This can be enhanced to scroll to or highlight the field\n  }\n\n  onElementValueChange(key: string, value: string): void {\n    console.log(key, value);\n  }\n\n  onTestDataValueChange(key: string, value: string): void {\n    console.log(key, value);\n  }\n\n  /**\n   * Update HTML grammar by replacing placeholder spans with actual variable values.\n   * Delegates to computeHtmlGrammarFn when provided by the host app (centralised logic in StepBuilderService).\n   */\n  private updateHtmlGrammar(): void {\n    if (this.computeHtmlGrammarFn) {\n      this.updatedHtmlGrammar = this.computeHtmlGrammarFn(this.selectedTemplate, this.templateVariables);\n      return;\n    }\n\n    if (!this.selectedTemplate) {\n      this.updatedHtmlGrammar = '';\n      return;\n    }\n\n    const htmlGrammar = this.selectedTemplate.htmlGrammar || this.selectedTemplate.naturalText || '';\n    if (!htmlGrammar) {\n      this.updatedHtmlGrammar = '';\n      return;\n    }\n\n    // Create a map of variable values by name for quick lookup\n    const valueMap = new Map<string, string>();\n    if (this.templateVariables && Array.isArray(this.templateVariables)) {\n      this.templateVariables.forEach((variable: any) => {\n        if (variable.name && variable.value !== undefined && variable.value !== null) {\n          // Convert value to string, handling boolean values\n          let valueStr = '';\n          if (typeof variable.value === 'boolean') {\n            valueStr = variable.value ? 'true' : 'false';\n          } else if (variable.dataKey === 'element' && variable.name !== 'selector') {\n            // Only use elementName if it's defined and not empty\n            if (variable.elementName !== undefined && variable.elementName !== null && variable.elementName !== '') {\n              valueStr = String(variable.elementName);\n            } else {\n              // Skip this variable - don't add to map if element is not selected\n              return;\n            }\n          } else if (variable.dataKey === 'element' && variable.name === 'selector') {\n            // Only use elementLocator if it's defined and not empty\n            if (variable.elementLocator !== undefined && variable.elementLocator !== null && variable.elementLocator !== '') {\n              valueStr = String(variable.elementLocator);\n            } else {\n              // Skip this variable - don't add to map if element locator is not available\n              return;\n            }\n          } else {\n            valueStr = String(variable.value || '');\n          }\n          // Only add to map if valueStr is not empty and not \"undefined\"\n          if (valueStr && valueStr !== 'undefined' && valueStr.trim() !== '') {\n            valueMap.set(variable.name, valueStr);\n          }\n        }\n      });\n    }\n\n    // Use browser's DOMParser if available, otherwise fallback to string replacement\n    if (typeof document !== 'undefined' && document.createElement) {\n      try {\n        const tempDiv = document.createElement('div');\n        tempDiv.innerHTML = String(htmlGrammar);\n\n        // Find all spans with data-event-key attribute\n        const spans = tempDiv.querySelectorAll<HTMLElement>('span[data-event-key]');\n        spans.forEach((span: HTMLElement) => {\n          const eventKey = span.getAttribute('data-event-key');\n          if (eventKey && valueMap.has(eventKey)) {\n            const value = valueMap.get(eventKey);\n            // Only update if value is valid (not undefined, not empty)\n            if (value && value !== 'undefined' && value.trim() !== '') {\n              // Preserve the span structure but update the content\n              span.innerHTML = value;\n            }\n            // If value is invalid, leave the span content as is (don't replace with undefined)\n          }\n        });\n\n        this.updatedHtmlGrammar = tempDiv.innerHTML;\n      } catch (error) {\n        console.error('Error updating HTML grammar:', error);\n        // Fallback to original HTML grammar\n        this.updatedHtmlGrammar = String(htmlGrammar);\n      }\n    } else {\n      // Fallback: simple string replacement for server-side rendering\n      let updatedHtml = String(htmlGrammar);\n      valueMap.forEach((value, key) => {\n        // Only replace if value is valid (not undefined, not empty)\n        if (value && value !== 'undefined' && value.trim() !== '') {\n          // Replace spans with data-event-key matching the variable name\n          const regex = new RegExp(`<span[^>]*data-event-key=\"${key}\"[^>]*>.*?</span>`, 'gi');\n          updatedHtml = updatedHtml.replace(regex, (match) => {\n            // Replace the content inside the span\n            return match.replace(/>.*?</, `>${value}<`);\n          });\n        }\n      });\n      this.updatedHtmlGrammar = updatedHtml;\n    }\n  }\n\n  /**\n   * Check if selector variable is available in templateVariables\n   */\n  get selectorVariableAvailable(): boolean {\n    return this.templateVariables.some(v => v.dataKey === 'element' || v.dataKey === 'label');\n  }\n\n  /**\n   * Check if parameter variable is available (testData with parameter type)\n   */\n  get parameterVariableAvailable(): boolean {\n    return this.templateVariables.some(v => {\n      const dataKey = v.dataKey?.toLowerCase() || '';\n      if (dataKey === 'test_data' || dataKey === 'source_value' || dataKey === 'target_value') {\n        // const dataType = this.variableDataTypes.get(v.name) || 'plain-text';\n        return true;\n      }\n      return false;\n    });\n  }\n\n  /**\n   * Check if environment variable is available (testData with environment type)\n   */\n  get environmentVariableAvailable(): boolean {\n    return this.templateVariables.some(v => {\n      const dataKey = v.dataKey?.toLowerCase() || '';\n      if (dataKey === 'test_data' || dataKey === 'source_value' || dataKey === 'target_value') {\n        // const dataType = this.variableDataTypes.get(v.name) || 'plain-text';\n        return true;\n      }\n      return false;\n    });\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-p-[16px]\" [ngClass]=\"{'cqa-px-4': showHeader, 'cqa-py-2': showHeader && !selectedTemplate}\">\n  <!-- Header -->\n  \n  <div *ngIf=\"showHeader\" class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n    <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-m-0\">\n      {{ isEditMode ? 'Edit an action step' : 'Create an action step' }}\n    </h2>\n    <cqa-button\n      *ngIf=\"isEditMode && selectedTemplate\"\n      variant=\"outlined\"\n      btnSize=\"sm\"\n      icon=\"swap_horiz\"\n      text=\"Change Template\"\n      (clicked)=\"onChangeTemplate()\">\n    </cqa-button>\n    <cqa-button\n      *ngIf=\"isEditMode && !selectedTemplate\"\n      variant=\"text\"\n      btnSize=\"sm\"\n      text=\"Cancel\"\n      (clicked)=\"onCancelTemplateSelection()\">\n    </cqa-button>\n  </div>\n  <div *ngIf=\"!selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-h-full cqa-flex-1\"\n    [ngClass]=\"{'cqa-px-3': showHeader}\">\n\n    <!-- Search Bar -->\n    <div class=\"cqa-pb-1\">\n      <div class=\"cqa-pb-1\" *ngIf=\"showHeader\">\n        <p class=\"cqa-text-[12px] cqa-text-gray-500\">\n          Template library\n        </p>\n      </div>\n      <cqa-search-bar [placeholder]=\"searchPlaceholder\" [fullWidth]=\"true\" [value]=\"searchValue\"\n        (valueChange)=\"onSearchChange($event)\" (search)=\"onSearchSubmit($event)\" (cleared)=\"onSearchCleared()\">\n      </cqa-search-bar>\n    </div>\n\n    <!-- Template List -->\n    <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-px-2\">\n      <div class=\"cqa-py-2\">\n        <div *ngFor=\"let template of filteredTemplates; trackBy: trackByTemplate\"\n          class=\"cqa-action-format cqa-bg-white cqa-cursor-pointer cqa-transition-all hover:cqa-border-blue-500 hover:cqa-shadow-sm mb-6\"\n          (click)=\"selectTemplate(template)\">\n          <div class=\"cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n            [innerHTML]=\"template.htmlGrammar || template.naturalText || ''\">\n          </div>\n        </div>\n\n        <div *ngIf=\"filteredTemplates.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-gray-400 cqa-text-[12px]\">\n          No templates found\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div *ngIf=\"selectedTemplate\" class=\"cqa-flex cqa-flex-col cqa-overflow-y-auto\" style=\"flex: 1 1 0 !important;\">\n    <!-- Instruction Text with Element Buttons -->\n    <div class=\"cqa-mb-2 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700 cqa-py-2\">\n      <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n        [innerHTML]=\"updatedHtmlGrammar || selectedTemplate.htmlGrammar || selectedTemplate.naturalText || ''\">\n      </div>\n      \n      <div class=\"cqa-flex cqa-justify-end cqa-pt-2 cqa-gap-2\" *ngIf=\"!createElementVisible\">\n        <cqa-button \n          *ngIf=\"selectorVariableAvailable\"\n          variant=\"outlined\" \n          btnSize=\"sm\"\n          icon=\"add\"\n          text=\"Create Element\"\n          (clicked)=\"onShowElementForm()\">\n        </cqa-button>\n        <cqa-button \n          *ngIf=\"parameterVariableAvailable\"\n          variant=\"outlined\" \n          btnSize=\"sm\"\n          icon=\"add\"\n          text=\"Create Parameter\"\n          (clicked)=\"redirectToParameter.emit()\">\n        </cqa-button>\n        <cqa-button \n          *ngIf=\"environmentVariableAvailable\"\n          variant=\"outlined\" \n          btnSize=\"sm\"\n          icon=\"add\"\n          text=\"Create Environment\"\n          (clicked)=\"redirectToEnvironment.emit()\">\n        </cqa-button>\n      </div>\n    </div>\n\n    <!-- Form Fields in Two Columns -->\n    <div class=\"cqa-flex cqa-overflow-y-auto cqa-flex-1 cqa-pb-2\">\n      <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1\">\n        <div class=\"cqa-flex cqa-gap-x-6 cqa-flex-wrap cqa-pb-4\">\n          <!-- Template Variables Form Component -->\n          <cqa-template-variables-form\n            #templateVariablesForm\n            style=\"width: 100%;\"\n            [isDebug]=\"isDebug\"\n            [templateVariables]=\"templateVariables\"\n            [variablesForm]=\"variablesForm\"\n            [metadata]=\"metadata\"\n            [description]=\"description\"\n            [elementOptions]=\"elementOptions\"\n            [hasMoreElements]=\"hasMoreElements\"\n            [isLoadingElements]=\"isLoadingElements\"\n            [screenNameOptions]=\"screenNameOptions\"\n            [hasMoreScreenNames]=\"hasMoreScreenNames\"\n            [isLoadingScreenNames]=\"isLoadingScreenNames\"\n            [parameterOptions]=\"parameterOptions\"\n            [hasMoreParameters]=\"hasMoreParameters\"\n            [isLoadingParameters]=\"isLoadingParameters\"\n            [uploadOptions]=\"uploadOptions\"\n            [hasMoreUploads]=\"hasMoreUploads\"\n            [isLoadingUploads]=\"isLoadingUploads\"\n            [environmentOptions]=\"environmentOptions\"\n            [hasMoreEnvironments]=\"hasMoreEnvironments\"\n            [isLoadingEnvironments]=\"isLoadingEnvironments\"\n            [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n            [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n            [defaultTestDataEndIndex]=\"defaultTestDataEndIndex\"\n            [isInsideForLoopStep]=\"isInsideForLoopStep\"\n            [hasTestDataProfile]=\"hasTestDataProfile\"\n            [createElementVisible]=\"createElementVisible\"\n            (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n            (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n            (metadataChange)=\"metadata = $event\"\n            (descriptionChange)=\"description = $event\"\n            (loadMoreElements)=\"loadMoreElements.emit()\"\n            (searchElements)=\"searchElements.emit($event)\"\n            (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n            (createElement)=\"createElement.emit($event)\"\n            (searchScreenName)=\"searchScreenName.emit($event)\"\n            (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n            (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n            (searchParameters)=\"searchParameters.emit($event)\"\n            (loadMoreParameters)=\"loadMoreParameters.emit()\"\n            (searchUploads)=\"searchUploads.emit($event)\"\n            (loadMoreUploads)=\"loadMoreUploads.emit()\"\n            (searchEnvironments)=\"searchEnvironments.emit($event)\"\n            (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\"\n            (elementFormVisibilityChange)=\"onElementFormVisibilityChange($event)\">\n          </cqa-template-variables-form>\n        </div>\n\n        <!-- Advanced (Expandable) -->\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                (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n              </cqa-advanced-variables-form>\n            </div>\n          </div> \n        <div>\n          \n        </div>\n      </div>\n\n\n    </div>\n\n    <!-- Action Buttons -->\n    <div *ngIf=\"!createElementVisible\" class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-border-t cqa-border-gray-200 cqa-pb-2\">\n      <cqa-button class=\"cqa-w-1/2\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n        (clicked)=\"onCancel()\">\n      </cqa-button>\n      <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"isEditMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n        [disabled]=\"!isFormValid()\"\n        (clicked)=\"onCreateStep()\">\n      </cqa-button>\n      <!-- Loader slot: same size as Create Step button (lg: 38px height, full width, rounded-[8px]) -->\n      <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n        <cqa-badge\n          label=\"Creating…\"\n          icon=\"autorenew\"\n          [isLoading]=\"true\"\n          [fullWidth]=\"true\"\n          [centerContent]=\"true\"\n          [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n          variant=\"info\"\n          size=\"medium\">\n        </cqa-badge>\n      </div>\n    </div>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormGroup, FormControl, FormArray, FormBuilder } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { ActionTemplate } from '../step-builder-action/step-builder-action.component';\n\n// Import Element type - using any for now since Element is from ts-portal-ui\n// In a real scenario, you might want to create a shared interface or import from a shared package\ninterface Element {\n  id?: number;\n  name: string;\n  locatorValue?: string;\n  otherLocator?: string[];\n  [key: string]: any;\n}\n\nexport type LoopType = 'for' | 'while';\n\n/**\n * Interface for data profile option\n * Based on TestData model structure\n */\nexport interface DataProfileOption {\n  id: number | string;\n  name: string;\n  /** Array of data sets - length determines available loop indices */\n  data?: any[];\n  /** Optional: direct data length if data array is not provided */\n  dataLength?: number;\n}\n\nexport interface LoopFormData {\n  selectedLoopType: LoopType;\n  loopType: LoopType;\n  selectOption?: string;\n  dataProfile?: string | number;\n  loopStart?: number | string;\n  loopEnd?: number | string;\n  runTime?: string;\n  whileTemplate?: any;\n  event?: any;\n  advancedSettingsVariables?: any[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-loop',\n  templateUrl: './step-builder-loop.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderLoopComponent implements OnInit, OnChanges {\n  /** Currently selected loop type */\n  @Input() loopType: LoopType = 'for';\n\n  /** Options for the select option dropdown */\n  @Input() selectOptions: any[] = [\n    {value: 'dataProfile', label: 'Data Profile'},\n    {value: 'runTime', label: 'Run Time'}\n  ];\n\n  /** Options for the data profile dropdown - accepts DataProfileOption objects */\n  @Input() dataProfileOptions: DataProfileOption[] = [];\n\n  /** Indicates if more data profiles are available for loading */\n  @Input() hasMoreDataProfiles: boolean = false;\n\n  /** Loading state for data profiles */\n  @Input() isLoadingDataProfiles: boolean = false;\n  /** True while parent is creating the step (API in progress); show loader on Create Step button */\n  @Input() isCreatingStep: boolean = false;\n  /** Function to handle variable processing or custom logic. Can be passed from parent component. */\n  @Input() setWhileTemplateVariables: (variables: ActionTemplate) => any = () => { return []};\n  /** Function to handle advanced settings variables. Can be passed from parent component. */\n  @Input() setAdvancedSettingsVariables: (template: ActionTemplate, testStep?: any) => any[] = () => { return []};\n\n  /** Centralised HTML grammar computation function. Pass StepBuilderService.computeHtmlGrammar from the host app. */\n  @Input() computeHtmlGrammarFn?: (template: any, variables: any[]) => string;\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<LoopFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Emit when loop type changes */\n  @Output() loopTypeChange = new EventEmitter<LoopType>();\n\n  /** Emit when more data profiles need to be loaded */\n  @Output() loadMoreDataProfiles = new EventEmitter<string>();\n\n  /** Emit when data profile search query changes */\n  @Output() searchDataProfiles = new EventEmitter<string>();\n  @Input() whileTemplates: any[] = [];\n  @Input() whileSearchPlaceholder: string = 'Search While';\n  @Input() whileSearchValue: string = '';\n  \n  // Element fetching properties\n  @Input() elementOptions: any[] = [];\n  @Input() hasMoreElements: boolean = false;\n  @Input() isLoadingElements: boolean = false;\n  \n  // Screen name fetching properties\n  @Input() screenNameOptions: { id?: number; name: string }[] = [];\n  @Input() hasMoreScreenNames: boolean = false;\n  @Input() isLoadingScreenNames: boolean = false;\n  \n  // Parameter fetching properties\n  @Input() parameterOptions: any[] = []; // TestData[] - raw test data profiles\n  @Input() hasMoreParameters: boolean = false;\n  @Input() isLoadingParameters: boolean = false;\n  \n  // Environment fetching properties\n  @Input() environmentOptions: { id: string; name: string; value: string; environment: string }[] = [];\n  @Input() hasMoreEnvironments: boolean = false;\n  @Input() isLoadingEnvironments: boolean = false;\n  \n  // Default test data profile properties\n  @Input() defaultTestDataProfileId?: number;\n  @Input() defaultTestDataStartIndex?: number;\n  @Input() defaultTestDataEndIndex?: number;\n  @Input() isInsideForLoopStep: boolean = false;\n  @Input() hasTestDataProfile: boolean = false;\n\n  /** When true, header and button show edit/update wording (same as action step builder in debug). */\n  @Input() isDebug: boolean = false;\n  /** Existing step when editing; used with isDebug to determine edit mode. */\n  @Input() testStep?: any;\n\n  get isEditMode(): boolean {\n    return !!this.isDebug && !!(this.testStep?.id ?? this.testStep?.step_id);\n  }\n  \n  @Output() loadMoreElements = new EventEmitter<void>();\n  @Output() searchElements = new EventEmitter<string>();\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>(); // Emit when screen name is selected to fetch elements filtered by screen name\n  @Output() createElement = new EventEmitter<any>();\n  @Output() searchScreenName = new EventEmitter<string>();\n  @Output() loadMoreScreenNames = new EventEmitter<string>();\n  @Output() createScreenNameRequest = new EventEmitter<string>();\n  @Output() cancelElementForm = new EventEmitter<void>();\n  @Output() searchParameters = new EventEmitter<string>();\n  @Output() loadMoreParameters = new EventEmitter<void>();\n  @Output() searchEnvironments = new EventEmitter<string>();\n  @Output() loadMoreEnvironments = new EventEmitter<void>();\n  @Output() redirectToParameter = new EventEmitter<void>();\n  @Output() redirectToEnvironment = new EventEmitter<void>();\n  \n  selectedWhileTemplate: any = null;\n  selectedWhileDescription: string = '';\n  selectedWhileMetadata: string = '';\n  selectedLoopType: LoopType = 'for';\n  whileChangeTemplateSignal: number = 0;\n  whileCancelChangeTemplateSignal: number = 0;\n  whileIsChangingTemplate: boolean = false;\n\n  onWhileChangeTemplate(): void {\n    this.whileIsChangingTemplate = true;\n    this.whileChangeTemplateSignal++;\n  }\n\n  onWhileCancelChangeTemplate(): void {\n    this.whileIsChangingTemplate = false;\n    this.whileCancelChangeTemplateSignal++;\n  }\n  \n  // Single FormGroup containing all four fields\n  loopForm: FormGroup;\n\n  // Advanced settings state (same pattern as action step builder)\n  advancedExpanded: boolean = true;\n  advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray;\n\n  // Configs for dynamic-select components\n  selectOptionConfig: DynamicSelectFieldConfig;\n  dataProfileConfig: DynamicSelectFieldConfig;\n  loopStartConfig: DynamicSelectFieldConfig;\n  loopEndConfig: DynamicSelectFieldConfig;\n\n\n  // Internal state for managing loop indices\n  private selectedDataProfile: DataProfileOption | null = null;\n  private startArray: number[] = [];\n  private endArray: number[] = [];\n\n  constructor(private fb: FormBuilder) {\n    // Initialize single FormGroup with all fields\n    this.loopForm = new FormGroup({\n      selectOption: new FormControl(null),\n      dataProfile: new FormControl(null),\n      loopStart: new FormControl(null),\n      loopEnd: new FormControl(null),\n      runTime: new FormControl(null)\n    });\n\n    // Initialize advanced variables form\n    this.advancedVariablesForm = this.fb.array([]);\n\n    // Initialize configs\n    this.selectOptionConfig = {\n      key: 'selectOption',\n      placeholder: 'select option',\n      selectedValue: 'dataProfile',\n      multiple: false,\n      searchable: false,\n      options: this.selectOptions\n    };\n    this.dataProfileConfig = {\n      key: 'dataProfile',\n      placeholder: 'data profile',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      hasMore: this.hasMoreDataProfiles,\n      isLoading: this.isLoadingDataProfiles,\n      options: [],\n      onChange: (value: any) => {\n        this.onDataProfileChange(value);\n      },\n      onSearch: (query: string) => {\n        this.onSearchDataProfiles(query);\n      },\n      onLoadMore: (query?: string) => {\n        this.loadMoreDataProfiles.emit(query || '');\n      }\n    };\n    this.loopStartConfig = {\n      key: 'loopStart',\n      placeholder: 'loop start',\n      multiple: false,\n      searchable: false,\n      options: [],\n      onChange: (value: any) => {\n        this.onLoopStartChange(value);\n      }\n    };\n    this.loopEndConfig = {\n      key: 'loopEnd',\n      placeholder: 'loop end',\n      multiple: false,\n      searchable: false,\n      options: [],\n      onChange: (value: any) => {\n        // Handle change if needed\n      }\n    };  \n  }\n\n  ngOnInit(): void {\n    this.selectedLoopType = this.loopType;\n    this.updateConfigs();\n\n    // Initialize advanced settings variables for loop steps (same type as other steps)\n    this.initAdvancedSettingsVariables();\n\n    if (this.isEditMode && this.testStep) {\n      this.patchFormFromTestStep();\n      setTimeout(() => this.patchFormFromTestStep(), 0);\n    } else {\n      this.applyDefaultDataProfile();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['selectOptions']) {\n      this.updateConfigs();\n    }\n    if (changes['dataProfileOptions']) {\n      this.updateConfigs();\n      // If a data profile is already selected in the form, update loop indices (do not re-patch from testStep here,\n      // as that would overwrite user's in-progress change from Run Time to Data Profile when the dropdown opens)\n      const currentProfileId = this.loopForm.get('dataProfile')?.value;\n      if (currentProfileId) {\n        this.onDataProfileChange(currentProfileId);\n      }\n      if (!this.isEditMode) {\n        this.applyDefaultDataProfile();\n      }\n    }\n    if ((changes['defaultTestDataProfileId'] || changes['isInsideForLoopStep']) && !this.isEditMode) {\n      this.applyDefaultDataProfile();\n    }\n    if (changes['hasMoreDataProfiles'] || changes['isLoadingDataProfiles']) {\n      this.updateDataProfileConfig();\n    }\n    if (changes['loopType']) {\n      this.selectedLoopType = this.loopType;\n    }\n    if (changes['testStep'] || changes['isDebug']) {\n      if (this.isEditMode && this.testStep) {\n        this.patchFormFromTestStep();\n      }\n    }\n    if (changes['whileTemplates'] && this.isEditMode && this.testStep && !this.selectedWhileTemplate) {\n      this.patchFormFromTestStep();\n    }\n    // Note: loopStartOptions and loopEndOptions are now calculated dynamically\n    // so they don't need to be updated from inputs\n  }\n\n  /**\n   * Resolve loop step values from step (same fallbacks as test-case-details: dataMapJson, dataMapBean.for_loop).\n   */\n  private getLoopStepValue(step: any, key: 'forLoopTestDataId' | 'forLoopStartIndex' | 'forLoopEndIndex'): any {\n    const dataMap = step?.dataMapJson ?? step?.dataMapBean?.for_loop;\n    const mapKey = key === 'forLoopTestDataId' ? 'testDataId' : key === 'forLoopStartIndex' ? 'startIndex' : 'endIndex';\n    return step?.[key] ?? step?.dataMapJson?.[key] ?? dataMap?.[mapKey] ?? dataMap?.[key];\n  }\n\n  /**\n   * Pre-fill the form from an existing step (edit mode). Debug only — only runs when isDebug is true.\n   * Uses same fallbacks as test-case-details (dataMapJson, dataMapBean.for_loop) and explicitly\n   * setValue on controls so dropdowns bind (patchValue can be ignored by dynamic-select in some timing cases).\n   */\n  private patchFormFromTestStep(): void {\n    if (!this.isDebug || !this.testStep) return;\n    const step = this.testStep as any;\n    const isWhile = step.testStepType === 'WHILE_LOOP' || step.type === 'WHILE_LOOP';\n    this.selectedLoopType = isWhile ? 'while' : 'for';\n\n    if (this.selectedLoopType === 'for') {\n      const isRunTime = !!step.isRunTime;\n      const selectOption = isRunTime ? 'runTime' : 'dataProfile';\n      const profileId = isRunTime ? null : (this.getLoopStepValue(step, 'forLoopTestDataId') ?? null);\n      const startVal = isRunTime ? null : (this.getLoopStepValue(step, 'forLoopStartIndex') ?? null);\n      const endVal = isRunTime ? null : (this.getLoopStepValue(step, 'forLoopEndIndex') ?? null);\n      const runTimeVal = isRunTime ? (step.testDataVal ?? step.testData ?? '') : null;\n\n      this.loopForm.patchValue({\n        selectOption,\n        dataProfile: profileId,\n        loopStart: startVal,\n        loopEnd: endVal,\n        runTime: runTimeVal\n      }, { emitEvent: false });\n\n      if (!isRunTime && profileId != null) {\n        this.onDataProfileChange(profileId);\n        const start = startVal ?? this.loopForm.get('loopStart')?.value;\n        const end = endVal ?? this.loopForm.get('loopEnd')?.value;\n        this.loopForm.patchValue({ loopStart: start, loopEnd: end }, { emitEvent: false });\n      }\n\n      this.loopForm.get('selectOption')?.setValue(selectOption, { emitEvent: false });\n      if (profileId != null) this.loopForm.get('dataProfile')?.setValue(profileId, { emitEvent: false });\n      if (startVal != null) this.loopForm.get('loopStart')?.setValue(startVal, { emitEvent: false });\n      if (endVal != null) this.loopForm.get('loopEnd')?.setValue(endVal, { emitEvent: false });\n      if (runTimeVal != null && runTimeVal !== '') this.loopForm.get('runTime')?.setValue(runTimeVal, { emitEvent: false });\n    } else if (this.selectedLoopType === 'while') {\n      // Pre-fill the while condition template from the condition child\n      const condChild = step.children?.find((c: any) => c.conditionType === 'LOOP_WHILE');\n      if (condChild) {\n        if (condChild.template) {\n          this.selectedWhileTemplate = condChild.template;\n        } else if (condChild.naturalTextActionId && this.whileTemplates?.length) {\n          const nlId = Number(condChild.naturalTextActionId);\n          const matched = this.whileTemplates.find((t: any) => Number(t.id) === nlId);\n          if (matched) this.selectedWhileTemplate = matched;\n        }\n        if (condChild.description) this.selectedWhileDescription = condChild.description;\n        if (condChild.metadata) this.selectedWhileMetadata = condChild.metadata;\n      }\n    }\n\n    const shouldSkip = !!(step.shouldSkip ?? step.event?.shouldSkip);\n    const skipVar = this.advancedSettingsVariables.find(v => v.name === 'shouldSkip');\n    if (skipVar) {\n      skipVar.value = shouldSkip;\n      this.buildAdvancedVariablesForm();\n    }\n  }\n\n  /**\n   * Initialize advanced settings variables for loop steps.\n   * For loops, we currently support the same generic advanced flag: shouldSkip.\n   */\n  private initAdvancedSettingsVariables(): void {\n    this.advancedSettingsVariables = [\n      {\n        name: 'shouldSkip',\n        label: 'Skip this step during execution.',\n        value: false,\n        type: 'boolean'\n      }\n    ];\n\n    this.buildAdvancedVariablesForm();\n  }\n\n  /**\n   * Build reactive form for advanced settings variables (mirrors action step behavior).\n   */\n  private buildAdvancedVariablesForm(): void {\n    // Clear existing form array\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    this.advancedSettingsVariables.forEach(variable => {\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArray = this.fb.array(\n          valueArray.length > 0\n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')]\n        );\n        defaultValue = formArray;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n\n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  private updateConfigs(): void {\n    // Convert DataProfileOption[] to SelectOption[]\n    this.dataProfileConfig = {\n      ...this.dataProfileConfig,\n      options: this.convertDataProfileOptionsToSelectOptions(this.dataProfileOptions),\n      hasMore: this.hasMoreDataProfiles,\n      isLoading: this.isLoadingDataProfiles,\n      onChange: (value: any) => {\n        this.onDataProfileChange(value);\n      },\n      onSearch: (query: string) => {\n        this.onSearchDataProfiles(query);\n      },\n      onLoadMore: (query?: string) => {\n        this.loadMoreDataProfiles.emit(query || '');\n      }\n    };\n    \n    // Loop start and end options are updated when data profile is selected\n    this.updateLoopIndexOptions();\n  }\n\n  private convertDataProfileOptionsToSelectOptions(options: DataProfileOption[]): SelectOption[] {\n    return options.map(option => ({\n      id: option.id,\n      value: option.id,\n      name: option.name,\n      label: option.name\n    }));\n  }\n  /**\n   * When a default test data profile is provided (e.g., testCase.testDataId) and the user is\n   * creating a FOR loop at the root level, auto-select it and disable the dropdown.\n   */\n  private applyDefaultDataProfile(): void {\n    if (this.isEditMode) return;\n    // Only auto-select + disable when the new FOR loop is NOT nested inside another FOR loop.\n    // When nested, the user should be free to pick a different data profile.\n    if (this.isInsideForLoopStep) {\n      this.setDataProfileDisabled(false);\n      return;\n    }\n    if (this.defaultTestDataProfileId == null) {\n      this.setDataProfileDisabled(false);\n      return;\n    }\n    const profileExists = this.dataProfileOptions.some(p =>\n      String(p.id) === String(this.defaultTestDataProfileId)\n    );\n    if (!profileExists) return;\n\n    const control = this.loopForm.get('dataProfile');\n    const currentValue = control?.value;\n    if (String(currentValue ?? '') !== String(this.defaultTestDataProfileId)) {\n      control?.setValue(this.defaultTestDataProfileId, { emitEvent: false });\n      this.onDataProfileChange(this.defaultTestDataProfileId);\n    }\n    this.setDataProfileDisabled(true);\n  }\n\n  private setDataProfileDisabled(disabled: boolean): void {\n    if (!this.dataProfileConfig || this.dataProfileConfig.disabled === disabled) return;\n    // Only toggle the config-level disabled flag; keep the FormControl enabled so\n    // its value is included in form.value when the step is created.\n    this.dataProfileConfig = { ...this.dataProfileConfig, disabled };\n  }\n\n  /**\n   * Handle data profile selection and update loop start/end options\n   */\n  private onDataProfileChange(profileId: any): void {\n    const selectedProfile = this.dataProfileOptions.find(profile => \n      profile.id === profileId || String(profile.id) === String(profileId)\n    );\n\n    if (selectedProfile) {\n      this.selectedDataProfile = selectedProfile;\n      this.updateLoopIndicesFromProfile(selectedProfile);\n    } else {\n      this.selectedDataProfile = null;\n      this.startArray = [];\n      this.endArray = [];\n      this.updateLoopIndexOptions();\n    }\n  }\n\n  /**\n   * Calculate loop indices based on selected data profile\n   */\n  private updateLoopIndicesFromProfile(profile: DataProfileOption): void {\n    // Calculate data length from data array or use provided dataLength\n    let dataSetLength = 1;\n    if (profile.data && Array.isArray(profile.data)) {\n      dataSetLength = profile.data.length;\n    } else if (profile.dataLength && profile.dataLength > 0) {\n      dataSetLength = profile.dataLength;\n    }\n\n    // Create start array from 1 to dataSetLength\n    this.startArray = Array.from({ length: dataSetLength }, (_, i) => i + 1);\n    // Initialize end array same as start array\n    // End array will be updated when start index is selected\n    this.endArray = [...this.startArray];\n\n    // Set default values if form is empty\n    const currentStart = this.loopForm.get('loopStart')?.value;\n    const currentEnd = this.loopForm.get('loopEnd')?.value;\n    \n    if (!currentStart && this.startArray.length > 0) {\n      this.loopForm.get('loopStart')?.setValue(this.startArray[0]);\n    }\n    if (!currentEnd && this.endArray.length > 0) {\n      this.loopForm.get('loopEnd')?.setValue(this.endArray[this.endArray.length - 1]);\n    }\n\n    this.updateLoopIndexOptions();\n  }\n\n  /**\n   * Handle loop start change and update end options\n   */\n  private onLoopStartChange(startIndex: any): void {\n    if (!this.selectedDataProfile || !startIndex) {\n      this.endArray = [...this.startArray];\n      this.updateLoopIndexOptions();\n      return;\n    }\n\n    const startIdx = typeof startIndex === 'string' ? parseInt(startIndex) : startIndex;\n    \n    if (isNaN(startIdx) || startIdx < 1) {\n      this.endArray = [...this.startArray];\n    } else {\n      // End array should be from startIndex to end of data\n      // Based on reference: endArray = startArray.splice(startIndex - 1, startArray.length)\n      const startArrayCopy = [...this.startArray];\n      this.endArray = startArrayCopy.slice(startIdx - 1);\n    }\n\n    // Auto-update end index if current end is invalid\n    const currentEnd = this.loopForm.get('loopEnd')?.value;\n    const endIdx = typeof currentEnd === 'string' ? parseInt(currentEnd) : currentEnd;\n    \n    if (!currentEnd || isNaN(endIdx) || endIdx < startIdx) {\n      if (this.endArray.length > 0) {\n        this.loopForm.get('loopEnd')?.setValue(this.endArray[this.endArray.length - 1]);\n      }\n    }\n\n    this.updateLoopIndexOptions();\n  }\n\n  /**\n   * Get display name for a 1-based row index from the selected profile's data array (data[index-1].name).\n   * Returns null if no name. Matches loop-step edit mode behavior.\n   */\n  private getDataRowNameForOneBasedIndex(oneBasedIndex: number): string | null {\n    const profile = this.selectedDataProfile;\n    if (!profile?.data || !Array.isArray(profile.data)) return null;\n    const idx = oneBasedIndex - 1;\n    if (idx < 0 || idx >= profile.data.length) return null;\n    const row = profile.data[idx];\n    return row && (row.name != null ? String(row.name) : null);\n  }\n\n  /**\n   * Build label for a loop index option: \"setName (n)\" when row has name, else \"Step (n)\".\n   * Matches loop-step edit mode dropdown display.\n   */\n  private getLoopIndexOptionLabel(idx: number): string {\n    const rowName = this.getDataRowNameForOneBasedIndex(idx);\n    return rowName ? `${rowName} (${idx})` : `Step (${idx})`;\n  }\n\n  /**\n   * Update loop start and end config options\n   */\n  private updateLoopIndexOptions(): void {\n    // Convert startArray to SelectOptions with \"Step (n)\" or \"setName (n)\" labels\n    const startOptions: SelectOption[] = this.startArray.map(idx => {\n      const label = this.getLoopIndexOptionLabel(idx);\n      return { id: idx, value: idx, name: label, label };\n    });\n\n    // Convert endArray to SelectOptions with same label format\n    const endOptions: SelectOption[] = this.endArray.map(idx => {\n      const label = this.getLoopIndexOptionLabel(idx);\n      return { id: idx, value: idx, name: label, label };\n    });\n\n    this.loopStartConfig = {\n      ...this.loopStartConfig,\n      options: [{id: -1, value: -1, name: 'Start', label: 'Start'}, ...startOptions],\n      onChange: (value: any) => {\n        this.onLoopStartChange(value);\n      }\n    };\n\n    this.loopEndConfig = {\n      ...this.loopEndConfig,\n      options: [...endOptions,{id: -1, value: -1, name: 'End', label: 'End'}],\n      onChange: (value: any) => {\n        // Handle change if needed\n      }\n    };\n  }\n\n  onLoopTypeChange(type: string | LoopType): void {\n    const loopType = type as LoopType;\n    this.selectedLoopType = loopType;\n    this.loopTypeChange.emit(loopType);\n  }\n\n  /**\n   * Toggle visibility of the Advanced settings section.\n   */\n  toggleAdvanced(): void {\n    this.advancedExpanded = !this.advancedExpanded;\n  }\n\n  /**\n   * Handle advanced boolean variable change (e.g. shouldSkip).\n   */\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  /**\n   * Handle advanced non-boolean value changes (kept generic for future use, e.g. str_list).\n   */\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      const formGroup = this.advancedVariablesForm.at(variableIndex) as FormGroup;\n      if (variable?.type !== 'str_list') {\n        formGroup.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  onCancel(): void {\n    this.resetForm();\n    this.cancelled.emit();\n  }\n\n  isFormValid(): boolean {\n    if (this.selectedLoopType === 'while') {\n      return !!this.selectedWhileTemplate;\n    } else {\n      // For 'for' loop type — use getRawValue so disabled controls (e.g., auto-selected\n      // default data profile) are still included.\n      const formValue = this.loopForm.getRawValue();\n      const selectOption = formValue.selectOption;\n      \n      if (!selectOption) {\n        return false;\n      }\n      \n      if (selectOption === 'dataProfile') {\n        // For data profile, need dataProfile, loopStart, and loopEnd\n        return !!(formValue.dataProfile && formValue.loopStart && formValue.loopEnd);\n      } else if (selectOption === 'runTime') {\n        // For run time, need runTime value\n        return !!(formValue.runTime && formValue.runTime.trim() !== '');\n      }\n      \n      return false;\n    }\n  }\n\n  onCreateStep(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n\n    // Sync advanced variables from form to array (same pattern as action step)\n    this.advancedSettingsVariables.forEach((variable, index) => {\n      const formGroup = this.advancedVariablesForm.at(index) as FormGroup;\n      if (formGroup) {\n        const formValue = formGroup.get('value')?.value;\n        if (variable.type === 'str_list' && formValue instanceof FormArray) {\n          variable.value = formValue.controls\n            .map(control => control.value)\n            .filter((val: string) => val && val.trim() !== '');\n        } else {\n          variable.value = formValue;\n        }\n      }\n    });\n\n    const formValue = this.loopForm.getRawValue();\n    if(this.selectedLoopType === 'while') {\n      if(!this.selectedWhileTemplate) {\n        return;\n      }\n    }\n    const stepData: LoopFormData = {\n      selectedLoopType: this.selectedLoopType as LoopType,\n      loopType: this.selectedLoopType,\n      selectOption: formValue.selectOption || undefined,\n      dataProfile: formValue.dataProfile || undefined,\n      loopStart: formValue.loopStart || undefined,\n      loopEnd: formValue.loopEnd || undefined,\n      runTime: formValue.runTime || undefined,\n      whileTemplate: this.selectedWhileTemplate || undefined,\n      advancedSettingsVariables: this.advancedSettingsVariables\n    };\n    console.log('stepData', stepData);\n    this.createStep.emit(stepData);\n  }\n\n  createWhileStep(event: any): void {\n    console.log('createWhileStep', event);\n    const stepData: LoopFormData = {\n      selectedLoopType: this.selectedLoopType as LoopType,\n      loopType: this.selectedLoopType as LoopType,\n      event: event\n    };\n    console.log('stepData', stepData);\n    this.createStep.emit(stepData);\n  }\n\n  /**\n   * Handle search event for data profiles\n   */\n  onSearchDataProfiles(query: string): void {\n    this.searchDataProfiles.emit(query);\n  }\n\n  /**\n   * Handle loadMore event for data profiles\n   */\n  onLoadMoreDataProfiles(event: { key: string; query: string }): void {\n    this.loadMoreDataProfiles.emit(event.query);\n  }\n\n  /**\n   * Update data profile config when loading state or hasMore changes\n   */\n  private updateDataProfileConfig(): void {\n    if (this.dataProfileConfig) {\n      this.dataProfileConfig = {\n        ...this.dataProfileConfig,\n        hasMore: this.hasMoreDataProfiles,\n        isLoading: this.isLoadingDataProfiles\n      };\n    }\n  }\n\n  private resetForm(): void {\n    this.selectedLoopType = 'for';\n    this.selectedDataProfile = null;\n    this.startArray = [];\n    this.endArray = [];\n    this.loopForm.reset({\n      selectOption: null,\n      dataProfile: null,\n      loopStart: null,\n      loopEnd: null\n    });\n    this.updateLoopIndexOptions();\n  }\n\n  onWhileSearchChange(event: any): void {\n    this.whileSearchValue = event;\n    this.filterWhileTemplates(event);\n  }\n\n  onWhileSearchSubmit(event: any): void {\n    this.onWhileSearchChange(event);\n  }\n\n  onWhileSearchCleared(): void {\n    this.whileSearchValue = '';\n    this.filterWhileTemplates('');\n  }\n\n  filterWhileTemplates(query: string): void {\n    this.whileTemplates = this.whileTemplates.filter(template => template.htmlGrammar.toLowerCase().includes(query.toLowerCase()) || template.naturalText.toLowerCase().includes(query.toLowerCase()));\n  }\n\n  selectWhileTemplate(template: any): void {\n    this.selectedWhileTemplate = template;\n    this.whileIsChangingTemplate = false;\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-px-4 cqa-py-2 for-loop-builder\">\n  <!-- Header -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-4\">\n    <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-m-0\">\n      {{ isEditMode ? 'Edit loop step' : 'Create Loop Test Step' }}\n    </h2>\n    <cqa-button\n      *ngIf=\"isEditMode && selectedLoopType === 'while' && !whileIsChangingTemplate\"\n      variant=\"outlined\"\n      btnSize=\"sm\"\n      icon=\"swap_horiz\"\n      text=\"Change Template\"\n      (clicked)=\"onWhileChangeTemplate()\">\n    </cqa-button>\n    <cqa-button\n      *ngIf=\"isEditMode && selectedLoopType === 'while' && whileIsChangingTemplate\"\n      variant=\"text\"\n      btnSize=\"sm\"\n      text=\"Cancel\"\n      (clicked)=\"onWhileCancelChangeTemplate()\">\n    </cqa-button>\n  </div>\n\n  <!-- Loop Type Selection: in edit mode show only the current type (For or While); in create mode show both -->\n  <div class=\"cqa-mb-4 cqa-w-full\">\n    <div *ngIf=\"isEditMode\" class=\"cqa-w-full cqa-inline-flex cqa-items-center cqa-bg-gray-100 cqa-rounded-lg cqa-p-1 cqa-gap-0\" style=\"height: 30px; background-color: #F3F4F6;\">\n      <span class=\"cqa-text-[12px] cqa-font-medium cqa-px-3 cqa-text-[#111827]\">{{ selectedLoopType === 'while' ? 'While' : 'For' }}</span>\n    </div>\n    <div *ngIf=\"!isEditMode\" class=\"cqa-w-full cqa-inline-flex cqa-items-center cqa-bg-gray-100 cqa-rounded-lg cqa-p-1 cqa-gap-0\" style=\"height: 30px; background-color: #F3F4F6;\">\n      <button\n        type=\"button\"\n        class=\"cqa-w-1/2 cqa-text-[12px] cqa-rounded-md cqa-font-medium cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-min-w-[80px] cqa-text-center cqa-cursor-pointer\"\n        [style.background-color]=\"selectedLoopType === 'for' ? '#3F43EE' : 'transparent'\"\n        [style.color]=\"selectedLoopType === 'for' ? '#FFFFFF' : '#6B7280'\"\n        [style.border-radius]=\"'8px'\"\n        [style.height]=\"'22px'\"\n        (click)=\"onLoopTypeChange('for')\">\n        For\n      </button>\n      <button\n        type=\"button\"\n        class=\"cqa-w-1/2 cqa-text-[12px] cqa-rounded-md cqa-font-medium cqa-transition-all cqa-duration-200 cqa-ease-in-out cqa-min-w-[80px] cqa-text-center cqa-cursor-pointer\"\n        [style.background-color]=\"selectedLoopType === 'while' ? '#3F43EE' : 'transparent'\"\n        [style.color]=\"selectedLoopType === 'while' ? '#FFFFFF' : '#6B7280'\"\n        [style.border-radius]=\"'8px'\"\n        [style.height]=\"'22px'\"\n        (click)=\"onLoopTypeChange('while')\">\n        While\n      </button>\n    </div>\n  </div>\n\n  <!-- Form Fields -->\n   <ng-container *ngIf=\"selectedLoopType === 'for'\">\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-flex-1 cqa-overflow-y-auto\">\n    <!-- Dropdown Fields Row -->\n    <div class=\"cqa-flex cqa-gap-4 cqa-flex-wrap\">\n      <!-- Select Option -->\n      <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n          Select Option\n        </label>\n        <cqa-dynamic-select\n          [form]=\"loopForm\"\n          [config]=\"selectOptionConfig\">\n        </cqa-dynamic-select>\n      </div>\n\n      <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'dataProfile'\">\n      <!-- Data Profile -->\n      <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n          Data Profile\n        </label>\n        <cqa-dynamic-select\n          [form]=\"loopForm\"\n          [config]=\"dataProfileConfig\"\n          (searchChange)=\"onSearchDataProfiles($event.query)\"\n          (loadMore)=\"onLoadMoreDataProfiles($event)\">\n        </cqa-dynamic-select>\n      </div>\n\n      <!-- Loop Start -->\n      <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n          Loop Start\n        </label>\n        <cqa-dynamic-select\n          [form]=\"loopForm\"\n          [config]=\"loopStartConfig\">\n        </cqa-dynamic-select>\n      </div>\n\n      <!-- Loop End -->\n      <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n          Loop End\n        </label>\n        <cqa-dynamic-select\n          [form]=\"loopForm\"\n          [config]=\"loopEndConfig\">\n        </cqa-dynamic-select>\n      </div>\n      </ng-container>\n      <ng-container *ngIf=\"loopForm.get('selectOption')?.value === 'runTime'\">\n        <!-- Run Time Input Field -->\n        <div class=\"cqa-flex cqa-flex-col cqa-flex-1\" style=\"min-width: calc(25% - 12px);\">\n          <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5\">\n            Run Time\n          </label>\n          <cqa-custom-input\n            [placeholder]=\"'Enter Run Time'\"\n            [value]=\"loopForm.get('runTime')?.value\"\n            [fullWidth]=\"true\"\n            (valueChange)=\"loopForm.get('runTime')?.setValue($event)\">\n          </cqa-custom-input>\n        </div>\n      </ng-container>\n    </div>\n\n    <div *ngIf=\"dataProfileConfig?.disabled && loopForm.get('selectOption')?.value === 'dataProfile'\"\n         class=\"cqa-text-[12px] cqa-text-red-500 cqa-mb-2\">\n      Data Profile is disabled because it is set at the test case level configuration.\n    </div>\n\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          (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n        </cqa-advanced-variables-form>\n      </div>\n    </div> \n  </div>\n</ng-container>\n  <ng-container *ngIf=\"selectedLoopType === 'while'\">\n    <cqa-step-builder-action\n      [showHeader]=\"false\"\n      [isCreatingStep]=\"isCreatingStep\"\n      [computeHtmlGrammarFn]=\"computeHtmlGrammarFn\"\n      [changeTemplateSignal]=\"whileChangeTemplateSignal\"\n      [cancelChangeTemplateSignal]=\"whileCancelChangeTemplateSignal\"\n      [templates]=\"whileTemplates\"\n      [setTemplateVariables]=\"setWhileTemplateVariables\"\n      [setAdvancedSettingsVariables]=\"setAdvancedSettingsVariables\"\n      [editMode]=\"isEditMode\"\n      [isDebug]=\"isDebug\"\n      [initialTemplate]=\"selectedWhileTemplate\"\n      [initialDescription]=\"selectedWhileDescription\"\n      [initialMetadata]=\"selectedWhileMetadata\"\n      [searchPlaceholder]=\"whileSearchPlaceholder\"\n      [elementOptions]=\"elementOptions\"\n      [hasMoreElements]=\"hasMoreElements\"\n      [isLoadingElements]=\"isLoadingElements\"\n      [screenNameOptions]=\"screenNameOptions\"\n      [hasMoreScreenNames]=\"hasMoreScreenNames\"\n      [isLoadingScreenNames]=\"isLoadingScreenNames\"\n      [parameterOptions]=\"parameterOptions\"\n      [hasMoreParameters]=\"hasMoreParameters\"\n      [isLoadingParameters]=\"isLoadingParameters\"\n      [environmentOptions]=\"environmentOptions\"\n      [hasMoreEnvironments]=\"hasMoreEnvironments\"\n      [isLoadingEnvironments]=\"isLoadingEnvironments\"\n      [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n      [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n      [defaultTestDataEndIndex]=\"defaultTestDataEndIndex\"\n      [isInsideForLoopStep]=\"isInsideForLoopStep\"\n      [hasTestDataProfile]=\"hasTestDataProfile\"\n      (templateChanged)=\"selectWhileTemplate($event)\"\n      (cancelled)=\"onCancel()\"\n      (createStep)=\"createWhileStep($event)\"\n      (loadMoreElements)=\"loadMoreElements.emit()\"\n      (searchElements)=\"searchElements.emit($event)\"\n      (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n      (createElement)=\"createElement.emit($event)\"\n      (searchScreenName)=\"searchScreenName.emit($event)\"\n      (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n      (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n      (searchParameters)=\"searchParameters.emit($event)\"\n      (loadMoreParameters)=\"loadMoreParameters.emit()\"\n      (searchEnvironments)=\"searchEnvironments.emit($event)\"\n      (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\"\n      (redirectToParameter)=\"redirectToParameter.emit()\"\n      (redirectToEnvironment)=\"redirectToEnvironment.emit()\"\n      (cancelElementForm)=\"cancelElementForm.emit()\">\n    </cqa-step-builder-action>\n  </ng-container>\n\n  <!-- Action Buttons: Apply only when isDebug + existing step (isEditMode), else Create Step -->\n  <div *ngIf=\"selectedLoopType === 'for'\" class=\"cqa-flex cqa-w-full cqa-gap-2 cqa-mt-6 cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n    <cqa-button\n      class=\"cqa-w-1/2\"\n      variant=\"outlined\"\n      text=\"Cancel\"\n      [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button *ngIf=\"!isCreatingStep\"\n      class=\"cqa-w-1/2\"\n      variant=\"filled\"\n      [text]=\"isEditMode ? 'Update Step' : 'Create Step'\"\n      [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!isFormValid()\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n    <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { ActionTemplate } from '../step-builder-action/step-builder-action.component';\n\n// Import Element type - using any for now since Element is from ts-portal-ui\ninterface Element {\n  id?: number;\n  name: string;\n  locatorValue?: string;\n  otherLocator?: string[];\n  [key: string]: any;\n}\n\nexport interface ConditionRow {\n  field: string;\n  operator: string;\n  value: ActionTemplate;\n  templateVariables?: any[];\n  advancedSettingsVariables?: any[];\n  description?: string;\n  metadata?: string;\n}\n\nexport interface ConditionFormData {\n  conditions: ConditionRow[];\n  includeElse: boolean;\n}\n\n@Component({\n  selector: 'cqa-step-builder-condition',\n  templateUrl: './step-builder-condition.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepBuilderConditionComponent implements OnInit, OnChanges {\n  /** Options for operator dropdown */\n  @Input() operatorOptions: SelectOption[] = [\n    { id: 'equals', value: 'equals', name: 'equals', label: 'equals' },\n    { id: 'not_equals', value: 'not_equals', name: 'not equals', label: 'not equals' },\n    { id: 'contains', value: 'contains', name: 'contains', label: 'contains' },\n    { id: 'not_contains', value: 'not_contains', name: 'not contains', label: 'not contains' },\n    { id: 'greater_than', value: 'greater_than', name: 'greater than', label: 'greater than' },\n    { id: 'less_than', value: 'less_than', name: 'less than', label: 'less than' }\n  ];\n\n  /** List of action templates to display in value dropdown */\n  @Input() conditionTemplates: ActionTemplate[] = [];\n  /** Function to handle variable processing or custom logic. Can be passed from parent component. */\n  @Input() setConditionTemplateVariables: (variables: ActionTemplate) => any = () => { return []};\n  /** Function to handle advanced settings variables. Can be passed from parent component. */\n  @Input() setAdvancedSettingsVariables: (template: ActionTemplate, testStep?: any) => any[] = () => { return []};\n\n  /** Centralised HTML grammar computation function. Pass StepBuilderService.computeHtmlGrammar from the host app. */\n  @Input() computeHtmlGrammarFn?: (template: any, variables: any[]) => string;\n  @Input() elementOptions: Element[] = []; // Element objects for element dropdown\n  @Input() hasMoreElements: boolean = false; // Whether more elements are available\n  @Input() isLoadingElements: boolean = false; // Loading state for elements\n  /** Screen name options for element form autocomplete (from API) */\n  @Input() screenNameOptions: { id?: number; name: string }[] = [];\n  /** Whether more screen names are available for infinite scroll */\n  @Input() hasMoreScreenNames: boolean = false;\n  /** True while parent is loading screen names (search or load more) */\n  @Input() isLoadingScreenNames: boolean = false;\n  \n  /** Parameter fetching properties */\n  @Input() parameterOptions: any[] = []; // TestData[] - raw test data profiles\n  @Input() hasMoreParameters: boolean = false;\n  @Input() isLoadingParameters: boolean = false;\n  \n  /** Environment fetching properties */\n  @Input() environmentOptions: { id: string; name: string; value: string; environment: string }[] = [];\n  @Input() hasMoreEnvironments: boolean = false;\n  @Input() isLoadingEnvironments: boolean = false;\n  \n  /** Default test data profile properties */\n  @Input() defaultTestDataProfileId?: number;\n  @Input() defaultTestDataStartIndex?: number;\n  @Input() defaultTestDataEndIndex?: number;\n  @Input() isInsideForLoopStep: boolean = false;\n  @Input() hasTestDataProfile: boolean = false;\n\n  /** True while parent is creating the step (API in progress); show loader on Create Step button */\n  @Input() isCreatingStep: boolean = false;\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<ConditionFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n  @Output() loadMoreElements = new EventEmitter<void>(); // Emit when load more is requested\n  @Output() searchElements = new EventEmitter<string>(); // Emit when user searches for elements\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>(); // Emit when screen name is selected to fetch elements filtered by screen name\n  @Output() createElement = new EventEmitter<any>(); // Emit when element is created\n  @Output() searchScreenName = new EventEmitter<string>(); // Emit when user searches screen names\n  @Output() loadMoreScreenNames = new EventEmitter<string>(); // Emit when user scrolls to load more screen names\n  @Output() createScreenNameRequest = new EventEmitter<string>(); // Emit when user requests to create a new screen name\n  @Output() searchParameters = new EventEmitter<string>(); // Emit when user searches for parameters\n  @Output() loadMoreParameters = new EventEmitter<void>(); // Emit when user scrolls to load more parameters\n  @Output() searchEnvironments = new EventEmitter<string>(); // Emit when user searches for environments\n  @Output() loadMoreEnvironments = new EventEmitter<void>(); // Emit when user scrolls to load more environments\n  @Output() redirectToParameter = new EventEmitter<void>();\n  @Output() redirectToEnvironment = new EventEmitter<void>();\n\n  conditionForm: FormGroup;\n  includeElse: boolean = false;\n  \n  // Cache for value configs to avoid recreating on every change detection\n  private valueConfigCache: DynamicSelectFieldConfig | null = null;\n  \n  // Cache for operator configs (static, no need to recreate)\n  private operatorConfigCache: DynamicSelectFieldConfig | null = null;\n  \n  // Cache for value configs with onChange handlers per index\n  private valueConfigsWithHandlers: Map<number, DynamicSelectFieldConfig> = new Map();\n  \n  // Track selected templates and their variables for each condition row\n  private selectedTemplates: Map<number, ActionTemplate> = new Map();\n  private conditionTemplateVariables: Map<number, any[]> = new Map();\n  private conditionVariablesForms: Map<number, FormArray> = new Map();\n  private conditionUpdatedHtmlGrammar: Map<number, string> = new Map(); // Updated HTML grammar per condition\n  \n  // Advanced settings variables per condition\n  private conditionAdvancedSettingsVariables: Map<number, any[]> = new Map();\n  private conditionAdvancedVariablesForms: Map<number, FormArray> = new Map();\n  private conditionAdvancedExpanded: Map<number, boolean> = new Map();\n  \n  // Cache for condition form groups to avoid repeated lookups\n  private conditionFormGroupCache: Map<number, FormGroup> = new Map();\n\n  constructor(private fb: FormBuilder, private cdr: ChangeDetectorRef) {\n    this.conditionForm = this.fb.group({\n      conditions: this.fb.array([]),\n      includeElse: [false]\n    });\n  }\n\n  ngOnInit(): void {\n    // Add initial condition row\n    this.addCondition(\"CONDITION_IF\");\n    // Initialize config caches\n    this.updateValueConfigCache();\n    this.updateOperatorConfigCache();\n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Regenerate value config cache when conditionTemplates changes\n    if (changes['conditionTemplates'] && !changes['conditionTemplates'].firstChange) {\n      this.updateValueConfigCache();\n      // Clear value configs with handlers since base config changed\n      this.valueConfigsWithHandlers.clear();\n    }\n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n  \n  private updateOperatorConfigCache(): void {\n    this.operatorConfigCache = {\n      key: 'operator',\n      placeholder: 'Select operator',\n      multiple: false,\n      searchable: false,\n      options: this.operatorOptions\n    };\n  }\n\n  get conditionsFormArray(): FormArray {\n    return this.conditionForm.get('conditions') as FormArray;\n  }\n\n  addCondition(conditionType: string): void {\n    const conditionGroup = this.fb.group({\n      field: [conditionType, Validators.required],\n      operator: ['equals', Validators.required],\n      value: [null, Validators.required], // Will store template ID, then map to ActionTemplate\n      description: [''],\n      metadata: [''],\n    });\n    const index = this.conditionsFormArray.length;\n    this.conditionsFormArray.push(conditionGroup);\n    \n    // Initialize variables form for this condition (FormArray)\n    this.conditionVariablesForms.set(index, this.fb.array([]));\n    \n    // Cache the form group\n    this.conditionFormGroupCache.set(index, conditionGroup);\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n\n  removeCondition(index: number): void {\n    if (this.conditionsFormArray.length > 1) {\n      this.conditionsFormArray.removeAt(index);\n      // Clean up associated data\n      this.selectedTemplates.delete(index);\n      this.conditionTemplateVariables.delete(index);\n      this.conditionVariablesForms.delete(index);\n      this.conditionFormGroupCache.delete(index);\n      this.valueConfigsWithHandlers.delete(index);\n      \n      // Reindex remaining conditions\n      this.reindexConditionData(index);\n      \n      // Mark for check since we're using OnPush\n      this.cdr.markForCheck();\n    }\n  }\n  \n  private reindexConditionData(removedIndex: number): void {\n    // Create new maps with reindexed data\n    const newSelectedTemplates = new Map<number, ActionTemplate>();\n    const newTemplateVariables = new Map<number, any[]>();\n    const newVariablesForms = new Map<number, FormArray>();\n    const newFormGroupCache = new Map<number, FormGroup>();\n    const newValueConfigs = new Map<number, DynamicSelectFieldConfig>();\n    const newUpdatedHtmlGrammar = new Map<number, string>();\n    const newAdvancedSettingsVariables = new Map<number, any[]>();\n    const newAdvancedVariablesForms = new Map<number, FormArray>();\n    const newAdvancedExpanded = new Map<number, boolean>();\n    \n    this.selectedTemplates.forEach((template, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newSelectedTemplates.set(oldIndex, template);\n      } else if (oldIndex > removedIndex) {\n        newSelectedTemplates.set(oldIndex - 1, template);\n      }\n    });\n    \n    this.conditionTemplateVariables.forEach((variables, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newTemplateVariables.set(oldIndex, variables);\n      } else if (oldIndex > removedIndex) {\n        newTemplateVariables.set(oldIndex - 1, variables);\n      }\n    });\n    \n    this.conditionVariablesForms.forEach((form, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newVariablesForms.set(oldIndex, form);\n      } else if (oldIndex > removedIndex) {\n        newVariablesForms.set(oldIndex - 1, form);\n      }\n    });\n    \n    this.conditionFormGroupCache.forEach((formGroup, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newFormGroupCache.set(oldIndex, formGroup);\n      } else if (oldIndex > removedIndex) {\n        newFormGroupCache.set(oldIndex - 1, formGroup);\n      }\n    });\n    \n    this.valueConfigsWithHandlers.forEach((config, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newValueConfigs.set(oldIndex, config);\n      } else if (oldIndex > removedIndex) {\n        // Recreate config with new index for onChange handler\n        const newConfig = {\n          ...config,\n          onChange: (value: any) => {\n            this.onTemplateValueChange(oldIndex - 1, value);\n          }\n        };\n        newValueConfigs.set(oldIndex - 1, newConfig);\n      }\n    });\n    \n    this.conditionUpdatedHtmlGrammar.forEach((grammar, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newUpdatedHtmlGrammar.set(oldIndex, grammar);\n      } else if (oldIndex > removedIndex) {\n        newUpdatedHtmlGrammar.set(oldIndex - 1, grammar);\n      }\n    });\n    \n    this.conditionAdvancedSettingsVariables.forEach((variables, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newAdvancedSettingsVariables.set(oldIndex, variables);\n      } else if (oldIndex > removedIndex) {\n        newAdvancedSettingsVariables.set(oldIndex - 1, variables);\n      }\n    });\n    \n    this.conditionAdvancedVariablesForms.forEach((form, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newAdvancedVariablesForms.set(oldIndex, form);\n      } else if (oldIndex > removedIndex) {\n        newAdvancedVariablesForms.set(oldIndex - 1, form);\n      }\n    });\n    \n    this.conditionAdvancedExpanded.forEach((expanded, oldIndex) => {\n      if (oldIndex < removedIndex) {\n        newAdvancedExpanded.set(oldIndex, expanded);\n      } else if (oldIndex > removedIndex) {\n        newAdvancedExpanded.set(oldIndex - 1, expanded);\n      }\n    });\n    \n    this.selectedTemplates = newSelectedTemplates;\n    this.conditionTemplateVariables = newTemplateVariables;\n    this.conditionVariablesForms = newVariablesForms;\n    this.conditionFormGroupCache = newFormGroupCache;\n    this.valueConfigsWithHandlers = newValueConfigs;\n    this.conditionUpdatedHtmlGrammar = newUpdatedHtmlGrammar;\n    this.conditionAdvancedSettingsVariables = newAdvancedSettingsVariables;\n    this.conditionAdvancedVariablesForms = newAdvancedVariablesForms;\n    this.conditionAdvancedExpanded = newAdvancedExpanded;\n  }\n\n  getOperatorConfig(index: number): DynamicSelectFieldConfig {\n    // Return cached config (static, same for all conditions)\n    if (!this.operatorConfigCache) {\n      this.updateOperatorConfigCache();\n    }\n    return this.operatorConfigCache!;\n  }\n\n  private updateValueConfigCache(): void {\n    // Convert ActionTemplate[] to SelectOption[]\n    const templateOptions: SelectOption[] = (this.conditionTemplates || []).map(template => ({\n      id: template.id?.toString() || template.displayName || '',\n      value: template.id?.toString() || template.displayName || '',\n      name: template.htmlGrammar || template.naturalText || '',\n      label: template.htmlGrammar || template.naturalText || ''\n    }));\n\n    this.valueConfigCache = {\n      key: 'value',\n      placeholder: 'Select Template*',\n      multiple: false,\n      searchable: true,\n      displayLabelAsInnerHtml: true,\n      options: templateOptions\n    };\n  }\n\n  getValueConfig(index: number): DynamicSelectFieldConfig {\n    // Return cached config with handler to avoid recreating on every change detection\n    if (this.valueConfigsWithHandlers.has(index)) {\n      return this.valueConfigsWithHandlers.get(index)!;\n    }\n    \n    // Ensure base config cache exists\n    if (!this.valueConfigCache) {\n      this.updateValueConfigCache();\n    }\n    \n    // Create and cache config with onChange handler for this specific index\n    const config: DynamicSelectFieldConfig = {\n      ...this.valueConfigCache!,\n      onChange: (value: any) => {\n        this.onTemplateValueChange(index, value);\n      }\n    };\n    \n    this.valueConfigsWithHandlers.set(index, config);\n    return config;\n  }\n  \n  onTemplateValueChange(index: number, templateId: any): void {\n    // Find the selected template\n    const selectedTemplate = this.conditionTemplates.find(\n      t => (t.id?.toString() === templateId) || (t.displayName === templateId)\n    );\n    \n    if (selectedTemplate && this.setConditionTemplateVariables) {\n      // Store selected template\n      this.selectedTemplates.set(index, selectedTemplate);\n      \n      // Get template variables using the provided function\n      const variables = this.setConditionTemplateVariables(selectedTemplate);\n      this.conditionTemplateVariables.set(index, variables);\n      // Build form for template variables\n      this.buildConditionVariablesForm(index, variables);\n      // Initialize updated HTML grammar\n      this.updateConditionHtmlGrammar(index);\n      \n      // Initialize advanced settings variables\n      if (this.setAdvancedSettingsVariables) {\n        const advancedVariables = this.setAdvancedSettingsVariables(selectedTemplate);\n        this.conditionAdvancedSettingsVariables.set(index, advancedVariables);\n        this.buildConditionAdvancedVariablesForm(index, advancedVariables);\n      }\n    } else {\n      // Clear template and variables if no template selected\n      this.selectedTemplates.delete(index);\n      this.conditionTemplateVariables.delete(index);\n      this.conditionUpdatedHtmlGrammar.delete(index);\n      this.conditionAdvancedSettingsVariables.delete(index);\n      const formArray = this.conditionVariablesForms.get(index);\n      if (formArray) {\n        while (formArray.length !== 0) {\n          formArray.removeAt(0);\n        }\n      }\n      const advancedFormArray = this.conditionAdvancedVariablesForms.get(index);\n      if (advancedFormArray) {\n        while (advancedFormArray.length !== 0) {\n          advancedFormArray.removeAt(0);\n        }\n      }\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n  \n  private buildConditionVariablesForm(index: number, variables: any[]): void {\n    let formArray = this.conditionVariablesForms.get(index);\n    if (!formArray) {\n      formArray = this.fb.array([]);\n      this.conditionVariablesForms.set(index, formArray);\n    }\n    \n    // Ensure formArray is not undefined (TypeScript guard)\n    if (!formArray) {\n      return;\n    }\n    \n    // Store reference to avoid TypeScript issues in forEach callback\n    // TypeScript knows formArray is defined here due to the early return above\n    const formArrayRef: FormArray = formArray;\n    \n    // Clear existing form array\n    while (formArrayRef.length !== 0) {\n      formArrayRef.removeAt(0);\n    }\n    \n    // Add form groups for each variable\n    variables.forEach(variable => {\n      // Handle boolean variables - use boolean value, others use string\n      const defaultValue = variable.type === 'boolean' \n        ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n        : (variable.value || '');\n      \n      // Create a FormGroup for each variable with name and value\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || ''],\n        options: [variable.options || []]\n      });\n      \n      // Add dataType control for test-data variables if needed\n      const label = variable.label?.toLowerCase() || '';\n      if (label === 'test-data' || label === 'source-value' || label === 'target-value' || \n          label === 'source_value' || label === 'target_value') {\n        // Parse the value to determine data type\n        const valueStr = String(defaultValue || '');\n        let dataType = 'plain-text';\n        if (valueStr.startsWith('@|') && valueStr.endsWith('|')) {\n          dataType = 'parameter';\n        } else if (valueStr.startsWith('$|') && valueStr.endsWith('|')) {\n          dataType = 'runtime';\n        } else if (valueStr.startsWith('*|') && valueStr.endsWith('|')) {\n          dataType = 'environment';\n        }\n        variableGroup.addControl('dataType', new FormControl(dataType));\n      }\n      \n      formArrayRef.push(variableGroup);\n    });\n    \n    // Initialize updated HTML grammar for this condition\n    this.updateConditionHtmlGrammar(index);\n  }\n  \n  getConditionTemplateVariables(index: number): any[] {\n    return this.conditionTemplateVariables.get(index) || [];\n  }\n  \n  getConditionVariablesForm(index: number): FormArray {\n    let formArray = this.conditionVariablesForms.get(index);\n    if (!formArray) {\n      formArray = this.fb.array([]);\n      this.conditionVariablesForms.set(index, formArray);\n    }\n    return formArray;\n  }\n  \n  getConditionFormGroupAt(index: number, variableIndex: number): FormGroup {\n    const formArray = this.getConditionVariablesForm(index);\n    return formArray.at(variableIndex) as FormGroup;\n  }\n  \n  getConditionUpdatedHtmlGrammar(index: number): string {\n    const template = this.selectedTemplates.get(index);\n    if (!template) return '';\n    return this.conditionUpdatedHtmlGrammar.get(index) || template.htmlGrammar || template.naturalText || '';\n  }\n  \n  getSelectedTemplate(index: number): ActionTemplate | null {\n    return this.selectedTemplates.get(index) || null;\n  }\n  \n  getSelectConfigForVariable(index: number, variable: any): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (variable.options || []).map((opt: string) => ({\n      id: opt,\n      value: opt,\n      name: opt,\n      label: opt\n    }));\n\n    return {\n      key: variable.name,\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: options,\n      onChange: (value: any) => {\n        this.onConditionVariableValueChange(index, variable.name, value);\n      }\n    };\n  }\n  \n  onConditionVariableValueChange(conditionIndex: number, variableName: string, value: any): void {\n    // Update the variable in templateVariables array\n    const variables = this.conditionTemplateVariables.get(conditionIndex) || [];\n    const variable = variables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const formArray = this.conditionVariablesForms.get(conditionIndex);\n    if (formArray) {\n      const variableIndex = formArray.controls.findIndex(\n        control => control.get('name')?.value === variableName\n      );\n      if (variableIndex !== -1) {\n        formArray.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n    \n    // Update HTML grammar for this condition\n    this.updateConditionHtmlGrammar(conditionIndex);\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n  \n  onConditionVariableInputChange(conditionIndex: number, variableName: string, value: any): void {\n    // Update the variable in templateVariables array\n    const variables = this.conditionTemplateVariables.get(conditionIndex) || [];\n    const variable = variables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form control\n    const form = this.conditionVariablesForms.get(conditionIndex);\n    if (form && form.get(variableName)) {\n      form.get(variableName)?.setValue(value);\n    }\n  }\n\n  onConditionVariableBooleanChange(conditionIndex: number, variableName: string, value: boolean): void {\n    // Update the variable in templateVariables array\n    const variables = this.conditionTemplateVariables.get(conditionIndex) || [];\n    const variable = variables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const formArray = this.conditionVariablesForms.get(conditionIndex);\n    if (!formArray) {\n      return;\n    }\n    \n    const variableIndex = formArray.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      formArray.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    } else {\n      // Create new form group if it doesn't exist\n      const variableGroup = this.fb.group({\n        name: [variableName],\n        value: [value],\n        type: ['boolean'],\n        label: [variable?.label || ''],\n        options: [variable?.options || []]\n      });\n      // formArray is guaranteed to be defined here due to the early return above\n      formArray.push(variableGroup);\n    }\n    \n    // Update HTML grammar for this condition\n    this.updateConditionHtmlGrammar(conditionIndex);\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n  \n  /**\n   * Strip HTML tags from a string for search functionality\n   */\n  private stripHtmlTags(htmlString: string): string {\n    if (!htmlString) return '';\n    // Create a temporary div element to parse HTML\n    const tmp = document.createElement('DIV');\n    tmp.innerHTML = htmlString;\n    return tmp.textContent || tmp.innerText || '';\n  }\n  \n  /**\n   * Update HTML grammar for a specific condition with actual variable values.\n   * Delegates to computeHtmlGrammarFn when provided by the host app (centralised logic in StepBuilderService).\n   */\n  private updateConditionHtmlGrammar(conditionIndex: number): void {\n    const template = this.selectedTemplates.get(conditionIndex);\n    if (!template || !template.htmlGrammar) {\n      return;\n    }\n\n    const variables = this.conditionTemplateVariables.get(conditionIndex) || [];\n\n    if (this.computeHtmlGrammarFn) {\n      this.conditionUpdatedHtmlGrammar.set(conditionIndex, this.computeHtmlGrammarFn(template, variables));\n      return;\n    }\n\n    let updatedGrammar = template.htmlGrammar;\n    variables.forEach(variable => {\n      const placeholder = new RegExp(`<span[^>]*data-event-key=\"${variable.name}\"[^>]*>.*?</span>`, 'gi');\n      const value = variable.value || '';\n      // Escape HTML in value to prevent XSS\n      const escapedValue = String(value).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n      updatedGrammar = updatedGrammar.replace(placeholder, escapedValue);\n    });\n\n    this.conditionUpdatedHtmlGrammar.set(conditionIndex, updatedGrammar);\n  }\n\n  private buildConditionAdvancedVariablesForm(index: number, variables: any[]): void {\n    let formArray = this.conditionAdvancedVariablesForms.get(index);\n    if (!formArray) {\n      formArray = this.fb.array([]);\n      this.conditionAdvancedVariablesForms.set(index, formArray);\n    }\n\n    // Ensure formArray is not undefined (TypeScript guard)\n    if (!formArray) {\n      return;\n    }\n\n    // Store reference to avoid TypeScript issues in forEach callback\n    const formArrayRef: FormArray = formArray;\n\n    // Clear existing form array\n    while (formArrayRef.length !== 0) {\n      formArrayRef.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    variables.forEach(variable => {\n      // Handle different types\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        // For str_list, create a FormArray\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArrayValue = this.fb.array(\n          valueArray.length > 0 \n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')] // Start with one empty control\n        );\n        defaultValue = formArrayValue;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n      \n      // Create a FormGroup for each variable\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n      \n      formArrayRef.push(variableGroup);\n    });\n  }\n\n  getConditionAdvancedSettingsVariables(index: number): any[] {\n    return this.conditionAdvancedSettingsVariables.get(index) || [];\n  }\n\n  getConditionAdvancedVariablesForm(index: number): FormArray {\n    let formArray = this.conditionAdvancedVariablesForms.get(index);\n    if (!formArray) {\n      formArray = this.fb.array([]);\n      this.conditionAdvancedVariablesForms.set(index, formArray);\n    }\n    return formArray;\n  }\n\n  getConditionAdvancedExpanded(index: number): boolean {\n    return this.conditionAdvancedExpanded.get(index) || false;\n  }\n\n  toggleConditionAdvanced(index: number): void {\n    const current = this.conditionAdvancedExpanded.get(index) || false;\n    this.conditionAdvancedExpanded.set(index, !current);\n    this.cdr.markForCheck();\n  }\n\n  onConditionAdvancedVariableBooleanChange(conditionIndex: number, variableName: string, value: boolean): void {\n    // Update the variable in advancedSettingsVariables array\n    const variables = this.conditionAdvancedSettingsVariables.get(conditionIndex) || [];\n    const variable = variables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.conditionAdvancedVariablesForms.get(conditionIndex)?.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== undefined && variableIndex !== -1) {\n      this.conditionAdvancedVariablesForms.get(conditionIndex)?.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  onConditionAdvancedVariableValueChange(conditionIndex: number, variableName: string, value: any): void {\n    // Update the variable in advancedSettingsVariables array\n    const variables = this.conditionAdvancedSettingsVariables.get(conditionIndex) || [];\n    const variable = variables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.conditionAdvancedVariablesForms.get(conditionIndex)?.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== undefined && variableIndex !== -1) {\n      const formGroup = this.conditionAdvancedVariablesForms.get(conditionIndex)?.at(variableIndex) as FormGroup;\n      // For str_list, the FormArray is already managed inside AdvancedVariablesFormComponent,\n      // so we don't need to rebuild or update it here to avoid focus loss.\n      if (variable?.type !== 'str_list') {\n        formGroup?.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  getConditionFormGroup(index: number): FormGroup {\n    // Use cache to avoid repeated lookups\n    if (this.conditionFormGroupCache.has(index)) {\n      return this.conditionFormGroupCache.get(index)!;\n    }\n    \n    const formGroup = this.conditionsFormArray.at(index) as FormGroup;\n    if (formGroup) {\n      this.conditionFormGroupCache.set(index, formGroup);\n    }\n    return formGroup;\n  }\n  \n  getConditionFieldValue(index: number): string {\n    const formGroup = this.getConditionFormGroup(index);\n    return formGroup?.get('field')?.value || '';\n  }\n  \n  isConditionIf(index: number): boolean {\n    return this.getConditionFieldValue(index) === 'CONDITION_IF';\n  }\n  \n  isConditionElseIf(index: number): boolean {\n    return this.getConditionFieldValue(index) === 'CONDITION_ELSE_IF';\n  }\n  \n  getConditionLabel(index: number): string {\n    const fieldValue = this.getConditionFieldValue(index);\n    if (fieldValue === 'CONDITION_IF') return 'IF';\n    if (fieldValue === 'CONDITION_ELSE_IF') return 'ELSE IF';\n    return 'ELSE';\n  }\n  \n  trackByConditionIndex(index: number): number {\n    return index;\n  }\n\n  onIncludeElseChange(checked: boolean): void {\n    this.includeElse = checked;\n    this.conditionForm.patchValue({ includeElse: checked });\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  /**\n   * Overall form validity for condition step.\n   * In addition to Angular form validity, we must ensure that for any template variable\n   * with dataKey 'test_data' | 'source_value' | 'target_value' and dataType 'plain-text'\n   * or 'runtime', the value is non-empty.\n   */\n  isFormValid(): boolean {\n    // First, rely on the reactive form validity for base condition fields\n    if (!this.conditionForm.valid) {\n      return false;\n    }\n\n    // Then enforce the same test-data validation rule used in action builder\n    let customVariablesValid = true;\n\n    this.conditionTemplateVariables.forEach((variables) => {\n      if (!variables || !variables.length) {\n        return;\n      }\n\n      const allValidForCondition = variables.every((variable: any) => {\n        if (\n          variable &&\n          (variable.dataKey === 'test_data' ||\n            variable.dataKey === 'source_value' ||\n            variable.dataKey === 'target_value')\n        ) {\n          if (variable.dataType === 'plain-text' || variable.dataType === 'runtime') {\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n          if(variable.dataType === 'parameter'){\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n          if(variable.dataType === 'environment'){\n            const value = variable.value;\n            return value !== null && value !== undefined && value !== '';\n          }\n        }\n        if(variable.dataKey === 'element'){\n          const value = variable.value;\n          return value !== null && value !== undefined && value !== '';\n        }\n        return true;\n      });\n\n      if (!allValidForCondition) {\n        customVariablesValid = false;\n      }\n    });\n\n    return customVariablesValid;\n  }\n\n  onCreateStep(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n\n    if (this.conditionForm.valid) {\n      const formValue = this.conditionForm.value;\n      \n      // Sync advanced variables from form to array for all conditions\n      this.conditionAdvancedSettingsVariables.forEach((variables, index) => {\n        const formArray = this.conditionAdvancedVariablesForms.get(index);\n        if (formArray) {\n          variables.forEach((variable, varIndex) => {\n            const formGroup = formArray.at(varIndex) as FormGroup;\n            if (formGroup) {\n              const formValue = formGroup.get('value')?.value;\n              if (variable.type === 'str_list' && formValue instanceof FormArray) {\n                // Extract values from FormArray\n                variable.value = formValue.controls.map(control => control.value).filter((val: string) => val && val.trim() !== '');\n              } else {\n                variable.value = formValue;\n              }\n            }\n          });\n        }\n      });\n      \n      const stepData: ConditionFormData = {\n        conditions: formValue.conditions.map((cond: any, index: number) => {\n          // Find the ActionTemplate object from the stored ID/value\n          const templateId = cond.value;\n          const selectedTemplate = this.conditionTemplates.find(\n            t => (t.id?.toString() === templateId) || (t.displayName === templateId)\n          ) || this.selectedTemplates.get(index);\n          \n          // Get template variables for this condition\n          const templateVariables = this.conditionTemplateVariables.get(index) || [];\n          // Get advanced settings variables for this condition\n          const advancedSettingsVariables = this.conditionAdvancedSettingsVariables.get(index) || [];\n          \n          return {\n            field: cond.field,\n            operator: cond.operator,\n            value: selectedTemplate || null,\n            templateVariables: templateVariables,\n            advancedSettingsVariables: advancedSettingsVariables,\n            description: cond.description || '',\n            metadata: cond.metadata || ''\n          };\n        }),\n        includeElse: formValue.includeElse || false\n      };\n      console.log('stepData', stepData);\n      this.createStep.emit(stepData);\n    }\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full 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    Create Condition Step\n  </h2>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n    <!-- Condition Builder Section -->\n    <div class=\"cqa-mb-6\">\n      <div class=\"cqa-mb-3\">\n      <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n        Condition Builder\n      </h3>\n      </div>\n\n      <!-- Condition Rows -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-mb-3\">\n        <ng-container *ngFor=\"let condition of conditionsFormArray.controls; let i = index; trackBy: trackByConditionIndex\">\n          <div\n            *ngIf=\"isConditionIf(i) || isConditionElseIf(i)\"\n            class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n            <!-- Condition Row -->\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <!-- Condition Label -->\n              <div class=\"cqa-text-[12px] cqa-font-semibold\">\n                {{ getConditionLabel(i) }}\n              </div>\n\n              <!-- Operator Dropdown -->\n              <!-- <div class=\"cqa-flex-1 cqa-max-w-[100px] cqa-text-[10px]\">\n                <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getOperatorConfig(i)\">\n                </cqa-dynamic-select>\n              </div> -->\n\n              <!-- Value Template Dropdown -->\n              <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n                <cqa-dynamic-select [form]=\"getConditionFormGroup(i)\" [config]=\"getValueConfig(i)\">\n                </cqa-dynamic-select>\n              </div>\n\n              <!-- Remove Button -->\n              <cqa-button\n                *ngIf=\"i >= 1\"\n                variant=\"text\"\n                icon=\"close\"\n                iconPosition=\"start\"\n                [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n                (click)=\"removeCondition(i)\"\n                [attr.aria-label]=\"'Remove condition'\">\n              </cqa-button>\n              <!-- <button type=\"button\"\n                class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-gray-500 hover:cqa-text-gray-700 hover:cqa-bg-gray-100 cqa-transition-colors\"\n                (click)=\"removeCondition(i)\" *ngIf=\"i >= 1\"\n                [attr.aria-label]=\"'Remove condition'\">\n                <mat-icon class=\"cqa-text-lg cqa-text-[24px]\">close</mat-icon>\n              </button> -->\n            </div>\n\n            <!-- Template Variables Section (shown when template is selected) -->\n            <div *ngIf=\"getSelectedTemplate(i)\" class=\"cqa-mt-2\">\n              <!-- Template Grammar Display -->\n              <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n                <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n                  [innerHTML]=\"getSelectedTemplate(i)?.htmlGrammar || getSelectedTemplate(i)?.naturalText || ''\">\n                </div>\n                \n              </div>\n              \n              <!-- Template Variables Form Component (includes Description and Metadata) -->\n              <cqa-template-variables-form\n                style=\"width: 100%;\"\n                [templateVariables]=\"getConditionTemplateVariables(i)\"\n                [variablesForm]=\"getConditionVariablesForm(i)\"\n                [metadata]=\"getConditionFormGroup(i).get('metadata')?.value || ''\"\n                [description]=\"getConditionFormGroup(i).get('description')?.value || ''\"\n                [elementOptions]=\"elementOptions\"\n                [hasMoreElements]=\"hasMoreElements\"\n                [isLoadingElements]=\"isLoadingElements\"\n                [screenNameOptions]=\"screenNameOptions\"\n                [hasMoreScreenNames]=\"hasMoreScreenNames\"\n                [isLoadingScreenNames]=\"isLoadingScreenNames\"\n                [parameterOptions]=\"parameterOptions\"\n                [hasMoreParameters]=\"hasMoreParameters\"\n                [isLoadingParameters]=\"isLoadingParameters\"\n                [environmentOptions]=\"environmentOptions\"\n                [hasMoreEnvironments]=\"hasMoreEnvironments\"\n                [isLoadingEnvironments]=\"isLoadingEnvironments\"\n                [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n                [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n                [defaultTestDataEndIndex]=\"defaultTestDataEndIndex\"\n                [isInsideForLoopStep]=\"isInsideForLoopStep\"\n                [hasTestDataProfile]=\"hasTestDataProfile\"\n                (variableValueChange)=\"onConditionVariableValueChange(i, $event.name, $event.value)\"\n                (variableBooleanChange)=\"onConditionVariableBooleanChange(i, $event.name, $event.value)\"\n                (metadataChange)=\"getConditionFormGroup(i).get('metadata')?.setValue($event)\"\n                (descriptionChange)=\"getConditionFormGroup(i).get('description')?.setValue($event)\"\n                (loadMoreElements)=\"loadMoreElements.emit()\"\n                (searchElements)=\"searchElements.emit($event)\"\n                (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n                (createElement)=\"createElement.emit($event)\"\n                (searchScreenName)=\"searchScreenName.emit($event)\"\n                (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n                (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n                (searchParameters)=\"searchParameters.emit($event)\"\n                (loadMoreParameters)=\"loadMoreParameters.emit()\"\n                (searchEnvironments)=\"searchEnvironments.emit($event)\"\n                (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n              </cqa-template-variables-form>\n              \n              <!-- Advanced Settings Variables Form -->\n              <div *ngIf=\"getConditionAdvancedSettingsVariables(i).length > 0\" class=\"cqa-mt-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)=\"toggleConditionAdvanced(i)\">\n                    <span class=\"cqa-text-[10px]\">Advanced</span>\n                    <mat-icon class=\"cqa-text-base\" [class.cqa-rotate-180]=\"getConditionAdvancedExpanded(i)\">\n                      expand_more\n                    </mat-icon>\n                  </button>\n                  <div *ngIf=\"getConditionAdvancedExpanded(i)\" class=\"cqa-mt-2\">\n                    <cqa-advanced-variables-form \n                      [advancedVariables]=\"getConditionAdvancedSettingsVariables(i)\"\n                      [advancedVariableForm]=\"getConditionAdvancedVariablesForm(i)\"\n                      (variableBooleanChange)=\"onConditionAdvancedVariableBooleanChange(i, $event.name, $event.value)\"\n                      (variableValueChange)=\"onConditionAdvancedVariableValueChange(i, $event.name, $event.value)\">\n                    </cqa-advanced-variables-form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n\n      <!-- Add Condition Button -->\n      <div class=\"cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-rounded-lg cqa-p-1 cqa-mt-3\">\n        <cqa-button\n          variant=\"text\"\n          icon=\"add\"\n          iconPosition=\"start\"\n          [customClass]=\"'cqa-w-full cqa-flex cqa-items-center cqa-justify-center'\"\n          [text]=\"'Add Condition'\"\n          (clicked)=\"addCondition('CONDITION_ELSE_IF')\">\n        </cqa-button>\n      </div>\n    </div>\n\n    <!-- Include ELSE Branch Section -->\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-6 cqa-p-3 cqa-bg-gray-50 cqa-rounded-lg\">\n      <div class=\"cqa-flex cqa-flex-col\">\n        <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-gray-900 cqa-mb-1\">\n          Include ELSE branch\n        </h3>\n        <p class=\"cqa-text-[12px] cqa-text-gray-600\">\n          Execute alternative steps when condition is not met.\n        </p>\n      </div>\n      <mat-slide-toggle [checked]=\"includeElse\" (change)=\"onIncludeElseChange($event.checked)\" color=\"primary\">\n      </mat-slide-toggle>\n    </div>\n  </div>\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\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-w-1/2\" variant=\"filled\" text=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!isFormValid()\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n    <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, ViewChild, ChangeDetectorRef, OnDestroy } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, FormControl, Validators, AbstractControl } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { MatTable } from '@angular/material/table';\nimport { Subscription } from 'rxjs';\n\nexport interface DatabaseQuery {\n  id: string;\n  query: string;\n  variable: string;\n  status?: 'passed' | 'failed' | 'pending';\n  assertionData?: any[]; // Assertion data for verification\n  /** Result rows for this query (shown in Output tab). */\n  queryResult?: any[];\n}\n\nexport interface DatabaseFormData {\n  dbEnvironment: string;\n  normalEnvironment?: string;\n  queries: DatabaseQuery[];\n  advancedSettingsVariables?: any[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-database',\n  templateUrl: './step-builder-database.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderDatabaseComponent implements OnInit, OnChanges, OnDestroy {\n  /** Options for DB environment dropdown */\n  @Input() dbEnvironmentOptions: SelectOption[] = [];\n\n  /** Options for Normal environment dropdown */\n  @Input() normalEnvironmentOptions: SelectOption[] = [];\n\n  /** Initial queries list */\n  @Input() queries: DatabaseQuery[] = [];\n\n  /** Query results data (deprecated in favor of per-query queryResult) */\n  @Input() queryResults: any[] = [];\n\n  /** Loading state */\n  @Input() isLoading: boolean = false;\n\n  /** Initial DB environment for edit mode */\n  @Input() initialDbEnvironment?: string;\n\n  /** Initial Normal environment for edit mode */\n  @Input() initialNormalEnvironment?: string;\n\n  /** Whether in edit mode */\n  @Input() editMode?: boolean;\n\n  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */\n  @Input() isCreatingStep: boolean = false;\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<DatabaseFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Emit when query is run */\n  @Output() runQuery = new EventEmitter<{ currentQuery: DatabaseQuery; query: string; variable: string; dbEnvironment: string; normalEnvironment?: string }>();\n\n  /** Emit when DB environment search is triggered */\n  @Output() searchDbEnvironment = new EventEmitter<string>();\n\n  /** Emit when Normal environment search is triggered */\n  @Output() searchNormalEnvironment = new EventEmitter<string>();\n\n  /** Emit when query is added */\n  @Output() addQuery = new EventEmitter<void>();\n\n  /** Emit when query is deleted */\n  @Output() deleteQuery = new EventEmitter<string>();\n\n  /** Emit when assertion data changes for a query */\n  @Output() assertionDataChange = new EventEmitter<{ queryIndex: number; assertionData: any[] }>();\n\n  /** Emit when selected query index changes */\n  @Output() selectedQueryIndexChange = new EventEmitter<number>();\n\n  /** Emit when active tab changes */\n  @Output() activeTabChange = new EventEmitter<'output' | 'verification' | 'advanced'>();\n\n  databaseForm: FormGroup;\n  selectedTab: 'output' | 'verification' | 'advanced' = 'output';\n  selectedQueryIndex: number = 0;\n\n  // Assertions form management - one form per query\n  assertionsForms: Map<number, FormGroup> = new Map();\n  displayedColumns: string[] = ['jsonPath', 'verificationType', 'expectedType', 'expectedValue', 'actions'];\n  defaultExpectedType = 'string';\n  private formSubscriptions: Map<number, Subscription> = new Map();\n  @ViewChild('assertionsTable') assertionsTable?: MatTable<any>;\n\n  // Advanced settings variables (generic per step, can be provided by parent)\n  @Input() advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray = new FormArray([]);\n\n  constructor(\n    private fb: FormBuilder,\n    private cdr: ChangeDetectorRef\n  ) {\n    this.databaseForm = this.fb.group({\n      dbEnvironment: ['', Validators.required],\n      normalEnvironment: [''],\n      queries: this.fb.array([])\n    });\n  }\n\n  ngOnInit(): void {\n    this.initializeFormWithInitialValues();\n    // If parent provided advanced settings, build from them; otherwise initialize defaults\n    if (this.advancedSettingsVariables && this.advancedSettingsVariables.length > 0) {\n      this.buildAdvancedVariablesForm();\n    } else {\n      this.initializeAdvancedSettings();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['queries'] && !changes['queries'].firstChange) {\n      // Rebuild form array when queries change\n      const queriesArray = this.databaseForm.get('queries') as FormArray;\n      while (queriesArray.length !== 0) {\n        queriesArray.removeAt(0);\n      }\n      // Clear old assertions forms\n      this.assertionsForms.forEach((form, index) => {\n        if (this.formSubscriptions.has(index)) {\n          this.formSubscriptions.get(index)!.unsubscribe();\n        }\n      });\n      this.assertionsForms.clear();\n      this.formSubscriptions.clear();\n\n      // Rebuild queries and assertions forms\n      this.queries.forEach((query, index) => {\n        // Ensure assertion data is initialized\n        if (!query.assertionData) {\n          query.assertionData = [];\n        }\n        this.addQueryToForm(query);\n        // Initialize assertions form for each query\n        this.ensureAssertionDataInitialized(index);\n      });\n\n      // Ensure selected query index is valid\n      if (this.selectedQueryIndex >= this.queries.length) {\n        this.selectedQueryIndex = Math.max(0, this.queries.length - 1);\n      }\n      this.cdr.detectChanges();\n    }\n    if (changes['initialDbEnvironment'] && changes['initialDbEnvironment'].currentValue) {\n      this.databaseForm.patchValue({ dbEnvironment: changes['initialDbEnvironment'].currentValue });\n    }\n    if (changes['initialNormalEnvironment'] && changes['initialNormalEnvironment'].currentValue) {\n      this.databaseForm.patchValue({ normalEnvironment: changes['initialNormalEnvironment'].currentValue });\n    }\n\n    // When parent updates advancedSettingsVariables, rebuild advanced form\n    if (changes['advancedSettingsVariables'] && this.advancedSettingsVariables) {\n      if (this.advancedSettingsVariables.length > 0) {\n        this.buildAdvancedVariablesForm();\n      } else {\n        this.initializeAdvancedSettings();\n      }\n    }\n  }\n\n  private initializeFormWithInitialValues(): void {\n    // Set initial DB environment if provided\n    if (this.initialDbEnvironment) {\n      this.databaseForm.patchValue({ dbEnvironment: this.initialDbEnvironment });\n    }\n    // Set initial Normal environment if provided\n    if (this.initialNormalEnvironment) {\n      this.databaseForm.patchValue({ normalEnvironment: this.initialNormalEnvironment });\n    }\n\n    // Initialize with queries if provided, otherwise add default query\n    if (this.queries.length === 0) {\n      this.addNewQuery();\n    } else {\n      this.queries.forEach((query, index) => {\n        // Ensure assertion data is initialized\n        if (!query.assertionData) {\n          query.assertionData = [];\n        }\n        this.addQueryToForm(query);\n        // Initialize assertions form for each query\n        this.ensureAssertionDataInitialized(index);\n        if (index === 0) {\n          this.selectedQueryIndex = 0;\n          this.selectedQueryIndexChange.emit(0);\n        }\n      });\n    }\n  }\n\n  get queriesFormArray(): FormArray {\n    return this.databaseForm.get('queries') as FormArray;\n  }\n\n  addNewQuery(): void {\n    const newQuery: DatabaseQuery = {\n      id: `query_${Date.now()}`,\n      query: '',\n      variable: '',\n      status: 'pending',\n      assertionData: [] // Initialize with empty assertion data\n    };\n    this.queries.push(newQuery);\n    this.addQueryToForm(newQuery);\n    const newIndex = this.queries.length - 1;\n    this.selectedQueryIndex = newIndex;\n    // Initialize assertions form for the new query\n    this.ensureAssertionDataInitialized(newIndex);\n    this.selectedQueryIndexChange.emit(this.selectedQueryIndex);\n    this.addQuery.emit();\n    this.cdr.detectChanges();\n  }\n\n  private addQueryToForm(query: DatabaseQuery): void {\n    const queryGroup = this.fb.group({\n      id: [query.id],\n      query: [query.query, Validators.required],\n      variable: [query.variable, Validators.required]\n    });\n    this.queriesFormArray.push(queryGroup);\n  }\n\n  deleteQueryById(queryId: string): void {\n    const index = this.queries.findIndex(q => q.id === queryId);\n    if (index !== -1) {\n      // Clean up assertions form and subscription for this query\n      if (this.formSubscriptions.has(index)) {\n        this.formSubscriptions.get(index)!.unsubscribe();\n        this.formSubscriptions.delete(index);\n      }\n      this.assertionsForms.delete(index);\n\n      // Reindex remaining forms and subscriptions\n      const formsToReindex = new Map<number, FormGroup>();\n      const subscriptionsToReindex = new Map<number, Subscription>();\n      \n      this.assertionsForms.forEach((form, oldIndex) => {\n        if (oldIndex > index) {\n          formsToReindex.set(oldIndex - 1, form);\n        } else if (oldIndex < index) {\n          formsToReindex.set(oldIndex, form);\n        }\n      });\n\n      this.formSubscriptions.forEach((sub, oldIndex) => {\n        if (oldIndex > index) {\n          subscriptionsToReindex.set(oldIndex - 1, sub);\n        } else if (oldIndex < index) {\n          subscriptionsToReindex.set(oldIndex, sub);\n        }\n      });\n\n      this.assertionsForms = formsToReindex;\n      this.formSubscriptions = subscriptionsToReindex;\n\n      this.queries.splice(index, 1);\n      this.queriesFormArray.removeAt(index);\n      if (this.selectedQueryIndex >= this.queries.length) {\n        this.selectedQueryIndex = Math.max(0, this.queries.length - 1);\n        // Ensure assertions form is initialized for the new selected query\n        if (this.selectedQueryIndex >= 0) {\n          this.ensureAssertionDataInitialized(this.selectedQueryIndex);\n        }\n      }\n      this.deleteQuery.emit(queryId);\n      this.cdr.detectChanges();\n    }\n  }\n\n  getDbEnvironmentConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'dbEnvironment',\n      placeholder: 'Select DB environment',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: this.dbEnvironmentOptions,\n      onSearch: (query: string) => {\n        this.searchDbEnvironment.emit(query);\n      }\n    };\n  }\n\n  getNormalEnvironmentConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'normalEnvironment',\n      placeholder: 'Select Normal environment',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: this.normalEnvironmentOptions,\n      onSearch: (query: string) => {\n        this.searchNormalEnvironment.emit(query);\n      }\n    };\n  }\n\n  getCurrentQuery(): DatabaseQuery | null {\n    if (this.queries.length > 0 && this.selectedQueryIndex >= 0 && this.selectedQueryIndex < this.queries.length) {\n      return this.queries[this.selectedQueryIndex];\n    }\n    return null;\n  }\n\n  getCurrentQueryFormGroup(): FormGroup | null {\n    if (this.queriesFormArray && this.selectedQueryIndex >= 0 && this.selectedQueryIndex < this.queriesFormArray.length) {\n      return this.queriesFormArray.at(this.selectedQueryIndex) as FormGroup;\n    }\n    return null;\n  }\n\n  onRunQuery(): void {\n    const dbEnvironment = this.databaseForm.get('dbEnvironment')?.value;\n    const normalEnvironment = this.databaseForm.get('normalEnvironment')?.value;\n    const currentQuery = this.getCurrentQuery();\n    const queryFormGroup = this.getCurrentQueryFormGroup();\n\n    if (currentQuery && queryFormGroup && dbEnvironment) {\n      const query = queryFormGroup.get('query')?.value || '';\n      const variable = queryFormGroup.get('variable')?.value || '';\n      \n      // Update the query object\n      currentQuery.query = query;\n      currentQuery.variable = variable;\n\n      this.runQuery.emit({\n        currentQuery,\n        query,\n        variable,\n        dbEnvironment,\n        normalEnvironment: normalEnvironment || undefined\n      });\n    }\n  }\n\n  onSelectQuery(index: number): void {\n    // Ensure assertion data is initialized for the selected query\n    this.ensureAssertionDataInitialized(index);\n    this.selectedQueryIndex = index;\n    this.selectedQueryIndexChange.emit(index);\n    // Trigger change detection to ensure assertions form is displayed\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Get the currently selected query index\n   */\n  getSelectedQueryIndex(): number {\n    return this.selectedQueryIndex;\n  }\n\n  /**\n   * Get the currently active tab\n   */\n  getActiveTab(): 'output' | 'verification' | 'advanced' {\n    return this.selectedTab;\n  }\n\n  onTabChange(tab: 'output' | 'verification' | 'advanced'): void {\n    this.selectedTab = tab;\n    this.activeTabChange.emit(tab);\n    // Ensure assertions form is initialized when switching to verification tab\n    if (tab === 'verification') {\n      this.ensureAssertionDataInitialized(this.selectedQueryIndex);\n      this.cdr.detectChanges();\n    }\n  }\n\n  onCopyResults(): void {\n    const rows = this.getCurrentQueryResult();\n    if (rows && rows.length > 0) {\n      const text = JSON.stringify(rows, null, 2);\n      navigator.clipboard.writeText(text).then(() => {\n        // Could emit an event or show a toast notification\n      });\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  isFormValid(): boolean {\n    // Check if main form is valid (dbEnvironment is required)\n    if (!this.databaseForm.valid) {\n      return false;\n    }\n\n    // Check if there's at least one query\n    if (this.queries.length === 0 || this.queriesFormArray.length === 0) {\n      return false;\n    }\n\n    // Check if all queries have valid query and variable fields\n    for (let i = 0; i < this.queriesFormArray.length; i++) {\n      const queryFormGroup = this.queriesFormArray.at(i) as FormGroup;\n      if (!queryFormGroup.valid) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  onCreateStep(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n    const formValue = this.databaseForm.value;\n\n    // Sync advanced variables from form to array before emitting\n    this.advancedSettingsVariables.forEach((variable, index) => {\n      const formGroup = this.advancedVariablesForm.at(index) as FormGroup;\n      if (formGroup) {\n        const formValueControl = formGroup.get('value')?.value;\n        variable.value = formValueControl;\n      }\n    });\n\n    const stepData: DatabaseFormData = {\n      dbEnvironment: formValue.dbEnvironment,\n      normalEnvironment: formValue.normalEnvironment || undefined,\n      queries: this.queries.map((query, index) => {\n        const queryFormGroup = this.queriesFormArray.at(index) as FormGroup;\n        return {\n          id: query.id,\n          query: queryFormGroup.get('query')?.value || '',\n          variable: queryFormGroup.get('variable')?.value || '',\n          status: query.status,\n          assertionData: query.assertionData || [] // Include assertion data\n        };\n      }),\n      advancedSettingsVariables: this.advancedSettingsVariables\n    };\n    this.createStep.emit(stepData);\n  }\n\n  getTableColumns(): string[] {\n    const rows = this.getCurrentQueryResult();\n    if (!rows || rows.length === 0) {\n      return [];\n    }\n    return Object.keys(rows[0]);\n  }\n\n  /** Get result rows for currently selected query. */\n  getCurrentQueryResult(): any[] {\n    const current = this.queries[this.selectedQueryIndex];\n    if (current && Array.isArray(current.queryResult) && current.queryResult.length > 0) {\n      return current.queryResult;\n    }\n    return [];\n  }\n\n  /**\n   * Get assertion data for a specific query\n   */\n  getAssertionDataForQuery(queryIndex: number): any[] {\n    const query = this.queries[queryIndex];\n    if (query && query.assertionData) {\n      return query.assertionData;\n    }\n    return [];\n  }\n\n  /**\n   * Handle assertion data change from external component\n   */\n  onAssertionDataChange(assertionData: any[], queryIndex: number): void {\n    if (this.queries[queryIndex]) {\n      // Create a deep copy to ensure each query has its own data\n      if (assertionData && assertionData.length > 0) {\n        this.queries[queryIndex].assertionData = assertionData.map((item: any) => {\n          // Ensure expectedValue is properly formatted\n          const expectedType = item.expectedType || 'string';\n          let expectedValue = item.expectedValue;\n\n          // For object/array types, ensure expectedValue is an object/array, not a string\n          if (expectedType === 'object' && typeof expectedValue === 'string' && expectedValue.trim()) {\n            try {\n              expectedValue = JSON.parse(expectedValue);\n            } catch (e) {\n              // If parsing fails, keep as string\n            }\n          } else if (expectedType === 'array' && typeof expectedValue === 'string' && expectedValue.trim()) {\n            try {\n              expectedValue = JSON.parse(expectedValue);\n            } catch (e) {\n              // If parsing fails, keep as string\n            }\n          } else if (expectedType === 'number' && typeof expectedValue === 'string') {\n            expectedValue = expectedValue !== '' ? Number(expectedValue) : null;\n          } else if (expectedType === 'boolean') {\n            if (expectedValue === 'true' || expectedValue === true) {\n              expectedValue = true;\n            } else if (expectedValue === 'false' || expectedValue === false) {\n              expectedValue = false;\n            }\n          }\n\n          return {\n            jsonPath: item.jsonPath || '',\n            verificationType: item.verificationType || 'equals',\n            expectedType: expectedType,\n            expectedValue: expectedValue\n          };\n        });\n      } else {\n        this.queries[queryIndex].assertionData = [];\n      }\n\n      // Emit the change to parent\n      this.assertionDataChange.emit({\n        queryIndex: queryIndex,\n        assertionData: this.queries[queryIndex].assertionData || []\n      });\n    }\n  }\n\n  /**\n   * Initialize assertion data for a query if it doesn't exist\n   */\n  private ensureAssertionDataInitialized(queryIndex: number): void {\n    if (this.queries[queryIndex] && !this.queries[queryIndex].assertionData) {\n      this.queries[queryIndex].assertionData = [];\n    }\n    // Initialize assertions form for this query if it doesn't exist\n    if (!this.assertionsForms.has(queryIndex)) {\n      this.initializeAssertionsForm(queryIndex);\n    }\n  }\n\n  /**\n   * Initialize assertions form for a specific query\n   */\n  private initializeAssertionsForm(queryIndex: number): void {\n    const assertionsArray = this.fb.array([]);\n    const assertionsForm = this.fb.group({\n      assertions: assertionsArray\n    });\n    this.assertionsForms.set(queryIndex, assertionsForm);\n\n    // Load existing assertions if they exist\n    const query = this.queries[queryIndex];\n    if (query && query.assertionData && query.assertionData.length > 0) {\n      this.loadAssertionsForQuery(queryIndex);\n    }\n\n    // Subscribe to form changes\n    this.subscribeToAssertionsFormChanges(queryIndex);\n  }\n\n  /**\n   * Get assertions form for current query\n   */\n  getCurrentAssertionsForm(): FormGroup | null {\n    if (this.assertionsForms.has(this.selectedQueryIndex)) {\n      return this.assertionsForms.get(this.selectedQueryIndex)!;\n    }\n    // Initialize if it doesn't exist\n    this.ensureAssertionDataInitialized(this.selectedQueryIndex);\n    return this.assertionsForms.get(this.selectedQueryIndex) || null;\n  }\n\n  /**\n   * Get assertions form array for current query\n   */\n  getAssertionsFormArray(): FormArray {\n    const form = this.getCurrentAssertionsForm();\n    if (form) {\n      return form.get('assertions') as FormArray;\n    }\n    return this.fb.array([]);\n  }\n\n  /**\n   * Load assertions into form for a specific query\n   */\n  private loadAssertionsForQuery(queryIndex: number): void {\n    const form = this.assertionsForms.get(queryIndex);\n    if (!form) return;\n\n    const formArray = form.get('assertions') as FormArray;\n    const query = this.queries[queryIndex];\n    if (!query || !query.assertionData) return;\n\n    // Clear existing form array\n    while (formArray.length !== 0) {\n      formArray.removeAt(0);\n    }\n\n    // Load assertions\n    query.assertionData.forEach((assertion: any) => {\n      const expectedType = assertion.expectedType || 'string';\n      let expectedValue: any = '';\n\n      if (expectedType === 'null') {\n        expectedValue = null;\n      } else if (expectedType === 'object' || expectedType === 'array') {\n        if (typeof assertion.expectedValue === 'object' && assertion.expectedValue !== null) {\n          expectedValue = JSON.stringify(assertion.expectedValue, null, 2);\n        } else {\n          expectedValue = assertion.expectedValue || '';\n        }\n      } else if (expectedType === 'boolean') {\n        expectedValue = (assertion.expectedValue === true || assertion.expectedValue === 'true') ? 'true' : 'false';\n      } else if (expectedType === 'number') {\n        expectedValue = assertion.expectedValue !== null && assertion.expectedValue !== undefined\n          ? String(assertion.expectedValue)\n          : '';\n      } else {\n        expectedValue = assertion.expectedValue !== null && assertion.expectedValue !== undefined\n          ? String(assertion.expectedValue)\n          : '';\n      }\n\n      const formGroup = this.fb.group({\n        jsonPath: [assertion.jsonPath || '', Validators.required],\n        verificationType: [assertion.verificationType || 'equals'],\n        expectedType: [expectedType],\n        expectedValue: [expectedValue, [Validators.required, this.expectedValueValidator]]\n      });\n\n      formArray.push(formGroup);\n    });\n\n    this.cdr.detectChanges();\n  }\n\n  /**\n   * Subscribe to assertions form changes\n   */\n  private subscribeToAssertionsFormChanges(queryIndex: number): void {\n    const form = this.assertionsForms.get(queryIndex);\n    if (!form) return;\n\n    // Unsubscribe from previous subscription if exists\n    if (this.formSubscriptions.has(queryIndex)) {\n      this.formSubscriptions.get(queryIndex)!.unsubscribe();\n    }\n\n    const formArray = form.get('assertions') as FormArray;\n    const subscription = formArray.valueChanges.subscribe(() => {\n      this.emitAssertionDataForQuery(queryIndex);\n    });\n\n    this.formSubscriptions.set(queryIndex, subscription);\n  }\n\n  /**\n   * Emit assertion data for a specific query\n   */\n  private emitAssertionDataForQuery(queryIndex: number): void {\n    const form = this.assertionsForms.get(queryIndex);\n    if (!form) return;\n\n    const formArray = form.get('assertions') as FormArray;\n    const assertionData = formArray.controls.map((control) => {\n      if (!(control instanceof FormGroup)) return null;\n\n      const value = control.value;\n      const expectedType = value.expectedType || 'string';\n      let expectedValue: any = value.expectedValue;\n\n      // Parse expectedValue based on type\n      if (expectedType === 'null') {\n        expectedValue = null;\n      } else if (expectedType === 'number') {\n        expectedValue = expectedValue !== '' ? Number(expectedValue) : null;\n      } else if (expectedType === 'boolean') {\n        expectedValue = (expectedValue === 'true' || expectedValue === true);\n      } else if (expectedType === 'array' || expectedType === 'object') {\n        if (typeof expectedValue === 'string' && expectedValue.trim()) {\n          try {\n            expectedValue = JSON.parse(expectedValue);\n          } catch (e) {\n            // Keep as string if parsing fails\n          }\n        }\n      } else {\n        expectedValue = String(expectedValue || '');\n      }\n\n      return {\n        jsonPath: (value.jsonPath || '').trim(),\n        verificationType: value.verificationType || 'equals',\n        expectedType: expectedType,\n        expectedValue: expectedValue\n      };\n    }).filter(item => item !== null && item!.jsonPath) as any[];\n\n    // Update query's assertion data\n    if (this.queries[queryIndex]) {\n      this.queries[queryIndex].assertionData = assertionData;\n    }\n\n    // Emit to parent\n    this.assertionDataChange.emit({\n      queryIndex: queryIndex,\n      assertionData: assertionData\n    });\n  }\n\n  /**\n   * Add a new assertion\n   */\n  addAssertion(): void {\n    const formArray = this.getAssertionsFormArray();\n    const formGroup = this.fb.group({\n      jsonPath: ['', Validators.required],\n      verificationType: ['equals'],\n      expectedType: [this.defaultExpectedType],\n      expectedValue: ['', [Validators.required, this.expectedValueValidator]]\n    });\n    formArray.push(formGroup);\n    this.cdr.detectChanges();\n    if (this.assertionsTable) {\n      this.assertionsTable.renderRows();\n    }\n  }\n\n  /**\n   * Remove an assertion\n   */\n  removeAssertion(index: number): void {\n    const formArray = this.getAssertionsFormArray();\n    formArray.removeAt(index);\n    this.cdr.detectChanges();\n    if (this.assertionsTable) {\n      this.assertionsTable.renderRows();\n    }\n    this.emitAssertionDataForQuery(this.selectedQueryIndex);\n  }\n\n  /**\n   * Get form control at specific index\n   */\n  getFormControlAt(index: number, controlName: string): AbstractControl | null {\n    const formArray = this.getAssertionsFormArray();\n    if (index < 0 || index >= formArray.length) return null;\n    const formGroup = formArray.at(index) as FormGroup;\n    return formGroup?.get(controlName) || null;\n  }\n\n  /**\n   * Get expected type for an assertion\n   */\n  getExpectedType(index: number): string {\n    const formArray = this.getAssertionsFormArray();\n    if (index < 0 || index >= formArray.length) return 'string';\n    const formGroup = formArray.at(index) as FormGroup;\n    return formGroup?.get('expectedType')?.value || 'string';\n  }\n\n  /**\n   * Get expected value placeholder\n   */\n  getExpectedValuePlaceholder(index: number): string {\n    const expectedType = this.getExpectedType(index);\n    switch (expectedType) {\n      case 'string': return 'Enter value';\n      case 'array': return 'Enter JSON array';\n      case 'object': return 'Enter JSON object';\n      case 'null': return 'No value required';\n      default: return 'Enter value';\n    }\n  }\n\n  /**\n   * Handle expected type change\n   */\n  onExpectedTypeChange(index: number, value: string): void {\n    const formArray = this.getAssertionsFormArray();\n    if (index < 0 || index >= formArray.length) return;\n\n    const formGroup = formArray.at(index) as FormGroup;\n    const expectedValueControl = formGroup.get('expectedValue');\n    if (!expectedValueControl) return;\n\n    let newValue: any = '';\n    if (value === 'boolean') {\n      newValue = 'true';\n    } else if (value === 'null') {\n      newValue = null;\n    }\n\n    expectedValueControl.clearValidators();\n    expectedValueControl.setValue(newValue, { emitEvent: false });\n\n    if (value === 'null') {\n      expectedValueControl.setValidators([this.expectedValueValidator]);\n    } else if (value === 'object' || value === 'array') {\n      expectedValueControl.setValidators([Validators.required]);\n    } else {\n      expectedValueControl.setValidators([Validators.required, this.expectedValueValidator]);\n    }\n\n    setTimeout(() => {\n      expectedValueControl.updateValueAndValidity({ emitEvent: false });\n    }, 100);\n  }\n\n  /**\n   * Expected value validator\n   */\n  expectedValueValidator = (control: AbstractControl): { [key: string]: any } | null => {\n    const expectedType = control.parent?.get('expectedType')?.value;\n    if (!expectedType || expectedType === 'null') return null;\n\n    const value = control.value;\n    if (!value && value !== 0 && value !== false) return null;\n\n    if (expectedType === 'number') {\n      if (isNaN(Number(value))) {\n        return { invalidType: true, message: 'Invalid number value' };\n      }\n    } else if (expectedType === 'boolean') {\n      if (value !== 'true' && value !== 'false' && value !== true && value !== false) {\n        return { invalidType: true, message: 'Invalid boolean value' };\n      }\n    } else if (expectedType === 'array') {\n      if (typeof value === 'string' && value.trim()) {\n        try {\n          const parsed = JSON.parse(value);\n          if (!Array.isArray(parsed)) {\n            return { invalidType: true, message: 'Value must be a valid JSON array' };\n          }\n        } catch (e) {\n          return { invalidType: true, message: 'Invalid Array value - must be valid JSON' };\n        }\n      }\n    } else if (expectedType === 'object') {\n      if (typeof value === 'string' && value.trim() && value.trim() !== '{}') {\n        try {\n          const parsed = JSON.parse(value);\n          if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\n            return { invalidType: true, message: 'Value must be a valid JSON object' };\n          }\n        } catch (e) {\n          return { invalidType: true, message: 'Invalid Object value - must be valid JSON' };\n        }\n      }\n    }\n\n    return null;\n  };\n\n  /**\n   * Get assertions data source for table\n   */\n  get assertionsDataSource() {\n    return this.getAssertionsFormArray().controls;\n  }\n\n  /**\n   * Track by function for table rows\n   */\n  trackByIndex(index: number): any {\n    return index;\n  }\n\n  ngOnDestroy(): void {\n    // Clean up subscriptions\n    this.formSubscriptions.forEach(sub => sub.unsubscribe());\n    this.formSubscriptions.clear();\n  }\n\n  /**\n   * Initialize advanced settings variables for database steps.\n   */\n  private initializeAdvancedSettings(): void {\n    this.advancedSettingsVariables = [\n      {\n        name: 'isStepOptional',\n        label: \"Don't fail the test if this step fails.\",\n        value: false,\n        type: 'boolean'\n      },\n      {\n        name: 'shouldSkip',\n        label: 'Skip this step during execution.',\n        value: false,\n        type: 'boolean'\n      }\n    ];\n\n    this.buildAdvancedVariablesForm();\n  }\n\n  /**\n   * Build reactive form for advanced settings variables.\n   */\n  private buildAdvancedVariablesForm(): void {\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    this.advancedSettingsVariables.forEach(variable => {\n      const defaultValue =\n        variable.type === 'boolean' || typeof variable.value === 'boolean'\n          ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n          : (variable.value || '');\n\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n\n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  /**\n   * Handle advanced boolean changes and keep data/form in sync.\n   */\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  /**\n   * Handle non-boolean advanced variable changes (reserved for future use).\n   */\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full 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    {{ editMode ? 'Update Database Test Step' : 'Create Database Test Step' }}\n  </h2>\n\n  <!-- Environment Section (separator line only on bottom) -->\n  <div class=\"cqa-flex cqa-w-full cqa-justify-between cqa-gap-1.5 cqa-pb-[0.5rem] cqa-mb-4 cqa-border-0 cqa-border-b cqa-border-solid cqa-border-gray-200\">\n    <div class=\"cqa-flex cqa-gap-4 cqa-items-start\">\n      <!-- DB Environment -->\n      <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1.5\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-block\">\n          DB Environment <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <div class=\"cqa-min-w-0\">\n          <cqa-dynamic-select [form]=\"databaseForm\" [config]=\"getDbEnvironmentConfig()\">\n          </cqa-dynamic-select>\n        </div>\n        <p class=\"cqa-text-xs cqa-text-gray-500\">\n          Uses Database environments from Environments.\n        </p>\n      </div>\n\n      <!-- Normal Environment -->\n      <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-gap-1.5\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-block\">\n          Normal Environment\n        </label>\n        <div class=\"cqa-min-w-0\">\n          <cqa-dynamic-select [form]=\"databaseForm\" [config]=\"getNormalEnvironmentConfig()\">\n          </cqa-dynamic-select>\n        </div>\n        <p class=\"cqa-text-xs cqa-text-gray-500\">\n          Uses Normal environments from Environments.\n        </p>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-justify-end cqa-mt-2\">\n      <cqa-button variant=\"filled\" text=\"Run Query\" (clicked)=\"onRunQuery()\"\n        [disabled]=\"!databaseForm.get('dbEnvironment')?.value || isLoading\"\n        [customClass]=\"'!cqa-bg-[#3F43EE] cqa-text-[#FBFCFF] cqa-text-sm cqa-font-semibold cqa-whitespace-nowrap !cqa-pt-[10px] !cqa-pb-[10px] !cqa-pl-[24px] !cqa-pr-[24px] !cqa-gap-[8px] cqa-rounded-lg cqa-min-h-[37px] hover:!cqa-bg-[#1B1FEB] cqa-flex-shrink-0'\">\n      </cqa-button>\n    </div>\n  </div>\n\n  <!-- Main Content: Two Column Layout -->\n  <div class=\"cqa-flex cqa-gap-[12px] cqa-flex-1 cqa-overflow-hidden cqa-mb-6\">\n    <!-- Left Panel: Query List -->\n    <div\n      class=\"cqa-w-[175px] cqa-min-w-[175px] cqa-flex-shrink-0 cqa-flex cqa-flex-col cqa-border-0 cqa-border-r cqa-border-r-[1px] cqa-border-solid cqa-border-[#E0E0E0] cqa-bg-[#FAFAFA] cqa-overflow-hidden\">\n      <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-p-2\">\n        <div *ngFor=\"let query of queries; let i = index\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-[10px] cqa-w-full cqa-pt-[14px] cqa-pb-[14px] cqa-pl-[16px] cqa-pr-[16px] cqa-rounded-[8px] cqa-cursor-pointer cqa-mb-1\"\n          [class.cqa-bg-blue-50]=\"selectedQueryIndex === i\"\n          [class.cqa-border]=\"selectedQueryIndex === i\"\n          [class.cqa-border-blue-500]=\"selectedQueryIndex === i\"\n          [class.cqa-bg-grey-400]=\"selectedQueryIndex !== i\"\n          (click)=\"onSelectQuery(i)\"\n          style=\"height: 49px; min-height: 49px;\">\n          <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">Query {{ i + 1 }}</span>\n          <cqa-badge *ngIf=\"query.status\"\n            [label]=\"query.status === 'passed' ? 'Passed' : query.status === 'failed' ? 'Failed' : 'Pending'\"\n            [variant]=\"query.status === 'passed' ? 'success' : query.status === 'failed' ? 'error' : 'default'\"\n            size=\"small\">\n          </cqa-badge>\n        </div>\n      </div>\n    </div>\n\n    <!-- Right Panel: Query Editor -->\n    <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-overflow-auto\">\n      <div class=\"cqa-flex-1 cqa-flex cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-gap-[10px] cqa-mb-4\">\n        <div class=\"cqa-flex cqa-flex-col cqa-gap-[6px]\" style=\"width: 50%;\">\n          <div class=\"\">\n            <h3 class=\"cqa-text-sm cqa-font-semibold cqa-text-gray-900 cqa-text-[14px]\">Query & Store Response<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span></h3>\n          </div>\n\n          <div class=\"cqa-flex cqa-justify-between\">\n            <!-- SQL Query Textarea -->\n            <div class=\"cqa-flex-1 cqa-flex cqa-flex-col cqa-min-w-0 cqa-w-full cqa-rounded-md cqa-bg-gray-50/50\">\n              <cqa-custom-textarea [placeholder]=\"'Enter your SQL query here...'\"\n                [value]=\"getCurrentQueryFormGroup()?.get('query')?.value || ''\" [fullWidth]=\"true\" [rows]=\"8\"\n                [textareaInlineStyle]=\"'padding: 1rem;'\"\n                (valueChange)=\"getCurrentQueryFormGroup()?.get('query')?.setValue($event)\">\n              </cqa-custom-textarea>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-flex cqa-flex-col cqa-gap-[10px] cqa-mb-[8px]\">\n\n\n          <!-- Variable Input -->\n          <div class=\"cqa-flex cqa-gap-4\">\n            <div class=\"cqa-flex-1\">\n              <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700 cqa-mb-1.5 cqa-block cqa-text-[14px] cqa-font-semibold\">\n                Variable<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n              </label>\n              <cqa-custom-input [placeholder]=\"'Variable name'\"\n                [value]=\"getCurrentQueryFormGroup()?.get('variable')?.value || ''\" [fullWidth]=\"true\"\n                (valueChange)=\"getCurrentQueryFormGroup()?.get('variable')?.setValue($event)\">\n              </cqa-custom-input>\n              <p class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n                Use letters, numbers, underscore. No spaces. Unique per step. Case sensitive.\n              </p>\n            </div>\n          </div>\n          <!-- Action Buttons (pinned to bottom) -->\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-mt-auto\">\n            <cqa-button variant=\"outlined\" text=\"Add Query\" icon=\"add\" (clicked)=\"addNewQuery()\"\n              [customClass]=\"'cqa-bg-white !cqa-border-[#414146] cqa-text-sm cqa-font-semibold cqa-text-[#414146] cqa-whitespace-nowrap !cqa-py-[10px] !cqa-px-[10px] !cqa-gap-[8px] cqa-rounded-lg hover:!cqa-border-[#414146] hover:cqa-bg-gray-50'\"\n              [iconColor]=\"'#414146'\">\n            </cqa-button>\n            <cqa-button type=\"button\" variant=\"text\"\n              [customClass]=\"'cqa-min-w-[40px] cqa-w-10 cqa-h-9 cqa-rounded cqa-bg-gray-100 cqa-flex cqa-items-center cqa-justify-center hover:cqa-bg-gray-200 cqa-p-0'\"\n              [tooltip]=\"'Delete query'\" (clicked)=\"deleteQueryById(getCurrentQuery()?.id || '')\"\n              [disabled]=\"queries.length <= 1\" [attr.aria-label]=\"'Delete query'\">\n              <svg class=\"cqa-flex-shrink-0\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\n                fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                <path\n                  d=\"M10.6663 6V12.6667H5.33301V6H10.6663ZM9.66634 2H6.33301L5.66634 2.66667H3.33301V4H12.6663V2.66667H10.333L9.66634 2ZM11.9997 4.66667H3.99967V12.6667C3.99967 13.4 4.59967 14 5.33301 14H10.6663C11.3997 14 11.9997 13.4 11.9997 12.6667V4.66667Z\"\n                  fill=\"#6B7280\" />\n              </svg>\n            </cqa-button>\n            <cqa-button variant=\"filled\" text=\"Run\" icon=\"play_arrow\" (clicked)=\"onRunQuery()\"\n              [disabled]=\"!getCurrentQueryFormGroup()?.get('query')?.value || !databaseForm.get('dbEnvironment')?.value || isLoading\"\n              [customClass]=\"'!cqa-bg-[#3F43EE] cqa-text-[#FBFCFF] cqa-text-sm cqa-font-semibold cqa-whitespace-nowrap !cqa-pt-[10px] !cqa-pb-[10px] !cqa-pl-[16px] !cqa-pr-[24px] !cqa-gap-[8px] cqa-rounded-lg cqa-min-h-[38px] hover:!cqa-bg-[#1B1FEB] !cqa-border-none'\"\n              [iconColor]=\"'#FBFCFF'\">\n            </cqa-button>\n          </div>\n        </div>\n      </div>\n      <!-- Results Section -->\n      <div class=\"cqa-flex cqa-flex-col cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-mb-6\">\n        <!-- Tabs -->\n        <div class=\"cqa-flex cqa-items-center cqa-border-b cqa-border-gray-200 cqa-bg-gray-50\">\n          <button type=\"button\"\n            class=\"cqa-px-4 cqa-py-2 cqa-text-sm cqa-font-medium cqa-transition-colors cqa-border-b-2\"\n            [class.cqa-text-blue-600]=\"selectedTab === 'output'\" [class.cqa-border-blue-600]=\"selectedTab === 'output'\"\n            [class.cqa-text-gray-600]=\"selectedTab !== 'output'\"\n            [class.cqa-border-transparent]=\"selectedTab !== 'output'\" (click)=\"onTabChange('output')\">\n            Output\n          </button>\n          <button type=\"button\"\n            class=\"cqa-px-4 cqa-py-2 cqa-text-sm cqa-font-medium cqa-transition-colors cqa-border-b-2\"\n            [class.cqa-text-blue-600]=\"selectedTab === 'verification'\"\n            [class.cqa-border-blue-600]=\"selectedTab === 'verification'\"\n            [class.cqa-text-gray-600]=\"selectedTab !== 'verification'\"\n            [class.cqa-border-transparent]=\"selectedTab !== 'verification'\" (click)=\"onTabChange('verification')\">\n            Verification\n          </button>\n          <button type=\"button\"\n            class=\"cqa-px-4 cqa-py-2 cqa-text-sm cqa-font-medium cqa-transition-colors cqa-border-b-2\"\n            [class.cqa-text-blue-600]=\"selectedTab === 'advanced'\"\n            [class.cqa-border-blue-600]=\"selectedTab === 'advanced'\"\n            [class.cqa-text-gray-600]=\"selectedTab !== 'advanced'\"\n            [class.cqa-border-transparent]=\"selectedTab !== 'advanced'\" (click)=\"onTabChange('advanced')\">\n            Advanced\n          </button>\n        </div>\n\n        <!-- Tab Content -->\n        <div class=\"cqa-p-4\">\n          <!-- Output Tab -->\n          <div *ngIf=\"selectedTab === 'output'\">\n            <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n              <h4 class=\"cqa-text-sm cqa-font-semibold cqa-text-gray-900\">Query Results</h4>\n              <cqa-button variant=\"text\" text=\"Copy\" icon=\"content_copy\" [customClass]=\"'cqa-text-blue-600'\"\n                (clicked)=\"onCopyResults()\">\n              </cqa-button>\n            </div>\n\n            <!-- Results Table -->\n            <div *ngIf=\"getCurrentQueryResult().length > 0\" class=\"cqa-overflow-x-auto\">\n              <table class=\"cqa-w-full cqa-border-collapse\">\n                <thead>\n                  <tr class=\"cqa-bg-gray-50 cqa-border-b cqa-border-gray-200\">\n                    <th *ngFor=\"let key of getTableColumns()\"\n                      class=\"cqa-px-4 cqa-py-2 cqa-text-left cqa-text-xs cqa-font-semibold cqa-text-gray-700 cqa-uppercase\">\n                      {{ key }}\n                    </th>\n                  </tr>\n                </thead>\n                <tbody>\n                  <tr *ngFor=\"let row of getCurrentQueryResult()\" class=\"cqa-border-b cqa-border-gray-200 hover:cqa-bg-gray-50\">\n                    <td *ngFor=\"let key of getTableColumns()\" class=\"cqa-px-4 cqa-py-2 cqa-text-sm cqa-text-gray-900\">\n                      {{ row[key] }}\n                    </td>\n                  </tr>\n                </tbody>\n              </table>\n            </div>\n\n            <div *ngIf=\"getCurrentQueryResult().length === 0\"\n              class=\"cqa-text-center cqa-py-8 cqa-text-gray-400 cqa-text-sm\">\n              No results yet. Run a query to see results.\n            </div>\n          </div>\n\n          <!-- Verification Tab -->\n          <div *ngIf=\"selectedTab === 'verification'\" class=\"assertions-container\">\n            <!-- Header Section -->\n            <div class=\"assertions-header\">\n              <div class=\"header-content\">\n                <h3 class=\"header-title\">Assertions</h3>\n                <p class=\"header-subtitle\">Use JSONPath to target values in the query output.</p>\n              </div>\n              <button \n                mat-stroked-button \n                color=\"primary\" \n                class=\"add-assertion-button\"\n                (click)=\"addAssertion()\">\n                <mat-icon>add</mat-icon>\n                Add Assertion\n              </button>\n            </div>\n\n            <!-- Table Section -->\n            <form *ngIf=\"getCurrentAssertionsForm()\" [formGroup]=\"getCurrentAssertionsForm()!\" class=\"assertions-form\">\n              <div formArrayName=\"assertions\">\n                <div class=\"table-scroll-container\">\n                  <table mat-table [dataSource]=\"assertionsDataSource\" class=\"assertions-table\" #assertionsTable>\n                    <!-- JSONPath Column -->\n                    <ng-container matColumnDef=\"jsonPath\">\n                      <th mat-header-cell *matHeaderCellDef>jsonPath</th>\n                      <td mat-cell *matCellDef=\"let assertion; let i = index\">\n                        <ng-container [formGroupName]=\"i\">\n                          <mat-form-field appearance=\"outline\" class=\"full-width-field\">\n                            <input \n                              matInput \n                              formControlName=\"jsonPath\"\n                              placeholder=\"username\"\n                              required>\n                            <mat-error *ngIf=\"getFormControlAt(i, 'jsonPath')?.hasError('required') && \n                                              getFormControlAt(i, 'jsonPath')?.touched\">\n                              JSONPath is required\n                            </mat-error>\n                          </mat-form-field>\n                        </ng-container>\n                      </td>\n                    </ng-container>\n\n                    <!-- Verification Type Column -->\n                    <ng-container matColumnDef=\"verificationType\">\n                      <th mat-header-cell *matHeaderCellDef>verificationType</th>\n                      <td mat-cell *matCellDef=\"let assertion; let i = index\">\n                        <ng-container [formGroupName]=\"i\">\n                          <mat-form-field appearance=\"outline\" class=\"full-width-field\">\n                            <mat-select formControlName=\"verificationType\">\n                              <mat-option value=\"equals\">Equals</mat-option>\n                              <mat-option value=\"not_equals\">Not Equals</mat-option>\n                              <mat-option value=\"contains\">Contains</mat-option>\n                              <mat-option value=\"not_contains\">Not Contains</mat-option>\n                              <mat-option value=\"greater_than\">Greater Than</mat-option>\n                              <mat-option value=\"less_than\">Less Than</mat-option>\n                              <mat-option value=\"greater_than_or_equals\">Greater Than Or Equals</mat-option>\n                              <mat-option value=\"less_than_or_equals\">Less Than Or Equals</mat-option>\n                              <mat-option value=\"exists\">Exists</mat-option>\n                              <mat-option value=\"not_exists\">Not Exists</mat-option>\n                            </mat-select>\n                          </mat-form-field>\n                        </ng-container>\n                      </td>\n                    </ng-container>\n\n                    <!-- Expected Type Column -->\n                    <ng-container matColumnDef=\"expectedType\">\n                      <th mat-header-cell *matHeaderCellDef>expectedType</th>\n                      <td mat-cell *matCellDef=\"let assertion; let i = index\">\n                        <ng-container [formGroupName]=\"i\">\n                          <mat-form-field appearance=\"outline\" class=\"full-width-field\">\n                            <mat-select \n                              formControlName=\"expectedType\"\n                              (selectionChange)=\"onExpectedTypeChange(i, $event.value)\">\n                              <mat-option value=\"string\">String</mat-option>\n                              <mat-option value=\"number\">Number</mat-option>\n                              <mat-option value=\"boolean\">Boolean</mat-option>\n                              <mat-option value=\"object\">Object</mat-option>\n                              <mat-option value=\"array\">Array</mat-option>\n                              <mat-option value=\"null\">Null</mat-option>\n                            </mat-select>\n                          </mat-form-field>\n                        </ng-container>\n                      </td>\n                    </ng-container>\n\n                    <!-- Expected Value Column -->\n                    <ng-container matColumnDef=\"expectedValue\">\n                      <th mat-header-cell *matHeaderCellDef>expectedValue</th>\n                      <td mat-cell *matCellDef=\"let assertion; let i = index\">\n                        <ng-container [formGroupName]=\"i\">\n                          <!-- String, Array, Object Input -->\n                          <mat-form-field \n                            *ngIf=\"getExpectedType(i) === 'string' || getExpectedType(i) === 'array' || getExpectedType(i) === 'object'\"\n                            appearance=\"outline\" \n                            class=\"full-width-field\">\n                            <textarea \n                              *ngIf=\"getExpectedType(i) === 'array' || getExpectedType(i) === 'object'\"\n                              matInput \n                              formControlName=\"expectedValue\"\n                              [placeholder]=\"getExpectedValuePlaceholder(i)\"\n                              rows=\"3\"\n                              required></textarea>\n                            <input \n                              *ngIf=\"getExpectedType(i) === 'string'\"\n                              matInput \n                              formControlName=\"expectedValue\"\n                              [placeholder]=\"getExpectedValuePlaceholder(i)\"\n                              required>\n                            <mat-error *ngIf=\"getFormControlAt(i, 'expectedValue')?.hasError('required') && \n                                              getFormControlAt(i, 'expectedValue')?.touched\">\n                              Expected value is required\n                            </mat-error>\n                            <mat-error *ngIf=\"getFormControlAt(i, 'expectedValue')?.hasError('invalidType')\">\n                              {{ getFormControlAt(i, 'expectedValue')?.errors?.message }}\n                            </mat-error>\n                          </mat-form-field>\n\n                          <!-- Null Type Display -->\n                          <mat-form-field \n                            *ngIf=\"getExpectedType(i) === 'null'\"\n                            appearance=\"outline\" \n                            class=\"full-width-field\">\n                            <input \n                              matInput \n                              formControlName=\"expectedValue\"\n                              [placeholder]=\"getExpectedValuePlaceholder(i)\"\n                              [disabled]=\"true\">\n                          </mat-form-field>\n\n                          <!-- Number Input -->\n                          <mat-form-field \n                            *ngIf=\"getExpectedType(i) === 'number'\"\n                            appearance=\"outline\" \n                            class=\"full-width-field\">\n                            <input \n                              matInput \n                              type=\"number\"\n                              formControlName=\"expectedValue\"\n                              placeholder=\"Expected Value in Number\"\n                              required>\n                            <mat-error *ngIf=\"getFormControlAt(i, 'expectedValue')?.hasError('required') && \n                                              getFormControlAt(i, 'expectedValue')?.touched\">\n                              Expected value is required\n                            </mat-error>\n                          </mat-form-field>\n\n                          <!-- Boolean Select -->\n                          <mat-form-field \n                            *ngIf=\"getExpectedType(i) === 'boolean'\"\n                            appearance=\"outline\" \n                            class=\"full-width-field\">\n                            <mat-select formControlName=\"expectedValue\" required>\n                              <mat-option value=\"true\">true</mat-option>\n                              <mat-option value=\"false\">false</mat-option>\n                            </mat-select>\n                            <mat-error *ngIf=\"getFormControlAt(i, 'expectedValue')?.hasError('required') && \n                                              getFormControlAt(i, 'expectedValue')?.touched\">\n                              Expected value is required\n                            </mat-error>\n                          </mat-form-field>\n                        </ng-container>\n                      </td>\n                    </ng-container>\n\n                    <!-- Actions Column -->\n                    <ng-container matColumnDef=\"actions\">\n                      <th mat-header-cell *matHeaderCellDef></th>\n                      <td mat-cell *matCellDef=\"let assertion; let i = index\">\n                        <button \n                          mat-icon-button \n                          color=\"warn\"\n                          class=\"delete-button\"\n                          (click)=\"removeAssertion(i)\"\n                          [matTooltip]=\"'Delete assertion'\">\n                          <mat-icon>delete</mat-icon>\n                        </button>\n                      </td>\n                    </ng-container>\n\n                    <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n                    <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n                  </table>\n                </div>\n\n                <!-- Empty State -->\n                <div *ngIf=\"getAssertionsFormArray().length === 0\" class=\"empty-state\">\n                  <p>No assertions added. Click \"Add Assertion\" to create one.</p>\n                </div>\n              </div>\n            </form>\n          </div>\n\n          <div *ngIf=\"selectedTab === 'advanced'\">\n            <cqa-advanced-variables-form \n              [advancedVariables]=\"advancedSettingsVariables\"\n              [advancedVariableForm]=\"advancedVariablesForm\"\n              (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n              (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n            </cqa-advanced-variables-form>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n\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\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button *ngIf=\"!isCreatingStep\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!isFormValid()\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n    <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, Validators, FormArray } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\n\nexport interface AiAgentFormData {\n  query: string;\n  type: string;\n  environments: string;\n  metadata?: string;\n  description?: string;\n  continueOnError?: boolean;\n  disabled?: boolean;\n  retryCount?: string;\n  iframeLocator?: string;\n  otherLocators?: string;\n  advancedSettingsVariables?: any[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-ai-agent',\n  templateUrl: './step-builder-ai-agent.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderAiAgentComponent implements OnInit, OnChanges {\n  /** Options for type dropdown */\n  @Input() typeOptions: SelectOption[] = [];\n\n  /** Options for environments dropdown */\n  @Input() environmentOptions: SelectOption[] = [];\n  /** Indicates if more environments are available for loading */\n  @Input() hasMoreEnvironments: boolean = false;\n  /** Loading state for environments */\n  @Input() isLoadingEnvironments: boolean = false;\n\n  /** Options for retry count dropdown */\n  @Input() retryCountOptions: SelectOption[] = [];\n\n  /** Options for iframe locator dropdown */\n  @Input() iframeLocatorOptions: SelectOption[] = [];\n\n  /** Options for other locators dropdown */\n  @Input() otherLocatorsOptions: SelectOption[] = [];\n\n  /** Initial values for edit mode */\n  @Input() initialQuery?: string;\n  @Input() initialType?: string;\n  @Input() initialDescription?: string;\n  @Input() initialEnvironments?: string;\n  @Input() initialMetadata?: string;\n  @Input() initialDisabled?: boolean;\n  @Input() initialContinueOnError?: boolean;\n  @Input() initialRetryCount?: number;\n  @Input() initialIframeLocator?: string;\n  @Input() initialOtherLocators?: string;\n  @Input() editMode: boolean = false;\n\n  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */\n  @Input() isCreatingStep: boolean = false;\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<AiAgentFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n  /** Emit when user searches for environments */\n  @Output() searchEnvironments = new EventEmitter<string>();\n  /** Emit when user scrolls to load more environments */\n  @Output() loadMoreEnvironments = new EventEmitter<void>();\n\n  aiAgentForm: FormGroup;\n  showAdvanced: boolean = false;\n  private hasLoadedInitialData: boolean = false;\n  // Advanced settings variables (can be provided from parent or initialized from form)\n  @Input() advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray;\n\n  constructor(private fb: FormBuilder) {\n    this.aiAgentForm = this.fb.group({\n      query: ['', Validators.required],\n      type: ['', Validators.required],\n      environments: ['', Validators.required],\n      metadata: [''],\n      description: [''],\n      continueOnError: [false],\n      disabled: [false],\n      retryCount: [''],\n      iframeLocator: [''],\n      otherLocators: ['']\n    });\n\n    this.advancedVariablesForm = this.fb.array([]);\n  }\n\n  ngOnInit(): void {\n    // Load initial data if provided (edit mode)\n    if (this.hasInitialData()) {\n      this.loadInitialData();\n      this.hasLoadedInitialData = true;\n    }\n\n    // Initialize advanced settings variables\n    if (this.advancedSettingsVariables && this.advancedSettingsVariables.length > 0) {\n      // When provided by parent, apply to form and build controls\n      this.applyAdvancedSettingsToForm();\n      this.buildAdvancedVariablesForm();\n    } else {\n      // Fallback: derive from current form values\n      this.initializeAdvancedSettings();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Check if any initial value inputs changed\n    const initialValueKeys = [\n      'initialQuery', 'initialType', 'initialDescription', 'initialEnvironments',\n      'initialMetadata', 'initialDisabled', 'initialContinueOnError',\n      'initialRetryCount', 'initialIframeLocator', 'initialOtherLocators', 'editMode'\n    ];\n    \n    const hasInitialValueChanges = initialValueKeys.some(key => \n      changes[key] && !changes[key].firstChange\n    );\n    \n    // Load initial data if it's set after component initialization or if initial values changed\n    if (hasInitialValueChanges || (this.hasInitialData() && !this.hasLoadedInitialData)) {\n      this.loadInitialData();\n      this.hasLoadedInitialData = true;\n      // Re-initialize advanced settings when initial values change (unless parent provided them)\n      if (!this.advancedSettingsVariables || this.advancedSettingsVariables.length === 0) {\n        this.initializeAdvancedSettings();\n      }\n    }\n\n    // When parent updates advancedSettingsVariables, rebuild form and sync to aiAgentForm\n    if (changes['advancedSettingsVariables'] && this.advancedSettingsVariables) {\n      if (this.advancedSettingsVariables.length > 0) {\n        this.applyAdvancedSettingsToForm();\n        this.buildAdvancedVariablesForm();\n      } else {\n        // If cleared, rebuild from form values\n        this.initializeAdvancedSettings();\n      }\n    }\n  }\n\n  private hasInitialData(): boolean {\n    return !!(this.initialQuery || this.initialType || this.initialDescription || \n              this.initialEnvironments || this.initialMetadata !== undefined ||\n              this.initialDisabled !== undefined || this.initialContinueOnError !== undefined ||\n              this.initialRetryCount !== undefined || this.initialIframeLocator || \n              this.initialOtherLocators);\n  }\n\n  private loadInitialData(): void {\n    console.log('loadInitialData: Loading AI-agent data', {\n      initialQuery: this.initialQuery,\n      initialType: this.initialType,\n      initialDescription: this.initialDescription,\n      initialEnvironments: this.initialEnvironments,\n      initialMetadata: this.initialMetadata,\n      initialDisabled: this.initialDisabled,\n      initialContinueOnError: this.initialContinueOnError,\n      initialRetryCount: this.initialRetryCount,\n      initialIframeLocator: this.initialIframeLocator,\n      initialOtherLocators: this.initialOtherLocators,\n      editMode: this.editMode\n    });\n\n    // Populate form with initial values\n    this.aiAgentForm.patchValue({\n      query: this.initialQuery || '',\n      type: this.initialType || '',\n      description: this.initialDescription || '',\n      environments: this.initialEnvironments || '',\n      metadata: this.initialMetadata || '',\n      disabled: this.initialDisabled !== undefined ? this.initialDisabled : false,\n      continueOnError: this.initialContinueOnError !== undefined ? this.initialContinueOnError : true,\n      retryCount: this.initialRetryCount !== undefined ? String(this.initialRetryCount) : '',\n      iframeLocator: this.initialIframeLocator || '',\n      otherLocators: this.initialOtherLocators || ''\n    });\n\n    // Expand advanced section if any advanced fields have values\n    if (this.initialDisabled !== undefined || this.initialContinueOnError !== undefined ||\n        this.initialRetryCount !== undefined || this.initialIframeLocator || \n        this.initialOtherLocators) {\n      this.showAdvanced = true;\n    }\n  }\n\n  /**\n   * Initialize advanced settings variables based on current form values when\n   * parent has not provided any advancedSettingsVariables.\n   */\n  private initializeAdvancedSettings(): void {\n    const formValue = this.aiAgentForm.value;\n\n    this.advancedSettingsVariables = [\n      {\n        name: 'isStepOptional',\n        label: \"Don't fail the test if this step fails.\",\n        value: formValue.continueOnError !== undefined ? formValue.continueOnError : true,\n        type: 'boolean'\n      },\n      {\n        name: 'shouldSkip',\n        label: 'Skip this step during execution.',\n        value: formValue.disabled !== undefined ? formValue.disabled : false,\n        type: 'boolean'\n      },\n      {\n        name: 'pwLocator',\n        label: 'Other Locators',\n        value: this.convertOtherLocatorsToArray(formValue.otherLocators),\n        type: 'str_list'\n      }\n    ];\n\n    this.buildAdvancedVariablesForm();\n  }\n\n  /**\n   * Apply incoming advancedSettingsVariables to the underlying form controls.\n   * Used when parent passes advanced variables (e.g. from StepBuilderService).\n   */\n  private applyAdvancedSettingsToForm(): void {\n    if (!this.advancedSettingsVariables || this.advancedSettingsVariables.length === 0) {\n      return;\n    }\n\n    this.advancedSettingsVariables.forEach(variable => {\n      if (variable.name === 'isStepOptional') {\n        this.aiAgentForm.get('continueOnError')?.setValue(!!variable.value);\n      } else if (variable.name === 'shouldSkip') {\n        this.aiAgentForm.get('disabled')?.setValue(!!variable.value);\n      } else if (variable.name === 'pwLocator') {\n        const valuesArray: string[] = Array.isArray(variable.value)\n          ? variable.value\n          : this.convertOtherLocatorsToArray(String(variable.value || ''));\n        const joined = valuesArray.join(', ');\n        this.aiAgentForm.get('otherLocators')?.setValue(joined);\n      }\n    });\n  }\n\n  /**\n   * Convert the otherLocators form value to a string array for str_list.\n   */\n  private convertOtherLocatorsToArray(value: string | string[]): string[] {\n    if (Array.isArray(value)) {\n      return value;\n    }\n    if (!value) {\n      return [];\n    }\n    // Split by comma and trim whitespace\n    return value\n      .split(',')\n      .map(item => item.trim())\n      .filter(item => item.length > 0);\n  }\n\n  /**\n   * Build reactive form for advanced settings variables (same pattern as action step).\n   */\n  private buildAdvancedVariablesForm(): void {\n    // Clear existing form array\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    this.advancedSettingsVariables.forEach(variable => {\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArray = this.fb.array(\n          valueArray.length > 0\n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')] // Start with one empty control\n        );\n        defaultValue = formArray;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n\n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  getTypeConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'type',\n      placeholder: 'Select type',\n      multiple: false,\n      searchable: false,\n      options: this.typeOptions\n    };\n  }\n\n  getEnvironmentConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'environments',\n      placeholder: 'Select environment',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      options: this.environmentOptions,\n      hasMore: this.hasMoreEnvironments,\n      isLoading: this.isLoadingEnvironments,\n      onSearch: (searchTerm: string) => {\n        this.searchEnvironments.emit(searchTerm);\n      },\n      onLoadMore: () => {\n        if (this.hasMoreEnvironments && !this.isLoadingEnvironments) {\n          this.loadMoreEnvironments.emit();\n        }\n      }\n    };\n  }\n\n  getRetryCountConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'retryCount',\n      placeholder: 'Dynamic search selector from library or manual',\n      multiple: false,\n      searchable: true,\n      options: this.retryCountOptions\n    };\n  }\n\n  getIframeLocatorConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'iframeLocator',\n      placeholder: 'Dynamic search selector from library or manual',\n      multiple: false,\n      searchable: true,\n      options: this.iframeLocatorOptions\n    };\n  }\n\n  getOtherLocatorsConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'otherLocators',\n      placeholder: 'Dynamic search selector from library or manual',\n      multiple: false,\n      searchable: true,\n      options: this.otherLocatorsOptions\n    };\n  }\n\n  toggleAdvanced(): void {\n    this.showAdvanced = !this.showAdvanced;\n  }\n\n  /**\n   * Handle advanced boolean variable changes and sync to form.\n   */\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    // Update corresponding form controls\n    if (variableName === 'isStepOptional') {\n      this.aiAgentForm.get('continueOnError')?.setValue(value);\n    } else if (variableName === 'shouldSkip') {\n      this.aiAgentForm.get('disabled')?.setValue(value);\n    }\n\n    // Keep advancedVariablesForm in sync\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  /**\n   * Handle advanced non-boolean value changes (e.g. pwLocator) and sync to form.\n   */\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n\n    if (variableName === 'pwLocator') {\n      // value is expected to be string[] from str_list\n      const valuesArray: string[] = Array.isArray(value) ? value : this.convertOtherLocatorsToArray(String(value || ''));\n      const joined = valuesArray.join(', ');\n      this.aiAgentForm.get('otherLocators')?.setValue(joined);\n    }\n\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      const formGroup = this.advancedVariablesForm.at(variableIndex);\n      const isStrList = variable && variable.type === 'str_list';\n      if (!isStrList) {\n        formGroup.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onCreateStep(): void {\n    if (this.aiAgentForm.valid) {\n      // Ensure advanced variable values are synced back to the form before emitting\n      this.advancedSettingsVariables.forEach(variable => {\n        if (variable.name === 'isStepOptional') {\n          this.aiAgentForm.get('continueOnError')?.setValue(!!variable.value);\n        } else if (variable.name === 'shouldSkip') {\n          this.aiAgentForm.get('disabled')?.setValue(!!variable.value);\n        } else if (variable.name === 'pwLocator') {\n          const valuesArray: string[] = Array.isArray(variable.value)\n            ? variable.value\n            : this.convertOtherLocatorsToArray(String(variable.value || ''));\n          const joined = valuesArray.join(', ');\n          this.aiAgentForm.get('otherLocators')?.setValue(joined);\n        }\n      });\n\n      const formValue = this.aiAgentForm.value;\n      const stepData: AiAgentFormData = {\n        query: formValue.query || '',\n        type: formValue.type || '',\n        environments: formValue.environments || '',\n        metadata: formValue.metadata || '',\n        description: formValue.description || '',\n        continueOnError: formValue.continueOnError || false,\n        disabled: formValue.disabled || false,\n        retryCount: formValue.retryCount || '',\n        iframeLocator: formValue.iframeLocator || '',\n        otherLocators: formValue.otherLocators || '',\n        advancedSettingsVariables: this.advancedSettingsVariables\n      };\n      this.createStep.emit(stepData);\n    }\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2 cqa-h-full cqa-overflow-y-auto\">\n  <!-- Header -->\n  <h2 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-black-100 cqa-mb-4\">\n    {{ editMode ? 'Edit AI Step' : 'Create AI Step' }}\n  </h2>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 \">\n    <!-- What should the agent achieve? -->\n    <div class=\"cqa-mb-6\">\n      <label class=\"cqa-text-[14px] cqa-font-medium cqa-text-gray-700 cqa-mb-1 cqa-block\">\n        What should the agent achieve?<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n      </label>\n      <cqa-custom-textarea\n       class=\"cqa-step-builder-ai-agent-textarea\"\n        [placeholder]=\"'What should the agent achieve?'\"\n        [value]=\"aiAgentForm.get('query')?.value\"\n        [fullWidth]=\"true\"\n        [rows]=\"4\"\n        [textareaInlineStyle]=\"'resize: vertical;max-height: 400px;'\"\n        (valueChange)=\"aiAgentForm.get('query')?.setValue($event)\">\n      </cqa-custom-textarea>\n      <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] \">\n        Tip: Use numbered steps or bullet points for complex tasks.\n      </p>\n    </div>\n    <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n    <!-- Type Dropdown -->\n    <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pr-2\">\n      <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Type<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n      </label>\n      <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"aiAgentForm\" [config]=\"getTypeConfig()\">\n      </cqa-dynamic-select>\n    </div>\n\n    <!-- Environments Dropdown -->\n    <div class=\"cqa-mb-6 cqa-w-1/2 cqa-pl-2\">\n      <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Environments<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n      </label>\n      <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getEnvironmentConfig()\">\n      </cqa-dynamic-select>\n    </div>\n\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-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Metadata\n      </label>\n      <cqa-custom-input\n        [placeholder]=\"'Text Input'\"\n        [value]=\"aiAgentForm.get('metadata')?.value\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"aiAgentForm.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-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Description\n      </label>\n      <cqa-custom-input\n        [placeholder]=\"'Text Input'\"\n        [value]=\"aiAgentForm.get('description')?.value\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"aiAgentForm.get('description')?.setValue($event)\">\n      </cqa-custom-input>\n    </div>\n    </div>\n\n\n    <!-- Advanced Section -->\n    <div class=\"cqa-mb-2\">\n      <button\n        type=\"button\"\n        class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-gray-700 cqa-py-2 cqa-border-b cqa-border-gray-200\"\n        (click)=\"toggleAdvanced()\">\n        <span class=\"cqa-text-[10px]\">Advanced</span>\n        <mat-icon class=\"cqa-text-lg cqa-transition-transform\" [class.cqa-rotate-180]=\"showAdvanced\">\n          expand_more\n        </mat-icon>\n      </button>\n      <div *ngIf=\"showAdvanced\" class=\" cqa-custom-form-fields cqa-flex cqa-flex-col\">\n        <cqa-advanced-variables-form \n          [advancedVariables]=\"advancedSettingsVariables\"\n          [advancedVariableForm]=\"advancedVariablesForm\"\n          (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n          (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n        </cqa-advanced-variables-form>\n        <!-- Continue on Error -->\n        <!-- <div class=\"cqa-mb-1\">\n          <div class=\"cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-text-[#737373]\">Continue on Error</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <mat-slide-toggle\n              class=\"cqa-step-builder-toggle-section\"\n              [checked]=\"aiAgentForm.get('continueOnError')?.value || false\"\n              (change)=\"aiAgentForm.get('continueOnError')?.setValue($event.checked)\"\n              color=\"primary\">\n            </mat-slide-toggle>\n            <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n              Don't fail the test if this step fails.\n            </label>\n          </div>\n        </div> -->\n\n        <!-- Disabled -->\n        <!-- <div class=\"cqa-mb-1\">\n          <div class=\"cqa-mb-2\">\n            <span class=\"cqa-text-[10px] cqa-font-medium cqa-text-[#737373]\">Disabled</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <mat-slide-toggle\n              class=\"cqa-step-builder-toggle-section\"\n              [checked]=\"aiAgentForm.get('disabled')?.value || false\"\n              (change)=\"aiAgentForm.get('disabled')?.setValue($event.checked)\"\n              color=\"primary\">\n            </mat-slide-toggle>\n            <label class=\"cqa-text-[12px] cqa-font-normal cqa-text-[#0A0A0A]\">\n              Skip this step during execution.\n            </label>\n          </div>\n        </div> -->\n\n        <!-- Retry Count -->\n        <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n          <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n            Retry Count\n          </label>\n          <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getRetryCountConfig()\">\n          </cqa-dynamic-select>\n        </div> -->\n\n        <!-- Iframe locator -->\n        <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n          <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n            Iframe locator\n          </label>\n          <cqa-dynamic-select class=\"cqa-text-[#414146]\" [form]=\"aiAgentForm\" [config]=\"getIframeLocatorConfig()\">\n          </cqa-dynamic-select>\n        </div> -->\n\n        <!-- Other Locators -->\n        <!-- <div class=\"cqa-flex cqa-flex-col cqa-mb-1\">\n          <label class=\"cqa-leading-[100%] cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1 cqa-block\">\n            Other Locators\n          </label>\n          <cqa-dynamic-select [form]=\"aiAgentForm\" [config]=\"getOtherLocatorsConfig()\">\n          </cqa-dynamic-select>\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 *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Create Step'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!aiAgentForm.valid\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n    <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, FormArray, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { ActionTemplate } from '../step-builder-action/step-builder-action.component';\nimport { CodeEditorMarker } from '../../code-editor/code-editor.component';\n\nexport interface CustomCodeFormData {\n  language: string;\n  code: string;\n  metadata?: string;\n  description?: string;\n  templateVariables?: any[];\n  advancedSettingsVariables?: any[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-custom-code',\n  templateUrl: './step-builder-custom-code.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderCustomCodeComponent implements OnInit, OnChanges {\n  /** Options for language dropdown */\n  @Input() languageOptions: SelectOption[] = [];\n\n  /** Template to get variables from */\n  @Input() template: ActionTemplate | null = null;\n  \n  /** Function to handle variable processing or custom logic. Can be passed from parent component. */\n  @Input() setTemplateVariables: (variables: ActionTemplate) => any = () => { return []};\n  /** Function to handle advanced settings variables. Can be passed from parent component. */\n  @Input() setAdvancedSettingsVariables: (template: ActionTemplate, testStep?: any) => any[] = () => { return []};\n  \n  /** Initial values for editing mode */\n  @Input() initialCode?: string;\n  @Input() initialLanguage?: string;\n  @Input() initialMetadata?: string;\n  @Input() initialDescription?: string;\n  @Input() isEditMode: boolean = false;\n\n  /** True while parent is creating the step (API in progress); show loader on Create Step button */\n  @Input() isCreatingStep: boolean = false;\n  \n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<CustomCodeFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  customCodeForm: FormGroup;\n  templateVariables: any[] = [];\n  variablesForm: FormGroup;\n  advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray;\n  advancedExpanded: boolean = true;\n  codeValidationErrors: CodeEditorMarker[] = [];\n\n  constructor(private fb: FormBuilder) {\n    this.customCodeForm = this.fb.group({\n      language: ['javascript', Validators.required],\n      code: ['', Validators.required],\n      metadata: [''],\n      description: ['']\n    });\n    this.variablesForm = this.fb.group({});\n    this.advancedVariablesForm = this.fb.array([]);\n  }\n\n  ngOnInit(): void {\n    // Initialize form with initial values if in edit mode\n    if (this.isEditMode) {\n      this.initializeFormWithValues();\n    }\n    \n    // Initialize template variables if template is provided\n    if (this.template) {\n      this.loadTemplateVariables();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['template'] && this.template) {\n      this.loadTemplateVariables();\n    }\n    \n    // Re-initialize form if initial values change\n    if ((changes['initialCode'] || changes['initialLanguage'] || changes['initialMetadata'] || \n         changes['initialDescription'] || changes['isEditMode']) && this.isEditMode) {\n      this.initializeFormWithValues();\n    }\n  }\n\n  private initializeFormWithValues(): void {\n    if (this.initialCode !== undefined) {\n      this.customCodeForm.patchValue({ code: this.initialCode });\n    }\n    if (this.initialLanguage) {\n      this.customCodeForm.patchValue({ language: this.initialLanguage });\n    }\n    if (this.initialMetadata !== undefined) {\n      this.customCodeForm.patchValue({ metadata: this.initialMetadata });\n    }\n    if (this.initialDescription !== undefined) {\n      this.customCodeForm.patchValue({ description: this.initialDescription });\n    }\n  }\n\n  private loadTemplateVariables(): void {\n    if (this.template && this.setTemplateVariables) {\n      this.templateVariables = this.setTemplateVariables(this.template);\n      this.buildVariablesForm();\n      \n      // Initialize advanced settings variables\n      if (this.setAdvancedSettingsVariables) {\n        this.advancedSettingsVariables = this.setAdvancedSettingsVariables(this.template);\n        this.buildAdvancedVariablesForm();\n      }\n    }\n  }\n\n  private buildVariablesForm(): void {\n    // Clear existing form controls\n    Object.keys(this.variablesForm.controls).forEach(key => {\n      this.variablesForm.removeControl(key);\n    });\n\n    // Add form controls for each variable\n    this.templateVariables.forEach(variable => {\n      // Handle boolean variables - use boolean value, others use string\n      const defaultValue = variable.type === 'boolean' \n        ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n        : (variable.value || '');\n      this.variablesForm.addControl(variable.name, new FormControl(defaultValue));\n    });\n  }\n\n  getSelectConfig(variable: any): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (variable.options || []).map((opt: string) => ({\n      id: opt,\n      value: opt,\n      name: opt,\n      label: opt\n    }));\n\n    return {\n      key: variable.name,\n      placeholder: `Select ${variable.label}`,\n      multiple: false,\n      searchable: false,\n      options: options,\n      onChange: (value: any) => {\n        this.onVariableValueChange(variable.name, value);\n      }\n    };\n  }\n\n  onVariableValueChange(variableName: string, value: any): void {\n    // Update the variable in templateVariables array\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form control\n    if (this.variablesForm.get(variableName)) {\n      this.variablesForm.get(variableName)?.setValue(value);\n    }\n  }\n\n  onVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in templateVariables array\n    const variable = this.templateVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form control\n    if (this.variablesForm.get(variableName)) {\n      this.variablesForm.get(variableName)?.setValue(value);\n    } else {\n      // Create form control if it doesn't exist\n      this.variablesForm.addControl(variableName, new FormControl(value));\n    }\n  }\n\n  getLanguageConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'language',\n      placeholder: '...',\n      multiple: false,\n      searchable: false,\n      options: this.languageOptions\n    };\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  private buildAdvancedVariablesForm(): void {\n    // Clear existing form array\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    this.advancedSettingsVariables.forEach(variable => {\n      // Handle different types\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        // For str_list, create a FormArray\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArrayValue = this.fb.array(\n          valueArray.length > 0 \n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')] // Start with one empty control\n        );\n        defaultValue = formArrayValue;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n      \n      // Create a FormGroup for each variable\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n      \n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      const formGroup = this.advancedVariablesForm.at(variableIndex) as FormGroup;\n      // For str_list, the FormArray is already managed inside AdvancedVariablesFormComponent,\n      // so we don't need to rebuild or update it here to avoid focus loss.\n      if (variable?.type !== 'str_list') {\n        formGroup?.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  toggleAdvanced(): void {\n    this.advancedExpanded = !this.advancedExpanded;\n  }\n\n  onCodeValueChange(value: string): void {\n    this.customCodeForm.get('code')?.setValue(value, { emitEvent: false });\n  }\n\n  onCodeValidationChange(errors: CodeEditorMarker[]): void {\n    this.codeValidationErrors = errors || [];\n  }\n\n  get hasCodeSyntaxErrors(): boolean {\n    return this.codeValidationErrors.length > 0;\n  }\n\n  /** Form validation errors for the code field (e.g. \"Code is required\") - passed to code editor [errors] */\n  get codeFieldErrors(): string[] {\n    const codeControl = this.customCodeForm.get('code');\n    if (!codeControl?.invalid || !codeControl?.touched) return [];\n    const err = codeControl.errors;\n    if (!err) return [];\n    if (err['required']) return ['Code is required'];\n    return [];\n  }\n\n  onCreateStep(): void {\n    if (this.customCodeForm.valid) {\n      // Sync advanced variables from form to array\n      this.advancedSettingsVariables.forEach((variable, index) => {\n        const formGroup = this.advancedVariablesForm.at(index) as FormGroup;\n        if (formGroup) {\n          const formValue = formGroup.get('value')?.value;\n          if (variable.type === 'str_list' && formValue instanceof FormArray) {\n            // Extract values from FormArray\n            variable.value = formValue.controls.map(control => control.value).filter((val: string) => val && val.trim() !== '');\n          } else {\n            variable.value = formValue;\n          }\n        }\n      });\n\n      const formValue = this.customCodeForm.value;\n      const stepData: CustomCodeFormData = {\n        language: formValue.language || '',\n        code: formValue.code || '',\n        metadata: formValue.metadata || '',\n        description: formValue.description || '',\n        templateVariables: this.templateVariables.length > 0 ? this.templateVariables : undefined,\n        advancedSettingsVariables: this.advancedSettingsVariables.length > 0 ? this.advancedSettingsVariables : undefined\n      };\n      this.createStep.emit(stepData);\n    }\n  }\n}\n\n","<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 *ngIf=\"!isCreatingStep\" 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 *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\n\nexport interface RecordStepFormData {\n  // Add any form data fields if needed in the future\n}\n\n@Component({\n  selector: 'cqa-step-builder-record-step',\n  templateUrl: './step-builder-record-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderRecordStepComponent implements OnInit {\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Emit when recording is cancelled */\n  @Output() cancelRecording = new EventEmitter<void>();\n\n  constructor() {}\n\n  ngOnInit(): void {\n    // Component initialization\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onCancelRecording(): void {\n    this.cancelRecording.emit();\n  }\n}\n\n","<div class=\"cqa-flex cqa-flex-col cqa-bg-white cqa-px-4 cqa-py-2\">\n  <!-- Header -->\n  <div class=\"cqa-mb-4\">\n    <p class=\"cqa-text-[12px] cqa-font-semibold cqa-m-0\">\n      Record steps with ContextAI Extension\n    </p>\n  </div>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n    <!-- Recording Mode Active Section -->\n    <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-text-center cqa-gap-3 cqa-pt-10\">\n      <!-- Video/Camera Icon -->\n      <div class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-[64px] cqa-h-[64px] cqa-rounded-full cqa-bg-[#FEE2E2] cqa-border cqa-border-[#E7000B]\">\n        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M21.333 17.3333L28.297 21.9759C28.3974 22.0428 28.514 22.0811 28.6345 22.0868C28.7549 22.0926 28.8747 22.0656 28.981 22.0087C29.0873 21.9517 29.1762 21.8671 29.2382 21.7636C29.3002 21.6602 29.3329 21.5419 29.333 21.4213V10.4933C29.333 10.376 29.3021 10.2607 29.2434 10.1592C29.1846 10.0577 29.1001 9.97344 28.9984 9.91501C28.8967 9.85658 28.7814 9.82602 28.6641 9.82642C28.5468 9.82682 28.4317 9.85816 28.3303 9.91728L21.333 13.9999\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M18.667 8H5.33366C3.8609 8 2.66699 9.19391 2.66699 10.6667V21.3333C2.66699 22.8061 3.8609 24 5.33366 24H18.667C20.1398 24 21.3337 22.8061 21.3337 21.3333V10.6667C21.3337 9.19391 20.1398 8 18.667 8Z\" stroke=\"#E7000B\" stroke-width=\"2.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </div>\n\n      <!-- Title -->\n      <h4 class=\"cqa-m-0 cqa-text-[16px] cqa-leading-[24px] cqa-font-[600] cqa-text-[#0A0A0A]\">\n        Recording Mode Active\n      </h4>\n\n      <!-- Subtitle -->\n      <p class=\"cqa-m-0 cqa-text-[12px] cqa-leading-[18px] cqa-text-[#6B7280]\">\n        Click on any element in the browser to capture it\n      </p>\n    </div>\n  </div>\n\n  <!-- Action Buttons -->\n  <div class=\"cqa-flex cqa-justify-center cqa-w-full cqa-gap-2 cqa-mt-auto cqa-pt-4 cqa-border-t cqa-border-gray-200\">\n    <cqa-button \n      class=\"cqa-px-4 cqa-rounded-[10px]\" \n      variant=\"outlined\" \n      text=\"Cancel Recording\" \n      [customClass]=\"'cqa-flex-1'\"\n      (clicked)=\"onCancelRecording()\">\n    </cqa-button>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\n\nexport interface DocumentMapper {\n  key: string;\n  valueType: string;\n  value: string;\n}\n\nexport interface DocumentGenerationTemplateFormData {\n  documentType: string;\n  templateSource: string;\n  outputVariable: string;\n  templateOption: 'use-existing' | 'upload' | 'create-new';\n  mappings: DocumentMapper[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-document-generation-template-step',\n  templateUrl: './step-builder-document-generation-template-step.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderDocumentGenerationTemplateStepComponent implements OnInit, OnChanges {\n  /** Options for document type dropdown */\n  @Input() documentTypeOptions: SelectOption[] = [];\n\n  /** Options for template source dropdown */\n  @Input() templateSourceOptions: SelectOption[] = [];\n\n  /** Options for value type dropdown */\n  @Input() valueTypeOptions: SelectOption[] = [\n    { id: 'variable', value: 'variable', name: 'Variable', label: 'Variable' },\n    { id: 'constant', value: 'constant', name: 'Constant', label: 'Constant' }\n  ];\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<DocumentGenerationTemplateFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  documentForm: FormGroup;\n  selectedTemplateOption: 'use-existing' | 'upload' | 'create-new' = 'use-existing';\n\n  // Cached configs to avoid recreating on every change detection\n  documentTypeConfig: DynamicSelectFieldConfig;\n  templateSourceConfig: DynamicSelectFieldConfig;\n  valueTypeConfig: DynamicSelectFieldConfig;\n  templateSegments = [\n    { label: 'Use Existing Template', value: 'use-existing' },\n    { label: 'Upload Template', value: 'upload' },\n    { label: 'Create New', value: 'create-new' }\n  ];\n\n  constructor(private fb: FormBuilder) {\n    this.documentForm = this.fb.group({\n      documentType: ['', Validators.required],\n      templateSource: [''],\n      templateName: [''],\n      templateDescription: [''],\n      outputVariable: ['', Validators.required],\n      mappings: this.fb.array([])\n    });\n\n    // Initialize cached configs\n    this.documentTypeConfig = {\n      key: 'documentType',\n      placeholder: 'Select document type',\n      multiple: false,\n      searchable: false,\n      options: []\n    };\n\n    this.templateSourceConfig = {\n      key: 'templateSource',\n      placeholder: 'Select Template dropdown',\n      multiple: false,\n      searchable: false,\n      options: []\n    };\n\n    this.valueTypeConfig = {\n      key: 'valueType',\n      placeholder: 'Select value type',\n      multiple: false,\n      searchable: false,\n      options: this.valueTypeOptions\n    };\n  }\n\n  ngOnInit(): void {\n    // Update configs with input options\n    this.updateConfigs();\n    // Add initial mapping row\n    this.addMapping();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Update configs when inputs change\n    if (changes['documentTypeOptions'] || changes['templateSourceOptions'] || changes['valueTypeOptions']) {\n      this.updateConfigs();\n    }\n  }\n\n  get mappingsFormArray(): FormArray {\n    return this.documentForm.get('mappings') as FormArray;\n  }\n\n  getMappingGroup(index: number): FormGroup {\n    return this.mappingsFormArray.at(index) as FormGroup;\n  }\n\n  private updateConfigs(): void {\n    this.documentTypeConfig = {\n      ...this.documentTypeConfig,\n      options: this.documentTypeOptions\n    };\n    this.templateSourceConfig = {\n      ...this.templateSourceConfig,\n      options: this.templateSourceOptions\n    };\n    this.valueTypeConfig = {\n      ...this.valueTypeConfig,\n      options: this.valueTypeOptions\n    };\n  }\n\n\n  addMapping(): void {\n    const mappingGroup = this.fb.group({\n      key: ['', Validators.required],\n      valueType: ['variable', Validators.required],\n      value: ['', Validators.required]\n    });\n    this.mappingsFormArray.push(mappingGroup);\n  }\n\n\n  removeMapping(index: number): void {\n    if (this.mappingsFormArray.length > 1) {\n      this.mappingsFormArray.removeAt(index);\n    }\n  }\n\n\n  selectTemplateOption(option: 'use-existing' | 'upload' | 'create-new' | number): void {\n    if (typeof option === 'number') {\n      const options: ('use-existing' | 'upload' | 'create-new')[] = ['use-existing', 'upload', 'create-new'];\n      this.selectedTemplateOption = options[option] || 'use-existing';\n    } else {\n      this.selectedTemplateOption = option;\n    }\n  }\n\n  onTemplateOptionChange(value: string): void {\n    this.selectTemplateOption(value as 'use-existing' | 'upload' | 'create-new');\n  }\n\n  onTemplateIndexChange(index: number): void {\n    this.selectTemplateOption(index);\n  }\n\n  onFileSelected(file: File): void {\n    // Handle file selection - you can store the file or emit it\n    console.log('File selected:', file.name);\n    // Optionally update the form or emit the file\n  }\n\n  onCreateTemplate(): void {\n    const templateName = this.documentForm.get('templateName')?.value;\n    const templateDescription = this.documentForm.get('templateDescription')?.value;\n    \n    if (templateName && templateDescription) {\n      // Handle template creation\n      console.log('Creating template:', { templateName, templateDescription });\n      // You can emit an event or handle the creation logic here\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  onCreateStep(): void {\n    if (this.documentForm.valid) {\n      const formValue = this.documentForm.value;\n      const mappings: DocumentMapper[] = this.mappingsFormArray.controls.map(control => ({\n        key: control.get('key')?.value || '',\n        valueType: control.get('valueType')?.value || '',\n        value: control.get('value')?.value || ''\n      }));\n\n      const stepData: DocumentGenerationTemplateFormData = {\n        documentType: formValue.documentType || '',\n        templateSource: formValue.templateSource || '',\n        outputVariable: formValue.outputVariable || '',\n        templateOption: this.selectedTemplateOption,\n        mappings: mappings\n      };\n      this.createStep.emit(stepData);\n    }\n  }\n}\n\n","<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    Document Generation Template Step\n  </h2>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-max-h-[500px] cqa-overflow-y-auto\">\n    <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields\">\n    <!-- Document Type -->\n    <div class=\"cqa-mb-3 cqa-w-1/2 cqa-custom-form-fields\">\n      <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Document Type <span class=\"cqa-text-red-500\">*</span>\n      </label>\n      <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"documentForm\" [config]=\"documentTypeConfig\">\n      </cqa-dynamic-select>\n      <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] cqa-mt-1\">\n        Choose the file format you want to generate.\n      </p>\n    </div>\n    <!-- Output Variable -->\n    <div class=\"cqa-w-1/2 cqa-pl-2\">\n        <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n          Output Variable <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <cqa-custom-input\n          [placeholder]=\"'Input'\"\n          [value]=\"documentForm.get('outputVariable')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('outputVariable')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-[12px] cqa-text-[#0A0A0A] cqa-mt-1\">\n          Stores the generated file so it can be used in later steps\n        </p>\n      </div>\n\n    </div>\n      <!-- Template Source -->\n      <div class=\"cqa-mb-3 cqa-w-full cqa-custom-form-fields\">\n        <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-3\">\n            <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n                Template Source\n              </label>\n            <div>\n                <cqa-segment-control\n                    [segments]=\"templateSegments\"\n                    [value]=\"selectedTemplateOption\"\n                    (valueChange)=\"onTemplateOptionChange($event)\">\n                </cqa-segment-control>\n            </div>        \n        </div>\n        \n        <!-- Use Existing Template -->\n        <div *ngIf=\"selectedTemplateOption === 'use-existing'\">\n          <cqa-dynamic-select class=\"cqa-w-full\" [form]=\"documentForm\" [config]=\"templateSourceConfig\">\n          </cqa-dynamic-select>\n        </div>\n        \n        <!-- Upload Template -->\n        <div *ngIf=\"selectedTemplateOption === 'upload'\">\n          <cqa-file-upload\n            accept=\".pdf,.doc,.docx,.txt\"\n            acceptedFileTypes=\"PDF, DOC, or TXT files\"\n            (fileSelected)=\"onFileSelected($event)\">\n          </cqa-file-upload>\n        </div>\n        \n        <!-- Create New Template -->\n        <div *ngIf=\"selectedTemplateOption === 'create-new'\">\n          <div class=\"cqa-flex cqa-flex-wrap cqa-custom-form-fields cqa-mb-3\">\n            <!-- Template Name -->\n            <div class=\"cqa-mb-2 cqa-w-1/2 cqa-pr-2\">\n              <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n                Template Name <span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-custom-input\n                [placeholder]=\"'PDF Document (.pdf)'\"\n                [value]=\"documentForm.get('templateName')?.value\"\n                [fullWidth]=\"true\"\n                (valueChange)=\"documentForm.get('templateName')?.setValue($event)\">\n              </cqa-custom-input>\n            </div>\n            \n            <!-- Template Description -->\n            <div class=\"cqa-w-1/2 cqa-pl-2\">\n              <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n                Template Description <span class=\"cqa-text-red-500\">*</span>\n              </label>\n              <cqa-custom-input\n                [placeholder]=\"'PDF Document (.pdf)'\"\n                [value]=\"documentForm.get('templateDescription')?.value\"\n                [fullWidth]=\"true\"\n                (valueChange)=\"documentForm.get('templateDescription')?.setValue($event)\">\n              </cqa-custom-input>\n            </div>\n          </div>\n          \n          <!-- Create Template Button -->\n          <div class=\"cqa-flex cqa-justify-end\">\n            <cqa-button\n              variant=\"filled\"\n              text=\"Create Template\"\n              [customClass]=\"'cqa-px-4 cqa-py-2'\"\n              (clicked)=\"onCreateTemplate()\">\n            </cqa-button>\n          </div>\n        </div>\n      </div>\n\n    <!-- Document Mapper Section -->\n    <div class=\"cqa-mb-3\">\n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-mb-2\">\n        <div>\n          <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n            Document Mapper\n          </label>\n          <p class=\"cqa-text-[12px] cqa-text-[#64748B] cqa-m-0\">\n            Map placeholders to dynamic values.\n          </p>\n        </div>\n        <a href=\"#\" class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#111827] cqa-text-[10px] cqa-no-underline hover:cqa-underline\">\n            <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <g clip-path=\"url(#clip0_1712_21527)\">\n                <path d=\"M8.49984 14.6666C12.4119 14.6666 15.5832 11.6818 15.5832 7.99992C15.5832 4.31802 12.4119 1.33325 8.49984 1.33325C4.58782 1.33325 1.4165 4.31802 1.4165 7.99992C1.4165 11.6818 4.58782 14.6666 8.49984 14.6666Z\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6.43896 5.99989C6.6055 5.55434 6.9342 5.17863 7.36685 4.93931C7.7995 4.7 8.30818 4.61252 8.8028 4.69237C9.29741 4.77222 9.74604 5.01424 10.0692 5.37558C10.3924 5.73691 10.5693 6.19424 10.5685 6.66656C10.5685 7.99989 8.44355 8.66656 8.44355 8.66656\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 11.3333H8.50966\" stroke=\"#3F43EE\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                </g>\n                <defs>\n                <clipPath id=\"clip0_1712_21527\">\n                <rect width=\"17\" height=\"16\" fill=\"white\"/>\n                </clipPath>\n                </defs>\n                </svg>\n          \n          Need help?\n        </a>\n      </div>\n\n      <!-- Mapper Table -->\n      <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n        <table class=\"cqa-w-full\" style=\"table-layout: fixed;\">\n          <thead>\n            <tr class=\"cqa-bg-[#D8D9FC4D] cqa-border-b cqa-border-gray-200\">\n              <th class=\"cqa-w-[40px] cqa-p-2\">\n                <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n                  <input type=\"checkbox\" class=\"cqa-w-4 cqa-h-4\">\n                </div>\n              </th>\n              <th class=\"cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">Key</th>\n              <th class=\"cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">Value Type</th>\n              <th class=\"cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-[#161617] cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">Value</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr *ngFor=\"let mapping of mappingsFormArray.controls; let i = index\" class=\"cqa-border-b cqa-border-gray-200 cqa-last:border-b-0\">\n              <!-- Checkbox -->\n              <td class=\"cqa-w-[40px] cqa-p-2\">\n                <div class=\"cqa-flex cqa-items-center cqa-justify-center\">\n                  <input type=\"checkbox\" class=\"cqa-w-4 cqa-h-4\">\n                </div>\n              </td>\n\n              <!-- Key Input -->\n              <td class=\"cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">\n                <cqa-custom-input\n                  inputInlineStyle=\"height: 36px;color: #0A0A0A; font-size: 14px; border-radius: 5px;\"\n                  [placeholder]=\"'Key'\"\n                  [value]=\"getMappingGroup(i).get('key')?.value\"\n                  [fullWidth]=\"true\"\n                  (valueChange)=\"getMappingGroup(i).get('key')?.setValue($event)\">\n                </cqa-custom-input>\n              </td>\n\n              <!-- Value Type Dropdown -->\n              <td class=\"cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">\n                <cqa-dynamic-select \n                  inputInlineStyle=\"height: 36px;color: #0A0A0A; font-size: 14px; box-shadow: none !important;\n                   border-radius: 5px !important;\"\n                  [form]=\"getMappingGroup(i)\" \n                  [config]=\"valueTypeConfig\">\n                </cqa-dynamic-select>\n              </td>\n\n              <!-- Value Input with Delete Button -->\n              <td class=\"cqa-p-2\" style=\"width: calc((100% - 40px) / 3);\">\n                <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n                  <cqa-custom-input\n                    inputInlineStyle=\"height: 36px;color: #0A0A0A; font-size: 14px; border-radius: 5px;\"\n                    [placeholder]=\"'Value'\"\n                    [value]=\"getMappingGroup(i).get('value')?.value\"\n                    [fullWidth]=\"true\"\n                    (valueChange)=\"getMappingGroup(i).get('value')?.setValue($event)\">\n                  </cqa-custom-input>\n                  <button\n                    type=\"button\"\n                    (click)=\"removeMapping(i)\"\n                    class=\"cqa-text-red-500 hover:cqa-text-red-700 cqa-p-1 cqa-flex-shrink-0\"\n                    [disabled]=\"mappingsFormArray.length === 1\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M10.6668 6V12.6667H5.3335V6H10.6668ZM9.66683 2H6.3335L5.66683 2.66667H3.3335V4H12.6668V2.66667H10.3335L9.66683 2ZM12.0002 4.66667H4.00016V12.6667C4.00016 13.4 4.60016 14 5.3335 14H10.6668C11.4002 14 12.0002 13.4 12.0002 12.6667V4.66667Z\" fill=\"#F9BFBF\"/>\n</svg>\n                  </button>\n                </div>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n\n      <!-- Add Mapping Button -->\n      <div class=\"cqa-flex cqa-justify-end cqa-mt-2\">\n        <button\n          type=\"button\"\n          (click)=\"addMapping()\"\n          class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1 hover:cqa-underline\">\n          <span>+</span>\n          <span>Add Mapping</span>\n        </button>\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=\"Create Step\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n  </div>\n</div>\n\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, FormArray, FormControl, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\n\nexport type TemplateSourceType = 'existing' | 'upload' | 'createNew';\n\nexport interface DocumentMappingValueEntry {\n  valueType: string;\n  value: string;\n}\n\nexport interface DocumentMappingRow {\n  key: string;\n  values: DocumentMappingValueEntry[];\n  enabled?: boolean;\n}\n\nexport interface DocumentFormData {\n  documentType: string;\n  outputVariable: string;\n  fileName?: string;\n  seprator?: string;\n  delimeter?: string;\n  fileFormatHeader?: string;\n  /** Description for the document generation step */\n  description?: string;\n  templateSource: TemplateSourceType;\n  templateId?: string;\n  /** Uploaded template file when templateSource is 'upload' */\n  uploadedFile?: File;\n  /** Template name when templateSource is 'createNew' */\n  templateName?: string;\n  /** Template description when templateSource is 'createNew' */\n  templateDescription?: string;\n  mappings: DocumentMappingRow[];\n  advancedSettingsVariables?: any[];\n}\n\n@Component({\n  selector: 'cqa-step-builder-document',\n  templateUrl: './step-builder-document.component.html'\n})\nexport class StepBuilderDocumentComponent implements OnInit, OnChanges {\n  /** Options for document type dropdown */\n  @Input() documentTypeOptions: SelectOption[] = [];\n\n  /** Options for template dropdown (when \"Use Existing Template\" is selected) */\n  @Input() templateOptions: SelectOption[] = [];\n\n  /** Options for value type dropdown in document mapper */\n  @Input() valueTypeOptions: SelectOption[] = [\n    { id: 'variable', value: 'variable', name: 'Variable', label: 'Variable' },\n    { id: 'static', value: 'static', name: 'Static', label: 'Static' },\n    { id: 'expression', value: 'expression', name: 'Expression', label: 'Expression' },\n    { id: 'reference', value: 'reference', name: 'Reference', label: 'Reference' }\n  ];\n\n  /** Options for delimeter type dropdown (shown when documentType is 'csv') */\n  @Input() delimeterTypeOptions: SelectOption[] = [\n    { id: ',', value: ',', name: 'Comma (,)', label: 'Comma (,)' },\n    { id: ';', value: ';', name: 'Semicolon (;)', label: 'Semicolon (;)' },\n    { id: '\\\\t', value: '\\\\t', name: 'Tab (\\\\t)', label: 'Tab (\\\\t)' },\n    { id: '|', value: '|', name: 'Pipe (|)', label: 'Pipe (|)' }\n  ];\n\n  /** Function to handle advanced settings variables. Can be passed from parent component. */\n  @Input() setAdvancedSettingsVariables: (template?: any, testStep?: any) => any[] = () => { return []};\n  \n  /** Template for advanced settings (optional) */\n  @Input() template?: any;\n  \n  /** Test step for advanced settings (optional) */\n  @Input() testStep?: any;\n\n  /** Optional URL for \"Need help?\" link in Document Mapper section */\n  @Input() mapperHelpUrl: string = '';\n\n  /** Tooltip text when hovering over \"Need help?\" (same as custom-edit-step) */\n  @Input() mapperHelpTooltipText: string = 'Not sure what to do? Click to go to our detailed step creation documentation';\n\n  /** Initial document type for edit mode */\n  @Input() initialDocumentType?: string;\n\n  /** Initial output variable for edit mode */\n  @Input() initialOutputVariable?: string;\n\n  /** Initial template source for edit mode */\n  @Input() initialTemplateSource?: TemplateSourceType;\n\n  /** Initial template ID for edit mode */\n  @Input() initialTemplateId?: string;\n\n  /** Initial template name for edit mode (when templateSource is 'createNew') */\n  @Input() initialTemplateName?: string;\n\n  /** Initial template description for edit mode (when templateSource is 'createNew') */\n  @Input() initialTemplateDescription?: string;\n\n  /** Initial mappings for edit mode */\n  @Input() initialMappings?: DocumentMappingRow[];\n\n  /** Initial file name for edit mode */\n  @Input() initialFileName?: string;\n\n  /** Initial seprator for edit mode */\n  @Input() initialSeprator?: string;\n\n  /** Initial delimeter for edit mode */\n  @Input() initialDelimeter?: string;\n\n  /** Initial file format header for edit mode */\n  @Input() initialFileFormatHeader?: string;\n\n  /** Initial description for edit mode */\n  @Input() initialDescription?: string;\n\n  /** Whether in edit mode */\n  @Input() editMode?: boolean;\n\n  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */\n  @Input() isCreatingStep: boolean = false;\n\n  /** Whether the help tooltip is visible */\n  showHelpTooltip = false;\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<DocumentFormData>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Emit when \"Create Template\" is clicked (Create New flow). Host can create template via API. */\n  @Output() createTemplate = new EventEmitter<{ templateName: string; templateDescription: string }>();\n\n  documentForm: FormGroup;\n  selectedTemplateSource: TemplateSourceType = 'existing';\n  /** Uploaded file when Template Source is \"Upload Template\" */\n  uploadedFile: File | null = null;\n  /** Visual state for drag-and-drop zone */\n  isDragOver = false;\n  advancedSettingsVariables: any[] = [];\n  advancedVariablesForm: FormArray;\n  advancedExpanded: boolean = true;\n\n  constructor(private fb: FormBuilder) {\n    this.documentForm = this.fb.group({\n      documentType: ['', Validators.required],\n      outputVariable: ['', Validators.required],\n      fileName: ['', Validators.required],\n      seprator: [''],\n      delimeter: [''],\n      fileFormatHeader: [''],\n      description: [''],\n      templateSource: ['existing'],\n      templateId: [null],\n      templateName: [''],\n      templateDescription: [''],\n      mappings: this.fb.array([])\n    });\n    this.advancedVariablesForm = this.fb.array([]);\n  }\n\n  ngOnInit(): void {\n    this.selectedTemplateSource = this.initialTemplateSource || this.documentForm.get('templateSource')?.value || 'existing';\n    this.initializeFormWithInitialValues();\n    \n    // Initialize advanced settings variables\n    if (this.setAdvancedSettingsVariables) {\n      this.advancedSettingsVariables = this.setAdvancedSettingsVariables(this.template, this.testStep);\n      this.buildAdvancedVariablesForm();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['documentTypeOptions'] || changes['templateOptions'] || changes['valueTypeOptions'] || changes['delimeterTypeOptions']) {\n      // Configs are built from inputs in getters; no need to rebuild form\n    }\n    if (changes['initialDocumentType'] || changes['initialOutputVariable'] || changes['initialTemplateSource'] || \n        changes['initialTemplateId'] || changes['initialMappings'] || changes['initialTemplateName'] || \n        changes['initialTemplateDescription'] || changes['initialFileName'] || changes['initialSeprator'] || \n        changes['initialDelimeter'] || changes['initialFileFormatHeader'] || changes['initialDescription']) {\n      this.initializeFormWithInitialValues();\n    }\n    if (changes['template'] || changes['testStep'] || changes['setAdvancedSettingsVariables']) {\n      // Re-initialize advanced settings variables if template or testStep changes\n      if (this.setAdvancedSettingsVariables) {\n        this.advancedSettingsVariables = this.setAdvancedSettingsVariables(this.template, this.testStep);\n        this.buildAdvancedVariablesForm();\n      }\n    }\n  }\n\n  private initializeFormWithInitialValues(): void {\n    // Clear existing mappings\n    while (this.mappingsFormArray.length !== 0) {\n      this.mappingsFormArray.removeAt(0);\n    }\n\n    // Set initial values if provided\n    if (this.initialDocumentType) {\n      this.documentForm.patchValue({ documentType: this.initialDocumentType });\n    }\n    if (this.initialOutputVariable) {\n      this.documentForm.patchValue({ outputVariable: this.initialOutputVariable });\n    }\n    if (this.initialFileName !== undefined) {\n      this.documentForm.patchValue({ fileName: this.initialFileName });\n    }\n    if (this.initialSeprator !== undefined) {\n      this.documentForm.patchValue({ seprator: this.initialSeprator });\n    }\n    if (this.initialDelimeter !== undefined) {\n      this.documentForm.patchValue({ delimeter: this.initialDelimeter });\n    }\n    if (this.initialFileFormatHeader !== undefined) {\n      this.documentForm.patchValue({ fileFormatHeader: this.initialFileFormatHeader });\n    }\n    if (this.initialDescription !== undefined) {\n      this.documentForm.patchValue({ description: this.initialDescription });\n    }\n    if (this.initialTemplateSource) {\n      this.selectedTemplateSource = this.initialTemplateSource;\n      this.documentForm.patchValue({ templateSource: this.initialTemplateSource });\n    }\n    if (this.initialTemplateId) {\n      this.documentForm.patchValue({ templateId: this.initialTemplateId });\n    }\n    if (this.initialTemplateName) {\n      this.documentForm.patchValue({ templateName: this.initialTemplateName });\n    }\n    if (this.initialTemplateDescription) {\n      this.documentForm.patchValue({ templateDescription: this.initialTemplateDescription });\n    }\n\n    // Load initial mappings\n    if (this.initialMappings && this.initialMappings.length > 0) {\n      this.initialMappings.forEach(mapping => {\n        const legacy = mapping as any;\n        const seedEntries: DocumentMappingValueEntry[] =\n          Array.isArray(mapping.values) && mapping.values.length > 0\n            ? mapping.values\n            : (legacy.valueType !== undefined || legacy.value !== undefined)\n              ? [{ valueType: legacy.valueType || 'variable', value: legacy.value || '' }]\n              : [{ valueType: 'variable', value: '' }];\n\n        const valuesArray = this.fb.array(\n          seedEntries.map(entry => this.buildValueEntry(entry))\n        );\n\n        const mappingGroup = this.fb.group({\n          key: [mapping.key || '', Validators.required],\n          enabled: [mapping.enabled ?? false],\n          values: valuesArray\n        });\n        this.mappingsFormArray.push(mappingGroup);\n      });\n    } else {\n      // Add one empty mapping if no initial mappings\n      if (this.mappingsFormArray.length === 0) {\n        this.addMapping();\n      }\n    }\n  }\n\n  get mappingsFormArray(): FormArray {\n    return this.documentForm.get('mappings') as FormArray;\n  }\n\n  getDocumentTypeConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'documentType',\n      placeholder: 'Select document type',\n      multiple: false,\n      searchable: false,\n      options: this.documentTypeOptions\n    };\n  }\n\n  getTemplateSelectConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'templateId',\n      placeholder: 'Select Template dropdown',\n      multiple: false,\n      searchable: false,\n      options: this.templateOptions\n    };\n  }\n\n  getValueTypeConfig(rowIndex: number, valueIndex: number): DynamicSelectFieldConfig {\n    return {\n      key: 'valueType',\n      placeholder: 'Value Type',\n      multiple: false,\n      searchable: false,\n      options: this.valueTypeOptions,\n      onChange: () => {}\n    };\n  }\n\n  getDelimeterConfig(): DynamicSelectFieldConfig {\n    return {\n      key: 'delimeter',\n      placeholder: 'Select Delimeter',\n      multiple: false,\n      searchable: false,\n      options: this.delimeterTypeOptions\n    };\n  }\n\n  get isTxtSelected(): boolean {\n    return this.documentForm.get('documentType')?.value === 'txt';\n  }\n\n  get isCsvSelected(): boolean {\n    return this.documentForm.get('documentType')?.value === 'csv';\n  }\n\n  onTemplateSourceChange(value: string): void {\n    this.selectedTemplateSource = value as TemplateSourceType;\n    this.documentForm.patchValue({ templateSource: this.selectedTemplateSource });\n    if (this.selectedTemplateSource !== 'upload') {\n      this.uploadedFile = null;\n    }\n  }\n\n  onCreateTemplate(): void {\n    const name = this.documentForm.get('templateName')?.value?.trim() ?? '';\n    const description = this.documentForm.get('templateDescription')?.value?.trim() ?? '';\n    this.createTemplate.emit({ templateName: name, templateDescription: description });\n  }\n\n  onFileSelected(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const file = input.files?.[0];\n    if (file) {\n      this.uploadedFile = file;\n    }\n    input.value = '';\n  }\n\n  onDragOver(event: DragEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragOver = true;\n  }\n\n  onDragLeave(event: DragEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragOver = false;\n  }\n\n  onDrop(event: DragEvent): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.isDragOver = false;\n    const file = event.dataTransfer?.files?.[0];\n    if (file && this.isAcceptedTemplateFile(file)) {\n      this.uploadedFile = file;\n    }\n  }\n\n  private isAcceptedTemplateFile(file: File): boolean {\n    const accepted = ['.pdf', '.doc', '.docx', '.txt'];\n    const name = file.name.toLowerCase();\n    return accepted.some(ext => name.endsWith(ext));\n  }\n\n  addMapping(): void {\n    const mappingGroup = this.fb.group({\n      key: ['', Validators.required],\n      enabled: [false],\n      values: this.fb.array([this.buildValueEntry()])\n    });\n    this.mappingsFormArray.push(mappingGroup);\n  }\n\n  removeMapping(index: number): void {\n    this.mappingsFormArray.removeAt(index);\n  }\n\n  getMappingFormGroup(index: number): FormGroup {\n    return this.mappingsFormArray.at(index) as FormGroup;\n  }\n\n  private buildValueEntry(seed?: Partial<DocumentMappingValueEntry>): FormGroup {\n    return this.fb.group({\n      valueType: [seed?.valueType ?? 'variable', Validators.required],\n      value: [seed?.value ?? '', Validators.required]\n    });\n  }\n\n  getValuesFormArray(rowIndex: number): FormArray {\n    return this.getMappingFormGroup(rowIndex).get('values') as FormArray;\n  }\n\n  getValueFormGroup(rowIndex: number, valueIndex: number): FormGroup {\n    return this.getValuesFormArray(rowIndex).at(valueIndex) as FormGroup;\n  }\n\n  addValueEntry(rowIndex: number): void {\n    this.getValuesFormArray(rowIndex).push(this.buildValueEntry());\n  }\n\n  removeValueEntry(rowIndex: number, valueIndex: number): void {\n    const arr = this.getValuesFormArray(rowIndex);\n    if (arr.length > 1) {\n      arr.removeAt(valueIndex);\n    }\n    // The last entry can't be removed via the per-value × button —\n    // users delete the whole key via the row trash icon instead.\n  }\n\n  /** True when every mapping row has enabled === true */\n  get allMappingsSelected(): boolean {\n    const len = this.mappingsFormArray.length;\n    if (len === 0) return false;\n    for (let i = 0; i < len; i++) {\n      if (!this.getMappingFormGroup(i).get('enabled')?.value) return false;\n    }\n    return true;\n  }\n\n  /** True when at least one mapping row has enabled === true (for header indeterminate) */\n  get someMappingsSelected(): boolean {\n    for (let i = 0; i < this.mappingsFormArray.length; i++) {\n      if (this.getMappingFormGroup(i).get('enabled')?.value) return true;\n    }\n    return false;\n  }\n\n  onSelectAllMappings(checked: boolean): void {\n    this.mappingsFormArray.controls.forEach((_, i) => {\n      this.getMappingFormGroup(i).get('enabled')?.setValue(checked);\n    });\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  isFormValid(): boolean {\n    // Check if main form is valid (documentType, outputVariable, and fileName are required)\n    const documentType = this.documentForm.get('documentType')?.value;\n    const outputVariable = this.documentForm.get('outputVariable')?.value;\n    const fileName = this.documentForm.get('fileName')?.value;\n\n    if (!documentType || !outputVariable || !fileName) {\n      return false;\n    }\n\n    // Check template source specific requirements\n    // if (this.selectedTemplateSource === 'existing') {\n    //   const templateId = this.documentForm.get('templateId')?.value;\n    //   if (!templateId) {\n    //     return false;\n    //   }\n    // } else if (this.selectedTemplateSource === 'upload') {\n    //   if (!this.uploadedFile) {\n    //     return false;\n    //   }\n    // } else if (this.selectedTemplateSource === 'createNew') {\n    //   const name = this.documentForm.get('templateName')?.value?.trim();\n    //   const desc = this.documentForm.get('templateDescription')?.value?.trim();\n    //   if (!name || !desc) {\n    //     return false;\n    //   }\n    // }\n\n    return true;\n  }\n\n  private buildAdvancedVariablesForm(): void {\n    // Clear existing form array\n    while (this.advancedVariablesForm.length !== 0) {\n      this.advancedVariablesForm.removeAt(0);\n    }\n\n    // Add form groups for each advanced variable\n    this.advancedSettingsVariables.forEach(variable => {\n      // Handle different types\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        // For str_list, create a FormArray\n        const valueArray = Array.isArray(variable.value) ? variable.value : [];\n        const formArrayValue = this.fb.array(\n          valueArray.length > 0 \n            ? valueArray.map((item: string) => this.fb.control(item))\n            : [this.fb.control('')] // Start with one empty control\n        );\n        defaultValue = formArrayValue;\n      } else if (variable.type === 'boolean' || typeof variable.value === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n      \n      // Create a FormGroup for each variable\n      const variableGroup = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n      \n      this.advancedVariablesForm.push(variableGroup);\n    });\n  }\n\n  onAdvancedVariableBooleanChange(variableName: string, value: boolean): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      this.advancedVariablesForm.at(variableIndex).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  onAdvancedVariableValueChange(variableName: string, value: any): void {\n    // Update the variable in advancedSettingsVariables array\n    const variable = this.advancedSettingsVariables.find(v => v.name === variableName);\n    if (variable) {\n      variable.value = value;\n    }\n    // Also update form array\n    const variableIndex = this.advancedVariablesForm.controls.findIndex(\n      control => control.get('name')?.value === variableName\n    );\n    if (variableIndex !== -1) {\n      const formGroup = this.advancedVariablesForm.at(variableIndex) as FormGroup;\n      // For str_list, the FormArray is already managed inside AdvancedVariablesFormComponent,\n      // so we don't need to rebuild or update it here to avoid focus loss.\n      if (variable?.type !== 'str_list') {\n        formGroup?.get('value')?.setValue(value, { emitEvent: false });\n      }\n    }\n  }\n\n  toggleAdvanced(): void {\n    this.advancedExpanded = !this.advancedExpanded;\n  }\n\n  onCreateStep(): void {\n    if (!this.isFormValid()) {\n      return;\n    }\n    \n    // Sync advanced variables from form to array\n    this.advancedSettingsVariables.forEach((variable, index) => {\n      const formGroup = this.advancedVariablesForm.at(index) as FormGroup;\n      if (formGroup) {\n        const formValue = formGroup.get('value')?.value;\n        if (variable.type === 'str_list' && formValue instanceof FormArray) {\n          // Extract values from FormArray\n          variable.value = formValue.controls.map(control => control.value).filter((val: string) => val && val.trim() !== '');\n        } else {\n          variable.value = formValue;\n        }\n      }\n    });\n    \n    const formValue = this.documentForm.value;\n    const stepData: DocumentFormData = {\n      documentType: formValue.documentType,\n      outputVariable: formValue.outputVariable,\n      fileName: formValue.fileName || undefined,\n      seprator: formValue.seprator || undefined,\n      delimeter: formValue.delimeter || undefined,\n      fileFormatHeader: formValue.fileFormatHeader || undefined,\n      description: formValue.description?.trim() || undefined,\n      templateSource: this.selectedTemplateSource,\n      templateId: formValue.templateId || undefined,\n      ...(this.selectedTemplateSource === 'upload' && this.uploadedFile && { uploadedFile: this.uploadedFile }),\n      ...(this.selectedTemplateSource === 'createNew' && {\n        templateName: (formValue.templateName ?? '').trim(),\n        templateDescription: (formValue.templateDescription ?? '').trim()\n      }),\n      mappings: (formValue.mappings || []).map((m: any) => ({\n        key: m.key || '',\n        enabled: m.enabled ?? false,\n        values: (m.values || []).map((v: any) => ({\n          valueType: v.valueType || 'variable',\n          value: v.value || ''\n        }))\n      })),\n      advancedSettingsVariables: this.advancedSettingsVariables.length > 0 ? this.advancedSettingsVariables : undefined\n    };\n    this.createStep.emit(stepData);\n  }\n\n  onMapperHelpClick(event: Event): void {\n    if (this.mapperHelpUrl) {\n      event.preventDefault();\n      window.open(this.mapperHelpUrl, '_blank');\n    }\n  }\n}\n","<div class=\"cqa-ui-root cqa-block cqa-w-full cqa-min-w-0 cqa-step-builder-document\" style=\"height: 100%;width: 100%;\">\n  <div\n    class=\"cqa-flex cqa-flex-col cqa-w-full cqa-min-w-0 cqa-h-full cqa-bg-white cqa-border cqa-box-border cqa-max-w-full cqa-opacity-100 cqa-h-full cqa-w-full\">\n    <!-- Content area: padding 16px, gap 12px between sections (no flex-1 to avoid gap above footer) -->\n    <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto cqa-p-4 cqa-gap-3\">\n  <!-- Header: Document Generation Template Step (left-aligned, Inter 600 12px line-height 100%) -->\n  <h2\n    class=\"cqa-text-[12px] cqa-leading-[100%] cqa-font-semibold cqa-text-[#111827] cqa-m-0 cqa-text-left cqa-flex-shrink-0 cqa-align-middle\">\n    Document Generation Template Step\n  </h2>\n\n    <!-- File Name and Document Type Row -->\n    <div class=\"cqa-flex cqa-flex-wrap cqa-flex-shrink-0 cqa-gap-14\">\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          File Name <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <cqa-custom-input\n          placeholder=\"File Name\"\n          [value]=\"documentForm.get('fileName')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('fileName')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          The name of the file to be generated\n        </p>\n      </div>\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)] \">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          Document Type <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <div class=\"document-type-select\">\n          <cqa-dynamic-select\n            [form]=\"documentForm\"\n            [config]=\"getDocumentTypeConfig()\">\n          </cqa-dynamic-select>\n        </div>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          Choose the file format you want to generate.\n        </p>\n      </div>\n    </div>\n\n    <!-- Output Variable and Conditional Fields Row -->\n    <div class=\"cqa-flex cqa-flex-wrap cqa-flex-shrink-0 cqa-gap-14\">\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          Output Variable <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <cqa-custom-input\n          placeholder=\"Input\"\n          [value]=\"documentForm.get('outputVariable')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('outputVariable')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          Stores the generated file so it can be used in later steps.\n        </p>\n      </div>\n      <!-- Seprator (shown when documentType is 'txt') -->\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\" *ngIf=\"isTxtSelected\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          Seprator\n        </label>\n        <cqa-custom-input\n          placeholder=\"Seprator\"\n          [value]=\"documentForm.get('seprator')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('seprator')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          The seprator to be used to separate the values in the generated file\n        </p>\n      </div>\n      <!-- Delimeter Type (shown when documentType is 'csv') -->\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\" *ngIf=\"isCsvSelected\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          Delimeter Type\n        </label>\n        <div class=\"document-type-select\">\n          <cqa-dynamic-select\n            [form]=\"documentForm\"\n            [config]=\"getDelimeterConfig()\">\n          </cqa-dynamic-select>\n        </div>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          Choose the delimeter type for the CSV file\n        </p>\n      </div>\n    </div>\n\n    <!-- File Format Header (shown when documentType is 'txt') -->\n    <div class=\"cqa-flex cqa-flex-wrap cqa-flex-shrink-0 cqa-gap-14\" *ngIf=\"isTxtSelected\">\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          File Format Header\n        </label>\n        <cqa-custom-input\n          placeholder=\"File Format Header\"\n          [value]=\"documentForm.get('fileFormatHeader')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('fileFormatHeader')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          Header text for the generated txt file\n        </p>\n      </div>\n    </div>\n\n    <!-- Template Source Section: label left, tabs right on same row -->\n    <!-- <div class=\"cqa-flex cqa-flex-col cqa-flex-shrink-0 cqa-gap-3\">\n      \n      <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-4\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0 cqa-flex-shrink-0\">\n          Template Source\n        </label>\n        <cqa-segment-control\n          class=\"cqa-flex-shrink-0\"\n          [segments]=\"[\n            { label: 'Use Existing Template', value: 'existing' },\n            { label: 'Upload Template', value: 'upload' },\n            { label: 'Create New', value: 'createNew' }\n          ]\"\n          [value]=\"selectedTemplateSource\"\n          (valueChange)=\"onTemplateSourceChange($event)\">\n        </cqa-segment-control>\n      </div>\n      <div class=\"document-type-select\" *ngIf=\"selectedTemplateSource === 'existing'\">\n        <cqa-dynamic-select\n          [form]=\"documentForm\"\n          [config]=\"getTemplateSelectConfig()\">\n        </cqa-dynamic-select>\n      </div>\n\n      <div *ngIf=\"selectedTemplateSource === 'upload'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-m-0\">\n          Attachment <span class=\"cqa-text-red-500\">*</span>\n        </label>\n        <input\n          #fileInput\n          type=\"file\"\n          accept=\".pdf,.doc,.docx,.txt\"\n          class=\"cqa-hidden\"\n          (change)=\"onFileSelected($event)\">\n        <div\n          class=\"cqa-w-full cqa-min-h-[140px] cqa-rounded cqa-border-2 cqa-border-dashed cqa-border-gray-300 cqa-bg-white cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-p-6 cqa-cursor-pointer cqa-transition-colors\"\n          [class.cqa-ring-2]=\"isDragOver\"\n          [class.cqa-ring-[#3F43EE]]=\"isDragOver\"\n          [class.cqa-ring-inset]=\"isDragOver\"\n          (click)=\"fileInput.click()\"\n          (dragover)=\"onDragOver($event)\"\n          (dragleave)=\"onDragLeave($event)\"\n          (drop)=\"onDrop($event)\"\n          role=\"button\"\n          tabindex=\"0\"\n          (keydown.enter)=\"fileInput.click()\"\n          (keydown.space)=\"fileInput.click()\"\n          aria-label=\"Upload template file\">\n          <svg class=\"cqa-w-8 cqa-h-8  cqa-font-bold\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n            <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/>\n            <polyline points=\"17 8 12 3 7 8\"/>\n            <line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"/>\n          </svg>\n          <p class=\"cqa-text-base cqa-text-[#374151] cqa-m-0 cqa-text-center cqa-font-bold\">\n            Drag and drop files here or <span class=\"cqa-text-[#3F43EE] cqa-font-medium hover:cqa-underline\">browse</span>\n          </p>\n          <p class=\"cqa-text-sm cqa-text-[#6B7280] cqa-m-0\">\n            PDF, DOC, or TXT files\n          </p>\n        </div>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-m-0\">\n          Choose the file format you want to generate.\n        </p>\n      </div>\n      <div *ngIf=\"selectedTemplateSource === 'createNew'\" class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n        <div class=\"cqa-flex cqa-flex-wrap cqa-gap-3\">\n          <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(50%-6px)]\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n              Template Name <span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <cqa-custom-input\n              placeholder=\"PDF Document (.pdf)\"\n              [value]=\"documentForm.get('templateName')?.value\"\n              [fullWidth]=\"true\"\n              (valueChange)=\"documentForm.get('templateName')?.setValue($event)\">\n            </cqa-custom-input>\n          </div>\n          <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(50%-6px)]\">\n            <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n              Template Description <span class=\"cqa-text-red-500\">*</span>\n            </label>\n            <cqa-custom-input\n              placeholder=\"PDF Document (.pdf)\"\n              [value]=\"documentForm.get('templateDescription')?.value\"\n              [fullWidth]=\"true\"\n              (valueChange)=\"documentForm.get('templateDescription')?.setValue($event)\">\n            </cqa-custom-input>\n          </div>\n        </div>\n        <div class=\"cqa-flex cqa-justify-end\">\n          <cqa-button\n            variant=\"filled\"\n            btnSize=\"lg\"\n            text=\"Create Template\"\n            [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE] cqa-bg-[#3F43EE]'\"\n            (clicked)=\"onCreateTemplate()\">\n          </cqa-button>\n        </div>\n      </div>\n    </div> -->\n\n    <!-- Document Mapper Section: title + subtitle left, Need help? right (CQA table below) -->\n    <div class=\"cqa-flex cqa-flex-col cqa-flex-shrink-0 cqa-gap-3\">\n      <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-4\">\n        <div class=\"cqa-flex cqa-flex-col cqa-min-w-0\">\n          <h3 class=\"cqa-text-base cqa-font-semibold cqa-text-[#111827] cqa-text-[14px] cqa-m-0 cqa-leading-tight\">\n            Document Mapper\n          </h3>\n          <p class=\"cqa-text-[12px] cqa-text-[#6B7280] cqa-m-0 cqa-mt-0.5\">\n            Map placeholders to dynamic values.\n          </p>\n        </div>\n        <div class=\"cqa-relative cqa-inline-flex cqa-flex-shrink-0\"\n             (mouseenter)=\"showHelpTooltip = true\"\n             (mouseleave)=\"showHelpTooltip = false\">\n          <a *ngIf=\"mapperHelpUrl\"\n             href=\"#\"\n             (click)=\"onMapperHelpClick($event)\"\n             class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[21px] cqa-no-underline cqa-cursor-pointer\">\n            <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n              <g clip-path=\"url(#help-icon-clip-doc)\">\n                <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </g>\n              <defs>\n                <clipPath id=\"help-icon-clip-doc\">\n                  <rect width=\"17\" height=\"16\" fill=\"white\"/>\n                </clipPath>\n              </defs>\n            </svg>\n            Need help ?\n          </a>\n          <span *ngIf=\"!mapperHelpUrl\" class=\"cqa-flex cqa-items-center cqa-gap-1.5 cqa-font-[500] cqa-text-[10px] cqa-cursor-default cqa-text-[#374151]\">\n            <svg width=\"17\" height=\"16\" viewBox=\"0 0 17 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"cqa-flex-shrink-0 cqa-text-[#3F43EE]\" aria-hidden=\"true\">\n              <g clip-path=\"url(#help-icon-clip-doc-nolink)\">\n                <path d=\"M8.50033 14.6663C12.4123 14.6663 15.5837 11.6816 15.5837 7.99967C15.5837 4.31778 12.4123 1.33301 8.50033 1.33301C4.58831 1.33301 1.41699 4.31778 1.41699 7.99967C1.41699 11.6816 4.58831 14.6663 8.50033 14.6663Z\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M6.43848 6.00038C6.60501 5.55483 6.93371 5.17912 7.36636 4.9398C7.79901 4.70049 8.30769 4.61301 8.80231 4.69285C9.29693 4.7727 9.74556 5.01473 10.0687 5.37607C10.3919 5.7374 10.5688 6.19473 10.5681 6.66705C10.5681 8.00038 8.44306 8.66705 8.44306 8.66705\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n                <path d=\"M8.5 11.333H8.50966\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n              </g>\n              <defs>\n                <clipPath id=\"help-icon-clip-doc-nolink\">\n                  <rect width=\"17\" height=\"16\" fill=\"white\"/>\n                </clipPath>\n              </defs>\n            </svg>\n            Need help ?\n          </span>\n          <div *ngIf=\"showHelpTooltip\" class=\"cqa-absolute cqa-pointer-events-none cqa-z-[100] cqa-top-[-24px] cqa-left-[-203px]\" role=\"tooltip\">\n            <div class=\"cqa-text-white cqa-text-center cqa-whitespace-nowrap cqa-w-[306px] cqa-min-h-5 cqa-rounded-[6px] cqa-opacity-100 cqa-px-2 cqa-py-1 cqa-bg-[#0A0A0A] cqa-leading-5 cqa-text-[8px]\">\n              {{ mapperHelpTooltipText }}\n            </div>\n          </div>\n        </div>\n      </div>\n      <!-- Table or empty state: same container, header always visible -->\n      <div class=\"cqa-rounded-lg cqa-overflow-hidden cqa-bg-white cqa-shadow-sm cqa-border cqa-border-solid cqa-border-gray-200\">\n        <table class=\"cqa-w-full\">\n          <thead>\n            <tr class=\"cqa-items-center cqa-bg-[#D8D9FC4D]\">\n              <th class=\"cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-text-left cqa-w-[40px] cqa-border-b cqa-border-gray-200\">\n                <mat-checkbox [checked]=\"allMappingsSelected\"\n                             [indeterminate]=\"someMappingsSelected && !allMappingsSelected\"\n                             (change)=\"onSelectAllMappings($event.checked)\"\n                             color=\"primary\"\n                             aria-label=\"Select all mappings\">\n                </mat-checkbox>\n              </th>\n              <th class=\"cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-text-left cqa-border-b cqa-border-gray-200\">Key (column name)</th>\n              <th class=\"cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-text-left cqa-border-b cqa-border-gray-200 cqa-w-[120px]\">Value Type</th>\n              <th class=\"cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-text-left cqa-border-b cqa-border-gray-200\">Value</th>\n              <th class=\"cqa-py-[13.25px] cqa-px-[10.5px] cqa-text-xs cqa-font-semibold cqa-text-[#374151] cqa-text-left cqa-border-b cqa-border-gray-200 cqa-w-[48px]\">\n                <span class=\"cqa-sr-only\">Delete row</span>\n              </th>\n            </tr>\n          </thead>\n          <tbody class=\"cqa-w-full\">\n            <!-- Empty state when no mappings -->\n            <tr *ngIf=\"mappingsFormArray.length === 0\">\n              <td colspan=\"5\" class=\"cqa-p-0 cqa-align-middle cqa-border-b cqa-border-gray-200\">\n                <div class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-py-12 cqa-px-4 cqa-bg-white\">\n                  <p class=\"cqa-text-sm cqa-text-[#6B7280] cqa-m-0 cqa-mb-4\">Start mapping placeholders to values.</p>\n                  <button\n                    type=\"button\"\n                    class=\"cqa-rounded-lg cqa-px-4 cqa-py-2.5 cqa-text-sm cqa-font-semibold cqa-text-white cqa-bg-[#4F46E5] cqa-border-none cqa-cursor-pointer hover:cqa-opacity-90 cqa-transition-opacity\"\n                    (click)=\"addMapping()\">\n                    Add first mapping\n                  </button>\n                </div>\n              </td>\n            </tr>\n            <!-- Data rows when there are mappings -->\n            <tr *ngFor=\"let mapping of mappingsFormArray.controls; let i = index\"\n                class=\"cqa-bg-white hover:cqa-bg-[#F9FAFB]\">\n              <td class=\"cqa-px-[10.5px] cqa-py-[11px] cqa-align-top cqa-border-b cqa-border-gray-200\">\n                <mat-checkbox [checked]=\"getMappingFormGroup(i).get('enabled')?.value\"\n                             (change)=\"getMappingFormGroup(i).get('enabled')?.setValue($event.checked)\"\n                             color=\"primary\"\n                             aria-label=\"Enable mapping\">\n                </mat-checkbox>\n              </td>\n              <td class=\"cqa-px-[10.5px] cqa-py-[11px] cqa-align-top cqa-border-b cqa-border-gray-200 \">\n                <cqa-custom-input\n                  [placeholder]=\"'Key'\"\n                  [value]=\"getMappingFormGroup(i).get('key')?.value\"\n                  [fullWidth]=\"true\"\n                  (valueChange)=\"getMappingFormGroup(i).get('key')?.setValue($event)\">\n                </cqa-custom-input>\n              </td>\n              <td colspan=\"2\" class=\"cqa-px-[10.5px] cqa-py-[11px] cqa-align-top cqa-border-b cqa-border-gray-200\">\n                <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n                  <div *ngFor=\"let entry of getValuesFormArray(i).controls; let j = index\"\n                       class=\"cqa-flex cqa-items-center cqa-gap-2\">\n                    <div class=\"document-type-select cqa-w-[120px] cqa-flex-shrink-0\">\n                      <cqa-dynamic-select\n                        [form]=\"getValueFormGroup(i, j)\"\n                        [config]=\"getValueTypeConfig(i, j)\">\n                      </cqa-dynamic-select>\n                    </div>\n                    <div class=\"cqa-flex-1 cqa-min-w-0\">\n                      <cqa-custom-input\n                        [placeholder]=\"'Value'\"\n                        [value]=\"getValueFormGroup(i, j).get('value')?.value\"\n                        [fullWidth]=\"true\"\n                        (valueChange)=\"getValueFormGroup(i, j).get('value')?.setValue($event)\">\n                      </cqa-custom-input>\n                    </div>\n                    <button\n                      type=\"button\"\n                      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-7 cqa-h-7 cqa-rounded cqa-text-[#9CA3AF] cqa-transition-colors cqa-border-none cqa-bg-transparent cqa-cursor-pointer hover:cqa-text-[#374151] disabled:cqa-opacity-30 disabled:cqa-cursor-not-allowed\"\n                      [disabled]=\"getValuesFormArray(i).length <= 1\"\n                      (click)=\"removeValueEntry(i, j)\"\n                      [attr.aria-label]=\"'Remove value'\"\n                      [attr.title]=\"getValuesFormArray(i).length <= 1 ? 'A key needs at least one value' : 'Remove this value'\">\n                      <mat-icon class=\"cqa-text-[18px] cqa-w-[18px] cqa-h-[18px] cqa-leading-[18px]\">close</mat-icon>\n                    </button>\n                  </div>\n                  <button\n                    type=\"button\"\n                    class=\"cqa-self-start cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0 cqa-mt-1\"\n                    (click)=\"addValueEntry(i)\"\n                    [attr.aria-label]=\"'Add value'\">\n                    <mat-icon class=\"cqa-text-[16px] cqa-w-4 cqa-h-4 cqa-leading-4\">add</mat-icon>\n                    Add value\n                  </button>\n                </div>\n              </td>\n              <td class=\"cqa-px-[10.5px] cqa-py-[11px] cqa-align-top cqa-border-b cqa-border-gray-200\">\n                <button\n                  type=\"button\"\n                  class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded cqa-text-[#E57373] cqa-transition-colors cqa-border-none cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80\"\n                  (click)=\"removeMapping(i)\"\n                  [attr.aria-label]=\"'Delete key row'\"\n                  title=\"Delete this key and all its values\">\n                  <svg class=\"cqa-w-5 cqa-h-5 cqa-flex-shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                    <path d=\"M3 6h18M8 6V4a2 2 0 012-2h4a2 2 0 012 2v2m3 0v14a2 2 0 01-2 2H7a2 2 0 01-2-2V6h14z\"/>\n                    <path d=\"M10 11v6M14 11v6\"/>\n                  </svg>\n                </button>\n              </td>\n            </tr>\n          </tbody>\n          \n        </table>\n        <div class=\"cqa-flex cqa-justify-end\" *ngIf=\"mappingsFormArray.length > 0\">\n          <button\n            type=\"button\"\n            class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-3\"\n            (click)=\"addMapping()\">\n            + Add Mapping\n          </button>\n        </div>\n      </div>\n      <!-- <div class=\"cqa-flex cqa-justify-end\" *ngIf=\"mappingsFormArray.length > 0\">\n        <button\n          type=\"button\"\n          class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-bg-transparent cqa-border-none cqa-cursor-pointer cqa-p-0\"\n          (click)=\"addMapping()\">\n          + Add Mapping\n        </button>\n      </div> -->\n    </div>\n\n    <!-- Description (after Document Mapper) -->\n    <div class=\"cqa-flex cqa-flex-wrap cqa-flex-shrink-0 cqa-gap-14\">\n      <div class=\"cqa-flex-1 cqa-min-w-0 cqa-min-w-[calc(45%-6px)]\">\n        <label class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151] cqa-mb-1.5 cqa-block\">\n          Description\n        </label>\n        <cqa-custom-input\n          placeholder=\"Description\"\n          [value]=\"documentForm.get('description')?.value\"\n          [fullWidth]=\"true\"\n          (valueChange)=\"documentForm.get('description')?.setValue($event)\">\n        </cqa-custom-input>\n        <p class=\"cqa-text-xs cqa-text-[#0A0A0A] cqa-mt-1 cqa-m-0\">\n          Optional description for this document generation step\n        </p>\n      </div>\n    </div>\n  </div>\n\n  <!-- Advanced Settings Variables Form -->\n  <div *ngIf=\"advancedSettingsVariables.length > 0\" class=\"cqa-flex-shrink-0 cqa-px-4 cqa-pb-3\">\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  \n\n  <!-- Divider above footer -->\n  <div class=\"cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Action Buttons -->\n  <div class=\"cqa-flex cqa-items-stretch cqa-w-full cqa-p-4 cqa-gap-3\">\n    <div class=\"cqa-flex-1 cqa-min-w-0\">\n      <cqa-button\n        variant=\"outlined\"\n        btnSize=\"lg\"\n        text=\"Cancel\"\n        [fullWidth]=\"true\"\n        [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"\n        (clicked)=\"onCancel()\">\n      </cqa-button>\n    </div>\n    <div class=\"cqa-flex-1 cqa-min-w-0\">\n      <cqa-button *ngIf=\"!isCreatingStep\"\n        variant=\"filled\"\n        btnSize=\"lg\"\n        [text]=\"editMode ? 'Update Step' : 'Create Step'\"\n        [fullWidth]=\"true\"\n        [disabled]=\"!isFormValid()\"\n        [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\"\n        (clicked)=\"onCreateStep()\">\n      </cqa-button>\n      <div *ngIf=\"isCreatingStep\" class=\"cqa-min-h-[38px] cqa-rounded-[8px]\">\n        <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n          [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n          variant=\"info\" size=\"medium\"></cqa-badge>\n      </div>\n    </div>\n  </div>\n</div>\n","/**\n * Detail side panel scroll styles as a string for use in component `styles` arrays.\n * Using a string constant avoids Angular's style compiler receiving non-string values\n * (e.g. from styleUrls resolution in Storybook), which causes \"input.match is not a function\".\n */\nexport const DETAIL_SIDE_PANEL_SCROLL_STYLES = `\n.detail-side-panel-scroll {\n  overflow-y: auto !important;\n  overflow-x: hidden !important;\n  min-height: 0 !important;\n  -webkit-overflow-scrolling: touch;\n}\n`;\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  HostBinding,\n} from '@angular/core';\nimport { DetailSidePanelTab } from './detail-side-panel.models';\nimport { DETAIL_SIDE_PANEL_SCROLL_STYLES } from './detail-side-panel.styles';\n\nexport type { DetailSidePanelTab, DetailSidePanelMetadataItem, DetailSidePanelConfigSection } from './detail-side-panel.models';\n\n@Component({\n  selector: 'cqa-detail-side-panel',\n  templateUrl: './detail-side-panel.component.html',\n  styles: [DETAIL_SIDE_PANEL_SCROLL_STYLES],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class:\n      'cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-flex-shrink-0 cqa-flex-grow-0 cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]',\n    style: 'transition: width 0.3s ease-in-out',\n  },\n})\nexport class DetailSidePanelComponent {\n  /** Tabs - each tab has a side panel icon button; tabs and buttons are 1:1. Host defines tabs and content. */\n  @Input() tabs: DetailSidePanelTab[] = [\n    { label: 'Test Case', value: 'test-case', icon: 'description' },\n    { label: 'Data Library', value: 'data-library', icon: 'folder' },\n    { label: 'Variables', value: 'variables', icon: 'code' },\n  ];\n\n  /** Currently active tab value */\n  @Input() activeTab = 'test-case';\n\n  /** Whether to show the close button in the side menu */\n  @Input() showCloseButton = false;\n\n  /** Whether the panel is expanded (affects expand button icon and panel width) */\n  @Input() expanded = true;\n\n  /** Panel width when expanded (e.g. '480px', '25%') */\n  @Input() expandedWidth = '380px';\n\n  /** Panel width when collapsed (e.g. '56px' - fits icon bar + back button) */\n  @Input() collapsedWidth = '56px';\n\n  @HostBinding('style.width') get hostWidth(): string {\n    return this.expanded ? this.expandedWidth : this.collapsedWidth;\n  }\n\n  @HostBinding('style.min-width') get hostMinWidth(): string {\n    return this.expanded ? this.expandedWidth : this.collapsedWidth;\n  }\n\n  @HostBinding('style.max-width') get hostMaxWidth(): string {\n    return this.expanded ? this.expandedWidth : this.collapsedWidth;\n  }\n\n  @HostBinding('style.overflow') hostOverflow = 'hidden';\n\n  /** Tooltip for expand button when panel is collapsed */\n  @Input() expandTooltip = 'Expand';\n\n  /** Tooltip for expand button when panel is expanded (collapse) */\n  @Input() collapseTooltip = 'Collapse';\n\n  /** Tooltip for close button */\n  @Input() closeTooltip = 'Close';\n\n  @Output() back = new EventEmitter<void>();\n  @Output() tabChange = new EventEmitter<string>();\n  @Output() expandToggle = new EventEmitter<void>();\n  @Output() close = new EventEmitter<void>();\n\n  trackByTabValue(_i: number, tab: DetailSidePanelTab): string {\n    return tab.value;\n  }\n\n  onBack(): void {\n    this.back.emit();\n  }\n\n  onTabClick(tab: DetailSidePanelTab): void {\n    if (!this.expanded) {\n      this.expandToggle.emit();\n    }\n    if (tab.value !== this.activeTab) {\n      this.tabChange.emit(tab.value);\n    }\n  }\n\n  onExpandToggle(): void {\n    this.expandToggle.emit();\n  }\n\n  onClose(): void {\n    this.close.emit();\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-min-w-0 cqa-bg-white\">\n  <!-- Main content: Side menu + Scrollable content -->\n  <div\n    class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden\"\n    [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n    style=\"transition: grid-template-columns 0.3s ease-in-out\">\n    <!-- Left vertical icon menu -->\n    <div\n      class=\"cqa-flex cqa-flex-col cqa-items-center cqa-gap-2 cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#F5F5F5] cqa-flex-shrink-0 cqa-text-[#0A0A0A]\"\n      style=\"box-shadow: 1px 4px 12px 1px rgba(0, 0, 0, 0.05);\">\n      <!-- Expand / Collapse button (always visible) -->\n      <button\n        type=\"button\"\n        [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n        (click)=\"onExpandToggle()\">\n        <!-- Chevron left when expanded, right when collapsed -->\n        <svg\n          *ngIf=\"expanded\"\n          class=\"cqa-w-4 cqa-h-4\"\n          width=\"16\"\n          height=\"16\"\n          viewBox=\"0 0 16 16\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M10 12L6 8L10 4\"\n            stroke=\"currentColor\"\n            stroke-width=\"1.33333\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n        <svg\n          *ngIf=\"!expanded\"\n          class=\"cqa-w-4 cqa-h-4\"\n          width=\"16\"\n          height=\"16\"\n          viewBox=\"0 0 16 16\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\">\n          <path\n            d=\"M6 4L10 8L6 12\"\n            stroke=\"currentColor\"\n            stroke-width=\"1.33333\"\n            stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </button>\n      <!-- Close button -->\n      <button\n        *ngIf=\"showCloseButton\"\n        type=\"button\"\n        [matTooltip]=\"closeTooltip\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n        (click)=\"onClose()\">\n        <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5 cqa-leading-[19px]\">close</mat-icon>\n      </button>\n      <!-- Tab buttons (1:1 with tabs) -->\n      <button\n        *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n        type=\"button\"\n        [matTooltip]=\"tab.label\"\n        [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n        [class.cqa-text-white]=\"activeTab === tab.value\"\n        [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n        (click)=\"onTabClick(tab)\">\n        <!-- Custom SVGs for specific tabs to match Figma icons, centered -->\n        <ng-container *ngIf=\"tab.icon === 'description'; else codeTabIcon\">\n          <svg\n            class=\"cqa-w-5 cqa-h-5\"\n            width=\"20\"\n            height=\"20\"\n            viewBox=\"0 0 20 20\"\n            fill=\"none\"\n            xmlns=\"http://www.w3.org/2000/svg\">\n            <path\n              d=\"M12.5002 1.66663H5.00016C4.55814 1.66663 4.13421 1.84222 3.82165 2.15478C3.50909 2.46734 3.3335 2.89127 3.3335 3.33329V16.6666C3.3335 17.1087 3.50909 17.5326 3.82165 17.8451C4.13421 18.1577 4.55814 18.3333 5.00016 18.3333H15.0002C15.4422 18.3333 15.8661 18.1577 16.1787 17.8451C16.4912 17.5326 16.6668 17.1087 16.6668 16.6666V5.83329L12.5002 1.66663Z\"\n              stroke=\"currentColor\"\n              stroke-width=\"1.66667\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path\n              d=\"M11.6665 1.66663V4.99996C11.6665 5.44199 11.8421 5.86591 12.1547 6.17847C12.4672 6.49103 12.8911 6.66663 13.3332 6.66663H16.6665\"\n              stroke=\"currentColor\"\n              stroke-width=\"1.66667\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path\n              d=\"M8.33317 7.5H6.6665\"\n              stroke=\"currentColor\"\n              stroke-width=\"1.66667\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path\n              d=\"M13.3332 10.8334H6.6665\"\n              stroke=\"currentColor\"\n              stroke-width=\"1.66667\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n            <path\n              d=\"M13.3332 14.1666H6.6665\"\n              stroke=\"currentColor\"\n              stroke-width=\"1.66667\"\n              stroke-linecap=\"round\"\n              stroke-linejoin=\"round\" />\n          </svg>\n        </ng-container>\n        <ng-template #codeTabIcon>\n          <ng-container *ngIf=\"tab.icon === 'code'; else defaultTabIcon\">\n            <svg\n              class=\"cqa-w-5 cqa-h-5\"\n              width=\"20\"\n              height=\"20\"\n              viewBox=\"0 0 20 20\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M4.99984 11.6666L6.24984 9.24996C6.38573 8.98007 6.59244 8.75221 6.84785 8.59075C7.10325 8.42928 7.39775 8.34029 7.69984 8.33329H16.6665M16.6665 8.33329C16.9211 8.33284 17.1724 8.39074 17.4012 8.50253C17.63 8.61432 17.8301 8.77703 17.9861 8.97818C18.1422 9.17933 18.2502 9.41357 18.3017 9.66292C18.3531 9.91227 18.3468 10.1701 18.2832 10.4166L16.9998 15.4166C16.907 15.7763 16.6967 16.0946 16.4023 16.321C16.1079 16.5475 15.7463 16.6691 15.3748 16.6666H3.33317C2.89114 16.6666 2.46722 16.491 2.15466 16.1785C1.8421 15.8659 1.6665 15.442 1.6665 15V4.16662C1.6665 3.7246 1.8421 3.30067 2.15466 2.98811C2.46722 2.67555 2.89114 2.49996 3.33317 2.49996H6.58317C6.86191 2.49723 7.13688 2.56445 7.38292 2.69547C7.62896 2.8265 7.8382 3.01715 7.9915 3.24996L8.6665 4.24996C8.81826 4.4804 9.02486 4.66956 9.26775 4.80046C9.51065 4.93136 9.78225 4.99991 10.0582 4.99996H14.9998C15.4419 4.99996 15.8658 5.17555 16.1783 5.48811C16.4909 5.80067 16.6665 6.2246 16.6665 6.66662V8.33329Z\"\n                stroke=\"currentColor\"\n                stroke-width=\"1.66667\"\n                stroke-linecap=\"round\"\n                stroke-linejoin=\"round\" />\n            </svg>\n          </ng-container>\n        </ng-template>\n        <ng-template #defaultTabIcon>\n          <!-- History and other icons fallback -->\n          <ng-container *ngIf=\"tab.icon === 'history'; else matIconFallback\">\n            <svg\n              class=\"cqa-w-5 cqa-h-5\"\n              width=\"20\"\n              height=\"20\"\n              viewBox=\"0 0 48 48\"\n              fill=\"none\"\n              xmlns=\"http://www.w3.org/2000/svg\">\n              <path\n                d=\"M25.99 6C16.04 6 8 14.06 8 24H2l7.79 7.79.14.29L18 24h-6c0-7.73 6.27-14 14-14s14 6.27 14 14-6.27 14-14 14c-3.87 0-7.36-1.58-9.89-4.11l-2.83 2.83C16.53 39.98 21.02 42 25.99 42 35.94 42 44 33.94 44 24S35.94 6 25.99 6zM24 16v10l8.56 5.08L34 28.65l-7-4.15V16h-3z\"\n                fill=\"currentColor\" />\n            </svg>\n          </ng-container>\n          <ng-template #matIconFallback>\n            <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5 cqa-leading-[19px]\">{{ tab.icon || 'circle' }}</mat-icon>\n          </ng-template>\n        </ng-template>\n      </button>\n    </div>\n\n    <!-- Scrollable content area (collapses with animation when expanded is false) -->\n    <div class=\"cqa-flex cqa-flex-col cqa-min-h-0 cqa-min-w-0 cqa-overflow-hidden cqa-w-full cqa-h-full\">\n      <div class=\"detail-side-panel-scroll cqa-flex-1 cqa-min-h-0 cqa-min-w-0 cqa-overflow-y-auto cqa-overflow-x-hidden cqa-p-4 cqa-space-y-4\" style=\"overflow-y: auto; overflow-x: hidden; min-height: 0; -webkit-overflow-scrolling: touch;\">\n      <!-- Tabs: equally distributed (Figma: purple active, gray inactive) -->\n      <div class=\"cqa-flex cqa-gap-[3.5px] cqa-p-[3.5px] cqa-bg-[#F1F5F9] cqa-rounded-lg cqa-w-full\" role=\"tablist\">\n        <button\n          *ngFor=\"let tab of tabs; trackBy: trackByTabValue\"\n          type=\"button\"\n          role=\"tab\"\n          [attr.aria-selected]=\"activeTab === tab.value\"\n          [class.cqa-bg-[#3F43EE]]=\"activeTab === tab.value\"\n          [class.cqa-text-white]=\"activeTab === tab.value\"\n          [class.cqa-text-[#64748B]]=\"activeTab !== tab.value\"\n          class=\"cqa-flex-1 cqa-flex cqa-justify-center cqa-items-center cqa-py-2 cqa-rounded-lg cqa-text-xs cqa-font-medium cqa-transition-colors hover:cqa-opacity-90 focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n          (click)=\"onTabClick(tab)\">\n          {{ tab.label }}\n        </button>\n      </div>\n\n      <!-- Tab content: fully provided by host via content projection. Host uses *ngIf per tab so only active content is projected. Add/remove tabs in the host without changing cqa-ui-lib. -->\n      <ng-content></ng-content>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Directive, TemplateRef } from '@angular/core';\n\n@Directive({\n  selector: '[cqaTabContent]',\n})\nexport class DetailDrawerTabContentDirective {\n  constructor(public templateRef: TemplateRef<unknown>) {}\n}\n","import { Component, Input, ContentChild } from '@angular/core';\nimport { DetailDrawerTabContentDirective } from '../detail-drawer-tab-content.directive';\n\n@Component({\n  selector: 'cqa-detail-drawer-tab',\n  template: '',\n  host: {\n    style: 'display: contents',\n  },\n})\nexport class DetailDrawerTabComponent {\n  /** Tab label (shown in tooltip on icon button) */\n  @Input() label = '';\n\n  /** Tab value (unique identifier) */\n  @Input() value = '';\n\n  /** Material icon name for the tab button */\n  @Input() icon = 'folder';\n\n  /** Template for tab content - use with ng-template cqaTabContent */\n  @ContentChild(DetailDrawerTabContentDirective) contentDirective?: DetailDrawerTabContentDirective;\n\n  get contentTemplate() {\n    return this.contentDirective?.templateRef ?? null;\n  }\n}\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  ContentChildren,\n  QueryList,\n  AfterContentInit,\n  AfterContentChecked,\n  HostBinding,\n} from '@angular/core';\nimport { DetailDrawerTabComponent } from './detail-drawer-tab/detail-drawer-tab.component';\n\n@Component({\n  selector: 'cqa-detail-drawer',\n  templateUrl: './detail-drawer.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    class:\n      'cqa-ui-root cqa-flex cqa-flex-col cqa-h-full cqa-bg-white cqa-shadow-[-4px_0_6px_-1px_rgba(0,0,0,0.05)]',\n    style: 'transition: width 0.3s ease-in-out',\n  },\n})\nexport class DetailDrawerComponent implements AfterContentInit, AfterContentChecked {\n  @ContentChildren(DetailDrawerTabComponent) tabComponents!: QueryList<DetailDrawerTabComponent>;\n\n  /** Currently active tab value */\n  @Input() activeTab = '';\n\n  /** Whether to show the close button */\n  @Input() showCloseButton = true;\n\n  /** Whether the drawer is expanded */\n  @Input() expanded = true;\n\n  /** Panel width when expanded */\n  @Input() expandedWidth = '280px';\n\n  /** Minimum width when expanded (e.g. '280px') */\n  @Input() minExpandedWidth?: string;\n\n  /** Maximum width when expanded (e.g. '600px', '30vw'). Default: 30% of viewport */\n  @Input() maxExpandedWidth = '30vw';\n\n  /** Panel width when collapsed */\n  @Input() collapsedWidth = '56px';\n\n  @HostBinding('style.width') get hostWidth(): string {\n    return this.expanded ? this.expandedWidth : this.collapsedWidth;\n  }\n\n  @HostBinding('style.min-width') get hostMinWidth(): string | null {\n    return this.expanded && this.minExpandedWidth ? this.minExpandedWidth : null;\n  }\n\n  @HostBinding('style.max-width') get hostMaxWidth(): string | null {\n    return this.expanded ? this.maxExpandedWidth : null;\n  }\n\n  @Input() expandTooltip = 'Expand';\n  @Input() collapseTooltip = 'Collapse';\n  @Input() closeTooltip = 'Close';\n\n  @Output() activeTabChange = new EventEmitter<string>();\n  @Output() expandToggle = new EventEmitter<void>();\n  @Output() close = new EventEmitter<void>();\n\n  ngAfterContentInit(): void {\n    this.ensureActiveTab();\n  }\n\n  ngAfterContentChecked(): void {\n    this.ensureActiveTab();\n  }\n\n  private ensureActiveTab(): void {\n    const tabs = this.tabComponents?.toArray() ?? [];\n    if (tabs.length > 0 && !this.activeTab) {\n      this.activeTab = tabs[0].value;\n      this.activeTabChange.emit(this.activeTab);\n    }\n  }\n\n  onTabClick(tab: DetailDrawerTabComponent): void {\n    // If drawer is collapsed, open it (but never close on tab click)\n    if (!this.expanded) {\n      this.expandToggle.emit();\n    }\n    // Select the tab\n    if (tab.value !== this.activeTab) {\n      this.activeTab = tab.value;\n      this.activeTabChange.emit(this.activeTab);\n    }\n  }\n\n  onExpandToggle(): void {\n    this.expandToggle.emit();\n  }\n\n  onClose(): void {\n    this.close.emit();\n  }\n\n  trackByValue(_i: number, tab: DetailDrawerTabComponent): string {\n    return tab.value;\n  }\n\n  isTabActive(tab: DetailDrawerTabComponent): boolean {\n    return tab.value === this.activeTab;\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-bg-white\">\n  <div\n    class=\"cqa-grid cqa-flex-1 cqa-min-h-0 cqa-overflow-hidden\"\n    [style.grid-template-columns]=\"expanded ? 'auto 1fr' : 'auto 0fr'\"\n    style=\"transition: grid-template-columns 0.3s ease-in-out\">\n    <!-- Left vertical icon bar: one button per tab -->\n    <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-min-h-0 cqa-items-center cqa-py-4 cqa-px-2 cqa-border-r cqa-border-[#E2E8F0] cqa-bg-[#FAFAFA] cqa-flex-shrink-0\">\n      <!-- Expand / Collapse button (always visible) -->\n      <button\n        type=\"button\"\n        [matTooltip]=\"expanded ? collapseTooltip : expandTooltip\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n        (click)=\"onExpandToggle()\">\n        <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5 cqa-leading-[19px]\">{{ expanded ? 'unfold_less' : 'unfold_more' }}</mat-icon>\n      </button>\n      <!-- Close button -->\n      <button\n        *ngIf=\"showCloseButton\"\n        type=\"button\"\n        [matTooltip]=\"closeTooltip\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155] cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n        (click)=\"onClose()\">\n        <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5 cqa-leading-[19px]\">close</mat-icon>\n      </button>\n      <!-- Tab buttons: equally distributed in remaining space -->\n      <div class=\"cqa-flex cqa-flex-1 cqa-flex-col cqa-justify-evenly cqa-items-center cqa-w-full\">\n        <button\n          *ngFor=\"let tab of tabComponents; trackBy: trackByValue\"\n          type=\"button\"\n          role=\"tab\"\n          [attr.aria-selected]=\"isTabActive(tab)\"\n          [matTooltip]=\"tab.label\"\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-9 cqa-h-9 cqa-rounded-lg cqa-transition-colors focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2 cqa-flex-shrink-0\"\n          [ngClass]=\"{\n            'cqa-bg-[#3F43EE] cqa-text-white': isTabActive(tab),\n            'cqa-text-[#64748B] hover:cqa-bg-[#E2E8F0] hover:cqa-text-[#334155]': !isTabActive(tab)\n          }\"\n          (click)=\"onTabClick(tab)\">\n          <mat-icon class=\"cqa-text-[20px] cqa-w-5 cqa-h-5 cqa-leading-[19px]\">{{ tab.icon }}</mat-icon>\n        </button>\n      </div>\n    </div>\n\n    <!-- Content area: show only the active tab's content -->\n    <div class=\"cqa-min-w-0 cqa-overflow-hidden\">\n      <div class=\"cqa-h-full cqa-overflow-y-auto cqa-p-4\">\n        <ng-container *ngFor=\"let tab of tabComponents\">\n          <ng-container *ngIf=\"tab.value === activeTab && tab.contentTemplate\" [ngTemplateOutlet]=\"tab.contentTemplate\"></ng-container>\n        </ng-container>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatRadioChange } from '@angular/material/radio';\nimport { RadioCardOption } from './radio-card-option.model';\n\n@Component({\n  selector: 'cqa-radio-card-group',\n  templateUrl: './radio-card-group.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-block' },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => RadioCardGroupComponent),\n      multi: true\n    }\n  ]\n})\nexport class RadioCardGroupComponent implements ControlValueAccessor {\n  /** Choices to render (order preserved). */\n  @Input() options: RadioCardOption[] = [];\n\n  /** When true, cards wrap to the next line (e.g. many platform targets). */\n  @Input() wrap = false;\n\n  @Input() disabled = false;\n\n  /** Emits the same event as `mat-radio-group` for compatibility with existing handlers. */\n  @Output() selectionChange = new EventEmitter<MatRadioChange>();\n\n  value: string | null = null;\n\n  private onChange: (v: string | null) => void = () => {};\n  private onTouched: () => void = () => {};\n\n  writeValue(obj: string | null | undefined): void {\n    this.value = obj == null ? null : String(obj);\n  }\n\n  registerOnChange(fn: (v: string | null) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  trackByValue(_index: number, opt: RadioCardOption): string {\n    return opt.value;\n  }\n\n  get hasAnyIcon(): boolean {\n    return (this.options || []).some((o) => !!o.icon);\n  }\n\n  onRadioChange(event: MatRadioChange): void {\n    if (this.disabled) {\n      return;\n    }\n    const next = event.value != null ? String(event.value) : null;\n    this.value = next;\n    this.onChange(next);\n    this.onTouched();\n    this.selectionChange.emit(event);\n  }\n}\n","<mat-radio-group\n  class=\"cqa-flex cqa-items-stretch cqa-radio-group\"\n  [ngClass]=\"wrap ? 'cqa-flex-wrap cqa-gap-2' : 'cqa-gap-3'\"\n  [value]=\"value\"\n  (change)=\"onRadioChange($event)\"\n  [disabled]=\"disabled\"\n>\n  <label\n    *ngFor=\"let opt of options; trackBy: trackByValue\"\n    class=\"cqa-radio-card-option qqa-m-0 cqa-flex cqa-cursor-pointer cqa-items-center cqa-gap-1.5 cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#e5e7eb] cqa-py-2 cqa-text-[13px] cqa-text-[#374151] hover:cqa-border-[#6366f1]\"\n    [ngClass]=\"hasAnyIcon ? 'cqa-px-3' : 'cqa-px-4'\"\n  >\n    <mat-radio-button [value]=\"opt.value\" class=\"!cqa-pr-0\"></mat-radio-button>\n    <mat-icon *ngIf=\"opt.icon\" class=\"cqa-h-[18px] cqa-w-[18px] cqa-text-[18px] cqa-text-[#6366f1]\">{{ opt.icon }}</mat-icon>\n    <span class=\"cqa-whitespace-nowrap\">{{ opt.label }}</span>\n  </label>\n</mat-radio-group>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Legacy toggle-change payload kept for back-compat with consumers that haven't migrated\n * to `restoreMockChange` yet. `key` identifies which row was toggled; `value` is the new\n * checked state of that row. New code should listen to `restoreMockChange` instead.\n */\nexport interface ApiMockingCardToggleChange {\n  key: 'captureApiResponses' | 'renewApiResponses';\n  value: boolean;\n}\n\n/**\n * Dual-mode card summarising the API mocking configuration of a test case.\n *\n * The card surfaces TWO independent flags — `restoreMock` (the \"Use mock API responses\" row)\n * and `storeMock` (the \"Renew and store API responses\" row). Both can be off simultaneously\n * (no mocking on the next run); turning either one on forces the other off (they're mutually\n * exclusive in the on-state). Both can never be on at the same time.\n *\n * In read-only mode each row shows On/Off derived from its own flag. In edit mode each row\n * renders a toggle; the card emits `restoreMockChange` and `storeMockChange` whenever a value\n * actually changes so the parent can persist them.\n */\n@Component({\n  selector: 'cqa-api-mocking-card',\n  templateUrl: './api-mocking-card.component.html',\n  // Styles live in src/lib/styles/tailwind.css (the lib ships a single compiled stylesheet);\n  // per-component .scss files are not supported in the ng-packagr build for this lib.\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ApiMockingCardComponent {\n  @Input() title: string = 'API Mocking';\n  @Input() statusLabel: string = 'Not configured';\n\n  @Input() captureLabel: string = 'Use mock API responses';\n  @Input() captureHint: string = 'Uses stored responses on next run. Turn on after capture completes.';\n  @Input() renewLabel: string = 'Renew and store API responses';\n  @Input() renewHint: string = 'Re-captures fresh responses on next run. Turns off Use mock.';\n\n  /** \"Use mock API responses\" row state. Mutually exclusive with `storeMock` when true. */\n  @Input() restoreMock: boolean = false;\n  /** \"Renew and store API responses\" row state. Mutually exclusive with `restoreMock` when true. */\n  @Input() storeMock: boolean = false;\n\n  @Input() mockedApisCount: number = 0;\n  @Input() totalApisCount: number = 0;\n  @Input() progressPercent: number = 0;\n\n  @Input() summaryText?: string;\n  @Input() percentText?: string;\n\n  @Input() configureButtonLabel: string = 'Configure Mock APIs';\n  @Input() editing: boolean = false;\n\n  /**\n   * Controls whether the \"Mocked X of Y / progress bar / percent\" block is shown.\n   * Hidden when the test case has no captured mock summary yet (and always hidden in\n   * edit mode regardless of this flag).\n   */\n  @Input() showProgress: boolean = false;\n\n  /** Hint shown in read-only mode when no mock data exists yet (`showProgress` is false). */\n  @Input() noDataHint: string = 'Run this test once to capture API responses first.';\n\n  @Output() configure = new EventEmitter<void>();\n  /** Emitted whenever `restoreMock` changes (Use-mock row toggled). */\n  @Output() restoreMockChange = new EventEmitter<boolean>();\n  /** Emitted whenever `storeMock` changes (Renew-and-store row toggled). */\n  @Output() storeMockChange = new EventEmitter<boolean>();\n\n  // Per-row derived display state — each row reflects its own flag now.\n  get captureEnabled(): boolean { return this.restoreMock; }\n  get renewEnabled(): boolean { return this.storeMock; }\n  get captureValueText(): string { return this.restoreMock ? 'On' : 'Off'; }\n  get renewValueText(): string { return this.storeMock ? 'On' : 'Off'; }\n\n  get computedSummaryText(): string {\n    if (this.summaryText) return this.summaryText;\n    return `${this.mockedApisCount} of ${this.totalApisCount} APIs set to mock`;\n  }\n\n  get computedPercentText(): string {\n    if (this.percentText) return this.percentText;\n    return `${this.progressPercent}% of calls will use mock responses`;\n  }\n\n  get progressWidth(): string {\n    const clamped = Math.max(0, Math.min(100, Number(this.progressPercent) || 0));\n    return `${clamped}%`;\n  }\n\n  onConfigureClick(): void {\n    this.configure.emit();\n  }\n\n  /**\n   * \"Use mock API responses\" toggle. Turning it on forces `storeMock` off (mutual exclusivity);\n   * turning it off leaves the other row alone.\n   */\n  onCaptureToggle(value: boolean): void {\n    if (value && this.storeMock) this.setStoreMock(false);\n    this.setRestoreMock(value);\n  }\n\n  /**\n   * \"Renew and store API responses\" toggle. Turning it on forces `restoreMock` off; turning\n   * it off leaves the other row alone.\n   */\n  onRenewToggle(value: boolean): void {\n    if (value && this.restoreMock) this.setRestoreMock(false);\n    this.setStoreMock(value);\n  }\n\n  private setRestoreMock(next: boolean): void {\n    if (this.restoreMock === next) return;\n    this.restoreMock = next;\n    this.restoreMockChange.emit(next);\n  }\n\n  private setStoreMock(next: boolean): void {\n    if (this.storeMock === next) return;\n    this.storeMock = next;\n    this.storeMockChange.emit(next);\n  }\n}\n","<div class=\"cqa-amc-card\">\n  <div class=\"cqa-amc-header\">\n    <span class=\"cqa-amc-title\">{{ title }}</span>\n    <span class=\"cqa-amc-status\" *ngIf=\"!showProgress &&statusLabel\">{{ statusLabel }}</span>\n  </div>\n\n  <!-- Read-only rows -->\n  <ng-container *ngIf=\"!editing\">\n    <div class=\"cqa-amc-row\">\n      <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n      <span class=\"cqa-amc-value\">{{ captureValueText }}</span>\n    </div>\n    <div class=\"cqa-amc-row\">\n      <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n      <span class=\"cqa-amc-value\">{{ renewValueText }}</span>\n    </div>\n  </ng-container>\n\n  <!-- Edit rows: toggles with hint text -->\n  <ng-container *ngIf=\"editing\">\n    <div class=\"cqa-amc-edit-block\">\n      <div class=\"cqa-amc-row cqa-amc-row--edit\">\n        <cqa-custom-toggle\n          [checked]=\"captureEnabled\"\n          [ariaLabel]=\"captureLabel\"\n          (checkedChange)=\"onCaptureToggle($event)\">\n        </cqa-custom-toggle>\n        <span class=\"cqa-amc-label\">{{ captureLabel }}</span>\n      </div>\n      <p *ngIf=\"captureHint\" class=\"cqa-amc-edit-hint\">{{ captureHint }}</p>\n    </div>\n    <div class=\"cqa-amc-edit-block\">\n      <div class=\"cqa-amc-row cqa-amc-row--edit\">\n        <cqa-custom-toggle\n          [checked]=\"renewEnabled\"\n          [ariaLabel]=\"renewLabel\"\n          (checkedChange)=\"onRenewToggle($event)\">\n        </cqa-custom-toggle>\n        <span class=\"cqa-amc-label\">{{ renewLabel }}</span>\n      </div>\n      <p *ngIf=\"renewHint\" class=\"cqa-amc-edit-hint\">{{ renewHint }}</p>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"showProgress && !editing\">\n    <p class=\"cqa-amc-summary\">{{ computedSummaryText }}</p>\n    <div class=\"cqa-amc-progress-track\">\n      <div class=\"cqa-amc-progress-fill\" [style.width]=\"progressWidth\"></div>\n    </div>\n    <p class=\"cqa-amc-percent\">{{ computedPercentText }}</p>\n  </ng-container>\n\n  <!-- Hint: no mock data yet — nudge the user to run the test first -->\n  <p *ngIf=\"!showProgress && !editing\" class=\"cqa-amc-no-data-hint\">{{ noDataHint }}</p>\n\n  <!-- Configure is only meaningful when \"Use mock API responses\" is ON — without it, there's\n       no active mock mode to configure. The button stays disabled when restoreMock is OFF\n       (independent of the renew/store toggle), per the spec. -->\n  <button\n    [disabled]=\"!showProgress || !restoreMock\"\n    type=\"button\"\n    class=\"cqa-amc-configure-btn\"\n    (click)=\"onConfigureClick()\">\n    {{ configureButtonLabel }}\n  </button>\n</div>\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport {\n  TestCaseDetailsConfigSection,\n  TestCaseDetailsMetadataItem,\n} from '../test-case-details.models';\nimport {\n  DynamicSelectFieldConfig,\n  SelectOption,\n} from '../../dynamic-select/dynamic-select-field.component';\nimport { DropdownOption } from '../../dropdown-button/dropdown-button.component';\nimport { RadioCardOption } from '../../radio-card-group/radio-card-option.model';\n\ntype ViewportMode = 'desktop' | 'laptop' | 'tablet' | 'mobile' | 'custom';\n\n/** Sentinel value emitted in save payloads to tell the host to send null for the field (use org-level default). */\nconst ORG_LEVEL_SENTINEL = 'Org level';\n\n/** Override config for a specific select. Use for server-side search, load more, custom options. */\nexport interface SelectConfigOverride {\n  /** Replace options (e.g. from API). Update when API returns. */\n  options?: SelectOption[];\n  /** Enable server-side search; component emits selectSearch instead of local filtering. */\n  serverSearch?: boolean;\n  /** Indicates more results available for infinite scroll. */\n  hasMore?: boolean;\n  /** Loading state (e.g. during API call). */\n  isLoading?: boolean;\n  /** Enable search input in the select. */\n  searchable?: boolean;\n  /** When true, triggers initial search on panel open (serverSearch mode). */\n  initialFetchOnOpen?: boolean;\n  /** Callback when user types in search. Call API, then update options via selectConfigOverrides. */\n  onSearch?: (query: string) => void;\n  /** Callback when user scrolls to load more. Call API, append options via selectConfigOverrides. */\n  onLoadMore?: (query?: string) => void;\n}\n\n/** Map of select key -> config override. Enables API-driven options, infinite search, load more. */\nexport type SelectConfigOverrides = Partial<Record<string, SelectConfigOverride>>;\n\n/** Keys for each dynamic select in test-case-details-edit. Use these with selectConfigOverrides. */\nexport const TEST_CASE_DETAILS_SELECT_KEYS = {\n  status: 'status',\n  priority: 'priority',\n  type: 'type',\n  labels: 'labels',\n  prerequisiteCases: 'prerequisiteCases',\n  testDataProfile: 'testDataProfile',\n  testDataSet: 'testDataSet',\n  videoRecording: 'videoRecording',\n  enableAiSmartness: 'enableAiSmartness',\n  defaultAiAction: 'defaultAiAction',\n  knowledgeBaseDefaultTestCase: 'knowledgeBaseDefaultTestCase',\n  useAiMetadata: 'useAiMetadata',\n  defaultBrowser: 'defaultBrowser',\n  defaultViewport: 'defaultViewport',\n  deviceType: 'deviceType',\n  deviceOS: 'deviceOS',\n} as const;\n\nexport interface TestCaseDetailsEditFormData {\n  descriptionContent: string;\n  status: string;\n  priority: string;\n  type?: string | number;\n  labels: string[];\n  testDataProfileId?: number | string | null;\n  testDataSetIndex?: number | string | null;\n  configSections: TestCaseDetailsConfigSection[];\n  configSectionsRow2: TestCaseDetailsConfigSection[];\n  /** \"Use mock API responses\" row state. Mutually exclusive with `apiMockingStoreMock` when true. */\n  apiMockingRestoreMock?: boolean;\n  /** \"Renew and store API responses\" row state. Mutually exclusive with `apiMockingRestoreMock` when true. */\n  apiMockingStoreMock?: boolean;\n}\n\nconst FREQUENTLY_USED_LABELS = [\n  'Case',\n  'Critical',\n  'PO',\n  'Upload',\n  'Validation',\n  'Review',\n  'Edge-cases',\n  'Security',\n  'Integration',\n  'Smoke',\n];\n\n@Component({\n  selector: 'cqa-test-case-details-edit',\n  templateUrl: './test-case-details-edit.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestCaseDetailsEditComponent implements OnInit, OnChanges {\n  @Input() descriptionTitle = 'Description';\n  @Input() descriptionContent = '';\n  /** When true, description uses Trix rich text editor (Bold, Italic, etc.). Host app must load Trix. */\n  @Input() enableMarkdown = false;\n  @Input() metadataItems: TestCaseDetailsMetadataItem[] = [];\n  @Input() labels: string[] = [];\n  @Input() configTitle = 'Configuration';\n  @Input() configSections: TestCaseDetailsConfigSection[] = [];\n  @Input() configSectionsRow2: TestCaseDetailsConfigSection[] = [];\n  @Input() isSaving = false;\n  /** Optional list of prerequisite test case options for the multi-select. If not provided, uses default sample options. */\n  @Input() prerequisiteCaseOptions: { value: string; name: string }[] = [];\n  /** Platform: 'web' shows Default Browser + Viewport; 'mobile' shows Device Type + OS. Defaults to 'web'. */\n  @Input() platform: 'web' | 'mobile' = 'web';\n\n  /** When true, hides Priority, Type, and Test Data Set fields (step groups don't have these). Defaults to false. */\n  @Input() isStepGroup = false;\n\n  /**\n   * Override config per select key. Use for:\n   * - API-driven options: pass options array (update when API returns)\n   * - Server-side search: serverSearch: true, onSearch in override or listen to selectSearch\n   * - Infinite scroll: hasMore: true, onLoadMore in override or listen to selectLoadMore\n   * - Initial fetch on open: initialFetchOnOpen: true\n   */\n  @Input() selectConfigOverrides: SelectConfigOverrides = {};\n\n  // ── API Mocking card (edit mode: shows two toggles) ───────────────────────\n  @Input() showApiMockingCard = false;\n  @Input() apiMockingTitle = 'API Mocking';\n  @Input() apiMockingStatusLabel = 'Not configured';\n  @Input() apiMockingCaptureLabel = 'Use mock API responses';\n  @Input() apiMockingCaptureHint = 'Uses stored responses on next run. Turn on after capture completes.';\n  @Input() apiMockingRenewLabel = 'Renew and store API responses';\n  @Input() apiMockingRenewHint = 'Re-captures fresh responses on next run. Turns off Use mock.';\n  /**\n   * Single source of truth for the card's dual toggle state.\n   *   true  → Renew ON, Capture OFF\n   *   false → Renew OFF, Capture ON\n   */\n  @Input() apiMockingRestoreMock = false;\n  /** \"Renew and store API responses\" — mutually exclusive with `apiMockingRestoreMock` when true. */\n  @Input() apiMockingStoreMock = false;\n  @Input() apiMockingMockedApisCount = 0;\n  @Input() apiMockingTotalApisCount = 0;\n  @Input() apiMockingProgressPercent = 0;\n  /** Forwarded to `cqa-api-mocking-card`. In edit mode the card hides the block anyway, but\n   *  we still pipe the input through for symmetry with the read-only component. */\n  @Input() apiMockingShowProgress = false;\n  @Input() apiMockingSummaryText?: string;\n  @Input() apiMockingPercentText?: string;\n\n  /** Org-level default for Test Case Timeout (minutes). Used to flag the input as \"ORG level\" vs \"Custom\". */\n  @Input() orgLevelTestCaseTimeout?: string | number | null;\n\n  /** Viewport dropdown options per category from the API. Pass DESKTOP, LAPTOP, TABLET, MOBILE arrays. */\n  @Input() viewportCategoryOptions: { DESKTOP?: SelectOption[], LAPTOP?: SelectOption[], TABLET?: SelectOption[], MOBILE?: SelectOption[] } = {};\n\n  @Output() save = new EventEmitter<TestCaseDetailsEditFormData>();\n  @Output() cancel = new EventEmitter<void>();\n\n  /** Emitted when user searches in a select (serverSearch mode). Call API and update options via selectConfigOverrides. */\n  @Output() selectSearch = new EventEmitter<{ key: string; query: string }>();\n\n  /** Emitted when user scrolls to load more. Call API, append to options via selectConfigOverrides. */\n  @Output() selectLoadMore = new EventEmitter<{ key: string; query: string }>();\n\n  /** Emitted when a select panel is opened. Use to call API for initial load (e.g. when initialFetchOnOpen). */\n  @Output() selectOpened = new EventEmitter<{ key: string }>();\n\n  /** Emitted when selection changes in any select. */\n  @Output() selectionChange = new EventEmitter<{ key: string; value: unknown }>();\n\n  /** Emitted when user adds a new custom label via the \"New\" option. */\n  @Output() labelAdded = new EventEmitter<string>();\n  /** Emitted when the user flips the \"Use mock API responses\" toggle. */\n  @Output() apiMockingRestoreMockChange = new EventEmitter<boolean>();\n  /** Emitted when the user flips the \"Renew and store API responses\" toggle. */\n  @Output() apiMockingStoreMockChange = new EventEmitter<boolean>();\n  /** Emitted when the user clicks \"Configure Mock APIs\" on the embedded card in edit mode. */\n  @Output() configureApiMocking = new EventEmitter<void>();\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  /** Form state */\n  editDescription = '';\n  editStatus = '';\n  editPriority = '';\n  editLabels: string[] = [];\n  /** Local edit-mode mirror of the `restoreMock` boolean. Seeded from @Input() on init/changes. */\n  editApiMockingRestoreMock = false;\n  /** Local edit-mode mirror of the `storeMock` boolean. */\n  editApiMockingStoreMock = false;\n  testCaseTimeout = '';\n  /** 'org' → input disabled, payload sends null for testcaseTimeout; 'custom' → input enabled, payload sends the typed value. */\n  testCaseTimeoutMode: 'org' | 'custom' = 'org';\n  waitTimeoutLocators = '';\n  autoWaitEnabled = false;\n  retryFailedSteps = '';\n  configExpanded = true;\n  executionExpanded = true;\n  aiConfigExpanded = true;\n  waitsRetriesExpanded = true;\n  deviceExpanded = true;\n  keyFlagsExpanded = true;\n  mobileTestingEnabled = false;\n  extensionUseEnabled = false;\n  dataDrivenEnabled = false;\n\n  viewportMode: ViewportMode = 'desktop';\n  viewportDesktopDeviceForm = new FormGroup({ viewportDesktopDevice: new FormControl('') });\n  viewportLaptopDeviceForm = new FormGroup({ viewportLaptopDevice: new FormControl('') });\n  viewportTabletDeviceForm = new FormGroup({ viewportTabletDevice: new FormControl('') });\n  viewportMobileDeviceForm = new FormGroup({ viewportMobileDevice: new FormControl('') });\n  customViewportWidth = '';\n  customViewportHeight = '';\n  customViewportTags: string[] = [];\n\n  readonly viewportModeOptions: RadioCardOption[] = [\n    { value: 'desktop', label: 'Desktop', icon: 'desktop_windows' },\n    { value: 'laptop', label: 'Laptop', icon: 'laptop_windows' },\n    { value: 'tablet', label: 'Tablet', icon: 'tablet_mac' },\n    { value: 'mobile', label: 'Mobile', icon: 'smartphone' },\n  ];\n\n  desktopViewportConfig: DynamicSelectFieldConfig = {\n    key: 'viewportDesktopDevice',\n    label: '',\n    placeholder: 'Select resolution',\n    searchable: true,\n    options: [],\n  };\n\n  laptopViewportConfig: DynamicSelectFieldConfig = {\n    key: 'viewportLaptopDevice',\n    label: '',\n    placeholder: 'Select resolution',\n    searchable: true,\n    options: [],\n  };\n\n  tabletViewportConfig: DynamicSelectFieldConfig = {\n    key: 'viewportTabletDevice',\n    label: '',\n    placeholder: 'Select resolution',\n    searchable: true,\n    options: [],\n  };\n\n  mobileViewportConfig: DynamicSelectFieldConfig = {\n    key: 'viewportMobileDevice',\n    label: '',\n    placeholder: 'Select device',\n    searchable: true,\n    options: [],\n  };\n\n  readonly frequentlyUsedLabels = FREQUENTLY_USED_LABELS;\n  private _initialFormSnapshot: string | null = null;\n\n  /** FormGroup for cqa-dynamic-select bindings */\n  editForm = new FormGroup({\n    status: new FormControl(''),\n    priority: new FormControl(''),\n    type: new FormControl(''),\n    labels: new FormControl([] as string[]),\n    prerequisiteCases: new FormControl([] as string[]),\n    testDataProfile: new FormControl(''),\n    testDataSet: new FormControl(''),\n    defaultBrowser: new FormControl(''),\n    videoRecording: new FormControl(''),\n    defaultViewport: new FormControl(''),\n    deviceType: new FormControl(''),\n    deviceOS: new FormControl(''),\n    enableAiSmartness: new FormControl(''),\n    defaultAiAction: new FormControl(''),\n    knowledgeBaseDefaultTestCase: new FormControl(''),\n    useAiMetadata: new FormControl(''),\n  });\n\n  get statusItem(): TestCaseDetailsMetadataItem | undefined {\n    return this.metadataItems.find((m) => m.label === 'Status');\n  }\n\n  get priorityItem(): TestCaseDetailsMetadataItem | undefined {\n    return this.metadataItems.find((m) => m.label === 'Priority');\n  }\n\n  get typeItem(): TestCaseDetailsMetadataItem | undefined {\n    return this.metadataItems.find((m) => m.label === 'Type');\n  }\n\n  get statusOptions(): string[] {\n    return ['Draft', 'In Review', 'Approved', 'Active', 'Inactive', 'Blocked'];\n  }\n\n  get priorityOptions(): string[] {\n    return ['Critical', 'Major', 'High', 'Medium', 'Low', 'Minor', 'Not set'];\n  }\n\n  /** Cached configs to avoid new object refs each change detection (prevents infinite loops) */\n  readonly statusSelectConfig: DynamicSelectFieldConfig = {\n    key: 'status',\n    label: '',\n    placeholder: 'Status',\n    searchable: false,\n    options: [\n      { value: 'Draft', name: 'Draft' },\n      { value: 'In Review', name: 'In Review' },\n      { value: 'Approved', name: 'Approved' },\n      { value: 'Active', name: 'Active' },\n      { value: 'Inactive', name: 'Inactive' },\n      { value: 'Blocked', name: 'Blocked' },\n    ],\n  };\n\n  readonly typeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'type',\n    label: '',\n    placeholder: 'Type',\n    searchable: true,\n    options: [],\n  };\n\n  readonly testDataProfileSelectConfig: DynamicSelectFieldConfig = {\n    key: 'testDataProfile',\n    label: '',\n    placeholder: 'Test Data Profile',\n    searchable: true,\n    options: [],\n  };\n\n  readonly testDataSetSelectConfig: DynamicSelectFieldConfig = {\n    key: 'testDataSet',\n    label: '',\n    placeholder: 'Test Data Set',\n    searchable: true,\n    options: [],\n  };\n\n  private readonly defaultPrerequisiteCaseOptions = [\n    { value: 'TC-001', name: 'TC-001: Login flow' },\n    { value: 'TC-002', name: 'TC-002: User registration' },\n    { value: 'TC-003', name: 'TC-003: Password reset' },\n    { value: 'TC-004', name: 'TC-004: Dashboard load' },\n    { value: 'TC-005', name: 'TC-005: API health check' },\n  ];\n\n  readonly videoRecordingSelectConfig: DynamicSelectFieldConfig = {\n    key: 'videoRecording',\n    label: 'Record test execution video',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { value: 'true', name: 'True' },\n      { value: 'false', name: 'False' },\n      { value: 'Org level', name: 'Org level' },\n    ],\n  };\n\n  readonly aiMetadataCollectionSelectConfig: DynamicSelectFieldConfig = {\n    key: 'useAiMetadata',\n    label: 'Enable AI metadata collection',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { value: 'true', name: 'True' },\n      { value: 'false', name: 'False' },\n      { value: 'Org level', name: 'Org level' },\n    ],\n  };\n\n  /** Cached labels config to avoid new object on every CD (prevents freeze) */\n  private _labelsSelectConfigCache: DynamicSelectFieldConfig | null = null;\n  private _labelsSelectConfigDirty = true;\n\n  /** Labels multi-select: options = frequently used + current + API options from selectConfigOverrides */\n  get labelsSelectConfig(): DynamicSelectFieldConfig {\n    if (!this._labelsSelectConfigDirty && this._labelsSelectConfigCache) return this._labelsSelectConfigCache;\n    const override = this.selectConfigOverrides[TEST_CASE_DETAILS_SELECT_KEYS.labels];\n    const apiOptions = override?.options ?? [];\n    const allLabels = new Set<string>([\n      ...this.frequentlyUsedLabels,\n      ...this.editLabels,\n      ...apiOptions.map((o) => String(o.name ?? o.value ?? '').trim()).filter(Boolean),\n    ]);\n    const options = Array.from(allLabels)\n      .filter(Boolean)\n      .sort((a, b) => a.localeCompare(b))\n      .map((v) => ({ value: v, name: v }));\n    this._labelsSelectConfigCache = {\n      key: 'labels',\n      label: '',\n      placeholder: 'Search labels to add ......',\n      searchable: true,\n      multiple: true,\n      optionStyle: 'checkbox',\n      allowCustomValue: true,\n      options,\n    };\n    this._labelsSelectConfigDirty = false;\n    return this._labelsSelectConfigCache;\n  }\n\n  prerequisiteCaseSelectConfig: DynamicSelectFieldConfig = {\n    key: 'prerequisiteCases',\n    label: 'Prerequisite Case',\n    placeholder: 'Select',\n    searchable: true,\n    multiple: true,\n    optionStyle: 'checkbox',\n    showSelectAll: true,\n    selectAllLabel: 'All',\n    options: [\n      { value: 'TC-001', name: 'TC-001: Login flow' },\n      { value: 'TC-002', name: 'TC-002: User registration' },\n      { value: 'TC-003', name: 'TC-003: Password reset' },\n      { value: 'TC-004', name: 'TC-004: Dashboard load' },\n      { value: 'TC-005', name: 'TC-005: API health check' },\n    ],\n  };\n\n  readonly defaultViewportSelectConfig: DynamicSelectFieldConfig = {\n    key: 'defaultViewport',\n    label: 'Default Viewport',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { value: '1280x720', name: '1280x720' },\n    ],\n  };\n\n  readonly deviceTypeSelectConfig: DynamicSelectFieldConfig = {\n    key: 'deviceType',\n    label: 'Device Type',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { value: 'iPhone 14', name: 'iPhone 14' },\n      { value: 'iPhone 15', name: 'iPhone 15' },\n      { value: 'iPhone 17', name: 'iPhone 17' },\n      { value: 'Iphone 17', name: 'Iphone 17' },\n      { value: 'Samsung Galaxy', name: 'Samsung Galaxy' },\n      { value: 'Pixel', name: 'Pixel' },\n    ],\n  };\n\n  readonly deviceOSSelectConfig: DynamicSelectFieldConfig = {\n    key: 'deviceOS',\n    label: 'OS',\n    placeholder: 'Select',\n    searchable: false,\n    options: [\n      { value: 'ipa', name: 'iOS (ipa)' },\n      { value: 'apk', name: 'Android (apk)' },\n      { value: 'iOS 16', name: 'iOS 16' },\n      { value: 'iOS 17', name: 'iOS 17' },\n      { value: 'Android 13', name: 'Android 13' },\n      { value: 'Android 14', name: 'Android 14' },\n    ],\n  };\n\n  readonly defaultBrowserSelectConfig: DynamicSelectFieldConfig = {\n    key: 'defaultBrowser',\n    label: 'Default Browser',\n    placeholder: 'Chrome',\n    searchable: false,\n    options: [\n      { value: 'Chrome', name: 'Chrome' },\n      { value: 'Firefox', name: 'Firefox' },\n      { value: 'Safari', name: 'Safari' },\n      { value: 'Edge', name: 'Edge' },\n    ],\n  };\n\n  readonly prioritySelectConfig: DynamicSelectFieldConfig = {\n    key: 'priority',\n    label: '',\n    placeholder: 'Priority',\n    searchable: false,\n    options: [\n      { value: 'Critical', name: 'Critical' },\n      { value: 'Major', name: 'Major' },\n      { value: 'High', name: 'High' },\n      { value: 'Medium', name: 'Medium' },\n      { value: 'Low', name: 'Low' },\n      { value: 'Minor', name: 'Minor' },\n      { value: 'Not set', name: 'Not set' },\n    ],\n  };\n\n  readonly enableAiSmartnessSelectConfig: DynamicSelectFieldConfig = {\n    key: 'enableAiSmartness',\n    label: 'Enable AI Smartness',\n    placeholder: 'Advanced',\n    searchable: false,\n    options: [\n      { value: 'Basic', name: 'Basic' },\n      { value: 'Advanced', name: 'Advanced' },\n      { value: 'Off', name: 'Off' },\n    ],\n  };\n\n  readonly defaultAiActionSelectConfig: DynamicSelectFieldConfig = {\n    key: 'defaultAiAction',\n    label: 'Default AI Action',\n    placeholder: 'Smart wait',\n    searchable: false,\n    options: [\n      { value: 'Smart wait', name: 'Smart wait' },\n      { value: 'Smart Wait', name: 'Smart Wait' },\n      { value: 'Wait for element', name: 'Wait for element' },\n      { value: 'Retry', name: 'Retry' },\n      { value: 'Skip', name: 'Skip' },\n    ],\n  };\n\n  readonly knowledgeBaseDefaultTestCaseSelectConfig: DynamicSelectFieldConfig = {\n    key: 'knowledgeBaseDefaultTestCase',\n    label: 'Knowledge Base Default Test Case',\n    placeholder: 'None',\n    searchable: false,\n    options: [\n      { value: 'none', name: 'None' },\n    ],\n  };\n\n  /**\n   * Returns merged config for a select: base config + override.\n   * Wires onSearch, onLoadMore to both override callbacks and output events.\n   */\n  getConfigForSelect(key: string, baseConfig: DynamicSelectFieldConfig): DynamicSelectFieldConfig {\n    const override = this.selectConfigOverrides?.[key];\n    if (!override) return baseConfig;\n\n    const merged: DynamicSelectFieldConfig = {\n      ...baseConfig,\n      ...override,\n      options: override.options ?? baseConfig.options,\n      key: baseConfig.key,\n    };\n\n    if (override.serverSearch || override.onSearch) {\n      merged.onSearch = (query) => {\n        override.onSearch?.(query);\n        this.selectSearch.emit({ key, query });\n      };\n    }\n    if (override.hasMore || override.onLoadMore) {\n      merged.onLoadMore = (query?: string) => {\n        const q = query ?? '';\n        override.onLoadMore?.(q);\n        this.selectLoadMore.emit({ key, query: q });\n      };\n    }\n\n    return merged;\n  }\n\n  onSelectOpened(key: string): void {\n    this.selectOpened.emit({ key });\n  }\n\n  onSelectSearch(event: { key: string; query: string }): void {\n    this.selectSearch.emit(event);\n    const override = this.selectConfigOverrides?.[event.key];\n    override?.onSearch?.(event.query);\n  }\n\n  onSelectLoadMore(event: { key: string; query: string }): void {\n    this.selectLoadMore.emit(event);\n    const override = this.selectConfigOverrides?.[event.key];\n    override?.onLoadMore?.(event.query);\n  }\n\n  onSelectionChange(event: { key: string; value: unknown }): void {\n    if (event.key === TEST_CASE_DETAILS_SELECT_KEYS.labels) {\n      const val = event.value;\n      this.editLabels = Array.isArray(val) ? val.map((v) => String(v)).filter(Boolean) : val != null ? [String(val)] : [];\n      this._labelsSelectConfigDirty = true;\n      this.cdr.markForCheck();\n    }\n    // Mark Test Data selects as dirty so later input changes (options/config) don't overwrite user choice\n    if (event.key === TEST_CASE_DETAILS_SELECT_KEYS.testDataProfile || event.key === TEST_CASE_DETAILS_SELECT_KEYS.testDataSet) {\n      const ctrl = this.editForm.get(event.key);\n      ctrl?.markAsDirty();\n    }\n    this.selectionChange.emit({ key: event.key, value: event.value });\n  }\n\n  onLabelsAddCustomValue(event: { key: string; value: string }): void {\n    const v = (event.value || '').trim();\n    if (!v || this.editLabels.includes(v)) return;\n    this.editLabels = [...this.editLabels, v];\n    this._labelsSelectConfigDirty = true;\n    this.editForm.get(TEST_CASE_DETAILS_SELECT_KEYS.labels)?.setValue(this.editLabels, { emitEvent: false });\n    this.labelAdded.emit(v);\n    this.cdr.markForCheck();\n  }\n\n  private getConfigItemValue(sectionTitle: string, itemLabel: string): string {\n    const section = [...this.configSections, ...this.configSectionsRow2].find(\n      (s) =>\n        s.title === sectionTitle ||\n        s.title?.toLowerCase().includes(sectionTitle.toLowerCase())\n    );\n    const item = section?.items?.find(\n      (i) =>\n        i.label === itemLabel ||\n        i.label?.toLowerCase().includes(itemLabel.toLowerCase())\n    );\n    return (item?.value as string) ?? '';\n  }\n\n  /** Get value from Device section - supports both 'Device' and 'Device Setting' titles */\n  private getDeviceConfigValue(itemLabel: string): string {\n    const val =\n      this.getConfigItemValue('Device', itemLabel) ||\n      this.getConfigItemValue('Device Setting', itemLabel);\n    return val != null && val !== '' && String(val).trim() !== '' ? String(val) : '';\n  }\n\n  /** Get value from Waits section - supports both 'Wait and retries' and 'Waits & Retries' titles */\n  private getWaitsRetriesValue(itemLabel: string): string {\n    const v1 = this.getConfigItemValue('Wait and retries', itemLabel);\n    const v2 = this.getConfigItemValue('Waits & Retries', itemLabel);\n    let val = (v1 !== '' && v1 != null) ? v1 : v2;\n\n    // When values are coming from organization settings, the portal wraps them as\n    // \"Org Level (ACTUAL VALUE)\". For edit inputs (Retry Failed Steps, Test Case Timeout,\n    // Wait Timeout for Locators), we only want to show the inner value, not the wrapper.\n    if (val != null) {\n      const raw = String(val).trim();\n      const lower = raw.toLowerCase();\n      const prefix = 'org level (';\n      if (lower.startsWith(prefix)) {\n        const openIdx = raw.indexOf('(');\n        const closeIdx = raw.lastIndexOf(')');\n        if (openIdx >= 0 && closeIdx > openIdx) {\n          val = raw.substring(openIdx + 1, closeIdx).trim();\n        } else {\n          val = raw.substring(prefix.length).trim();\n        }\n      }\n    }\n\n    return val != null && val !== '' && String(val).trim() !== '' ? String(val) : '';\n  }\n\n  /** Strip trailing 's' from value (e.g. \"10s\" -> \"10\") for display in timeout inputs */\n  private stripTrailingUnitS(val: string): string {\n    if (val == null || val === '') return val;\n    const s = String(val).trim();\n    return s.replace(/\\s*s$/i, '');\n  }\n\n  readonly testCaseTimeoutModeOptions: DropdownOption[] = [\n    { label: 'ORG level', value: 'org' },\n    { label: 'Custom', value: 'custom' },\n  ];\n\n  /** Value shown in the disabled (org) or enabled (custom) Test Case Timeout input. */\n  get testCaseTimeoutDisplayValue(): string {\n    if (this.testCaseTimeoutMode === 'org') {\n      return this.orgLevelTestCaseTimeout != null ? String(this.orgLevelTestCaseTimeout) : '';\n    }\n    return this.testCaseTimeout;\n  }\n\n  onTestCaseTimeoutModeChange(mode: 'org' | 'custom'): void {\n    this.testCaseTimeoutMode = mode;\n    this.cdr.markForCheck();\n  }\n\n  /** True when the portal wrapped the Test Case Timeout value as \"Org Level (...)\", meaning the TC API returned null. */\n  private isTestCaseTimeoutFromOrg(): boolean {\n    const raw =\n      this.getConfigItemValue('Wait and retries', 'Test Case Timeout (minutes)') ||\n      this.getConfigItemValue('Waits & Retries', 'Test Case Timeout (minutes)');\n    return raw.trim().toLowerCase().startsWith(ORG_LEVEL_SENTINEL.toLowerCase());\n  }\n\n  /** Allow only digits; used for Retry Failed Steps, Test Case Timeout, Wait Timeout inputs */\n  onlyDigits(val: string): string {\n    if (val == null || val === '') return '';\n    return String(val).replace(/\\D/g, '');\n  }\n\n  /** For update: use \"0\" when value is empty so API gets a number */\n  private emptyNumToZero(val: string): string {\n    if (val == null || String(val).trim() === '') return '0';\n    return String(val).trim();\n  }\n\n  private getPrerequisiteCasesFromConfig(): string[] {\n    const val = this.getConfigItemValue('Execution', 'Prerequisite Case');\n    if (!val) return [];\n    return val.includes(',') ? val.split(',').map((s) => s.trim()).filter(Boolean) : [val];\n  }\n\n  /** Edit mode should show placeholder when dataset is not selected. */\n  private normalizeTestDataSetRawValue(value: string): string {\n    return value?.trim().toLowerCase() === 'not set' ? '' : value;\n  }\n\n  get hasPrerequisiteCaseConfig(): boolean {\n    const section = [...this.configSections, ...this.configSectionsRow2].find(\n      (s) => s.title === 'Execution'\n    );\n    return !!section?.items?.some((i) => i.label === 'Prerequisite Case');\n  }\n\n  private initViewportFromValue(defaultViewport: string): void {\n    const vp = String(defaultViewport || '');\n    this.customViewportWidth = '';\n    this.customViewportHeight = '';\n    this.customViewportTags = [];\n    this.viewportDesktopDeviceForm.reset({ viewportDesktopDevice: '' });\n    this.viewportLaptopDeviceForm.reset({ viewportLaptopDevice: '' });\n    this.viewportTabletDeviceForm.reset({ viewportTabletDevice: '' });\n    this.viewportMobileDeviceForm.reset({ viewportMobileDevice: '' });\n\n    if (vp.startsWith('laptop:')) {\n      this.viewportMode = 'laptop';\n      this.viewportLaptopDeviceForm.patchValue({ viewportLaptopDevice: vp.slice(7).trim() });\n    } else if (vp.startsWith('tablet:')) {\n      this.viewportMode = 'tablet';\n      this.viewportTabletDeviceForm.patchValue({ viewportTabletDevice: vp.slice(7).trim() });\n    } else if (vp.startsWith('desktop:')) {\n      this.viewportMode = 'desktop';\n      this.viewportDesktopDeviceForm.patchValue({ viewportDesktopDevice: vp.slice(8).trim() });\n    } else if (vp.startsWith('mobile:')) {\n      this.viewportMode = 'mobile';\n      this.viewportMobileDeviceForm.patchValue({ viewportMobileDevice: vp.slice(7).trim() });\n    } else if (vp && vp.includes('*')) {\n      this.viewportMode = 'custom';\n      this.customViewportTags = vp.split(',').map((v) => v.trim()).filter(Boolean);\n    } else {\n      this.viewportMode = 'desktop';\n    }\n  }\n\n  private buildViewportValue(): string {\n    if (this.viewportMode === 'laptop') {\n      const res = (this.viewportLaptopDeviceForm.get('viewportLaptopDevice')?.value ?? '').trim();\n      return res ? `laptop:${res}` : 'laptop:';\n    }\n    if (this.viewportMode === 'tablet') {\n      const res = (this.viewportTabletDeviceForm.get('viewportTabletDevice')?.value ?? '').trim();\n      return res ? `tablet:${res}` : 'tablet:';\n    }\n    if (this.viewportMode === 'mobile') {\n      const device = (this.viewportMobileDeviceForm.get('viewportMobileDevice')?.value ?? '').trim();\n      return device ? `mobile:${device}` : 'mobile:';\n    }\n    if (this.viewportMode === 'custom') {\n      return this.customViewportTags.join(',');\n    }\n    // desktop\n    const res = (this.viewportDesktopDeviceForm.get('viewportDesktopDevice')?.value ?? '').trim();\n    return res ? `desktop:${res}` : '1280x720';\n  }\n\n  onViewportModeChange(mode: ViewportMode): void {\n    this.viewportMode = mode;\n    if (mode !== 'desktop') this.viewportDesktopDeviceForm.reset({ viewportDesktopDevice: '' });\n    if (mode !== 'laptop') this.viewportLaptopDeviceForm.reset({ viewportLaptopDevice: '' });\n    if (mode !== 'tablet') this.viewportTabletDeviceForm.reset({ viewportTabletDevice: '' });\n    if (mode !== 'mobile') this.viewportMobileDeviceForm.reset({ viewportMobileDevice: '' });\n    if (mode !== 'custom') {\n      this.customViewportWidth = '';\n      this.customViewportHeight = '';\n      this.customViewportTags = [];\n    }\n    this.cdr.markForCheck();\n  }\n\n  private applyViewportCategoryOptions(): void {\n    const opts = this.viewportCategoryOptions || {};\n    if (opts.DESKTOP) this.desktopViewportConfig = { ...this.desktopViewportConfig, options: opts.DESKTOP };\n    if (opts.LAPTOP) this.laptopViewportConfig = { ...this.laptopViewportConfig, options: opts.LAPTOP };\n    if (opts.TABLET) this.tabletViewportConfig = { ...this.tabletViewportConfig, options: opts.TABLET };\n    if (opts.MOBILE) this.mobileViewportConfig = { ...this.mobileViewportConfig, options: opts.MOBILE };\n    this.cdr.markForCheck();\n  }\n\n  addViewportCustomTag(): void {\n    const w = (this.customViewportWidth || '').trim();\n    const h = (this.customViewportHeight || '').trim();\n    if (!w || !h) return;\n    const tag = `${w}*${h}`;\n    if (!this.customViewportTags.includes(tag)) {\n      this.customViewportTags = [...this.customViewportTags, tag];\n    }\n    this.customViewportWidth = '';\n    this.customViewportHeight = '';\n    this.cdr.markForCheck();\n  }\n\n  removeViewportCustomTag(index: number): void {\n    this.customViewportTags = this.customViewportTags.filter((_, i) => i !== index);\n    this.cdr.markForCheck();\n  }\n\n  ngOnInit(): void {\n    this.editDescription = this.descriptionContent;\n    this.editStatus = this.statusItem?.value ?? '';\n    this.editPriority = this.priorityItem?.value ?? '';\n    const typeRaw = (this.getConfigItemValue('Execution', 'Type') || (this.typeItem?.value as string)) ?? '';\n    const testDataProfileRaw = this.getConfigItemValue('Execution', 'Test Data Profile') ?? '';\n    const testDataSetRaw = this.normalizeTestDataSetRawValue(\n      this.getConfigItemValue('Execution', 'Test Data Set') ?? ''\n    );\n    const typeVal = this.resolveToOptionValue(typeRaw, this.selectConfigOverrides?.['type']?.options) ?? typeRaw;\n    const testDataProfileVal = this.resolveToOptionValue(testDataProfileRaw, this.selectConfigOverrides?.['testDataProfile']?.options) ?? testDataProfileRaw;\n    const testDataSetVal = this.resolveToOptionValue(testDataSetRaw, this.selectConfigOverrides?.['testDataSet']?.options) ?? testDataSetRaw;\n    this.editLabels = [...this.labels];\n    const autoWaitVal = this.getWaitsRetriesValue('Enable Avoid Auto wait for steps') || this.getConfigItemValue('Waits & Retries', 'Auto Wait');\n    this.autoWaitEnabled = !!(autoWaitVal && autoWaitVal.trim() !== '' && String(autoWaitVal) !== 'false');\n    this.retryFailedSteps = this.getWaitsRetriesValue('Retry Failed Steps');\n    this.testCaseTimeoutMode = this.isTestCaseTimeoutFromOrg() ? 'org' : 'custom';\n    this.testCaseTimeout = this.stripTrailingUnitS(this.getWaitsRetriesValue('Test Case Timeout (minutes)'));\n    this.waitTimeoutLocators = this.stripTrailingUnitS(this.getWaitsRetriesValue('Wait Timeout for Locators (secs)'));\n    this.mobileTestingEnabled = !!this.getConfigItemValue('Key Flags', 'Mobile Testing');\n    this.extensionUseEnabled = !!this.getConfigItemValue('Key Flags', 'Extension Use');\n    this.dataDrivenEnabled = !!this.getConfigItemValue('Key Flags', 'Data Driven');\n    const enableAiSmartness = this.getConfigItemValue('AI Configuration', 'Enable AI Smartness');\n    const defaultAiAction = this.getConfigItemValue('AI Configuration', 'Default AI Action');\n    const knowledgeBaseDefaultTestCaseRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');\n    const knowledgeBaseDefaultTestCase = this.resolveToOptionValue(knowledgeBaseDefaultTestCaseRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? knowledgeBaseDefaultTestCaseRaw;\n    const useAiMetadataRaw = this.getConfigItemValue('AI Configuration', 'Enable AI metadata collection');\n    const useAiMetadata = this.normalizeBooleanSelectValue(useAiMetadataRaw);\n    const prerequisiteCases = this.getPrerequisiteCasesFromConfig();\n    const defaultBrowser =\n      this.platform === 'web'\n        ? this.getDeviceConfigValue('Default Browser') || this.getConfigItemValue('Execution', 'Default Browser')\n        : this.getConfigItemValue('Execution', 'Default Browser');\n    const videoRecordingRaw = this.getConfigItemValue('Execution', 'Video Recording');\n    const videoRecording = this.normalizeBooleanSelectValue(videoRecordingRaw as string | boolean | undefined);\n    const defaultViewport = this.getDeviceConfigValue('Default Viewport') || this.getDeviceConfigValue('Viewport') || '';\n    const deviceType = this.getConfigItemValue('Device', 'Type');\n    const deviceOS = this.getConfigItemValue('Device', 'OS');\n    this.initViewportFromValue(defaultViewport);\n    this._labelsSelectConfigDirty = true;\n    this.editApiMockingRestoreMock = !!this.apiMockingRestoreMock;\n    this.editApiMockingStoreMock = !!this.apiMockingStoreMock;\n    this.editForm.patchValue({\n      status: this.editStatus,\n      priority: this.editPriority,\n      type: typeVal || '',\n      labels: this.editLabels,\n      testDataProfile: testDataProfileVal || '',\n      testDataSet: testDataSetVal ?? '',\n      prerequisiteCases,\n      defaultBrowser: defaultBrowser || 'Chrome',\n      videoRecording: videoRecording || '',\n      defaultViewport: defaultViewport || '',\n      deviceType: deviceType || '',\n      deviceOS: deviceOS || '',\n      enableAiSmartness: enableAiSmartness || 'Advanced',\n      defaultAiAction: defaultAiAction || 'Smart wait',\n      knowledgeBaseDefaultTestCase: knowledgeBaseDefaultTestCase || 'none',\n      useAiMetadata: useAiMetadata || '',\n    });\n    this._initialFormSnapshot = JSON.stringify(this.buildSavePayload());\n    this.cdr.markForCheck();\n  }\n\n  get hasUnsavedChanges(): boolean {\n    if (this._initialFormSnapshot == null) { return false; }\n    return JSON.stringify(this.buildSavePayload()) !== this._initialFormSnapshot;\n  }\n\n  private buildSavePayload(): TestCaseDetailsEditFormData {\n    const status = this.editForm.get('status')?.value ?? this.editStatus;\n    const priority = this.editForm.get('priority')?.value ?? this.editPriority;\n    const typeVal = this.editForm.get('type')?.value ?? '';\n    const testDataProfileVal = this.editForm.get('testDataProfile')?.value ?? '';\n    const testDataSetVal = this.editForm.get('testDataSet')?.value ?? '';\n    const configSectionsMerged = this.mergeConfigSections();\n    const configSectionsRow2Merged = this.mergeConfigSectionsRow2();\n    return {\n      descriptionContent: this.editDescription,\n      status,\n      priority,\n      type: typeVal,\n      labels: this.editLabels,\n      testDataProfileId: testDataProfileVal || null,\n      testDataSetIndex: testDataSetVal ?? null,\n      configSections: configSectionsMerged,\n      configSectionsRow2: configSectionsRow2Merged,\n      apiMockingRestoreMock: this.editApiMockingRestoreMock,\n      apiMockingStoreMock: this.editApiMockingStoreMock,\n    };\n  }\n\n  /**\n   * Handler bound to the embedded `<cqa-api-mocking-card>` `restoreMockChange` output.\n   * Keeps the local edit-mode mirror in sync (including the mutual-exclusivity rule —\n   * turning Use-mock on forces store-mock off) and re-emits to the parent so the save\n   * payload reflects the new state.\n   */\n  onApiMockingRestoreMockChange(value: boolean): void {\n    this.editApiMockingRestoreMock = value;\n    if (value && this.editApiMockingStoreMock) {\n      this.editApiMockingStoreMock = false;\n      this.apiMockingStoreMockChange.emit(false);\n    }\n    this.apiMockingRestoreMockChange.emit(value);\n    this.cdr.markForCheck();\n  }\n\n  /** Mirror handler for the \"Renew and store API responses\" toggle. Mutually exclusive with Use-mock. */\n  onApiMockingStoreMockChange(value: boolean): void {\n    this.editApiMockingStoreMock = value;\n    if (value && this.editApiMockingRestoreMock) {\n      this.editApiMockingRestoreMock = false;\n      this.apiMockingRestoreMockChange.emit(false);\n    }\n    this.apiMockingStoreMockChange.emit(value);\n    this.cdr.markForCheck();\n  }\n\n  private resolveToOptionValue(\n    configValue: string | number | undefined,\n    options: SelectOption[] | undefined\n  ): string | number | undefined {\n    if (configValue == null || configValue === '') return configValue;\n    const opts = options ?? [];\n    if (!opts.length) return configValue;\n    const num = typeof configValue === 'number' ? configValue : Number(configValue);\n    const isNumeric = !Number.isNaN(num) && String(configValue).trim() === String(num);\n    if (isNumeric) {\n      // If options use numeric values (e.g. indices for Test Data Set),\n      // return the numeric form so the select can match by strict equality.\n      const hasNumericOption = opts.some(\n        (o) => typeof o.value === 'number' || typeof (o as any).id === 'number'\n      );\n      return hasNumericOption ? num : configValue;\n    }\n    const str = String(configValue).trim().toLowerCase();\n    const match = opts.find((o) => {\n      const n = String(o.name ?? o.label ?? o.value ?? '').trim().toLowerCase();\n      return n === str;\n    });\n    return match != null ? (match.value ?? (match as any).id ?? match) : configValue;\n  }\n\n  private normalizeBooleanSelectValue(val: string | boolean | undefined): string {\n    if (val === true || val === 'true') return 'true';\n    if (val === false || val === 'false') return 'false';\n    if (\n      val === 'Org level' ||\n      val === 'Org Level' ||\n      (typeof val === 'string' && val.trim().toLowerCase().startsWith('org level ('))\n    ) {\n      return 'Org level';\n    }\n    if (val === 'On Wait' || val === 'on wait') return 'true';\n    return val && String(val).trim() ? String(val) : '';\n  }\n\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['labels'] || changes['selectConfigOverrides']) {\n      this._labelsSelectConfigDirty = true;\n      if (changes['selectConfigOverrides'] && this.editForm?.get('type')) {\n        const typeCtrl = this.editForm.get('type');\n        const tdpCtrl = this.editForm.get('testDataProfile');\n        const tdsCtrl = this.editForm.get('testDataSet');\n        const enableAiCtrl = this.editForm.get('enableAiSmartness');\n        const defaultAiCtrl = this.editForm.get('defaultAiAction');\n        const patch: Record<string, string | number> = {} as Record<string, string | number>;\n        if (typeCtrl && !typeCtrl.dirty) {\n          const typeRaw = (this.getConfigItemValue('Execution', 'Type') || (this.typeItem?.value as string)) ?? '';\n          patch['type'] = (this.resolveToOptionValue(typeRaw, this.selectConfigOverrides?.['type']?.options) ?? typeRaw) || '';\n        }\n        // For Test Data Profile / Set, allow one-time re-resolve from config when options arrive,\n        // but never overwrite a user-edited (dirty) value.\n        if (tdpCtrl && !tdpCtrl.dirty) {\n          const testDataProfileRaw = this.getConfigItemValue('Execution', 'Test Data Profile') ?? '';\n          patch['testDataProfile'] =\n            (this.resolveToOptionValue(testDataProfileRaw, this.selectConfigOverrides?.['testDataProfile']?.options) ??\n              testDataProfileRaw) || '';\n        }\n        if (tdsCtrl && !tdsCtrl.dirty) {\n          const testDataSetRaw = this.normalizeTestDataSetRawValue(\n            this.getConfigItemValue('Execution', 'Test Data Set') ?? ''\n          );\n          patch['testDataSet'] =\n            this.resolveToOptionValue(testDataSetRaw, this.selectConfigOverrides?.['testDataSet']?.options) ??\n            testDataSetRaw ?? '';\n        }\n        // Re-resolve AI fields when their options arrive (they use display names as values).\n        if (enableAiCtrl && !enableAiCtrl.dirty) {\n          const aiSmartnessRaw = this.getConfigItemValue('AI Configuration', 'Enable AI Smartness');\n          if (aiSmartnessRaw) patch['enableAiSmartness'] = aiSmartnessRaw;\n        }\n        if (defaultAiCtrl && !defaultAiCtrl.dirty) {\n          const defaultAiRaw = this.getConfigItemValue('AI Configuration', 'Default AI Action');\n          if (defaultAiRaw) patch['defaultAiAction'] = defaultAiRaw;\n        }\n        const kbCtrl = this.editForm.get('knowledgeBaseDefaultTestCase');\n        if (kbCtrl && !kbCtrl.dirty) {\n          const kbRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');\n          const kbResolved = this.resolveToOptionValue(kbRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? kbRaw;\n          if (kbResolved) patch['knowledgeBaseDefaultTestCase'] = kbResolved;\n        }\n        if (Object.keys(patch).length) {\n          this.editForm.patchValue(patch, { emitEvent: false });\n        }\n      }\n    }\n    if (changes['descriptionContent'] || changes['labels'] || changes['metadataItems']) {\n      this.editDescription = this.descriptionContent;\n      this.editLabels = [...this.labels];\n      this.editStatus = this.statusItem?.value ?? '';\n      this.editPriority = this.priorityItem?.value ?? '';\n      const typeVal = (this.getConfigItemValue('Execution', 'Type') || (this.typeItem?.value as string)) ?? '';\n      const statusControl = this.editForm.get('status');\n      const priorityControl = this.editForm.get('priority');\n      const typeControl = this.editForm.get('type');\n      const labelsControl = this.editForm.get(TEST_CASE_DETAILS_SELECT_KEYS.labels);\n      const preserveStatus = statusControl?.touched || statusControl?.dirty;\n      const preservePriority = priorityControl?.touched || priorityControl?.dirty;\n      const preserveType = typeControl?.touched || typeControl?.dirty;\n      const preserveLabels = labelsControl?.touched || labelsControl?.dirty;\n      this.editForm.patchValue({\n        ...(preserveStatus ? {} : { status: this.editStatus }),\n        ...(preservePriority ? {} : { priority: this.editPriority }),\n        ...(preserveType ? {} : { type: typeVal }),\n        ...(preserveLabels ? {} : { labels: this.editLabels }),\n      });\n    }\n    if (changes['prerequisiteCaseOptions'] && this.prerequisiteCaseOptions.length) {\n      this.prerequisiteCaseSelectConfig = {\n        ...this.prerequisiteCaseSelectConfig,\n        options: this.prerequisiteCaseOptions,\n      };\n    }\n    if (changes['viewportCategoryOptions']) {\n      this.applyViewportCategoryOptions();\n    }\n    if (changes['configSections'] || changes['configSectionsRow2']) {\n      const enableAiSmartness = this.getConfigItemValue('AI Configuration', 'Enable AI Smartness');\n      const defaultAiAction = this.getConfigItemValue('AI Configuration', 'Default AI Action');\n      const knowledgeBaseDefaultTestCaseRaw = this.getConfigItemValue('AI Configuration', 'Knowledge Base Default Test Case');\n      const knowledgeBaseDefaultTestCase = this.resolveToOptionValue(knowledgeBaseDefaultTestCaseRaw, this.selectConfigOverrides?.['knowledgeBaseDefaultTestCase']?.options) ?? knowledgeBaseDefaultTestCaseRaw;\n      const prerequisiteCases = this.getPrerequisiteCasesFromConfig();\n      const typeRaw = (this.getConfigItemValue('Execution', 'Type') || (this.typeItem?.value as string)) ?? '';\n      const testDataProfileRaw = this.getConfigItemValue('Execution', 'Test Data Profile') ?? '';\n      const testDataSetRaw = this.normalizeTestDataSetRawValue(\n        this.getConfigItemValue('Execution', 'Test Data Set') ?? ''\n      );\n      const typeVal = this.resolveToOptionValue(typeRaw, this.selectConfigOverrides?.['type']?.options) ?? typeRaw;\n      const testDataProfileVal = this.resolveToOptionValue(testDataProfileRaw, this.selectConfigOverrides?.['testDataProfile']?.options) ?? testDataProfileRaw;\n      const testDataSetVal = this.resolveToOptionValue(testDataSetRaw, this.selectConfigOverrides?.['testDataSet']?.options) ?? testDataSetRaw;\n      const defaultBrowser = this.getConfigItemValue('Execution', 'Default Browser');\n      const videoRecordingRaw = this.getConfigItemValue('Execution', 'Video Recording');\n      const videoRecording = this.normalizeBooleanSelectValue(videoRecordingRaw as string | boolean | undefined);\n      const useAiMetadataRaw = this.getConfigItemValue('AI Configuration', 'Enable AI metadata collection');\n      const useAiMetadata = this.normalizeBooleanSelectValue(useAiMetadataRaw as string | boolean | undefined);\n      const defaultViewport = this.getDeviceConfigValue('Default Viewport') || this.getDeviceConfigValue('Viewport') || '';\n      const deviceType = this.getConfigItemValue('Device', 'Type');\n      const deviceOS = this.getConfigItemValue('Device', 'OS');\n      this.initViewportFromValue(defaultViewport);\n      const autoWaitVal = this.getWaitsRetriesValue('Enable Avoid Auto wait for steps') || this.getConfigItemValue('Waits & Retries', 'Auto Wait');\n      this.autoWaitEnabled = !!(autoWaitVal && autoWaitVal.trim() !== '' && String(autoWaitVal) !== 'false');\n      this.retryFailedSteps = this.getWaitsRetriesValue('Retry Failed Steps');\n      this.testCaseTimeoutMode = this.isTestCaseTimeoutFromOrg() ? 'org' : 'custom';\n      this.testCaseTimeout = this.stripTrailingUnitS(this.getWaitsRetriesValue('Test Case Timeout (minutes)'));\n      this.waitTimeoutLocators = this.stripTrailingUnitS(this.getWaitsRetriesValue('Wait Timeout for Locators (secs)'));\n      this.mobileTestingEnabled = !!this.getConfigItemValue('Key Flags', 'Mobile Testing');\n      this.extensionUseEnabled = !!this.getConfigItemValue('Key Flags', 'Extension Use');\n      this.dataDrivenEnabled = !!this.getConfigItemValue('Key Flags', 'Data Driven');\n      this.cdr.markForCheck();\n      const patch: Record<string, unknown> = {};\n      if (enableAiSmartness) patch['enableAiSmartness'] = enableAiSmartness;\n      if (defaultAiAction) patch['defaultAiAction'] = defaultAiAction;\n      if (knowledgeBaseDefaultTestCase) patch['knowledgeBaseDefaultTestCase'] = knowledgeBaseDefaultTestCase;\n      if (useAiMetadata) patch['useAiMetadata'] = useAiMetadata;\n      if (prerequisiteCases.length) patch['prerequisiteCases'] = prerequisiteCases;\n      if (typeVal) patch['type'] = typeVal;\n\n      // Re-sync Test Data Profile / Set from config only when controls are NOT dirty\n      const tdpCtrl2 = this.editForm.get('testDataProfile');\n      const tdsCtrl2 = this.editForm.get('testDataSet');\n      const preserveTdp2 = tdpCtrl2?.dirty;\n      const preserveTds2 = tdsCtrl2?.dirty;\n\n      if (testDataProfileVal && !preserveTdp2) patch['testDataProfile'] = testDataProfileVal;\n      if (testDataSetVal != null && testDataSetVal !== '' && !preserveTds2) patch['testDataSet'] = testDataSetVal;\n      if (defaultBrowser) patch['defaultBrowser'] = defaultBrowser;\n      if (videoRecording) patch['videoRecording'] = videoRecording;\n      if (defaultViewport) patch['defaultViewport'] = defaultViewport;\n      if (deviceType) patch['deviceType'] = deviceType;\n      if (deviceOS) patch['deviceOS'] = deviceOS;\n      if (Object.keys(patch).length) this.editForm.patchValue(patch);\n    }\n  }\n\n  onRemoveLabel(label: string): void {\n    this.editLabels = this.editLabels.filter((l) => l !== label);\n    this._labelsSelectConfigDirty = true;\n    this.editForm.get(TEST_CASE_DETAILS_SELECT_KEYS.labels)?.setValue(this.editLabels, { emitEvent: false });\n    this.cdr.markForCheck();\n  }\n\n  onClearAllLabels(): void {\n    this.editLabels = [];\n    this._labelsSelectConfigDirty = true;\n    this.editForm.get(TEST_CASE_DETAILS_SELECT_KEYS.labels)?.setValue([], { emitEvent: false });\n    this.cdr.markForCheck();\n  }\n\n  onAddFrequentLabel(label: string): void {\n    if (!this.editLabels.includes(label)) {\n      this.editLabels = [...this.editLabels, label];\n      this._labelsSelectConfigDirty = true;\n      this.editForm.get(TEST_CASE_DETAILS_SELECT_KEYS.labels)?.setValue(this.editLabels, { emitEvent: false });\n      this.cdr.markForCheck();\n    }\n  }\n\n  onSave(): void {\n    this.save.emit(this.buildSavePayload());\n  }\n\n  private mergeConfigSections(): TestCaseDetailsConfigSection[] {\n    const platform = this.platform;\n    const videoRecordingValue = this.editForm.get('videoRecording')?.value ?? '';\n    const videoRecording = videoRecordingValue === 'true' ? true : videoRecordingValue === 'false' ? false : videoRecordingValue;\n    const useAiMetadataValue = this.editForm.get('useAiMetadata')?.value ?? '';\n    const useAiMetadata = useAiMetadataValue === 'true' ? true : useAiMetadataValue === 'false' ? false : useAiMetadataValue;\n    const prerequisiteCasesRaw = this.editForm.get('prerequisiteCases')?.value;\n    const prerequisiteCases = Array.isArray(prerequisiteCasesRaw)\n      ? prerequisiteCasesRaw.map((v) => String(v)).filter(Boolean)\n      : prerequisiteCasesRaw != null && prerequisiteCasesRaw !== ''\n        ? [String(prerequisiteCasesRaw)]\n        : [];\n    const prerequisiteCaseValue = prerequisiteCases.length ? prerequisiteCases.join(',') : null;\n    const typeValue = this.editForm.get('type')?.value ?? '';\n    const testDataProfileValue = this.editForm.get('testDataProfile')?.value ?? '';\n    const testDataSetValue = this.editForm.get('testDataSet')?.value ?? '';\n    return this.configSections.map((section) => {\n      if (section.title === 'Execution') {\n        const items = section.items\n          .filter((item) => !(platform === 'web' && item.label === 'Default Browser'))\n          .map((item) => {\n            if (item.label === 'Video Recording') return { ...item, value: videoRecording };\n            if (item.label === 'Prerequisite Case') return { ...item, value: prerequisiteCaseValue };\n            if (item.label === 'Type') return { ...item, value: typeValue };\n            if (item.label === 'Test Data Profile') return { ...item, value: testDataProfileValue };\n            if (item.label === 'Test Data Set') return { ...item, value: testDataSetValue };\n            return item;\n          });\n        return { ...section, items };\n      }\n      if (section.title === 'AI Configuration') {\n        const enableAiSmartnessValue = this.editForm.get('enableAiSmartness')?.value;\n        const defaultAiActionValue = this.editForm.get('defaultAiAction')?.value;\n        const knowledgeBaseValue = this.editForm.get('knowledgeBaseDefaultTestCase')?.value;\n        const items = section.items.map((item) => {\n          if (item.label === 'Enable AI metadata collection') return { ...item, value: useAiMetadata };\n          if (item.label === 'Enable AI Smartness' && enableAiSmartnessValue != null && enableAiSmartnessValue !== '') return { ...item, value: enableAiSmartnessValue };\n          if (item.label === 'Default AI Action' && defaultAiActionValue != null && defaultAiActionValue !== '') return { ...item, value: defaultAiActionValue };\n          if (item.label === 'Knowledge Base Default Test Case' && knowledgeBaseValue != null && knowledgeBaseValue !== '') return { ...item, value: knowledgeBaseValue };\n          return item;\n        });\n        return { ...section, items };\n      }\n      return section;\n    });\n  }\n\n  private mergeConfigSectionsRow2(): TestCaseDetailsConfigSection[] {\n    const platform = this.platform;\n    const defaultBrowser = this.editForm.get('defaultBrowser')?.value ?? '';\n    const defaultViewport = this.buildViewportValue();\n    const deviceType = this.editForm.get('deviceType')?.value ?? '';\n    const deviceOS = this.editForm.get('deviceOS')?.value ?? '';\n\n    let result = this.configSectionsRow2.map((section) => {\n      if (section.title === 'Waits & Retries' || section.title === 'Wait and retries') {\n        const autoWaitValue = this.autoWaitEnabled ? 'Enabled' : '';\n        const items = section.items.map((item) => {\n          if (item.label === 'Auto Wait') return { ...item, value: autoWaitValue };\n          if (item.label === 'Enable Avoid Auto wait for steps') return { ...item, value: this.autoWaitEnabled };\n          if (item.label === 'Retry Failed Steps') return { ...item, value: this.emptyNumToZero(this.retryFailedSteps) };\n          if (item.label === 'Test Case Timeout (minutes)') {\n            const trimmed = (this.testCaseTimeout ?? '').toString().trim();\n            const value = this.testCaseTimeoutMode === 'org' || trimmed === '' ? ORG_LEVEL_SENTINEL : trimmed;\n            return { ...item, value };\n          }\n          if (item.label === 'Wait Timeout for Locators (secs)') return { ...item, value: this.emptyNumToZero(this.waitTimeoutLocators) };\n          return item;\n        });\n        return { ...section, items };\n      }\n      if (section.title === 'Device' || section.title === 'Device Setting') {\n        const items: { label: string; value: string }[] = [\n          ...(platform === 'web'\n            ? [\n                { label: 'Default Browser', value: defaultBrowser },\n                { label: 'Default Viewport', value: defaultViewport },\n              ]\n            : [\n                { label: 'Type', value: deviceType },\n                { label: 'OS', value: deviceOS },\n              ]),\n        ];\n        return { ...section, items };\n      }\n      return section;\n    });\n\n    const existingDevice = result.find((s) => s.title === 'Device' || s.title === 'Device Setting');\n    if (!existingDevice) {\n      const deviceSection: TestCaseDetailsConfigSection = {\n        title: 'Device',\n        icon: 'devices',\n        items: [\n          ...(platform === 'web'\n            ? [\n                { label: 'Default Browser', value: defaultBrowser },\n                { label: 'Default Viewport', value: defaultViewport },\n              ]\n            : [\n                { label: 'Type', value: deviceType },\n                { label: 'OS', value: deviceOS },\n              ]),\n        ],\n      };\n      result = [...result, deviceSection];\n    }\n\n    const keyFlagsSection: TestCaseDetailsConfigSection = {\n      title: 'Key Flags',\n      icon: 'flag',\n      items: [\n        { label: 'Mobile Testing', value: this.mobileTestingEnabled ? 'Enabled' : '' },\n        { label: 'Extension Use', value: this.extensionUseEnabled ? 'Enabled' : '' },\n        { label: 'Data Driven', value: this.dataDrivenEnabled ? 'Enabled' : '' },\n      ],\n    };\n    const existingKeyFlags = result.find((s) => s.title === 'Key Flags');\n    if (existingKeyFlags) {\n      result = result.map((s) =>\n        s.title === 'Key Flags' ? keyFlagsSection : s\n      );\n    } else {\n      result = [...result, keyFlagsSection];\n    }\n    return result;\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n  }\n\n  trackByLabel(_i: number, label: string): string {\n    return label;\n  }\n\n  trackByConfigTitle(_i: number, section: TestCaseDetailsConfigSection): string {\n    return section.title;\n  }\n\n  /** Current labels use consistent indigo style */\n  private readonly LABEL_CHIP_STYLE = {\n    bg: '#6366F1',\n    border: '#6366F1',\n    text: '#FFFFFF',\n    icon: '#FFFFFF',\n  };\n\n  getCurrentLabelChipStyle(_label: string): { [key: string]: string } {\n    const colors = this.LABEL_CHIP_STYLE;\n    return {\n      'background-color': colors.bg,\n      'border-color': colors.border,\n      'border-width': '1px',\n      'border-style': 'solid',\n      color: colors.text,\n    };\n  }\n\n  getLabelCloseIconColor(_label: string): string {\n    return this.LABEL_CHIP_STYLE.icon;\n  }\n}\n","<div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px] cqa-rounded-lg cqa-border cqa-border-[#E2E8F0] cqa-py-4\">\n  <!-- Basic details: Description, Status/Priority/Type, Labels (light background container) -->\n  <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-rounded-lg cqa-border cqa-border-[#E2E8F0] cqa-bg-[#F8F9FE] cqa-p-4\">\n  <!-- Description (Figma: document icon, textarea with light purple bg) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n        <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n      </div>\n      <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n    </div>\n    <cqa-custom-textarea\n      [value]=\"editDescription\"\n      (valueChange)=\"editDescription = $event\"\n      [fullWidth]=\"true\"\n      [rows]=\"4\"\n      [enableMarkdown]=\"enableMarkdown\"\n      placeholder=\"Enter description...\"\n      textareaInlineStyle=\"padding: 12px; font-size: 12px; line-height: 100%\"\n      class=\"cqa-w-full\">\n    </cqa-custom-textarea>\n  </div>\n\n  <!-- Status, Priority & Type (Figma: side-by-side dropdowns, cqa-dynamic-select) -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n      <label class=\"cqa-text-[#6B7280] cqa-text-sm cqa-leading-[19.6px] cqa-font-medium\">Status</label>\n      <cqa-dynamic-select\n          [form]=\"editForm\"\n          [config]=\"getConfigForSelect('status', statusSelectConfig)\"\n          (searchChange)=\"onSelectSearch($event)\"\n          (loadMore)=\"onSelectLoadMore($event)\"\n          (selectClick)=\"onSelectOpened('status')\"\n          (selectionChange)=\"onSelectionChange($event)\"\n          class=\"cqa-w-full\"></cqa-dynamic-select>\n    </div>\n    <div *ngIf=\"!isStepGroup\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n      <label class=\"cqa-text-[#6B7280] cqa-text-sm cqa-leading-[19.6px] cqa-font-medium\">Priority</label>\n      <cqa-dynamic-select\n          [form]=\"editForm\"\n          [config]=\"getConfigForSelect('priority', prioritySelectConfig)\"\n          (searchChange)=\"onSelectSearch($event)\"\n          (loadMore)=\"onSelectLoadMore($event)\"\n          (selectClick)=\"onSelectOpened('priority')\"\n          (selectionChange)=\"onSelectionChange($event)\"\n          class=\"cqa-w-full\"></cqa-dynamic-select>\n    </div>\n    <div *ngIf=\"!isStepGroup\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n      <label class=\"cqa-text-[#6B7280] cqa-text-sm cqa-leading-[19.6px] cqa-font-medium\">Type</label>\n      <cqa-dynamic-select\n          [form]=\"editForm\"\n          [config]=\"getConfigForSelect('type', typeSelectConfig)\"\n          (searchChange)=\"onSelectSearch($event)\"\n          (loadMore)=\"onSelectLoadMore($event)\"\n          (selectClick)=\"onSelectOpened('type')\"\n          (selectionChange)=\"onSelectionChange($event)\"\n          class=\"cqa-w-full\"></cqa-dynamic-select>\n    </div>\n  </div>\n\n  <!-- Labels (Figma: Current Labels with Clear All, cqa-badge with x, Frequently used, Search) -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5\">\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between\">\n      <span class=\"cqa-text-[#374151] cqa-text-[15px] cqa-leading-[19.6px] cqa-font-medium\">Current Labels ({{ editLabels.length }})</span>\n      <button\n        type=\"button\"\n        *ngIf=\"editLabels.length > 0\"\n        class=\"cqa-text-xs cqa-text-[#DC2626] hover:cqa-underline cqa-font-normal\"\n        (click)=\"onClearAllLabels()\">\n        Clear All\n      </button>\n    </div>\n    <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\" *ngIf=\"editLabels.length > 0\">\n      <div\n        *ngFor=\"let label of editLabels; trackBy: trackByLabel\"\n        class=\"cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-px-2.5 cqa-py-1 cqa-text-xs cqa-font-medium cqa-rounded-md cqa-border\"\n        [ngStyle]=\"getCurrentLabelChipStyle(label)\">\n        <span>{{ label }}</span>\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-3.5 cqa-h-3.5 cqa-rounded hover:cqa-opacity-80 cqa-transition-opacity cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          [style.color]=\"getLabelCloseIconColor(label)\"\n          (click)=\"onRemoveLabel(label)\"\n          [attr.aria-label]=\"'Remove ' + label\">\n          <mat-icon class=\"cqa-text-[14px] cqa-w-3.5 cqa-h-3.5\">close</mat-icon>\n        </button>\n      </div>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n      <span class=\"cqa-text-[#374151] cqa-text-sm cqa-leading-[19.6px] cqa-font-medium\">Frequently used</span>\n      <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n        <button\n          *ngFor=\"let label of frequentlyUsedLabels; trackBy: trackByLabel\"\n          type=\"button\"\n          class=\"cqa-cursor-pointer\"\n          (click)=\"onAddFrequentLabel(label)\">\n          <cqa-badge\n            [label]=\"label\"\n            variant=\"default\"\n            size=\"small\"\n            backgroundColor=\"#E8E9FF\"\n            textColor=\"#3F43EE\"\n            borderColor=\"#E8E9FF\">\n          </cqa-badge>\n        </button>\n      </div>\n    </div>\n    <label class=\"cqa-text-[#374151] cqa-text-sm cqa-leading-[19.6px] cqa-font-medium\">Add labels</label>\n    <cqa-dynamic-select\n      [form]=\"editForm\"\n      [config]=\"labelsSelectConfig\"\n      (searchChange)=\"onSelectSearch($event)\"\n      (selectClick)=\"onSelectOpened('labels')\"\n      (selectionChange)=\"onSelectionChange($event)\"\n      (addCustomValue)=\"onLabelsAddCustomValue($event)\"\n      class=\"cqa-w-full\">\n    </cqa-dynamic-select>\n  </div>\n  </div>\n\n\n  <!-- Configuration (Figma: collapsible, gear icon, light background container) -->\n  <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-[12px] cqa-rounded-lg cqa-border cqa-border-[#E2E8F0] cqa-bg-[#F8F9FE] cqa-p-4\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-text-left cqa-w-full\">\n      <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n        <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n      </div>\n      <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.5px]\">{{ configTitle }}</span>\n    </div>\n\n    <div *ngIf=\"configExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-5 cqa-text-xs\">\n      <!-- Execution -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5 cqa-min-w-0 cqa-rounded-lg cqa-p-4 cqa-mb-4 cqa-border cqa-border-solid cqa-border-[#E2E8F0]\">\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          (click)=\"executionExpanded = !executionExpanded\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n              <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">play_circle</mat-icon>\n            </div>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-semibold cqa-text-[#111827]\">Execution</span>\n          </div>\n          <mat-icon class=\"cqa-text-[#64748B] cqa-text-xl cqa-w-5 cqa-h-5\">\n            {{ executionExpanded ? 'expand_less' : 'expand_more' }}\n          </mat-icon>\n        </button>\n        <div *ngIf=\"executionExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-min-w-0 cqa-w-full\">\n          <!-- <div *ngIf=\"hasPrerequisiteCaseConfig\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\"> \n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('prerequisiteCases', prerequisiteCaseSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('prerequisiteCases')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div> -->\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <label class=\"cqa-text-[#6B7280] cqa-text-xs cqa-font-medium\">Test Data Profile</label>\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('testDataProfile', testDataProfileSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('testDataProfile')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <div *ngIf=\"!isStepGroup\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <label class=\"cqa-text-[#687389] cqa-text-xs cqa-font-medium\">Test Data Set</label>\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('testDataSet', testDataSetSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('testDataSet')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <!-- <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <label class=\"cqa-text-[#6B7280] cqa-text-xs cqa-font-medium\">Video Recording</label>\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('videoRecording', videoRecordingSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('videoRecording')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div> -->\n        </div>\n      </div>\n      <!-- AI Configuration -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5 cqa-min-w-0 cqa-rounded-lg cqa-p-4 cqa-mb-4 cqa-border cqa-border-solid cqa-border-[#E2E8F0]\">\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          (click)=\"aiConfigExpanded = !aiConfigExpanded\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n              <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">smart_toy</mat-icon>\n            </div>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-semibold cqa-text-[#111827]\">AI Configuration</span>\n          </div>\n          <mat-icon class=\"cqa-text-[#64748B] cqa-text-xl cqa-w-5 cqa-h-5\">\n            {{ aiConfigExpanded ? 'expand_less' : 'expand_more' }}\n          </mat-icon>\n        </button>\n        <div *ngIf=\"aiConfigExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-py-0 cqa-min-w-0 cqa-w-full\">\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('enableAiSmartness', enableAiSmartnessSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('enableAiSmartness')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('defaultAiAction', defaultAiActionSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('defaultAiAction')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('knowledgeBaseDefaultTestCase', knowledgeBaseDefaultTestCaseSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('knowledgeBaseDefaultTestCase')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-dynamic-select\n            [form]=\"editForm\"\n            [config]=\"getConfigForSelect('useAiMetadata', aiMetadataCollectionSelectConfig)\"\n            (searchChange)=\"onSelectSearch($event)\"\n            (loadMore)=\"onSelectLoadMore($event)\"\n            (selectClick)=\"onSelectOpened('useAiMetadata')\"\n            (selectionChange)=\"onSelectionChange($event)\"\n            class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n        </div>\n      </div>\n      <!-- Waits & Retries-->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5 cqa-min-w-0 cqa-rounded-lg cqa-p-4 cqa-mb-4 cqa-border cqa-border-solid cqa-border-[#E2E8F0]\">\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          (click)=\"waitsRetriesExpanded = !waitsRetriesExpanded\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n              <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">timer</mat-icon>\n            </div>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-semibold cqa-text-[#111827]\">Wait and Retries</span>\n          </div>\n          <mat-icon class=\"cqa-text-[#64748B] cqa-text-xl cqa-w-5 cqa-h-5\">\n            {{ waitsRetriesExpanded ? 'expand_less' : 'expand_more' }}\n          </mat-icon>\n        </button>\n        <div *ngIf=\"waitsRetriesExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-min-w-0 cqa-w-full\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2.5 cqa-rounded-lg\">\n            <cqa-custom-toggle [checked]=\"autoWaitEnabled\" (checkedChange)=\"autoWaitEnabled = $event\" ariaLabel=\"Enable Avoid Auto wait for steps\"></cqa-custom-toggle>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-text-[#111827]\">Enable Avoid Auto wait for steps</span>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-custom-input\n              type=\"number\"\n              label=\"Retry Failed Steps\"\n              [value]=\"retryFailedSteps\"\n              (valueChange)=\"retryFailedSteps = onlyDigits($event)\"\n              placeholder=\"0\"\n              [fullWidth]=\"true\"\n              size=\"sm\"\n              labelInlineStyle=\"font-size: 14px; line-height: 19.6px\">\n            </cqa-custom-input>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <label class=\"cqa-font-medium cqa-text-[#374151] cqa-text-xs cqa-mb-1\" style=\"font-size: 14px; line-height: 19.6px\">\n              Test Case Timeout (minutes)\n            </label>\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-min-w-0 cqa-w-full\">\n              <div class=\"cqa-inline-flex cqa-rounded-md cqa-border cqa-border-solid cqa-border-gray-200\">\n                <cqa-dropdown-button\n                  [options]=\"testCaseTimeoutModeOptions\"\n                  [selectedValue]=\"testCaseTimeoutMode\"\n                  (selectionChange)=\"onTestCaseTimeoutModeChange($event)\">\n                </cqa-dropdown-button>\n              </div>\n              <div class=\"cqa-flex-1 cqa-min-w-0\">\n                <cqa-custom-input\n                  type=\"number\"\n                  [value]=\"testCaseTimeoutDisplayValue\"\n                  [disabled]=\"testCaseTimeoutMode === 'org'\"\n                  (valueChange)=\"testCaseTimeout = onlyDigits($event)\"\n                  placeholder=\"30\"\n                  [fullWidth]=\"true\"\n                  size=\"sm\">\n                </cqa-custom-input>\n              </div>\n            </div>\n          </div>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-min-w-0 cqa-w-full\">\n            <cqa-custom-input\n              type=\"number\"\n              label=\"Wait Timeout for Locators (sec)\"\n              [value]=\"waitTimeoutLocators\"\n              (valueChange)=\"waitTimeoutLocators = onlyDigits($event)\"\n              placeholder=\"15\"\n              [fullWidth]=\"true\"\n              size=\"sm\"\n              labelInlineStyle=\"font-size: 14px; line-height: 19.6px\">\n            </cqa-custom-input>\n          </div>\n        </div>\n      </div>\n      <div *ngIf=\"platform !== 'mobile'\" class=\"cqa-flex cqa-flex-col cqa-gap-2.5 cqa-min-w-0 cqa-rounded-lg cqa-p-4 cqa-mb-4 cqa-border cqa-border-solid cqa-border-[#E2E8F0]\">\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          (click)=\"deviceExpanded = !deviceExpanded\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n              <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">devices</mat-icon>\n            </div>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-semibold cqa-text-[#111827]\">Device Settings</span>\n          </div>\n          <mat-icon class=\"cqa-text-[#64748B] cqa-text-xl cqa-w-5 cqa-h-5\">\n            {{ deviceExpanded ? 'expand_less' : 'expand_more' }}\n          </mat-icon>\n        </button>\n        <div *ngIf=\"deviceExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-min-w-0 cqa-w-full\">\n          <!-- Web only: mobile Device Settings hidden temporarily -->\n          <div class=\"cqa-min-w-0 cqa-w-full\">\n            <cqa-dynamic-select\n              [form]=\"editForm\"\n              [config]=\"getConfigForSelect('defaultBrowser', defaultBrowserSelectConfig)\"\n              (searchChange)=\"onSelectSearch($event)\"\n              (loadMore)=\"onSelectLoadMore($event)\"\n              (selectClick)=\"onSelectOpened('defaultBrowser')\"\n              (selectionChange)=\"onSelectionChange($event)\"\n              class=\"cqa-w-full\"></cqa-dynamic-select>\n          </div>\n          <!-- Viewport selector — replaces single dropdown -->\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n            <span class=\"cqa-text-[13px] cqa-font-medium cqa-text-[#374151] cqa-leading-[18.2px]\">Viewport</span>\n            <cqa-radio-card-group\n              class=\"viewport-selector\"\n              [options]=\"viewportModeOptions\"\n              [ngModel]=\"viewportMode\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              (ngModelChange)=\"onViewportModeChange($event)\">\n            </cqa-radio-card-group>\n            <div *ngIf=\"viewportMode === 'desktop'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#6b7280]\">Resolution</span>\n              <cqa-dynamic-select\n                [form]=\"viewportDesktopDeviceForm\"\n                [config]=\"desktopViewportConfig\"\n                class=\"cqa-w-full\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"viewportMode === 'laptop'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#6b7280]\">Resolution</span>\n              <cqa-dynamic-select\n                [form]=\"viewportLaptopDeviceForm\"\n                [config]=\"laptopViewportConfig\"\n                class=\"cqa-w-full\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"viewportMode === 'tablet'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#6b7280]\">Resolution</span>\n              <cqa-dynamic-select\n                [form]=\"viewportTabletDeviceForm\"\n                [config]=\"tabletViewportConfig\"\n                class=\"cqa-w-full\">\n              </cqa-dynamic-select>\n            </div>\n            <div *ngIf=\"viewportMode === 'mobile'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#6b7280]\">Device</span>\n              <cqa-dynamic-select\n                [form]=\"viewportMobileDeviceForm\"\n                [config]=\"mobileViewportConfig\"\n                class=\"cqa-w-full\">\n              </cqa-dynamic-select>\n            </div>\n          </div>\n        </div>\n      </div>\n      <!-- Key Flags -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2.5 cqa-min-w-0 cqa-rounded-lg cqa-p-4 cqa-mb-0 cqa-border cqa-border-solid cqa-border-[#E2E8F0]\">\n        <button\n          type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-bg-transparent cqa-border-none cqa-p-0 cqa-cursor-pointer\"\n          (click)=\"keyFlagsExpanded = !keyFlagsExpanded\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n            <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n              <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">flag</mat-icon>\n            </div>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-semibold cqa-text-[#111827]\">Key Flags</span>\n          </div>\n          <mat-icon class=\"cqa-text-[#64748B] cqa-text-xl cqa-w-5 cqa-h-5\">\n            {{ keyFlagsExpanded ? 'expand_less' : 'expand_more' }}\n          </mat-icon>\n        </button>\n        <div *ngIf=\"keyFlagsExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2.5 cqa-rounded-lg\">\n            <cqa-custom-toggle [checked]=\"mobileTestingEnabled\" (checkedChange)=\"mobileTestingEnabled = $event\" ariaLabel=\"Mobile Testing\"></cqa-custom-toggle>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-text-[#111827]\">Mobile Testing</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2.5 cqa-rounded-lg\">\n            <cqa-custom-toggle [checked]=\"extensionUseEnabled\" (checkedChange)=\"extensionUseEnabled = $event\" ariaLabel=\"Extension Use\"></cqa-custom-toggle>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-text-[#111827]\">Extension Use</span>\n          </div>\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2.5 cqa-rounded-lg\">\n            <cqa-custom-toggle [checked]=\"dataDrivenEnabled\" (checkedChange)=\"dataDrivenEnabled = $event\" ariaLabel=\"Data Driven\"></cqa-custom-toggle>\n            <span class=\"cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-text-[#111827]\">Data Driven</span>\n          </div>\n        </div>\n      </div>\n\n      \n      <!-- API Mocking Card (edit mode: mutually-exclusive toggles driven by one boolean) -->\n      <cqa-api-mocking-card\n        *ngIf=\"showApiMockingCard\"\n        style=\"width: 100%;\"\n        [title]=\"apiMockingTitle\"\n        [statusLabel]=\"apiMockingStatusLabel\"\n        [captureLabel]=\"apiMockingCaptureLabel\"\n        [captureHint]=\"apiMockingCaptureHint\"\n        [renewLabel]=\"apiMockingRenewLabel\"\n        [renewHint]=\"apiMockingRenewHint\"\n        [restoreMock]=\"editApiMockingRestoreMock\"\n        [storeMock]=\"editApiMockingStoreMock\"\n        [mockedApisCount]=\"apiMockingMockedApisCount\"\n        [totalApisCount]=\"apiMockingTotalApisCount\"\n        [progressPercent]=\"apiMockingProgressPercent\"\n        [showProgress]=\"apiMockingShowProgress\"\n        [summaryText]=\"apiMockingSummaryText\"\n        [percentText]=\"apiMockingPercentText\"\n        [editing]=\"true\"\n        (restoreMockChange)=\"onApiMockingRestoreMockChange($event)\"\n        (storeMockChange)=\"onApiMockingStoreMockChange($event)\"\n        (configure)=\"configureApiMocking.emit()\">\n      </cqa-api-mocking-card>\n    </div>\n  </div>\n\n  <!-- Action Buttons -->\n  <div class=\"cqa-flex cqa-gap-3 cqa-pt-2 cqa-w-full\">\n    <div class=\"cqa-flex-1 cqa-min-w-0\">\n      <cqa-button\n        variant=\"outlined\"\n        [text]=\"'Cancel'\"\n        btnSize=\"md\"\n        [fullWidth]=\"true\"\n        (clicked)=\"onCancel()\">\n      </cqa-button>\n    </div>\n    <div class=\"cqa-flex-1 cqa-min-w-0\">\n      <cqa-button\n        *ngIf=\"!isSaving\"\n        variant=\"filled\"\n        [text]=\"'Save Changes'\"\n        btnSize=\"md\"\n        [fullWidth]=\"true\"\n        [disabled]=\"!hasUnsavedChanges\"\n        (clicked)=\"onSave()\">\n      </cqa-button>\n      <div *ngIf=\"isSaving\" class=\"cqa-w-full\">\n        <cqa-badge\n          label=\"Saving…\"\n          icon=\"autorenew\"\n          [isLoading]=\"true\"\n          [fullWidth]=\"true\"\n          [centerContent]=\"true\"\n          variant=\"info\"\n          size=\"medium\">\n        </cqa-badge>\n      </div>\n    </div>\n  </div>\n</div>\n","import {\n  Component,\n  Input,\n  Output,\n  EventEmitter,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  OnInit,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport {\n  TestCaseDetailsConfigSection,\n  TestCaseDetailsMetadataItem,\n} from './test-case-details.models';\nimport {\n  TestCaseDetailsEditFormData,\n  SelectConfigOverrides,\n} from './test-case-details-edit/test-case-details-edit.component';\n\n@Component({\n  selector: 'cqa-test-case-details',\n  templateUrl: './test-case-details.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TestCaseDetailsComponent implements OnInit, OnChanges {\n  /** Internal editing state when not controlled by parent */\n  private _editing = false;\n\n  /** When provided by parent, use this instead of internal state (fixes Storybook event flow). */\n  @Input() editing?: boolean;\n\n  /** When true, start in edit mode (useful for Storybook). */\n  @Input() startInEditMode = false;\n\n  /** Resolved editing state: parent-controlled or internal */\n  get isEditing(): boolean {\n    return this.editing !== undefined ? this.editing : this._editing;\n  }\n\n  constructor(private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.startInEditMode) {\n      this._editing = true;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['descriptionContent']) {\n      this.descriptionExpanded = false;\n    }\n  }\n  /** Description section title */\n  @Input() descriptionTitle = 'Description';\n\n  /** Description text content */\n  @Input() descriptionContent = '';\n\n  /** When true, description supports rich text (HTML). Renders as HTML in view mode. */\n  @Input() enableMarkdown = false;\n\n  /** Whether to show the Edit button in the Description header */\n  @Input() showEditButton = false;\n\n  /** Metadata items (createdOn, status, priority, environment, version, testPlanName, etc.) */\n  @Input() metadataItems: TestCaseDetailsMetadataItem[] = [];\n\n  /** Labels/tags (e.g. Automation, API, SDK, UI/UX) */\n  @Input() labels: string[] = [];\n\n  /** Configuration section title */\n  @Input() configTitle = 'Configuration';\n\n  /** Configuration sections (e.g. Execution, AI Configuration) */\n  @Input() configSections: TestCaseDetailsConfigSection[] = [];\n\n  /** Optional config sections displayed in a 2-column row (e.g. Waits & Retries, Device) */\n  @Input() configSectionsRow2: TestCaseDetailsConfigSection[] = [];\n  /** Platform: 'web' or 'mobile'. Defaults to 'web'. Used for Device Settings fields. */\n  @Input() platform: 'web' | 'mobile' = 'web';\n\n  /** When true, filters out Priority and Type from metadata (step groups don't have these). Defaults to false. */\n  @Input() isStepGroup = false;\n\n  /** Override config per select for API-driven options, server search, load more. */\n  @Input() selectConfigOverrides: SelectConfigOverrides = {};\n  /** True while parent is saving changes. */\n  @Input() isSaving = false;\n\n  // ── API Mocking card ───────────────────────────────────────────────────────\n  /** When true, render the API Mocking card below the configuration section. */\n  @Input() showApiMockingCard = false;\n  @Input() apiMockingTitle = 'API Mocking';\n  @Input() apiMockingStatusLabel = 'Not configured';\n  @Input() apiMockingCaptureLabel = 'Use mock API responses';\n  @Input() apiMockingRenewLabel = 'Renew and store API responses';\n  @Input() apiMockingCaptureHint = 'Uses stored responses on next run. Turn on after capture completes.';\n  @Input() apiMockingRenewHint = 'Re-captures fresh responses on next run. Turns off Use mock.';\n  /**\n   * Single source of truth for the API mocking card's dual toggle state.\n   *   true  → Renew API responses ON,  Capture API responses OFF\n   *   false → Renew API responses OFF, Capture API responses ON\n   * The two legacy `*CaptureEnabled` / `*RenewEnabled` inputs are no longer used.\n   */\n  @Input() apiMockingRestoreMock = false;\n  /** \"Renew and store API responses\" — mutually exclusive with `apiMockingRestoreMock` when true. */\n  @Input() apiMockingStoreMock = false;\n  @Input() apiMockingMockedApisCount = 0;\n  @Input() apiMockingTotalApisCount = 0;\n  @Input() apiMockingProgressPercent = 0;\n  /** Forwarded to `cqa-api-mocking-card` — gates the \"Mocked / progress / percent\" block. */\n  @Input() apiMockingShowProgress = false;\n  @Input() apiMockingSummaryText?: string;\n  @Input() apiMockingPercentText?: string;\n  @Input() apiMockingConfigureButtonLabel = 'Configure';\n\n  /** Org-level default for Test Case Timeout (minutes). Forwarded to edit mode to toggle the \"ORG level\"/\"Custom\" badge. */\n  @Input() orgLevelTestCaseTimeout?: string | number | null;\n\n  /** Viewport dropdown options per category from the API. Forwarded to edit mode. */\n  @Input() viewportCategoryOptions: { DESKTOP?: any[], LAPTOP?: any[], TABLET?: any[], MOBILE?: any[] } = {};\n\n  /** Labels to filter out from metadata for step groups */\n  private readonly stepGroupExcludedMetadataLabels = ['priority', 'type'];\n\n  /** When true, description (view mode) is expanded; when false, clamped to 4 lines with Read more */\n  descriptionExpanded = false;\n\n  /** Roughly 4 lines of text; show Read more when description exceeds this */\n  private readonly descriptionReadMoreThreshold = 280;\n\n  get showDescriptionReadMore(): boolean {\n    const raw = this.descriptionContent ?? '';\n    const text = this.enableMarkdown ? raw.replace(/<[^>]*>/g, ' ').replace(/\\s+/g, ' ').trim() : raw;\n    if (text.length > this.descriptionReadMoreThreshold) return true;\n    // Also show when there are more than 4 lines (newlines or <br>)\n    const withBrAsNewline = raw.replace(/<br\\s*\\/?>/gi, '\\n');\n    const lineCount = withBrAsNewline.split(/\\r?\\n/).length;\n    return lineCount > 4;\n  }\n\n  toggleDescriptionExpand(): void {\n    this.descriptionExpanded = !this.descriptionExpanded;\n    this.cdr.markForCheck();\n  }\n\n  /** Filtered metadata items - excludes Priority and Type for step groups */\n  get filteredMetadataItems(): TestCaseDetailsMetadataItem[] {\n    if (!this.isStepGroup) {\n      return this.metadataItems;\n    }\n    return this.metadataItems.filter(\n      (item) => !this.stepGroupExcludedMetadataLabels.includes(item.label?.toLowerCase() ?? '')\n    );\n  }\n\n  @Output() editDescription = new EventEmitter<void>();\n  @Output() cancel = new EventEmitter<void>();\n  @Output() saveChanges = new EventEmitter<TestCaseDetailsEditFormData>();\n  @Output() metadataLinkClick = new EventEmitter<TestCaseDetailsMetadataItem>();\n  @Output() selectSearch = new EventEmitter<{ key: string; query: string }>();\n  @Output() selectLoadMore = new EventEmitter<{ key: string; query: string }>();\n  @Output() selectOpened = new EventEmitter<{ key: string }>();\n  @Output() selectionChange = new EventEmitter<{ key: string; value: unknown }>();\n  @Output() labelAdded = new EventEmitter<string>();\n  @Output() configureApiMocking = new EventEmitter<void>();\n  /** Fired when the user flips the Use-mock toggle — emits the new `restoreMock` value. */\n  @Output() apiMockingRestoreMockChange = new EventEmitter<boolean>();\n  /** Fired when the user flips the Renew-and-store toggle — emits the new `storeMock` value. */\n  @Output() apiMockingStoreMockChange = new EventEmitter<boolean>();\n\n  onEditClick(): void {\n    if (this.editing === undefined) {\n      this._editing = true;\n      this.cdr.detectChanges();\n    }\n    this.editDescription.emit();\n  }\n\n  onSaveChanges(data: TestCaseDetailsEditFormData): void {\n    if (this.editing === undefined) {\n      this._editing = false;\n    }\n    this.cdr.detectChanges();\n    this.saveChanges.emit(data);\n  }\n\n  onCancelEdit(): void {\n    this.cancel.emit();\n    if (this.editing === undefined) {\n      this._editing = false;\n    }\n    this.cdr.detectChanges();\n  }\n\n  trackByConfigTitle(_i: number, section: TestCaseDetailsConfigSection): string {\n    return section.title;\n  }\n\n  trackByMetadataLabel(_i: number, item: TestCaseDetailsMetadataItem): string {\n    return item.label;\n  }\n\n\n  onMetadataLinkClick(item: TestCaseDetailsMetadataItem): void {\n    if (item.link) {\n      this.metadataLinkClick.emit(item);\n    }\n  }\n\n  getStatusDotClass(item: TestCaseDetailsMetadataItem): string {\n    if (!item.statusColor) return '';\n    switch (item.statusColor) {\n      case 'yellow':\n        return 'cqa-bg-[#EAB308]';\n      case 'red':\n        return 'cqa-bg-[#DC2626]';\n      case 'green':\n        return 'cqa-bg-[#16A34A]';\n      case 'gray':\n      default:\n        return 'cqa-bg-[#94A3B8]';\n    }\n  }\n\n  /** Text color for metadata value (e.g. red for critical priority) */\n  getValueTextClass(item: TestCaseDetailsMetadataItem): string {\n    if (item.statusColor === 'red') {\n      return 'cqa-text-[#DC2626]';\n    }\n    return 'cqa-text-[#111827]';\n  }\n}\n","<!-- Edit mode: show edit form (Figma design) -->\n<cqa-test-case-details-edit\n  *ngIf=\"isEditing\"\n  [descriptionTitle]=\"descriptionTitle\"\n  [descriptionContent]=\"descriptionContent\"\n  [enableMarkdown]=\"enableMarkdown\"\n  [metadataItems]=\"metadataItems\"\n  [labels]=\"labels\"\n  [configTitle]=\"configTitle\"\n  [configSections]=\"configSections\"\n  [configSectionsRow2]=\"configSectionsRow2\"\n  [platform]=\"platform\"\n  [isStepGroup]=\"isStepGroup\"\n  [isSaving]=\"isSaving\"\n  [selectConfigOverrides]=\"selectConfigOverrides\"\n  [showApiMockingCard]=\"showApiMockingCard\"\n  [apiMockingTitle]=\"apiMockingTitle\"\n  [apiMockingStatusLabel]=\"apiMockingStatusLabel\"\n  [apiMockingCaptureLabel]=\"apiMockingCaptureLabel\"\n  [apiMockingCaptureHint]=\"apiMockingCaptureHint\"\n  [apiMockingRenewLabel]=\"apiMockingRenewLabel\"\n  [apiMockingRenewHint]=\"apiMockingRenewHint\"\n  [apiMockingRestoreMock]=\"apiMockingRestoreMock\"\n  [apiMockingStoreMock]=\"apiMockingStoreMock\"\n  [apiMockingMockedApisCount]=\"apiMockingMockedApisCount\"\n  [apiMockingTotalApisCount]=\"apiMockingTotalApisCount\"\n  [apiMockingProgressPercent]=\"apiMockingProgressPercent\"\n  [apiMockingShowProgress]=\"apiMockingShowProgress\"\n  [apiMockingSummaryText]=\"apiMockingSummaryText\"\n  [apiMockingPercentText]=\"apiMockingPercentText\"\n  [orgLevelTestCaseTimeout]=\"orgLevelTestCaseTimeout\"\n  [viewportCategoryOptions]=\"viewportCategoryOptions\"\n  (save)=\"onSaveChanges($event)\"\n  (cancel)=\"onCancelEdit()\"\n  (selectSearch)=\"selectSearch.emit($event)\"\n  (selectLoadMore)=\"selectLoadMore.emit($event)\"\n  (selectOpened)=\"selectOpened.emit($event)\"\n  (selectionChange)=\"selectionChange.emit($event)\"\n  (labelAdded)=\"labelAdded.emit($event)\"\n  (apiMockingRestoreMockChange)=\"apiMockingRestoreMockChange.emit($event)\"\n  (apiMockingStoreMockChange)=\"apiMockingStoreMockChange.emit($event)\"\n  (configureApiMocking)=\"configureApiMocking.emit()\">\n</cqa-test-case-details-edit>\n\n<!-- View mode: read-only details -->\n<div *ngIf=\"!isEditing\" class=\"cqa-self-stretch cqa-py-4 cqa-px-0 cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n  <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n    <!-- Description Section -->\n    <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n      <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-between cqa-items-center\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n            <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">description</mat-icon>\n          </div>\n          <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ descriptionTitle }}</span>\n        </div>\n        <button\n          *ngIf=\"showEditButton\"\n          type=\"button\"\n          class=\"cqa-inline-flex cqa-items-center cqa-gap-1.5 cqa-px-2.5 cqa-py-1 cqa-rounded !cqa-border !cqa-border-solid !cqa-border-[#D1D5DB] cqa-text-[#6B7280] cqa-text-xs cqa-font-semibold cqa-cursor-pointer cqa-transition-all hover:cqa-text-[#374151] hover:!cqa-border-[#9CA3AF] hover:cqa-bg-[#F9FAFB] focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n          (click)=\"onEditClick()\">\n          <mat-icon class=\"!cqa-w-[14px] !cqa-h-[14px] !cqa-text-[14px]\">edit</mat-icon>\n          <span>Edit</span>\n        </button>\n      </div>\n      <div *ngIf=\"descriptionContent\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-1\">\n        <div\n          *ngIf=\"enableMarkdown\"\n          class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal cqa-prose cqa-prose-sm cqa-max-w-none\"\n          [style]=\"(!descriptionExpanded && showDescriptionReadMore) ? 'display: -webkit-box; -webkit-line-clamp: 4; line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden;' : ''\"\n          [innerHTML]=\"descriptionContent\"></div>\n        <div\n          *ngIf=\"!enableMarkdown\"\n          class=\"cqa-self-stretch cqa-text-[#111827] cqa-text-sm cqa-leading-[19.6px] cqa-font-normal\"\n          [style]=\"(!descriptionExpanded && showDescriptionReadMore) ? 'display: -webkit-box; -webkit-line-clamp: 4; line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden;' : ''\">{{ descriptionContent }}</div>\n        <button\n          *ngIf=\"showDescriptionReadMore\"\n          type=\"button\"\n          class=\"cqa-text-[#3F43EE] cqa-text-xs cqa-font-medium hover:cqa-underline cqa-cursor-pointer cqa-bg-transparent cqa-border-none cqa-p-0 cqa-self-start focus:cqa-outline-none focus-visible:cqa-ring-2 focus-visible:cqa-ring-[#3F43EE] focus-visible:cqa-ring-offset-2\"\n          (click)=\"toggleDescriptionExpand()\">\n          {{ descriptionExpanded ? 'Read less' : 'Read more' }}\n        </button>\n      </div>\n    </div>\n\n    <!-- Metadata Section -->\n    <div *ngIf=\"filteredMetadataItems.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n      <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-2 cqa-gap-x-0 cqa-gap-y-4\">\n        <ng-container *ngFor=\"let item of filteredMetadataItems; trackBy: trackByMetadataLabel\">\n          <div class=\"cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-0.5\">\n            <div class=\"cqa-text-[#6B7280] cqa-text-xs cqa-leading-[15px] cqa-font-medium\">{{ item.label }}</div>\n            <div\n              class=\"cqa-flex cqa-justify-start cqa-items-center cqa-gap-[5px] cqa-min-w-0 cqa-w-full cqa-text-left cqa-text-[#0A0A0A] cqa-border cqa-border-[#F5F5F5]\">\n              <mat-icon *ngIf=\"item.icon && (!item.iconLibrary || item.iconLibrary === 'mat')\" class=\"cqa-text-[#6B7280] cqa-text-sm cqa-w-4 cqa-h-4\">\n                {{ item.icon }}\n              </mat-icon>\n              <span *ngIf=\"item.statusColor\" class=\"cqa-w-[10px] cqa-h-[10px] cqa-rounded-full cqa-flex-shrink-0\" [ngClass]=\"getStatusDotClass(item)\"></span>\n              <a\n                *ngIf=\"item.link\"\n                href=\"javascript:void(0)\"\n                class=\"cqa-text-[#2563EB] cqa-text-xs cqa-leading-[12px] cqa-font-normal hover:cqa-underline cqa-cursor-pointer cqa-block cqa-truncate cqa-min-w-0\"\n                (click)=\"onMetadataLinkClick(item); $event.preventDefault()\">\n                {{ item.value }}\n              </a>\n              <span *ngIf=\"!item.link\" class=\"cqa-text-xs cqa-leading-[12px] cqa-font-normal cqa-align-middle\" [ngClass]=\"getValueTextClass(item)\">\n                {{ item.value }}\n              </span>\n            </div>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Labels (Figma: Labels title, cqa-badge chips with tag icon) -->\n    <div *ngIf=\"labels.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2 cqa-text-sm cqa-leading-[19.6px]\">\n      <span class=\"cqa-text-[#111827] cqa-text-sm cqa-font-medium cqa-leading-5\">Labels</span>\n      <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n        <cqa-badge\n          *ngFor=\"let label of labels\"\n          [label]=\"label\"\n          icon=\"label\"\n          variant=\"outline\"\n          size=\"small\"\n          backgroundColor=\"#ffffff\"\n          textColor=\"#475569\"\n          borderColor=\"#E2E8F0\"\n          iconColor=\"#94A3B8\">\n        </cqa-badge>\n      </div>\n    </div>\n\n    <!-- Configuration Section -->\n    <div *ngIf=\"configSections.length || configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n      <div class=\"cqa-self-stretch cqa-inline-flex cqa-justify-start cqa-items-center\">\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <div class=\"cqa-w-5 cqa-h-5 cqa-p-1 cqa-flex-shrink-0 cqa-bg-[#3F43EE1A] cqa-rounded-md cqa-inline-flex cqa-justify-center cqa-items-center\">\n            <mat-icon class=\"cqa-text-[#1B1FEB] cqa-text-[12px] cqa-w-3 cqa-h-3 cqa-leading-none cqa-block\">settings</mat-icon>\n          </div>\n          <span class=\"cqa-text-[#374151] cqa-text-sm cqa-font-semibold cqa-leading-[19.6px]\">{{ configTitle }}</span>\n        </div>\n      </div>\n      <div class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-justify-start cqa-items-start cqa-gap-2.5\">\n        <div class=\"cqa-self-stretch cqa-grid cqa-grid-cols-1 cqa-gap-2.5\">\n          <ng-container *ngFor=\"let section of configSections; trackBy: trackByConfigTitle\">\n            <cqa-configuration-card\n              [icon]=\"section.icon || 'tune'\"\n              [title]=\"section.title\"\n              [data]=\"section.items\">\n            </cqa-configuration-card>\n          </ng-container>\n        </div>\n        <div *ngIf=\"configSectionsRow2.length\" class=\"cqa-self-stretch cqa-flex cqa-flex-col cqa-gap-4 cqa-text-sm cqa-leading-[19.6px]\">\n          <cqa-configuration-card\n            *ngFor=\"let section of configSectionsRow2; trackBy: trackByConfigTitle\"\n            [icon]=\"section.icon || 'tune'\"\n            [title]=\"section.title\"\n            [data]=\"section.items\">\n          </cqa-configuration-card>\n        </div>\n      </div>\n      <!-- API Mocking Card (read-only) -->\n      <cqa-api-mocking-card\n        *ngIf=\"showApiMockingCard\"\n        style=\"width: 100%;\"\n        [title]=\"apiMockingTitle\"\n        [statusLabel]=\"apiMockingStatusLabel\"\n        [captureLabel]=\"apiMockingCaptureLabel\"\n        [renewLabel]=\"apiMockingRenewLabel\"\n        [restoreMock]=\"apiMockingRestoreMock\"\n        [storeMock]=\"apiMockingStoreMock\"\n        [mockedApisCount]=\"apiMockingMockedApisCount\"\n        [totalApisCount]=\"apiMockingTotalApisCount\"\n        [progressPercent]=\"apiMockingProgressPercent\"\n        [showProgress]=\"apiMockingShowProgress\"\n        [summaryText]=\"apiMockingSummaryText\"\n        [percentText]=\"apiMockingPercentText\"\n        [configureButtonLabel]=\"apiMockingConfigureButtonLabel\"\n        [editing]=\"false\"\n        (configure)=\"configureApiMocking.emit()\">\n      </cqa-api-mocking-card>\n    </div>\n  </div>\n</div>\n","import { Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\n\nexport interface StepGroupVariable {\n  id: number;\n  name: string;\n  variables?: Array<{ name: string; parameterValue?: string }>;\n}\n\nexport interface StepGroupFormData {\n  stepGroupId: number;\n  stepGroup?: any; // TestCase object\n  runtimeVariables?: { [groupId: string]: { [paramName: string]: string } }; // Runtime variable values\n}\n\nexport interface StepGroupOption {\n  id: number;\n  name: string;\n  description?: string;\n}\n\n@Component({\n  selector: 'cqa-step-builder-group',\n  templateUrl: './step-builder-group.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class StepBuilderGroupComponent implements OnInit, OnChanges {\n  /** Options for step group dropdown */\n  @Input() stepGroupOptions: StepGroupOption[] = [];\n\n  /** Indicates if more step groups are available for loading */\n  @Input() hasMoreStepGroups: boolean = false;\n\n  /** Loading state for step groups */\n  @Input() isLoadingStepGroups: boolean = false;\n\n  /** Initial step group ID for edit mode */\n  @Input() initialStepGroupId?: number;\n\n  /** Whether in edit mode */\n  @Input() editMode: boolean = false;\n\n  /** Runtime variables for the selected step group */\n  @Input() runtimeVariables?: StepGroupVariable[];\n\n  /** Loading state for runtime variables */\n  @Input() isLoadingRuntimeVariables: boolean = false;\n\n  /** Existing runtime variable values (from testStep.testDataFunctionArgs) */\n  @Input() existingRuntimeValues?: { [groupId: string]: { [paramName: string]: string } };\n\n  /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */\n  @Input() isCreatingStep: boolean = false;\n\n  /**\n   * When true, render an amber warning banner at the top of the card explaining that any\n   * runtime values typed here will be overridden by the consuming test case. Set this when\n   * the step-group step is being created/edited inside a host test case that is itself a\n   * step group.\n   */\n  @Input() showNestedStepGroupWarning: boolean = false;\n  /** Optional override for the warning copy. Falls back to a sensible default. */\n  @Input() nestedStepGroupWarning: string =\n    'Parameter names will be used in the test case level where this step group is added. ' +\n    'If you want to set the value in the test case, keep all the parameter values (runtime variables) empty in this step group.';\n\n  /** Emit when step is created */\n  @Output() createStep = new EventEmitter<StepGroupFormData>();\n\n  /** Emit when step group is selected to fetch runtime variables */\n  @Output() stepGroupSelected = new EventEmitter<number>();\n\n  /** Emit when cancelled */\n  @Output() cancelled = new EventEmitter<void>();\n\n  /** Emit when more step groups need to be loaded */\n  @Output() loadMoreStepGroups = new EventEmitter<string>();\n\n  /** Emit when step group search query changes */\n  @Output() searchStepGroups = new EventEmitter<string>();\n\n  stepGroupForm: FormGroup;\n  stepGroupConfig: DynamicSelectFieldConfig;\n  selectedStepGroup: StepGroupOption | null = null;\n  runtimeVariableValues: { [groupId: string]: { [paramName: string]: string } } = {};\n\n  /** Tracks initial state for edit mode to detect changes */\n  private initialStepGroupIdSnapshot: number | null = null;\n  private initialRuntimeValuesSnapshot: string = '{}';\n  private snapshotReady: boolean = false;\n\n  constructor(private fb: FormBuilder) {\n    this.stepGroupForm = this.fb.group({\n      stepGroupId: [null, Validators.required]\n    });\n\n    this.stepGroupConfig = {\n      key: 'stepGroupId',\n      placeholder: 'Select Step Group',\n      multiple: false,\n      searchable: true,\n      serverSearch: true,\n      hasMore: this.hasMoreStepGroups,\n      isLoading: this.isLoadingStepGroups,\n      options: [],\n      onChange: (value: any) => {\n        this.onStepGroupChange(value);\n      },\n      onSearch: (query: string) => {\n        this.searchStepGroups.emit(query);\n      },\n      onLoadMore: (query?: string) => {\n        this.loadMoreStepGroups.emit(query || '');\n      }\n    };\n  }\n\n  ngOnInit(): void {\n    this.updateStepGroupConfig();\n    if (this.initialStepGroupId) {\n      this.setInitialStepGroupValue();\n    } else if (this.stepGroupOptions.length > 0) {\n      // Auto-select first option if available\n      const firstOption = this.stepGroupOptions[0];\n      this.stepGroupForm.patchValue({ stepGroupId: firstOption.id });\n      this.selectedStepGroup = firstOption;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['stepGroupOptions'] || changes['hasMoreStepGroups'] || changes['isLoadingStepGroups']) {\n      this.updateStepGroupConfig();\n      // When stepGroupOptions change, check if we need to set the initial value\n      if (this.initialStepGroupId) {\n        this.setInitialStepGroupValue();\n      }\n    }\n    if (changes['initialStepGroupId'] && this.initialStepGroupId) {\n      this.setInitialStepGroupValue();\n    }\n    if (changes['runtimeVariables'] && this.runtimeVariables) {\n      this.initializeRuntimeVariableValues();\n    }\n    if (changes['existingRuntimeValues'] && this.existingRuntimeValues) {\n      this.initializeRuntimeVariableValues();\n    }\n  }\n\n  private setInitialStepGroupValue(): void {\n    if (this.initialStepGroupId) {\n      const foundGroup = this.stepGroupOptions.find(opt => opt.id === this.initialStepGroupId);\n      if (foundGroup) {\n        // Only patch the form to the initial value if the user hasn't picked a\n        // different option yet. Subsequent stepGroupOptions changes (e.g. the\n        // refetch dynamic-select fires on every dropdown reopen) must NOT\n        // clobber a user-modified selection.\n        const currentFormValue = this.stepGroupForm.value.stepGroupId;\n        if (currentFormValue == null || currentFormValue === this.initialStepGroupId) {\n          this.stepGroupForm.patchValue({ stepGroupId: this.initialStepGroupId });\n          this.selectedStepGroup = foundGroup;\n          // Capture snapshot for change detection (will be recaptured if runtime variables load later)\n          if (this.editMode) {\n            this.captureInitialSnapshot();\n          }\n        }\n      }\n    }\n  }\n\n  private updateStepGroupConfig(): void {\n    const options: SelectOption[] = this.stepGroupOptions.map(group => ({\n      id: group.id,\n      value: group.id,\n      name: group.name,\n      label: group.name\n    }));\n\n    this.stepGroupConfig = {\n      ...this.stepGroupConfig,\n      options: options,\n      hasMore: this.hasMoreStepGroups,\n      isLoading: this.isLoadingStepGroups\n    };\n  }\n\n  onStepGroupChange(stepGroupId: number): void {\n    const foundGroup = this.stepGroupOptions.find(opt => opt.id === stepGroupId);\n    if (foundGroup) {\n      this.selectedStepGroup = foundGroup;\n      // Clear runtime variables when step group changes\n      this.runtimeVariableValues = {};\n      // Emit event to fetch runtime variables for the selected step group\n      this.stepGroupSelected.emit(stepGroupId);\n    }\n  }\n\n  getStepGroupDescription(): string {\n    if (this.selectedStepGroup?.description) {\n      const tempDescElem = document.createElement('div');\n      tempDescElem.innerHTML = this.selectedStepGroup.description;\n      return tempDescElem.textContent || '';\n    }\n    return 'No description available';\n  }\n\n  private initializeRuntimeVariableValues(): void {\n    // Initialize runtime variable values from existing values or empty\n    this.runtimeVariableValues = {};\n\n    if (this.runtimeVariables) {\n      this.runtimeVariables.forEach(group => {\n        if (group.variables && group.variables.length > 0) {\n          const groupValues: { [paramName: string]: string } = {};\n          group.variables.forEach(variable => {\n            // Use existing value if available, otherwise use current parameterValue or empty string\n            const existingValue = this.existingRuntimeValues?.[group.id]?.[variable.name];\n            groupValues[variable.name] = existingValue || variable.parameterValue || '';\n          });\n          this.runtimeVariableValues[group.id] = groupValues;\n        }\n      });\n    }\n\n    // Capture snapshot after runtime values are initialized (for edit mode change detection)\n    if (this.editMode) {\n      this.captureInitialSnapshot();\n    }\n  }\n\n  onRuntimeVariableChange(groupId: number, paramName: string, value: string): void {\n    if (!this.runtimeVariableValues[groupId]) {\n      this.runtimeVariableValues[groupId] = {};\n    }\n    this.runtimeVariableValues[groupId][paramName] = value;\n  }\n\n  getRuntimeVariableValue(groupId: number, paramName: string): string {\n    return this.runtimeVariableValues[groupId]?.[paramName] || '';\n  }\n\n  hasRuntimeVariables(): boolean {\n    return !!this.runtimeVariables?.length &&\n           this.runtimeVariables.some(group => !!group.variables?.length);\n  }\n\n  onCreateStep(): void {\n    if (this.stepGroupForm.valid) {\n      const formValue = this.stepGroupForm.value;\n      const stepData: StepGroupFormData = {\n        stepGroupId: formValue.stepGroupId,\n        stepGroup: this.selectedStepGroup,\n        runtimeVariables: this.runtimeVariableValues\n      };\n      this.createStep.emit(stepData);\n    }\n  }\n\n  onCancel(): void {\n    this.cancelled.emit();\n  }\n\n  /** Returns true if the form has changed from its initial state (edit mode only) */\n  hasChanges(): boolean {\n    if (!this.editMode) {\n      return true; // In create mode, always allow submission\n    }\n    // Until the snapshot is ready, treat as no changes (disable button)\n    if (!this.snapshotReady) {\n      return false;\n    }\n    const currentStepGroupId = this.stepGroupForm.value.stepGroupId;\n    if (currentStepGroupId !== this.initialStepGroupIdSnapshot) {\n      return true;\n    }\n    return JSON.stringify(this.runtimeVariableValues) !== this.initialRuntimeValuesSnapshot;\n  }\n\n  /** Captures the current state as the baseline for change detection */\n  private captureInitialSnapshot(): void {\n    // Only capture when a valid step group is selected\n    if (!this.selectedStepGroup) {\n      return;\n    }\n    // Re-capture is only valid while the form still points at the original\n    // initialStepGroupId — that covers the \"runtime vars arrived after the\n    // initial selection was patched\" case. Once the user picks a different\n    // group, keep the original baseline so `hasChanges()` stays true and the\n    // Update button remains enabled.\n    const currentStepGroupId = this.stepGroupForm.value.stepGroupId;\n    if (this.snapshotReady && currentStepGroupId !== this.initialStepGroupId) {\n      return;\n    }\n    this.initialStepGroupIdSnapshot = currentStepGroupId || null;\n    this.initialRuntimeValuesSnapshot = JSON.stringify(this.runtimeVariableValues);\n    this.snapshotReady = true;\n  }\n\n  isFormValid(): boolean {\n    return this.stepGroupForm.valid && !!this.selectedStepGroup && this.hasChanges();\n  }\n}\n\n","<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    {{ editMode ? 'Edit Step Group Test Step' : 'Create Step Group Test Step' }}\n  </h2>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n    <!-- Step Group Selection -->\n    <div class=\"cqa-mb-6\">\n      <label class=\"cqa-leading-[100%] cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#161617] cqa-mb-1\">\n        Select Step Group<span class=\"cqa-text-[#EF4444] cqa-ml-0.5\">*</span>\n      </label>\n      <cqa-dynamic-select\n        [form]=\"stepGroupForm\"\n        [config]=\"stepGroupConfig\">\n      </cqa-dynamic-select>\n    </div>\n\n    <!-- Step Group Description -->\n    <!-- <div *ngIf=\"selectedStepGroup\" class=\"cqa-mb-6\">\n      <div class=\"cqa-mb-2\">\n        <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4b5563]\">Description:</span>\n      </div>\n      <div class=\"cqa-p-3 cqa-bg-[#f9fafb] cqa-rounded cqa-border cqa-border-[#e5e7eb]\">\n        <div class=\"cqa-text-[14px] cqa-text-[#374151]\" [innerHTML]=\"getStepGroupDescription()\">\n        </div>\n      </div>\n    </div> -->\n\n    <!-- Runtime Variables Section -->\n    <div *ngIf=\"selectedStepGroup\" class=\"cqa-mt-6 cqa-mb-4\">\n      <h3 class=\"cqa-text-[14px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n        Set Parameters Default Value\n      </h3>\n\n      \n       <!-- Nested-step-group warning. Visible only when the consumer flips\n       `showNestedStepGroupWarning` (i.e. the host test case is itself a step group). -->\n      <div *ngIf=\"showNestedStepGroupWarning\"\n        class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-mb-3 cqa-px-3 cqa-py-2.5 cqa-rounded-md cqa-border cqa-border-[#FCD34D] cqa-border-l-[3px] cqa-border-l-[#F59E0B] cqa-bg-[#FEF3C7] cqa-text-[#92400E] cqa-text-[12px] cqa-leading-[18px]\"\n        role=\"alert\">\n        <mat-icon class=\"cqa-text-[#B45309] !cqa-text-[18px] !cqa-w-[18px] !cqa-h-[18px] cqa-mt-px cqa-flex-shrink-0\">warning_amber</mat-icon>\n        <span>{{ nestedStepGroupWarning }}</span>\n      </div>\n      <!-- TODO: ADD warning message here if the host test case is itself a step group -->\n      <div class=\"cqa-border-t cqa-border-gray-200 cqa-pt-4\">\n        <!-- Loading State -->\n        <div *ngIf=\"isLoadingRuntimeVariables\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n          <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading runtime variables...</div>\n        </div>\n\n        <!-- Runtime Variables Tables -->\n        <div *ngIf=\"!isLoadingRuntimeVariables && runtimeVariables\" class=\"cqa-space-y-6\">\n          <div *ngFor=\"let childGroup of runtimeVariables; let i = index\" class=\"cqa-mb-6\">\n            <h4 class=\"cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-mb-3\">\n              ( {{i + 1}} ) {{ childGroup.name }}\n            </h4>\n            <ng-container *ngIf=\"childGroup.variables && childGroup.variables.length > 0; else noVariables\">\n              <div class=\"cqa-border cqa-border-gray-200 cqa-rounded-lg cqa-overflow-hidden\">\n                <table class=\"cqa-w-full cqa-text-left\">\n                  <thead class=\"cqa-bg-gray-50\">\n                    <tr>\n                      <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n                        Parameter Name\n                      </th>\n                      <th class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-font-semibold cqa-text-[#161617] cqa-border-b cqa-border-gray-200\">\n                        Parameter Value\n                      </th>\n                    </tr>\n                  </thead>\n                  <tbody>\n                    <tr *ngFor=\"let variable of childGroup.variables; let j = index\" \n                        class=\"cqa-border-b cqa-border-gray-100 last:cqa-border-b-0\">\n                      <td class=\"cqa-px-4 cqa-py-2 cqa-text-[12px] cqa-text-[#161617]\">\n                        {{ variable.name }}\n                      </td>\n                      <td class=\"cqa-px-4 cqa-py-2\">\n                        <cqa-custom-input \n                          [placeholder]=\"'Enter value'\"\n                          [value]=\"getRuntimeVariableValue(childGroup.id, variable.name)\"\n                          [fullWidth]=\"true\"\n                          (valueChange)=\"onRuntimeVariableChange(childGroup.id, variable.name, $event)\">\n                        </cqa-custom-input>\n                      </td>\n                    </tr>\n                  </tbody>\n                </table>\n              </div>\n            </ng-container>\n            <ng-template #noVariables>\n              <p class=\"cqa-text-[12px] cqa-text-[#EF4444] cqa-py-2\">Runtime variable not available</p>\n            </ng-template>\n          </div>\n        </div>\n      </div>\n    </div>\n    <!-- Loading State: only show when initially loading (no options yet). Load-more loading is shown inside the dropdown. -->\n    <div *ngIf=\"isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-flex cqa-justify-center cqa-items-center cqa-py-8\">\n      <div class=\"cqa-text-[14px] cqa-text-[#6b7280]\">Loading step groups...</div>\n    </div>\n\n    <!-- Empty State -->\n    <div *ngIf=\"!isLoadingStepGroups && stepGroupOptions.length === 0\" class=\"cqa-text-center cqa-py-8 cqa-text-[#9ca3af] cqa-text-[14px]\">\n      No step groups available\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 *ngIf=\"!isCreatingStep\" class=\"cqa-border-solid cqa-rounded-[9px] cqa-w-1/2 cqa-border cqa-border-[#3F43EE]\" variant=\"filled\" [text]=\"editMode ? 'Update Step' : 'Insert Step Group'\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!isFormValid()\"\n      (clicked)=\"onCreateStep()\">\n    </cqa-button>\n    <div *ngIf=\"isCreatingStep\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Creating…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>\n\n","import { InjectionToken } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class StepDetailsDrawerRef<TResult = unknown> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => this.finishClose(undefined));\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) return;\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) return;\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\nexport const STEP_DETAILS_DRAWER_REF = new InjectionToken<StepDetailsDrawerRef>('STEP_DETAILS_DRAWER_REF');\n","import { InjectionToken } from '@angular/core';\nimport { TestCaseStepConfig } from '../test-case-step.models';\n\n/**\n * API-driven field configuration for the Step Details Drawer.\n * When type is undefined or unknown, treat as 'string' (text input / textfield).\n */\nexport interface DynamicFieldConfig {\n  key: string;\n  label: string;\n  /** Rendered control: string (textfield), number, boolean, dropdown, textarea, code. When omitted, defaults to 'string'. */\n  type?: 'string' | 'number' | 'boolean' | 'dropdown' | 'textarea' | 'code';\n  section?: 'main' | 'constraints' | 'advanced';\n  options?: { label: string; value: unknown }[];\n  placeholder?: string;\n  required?: boolean;\n  rows?: number;\n  /** Optional default value when step has no value for this key. */\n  defaultValue?: unknown;\n  /** Optional sub-label for toggles (e.g. \"Only use elements from the attached context\"). */\n  subLabel?: string;\n  /** Optional tip text below the field. */\n  tip?: string;\n}\n\n/**\n * API variable schema (e.g. from natural_test_actions[].variables).\n */\nexport interface ApiVariableSchema {\n  path?: string;\n  default?: unknown;\n  mutable?: boolean;\n  type?: string;\n  /** Dropdown options: array of strings (value and label) or { label, value }[]. */\n  options?: string[] | { label: string; value: unknown }[];\n}\n\n/** Map of variable key → API variable schema. */\nexport type ApiVariablesMap = Record<string, ApiVariableSchema>;\n\n/**\n * Supported API type values mapped to DynamicFieldConfig.type.\n * All other values (or when type is missing) default to 'string' (textfield).\n */\nconst API_TYPE_MAP: Record<string, DynamicFieldConfig['type']> = {\n  string: 'string',\n  number: 'number',\n  integer: 'number',\n  double: 'number',\n  boolean: 'boolean',\n  dropdown: 'dropdown',\n  textarea: 'textarea',\n  code: 'code',\n  regex: 'string',\n  url: 'string',\n  object: 'string',\n  array: 'string',\n  txt: 'string',\n};\n\n/**\n * Humanizes a variable key for use as label (e.g. \"iFrameLocator\" → \"I Frame Locator\").\n */\nexport function humanizeVariableKey(key: string): string {\n  return key\n    .replace(/([A-Z])/g, ' $1')\n    .replace(/[-_.]+/g, ' ')\n    .replace(/^\\s+|\\s+$/g, '')\n    .replace(/\\s+/g, ' ')\n    .replace(/^./, (s) => s.toUpperCase());\n}\n\n/**\n * Maps API variables (e.g. natural_test_actions[].variables) to DynamicFieldConfig[].\n * Use when the drawer is driven by API response instead of legacy step-type config.\n */\nexport function mapApiVariablesToDynamicFields(\n  variables: ApiVariablesMap | null | undefined,\n  options?: { labels?: Record<string, string>; section?: DynamicFieldConfig['section'] }\n): DynamicFieldConfig[] {\n  if (!variables || typeof variables !== 'object') return [];\n  const labels = options?.labels ?? {};\n  const defaultSection = options?.section ?? 'main';\n  const result: DynamicFieldConfig[] = [];\n  for (const key of Object.keys(variables)) {\n    const v = variables[key];\n    if (!v || typeof v !== 'object') continue;\n    const label = labels[key] ?? humanizeVariableKey(key);\n    // When no type is provided, default to 'string' (textfield).\n    const apiType = (v.type ?? 'string') as string;\n    const type = API_TYPE_MAP[apiType] ?? 'string';\n    let optionsList: { label: string; value: unknown }[] | undefined;\n    if (v.options && Array.isArray(v.options)) {\n      optionsList = v.options.map((o) =>\n        typeof o === 'object' && o !== null && 'label' in o && 'value' in o\n          ? { label: String((o as { label: string; value: unknown }).label), value: (o as { label: string; value: unknown }).value }\n          : { label: String(o), value: o }\n      );\n    }\n    result.push({\n      key,\n      label,\n      type,\n      section: defaultSection,\n      options: optionsList?.length ? optionsList : undefined,\n      placeholder: v.default !== undefined && v.default !== null ? String(v.default) : undefined,\n      defaultValue: v.default,\n    });\n  }\n  return result;\n}\n\nexport interface StepDetailsDrawerData {\n  step: TestCaseStepConfig;\n  stepNumber: number | string;\n  /** Dynamic field definitions (e.g. from API natural_test_actions.variables). When provided, drawer renders from this array only. */\n  dynamicFields: DynamicFieldConfig[];\n  /** Optional drawer title (e.g. \"API Step Details\"). When omitted, defaults to \"Step Details\". */\n  title?: string;\n  /** Optional pwLocator array for \"Other Locators\" section. */\n  pwLocator?: string[];\n}\n\nexport const STEP_DETAILS_DRAWER_DATA = new InjectionToken<StepDetailsDrawerData>('STEP_DETAILS_DRAWER_DATA');\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { STEP_DETAILS_DRAWER_REF, StepDetailsDrawerRef } from './step-details-drawer-ref';\nimport { STEP_DETAILS_DRAWER_DATA, StepDetailsDrawerData, DynamicFieldConfig } from './step-details-drawer-data';\nimport { TestCaseStepConfig } from '../test-case-step.models';\nimport type {\n  DynamicSelectFieldConfig,\n  SelectOption,\n} from '../../dynamic-select/dynamic-select-field.component';\n\n/**\n * Step Details Drawer (Edit In Depth).\n * Renders only from the provided DynamicFieldConfig[]; no filtering or step-type-based field logic.\n * Each step instance receives its own complete field configuration. Generic key-based step read/write.\n */\n@Component({\n  selector: 'cqa-step-details-drawer',\n  templateUrl: './step-details-drawer.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepDetailsDrawerComponent implements OnInit, OnChanges {\n  @Output() saveChanges = new EventEmitter<TestCaseStepConfig>();\n  @Output() cancel = new EventEmitter<void>();\n  @Output() saveAsTemplate = new EventEmitter<TestCaseStepConfig>();\n\n  @Input() stepData: TestCaseStepConfig | null = null;\n  @Input() stepNumberInput: number | string | null = null;\n  /** When provided (e.g. Storybook), use instead of STEP_DETAILS_DRAWER_DATA.dynamicFields. */\n  @Input() dynamicFieldsInput: DynamicFieldConfig[] | null = null;\n  /** When provided, use as drawer header title (overrides data.title). */\n  @Input() drawerTitle: string | null = null;\n\n  step: TestCaseStepConfig;\n  stepNumber: number | string;\n  dynamicFields: DynamicFieldConfig[] = [];\n  drawerTitleValue = 'Step Details';\n  advancedExpanded = false;\n  form: FormGroup;\n  pwLocator: string[] = [];\n\n  /** Cached select configs per field key (stable refs for change detection). */\n  private selectConfigCache: Record<string, DynamicSelectFieldConfig> = {};\n  \n  /** Cache for data type select configs */\n  private dataTypeSelectConfigCache: Record<string, DynamicSelectFieldConfig> = {};\n  \n  /** Store data types for test-data fields */\n  private fieldDataTypes: Map<string, 'plain-text' | 'parameter' | 'runtime' | 'environment'> = new Map();\n  \n  /** Store raw values (without formatting) for test-data fields */\n  private fieldRawValues: Map<string, string> = new Map();\n  \n  /** Pre-computed data type options (static, no need to recreate) */\n  private readonly dataTypeOptions: SelectOption[] = [\n    { id: 'plain-text', value: 'plain-text', name: 'Plain Text', label: 'Plain Text' },\n    { id: 'parameter', value: 'parameter', name: '@|Parameter|', label: '@|Parameter|' },\n    { id: 'runtime', value: 'runtime', name: '$|Runtime|', label: '$|Runtime|' },\n    { id: 'environment', value: 'environment', name: '*|Environment|', label: '*|Environment|' }\n  ];\n\n  /** All fields from the provided array (same reference; used for single source of truth in template). */\n  get allFields(): DynamicFieldConfig[] {\n    return this.dynamicFields;\n  }\n\n  /** Fields in main section (section === 'main' or undefined). */\n  get mainFields(): DynamicFieldConfig[] {\n    return this.dynamicFields.filter((f) => (f.section ?? 'main') === 'main');\n  }\n\n  /** Fields in constraints section. */\n  get constraintsFields(): DynamicFieldConfig[] {\n    return this.dynamicFields.filter((f) => f.section === 'constraints');\n  }\n\n  /** Fields in advanced section (inside expandable block). */\n  get advancedFields(): DynamicFieldConfig[] {\n    return this.dynamicFields.filter((f) => f.section === 'advanced');\n  }\n\n  /** True when the field at index is the first in its section (for showing section headers). */\n  isFirstInSection(index: number, section: 'main' | 'constraints' | 'advanced'): boolean {\n    const f = this.dynamicFields[index];\n    if (!f) return false;\n    const fSection = f.section ?? 'main';\n    if (fSection !== section) return false;\n    if (index === 0) return true;\n    const prev = this.dynamicFields[index - 1];\n    return (prev?.section ?? 'main') !== section;\n  }\n\n  /** True when the field at index is not in the advanced section (render in main flow). */\n  isNonAdvancedField(index: number): boolean {\n    const f = this.dynamicFields[index];\n    return f != null && (f.section ?? 'main') !== 'advanced';\n  }\n\n  constructor(\n    @Inject(STEP_DETAILS_DRAWER_REF) private ref: StepDetailsDrawerRef,\n    private fb: FormBuilder,\n    private cdr: ChangeDetectorRef,\n    @Optional() @Inject(STEP_DETAILS_DRAWER_DATA) data?: StepDetailsDrawerData\n  ) {\n    this.step = data?.step ?? ({} as TestCaseStepConfig);\n    this.stepNumber = data?.stepNumber ?? 1;\n    this.dynamicFields = data?.dynamicFields ?? [];\n    this.drawerTitleValue = data?.title ?? 'Step Details';\n    this.pwLocator = data?.pwLocator ?? (this.step as any).pwLocator ?? [];\n    this.form = this.fb.group({});\n    this.buildFormFromDynamicFields();\n  }\n\n  ngOnInit(): void {\n    if (this.stepData != null || this.dynamicFieldsInput != null || this.drawerTitle != null) {\n      if (this.stepData != null) {\n        this.step = this.stepData;\n        this.stepNumber = this.stepNumberInput ?? (this.stepData as any).stepNumber ?? 1;\n        // Initialize pwLocator from stepData if available\n        if ((this.stepData as any).pwLocator) {\n          this.pwLocator = Array.isArray((this.stepData as any).pwLocator) ? [...(this.stepData as any).pwLocator] : [];\n        }\n      }\n      if (this.dynamicFieldsInput != null) {\n        this.dynamicFields = this.dynamicFieldsInput;\n      }\n      if (this.drawerTitle != null && this.drawerTitle !== '') {\n        this.drawerTitleValue = this.drawerTitle;\n      }\n      this.buildFormFromDynamicFields();\n      this.cdr.markForCheck();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['stepData'] || changes['stepNumberInput'] || changes['dynamicFieldsInput'] || changes['drawerTitle']) {\n      if (this.stepData != null) {\n        this.step = this.stepData;\n        this.stepNumber = this.stepNumberInput ?? (this.stepData as any).stepNumber ?? 1;\n        // Initialize pwLocator from stepData if available\n        if ((this.stepData as any).pwLocator) {\n          this.pwLocator = Array.isArray((this.stepData as any).pwLocator) ? [...(this.stepData as any).pwLocator] : [];\n        }\n      }\n      if (this.dynamicFieldsInput != null) {\n        this.dynamicFields = this.dynamicFieldsInput;\n      }\n      if (this.drawerTitle != null && this.drawerTitle !== '') {\n        this.drawerTitleValue = this.drawerTitle;\n      }\n      this.buildFormFromDynamicFields();\n      this.cdr.detectChanges();\n    }\n  }\n\n  private buildFormFromDynamicFields(): void {\n    const group: Record<string, unknown> = {};\n    for (const field of this.dynamicFields) {\n      const raw = this.getStepValue(field.key);\n      const value =\n        (raw === undefined || raw === '') && field.defaultValue !== undefined\n          ? field.defaultValue\n          : raw;\n      group[field.key] = [value];\n      \n      // Initialize data types and raw values for test-data fields\n      if (this.needsDataTypeDropdown(field)) {\n        const { dataType, rawValue } = this.parseTestDataValue(String(value || ''));\n        this.fieldDataTypes.set(field.key, dataType);\n        this.fieldRawValues.set(field.key, rawValue);\n        \n        // Ensure form control exists for data type\n        const dataTypeControlName = `${field.key}_dataType`;\n        if (!this.form.get(dataTypeControlName)) {\n          group[dataTypeControlName] = [dataType];\n        }\n      }\n    }\n    this.form = this.fb.group(group);\n    this.selectConfigCache = {};\n    this.dataTypeSelectConfigCache = {};\n  }\n\n  /** Read value from step by key. No step-type logic; step is a generic key-value bag. */\n  getStepValue(key: string): unknown {\n    const step = this.step as unknown as Record<string, unknown>;\n    const raw = step[key];\n    if (raw === undefined || raw === null) return '';\n    return raw;\n  }\n\n  /** Write value to step by key. No step-type logic; step is a generic key-value bag. */\n  setStepValue(key: string, value: unknown): void {\n    const step = this.step as unknown as Record<string, unknown>;\n    step[key] = value;\n  }\n\n  onBack(): void {\n    this.cancel.emit();\n    this.ref.close(undefined);\n  }\n\n  onClose(): void {\n    this.cancel.emit();\n    this.ref.close(undefined);\n  }\n\n  onCancel(): void {\n    this.cancel.emit();\n    this.ref.close(undefined);\n  }\n\n  onSaveAsTemplate(): void {\n    this.applyFormToStep();\n    this.saveAsTemplate.emit(this.step);\n    this.ref.close({ action: 'saveAsTemplate', step: this.step });\n  }\n\n  onSaveChanges(): void {\n    this.applyFormToStep();\n    this.saveChanges.emit(this.step);\n    this.ref.close({ action: 'saveChanges', step: this.step });\n  }\n\n  private applyFormToStep(): void {\n    for (const field of this.dynamicFields) {\n      if (this.form.contains(field.key)) {\n        this.setStepValue(field.key, this.form.get(field.key)?.value);\n      }\n    }\n    // Save pwLocator (Other Locators)\n    (this.step as any).pwLocator = [...this.pwLocator];\n  }\n\n  copyLocator(inputElement: HTMLInputElement): void {\n    inputElement.select();\n    document.execCommand('copy');\n    inputElement.setSelectionRange(0, 0);\n    inputElement.focus();\n  }\n\n  deleteLocator(index: number): void {\n    if (index >= 0 && index < this.pwLocator.length) {\n      this.pwLocator.splice(index, 1);\n      this.cdr.markForCheck();\n    }\n  }\n\n  /** Build select config for dropdown field (cached per key). */\n  getSelectConfig(field: DynamicFieldConfig): DynamicSelectFieldConfig | null {\n    if (field.type !== 'dropdown' || !field.options?.length) return null;\n    if (this.selectConfigCache[field.key]) return this.selectConfigCache[field.key];\n    const options: SelectOption[] = field.options.map((o) => ({ value: o.value, label: o.label }));\n    this.selectConfigCache[field.key] = {\n      key: field.key,\n      placeholder: field.placeholder ?? field.label,\n      options,\n    };\n    return this.selectConfigCache[field.key];\n  }\n\n  /** Resolved header title for template: @Input drawerTitle > injected data.title > default. */\n  get displayTitle(): string {\n    return this.drawerTitleValue;\n  }\n  \n  /** Check if field needs data type dropdown (test-data, source-value, target-value) */\n  needsDataTypeDropdown(field: DynamicFieldConfig): boolean {\n    const label = field.label?.toLowerCase() || '';\n    return label === 'test-data' || label === 'source-value' || label === 'target-value' || \n           label === 'source_value' || label === 'target_value';\n  }\n  \n  /** Parse test data value to extract data type and raw value */\n  private parseTestDataValue(value: string): { dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment', rawValue: string } {\n    if (!value || typeof value !== 'string') {\n      return { dataType: 'plain-text', rawValue: '' };\n    }\n    \n    // Check for parameter format: @|value|\n    if (value.startsWith('@|') && value.endsWith('|')) {\n      return { dataType: 'parameter', rawValue: value.slice(2, -1) };\n    }\n    // Check for runtime format: $|value|\n    else if (value.startsWith('$|') && value.endsWith('|')) {\n      return { dataType: 'runtime', rawValue: value.slice(2, -1) };\n    }\n    // Check for environment format: *|value|\n    else if (value.startsWith('*|') && value.endsWith('|')) {\n      return { dataType: 'environment', rawValue: value.slice(2, -1) };\n    }\n    // Plain text (no formatting)\n    else {\n      return { dataType: 'plain-text', rawValue: value };\n    }\n  }\n  \n  /** Format test data value based on data type */\n  private formatTestDataValue(rawValue: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment'): string {\n    if (!rawValue) {\n      return '';\n    }\n    \n    switch (dataType) {\n      case 'parameter':\n        return `@|${rawValue}|`;\n      case 'runtime':\n        return `$|${rawValue}|`;\n      case 'environment':\n        return `*|${rawValue}|`;\n      case 'plain-text':\n      default:\n        return rawValue;\n    }\n  }\n  \n  /** Get data type select config for a field */\n  getDataTypeSelectConfig(field: DynamicFieldConfig): DynamicSelectFieldConfig | null {\n    if (!this.needsDataTypeDropdown(field)) return null;\n    \n    if (this.dataTypeSelectConfigCache[field.key]) {\n      return this.dataTypeSelectConfigCache[field.key];\n    }\n    \n    const dataTypeControlName = `${field.key}_dataType`;\n    \n    // Ensure form control exists\n    if (!this.form.get(dataTypeControlName)) {\n      const currentDataType = this.fieldDataTypes.get(field.key) || 'plain-text';\n      this.form.addControl(dataTypeControlName, this.fb.control(currentDataType));\n    }\n    \n    const config: DynamicSelectFieldConfig = {\n      key: dataTypeControlName,\n      placeholder: 'Select Type',\n      multiple: false,\n      searchable: false,\n      options: this.dataTypeOptions,\n      onChange: (value: any) => {\n        this.onDataTypeChange(field.key, value);\n      }\n    };\n    \n    this.dataTypeSelectConfigCache[field.key] = config;\n    return config;\n  }\n  \n  /** Get current data type for a field */\n  getCurrentDataType(field: DynamicFieldConfig): 'plain-text' | 'parameter' | 'runtime' | 'environment' {\n    return this.fieldDataTypes.get(field.key) || 'plain-text';\n  }\n  \n  /** Get raw value (without formatting) for a field */\n  getRawValue(field: DynamicFieldConfig): string {\n    return this.fieldRawValues.get(field.key) || '';\n  }\n  \n  /** Handle data type change */\n  onDataTypeChange(fieldKey: string, dataType: 'plain-text' | 'parameter' | 'runtime' | 'environment'): void {\n    // Update stored data type\n    this.fieldDataTypes.set(fieldKey, dataType);\n    \n    // Get current raw value\n    const rawValue = this.fieldRawValues.get(fieldKey) || '';\n    \n    // Format the value based on new data type\n    const formattedValue = this.formatTestDataValue(rawValue, dataType);\n    \n    // Update form control\n    if (this.form.get(fieldKey)) {\n      this.form.get(fieldKey)?.setValue(formattedValue, { emitEvent: false });\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n  \n  /** Handle test data value change (raw value input) */\n  onTestDataValueChange(fieldKey: string, rawValue: string): void {\n    // Update stored raw value\n    this.fieldRawValues.set(fieldKey, rawValue);\n    \n    // Get current data type\n    const dataType = this.fieldDataTypes.get(fieldKey) || 'plain-text';\n    \n    // Format the value based on data type\n    const formattedValue = this.formatTestDataValue(rawValue, dataType);\n    \n    // Update form control\n    if (this.form.get(fieldKey)) {\n      this.form.get(fieldKey)?.setValue(formattedValue, { emitEvent: false });\n    }\n    \n    // Mark for check since we're using OnPush\n    this.cdr.markForCheck();\n  }\n}\n","<!-- Step Details Drawer – Edit In Depth. Fully dynamic from DynamicFieldConfig[]. -->\n<div class=\"cqa-flex cqa-flex-col cqa-h-full cqa-w-full cqa-max-w-[480px] cqa-box-border\">\n  <!-- Header: back chevron, title, Step N pill, close -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3 cqa-px-3 cqa-py-2 cqa-bg-white\"\n    style=\"border-bottom: 1px solid #E5E5E5;\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <button type=\"button\" (click)=\"onBack()\"\n        class=\"cqa-flex cqa-items-center cqa-justify-center cqa-w-8 cqa-h-8 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0\"\n        aria-label=\"Back\">\n        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M18 20L14 16L18 12\" stroke=\"#0A0A0A\" stroke-width=\"1.33333\" stroke-linecap=\"round\"\n            stroke-linejoin=\"round\" />\n        </svg>\n      </button>\n      <h2 class=\"cqa-text-[16px] cqa-leading-[19px] cqa-font-semibold cqa-text-[#111827] cqa-m-0 cqa-flex-1\">\n        {{ displayTitle }}\n      </h2>\n      <span class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[5px] cqa-bg-[#D8D9FC] cqa-text-[#090A60] cqa-text-[12px]\">\n        Step {{ stepNumber }}\n      </span>\n    </div>\n    <button type=\"button\" (click)=\"onClose()\"\n      class=\"cqa-flex cqa-items-center cqa-justify-center cqa-min-h-[28px] cqa-min-w-[28px] cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-p-0\"\n      title=\"Close\" aria-label=\"Close\">\n      <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M19 9L9 19\" stroke=\"#4A5565\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        <path d=\"M9 9L19 19\" stroke=\"#4A5565\" stroke-width=\"1.66667\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n    </button>\n  </div>\n\n  <!-- Content: all fields from dynamicFields array (main + constraints in order, then advanced grouped) -->\n  <div class=\"cqa-flex-1 cqa-overflow-y-auto cqa-bg-white cqa-p-4 cqa-flex cqa-flex-col cqa-gap-1.5\">\n    <ng-container *ngIf=\"dynamicFields.length > 0\">\n      <!-- All non-advanced fields in array order with section headers -->\n      <ng-container *ngFor=\"let field of dynamicFields; let i = index\">\n        <ng-container *ngIf=\"isNonAdvancedField(i)\">\n          <p *ngIf=\"isFirstInSection(i, 'main')\"\n            class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text[#0A0A0A] cqa-mb-1\">Attributes</p>\n          <p *ngIf=\"isFirstInSection(i, 'constraints')\"\n            class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text[#0A0A0A] cqa-mb-1\">Constraints</p>\n\n          <!-- string / undefined → text input -->\n          <div *ngIf=\"(field.type ?? 'string') === 'string' && !needsDataTypeDropdown(field)\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <label class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-medium cqa-text-[#161617]\">{{ field.label }}</label>\n            <cqa-custom-input [placeholder]=\"field.placeholder || ''\" [value]=\"form.get(field.key)?.value\"\n              [fullWidth]=\"true\" (valueChange)=\"form.get(field.key)?.setValue($event)\">\n            </cqa-custom-input>\n          </div>\n\n          <!-- Test-data, source-value, or target-value with data type dropdown -->\n          <ng-container *ngIf=\"(field.type ?? 'string') === 'string' && needsDataTypeDropdown(field)\">\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n              <label class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-medium cqa-text-[#161617]\">{{ field.label }} Type</label>\n              <cqa-dynamic-select *ngIf=\"getDataTypeSelectConfig(field) && form.contains(field.key + '_dataType')\" \n                [form]=\"form\" [config]=\"getDataTypeSelectConfig(field)!\">\n              </cqa-dynamic-select>\n            </div>\n            <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n              <label class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-medium cqa-text-[#161617]\">{{ field.label }}</label>\n              <cqa-custom-input [placeholder]=\"field.placeholder || ''\" [value]=\"getRawValue(field)\"\n                [fullWidth]=\"true\" (valueChange)=\"onTestDataValueChange(field.key, $event)\">\n              </cqa-custom-input>\n            </div>\n          </ng-container>\n\n          <!-- number -->\n          <div *ngIf=\"field.type === 'number'\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <label class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-medium cqa-text-[#161617]\">{{ field.label }}</label>\n            <cqa-custom-input type=\"number\" [placeholder]=\"field.placeholder || ''\" [value]=\"form.get(field.key)?.value\"\n              [fullWidth]=\"true\" (valueChange)=\"form.get(field.key)?.setValue($event)\">\n            </cqa-custom-input>\n          </div>\n\n          <!-- textarea -->\n          <div *ngIf=\"field.type === 'textarea'\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <label class=\"cqa-text-[14px] cqa-leading-[17px] cqa-font-medium cqa-text-[#161617]\">{{ field.label }}</label>\n              <span *ngIf=\"field.required\"\n                class=\"cqa-px-2 cqa-py-0.5 cqa-rounded-full cqa-bg-[#FEE2E2] cqa-text-[#DC2626] cqa-text-[10px] cqa-font-medium\">Required</span>\n            </div>\n            <cqa-custom-textarea [placeholder]=\"field.placeholder || ''\" [value]=\"form.get(field.key)?.value\"\n              [fullWidth]=\"true\" [rows]=\"field.rows || 4\" customClass=\"cqa-p-2 cqa-text-[14px] cqa-leading-[20px]\"\n              (valueChange)=\"form.get(field.key)?.setValue($event)\">\n            </cqa-custom-textarea>\n            <p *ngIf=\"field.tip\" class=\"cqa-text-[12px] cqa-text-[#6B7280] cqa--mt-1.5\">{{ field.tip }}</p>\n          </div>\n\n          <!-- code -->\n          <div *ngIf=\"field.type === 'code'\" class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n            <cqa-custom-textarea [placeholder]=\"field.placeholder || ''\" [value]=\"form.get(field.key)?.value\"\n              [fullWidth]=\"true\" [rows]=\"8\" resize=\"vertical\" customClass=\"cqa-p-2 cqa-text-[14px] cqa-leading-[20px]\"\n              (valueChange)=\"form.get(field.key)?.setValue($event)\">\n            </cqa-custom-textarea>\n          </div>\n\n          <!-- boolean → toggle -->\n          <div *ngIf=\"field.type === 'boolean'\" class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2\">\n            <div>\n              <p class=\"cqa-text-[12px] cqa-text-[#111827] cqa-m-0\">{{ field.label }}</p>\n              <span *ngIf=\"field.subLabel\" class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{\n                field.subLabel }}</span>\n            </div>\n            <cqa-custom-toggle [checked]=\"form.get(field.key)?.value\"\n              (checkedChange)=\"form.get(field.key)?.setValue($event)\">\n            </cqa-custom-toggle>\n          </div>\n\n          <!-- dropdown -->\n          <div *ngIf=\"field.type === 'dropdown' && getSelectConfig(field) && form.contains(field.key)\"\n            class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-step-details-drawer-select\">\n            <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n            <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(field)!\">\n            </cqa-dynamic-select>\n          </div>\n        </ng-container>\n      </ng-container>\n\n      <!-- Advanced: expandable (all advanced fields from array) -->\n      <ng-container *ngIf=\"advancedFields.length > 0\">\n        <button type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-between cqa-w-full cqa-text-left cqa-text-[12px] cqa-font-medium cqa-text-[#111827] cqa-py-2 cqa-border-b cqa-border-[#E5E7EB]\"\n          (click)=\"advancedExpanded = !advancedExpanded\">\n          <span>Advanced</span>\n          <mat-icon class=\"cqa-text-[20px] cqa-transition-transform\" [class.cqa-rotate-180]=\"!advancedExpanded\">\n            expand_less\n          </mat-icon>\n        </button>\n        <div *ngIf=\"advancedExpanded\" class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-pt-2\">\n          <ng-container *ngFor=\"let field of advancedFields\">\n            <div *ngIf=\"(field.type ?? 'string') === 'string' && !needsDataTypeDropdown(field)\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n              <cqa-custom-input [placeholder]=\"field.placeholder || ''\" [value]=\"form.get(field.key)?.value\"\n                [fullWidth]=\"true\" (valueChange)=\"form.get(field.key)?.setValue($event)\">\n              </cqa-custom-input>\n            </div>\n            \n            <!-- Test-data, source-value, or target-value with data type dropdown in advanced section -->\n            <ng-container *ngIf=\"(field.type ?? 'string') === 'string' && needsDataTypeDropdown(field)\">\n              <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n                <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }} Type</label>\n                <cqa-dynamic-select *ngIf=\"getDataTypeSelectConfig(field) && form.contains(field.key + '_dataType')\" \n                  [form]=\"form\" [config]=\"getDataTypeSelectConfig(field)!\">\n                </cqa-dynamic-select>\n              </div>\n              <div class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n                <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n                <cqa-custom-input [placeholder]=\"field.placeholder || ''\" [value]=\"getRawValue(field)\"\n                  [fullWidth]=\"true\" (valueChange)=\"onTestDataValueChange(field.key, $event)\">\n                </cqa-custom-input>\n              </div>\n            </ng-container>\n            <div *ngIf=\"field.type === 'number'\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5\">\n              <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n              <cqa-custom-input type=\"number\" [placeholder]=\"field.placeholder || ''\"\n                [value]=\"form.get(field.key)?.value\" [fullWidth]=\"true\"\n                (valueChange)=\"form.get(field.key)?.setValue($event)\">\n              </cqa-custom-input>\n            </div>\n            <div *ngIf=\"field.type === 'boolean'\" class=\"cqa-flex cqa-items-center cqa-gap-2\">\n              <cqa-custom-toggle [checked]=\"form.get(field.key)?.value\"\n                (checkedChange)=\"form.get(field.key)?.setValue($event)\">\n              </cqa-custom-toggle>\n              <div class=\"cqa-flex cqa-flex-col\">\n                <span class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#737373]\">{{ field.label }}</span>\n                <span class=\"cqa-text-[12px] cqa-text-[#0A0A0A]\" *ngIf=\"field.subLabel\">{{ field.subLabel }}</span>\n              </div>\n            </div>\n            <div *ngIf=\"field.type === 'dropdown' && getSelectConfig(field) && form.contains(field.key)\"\n              class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-step-details-drawer-select\">\n              <label class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#374151]\">{{ field.label }}</label>\n              <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(field)!\">\n              </cqa-dynamic-select>\n            </div>\n          </ng-container>\n        </div>\n      </ng-container>\n\n      <!-- Other Locators section (matching old UI) -->\n      <ng-container *ngIf=\"pwLocator && pwLocator.length > 0\">\n        <p class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#6B7280] cqa-mb-3 cqa-mt-0\">Other Locators</p>\n        <div *ngFor=\"let locator of pwLocator; let i = index\" class=\"cqa-mb-3\">\n          <div *ngIf=\"locator !== ''\" class=\"cqa-relative cqa-flex cqa-items-center\">\n            <input type=\"text\" [value]=\"locator\" #locatorInput readonly\n              class=\"cqa-w-full cqa-px-3 cqa-py-2 cqa-pr-20 cqa-border cqa-border-[#E5E7EB] cqa-rounded cqa-text-[14px] cqa-bg-white\"\n              style=\"padding-left: 26px;\">\n            <button type=\"button\" (click)=\"copyLocator(locatorInput)\"\n              class=\"cqa-absolute cqa-left-2 cqa-top-1/2 cqa-transform cqa--translate-y-1/2 cqa-p-1 cqa-text-[#6B7280] hover:cqa-text-[#374151]\"\n              title=\"Click to Copy\">\n              <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">content_copy</mat-icon>\n            </button>\n            <button type=\"button\" (click)=\"deleteLocator(i)\"\n              class=\"cqa-absolute cqa-right-2 cqa-top-1/2 cqa-transform cqa--translate-y-1/2 cqa-p-1 cqa-text-[#6B7280] hover:cqa-text-[#DC2626]\"\n              title=\"Delete\">\n              <mat-icon class=\"!cqa-w-5 !cqa-h-5 !cqa-text-[20px]\">delete</mat-icon>\n            </button>\n          </div>\n        </div>\n      </ng-container>\n    </ng-container>\n\n    <p *ngIf=\"dynamicFields.length === 0\" class=\"cqa-text-[14px] cqa-text-[#6B7280]\">No fields configured for this step.\n    </p>\n  </div>\n  <div class=\"cqa-border cqa-border-solid cqa-border-[#E5E5E5]\"> </div>\n  <!-- Footer -->\n  <div\n    class=\"cqa-flex cqa-items-center cqa-justify-start cqa-gap-2 cqa-px-4 cqa-py-4 cqa-border-t cqa-border-[#E5E7EB] cqa-bg-white\">\n    <cqa-button variant=\"text\" btnSize=\"lg\" [text]=\"'Cancel'\" (clicked)=\"onCancel()\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-text-[#374151]'\"></cqa-button>\n    <div class=\"cqa-flex-1 cqa-min-w-0\"></div>\n    <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"'Save as Template'\" (clicked)=\"onSaveAsTemplate()\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\"></cqa-button>\n    <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"'Save Changes'\" (clicked)=\"onSaveChanges()\"\n      [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-bg-[#3F43EE] cqa-border-[#3F43EE]'\"></cqa-button>\n  </div>\n</div>","import { InjectionToken } from '@angular/core';\n\nexport interface StepDetailsModalData {\n  title: string;\n  description: string;\n}\n\n/** Payload emitted when View Details is clicked - parent opens popup (e.g. view-details-popup-wrapper) */\nexport interface ViewDetailsPayload {\n  event: MouseEvent;\n  title: string;\n  description: string;\n}\n\nexport const STEP_DETAILS_MODAL_DATA = new InjectionToken<StepDetailsModalData>(\n  'STEP_DETAILS_MODAL_DATA'\n);\n","import { InjectionToken } from '@angular/core';\nimport { OverlayRef } from '@angular/cdk/overlay';\nimport { Observable, Subject } from 'rxjs';\n\nexport class StepDetailsModalRef<TResult = void> {\n  private readonly closed$ = new Subject<TResult | undefined>();\n  private isClosed = false;\n\n  constructor(private readonly overlayRef: OverlayRef) {\n    this.overlayRef.detachments().subscribe(() => {\n      this.finishClose(undefined);\n    });\n  }\n\n  close(result?: TResult): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.finishClose(result);\n    this.overlayRef.dispose();\n  }\n\n  afterClosed(): Observable<TResult | undefined> {\n    return this.closed$.asObservable();\n  }\n\n  private finishClose(result: TResult | undefined): void {\n    if (this.isClosed) {\n      return;\n    }\n    this.isClosed = true;\n    this.closed$.next(result);\n    this.closed$.complete();\n  }\n}\n\nexport const STEP_DETAILS_MODAL_REF = new InjectionToken<StepDetailsModalRef>(\n  'STEP_DETAILS_MODAL_REF'\n);\n","import {\n  ChangeDetectionStrategy,\n  Component,\n  Inject,\n  Optional,\n} from '@angular/core';\nimport {\n  STEP_DETAILS_MODAL_DATA,\n  StepDetailsModalData,\n} from './step-details-modal-data';\nimport { STEP_DETAILS_MODAL_REF, StepDetailsModalRef } from './step-details-modal-ref';\n\n@Component({\n  selector: 'cqa-step-details-modal',\n  templateUrl: './step-details-modal.component.html',\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepDetailsModalComponent {\n  title: string = '';\n  description: string = '';\n\n  constructor(\n    @Optional() @Inject(STEP_DETAILS_MODAL_REF) private ref?: StepDetailsModalRef,\n    @Optional() @Inject(STEP_DETAILS_MODAL_DATA) data?: StepDetailsModalData\n  ) {\n    if (data) {\n      this.title = data.title || '';\n      this.description = data.description || '';\n    }\n  }\n\n  onClose(): void {\n    if (this.ref) {\n      this.ref.close();\n    }\n  }\n}\n","<div\n  class=\"cqa-bg-white cqa-rounded-[12px] cqa-shadow-lg cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-w-[500px] cqa-flex cqa-flex-col cqa-gap-[12px] cqa-p-2 cqa-box-border\">\n  <!-- Header: down arrow icon + title left; close icon right -->\n  <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-px-4\">\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <!-- Down arrow icon -->\n      <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M4 6L8 10L12 6\" stroke=\"#6B7280\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n      </svg>\n      <h2 class=\"cqa-text-[16px] cqa-leading-[24px] cqa-font-bold cqa-text-[#111827] cqa-m-0 cqa-font-[600]\">\n        {{ title }}\n      </h2>\n    </div>\n    <button type=\"button\" (click)=\"onClose()\"\n      class=\"cqa-p-1 cqa-rounded cqa-text-[#6B7280] hover:cqa-bg-[#F3F4F6] cqa-flex cqa-items-center cqa-justify-center\"\n      title=\"Close\" aria-label=\"Close\">\n      <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n      </svg>\n    </button>\n  </div>\n\n  <!-- Line below header (full width of modal, no side margin) -->\n  <div class=\"cqa--mx-2 cqa-w-[calc(100%+1rem)] cqa-flex-shrink-0\">\n    <div class=\"cqa-h-px cqa-w-full cqa-bg-[#E5E7EB]\" role=\"presentation\"></div>\n  </div>\n\n  <!-- Content Area: Description text -->\n  <div class=\"cqa-px-4 cqa-pb-4\">\n    <div class=\"cqa-text-[14px] cqa-leading-[20px] cqa-text-[#111827] cqa-whitespace-pre-wrap\">\n      {{ description }}\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, OnChanges, Output, SimpleChanges, ChangeDetectorRef } from '@angular/core';\nimport { ConditionStepConfig, ConditionBranch, StepStatus, TimingBreakdown, FailureDetails, SubStep, SelfHealAnalysisData, SelfHealAction, ExecutionStepConfig, SelfHealActionEvent, AddStepMenuOption, DEFAULT_ADD_STEP_MENU_OPTIONS, StepMoreMenuOption, DEFAULT_STEP_MORE_MENU_OPTIONS } from '../execution-step.models';\nimport { BaseStepComponent } from '../base-step.component';\nimport { makeCurrentBaselineEvent, uploadBaselineEvent } from '../visual-comparison/visual-comparison.component';\n\n@Component({\n  selector: 'cqa-condition-debug-step',\n  templateUrl: './condition-debug-step.component.html',\n  host: { class: 'cqa-ui-root cqa-w-full' }\n})\nexport class ConditionDebugStepComponent extends BaseStepComponent implements OnInit, OnChanges {\n  // Individual inputs\n  @Input() id!: string;\n  @Input() testStepResultId!: string;\n  @Input() stepNumber!: string;\n  @Input() title!: string;\n  @Input() status!: StepStatus;\n  @Input() duration!: number;\n  @Input() timingBreakdown?: TimingBreakdown;\n  @Input() expanded?: boolean;\n  @Input() conditionText!: string;\n  @Input() branches: ConditionBranch[] = [];\n  @Input() failureDetails?: FailureDetails;\n  @Input() reasoning?: string[];\n  @Input() confidence?: string;\n  @Input() selfHealAnalysis?: SelfHealAnalysisData;\n  @Input() isLoading?: boolean;\n  @Input() nestedSteps?: ExecutionStepConfig[] = [];\n  @Input() hasChild?: boolean;\n  @Input() stepDeleted?: boolean;\n  @Input() isDebug?: boolean = false;\n  @Input() canEditSteps?: boolean = true;\n  @Input() debugPointSet?: boolean = false;\n  @Input() parentSkipped?: boolean = false;\n  @Input() getDebugPointSetHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() onDebugPointChangeHandler?: (step: ExecutionStepConfig, value: boolean) => void;\n  @Output() debugPointChange = new EventEmitter<boolean>();\n  @Output() editStep = new EventEmitter<void>();\n  @Output() addStepOptionSelect = new EventEmitter<AddStepMenuOption>();\n  @Output() stepMoreOptionSelect = new EventEmitter<StepMoreMenuOption>();\n  @Output() addStepInsideLoop = new EventEmitter<any>();\n  @Input() addStepMenuOptions: AddStepMenuOption[] = DEFAULT_ADD_STEP_MENU_OPTIONS;\n  @Input() stepMoreMenuOptions: StepMoreMenuOption[] = DEFAULT_STEP_MORE_MENU_OPTIONS;\n  @Input() ifChild?: any; // ifChild data from API - if null and hasChild is true, we need to call API\n  @Input() activeBranchStepId?: string | number; // ID of the currently active/selected branch step\n\n  // Debug mode: track which branch is selected for adding steps (different from executed)\n  public selectedBranchForDebug: ConditionBranch | null = null;\n\n  // Handler function to pass down to nested child step groups for recursive expansion\n  @Input() onExpandHandler?: (step: ExecutionStepConfig) => void;\n  /** When provided, passed to nested step-renderer so Edit on nested steps is forwarded with the step config. */\n  @Input() onEditStepHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onAddStepOptionSelectHandler?: (option: AddStepMenuOption, step?: ExecutionStepConfig) => void;\n  @Input() onStepMoreOptionSelectHandler?: (option: StepMoreMenuOption, step?: ExecutionStepConfig) => void;\n  /** When provided, used to get add-step menu options per nested step; otherwise addStepMenuOptions is used for all. Supports arbitrary nesting. */\n  @Input() getAddStepMenuOptionsForNested?: (step: ExecutionStepConfig) => AddStepMenuOption[];\n  /** When provided, used to get step-more menu options per nested step; otherwise stepMoreMenuOptions is used for all. Supports arbitrary nesting. */\n  @Input() getStepMoreMenuOptionsForNested?: (step: ExecutionStepConfig) => StepMoreMenuOption[];\n\n  // Handler functions for condition steps\n  @Input() getConditionBranchesHandler?: (step: ExecutionStepConfig) => ConditionBranch[];\n  @Input() isStepLoadingHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() isStepExpandedHandler?: (step: ExecutionStepConfig) => boolean;\n  @Input() convertMsToSecondsHandler?: (duration: number) => number;\n  @Input() formatFailureDetailsHandler?: (step: ExecutionStepConfig) => any;\n  @Input() getSelfHealAnalysisHandler?: (step: ExecutionStepConfig) => any;\n  @Input() onMakeCurrentBaselineHandler?: (event: any) => void;\n  @Input() onUploadBaselineHandler?: (event: any) => void;\n  @Input() onAnalyzeHandler?: () => void;\n  @Input() onViewFullLogsHandler?: () => void;\n  @Input() onSelfHealActionHandler?: (event: any) => void;\n  @Input() getSelfHealLoadingStatesHandler?: () => { isLoadingAccept: { [key: string]: boolean }; isLoadingModifyAccept: { [key: string]: boolean } };\n  @Input() getLoopIterationsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() getApiAssertionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() formatActionsHandler?: (step: ExecutionStepConfig) => any[];\n  @Input() onViewAllIterationsHandler?: (step: ExecutionStepConfig) => void;\n  @Input() onConditionBranchClickHandler?: (step: any, branch: any) => void;\n  @Input() onStepClickHandler?: (step: ExecutionStepConfig, event?: Event) => void;\n  @Input() onJsonPathCopiedHandler?: (event: { path: string; source: 'requestBody' | 'responseBody' | 'requestHeaders' | 'responseHeaders' }) => void;\n  @Input() onDownloadHandler?: (event: { fileName: string; filePath?: string; fileType: string; testStepResultId: string }) => void;\n  @Input() onFilePathCopiedHandler?: (event: { filePath: string; testStepResultId: string }) => void;\n  @Input() onTextCopiedHandler?: (event: { text: string; testStepResultId: string }) => void;\n  @Input() jumpToTimestampHandler?: (timestamp: number, testStepId?: number | string) => void;\n  @Input() downloadingStepId: string | null = null;\n  @Input() step?: any;\n  get stepBadges(): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const badge = this.step?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  get isSkipped(): boolean {\n    return this.stepBadges.includes('skipped');\n  }\n\n  get isStepDeleted(): boolean {\n    return this.stepBadges.includes('removed');\n  }\n\n  @Output() onBranchClickEvent = new EventEmitter<ConditionBranch>();\n  @Output() onExpand = new EventEmitter<void>();\n  @Output() addElseIfBranch = new EventEmitter<void>();\n  @Output() addElseBranch = new EventEmitter<void>();\n\n  /** Called when user clicks \"Add ELSE IF\" on a branch row. Passes the condition step and the branchIndex after which to insert. */\n  @Input() onAddElseIfBranchAtHandler?: (conditionStep: any, branchIndex: number) => void;\n  /** Called when user clicks \"Add ELSE\" on any branch row. Passes the condition step (this.step). */\n  @Input() onAddElseBranchHandler?: (conditionStep: any) => void;\n  /** Called when user clicks the edit icon on an IF or ELSE IF branch. */\n  @Input() onEditBranchConditionHandler?: (conditionStep: any, branch: any, branchStep: any) => void;\n  @Input() isUploadingBaseline = {};\n  @Input() isMakingCurrentBaseline = {};\n  @Input() isLive: boolean = false;\n  @Output() makeCurrentBaseline = new EventEmitter<makeCurrentBaselineEvent>();\n  @Output() uploadBaseline = new EventEmitter<uploadBaselineEvent>();\n  @Output() analyze = new EventEmitter<void>();\n  @Output() viewFullLogs = new EventEmitter<void>();\n  @Output() selfHealAction = new EventEmitter<SelfHealActionEvent>();\n\n  showFailedStepDetails: boolean = false;\n\n  /** Show debug icon only when this step has no child steps (icon is shown on child steps instead). */\n  /** Show debug icon when debug mode is on (shown on parent and all child steps). */\n  get showDebugIcon(): boolean {\n    return this.isDebug === true;\n  }\n\n  /** Per-step filtered three-dot menu options (e.g. hide Duplicate/Delete for step-group children). */\n  get effectiveStepMoreMenuOptions(): StepMoreMenuOption[] {\n    const base = this.stepMoreMenuOptions || [];\n    const stepRef: any = this.step;\n    if (!stepRef) return base;\n\n    const isGroupChild = !!stepRef.isStepGroupChildren;\n    // When step.stepMoreMenuOptions is truthy OR step is a step-group child, hide mutating items\n    const suppressMutating = !!stepRef.stepMoreMenuOptions || isGroupChild;\n    if (!suppressMutating) return base;\n\n    return base.filter(opt => opt.id !== 'duplicate' && opt.id !== 'delete');\n  }\n  \n  /** True when this condition-step's own breakpoint is disabled (used to propagate parentSkipped to children). */\n  get selfDebugDisabled(): boolean {\n    return !!(this.step as any)?.debugPointDisabled || !!this.parentSkipped || this.isStepDeleted;\n  }\n\n  // Config property for base class - built from individual inputs in ngOnInit\n  override config!: ConditionStepConfig;\n\n  // Track which steps are still loading to show skeleton\n  loadingSteps: Set<string> = new Set();\n\n  // Track which branch indices are expanded (accordion)\n  expandedBranches: Set<number> = new Set();\n\n  constructor(private cdr: ChangeDetectorRef) {\n    super();\n  }\n\n  override ngOnInit(): void {\n    // Always determine active branch from executed branch (for live mode)\n    if (this.isLive) {\n      this.determineActiveBranch();\n    }\n\n    // Filter nested steps based on active branch (derived from executed branch)\n    const stepsToUse = this.nestedSteps || [];\n\n    this.config = {\n      id: this.id,\n      testStepId: this.step?.testStepId || undefined,\n      testStepResultId: this.testStepResultId,\n      stepNumber: this.stepNumber,\n      title: this.title,\n      status: this.status,\n      duration: this.duration,\n      displayType: 'condition',\n      conditionText: this.conditionText,\n      branches: this.branches,\n      stepDeleted: this.stepDeleted,\n      timingBreakdown: this.timingBreakdown,\n      expanded: this.expanded,\n      nestedSteps: stepsToUse,\n    } as ConditionStepConfig;\n\n    // In debug mode, pre-select a branch for adding steps:\n    // prefer the executed branch, otherwise default to the first branch (typically IF).\n    if (this.isDebug && this.branches && this.branches.length > 0) {\n      const executedBranch = this.branches.find(b => b.executed);\n      this.selectedBranchForDebug = executedBranch || this.branches[0];\n    }\n\n    super.ngOnInit();\n\n    // Auto-expand all branches in debug mode (all branches are shown by default)\n    if (this.isDebug && this.branches) {\n      this.branches.forEach((_, index) => this.expandedBranches.add(index));\n    }\n\n    // Initialize loading state if already expanded\n    if (this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n\n  ngOnChanges(changes: SimpleChanges): void {\n    // Only process changes if config has been initialized (ngOnInit has been called)\n    if (!this.config) {\n      return;\n    }\n\n    // Process ifChild if it's provided and branches need to be updated\n    if (changes['ifChild'] && this.ifChild && Array.isArray(this.ifChild) && this.ifChild.length > 0) {\n      // Process ifChild to update branches\n      // This ensures branches reflect the executed condition from ifChild\n      if (this.getConditionBranchesHandler) {\n        // Use handler to get updated branches from ifChild\n        const stepWithIfChild = {\n          ...this.config,\n          ifChild: this.ifChild\n        } as any;\n        const updatedBranches = this.getConditionBranchesHandler(stepWithIfChild);\n        if (updatedBranches && updatedBranches.length > 0) {\n          this.branches = updatedBranches;\n          this.config.branches = updatedBranches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        }\n      }\n    }\n\n    if (changes['stepNumber']) {\n      this.config.stepNumber = changes['stepNumber'].currentValue;\n    }\n\n    if (this.isLive) {\n      // Update branches if changed - create deep copy to ensure change detection works\n      if (changes['branches'] && this.branches !== undefined) {\n        // Create a deep copy to ensure Angular change detection picks up nested changes\n        this.config.branches = this.branches.map((branch: any) => ({\n          ...branch,\n          subSteps: branch.subSteps ? [...branch.subSteps] : []\n        }));\n      } else if (this.branches !== undefined && this.config.branches !== this.branches) {\n        // Fallback: check if branches changed even if ngOnChanges didn't detect it\n        // This handles cases where nested subSteps were updated\n        const currentSubStepsCount = (this.config.branches || []).reduce((sum: number, b: any) => sum + (b.subSteps?.length || 0), 0);\n        const newSubStepsCount = (this.branches || []).reduce((sum: number, b: any) => sum + (b.subSteps?.length || 0), 0);\n\n        if (currentSubStepsCount !== newSubStepsCount ||\n          this.config.branches !== this.branches) {\n          this.config.branches = this.branches.map((branch: any) => ({\n            ...branch,\n            subSteps: branch.subSteps ? [...branch.subSteps] : []\n          }));\n        }\n      }\n\n      // Update other properties that might change\n      if (changes['status'] && this.status !== undefined) {\n        this.config.status = this.status;\n      }\n\n      if (changes['duration'] && this.duration !== undefined) {\n        this.config.duration = this.duration;\n      }\n\n      if (changes['stepDeleted']) {\n        this.config.stepDeleted = this.stepDeleted;\n      }\n\n      if (changes['expanded'] && this.expanded !== undefined) {\n        this.config.expanded = this.expanded;\n        this.isExpanded = this.expanded;\n      }\n\n      if (changes['conditionText'] && this.conditionText !== undefined) {\n        this.config.conditionText = this.conditionText;\n      }\n      // Update active branch if changed - always derive from executed branch\n      if (changes['activeBranchStepId'] || changes['branches']) {\n        // Check if executed branch changed\n        const executedBranchChanged = changes['branches'] && \n          changes['branches'].previousValue && \n          changes['branches'].currentValue &&\n          changes['branches'].previousValue.some((prevBranch: any, index: number) => {\n            const currentBranch = changes['branches'].currentValue[index];\n            return prevBranch?.executed !== currentBranch?.executed;\n          });\n\n        // Always determine active branch from executed branch\n        this.determineActiveBranch();\n      }\n\n      // Filter nested steps based on active branch\n      if (changes['nestedSteps'] || changes['activeBranchStepId']) {\n        this.config.nestedSteps = this.nestedSteps;\n      }\n\n      if (changes['branches']) {\n        this.config.branches = this.branches;\n      }\n    }\n\n    if (changes['stepDeleted']) {\n      this.config.stepDeleted = this.stepDeleted;\n    }\n\n    // Initialize loading state when nested steps are added and step is expanded\n    // if (changes['nestedSteps'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n    //   console.log(\"NESTED STEPS\", this.loadingSteps)\n    //   this.loadingSteps.clear();\n    //   this.nestedSteps.forEach(step => {\n    //     const stepId = step.testStepResultId || step.id;\n    //     if (stepId) {\n    //       this.loadingSteps.add(String(stepId));\n    //     }\n    //   });\n    //   console.log(\"NESTED STEPS\", this.loadingSteps)\n    // }\n\n    // Initialize loading state if already expanded when component initializes\n    if (changes['expanded'] && this.isExpanded && this.nestedSteps && this.nestedSteps.length > 0) {\n      this.loadingSteps.clear();\n      this.nestedSteps.forEach(step => {\n        const stepId = step.testStepResultId || step.id;\n        if (stepId) {\n          this.loadingSteps.add(String(stepId));\n        }\n      });\n    }\n  }\n\n  override toggle(): void {\n    const wasExpanded = this.isExpanded;\n    super.toggle();\n    if (!wasExpanded && this.isExpanded) {\n      this.onExpand.emit();\n      // Always call children API if hasChild is true (like other step types)\n      // If ifChild exists and has an executed condition (result: \"SUCCESS\"), use that condition's testStepResultId\n      if (this.onExpandHandler && this.config && this.hasChild) {\n        const configWithNested = this.config as ConditionStepConfig;\n\n        // Find the executed condition from ifChild (the one with result: \"SUCCESS\")\n        let executedConditionTestStepResultId = this.testStepResultId; // Default to parent's ID\n        let executedConditionHasChild = this.hasChild;\n\n        if (this.ifChild && Array.isArray(this.ifChild) && this.ifChild.length > 0) {\n          const executedCondition = this.ifChild.find((condition: any) =>\n            condition.result === 'SUCCESS' || condition.result === 'SUCCESS'\n          );\n\n          if (executedCondition && executedCondition.testStepResultId) {\n            // Use the executed condition's testStepResultId and hasChild\n            executedConditionTestStepResultId = executedCondition.testStepResultId;\n            executedConditionHasChild = executedCondition.hasChild || false;\n          }\n        }\n\n        // Create a step config object for the handler\n        const stepConfig = {\n          ...this.config,\n          hasChild: executedConditionHasChild,\n          expanded: true, // Ensure expanded is set\n          testStepType: (this.config as any).testStepType || 'CONDITION_IF',\n          children: configWithNested.nestedSteps || [],\n          testStepResultId: executedConditionTestStepResultId, // Use executed condition's ID for API call\n          id: this.id,\n          ifChild: this.ifChild || null, // Pass ifChild for branch execution determination\n          // Store original parent testStepResultId for tracking states and updating parent structure\n          originalTestStepResultId: this.testStepResultId\n        } as ExecutionStepConfig & { originalTestStepResultId?: string | number };\n        this.onExpandHandler(stepConfig);\n      }\n      // Initialize loading state for all nested steps\n      if (this.config.nestedSteps && this.config.nestedSteps.length > 0) {\n        this.loadingSteps.clear();\n        this.config.nestedSteps.forEach(step => {\n          const stepId = step.testStepResultId || step.id;\n          if (stepId) {\n            this.loadingSteps.add(String(stepId));\n          }\n        });\n      }\n    } else if (!this.isExpanded) {\n      // Clear loading state when collapsing\n      this.loadingSteps.clear();\n    }\n\n    // Ensure expanded state is synced with config\n    if (this.config) {\n      this.config.expanded = this.isExpanded;\n    }\n    if (this.isDebug && this.step) (this.step as any).expanded = this.isExpanded;\n  }\n\n  // Check if a step is still loading\n  isNestedStepLoading(step: ExecutionStepConfig): boolean {\n    const stepId = step.testStepResultId || step.id;\n    return stepId ? this.loadingSteps.has(String(stepId)) : false;\n  }\n\n  // Mark a step as loaded (called when step-renderer is ready)\n  markStepLoaded(step: ExecutionStepConfig): void {\n    const stepId = step.testStepResultId || step.id;\n    if (stepId) {\n      this.loadingSteps.delete(String(stepId));\n    }\n  }\n\n  toggleBranch(index: number, event?: Event): void {\n    if (event) event.stopPropagation();\n    if (this.expandedBranches.has(index)) {\n      this.expandedBranches.delete(index);\n    } else {\n      this.expandedBranches.add(index);\n    }\n  }\n\n  isBranchExpanded(index: number): boolean {\n    return this.expandedBranches.has(index);\n  }\n\n  getExecutedBranch(): ConditionBranch | null {\n    return this.branches.find(branch => branch.executed) || null;\n  }\n\n  getUnexecutedBranches(): ConditionBranch[] {\n    return this.branches?.filter(branch => !branch.executed) || [];\n  }\n\n  getSubStepIndex(subSteps: any[], subStep: any): number {\n    return subSteps.indexOf(subStep) + 1;\n  }\n\n  // Check if this step is currently loading nested children\n  isStepLoading(): boolean {\n    if (this.isStepLoadingHandler && this.config) {\n      return this.isStepLoadingHandler(this.config);\n    }\n    return this.isLoading || false;\n  }\n\n  onViewMoreFailedStepClick(expanded: boolean): void {\n    this.showFailedStepDetails = expanded;\n  }\n\n  getSubStepsForFailedStep(): SubStep[] {\n    const executedBranch = this.getExecutedBranch();\n    return executedBranch?.subSteps || [];\n  }\n\n  onMakeCurrentBaseline(event: makeCurrentBaselineEvent): void {\n    this.makeCurrentBaseline.emit(event);\n  }\n\n  onUploadBaseline(event: uploadBaselineEvent): void {\n    this.uploadBaseline.emit(event);\n  }\n\n  onAnalyze(): void {\n    this.analyze.emit();\n  }\n\n  onViewFullLogs(): void {\n    this.viewFullLogs.emit();\n  }\n\n  onSelfHealAction(event: SelfHealActionEvent): void {\n    this.selfHealAction.emit(event);\n  }\n\n  get showViewMoreButton(): boolean {\n    return this.isExpanded && Boolean(this.failureDetails) &&\n      (\n        (Boolean(this.failureDetails?.expected || this.failureDetails?.actual)) ||\n        (Boolean(this.failureDetails?.screenshots?.current || this.failureDetails?.screenshots?.baseline || this.failureDetails?.screenshots?.difference)\n          || Boolean(this.failureDetails?.logs?.length)) ||\n        (Boolean(this.failureDetails?.aiFixApplied && (this.failureDetails?.aiFixMessage || this.confidence || this.reasoning?.length)))\n      )\n  }\n\n  onDebugPointClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.debugPointChange.emit(!this.debugPointSet);\n  }\n\n  onEditStep(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    this.editStep.emit();\n  }\n\n  onAddStepOptionSelect(option: AddStepMenuOption, event: Event): void {\n    event.preventDefault();\n    this.addStepOptionSelect.emit(option);\n  }\n\n  onStepMoreOptionSelect(option: StepMoreMenuOption, event: Event): void {\n    event.preventDefault();\n    this.stepMoreOptionSelect.emit(option);\n  }\n\n  onAddStepInsideBranch(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (!this.selectedBranchForDebug) {\n      return;\n    }\n    \n    // Create a special option to indicate adding step inside a specific branch\n    const branchAddOption: AddStepMenuOption = {\n      id: 'add-inside-branch',\n      label: `Add step inside ${this.selectedBranchForDebug.type.toUpperCase()} branch`,\n      position: 'inside',\n      branchType: this.selectedBranchForDebug.type, // Pass the branch type\n      branchStepId: (this.selectedBranchForDebug as any).branchStepUniqueId || (this.selectedBranchForDebug as any).branchStepId // Prefer uniqueId\n    };\n    \n    this.addStepOptionSelect.emit(branchAddOption);\n  }\n\n  toggleHeader(event?: Event): void {\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n    }\n    this.toggle();\n    if (!this.isExpanded) {\n      this.showFailedStepDetails = false;\n    }\n    if (this.onStepClickHandler) {\n      const stepToPass = this.step || this.config;\n      if (stepToPass) {\n        this.onStepClickHandler(stepToPass, event);\n      }\n    }\n  }\n\n  get hasExpandableContent(): boolean {\n    // In debug mode, always expandable when there are branches\n    if (this.isDebug && this.config.branches && this.config.branches.length > 0) {\n      return true;\n    }\n    const hasBranchSubSteps = this.config.branches?.some(branch =>\n      branch.subSteps && branch.subSteps.length > 0\n    ) || false;\n    const hasNestedSteps = !!(this.config.nestedSteps && this.config.nestedSteps.length > 0);\n    return hasBranchSubSteps || hasNestedSteps || !!(this.hasChild);\n  }\n\n  /** True when any branch has type 'else' — used to hide the \"Add ELSE\" button. */\n  get hasElseBranch(): boolean {\n    return this.config?.branches?.some(b => b.type === 'else') ?? false;\n  }\n\n  onAddElseIfClick(event: Event, branchIndex: number): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.onAddElseIfBranchAtHandler) {\n      this.onAddElseIfBranchAtHandler(this.step || this.config, branchIndex);\n    }\n    this.addElseIfBranch.emit();\n  }\n\n  onAddElseClick(event: Event): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (this.onAddElseBranchHandler) {\n      this.onAddElseBranchHandler(this.step || this.config);\n    }\n    this.addElseBranch.emit();\n  }\n\n  /**\n   * Get the child steps for a specific branch using conditionData.\n   */\n  getBranchChildren(branch: ConditionBranch): any[] {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return [];\n    const branchData = this.step.conditionData[branchStepId];\n    if (!branchData) return [];\n    return branchData.children || [];\n  }\n\n  getBranchConditionText(branch: ConditionBranch): string {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (branchStepId != null && this.step?.conditionData) {\n      const branchStep = this.step.conditionData[branchStepId]\n        ?? this.step.conditionData[Number(branchStepId)];\n      if (branchStep?.action) return branchStep.action;\n    }\n    return (branch as any).conditionText || '';\n  }\n\n  /**\n   * Returns true if the branch's debug point is currently set.\n   */\n  isBranchDebugPointSet(branch: ConditionBranch): boolean {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return false;\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep) return false;\n    if (this.getDebugPointSetHandler) {\n      return this.getDebugPointSetHandler(branchStep);\n    }\n    return false;\n  }\n\n  /**\n   * Returns true if the branch breakpoint button should be disabled.\n   */\n  isBranchBreakpointDisabled(branch: ConditionBranch): boolean {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return false;\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep) return false;\n    const badges = this.getBranchBadges(branch);\n    const isDeleted = badges.includes('removed');\n    const isConditionDebugDisabled = !!this.step?.debugPointDisabled;\n    const isConditionDeleted = this.isStepDeleted;\n\n    return (\n      isDeleted ||\n      isConditionDebugDisabled ||\n      isConditionDeleted ||\n      !!this.parentSkipped ||\n      !!branchStep.debugPointDisabled ||\n      (branchStep.status || '').toLowerCase() === 'running'\n    );\n  }\n\n  getBranchBreakpointTooltip(branch: ConditionBranch): string {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    const branchStep = this.step?.conditionData?.[branchStepId];\n    const status = (branchStep?.status || '').toLowerCase();\n\n    // Mirror header tooltip rules to match disabled state.\n    if (status === 'running') {\n      return 'Breakpoint cannot be set on a running step';\n    }\n    const badges = this.getBranchBadges(branch);\n\n    if (badges.includes('removed') || this.isStepDeleted) return 'Breakpoint cannot be set on deleted steps';\n    if (this.parentSkipped || !!this.step?.debugPointDisabled || branchStep?.debugPointDisabled) {\n      return 'Breakpoint cannot be set on skipped steps';\n    }\n    return '';\n  }\n\n  /**\n   * Returns the status of a branch step from conditionData.\n   */\n  getBranchBadges(branch: ConditionBranch): ('skipped' | 'edited' | 'added' | 'removed')[] {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (branchStepId == null || !this.step?.conditionData) return [];\n    const branchStep = this.step.conditionData[branchStepId]\n      ?? this.step.conditionData[Number(branchStepId)];\n    const badge = branchStep?.stepBadge;\n    if (!badge) return [];\n    return Array.isArray(badge) ? badge : [badge];\n  }\n\n  getBranchBgColor(branch: ConditionBranch): string | null {\n    const s = this.getBranchStatus(branch);\n    if (s === 'paused') return '#FFF9E9';\n    if (s === 'failed' || s === 'failure') return '#FEF2F2';\n    return null;\n  }\n\n  getBranchStatus(branch: ConditionBranch): string {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    // Try conditionData lookup (branchStepId = ifChildData key = conditionData key)\n    if (branchStepId != null && this.step?.conditionData) {\n      const branchStep = this.step.conditionData[branchStepId]\n        ?? this.step.conditionData[Number(branchStepId)];\n      if (branchStep?.status) return branchStep.status.toLowerCase();\n    }\n    // Fall back to status set directly on branch object\n    return ((branch as any).status || '').toLowerCase();\n  }\n\n  /**\n   * Toggle the debug point for a branch step.\n   */\n  onBranchDebugPointClick(event: Event, branch: ConditionBranch): void {\n    event.preventDefault();\n    event.stopPropagation();\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return;\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep || !this.onDebugPointChangeHandler) return;\n    const currentValue = this.isBranchDebugPointSet(branch);\n    this.onDebugPointChangeHandler(branchStep, !currentValue);\n  }\n\n  /**\n   * Trigger edit for a branch step (the IF/ELSE_IF/ELSE step itself).\n   */\n  onEditBranchStep(event: Event, branch: ConditionBranch): void {\n    event.preventDefault();\n    event.stopPropagation();\n    if (branch.type === 'else') return; // ELSE branches have no edit\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return;\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep) return;\n    if (this.onEditBranchConditionHandler) {\n      this.onEditBranchConditionHandler(this.step || this.config, branch, branchStep);\n    } else if (this.onEditStepHandler) {\n      this.onEditStepHandler(branchStep);\n    }\n  }\n\n  /**\n   * Returns menu options for a branch's three-dot menu.\n   * ELSE branches never get 'duplicate' since only one ELSE is allowed.\n   */\n  getBranchMoreMenuOptions(branch: ConditionBranch): StepMoreMenuOption[] {\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return [];\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep) return [];\n    let options: StepMoreMenuOption[];\n    if (this.getStepMoreMenuOptionsForNested) {\n      options = this.getStepMoreMenuOptionsForNested(branchStep);\n    } else {\n      options = this.stepMoreMenuOptions || [];\n    }\n    // ELSE branches cannot be duplicated (only one ELSE is allowed per condition)\n    if (branch.type === 'else') {\n      options = options.filter(opt => opt.id !== 'duplicate');\n    }\n    return options;\n  }\n\n  /**\n   * Handle three-dot menu option selection for a branch step.\n   */\n  onBranchMoreOptionSelect(option: StepMoreMenuOption, event: Event, branch: ConditionBranch): void {\n    event.preventDefault();\n    const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n    if (!branchStepId || !this.step?.conditionData) return;\n    const branchStep = this.step.conditionData[branchStepId];\n    if (!branchStep) return;\n    if (this.onStepMoreOptionSelectHandler) {\n      this.onStepMoreOptionSelectHandler(option, branchStep);\n    }\n  }\n\n  /**\n   * Emit an \"add step inside branch\" action for a specific branch.\n   * Used in the new per-branch layout.\n   */\n  onAddStepInsideSpecificBranch(event: Event, branch: ConditionBranch): void {\n    event.preventDefault();\n    event.stopPropagation();\n    const branchAddOption: AddStepMenuOption = {\n      id: 'add-inside-branch',\n      label: `Add step inside ${branch.label} branch`,\n      position: 'inside',\n      branchType: (branch as any).type,\n      branchStepId: (branch as any).branchStepUniqueId || (branch as any).branchStepId // Prefer uniqueId\n    };\n    this.addStepOptionSelect.emit(branchAddOption);\n  }\n\n  private determineActiveBranch(): void {\n    if (!this.branches || !Array.isArray(this.branches) || this.branches.length === 0) {\n      return;\n    }\n\n    // Always find the executed branch and set activeBranchStepId from it\n    const executedBranch = this.branches.find((b: any) => b.executed) as any;\n    const execKey = executedBranch?.branchStepUniqueId || executedBranch?.branchStepId;\n    if (executedBranch && execKey) {\n      // Update activeBranchStepId to match executed branch\n      if (this.activeBranchStepId !== execKey) {\n        this.activeBranchStepId = execKey;\n        // Update nested steps when executed branch changes\n      }\n      return;\n    }\n\n    // If no branch is executed, default to first branch (IF branch) but don't mark it as executed\n    const firstBranch = this.branches[0] as any;\n    const firstKey = firstBranch?.branchStepUniqueId || firstBranch?.branchStepId;\n    if (firstBranch && firstKey) {\n      if (this.activeBranchStepId !== firstKey) {\n        this.activeBranchStepId = firstKey;\n      }\n    }\n  }\n\n  onBranchClick(branch: ConditionBranch): void {\n    // In debug mode, select the branch and also update activeBranchStepId so children load\n    if (this.isDebug) {\n      this.selectedBranchForDebug = branch;\n      const branchStepId = (branch as any).branchStepUniqueId || (branch as any).branchStepId;\n      if (branchStepId) {\n        this.activeBranchStepId = branchStepId;\n      }\n      \n      // Call the handler if provided (bound as arrow fn from parent, so `this` is safe)\n      if (this.onConditionBranchClickHandler) {\n        const step = this.step || this.config;\n        if (step) {\n          this.onConditionBranchClickHandler(step, branch);\n        }\n      }\n      \n      this.onBranchClickEvent.emit(branch);\n    }\n  }\n\n  getBranchClass(branch: any): string {\n    // If branch is executed, show green styling with checkmark\n    if (branch.executed) {\n      return 'cqa-bg-[#DCFCE7] cqa-text-[#008236] cqa-border cqa-border-solid cqa-border-[#B9F8CF]';\n    }\n\n    // For live mode: if no branches are executed but there's an activeBranchStepId,\n    // show the active branch with blue border\n    if (this.isLive && !this.hasAnyExecutedBranch()) {\n      return 'cqa-bg-[#EFF6FF] cqa-text-[#1E40AF] cqa-border cqa-border-solid cqa-border-[#3B82F6]';\n    }\n\n    return `cqa-bg-[#F3F4F6] cqa-text-[#99A1AF] cqa-border cqa-border-solid cqa-border-[#E5E7EB]`;\n  }\n\n  /**\n   * Check if any branch is executed.\n   */\n  private hasAnyExecutedBranch(): boolean {\n    if (!this.branches || !Array.isArray(this.branches)) {\n      return false;\n    }\n    return this.branches.some((b: any) => b.executed === true);\n  }\n\n  onJumpToTimestamp(event: Event): void {\n    event.stopPropagation();\n    if (this.jumpToTimestampHandler && this.step?.executedResult?.video_start_time !== undefined && this.step?.executedResult?.video_start_time !== null) {\n      const timestamp = typeof this.step.executedResult.video_start_time === 'number' \n        ? this.step.executedResult.video_start_time \n        : Number(this.step.executedResult.video_start_time);\n      const testStepId = this.step?.testStepId;\n      if (isFinite(timestamp) && timestamp >= 0) {\n        this.jumpToTimestampHandler(timestamp, testStepId);\n      }\n    }\n  }\n\n  /**\n   * Get the step number for a branch based on its index\n   * Mirrors the logic from ConditionStepComponent so numbering is consistent\n   * between live and debug views.\n   */\n  getBranchStepNumber(branchIndex: number): string {\n    const parentStepNumber = String(this.stepNumber || '1');\n\n    const parts = parentStepNumber.split('.');\n    \n    if (parts.length === 1) {\n      const baseNumber = parseInt(parentStepNumber, 10);\n      return `${baseNumber + branchIndex}`;\n    } else {\n      const lastPart = parseInt(parts[parts.length - 1], 10);\n      const newLastPart = lastPart + branchIndex;\n      const newParts = [...parts.slice(0, -1), newLastPart.toString()];\n      return newParts.join('.');\n    }\n  }\n\n  /**\n   * Get the base step number for nested steps within the executed branch.\n   * This ensures child steps in debug mode follow the same numbering scheme\n   * as in the non-debug condition step component.\n   */\n  getExecutedBranchBaseStepNumber(): string {\n    const executedBranch = this.getExecutedBranch();\n    if (!executedBranch) {\n      return this.stepNumber || '1';\n    }\n    \n    const branchIndex = this.config.branches?.indexOf(executedBranch) ?? 0;\n    return this.getBranchStepNumber(branchIndex);\n  }\n}\n","<div class=\"cqa-font-inter cqa-w-full\" [class.cqa-opacity-50]=\"isDebug && isSkipped && !parentSkipped\" style=\"border-bottom: '1px solid #F3F4F6'\" (click)=\"$event.stopPropagation()\">\n  <div class=\"cqa-p-2\">\n    <!-- Header -->\n    <div\n      class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pb-1.5 cqa-cursor-pointer\"\n      (click)=\"toggleHeader($event)\">\n      <div *ngIf=\"showDebugIcon\" class=\"cqa-flex cqa-items-center cqa-justify-center\"\n        [matTooltip]=\"status.toLowerCase() === 'running' ? 'Breakpoint cannot be set on a running step' : (isStepDeleted ? 'Breakpoint cannot be set on deleted steps' : ((!!parentSkipped && !step?.debugPointDisabled) ? 'Breakpoint cannot be set on a running step' : (!!step?.debugPointDisabled ? 'Breakpoint cannot be set on skipped steps' : '')))\"\n        matTooltipPosition=\"right\">\n        <button type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n          [ngClass]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n          [disabled]=\"status.toLowerCase() === 'running' || !!step?.debugPointDisabled || !!parentSkipped || isStepDeleted\"\n          (click)=\"onDebugPointClick($event)\" [attr.aria-label]=\"debugPointSet ? 'Remove debug point' : 'Set debug point'\">\n          <svg *ngIf=\"debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\"/>\n          </svg>\n          <svg *ngIf=\"!debugPointSet\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"!!step?.debugPointDisabled || !!parentSkipped || isStepDeleted ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n          </svg>\n        </button>\n      </div>\n      <!-- Status Icon -->\n      <div *ngIf=\"status.toLowerCase() === 'success'\" ><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'failure' || status.toLowerCase() === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <div *ngIf=\"status.toLowerCase() === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n      <div class=\"cqa-flex cqa-items-center\" *ngIf=\"status.toLowerCase() === 'skipped'\"><span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">skip_next</span></div>\n      <div *ngIf=\"status.toLowerCase() === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n      <!-- Condition Icon -->\n      <div><svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect width=\"16\" height=\"16\" rx=\"4\" fill=\"#FFEDD5\"/><path d=\"M6 5V9\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10.5523 7 11 6.55228 11 6C11 5.44772 10.5523 5 10 5C9.44772 5 9 5.44772 9 6C9 6.55228 9.44772 7 10 7Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 11C6.55228 11 7 10.5523 7 10C7 9.44772 6.55228 9 6 9C5.44772 9 5 9.44772 5 10C5 10.5523 5.44772 11 6 11Z\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M10 7C10 7.79565 9.68393 8.55871 9.12132 9.12132C8.55871 9.68393 7.79565 10 7 10\" stroke=\"#FD9A00\" stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n\n      <!-- Step Number and Title -->\n      <div class=\"cqa-flex-1 cqa-flex cqa-items-center cqa-gap-3 cqa-font-inter\">\n        <span class=\"cqa-font-semibold cqa-text-[#334155] cqa-text-[14px] cqa-leading-[18px]\" style=\"word-break: break-word;\">\n          {{ config?.stepNumber }}. Condition: <span [innerHTML]=\"config.conditionText\"></span>\n        </span>\n\n        <!-- Condition Badge -->\n        <span class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#EA580C] cqa-bg-[#FFEDD5] cqa-text-[10px] cqa-leading-[15px]\">\n          CONDITION\n        </span>\n        <span *ngIf=\"config.stepDeleted\" class=\"cqa-px-1.5 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[10px] cqa-leading-[12px] cqa-font-medium cqa-text-[#B42318] cqa-bg-[#FEF3F2] cqa-border cqa-border-[#FEE4E2]\">\n          Deleted\n        </span>\n      </div>\n\n      <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-font-inter\">\n        <!-- Step Change Badges (debug only) -->\n        <ng-container *ngIf=\"isDebug\">\n          <ng-container *ngFor=\"let badge of stepBadges\">\n            <cqa-badge *ngIf=\"badge === 'skipped'\" label=\"Skipped\" size=\"small\" [textColor]=\"'#4A5565'\" [borderColor]=\"'#99A1AF'\" [backgroundColor]=\"'#FFFFFF'\"></cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'edited'\" label=\"Edited\" size=\"small\" [textColor]=\"'#FBBF24'\" [borderColor]=\"'#FDDF92'\" [backgroundColor]=\"'#FFF9E9'\"></cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'added'\" label=\"Added\" size=\"small\" [textColor]=\"'#0DBD7D'\" [borderColor]=\"'#5ED3A8'\" [backgroundColor]=\"'#CFF2E5'\"></cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'removed'\" label=\"Removed\" size=\"small\" [textColor]=\"'#EE3F3F'\" [borderColor]=\"'#F47F7F'\" [backgroundColor]=\"'#FCD9D9'\"></cqa-badge>\n          </ng-container>\n        </ng-container>\n        <span *ngIf=\"selfHealAnalysis\" class=\"cqa-px-1.5 cqa-rounded-full cqa-font-medium cqa-text-[#097E53] cqa-bg-[#CFF2E5] cqa-text-[10px] cqa-leading-[15px] cqa-min-w-max cqa-flex cqa-items-center cqa-gap-[6px]\">\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n            <path d=\"M4.50941 0C4.56489 0.0227384 4.58859 0.0782652 4.61131 0.129846C4.62269 0.1599 4.63314 0.190117 4.64329 0.220575C4.64726 0.232247 4.65123 0.243918 4.65532 0.255943C4.70806 0.413005 4.75504 0.571748 4.80229 0.73038C4.81297 0.76619 4.82369 0.801987 4.83442 0.837783C4.88905 1.02004 4.94327 1.2024 4.99719 1.38484C5.00476 1.41047 5.01234 1.43609 5.01992 1.46171C5.04128 1.53395 5.06262 1.60619 5.08383 1.67847C5.12867 1.8312 5.17473 1.98347 5.22378 2.13501C5.22807 2.14827 5.23236 2.16152 5.23677 2.17518C5.3642 2.565 5.54482 2.91437 5.8409 3.21196C5.84823 3.2197 5.85556 3.22744 5.86312 3.23541C5.9895 3.36437 6.15169 3.46771 6.3138 3.55111C6.32206 3.55542 6.33031 3.55974 6.33882 3.56419C6.81587 3.80925 7.38951 3.91704 7.90619 4.0605C8.1326 4.1234 8.3583 4.18829 8.58317 4.25603C8.59897 4.26079 8.61478 4.26554 8.63058 4.27028C8.67784 4.28445 8.725 4.29887 8.77211 4.31347C8.7831 4.31679 8.79408 4.32011 8.80539 4.32353C8.87029 4.34406 8.93239 4.36829 8.98566 4.41027C9.00191 4.44418 9.00191 4.44418 8.99748 4.4781C8.94564 4.52736 8.8942 4.55046 8.82578 4.573C8.816 4.57632 8.80622 4.57965 8.79614 4.58308C8.68061 4.62183 8.56351 4.65575 8.44626 4.68935C8.4222 4.6963 8.39814 4.70326 8.37408 4.71021C8.22571 4.75301 8.07708 4.7949 7.92829 4.83632C7.73232 4.89088 7.53663 4.94634 7.34113 5.00243C7.3091 5.01162 7.27706 5.02078 7.24501 5.02991C7.07671 5.07786 6.90923 5.12753 6.74314 5.18208C6.72937 5.18659 6.71559 5.1911 6.70139 5.19574C6.14511 5.38082 5.7211 5.72609 5.45571 6.23099C5.31263 6.51475 5.22823 6.82161 5.14214 7.12447C5.11884 7.20619 5.09409 7.28745 5.06905 7.36869C5.0494 7.43261 5.0302 7.49663 5.01149 7.56081C5.00926 7.56844 5.00703 7.57608 5.00473 7.58395C4.99394 7.62094 4.98319 7.65793 4.97252 7.69495C4.94519 7.78879 4.91578 7.88187 4.88555 7.97489C4.83191 8.14021 4.7831 8.30674 4.73459 8.4735C4.66144 8.72457 4.66144 8.72457 4.61997 8.84527C4.61721 8.85337 4.61446 8.86147 4.61163 8.86982C4.59649 8.91278 4.58092 8.95233 4.55226 8.9887C4.50867 8.99788 4.50867 8.99788 4.46951 9C4.42473 8.93759 4.39508 8.87711 4.37133 8.80508C4.36787 8.79487 4.36441 8.78466 4.36085 8.77415C4.31684 8.64248 4.27751 8.50946 4.23817 8.37646C4.22916 8.34604 4.22011 8.31564 4.21105 8.28524C4.1436 8.05863 4.07725 7.83174 4.01101 7.60481C3.73507 6.48224 3.73507 6.48224 3.039 5.57466C3.02784 5.56596 3.01669 5.55726 3.00519 5.5483C2.54913 5.19902 1.94834 5.06969 1.39815 4.91813C1.26207 4.88062 1.12605 4.84293 0.990032 4.80523C0.978138 4.80193 0.978138 4.80193 0.966003 4.79857C0.769811 4.74417 0.573674 4.68963 0.378224 4.63283C0.369956 4.63045 0.361688 4.62806 0.353169 4.62561C0.0528989 4.53883 0.0528989 4.53883 0.000646537 4.4781C-0.000831261 4.45054 -0.000831261 4.45054 0.0124689 4.42157C0.0670835 4.3704 0.120077 4.34848 0.19216 4.32619C0.202597 4.32284 0.213034 4.31948 0.223787 4.31603C0.255753 4.30582 0.287788 4.29584 0.319851 4.28592C0.329001 4.28305 0.338151 4.28017 0.347578 4.27722C0.412285 4.25693 0.477225 4.2374 0.542259 4.21809C0.55824 4.21332 0.55824 4.21332 0.574544 4.20846C0.852269 4.12587 1.13181 4.049 1.41126 3.97196C1.6195 3.91455 1.82738 3.85618 2.0346 3.79548C2.04413 3.79271 2.05365 3.78993 2.06346 3.78707C2.5435 3.64696 3.01278 3.44816 3.32274 3.0537C3.32738 3.04785 3.33202 3.042 3.3368 3.03597C3.68197 2.59815 3.81658 2.06572 3.96695 1.54621C4.01643 1.37534 4.06649 1.20464 4.11673 1.03399C4.13064 0.986733 4.14453 0.939471 4.15836 0.892194C4.21394 0.702289 4.27035 0.512642 4.33 0.323864C4.33558 0.306186 4.34114 0.288501 4.34666 0.270807C4.43017 0.00398761 4.43017 0.00398761 4.50941 0Z\" fill=\"#0DBD7D\"/>\n            <path d=\"M7.23597 0.554859C7.29024 0.613599 7.30109 0.682631 7.31799 0.757638C7.37436 0.993269 7.43929 1.20993 7.66467 1.34681C7.80371 1.42035 7.96944 1.45381 8.1235 1.48541C8.18854 1.49902 8.24348 1.51709 8.29924 1.55321C8.31181 1.57229 8.31181 1.57229 8.31107 1.60549C8.29814 1.64588 8.28678 1.6589 8.25269 1.68533C8.21543 1.69726 8.21543 1.69726 8.17068 1.70653C8.15375 1.71025 8.13683 1.714 8.11992 1.71779C8.11086 1.7198 8.10181 1.72181 8.09247 1.72388C7.81696 1.78482 7.81696 1.78482 7.57882 1.92273C7.57108 1.92869 7.56333 1.93466 7.55536 1.9408C7.38516 2.08431 7.34916 2.32303 7.29793 2.52301C7.29499 2.53399 7.29206 2.54497 7.28903 2.55629C7.28649 2.56601 7.28395 2.57573 7.28133 2.58575C7.27028 2.61544 7.25881 2.63479 7.23597 2.65754C7.17234 2.66527 7.17234 2.66527 7.14139 2.65754C7.09216 2.62106 7.08114 2.5795 7.06828 2.52365C7.06613 2.51501 7.06398 2.50636 7.06176 2.49745C7.05489 2.46983 7.04824 2.44217 7.04164 2.41449C6.98979 2.19897 6.93126 1.98751 6.72451 1.86118C6.56293 1.77501 6.36646 1.73426 6.18587 1.70136C6.13637 1.69151 6.10802 1.67911 6.07738 1.64012C6.07073 1.60055 6.07073 1.60055 6.07738 1.56098C6.12447 1.51437 6.17402 1.50299 6.23772 1.48891C6.25778 1.48416 6.27784 1.47938 6.29789 1.47456C6.30825 1.47209 6.31861 1.46962 6.32929 1.46707C6.38212 1.45407 6.43443 1.43949 6.48673 1.42462C6.49623 1.42198 6.50573 1.41935 6.51552 1.41663C6.62182 1.38624 6.71356 1.34737 6.79854 1.27836C6.80647 1.27213 6.81439 1.26589 6.82255 1.25946C6.9548 1.14565 6.99974 0.974674 7.04053 0.815134C7.04364 0.803022 7.04675 0.79091 7.04995 0.778432C7.05614 0.754101 7.06222 0.729743 7.06817 0.705359C7.07243 0.688394 7.07243 0.688394 7.07678 0.671086C7.07927 0.660951 7.08175 0.650816 7.08431 0.640373C7.09521 0.608108 7.10952 0.582772 7.12957 0.554859C7.1681 0.536435 7.19515 0.544764 7.23597 0.554859Z\" fill=\"#075F3F\"/>\n            <path d=\"M1.79545 6.2471C1.80951 6.24719 1.80951 6.24719 1.82386 6.24729C1.92477 6.25022 1.99304 6.28115 2.06736 6.34601C2.15384 6.43533 2.19377 6.53611 2.1915 6.6565C2.18178 6.75412 2.12158 6.83935 2.04773 6.90533C1.96081 6.97242 1.87313 6.99459 1.76206 6.99149C1.66841 6.98107 1.5803 6.93852 1.51393 6.87451C1.43138 6.76681 1.40725 6.66803 1.41935 6.53537C1.44433 6.43092 1.51637 6.34613 1.6085 6.28666C1.67251 6.25564 1.72399 6.24652 1.79545 6.2471Z\" fill=\"#0DBD7D\"/>\n            </svg>\n          Self-healed\n        </span>\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-rounded-[4px] cqa-py-0.5 cqa-px-1 cqa-bg-[#6366F11A] cqa-ml-1 cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity\"\n             *ngIf=\"step?.executedResult?.video_start_time\"\n             [matTooltip]=\"'Jump to video time'\"\n             matTooltipPosition=\"below\"\n             (click)=\"onJumpToTimestamp($event)\">\n          <mat-icon class=\"cqa-text-[#636363] !cqa-text-[10px] !cqa-w-[10px] !cqa-h-[10px]\">\n            play_arrow\n          </mat-icon>\n          <span class=\"cqa-text-[8px] cqa-leading-[12px] cqa-font-normal cqa-text-[#636363]\">\n            {{ formatDurationClock(step?.executedResult?.video_start_time || 0) }}\n          </span>\n        </div>\n      <div *ngIf=\"isDebug && canEditSteps\" class=\"cqa-flex cqa-items-center cqa-gap-0.5 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n        <button *ngIf=\"!step?.isStepGroupChildren\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"Add\" [matMenuTriggerFor]=\"addStepMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">add</mat-icon>\n        </button>\n        <mat-menu #addStepMenu=\"matMenu\" class=\"cqa-add-step-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of addStepMenuOptions\" (click)=\"onAddStepOptionSelect(opt, $event)\">\n            {{ opt.label }}\n          </button>\n        </mat-menu>\n        <button *ngIf=\"effectiveStepMoreMenuOptions.length\" type=\"button\" class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\" aria-label=\"More options\" [matMenuTriggerFor]=\"stepMoreMenu\">\n          <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n        </button>\n        <mat-menu #stepMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n          <button mat-menu-item *ngFor=\"let opt of effectiveStepMoreMenuOptions\" (click)=\"onStepMoreOptionSelect(opt, $event)\">{{ opt.label }}</button>\n        </mat-menu>\n      </div>\n        <span class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#9CA3AF]\">\n          {{ formatDuration(config.duration) }}\n        </span>\n        <svg *ngIf=\"hasExpandableContent\" [class.cqa-rotate-180]=\"isExpanded\" class=\"cqa-transition-transform\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n      </div>\n    </div>\n\n    <!-- Branch Buttons - Live mode only (clickable pills) -->\n    <div *ngIf=\"!isDebug\" class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-flex-wrap\">\n      <div\n        *ngFor=\"let branch of config.branches; let branchIndex = index\"\n        class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-all\"\n        [ngClass]=\"getBranchClass(branch)\" (click)=\"onBranchClick(branch)\">\n        <!-- Checkmark icon for executed branch only -->\n        <div *ngIf=\"branch.executed\">\n          <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <span>{{ getBranchStepNumber(branchIndex) }}. {{ branch.type.toUpperCase() }}</span>\n      </div>\n    </div>\n  </div>\n\n  <!-- ==================== DEBUG MODE: Expanded Content ==================== -->\n  <div *ngIf=\"isExpanded && !isLoading && isDebug\" class=\"cqa-ml-[18px]\">\n    <div *ngFor=\"let branch of config.branches; let branchIndex = index\"\n         [style.background-color]=\"!isDebug ? null : getBranchBgColor(branch)\"\n         [class.cqa-opacity-50]=\"isDebug && getBranchBadges(branch).includes('skipped')\">\n\n      <!-- Branch Header Row (accordion trigger) -->\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-2 cqa-cursor-pointer\"\n           (click)=\"toggleBranch(branchIndex, $event)\">\n        <!-- Breakpoint button for branch step -->\n        <div class=\"cqa-flex cqa-items-center cqa-justify-center\"\n          [matTooltip]=\"getBranchBreakpointTooltip(branch)\"\n          matTooltipPosition=\"right\">\n          <button type=\"button\"\n            class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-rounded-full cqa-transition-opacity focus:cqa-outline-none\"\n            [ngClass]=\"isBranchBreakpointDisabled(branch) ? 'cqa-cursor-not-allowed cqa-opacity-40 cqa-pointer-events-none' : 'cqa-cursor-pointer hover:cqa-opacity-80'\"\n            [disabled]=\"isBranchBreakpointDisabled(branch)\"\n            (click)=\"onBranchDebugPointClick($event, branch)\"\n            [attr.aria-label]=\"isBranchDebugPointSet(branch) ? 'Remove debug point' : 'Set debug point'\">\n            <svg *ngIf=\"isBranchDebugPointSet(branch)\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.fill]=\"isBranchBreakpointDisabled(branch) ? '#9E9E9E' : '#C63535'\"/>\n            </svg>\n            <svg *ngIf=\"!isBranchDebugPointSet(branch)\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"7\" cy=\"7\" r=\"6\" [attr.stroke]=\"isBranchBreakpointDisabled(branch) ? '#9E9E9E' : '#C63535'\" stroke-width=\"1.5\" fill=\"none\"/>\n            </svg>\n          </button>\n        </div>\n\n        <!-- Branch Status Icon -->\n        <ng-container *ngIf=\"getBranchStatus(branch) as branchStatus\">\n          <div *ngIf=\"branchStatus === 'success'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <div *ngIf=\"branchStatus === 'failure' || branchStatus === 'failed'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <div *ngIf=\"branchStatus === 'pending'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n          <div *ngIf=\"branchStatus === 'running'\"><svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/><path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/></svg></div>\n          <div class=\"cqa-flex cqa-items-center\" *ngIf=\"branchStatus === 'skipped'\"><span class=\"material-symbols-outlined cqa-text-[#9CA3AF] cqa-text-[12px]\">skip_next</span></div>\n          <div *ngIf=\"branchStatus === 'paused'\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.5 2H7.5C7.22386 2 7 2.22386 7 2.5V9.5C7 9.77614 7.22386 10 7.5 10H8.5C8.77614 10 9 9.77614 9 9.5V2.5C9 2.22386 8.77614 2 8.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 2H3.5C3.22386 2 3 2.22386 3 2.5V9.5C3 9.77614 3.22386 10 3.5 10H4.5C4.77614 10 5 9.77614 5 9.5V2.5C5 2.22386 4.77614 2 4.5 2Z\" stroke=\"#E17100\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        </ng-container>\n\n        <!-- Branch Label Badge -->\n        <span\n          class=\"cqa-px-2 cqa-py-1 cqa-rounded cqa-text-[11px] cqa-leading-[15px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5\"\n          [ngClass]=\"getBranchClass(branch)\">\n          <!-- Checkmark icon when executed -->\n          <svg *ngIf=\"branch.executed\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"#008236\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          </svg>\n          <span>{{ getBranchStepNumber(branchIndex) }}. {{ branch.label }}</span>\n          <span *ngIf=\"getBranchConditionText(branch)\" class=\"cqa-font-normal\">(<span [innerHTML]=\"getBranchConditionText(branch)\"></span>)</span>\n        </span>\n\n        <div class=\"cqa-flex-1\"></div>\n\n        <!-- Add ELSE IF / Add ELSE + Edit + 3-dot for branch -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-1 cqa-text-[#9CA3AF]\" (click)=\"$event.stopPropagation()\">\n          <!-- Add ELSE IF button — not shown for ELSE branch or when parent is deleted/skipped -->\n          <button *ngIf=\"canEditSteps && branch.type !== 'else' && !isStepDeleted && !isSkipped\" type=\"button\" (click)=\"onAddElseIfClick($event, branchIndex)\"\n            class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors cqa-cursor-pointer hover:cqa-opacity-80\">\n            Add ELSE IF\n          </button>\n          <!-- Add ELSE button - only on the last branch, when no ELSE branch exists, and parent not deleted/skipped -->\n          <button *ngIf=\"canEditSteps && !hasElseBranch && branchIndex === config.branches.length - 1 && !isStepDeleted && !isSkipped\" type=\"button\" (click)=\"onAddElseClick($event)\"\n            class=\"cqa-px-2 cqa-py-[2px] cqa-rounded-[4px] cqa-text-[8px] cqa-leading-[12px] cqa-bg-[#fff9e9] cqa-text-[#E65100] cqa-border cqa-border-solid cqa-border-[#feecbd] cqa-flex cqa-items-center cqa-gap-1.5 cqa-transition-colors cqa-cursor-pointer hover:cqa-opacity-80\">\n            Add ELSE\n          </button>\n          <!-- Branch Change Badges -->\n          <ng-container *ngFor=\"let badge of getBranchBadges(branch)\">\n            <cqa-badge *ngIf=\"badge === 'skipped'\" label=\"Skipped\" size=\"small\"\n              [textColor]=\"'#4A5565'\" [borderColor]=\"'#99A1AF'\" [backgroundColor]=\"'#FFFFFF'\">\n            </cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'edited'\" label=\"Edited\" size=\"small\"\n              [textColor]=\"'#FBBF24'\" [borderColor]=\"'#FDDF92'\" [backgroundColor]=\"'#FFF9E9'\">\n            </cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'added'\" label=\"Added\" size=\"small\"\n              [textColor]=\"'#0DBD7D'\" [borderColor]=\"'#5ED3A8'\" [backgroundColor]=\"'#CFF2E5'\">\n            </cqa-badge>\n            <cqa-badge *ngIf=\"badge === 'removed'\" label=\"Removed\" size=\"small\"\n              [textColor]=\"'#EE3F3F'\" [borderColor]=\"'#F47F7F'\" [backgroundColor]=\"'#FCD9D9'\">\n            </cqa-badge>\n          </ng-container>\n\n          <button *ngIf=\"canEditSteps && branch.type !== 'else' && !isStepDeleted\" type=\"button\"\n            class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\"\n            aria-label=\"Edit branch\"\n            (click)=\"onEditBranchStep($event, branch)\">\n            <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">edit</mat-icon>\n          </button>\n          <button *ngIf=\"canEditSteps && !isStepDeleted\" type=\"button\"\n            class=\"cqa-p-0 cqa-border-0 cqa-bg-transparent cqa-cursor-pointer hover:cqa-opacity-80 cqa-transition-opacity focus:cqa-outline-none\"\n            aria-label=\"More branch options\"\n            [matMenuTriggerFor]=\"branchMoreMenu\">\n            <mat-icon class=\"!cqa-text-[14px] !cqa-w-[14px] !cqa-h-[14px]\">more_vert</mat-icon>\n          </button>\n          <mat-menu #branchMoreMenu=\"matMenu\" class=\"cqa-step-more-menu\" xPosition=\"before\" yPosition=\"below\">\n            <button mat-menu-item *ngFor=\"let opt of getBranchMoreMenuOptions(branch)\" (click)=\"onBranchMoreOptionSelect(opt, $event, branch)\">{{ opt.label }}</button>\n          </mat-menu>\n        </div>\n\n        <!-- Chevron -->\n        <svg [class.cqa-rotate-180]=\"isBranchExpanded(branchIndex)\" class=\"cqa-transition-transform\"\n             width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M3.5 5L7 8.5L10.5 5\" stroke=\"#9CA3AF\" stroke-width=\"0.833333\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </div>\n\n      <!-- Branch Children (steps inside this branch) — shown when accordion is open -->\n      <div *ngIf=\"isBranchExpanded(branchIndex) && getBranchChildren(branch).length > 0\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px] cqa-ml-9 cqa-pb-1\" style=\"border-left: 2px solid #C5C7FA;\">\n        <ng-container *ngFor=\"let childStep of getBranchChildren(branch); index as ci\">\n          <div class=\"cqa-step-renderer-wrapper\" [attr.id]=\"'exc-' + (childStep?.uniqueId || childStep.id)\" [class.loaded]=\"!isNestedStepLoading(childStep)\">\n            <cqa-step-renderer\n              [step]=\"childStep\"\n              [stepNumber]=\"childStep?.stepNumber || (getBranchStepNumber(branchIndex) + '.' + (ci + 1))\"\n              [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n              [onExpandHandler]=\"onExpandHandler\"\n              [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n              [isStepLoadingHandler]=\"isStepLoadingHandler\"\n              [isStepExpandedHandler]=\"isStepExpandedHandler\"\n              [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n              [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n              [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n              [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n              [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n              [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n              [formatActionsHandler]=\"formatActionsHandler\"\n              [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n              [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n              [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n              [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n              [onAnalyzeHandler]=\"onAnalyzeHandler\"\n              [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n              [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n              [onStepClickHandler]=\"onStepClickHandler\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [onDownloadHandler]=\"onDownloadHandler\"\n              [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n              [onTextCopiedHandler]=\"onTextCopiedHandler\"\n              [downloadingStepId]=\"downloadingStepId\"\n              [isUploadingBaseline]=\"isUploadingBaseline\"\n              [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n              [selectedIterationId]=\"childStep?.selectedIterationId || ''\"\n              [isLive]=\"isLive\"\n              [isDebug]=\"isDebug\"\n              [canEditSteps]=\"canEditSteps\"\n              [parentSkipped]=\"selfDebugDisabled\"\n              [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(childStep) : debugPointSet\"\n              [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n              [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n              [onEditStepHandler]=\"onEditStepHandler\"\n              [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(childStep) : addStepMenuOptions\"\n              [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n              [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(childStep) : stepMoreMenuOptions\"\n              [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n              [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n              [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n              (addStepInsideLoop)=\"addStepInsideLoop.emit($event)\"\n              [onAddElseIfBranchAtHandler]=\"onAddElseIfBranchAtHandler\"\n              [onAddElseBranchHandler]=\"onAddElseBranchHandler\"\n              [onEditBranchConditionHandler]=\"onEditBranchConditionHandler\"\n              (componentReady)=\"markStepLoaded(childStep)\">\n            </cqa-step-renderer>\n          </div>\n        </ng-container>\n      </div>\n\n      <!-- Branch not executed message (no children) — shown when accordion is open -->\n      <div *ngIf=\"isBranchExpanded(branchIndex) && !branch.executed && getBranchChildren(branch).length === 0\" class=\"cqa-ml-9\">\n        <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n          {{ branch.label }} branch not executed\n        </p>\n      </div>\n\n      <!-- Add step inside this branch (debug mode) — shown when accordion is open and parent not deleted/skipped -->\n      <div *ngIf=\"canEditSteps && isBranchExpanded(branchIndex) && !step?.isStepGroupChildren\" class=\"cqa-px-3 cqa-pt-1 cqa-pb-2 cqa-ml-9 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n        <button\n          *ngIf=\"!isStepDeleted && !isSkipped\"\n          type=\"button\"\n          class=\"cqa-bg-transparent cqa-border-0 cqa-p-0 cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-text-[#4F46E5] cqa-cursor-pointer hover:cqa-opacity-80\"\n          (click)=\"onAddStepInsideSpecificBranch($event, branch)\">\n          + Add step inside {{ branch.label }} branch\n        </button>\n      </div>\n\n    </div>\n\n    <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis\n      *ngIf=\"selfHealAnalysis\"\n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span></div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span></div>\n      </span>\n    </div>\n  </div>\n\n  <!-- ==================== LIVE MODE: Expanded Content ==================== -->\n  <div *ngIf=\"isExpanded && !isLoading && !isDebug\">\n\n    <!-- Executed Branch Sub-steps -->\n    <div *ngFor=\"let branch of config.branches\">\n      <div *ngIf=\"branch.executed && branch.subSteps\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-pb-1 cqa-ml-9\" style=\"border-bottom: '1px solid #F3F4F6'; border-radius: 8px;\">\n        <div\n          *ngFor=\"let subStep of branch.subSteps\"\n          class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-py-[5.5px] cqa-px-3\">\n\n          <!-- Sub-step Status Icon -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'success' || subStep?.status?.toLowerCase() === 'passed'\" >\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M10.9005 4.99999C11.1289 6.12064 10.9662 7.28571 10.4395 8.30089C9.91279 9.31608 9.054 10.12 8.00631 10.5787C6.95862 11.0373 5.78536 11.1229 4.6822 10.8212C3.57904 10.5195 2.61265 9.84869 1.94419 8.92071C1.27573 7.99272 0.945611 6.86361 1.00888 5.72169C1.07215 4.57976 1.52499 3.49404 2.29188 2.64558C3.05876 1.79712 4.09334 1.23721 5.22308 1.05922C6.35282 0.881233 7.50944 1.09592 8.50005 1.66749\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 5.5L6 7L11 2\" stroke=\"#22C55E\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Failure -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'failure' || subStep?.status?.toLowerCase() === 'failed'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M7.5 4.5L4.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4.5 4.5L7.5 7.5\" stroke=\"#DC2626\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Pending -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'pending'\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </div>\n          <!-- Running -->\n          <div *ngIf=\"subStep?.status?.toLowerCase() === 'running'\">\n            <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n              <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n              <path d=\"M6 1A5 5 0 0 1 11 6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n            </svg>\n          </div>\n\n          <!-- Sub-step Description -->\n          <span class=\"cqa-flex-1 cqa-text-[13px] cqa-leading-[15px] cqa-text-[#364153]\" style=\"word-break: break-word;\">\n            <span [innerHTML]=\"subStep.description\"></span>\n          </span>\n\n          <!-- Sub-step Duration -->\n          <span class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-metadata-key\">\n            {{ formatDuration(subStep.duration) }}\n          </span>\n        </div>\n      </div>\n    </div>\n\n    <!-- Unexecuted Branch Message -->\n    <div *ngIf=\"getUnexecutedBranches().length > 0 && getUnexecutedBranches().length < 2\" class=\"cqa-ml-9\">\n      <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n        {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} branch not executed\n      </p>\n    </div>\n\n    <div *ngIf=\"getUnexecutedBranches().length > 1\" class=\"cqa-ml-9\">\n      <p class=\"cqa-px-3 cqa-py-[10px] cqa-text-[12px] cqa-leading-4 cqa-text-[#737373] cqa-italic\">\n        {{ getUnexecutedBranches()?.[0]?.type?.toUpperCase() }} and {{ getUnexecutedBranches()?.[1]?.type?.toUpperCase() }} branches not executed\n      </p>\n    </div>\n\n    <!-- Nested Steps -->\n    <div *ngIf=\"hasChild || (config.nestedSteps && config.nestedSteps.length > 0)\" class=\"cqa-ml-9 cqa-pb-1\" style=\"border-bottom: '1px solid #F3F4F6'\">\n      <div class=\"cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#737373] cqa-py-[2px] cqa-px-3\" *ngIf=\"config.nestedSteps && config.nestedSteps.length > 0\">Nested steps</div>\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-pl-[18px]\" style=\"border-left: 2px solid #C5C7FA;\">\n        <!-- Loading indicator for nested steps -->\n        <div *ngIf=\"hasChild && (!config.nestedSteps || config.nestedSteps.length === 0) && isStepLoading()\"\n            class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-py-2 cqa-px-3\">\n          <svg class=\"cqa-animate-spin cqa-text-[#3B82F6]\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" opacity=\"0.25\"/>\n            <path d=\"M7 1A6 6 0 0 1 13 7\" stroke=\"currentColor\" stroke-width=\"1.5\" fill=\"none\" stroke-linecap=\"round\"/>\n          </svg>\n          <span class=\"cqa-text-[11px] cqa-leading-[13px] cqa-text-[#737373]\">Loading nested steps...</span>\n        </div>\n\n        <ng-container *ngFor=\"let step of config.nestedSteps; index as i\">\n          <div\n            class=\"cqa-step-renderer-wrapper\"\n            [attr.id]=\"'exc-' + (step.uniqueId || step.id)\"\n            [class.loaded]=\"!isNestedStepLoading(step)\">\n            <cqa-step-renderer\n              [step]=\"step\"\n              [stepNumber]=\"step?.isRunResult ? step?.stepNumber : (getExecutedBranchBaseStepNumber() + '.' + (i + 1))\"\n              [onConditionBranchClickHandler]=\"onConditionBranchClickHandler\"\n              [onExpandHandler]=\"onExpandHandler\"\n              [getConditionBranchesHandler]=\"getConditionBranchesHandler\"\n              [isStepLoadingHandler]=\"isStepLoadingHandler\"\n              [isStepExpandedHandler]=\"isStepExpandedHandler\"\n              [jumpToTimestampHandler]=\"jumpToTimestampHandler\"\n              [convertMsToSecondsHandler]=\"convertMsToSecondsHandler\"\n              [formatFailureDetailsHandler]=\"formatFailureDetailsHandler\"\n              [getSelfHealAnalysisHandler]=\"getSelfHealAnalysisHandler\"\n              [getLoopIterationsHandler]=\"getLoopIterationsHandler\"\n              [getApiAssertionsHandler]=\"getApiAssertionsHandler\"\n              [formatActionsHandler]=\"formatActionsHandler\"\n              [onViewAllIterationsHandler]=\"onViewAllIterationsHandler\"\n              [onMakeCurrentBaselineHandler]=\"onMakeCurrentBaselineHandler\"\n              [onUploadBaselineHandler]=\"onUploadBaselineHandler\"\n              [getSelfHealLoadingStatesHandler]=\"getSelfHealLoadingStatesHandler\"\n              [onAnalyzeHandler]=\"onAnalyzeHandler\"\n              [onViewFullLogsHandler]=\"onViewFullLogsHandler\"\n              [onSelfHealActionHandler]=\"onSelfHealActionHandler\"\n              [onStepClickHandler]=\"onStepClickHandler\"\n              [onJsonPathCopiedHandler]=\"onJsonPathCopiedHandler\"\n              [onDownloadHandler]=\"onDownloadHandler\"\n              [onFilePathCopiedHandler]=\"onFilePathCopiedHandler\"\n              [onTextCopiedHandler]=\"onTextCopiedHandler\"\n              [downloadingStepId]=\"downloadingStepId\"\n              [isUploadingBaseline]=\"isUploadingBaseline\"\n              [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n              [selectedIterationId]=\"step?.selectedIterationId || ''\"\n              [isLive]=\"isLive\"\n              [isDebug]=\"isDebug\"\n              [canEditSteps]=\"canEditSteps\"\n              [parentSkipped]=\"selfDebugDisabled\"\n              [debugPointSet]=\"getDebugPointSetHandler ? getDebugPointSetHandler(step) : debugPointSet\"\n              [getDebugPointSetHandler]=\"getDebugPointSetHandler\"\n              [onDebugPointChangeHandler]=\"onDebugPointChangeHandler\"\n              [onEditStepHandler]=\"onEditStepHandler\"\n              [addStepMenuOptions]=\"getAddStepMenuOptionsForNested ? getAddStepMenuOptionsForNested(step) : addStepMenuOptions\"\n              [onAddStepOptionSelectHandler]=\"onAddStepOptionSelectHandler\"\n              [stepMoreMenuOptions]=\"getStepMoreMenuOptionsForNested ? getStepMoreMenuOptionsForNested(step) : stepMoreMenuOptions\"\n              [onStepMoreOptionSelectHandler]=\"onStepMoreOptionSelectHandler\"\n              [getAddStepMenuOptionsForNested]=\"getAddStepMenuOptionsForNested\"\n              [getStepMoreMenuOptionsForNested]=\"getStepMoreMenuOptionsForNested\"\n              (addStepInsideLoop)=\"addStepInsideLoop.emit($event)\"\n              (componentReady)=\"markStepLoaded(step)\">\n            </cqa-step-renderer>\n          </div>\n        </ng-container>\n      </div>\n    </div>\n\n    <!-- Self Heal Analysis -->\n    <cqa-self-heal-analysis\n      *ngIf=\"selfHealAnalysis\"\n      [id]=\"step?.testStepId\"\n      [originalLocator]=\"selfHealAnalysis.originalLocator\"\n      [healedLocator]=\"selfHealAnalysis.healedLocator\"\n      [confidence]=\"selfHealAnalysis.confidence\"\n      [healMethod]=\"selfHealAnalysis.healMethod\"\n      [isLoadingAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingAccept?.[step?.testStepId] : false\"\n      [isLoadingModifyAccept]=\"getSelfHealLoadingStatesHandler ? getSelfHealLoadingStatesHandler().isLoadingModifyAccept?.[step?.testStepId] : false\"\n      (action)=\"onSelfHealAction($event)\">\n    </cqa-self-heal-analysis>\n\n    <!-- Timing Breakdown -->\n    <div *ngIf=\"config.timingBreakdown\" class=\"cqa-flex cqa-items-center cqa-justify-end cqa-gap-5 cqa-pt-1.5 cqa-px-4 cqa-text-[10px] cqa-leading-[15px] cqa-font-medium cqa-text-[#9CA3AF]\">\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n        <div><svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M6 11C8.76142 11 11 8.76142 11 6C11 3.23858 8.76142 1 6 1C3.23858 1 1 3.23858 1 6C1 8.76142 3.23858 11 6 11Z\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 3V6L8 7\" stroke=\"#9CA3AF\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg></div>\n        <span>Timing breakdown</span>\n      </div>\n      <span class=\"cqa-text-dialog-muted cqa-flex cqa-items-center cqa-gap-3\">\n        <div>\n          App <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.app) }}</span>\n        </div>\n        <div><svg width=\"1\" height=\"11\" viewBox=\"0 0 1 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M-3.8147e-06 10.32V-7.15256e-07H0.959996V10.32H-3.8147e-06Z\" fill=\"#E5E7EB\"/></svg></div>\n        <div>\n          Tool <span class=\"cqa-text-gray-700\">{{ formatDuration(config.timingBreakdown.tool) }}</span>\n        </div>\n      </span>\n    </div>\n  </div>\n\n  <!-- View More Failed Step Button -->\n  <div *ngIf=\"showViewMoreButton && !isLoading\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-view-more-failed-step-button\n      [timingBreakdown]=\"timingBreakdown\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [isExpanded]=\"showFailedStepDetails\"\n      (viewMoreClick)=\"onViewMoreFailedStepClick($event)\">\n    </cqa-view-more-failed-step-button>\n  </div>\n\n  <!-- Updated Failed Step Component -->\n  <div *ngIf=\"showViewMoreButton && showFailedStepDetails && failureDetails\" class=\"cqa-mt-2 cqa-px-4\">\n    <cqa-updated-failed-step\n      [timingBreakdown]=\"timingBreakdown\"\n      [testStepResultId]=\"testStepResultId\"\n      [expanded]=\"true\"\n      [subSteps]=\"getSubStepsForFailedStep()\"\n      [failureDetails]=\"failureDetails\"\n      [reasoning]=\"reasoning\"\n      [confidence]=\"confidence\"\n      [isUploadingBaseline]=\"isUploadingBaseline\"\n      [isMakingCurrentBaseline]=\"isMakingCurrentBaseline\"\n      [isLive]=\"isLive\"\n      (makeCurrentBaseline)=\"onMakeCurrentBaseline($event)\"\n      (uploadBaseline)=\"onUploadBaseline($event)\"\n      (analyze)=\"onAnalyze()\"\n      (viewFullLogs)=\"onViewFullLogs()\">\n    </cqa-updated-failed-step>\n  </div>\n</div>\n","import {\n  Component, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges,\n  ChangeDetectionStrategy, ChangeDetectorRef\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, FormControl, Validators } from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component';\nimport { ActionTemplate } from '../../step-builder/step-builder-action/step-builder-action.component';\n\nexport interface ConditionBranchSaveData {\n  template: ActionTemplate | null;\n  templateVariables: any[];\n  advancedSettingsVariables: any[];\n  action: string;\n  /** Resolved HTML grammar with actual variable values substituted — use for display/conditionText */\n  resolvedAction: string;\n  description: string;\n  metadata: string;\n  /** Derived from advancedSettingsVariables 'shouldSkip' entry — step should be skipped during execution */\n  shouldSkip: boolean;\n  /** Derived from advancedSettingsVariables 'isStepOptional' entry — step failure should not fail the test */\n  ignoreStepResult: boolean;\n}\n\n/**\n * Lightweight single-condition editor used in debug mode to:\n *  - Add a new ELSE IF branch (mode = 'add-else-if')\n *  - Edit an existing IF or ELSE IF condition (mode = 'edit')\n *\n * This is a simplified variant of StepBuilderConditionComponent with one condition row.\n */\n@Component({\n  selector: 'cqa-condition-branch-editor',\n  templateUrl: './condition-branch-editor.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConditionBranchEditorComponent implements OnInit, OnChanges {\n\n  /** 'add-else-if' shows \"Add ELSE IF\" title/button; 'edit' shows \"Edit Condition\" title/button */\n  @Input() mode: 'add-else-if' | 'edit' = 'add-else-if';\n\n  /** List of condition action templates (filtered to IF_CONDITION type) */\n  @Input() conditionTemplates: ActionTemplate[] = [];\n\n  /** Called to derive template variables from a selected template */\n  @Input() setConditionTemplateVariables: (template: ActionTemplate, testStep?: any) => any[] = () => [];\n\n  /** Called to derive advanced settings variables */\n  @Input() setAdvancedSettingsVariables: (template: ActionTemplate, testStep?: any) => any[] = () => [];\n\n  /** Centralised HTML grammar computation function */\n  @Input() computeHtmlGrammarFn?: (template: any, variables: any[]) => string;\n\n  /** Element options for variable forms */\n  @Input() elementOptions: any[] = [];\n  @Input() hasMoreElements: boolean = false;\n  @Input() isLoadingElements: boolean = false;\n  @Input() screenNameOptions: { id?: number; name: string }[] = [];\n  @Input() hasMoreScreenNames: boolean = false;\n  @Input() isLoadingScreenNames: boolean = false;\n  @Input() parameterOptions: any[] = [];\n  @Input() hasMoreParameters: boolean = false;\n  @Input() isLoadingParameters: boolean = false;\n  @Input() environmentOptions: { id: string; name: string; value: string; environment: string }[] = [];\n  @Input() hasMoreEnvironments: boolean = false;\n  @Input() isLoadingEnvironments: boolean = false;\n  @Input() defaultTestDataProfileId?: number;\n  @Input() defaultTestDataStartIndex?: number;\n\n  /** When provided, pre-populates the form for edit mode. shape: { templateId, templateVariables, action } */\n  @Input() initialConditionData?: {\n    templateId?: string | number;\n    templateVariables?: any[];\n    action?: string;\n    description?: string;\n    metadata?: string;\n  };\n\n  /** Raw branch step object — passed through to setConditionTemplateVariables so the service can extract saved values from step.event */\n  @Input() editTestStep?: any;\n\n  /** Label shown next to the condition template dropdown (e.g. 'IF', 'ELSE IF'). Inferred from mode when not provided. */\n  @Input() branchLabel?: string;\n\n  /** True while the parent is saving (disables/shows loader on Save button) */\n  @Input() isSaving: boolean = false;\n\n  @Output() save = new EventEmitter<ConditionBranchSaveData>();\n  @Output() cancelled = new EventEmitter<void>();\n  @Output() loadMoreElements = new EventEmitter<void>();\n  @Output() searchElements = new EventEmitter<string>();\n  @Output() searchElementsByScreenName = new EventEmitter<{ screenNameId: number; searchTerm?: string }>();\n  @Output() createElement = new EventEmitter<any>();\n  @Output() searchScreenName = new EventEmitter<string>();\n  @Output() loadMoreScreenNames = new EventEmitter<string>();\n  @Output() createScreenNameRequest = new EventEmitter<string>();\n  @Output() searchParameters = new EventEmitter<string>();\n  @Output() loadMoreParameters = new EventEmitter<void>();\n  @Output() searchEnvironments = new EventEmitter<string>();\n  @Output() loadMoreEnvironments = new EventEmitter<void>();\n\n  conditionForm!: FormGroup;\n\n  private selectedTemplate: ActionTemplate | null = null;\n  private templateVariables: any[] = [];\n  private variablesForm!: FormArray;\n  private advancedSettingsVariables: any[] = [];\n  private advancedVariablesForm!: FormArray;\n  private advancedExpanded = false;\n  private updatedHtmlGrammar = '';\n\n  private valueConfigCache: DynamicSelectFieldConfig | null = null;\n  private valueConfigWithHandler: DynamicSelectFieldConfig | null = null;\n\n  get title(): string {\n    return this.mode === 'edit' ? 'Edit Condition' : 'Add ELSE IF';\n  }\n\n  get saveButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save' : 'Add ELSE IF';\n  }\n\n  get conditionRowLabel(): string {\n    return this.branchLabel ?? (this.mode === 'edit' ? 'IF' : 'ELSE IF');\n  }\n\n  constructor(private fb: FormBuilder, private cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    this.variablesForm = this.fb.array([]);\n    this.advancedVariablesForm = this.fb.array([]);\n\n    this.conditionForm = this.fb.group({\n      value: [null, Validators.required],\n      description: [''],\n      metadata: [''],\n    });\n\n    this.updateValueConfigCache();\n\n    // Pre-populate for edit mode\n    if (this.mode === 'edit' && this.initialConditionData) {\n      this.prefillFromInitialData();\n    }\n\n    this.cdr.markForCheck();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['conditionTemplates'] && !changes['conditionTemplates'].firstChange) {\n      this.updateValueConfigCache();\n      this.valueConfigWithHandler = null;\n      // Re-prefill if we now have templates and were waiting\n      if (this.mode === 'edit' && this.initialConditionData && !this.selectedTemplate) {\n        this.prefillFromInitialData();\n      }\n    }\n    this.cdr.markForCheck();\n  }\n\n  private prefillFromInitialData(): void {\n    if (!this.initialConditionData || !this.conditionTemplates?.length) return;\n\n    const { templateId, action, description, metadata } = this.initialConditionData;\n\n    // Find matching template\n    let template: ActionTemplate | undefined;\n    if (templateId != null) {\n      template = this.conditionTemplates.find(\n        t => String(t.id) === String(templateId) || t.displayName === String(templateId)\n      );\n    }\n    if (!template && action) {\n      template = this.conditionTemplates.find(\n        t => t.naturalText === action || t.htmlGrammar === action || t.displayName === action\n      );\n    }\n\n    if (template) {\n      const selectId = template.id?.toString() || template.displayName || '';\n      this.conditionForm?.get('value')?.setValue(selectId, { emitEvent: false });\n      this.selectedTemplate = template;\n\n      // Get fresh variables structure with saved values by passing the raw step\n      const vars = this.setConditionTemplateVariables(template, this.editTestStep);\n      this.templateVariables = vars;\n\n      this.buildVariablesForm();\n      this.updateHtmlGrammar();\n\n      // Advanced variables\n      if (this.setAdvancedSettingsVariables) {\n        this.advancedSettingsVariables = this.setAdvancedSettingsVariables(template, this.editTestStep);\n        this.buildAdvancedVariablesForm();\n      }\n    }\n\n    if (description) this.conditionForm?.get('description')?.setValue(description, { emitEvent: false });\n    if (metadata) this.conditionForm?.get('metadata')?.setValue(metadata, { emitEvent: false });\n    this.cdr.markForCheck();\n  }\n\n  private updateValueConfigCache(): void {\n    const opts: SelectOption[] = (this.conditionTemplates || []).map(t => ({\n      id: t.id?.toString() || t.displayName || '',\n      value: t.id?.toString() || t.displayName || '',\n      name: t.htmlGrammar || t.naturalText || '',\n      label: t.htmlGrammar || t.naturalText || ''\n    }));\n    this.valueConfigCache = {\n      key: 'value',\n      placeholder: 'Select Condition Template*',\n      multiple: false,\n      searchable: true,\n      displayLabelAsInnerHtml: true,\n      options: opts\n    };\n  }\n\n  getValueConfig(): DynamicSelectFieldConfig {\n    if (this.valueConfigWithHandler) return this.valueConfigWithHandler;\n    if (!this.valueConfigCache) this.updateValueConfigCache();\n    this.valueConfigWithHandler = {\n      ...this.valueConfigCache!,\n      onChange: (v: any) => this.onTemplateValueChange(v)\n    };\n    return this.valueConfigWithHandler;\n  }\n\n  onTemplateValueChange(templateId: any): void {\n    const template = this.conditionTemplates.find(\n      t => String(t.id) === String(templateId) || t.displayName === String(templateId)\n    );\n    if (template) {\n      this.selectedTemplate = template;\n      this.templateVariables = this.setConditionTemplateVariables(template);\n      this.buildVariablesForm();\n      this.updateHtmlGrammar();\n      if (this.setAdvancedSettingsVariables) {\n        this.advancedSettingsVariables = this.setAdvancedSettingsVariables(template);\n        this.buildAdvancedVariablesForm();\n      }\n    } else {\n      this.selectedTemplate = null;\n      this.templateVariables = [];\n      this.clearVariablesForm();\n      this.advancedSettingsVariables = [];\n      this.clearAdvancedVariablesForm();\n    }\n    this.cdr.markForCheck();\n  }\n\n  private buildVariablesForm(): void {\n    while (this.variablesForm.length) this.variablesForm.removeAt(0);\n    this.templateVariables.forEach(variable => {\n      const defaultValue = variable.type === 'boolean'\n        ? (variable.value === true || variable.value === 'true' || variable.value === 1)\n        : (variable.value || '');\n      const group = this.fb.group({\n        name: [variable.name],\n        value: [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || ''],\n        options: [variable.options || []]\n      });\n      const label = variable.label?.toLowerCase() || '';\n      if (label === 'test-data' || label === 'source-value' || label === 'target-value' ||\n          label === 'source_value' || label === 'target_value') {\n        const valueStr = String(defaultValue || '');\n        let dataType = 'plain-text';\n        if (valueStr.startsWith('@|') && valueStr.endsWith('|')) dataType = 'parameter';\n        else if (valueStr.startsWith('$|') && valueStr.endsWith('|')) dataType = 'runtime';\n        else if (valueStr.startsWith('*|') && valueStr.endsWith('|')) dataType = 'environment';\n        group.addControl('dataType', new FormControl(dataType));\n      }\n      this.variablesForm.push(group);\n    });\n  }\n\n  private clearVariablesForm(): void {\n    while (this.variablesForm.length) this.variablesForm.removeAt(0);\n  }\n\n  private buildAdvancedVariablesForm(): void {\n    while (this.advancedVariablesForm.length) this.advancedVariablesForm.removeAt(0);\n    this.advancedSettingsVariables.forEach(variable => {\n      let defaultValue: any;\n      if (variable.type === 'str_list') {\n        const arr = Array.isArray(variable.value) ? variable.value : [];\n        defaultValue = this.fb.array(arr.length > 0 ? arr.map((i: string) => this.fb.control(i)) : [this.fb.control('')]);\n      } else if (variable.type === 'boolean') {\n        defaultValue = variable.value === true || variable.value === 'true' || variable.value === 1;\n      } else {\n        defaultValue = variable.value || '';\n      }\n      const group = this.fb.group({\n        name: [variable.name],\n        value: variable.type === 'str_list' ? defaultValue : [defaultValue],\n        type: [variable.type || 'string'],\n        label: [variable.label || '']\n      });\n      this.advancedVariablesForm.push(group);\n    });\n  }\n\n  private clearAdvancedVariablesForm(): void {\n    while (this.advancedVariablesForm.length) this.advancedVariablesForm.removeAt(0);\n  }\n\n  private updateHtmlGrammar(): void {\n    if (!this.selectedTemplate?.htmlGrammar) { this.updatedHtmlGrammar = ''; return; }\n    if (this.computeHtmlGrammarFn) {\n      this.updatedHtmlGrammar = this.computeHtmlGrammarFn(this.selectedTemplate, this.templateVariables);\n      return;\n    }\n    let g = this.selectedTemplate.htmlGrammar;\n    this.templateVariables.forEach(v => {\n      const re = new RegExp(`<span[^>]*data-event-key=\"${v.name}\"[^>]*>.*?</span>`, 'gi');\n      const escaped = String(v.value || '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n      g = g.replace(re, escaped);\n    });\n    this.updatedHtmlGrammar = g;\n  }\n\n  get currentHtmlGrammar(): string {\n    return this.updatedHtmlGrammar || this.selectedTemplate?.htmlGrammar || this.selectedTemplate?.naturalText || '';\n  }\n\n  getTemplateVariables(): any[] { return this.templateVariables; }\n  getVariablesForm(): FormArray { return this.variablesForm; }\n  getAdvancedVariables(): any[] { return this.advancedSettingsVariables; }\n  getAdvancedVariablesForm(): FormArray { return this.advancedVariablesForm; }\n  get isAdvancedExpanded(): boolean { return this.advancedExpanded; }\n  toggleAdvanced(): void { this.advancedExpanded = !this.advancedExpanded; this.cdr.markForCheck(); }\n  get hasSelectedTemplate(): ActionTemplate | null { return this.selectedTemplate; }\n\n  onVariableValueChange(name: string, value: any): void {\n    const v = this.templateVariables.find(tv => tv.name === name);\n    if (v) v.value = value;\n    const idx = this.variablesForm.controls.findIndex(c => c.get('name')?.value === name);\n    if (idx !== -1) this.variablesForm.at(idx).get('value')?.setValue(value, { emitEvent: false });\n    this.updateHtmlGrammar();\n    this.cdr.markForCheck();\n  }\n\n  onVariableBooleanChange(name: string, value: boolean): void {\n    this.onVariableValueChange(name, value);\n  }\n\n  onAdvancedVariableValueChange(name: string, value: any): void {\n    const v = this.advancedSettingsVariables.find(tv => tv.name === name);\n    if (v) v.value = value;\n    const idx = this.advancedVariablesForm.controls.findIndex(c => c.get('name')?.value === name);\n    if (idx !== -1 && v?.type !== 'str_list') {\n      (this.advancedVariablesForm.at(idx) as FormGroup).get('value')?.setValue(value, { emitEvent: false });\n    }\n  }\n\n  onAdvancedVariableBooleanChange(name: string, value: boolean): void {\n    this.onAdvancedVariableValueChange(name, value);\n  }\n\n  isFormValid(): boolean {\n    if (!this.conditionForm.valid) return false;\n    return this.templateVariables.every(v => {\n      if (v.dataKey === 'element' || v.dataKey === 'test_data' || v.dataKey === 'source_value' || v.dataKey === 'target_value') {\n        return v.value !== null && v.value !== undefined && v.value !== '';\n      }\n      return true;\n    });\n  }\n\n  onCancel(): void { this.cancelled.emit(); }\n\n  onSave(): void {\n    if (!this.isFormValid()) return;\n    // Sync advanced form values back to array\n    this.advancedSettingsVariables.forEach((variable, i) => {\n      const fg = this.advancedVariablesForm.at(i) as FormGroup;\n      if (!fg) return;\n      const fv = fg.get('value')?.value;\n      if (variable.type === 'str_list' && fv instanceof FormArray) {\n        variable.value = fv.controls.map(c => c.value).filter((val: string) => val?.trim() !== '');\n      } else {\n        variable.value = fv;\n      }\n    });\n\n    const finalAdvancedVars = [...this.advancedSettingsVariables];\n    const shouldSkipVar = finalAdvancedVars.find(v => v.name === 'shouldSkip');\n    const isStepOptionalVar = finalAdvancedVars.find(v => v.name === 'isStepOptional');\n\n    this.save.emit({\n      template: this.selectedTemplate,\n      templateVariables: [...this.templateVariables],\n      advancedSettingsVariables: finalAdvancedVars,\n      action: this.selectedTemplate?.naturalText || this.selectedTemplate?.htmlGrammar || '',\n      resolvedAction: this.currentHtmlGrammar,\n      description: this.conditionForm.get('description')?.value || '',\n      metadata: this.conditionForm.get('metadata')?.value || '',\n      shouldSkip: shouldSkipVar ? !!shouldSkipVar.value : false,\n      ignoreStepResult: isStepOptionalVar ? !!isStepOptionalVar.value : false,\n    });\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-h-full 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    {{ title }}\n  </h2>\n\n  <div class=\"cqa-flex cqa-flex-col cqa-flex-1 cqa-overflow-y-auto\">\n    <!-- Condition Builder Section -->\n    <div class=\"cqa-mb-6\">\n      <div class=\"cqa-mb-3\">\n        <h3 class=\"cqa-text-sm cqa-text-[12px] cqa-font-semibold cqa-text-gray-900\">\n          Condition Builder\n        </h3>\n      </div>\n\n      <!-- Single Condition Row -->\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-2\" [formGroup]=\"conditionForm\">\n        <!-- Condition Label + Template Dropdown -->\n        <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n          <!-- Label -->\n          <div class=\"cqa-text-[12px] cqa-font-semibold\">\n            {{ conditionRowLabel }}\n          </div>\n\n          <!-- Value Template Dropdown -->\n          <div class=\"cqa-flex-1 cqa-min-w-[150px] cqa-text-[10px]\">\n            <cqa-dynamic-select [form]=\"conditionForm\" [config]=\"getValueConfig()\">\n            </cqa-dynamic-select>\n          </div>\n        </div>\n\n        <!-- Template Variables Section (shown when template is selected) -->\n        <div *ngIf=\"hasSelectedTemplate\" class=\"cqa-mt-2\">\n          <!-- Template Grammar Display -->\n          <div class=\"cqa-mb-4 cqa-flex cqa-items-center cqa-flex-wrap cqa-gap-1 cqa-text-sm cqa-text-gray-700\">\n            <div class=\"cqa-action-format cqa-text-[12px] cqa-leading-[23px] cqa-text-black-100\"\n              [innerHTML]=\"currentHtmlGrammar\">\n            </div>\n          </div>\n\n          <!-- Template Variables Form -->\n          <cqa-template-variables-form\n            style=\"width: 100%;\"\n            [templateVariables]=\"getTemplateVariables()\"\n            [variablesForm]=\"getVariablesForm()\"\n            [metadata]=\"conditionForm.get('metadata')?.value || ''\"\n            [description]=\"conditionForm.get('description')?.value || ''\"\n            [elementOptions]=\"elementOptions\"\n            [hasMoreElements]=\"hasMoreElements\"\n            [isLoadingElements]=\"isLoadingElements\"\n            [screenNameOptions]=\"screenNameOptions\"\n            [hasMoreScreenNames]=\"hasMoreScreenNames\"\n            [isLoadingScreenNames]=\"isLoadingScreenNames\"\n            [parameterOptions]=\"parameterOptions\"\n            [hasMoreParameters]=\"hasMoreParameters\"\n            [isLoadingParameters]=\"isLoadingParameters\"\n            [environmentOptions]=\"environmentOptions\"\n            [hasMoreEnvironments]=\"hasMoreEnvironments\"\n            [isLoadingEnvironments]=\"isLoadingEnvironments\"\n            [defaultTestDataProfileId]=\"defaultTestDataProfileId\"\n            [defaultTestDataStartIndex]=\"defaultTestDataStartIndex\"\n            (variableValueChange)=\"onVariableValueChange($event.name, $event.value)\"\n            (variableBooleanChange)=\"onVariableBooleanChange($event.name, $event.value)\"\n            (metadataChange)=\"conditionForm.get('metadata')?.setValue($event)\"\n            (descriptionChange)=\"conditionForm.get('description')?.setValue($event)\"\n            (loadMoreElements)=\"loadMoreElements.emit()\"\n            (searchElements)=\"searchElements.emit($event)\"\n            (searchElementsByScreenName)=\"searchElementsByScreenName.emit($event)\"\n            (createElement)=\"createElement.emit($event)\"\n            (searchScreenName)=\"searchScreenName.emit($event)\"\n            (loadMoreScreenNames)=\"loadMoreScreenNames.emit($event)\"\n            (createScreenNameRequest)=\"createScreenNameRequest.emit($event)\"\n            (searchParameters)=\"searchParameters.emit($event)\"\n            (loadMoreParameters)=\"loadMoreParameters.emit()\"\n            (searchEnvironments)=\"searchEnvironments.emit($event)\"\n            (loadMoreEnvironments)=\"loadMoreEnvironments.emit()\">\n          </cqa-template-variables-form>\n\n          <!-- Advanced Settings Variables Form -->\n          <div *ngIf=\"getAdvancedVariables().length > 0\" class=\"cqa-mt-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]=\"isAdvancedExpanded\">\n                  expand_more\n                </mat-icon>\n              </button>\n              <div *ngIf=\"isAdvancedExpanded\" class=\"cqa-mt-2\">\n                <cqa-advanced-variables-form\n                  [advancedVariables]=\"getAdvancedVariables()\"\n                  [advancedVariableForm]=\"getAdvancedVariablesForm()\"\n                  (variableBooleanChange)=\"onAdvancedVariableBooleanChange($event.name, $event.value)\"\n                  (variableValueChange)=\"onAdvancedVariableValueChange($event.name, $event.value)\">\n                </cqa-advanced-variables-form>\n              </div>\n            </div>\n          </div>\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\" variant=\"outlined\" text=\"Cancel\" [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      (clicked)=\"onCancel()\">\n    </cqa-button>\n    <cqa-button *ngIf=\"!isSaving\" class=\"cqa-w-1/2\" variant=\"filled\" [text]=\"saveButtonLabel\"\n      [customClass]=\"'cqa-flex-1 cqa-w-full'\"\n      [disabled]=\"!isFormValid()\"\n      (clicked)=\"onSave()\">\n    </cqa-button>\n    <div *ngIf=\"isSaving\" class=\"cqa-w-1/2 cqa-flex-1 cqa-min-h-[38px] cqa-rounded-[8px]\">\n      <cqa-badge label=\"Saving…\" icon=\"autorenew\" [isLoading]=\"true\" [fullWidth]=\"true\" [centerContent]=\"true\"\n        [inlineStyles]=\"'min-height: 38px; height: 38px; box-sizing: border-box; display: flex; align-items: center; justify-content: center;'\"\n        variant=\"info\" size=\"medium\"></cqa-badge>\n    </div>\n  </div>\n</div>\n","import { Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ViewChild } from '@angular/core';\nimport { QuestionnaireItem } from './questionnaire-list.types';\n\n@Component({\n  selector: 'cqa-questionnaire-list',\n  templateUrl: './questionnaire-list.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' }\n})\nexport class QuestionnaireListComponent implements OnChanges {\n  @Input() items: QuestionnaireItem[] = [];\n  @Input() defaultPageSize: number = 6;\n  @Input() pageSizeOptions: number[] = [6, 10, 20, 50];\n  @Input() inputPlaceholder: string = 'Type your answer here...';\n\n  @Output() answerChange = new EventEmitter<{ id: string | number; value: string }>();\n\n  currentPage = 1;\n  pageSize = 6;\n  pageSizeOpen = false;\n\n  @ViewChild('pageSizeDropdownContainer', { static: false }) pageSizeDropdownContainer!: ElementRef;\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['defaultPageSize'] && changes['defaultPageSize'].currentValue) {\n      this.pageSize = this.defaultPageSize;\n      this.currentPage = 1;\n    }\n  }\n\n  get totalItems(): number {\n    return this.items.length;\n  }\n\n  get totalPages(): number {\n    return Math.max(1, Math.ceil(this.totalItems / this.pageSize));\n  }\n\n  get startIndex(): number {\n    return (this.currentPage - 1) * this.pageSize;\n  }\n\n  get endIndex(): number {\n    return Math.min(this.startIndex + this.pageSize, this.totalItems);\n  }\n\n  get visibleItems(): QuestionnaireItem[] {\n    return this.items.slice(this.startIndex, this.endIndex);\n  }\n\n  get isPrevDisabled(): boolean {\n    return this.currentPage === 1;\n  }\n\n  get isNextDisabled(): boolean {\n    return this.currentPage === this.totalPages;\n  }\n\n  onPageSizeChange(size: number): void {\n    this.pageSize = size;\n    this.currentPage = 1;\n  }\n\n  togglePageSizeMenu(): void {\n    this.pageSizeOpen = !this.pageSizeOpen;\n  }\n\n  selectPageSize(size: number): void {\n    this.onPageSizeChange(size);\n    this.pageSizeOpen = false;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onDocumentClick(event: MouseEvent): void {\n    if (!this.pageSizeOpen) {\n      return;\n    }\n    if (this.pageSizeDropdownContainer?.nativeElement) {\n      const clickedInside = this.pageSizeDropdownContainer.nativeElement.contains(event.target as Node);\n      if (!clickedInside) {\n        this.pageSizeOpen = false;\n      }\n    } else {\n      this.pageSizeOpen = false;\n    }\n  }\n\n  prevPage(): void {\n    if (!this.isPrevDisabled) {\n      this.currentPage--;\n    }\n  }\n\n  nextPage(): void {\n    if (!this.isNextDisabled) {\n      this.currentPage++;\n    }\n  }\n\n  onAnswerInput(id: string | number, value: string): void {\n    this.answerChange.emit({ id, value });\n  }\n\n  getInputId(id: string | number): string {\n    return `question-input-${id}`;\n  }\n\n  trackById(_index: number, item: QuestionnaireItem): string | number {\n    return item.id;\n  }\n}\n","<div class=\"cqa-border cqa-border-solid cqa-border-[#E2E8F0] cqa-rounded-xl cqa-shadow-[0_1px_2px_rgba(0,0,0,0.05)] cqa-font-inter\" role=\"region\" aria-label=\"Clarification Questionnaire\">\n\n  <!-- Header -->\n  <div class=\"cqa-py-3 cqa-px-6 cqa-bg-[#EEF2FF80]\">\n    <h2 class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#0F172A] cqa-leading-[22px] cqa-m-0 cqa-mb-1\">Clarification Questionnaire</h2>\n    <p class=\"cqa-text-[14px] cqa-text-[#475569] cqa-leading-[18px] cqa-m-0\">\n      The AI has generated these questions to resolve ambiguities in the requirement.\n      Answering these will regenerate specific test cases.\n    </p>\n  </div>\n\n  <div class=\"cqa-px-6 cqa-py-3\">\n    <!-- Question rows -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n      <ng-container *ngIf=\"visibleItems.length; else emptyState\">\n        <div *ngFor=\"let item of visibleItems; last as isLast; trackBy: trackById\">\n          <div class=\"cqa-flex cqa-items-center cqa-gap-2.5 cqa-mb-2\">\n            <span class=\"cqa-inline-flex cqa-items-center cqa-justify-center cqa-w-[24px] cqa-h-[24px] cqa-min-w-[24px] cqa-rounded-full cqa-bg-[#EEF2FF] cqa-text-[#4F46E5] cqa-text-[12px] cqa-leading-[18px] cqa-font-bold cqa-shrink-0\">{{ item.index }}</span>\n            <label class=\"cqa-text-[12px] cqa-leading-[15px] cqa-text-[#0F172A]\" [for]=\"getInputId(item.id)\">{{ item.question }}</label>\n          </div>\n          <cqa-custom-input\n            [inputId]=\"getInputId(item.id)\"\n            [value]=\"item.answer\"\n            [placeholder]=\"inputPlaceholder\"\n            [fullWidth]=\"true\"\n            (valueChange)=\"onAnswerInput(item.id, $event)\"\n            class=\"cqa-w-full\"\n          ></cqa-custom-input>\n        </div>\n      </ng-container>\n      <ng-template #emptyState>\n        <div class=\"cqa-py-6 cqa-text-[13px] cqa-text-[#6B7280] cqa-text-center\">No questions available.</div>\n      </ng-template>\n    </div>\n\n    <!-- Footer: aligned with table pagination design -->\n    <div class=\"cqa-mt-3 table-footer-pagination cqa-text-[#717182] cqa-text-[12px] cqa-leading-[15px] cqa-flex cqa-items-center cqa-justify-between cqa-gap-2 cqa-flex-wrap cqa-px-[21px] cqa-py-1.5\" aria-live=\"polite\" style=\"border-top: 1px solid #E5E7EB;\">\n      <div class=\"pagination-info cqa-flex cqa-items-center cqa-gap-[7px] cqa-relative\">\n        <span class=\"rows-label\">Questions per page</span>\n        <div class=\"cqa-relative\" #pageSizeDropdownContainer>\n          <button\n            type=\"button\"\n            class=\"cqa-inline-flex cqa-items-center cqa-gap-[24px] cqa-text-[#0A0A0A] cqa-px-[11.5px] cqa-py-[6.75px]\"\n            (click)=\"togglePageSizeMenu()\"\n            [attr.aria-expanded]=\"pageSizeOpen\"\n            aria-haspopup=\"listbox\"\n            aria-label=\"Questions per page\"\n          >\n            {{ pageSize }}\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g opacity=\"0.5\"><path d=\"M3.5 5.25L7 8.75L10.5 5.25\" stroke=\"#717182\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></g></svg>\n          </button>\n          <div\n            *ngIf=\"pageSizeOpen\"\n            class=\"cqa-absolute cqa-z-[100] cqa-bottom-[calc(100%+8px)] cqa-left-0 cqa-w-[75px] cqa-max-h-[170px] cqa-overflow-auto cqa-rounded-lg cqa-border cqa-border-[#E5E7EB] cqa-bg-white cqa-shadow-[0px_4px_6px_-1px_rgba(0,0,0,0.1)] cqa-p-[5px]\"\n            role=\"listbox\"\n            [attr.aria-activedescendant]=\"'question-pagesize-' + pageSize\"\n          >\n            <button\n              *ngFor=\"let opt of pageSizeOptions\"\n              type=\"button\"\n              class=\"cqa-w-full cqa-px-2 cqa-py-[6px] hover:cqa-bg-[#F7F8FA] cqa-text-left cqa-rounded-md cqa-text-black-100\"\n              [attr.id]=\"'question-pagesize-' + opt\"\n              role=\"option\"\n              [attr.aria-selected]=\"pageSize === opt\"\n              (click)=\"selectPageSize(opt)\"\n            >\n              {{ opt }}\n            </button>\n          </div>\n        </div>\n      </div>\n\n      <div class=\"pagination-right cqa-flex cqa-items-center cqa-gap-[21px]\">\n        <div class=\"pagination-range\">\n          {{ totalItems ? startIndex + 1 : 0 }}&ndash;{{ endIndex }} of {{ totalItems }}\n        </div>\n        <div class=\"pagination-controls cqa-flex cqa-items-stretch cqa-gap-[3.5px]\">\n          <button class=\"pagination-btn cqa-w-[28px] cqa-h-[28px] cqa-min-w-[28px] cqa-rounded-[5px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-[#F7F8FA] cqa-flex cqa-items-center cqa-justify-center disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\" [disabled]=\"isPrevDisabled\" (click)=\"prevPage()\" aria-label=\"Previous page\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8.75 10.5L5.25 7L8.75 3.5\" stroke=\"#0A0A0A\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n          <button class=\"pagination-btn cqa-w-[28px] cqa-h-[28px] cqa-min-w-[28px] cqa-rounded-[5px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-bg-[#F7F8FA] cqa-flex cqa-items-center cqa-justify-center disabled:cqa-opacity-50 disabled:cqa-cursor-not-allowed\" [disabled]=\"isNextDisabled\" (click)=\"nextPage()\" aria-label=\"Next page\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M5.25 10.5L8.75 7L5.25 3.5\" stroke=\"#0A0A0A\" stroke-width=\"1.16667\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n          </button>\n        </div>\n      </div>\n    </div>\n  </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ChangeHistoryItem } from './change-history.types';\n\n/** Maps known eventType strings to Material icon names. */\nconst EVENT_ICON_MAP: Record<string, string> = {\n  initial_upload:          'upload',\n  ai_analysis_completed:   'description',\n  test_cases_generated:    'edit',\n  questionnaire_generated: 'assignment',\n};\n\nconst DEFAULT_ICON = 'description';\nconst CHANGE_HISTORY_STYLES = `\n  :host { display: block; width: 100%; }\n  .ch-wrapper { background: #ffffff; border: 1px solid #e8eaf0; border-radius: 8px; padding: 24px; box-shadow: 0 1px 4px rgba(0,0,0,.06); width: 100%; box-sizing: border-box; }\n  .ch-header { display: flex; align-items: flex-start; gap: 10px; margin-bottom: 24px; }\n  .ch-header-icon { display: inline-flex; align-items: center; color: #6b7280; flex-shrink: 0; }\n  .ch-header-icon mat-icon { font-size: 20px; width: 20px; height: 20px; }\n  .ch-title { font-size: 15px; font-weight: 600; color: #1a1d23; margin: 0 0 2px 0; line-height: 1.4; }\n  .ch-subtitle { font-size: 13px; font-weight: 400; color: #6b7280; margin: 0; }\n  .ch-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48px 24px; gap: 12px; }\n  .ch-empty p { font-size: 14px; color: #9ca3af; margin: 0; }\n  .ch-empty-icon { font-size: 32px; width: 32px; height: 32px; color: #d1d5db; }\n  .ch-timeline { list-style: none; margin: 0; padding: 0; }\n  .ch-event { display: flex; align-items: flex-start; }\n  .ch-track { width: 24px; display: flex; flex-direction: column; align-items: center; flex-shrink: 0; }\n  .ch-track::after { content: ''; width: 2px; flex: 1; background-color: #e5e7eb; margin-top: 4px; }\n  .ch-event--last .ch-track::after { display: none; }\n  .ch-dot { display: block; width: 10px; height: 10px; border-radius: 50%; background: #ffffff; border: 2px solid #d1d5db; margin-top: 4px; z-index: 1; flex-shrink: 0; }\n  .ch-card { display: flex; align-items: flex-start; gap: 12px; padding: 0 0 28px 12px; width: 100%; }\n  .ch-event-icon { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 6px; background: #f3f4f6; flex-shrink: 0; }\n  .ch-event-icon mat-icon { font-size: 16px; width: 16px; height: 16px; color: #6b7280; }\n  .ch-event-body { flex: 1; display: flex; flex-direction: column; gap: 4px; min-width: 0; }\n  .ch-event-title { font-size: 14px; font-weight: 600; color: #1a1d23; }\n  .ch-event-meta { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #6b7280; }\n  .ch-meta-icon { font-size: 12px; width: 12px; height: 12px; color: #9ca3af; }\n  .ch-meta-actor, .ch-meta-timestamp { font-size: 12px; color: #6b7280; }\n  .ch-badges { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; }\n  .ch-badge { font-size: 12px; font-weight: 500; padding: 2px 8px; border-radius: 4px; }\n  .ch-badge--added { background: #dcfce7; color: #15803d; }\n  .ch-badge--modified { background: #fef9c3; color: #854d0e; }\n  .ch-badge--removed { background: #fee2e2; color: #b91c1c; }\n  .ch-actions { display: flex; align-items: center; gap: 8px; margin-left: auto; flex-shrink: 0; }\n`;\n\n@Component({\n  selector: 'cqa-change-history',\n  templateUrl: './change-history.component.html',\n  styles: [CHANGE_HISTORY_STYLES],\n  host: { class: 'cqa-ui-root' }\n})\nexport class ChangeHistoryComponent {\n  @Input() items: ChangeHistoryItem[] = [];\n  @Input() title: string = 'Change History';\n\n  @Output() viewDetails = new EventEmitter<string | number>();\n  @Output() revert = new EventEmitter<string | number>();\n\n  getEventIcon(eventType: string): string {\n    return EVENT_ICON_MAP[eventType] ?? DEFAULT_ICON;\n  }\n\n  onViewDetails(id: string | number): void {\n    this.viewDetails.emit(id);\n  }\n\n  onRevert(id: string | number): void {\n    this.revert.emit(id);\n  }\n\n  trackById(_index: number, item: ChangeHistoryItem): string | number {\n    return item.id;\n  }\n}\n","<div class=\"ch-wrapper\" role=\"region\" [attr.aria-label]=\"title\">\n\n  <!-- Header -->\n  <div class=\"ch-header\">\n    <span class=\"ch-header-icon\" aria-hidden=\"true\">\n      <mat-icon>history</mat-icon>\n    </span>\n    <div>\n      <h2 class=\"ch-title\">{{ title }}</h2>\n      <p class=\"ch-subtitle\">{{ items.length }} events recorded</p>\n    </div>\n  </div>\n\n  <!-- Empty state -->\n  <div class=\"ch-empty\" *ngIf=\"!items.length\">\n    <mat-icon class=\"ch-empty-icon\" aria-hidden=\"true\">history</mat-icon>\n    <p>No history events recorded yet.</p>\n  </div>\n\n  <!-- Timeline -->\n  <ol class=\"ch-timeline\" *ngIf=\"items.length\" aria-label=\"Change history events\">\n    <li\n      class=\"ch-event\"\n      *ngFor=\"let item of items; last as isLast; trackBy: trackById\"\n      [class.ch-event--last]=\"isLast\"\n    >\n      <!-- Track: dot + vertical line -->\n      <div class=\"ch-track\">\n        <span class=\"ch-dot\" aria-hidden=\"true\"></span>\n      </div>\n\n      <!-- Card -->\n      <div class=\"ch-card\">\n\n        <!-- Event icon -->\n        <span class=\"ch-event-icon\" aria-hidden=\"true\">\n          <mat-icon>{{ getEventIcon(item.eventType) }}</mat-icon>\n        </span>\n\n        <!-- Body -->\n        <div class=\"ch-event-body\">\n          <span class=\"ch-event-title\">{{ item.title }}</span>\n\n          <div class=\"ch-event-meta\">\n            <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">person</mat-icon>\n            <span class=\"ch-meta-actor\">{{ item.actor }}</span>\n            <mat-icon class=\"ch-meta-icon\" aria-hidden=\"true\">schedule</mat-icon>\n            <span class=\"ch-meta-timestamp\">{{ item.timestamp }}</span>\n          </div>\n\n          <div class=\"ch-badges\" *ngIf=\"item.badges?.length\">\n            <span\n              *ngFor=\"let badge of item.badges\"\n              class=\"ch-badge\"\n              [ngClass]=\"'ch-badge--' + badge.variant\"\n            >{{ badge.label }}</span>\n          </div>\n        </div>\n\n        <!-- Actions -->\n        <div class=\"ch-actions\">\n          <cqa-button\n            variant=\"text\"\n            btnSize=\"sm\"\n            icon=\"visibility\"\n            [text]=\"'View Details'\"\n            [attr.aria-label]=\"'View details for ' + item.title\"\n            (clicked)=\"onViewDetails(item.id)\"\n          ></cqa-button>\n\n          <cqa-button\n            *ngIf=\"item.canRevert\"\n            variant=\"text\"\n            btnSize=\"sm\"\n            icon=\"history\"\n            [text]=\"'Revert'\"\n            [attr.aria-label]=\"'Revert ' + item.title\"\n            (clicked)=\"onRevert(item.id)\"\n          ></cqa-button>\n        </div>\n\n      </div>\n    </li>\n  </ol>\n\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'cqa-version-history-list',\n  templateUrl: './version-history-list.component.html',\n  styleUrls: []\n})\nexport class VersionHistoryListComponent {\n  @Input() versions: any[] = [];\n  @Input() selectedVersionId: number | null = null;\n  @Input() currentVersionId: number | null = null;\n  @Input() isLoadingList = false;\n  @Input() isLoadingMore = false;\n  @Input() emptyStateConfig: any;\n\n  @Input() getRelativeTimeFn: (epochMs: number) => string = () => '';\n  @Input() getAuthorInitialsFn: (version: any) => string = () => '';\n  @Input() getAuthorLabelFn: (version: any) => string = () => '';\n  @Input() getChangeTypeBadgeFn: (changeType: string) => { backgroundColor: string; textColor: string; borderColor: string } =\n    () => ({ backgroundColor: '#F2F4F7', textColor: '#344054', borderColor: '#E4E7EC' });\n  @Input() getChangeSummaryBadgeFn: (version: any) => { label: string; backgroundColor: string; textColor: string; borderColor: string } =\n    (v) => ({ label: v?.changeSummary || '', backgroundColor: '#F2F4F7', textColor: '#344054', borderColor: '#E4E7EC' });\n\n  @Output() versionSelected = new EventEmitter<number>();\n  @Output() listScroll = new EventEmitter<Event>();\n}\n","<div class=\"cqa-vh-list-container\" (scroll)=\"listScroll.emit($event)\">\n  <div class=\"d-flex align-items-center justify-content-between fz-14 fw-semi-bold cqa-vh-list-header\">\n    {{ versions.length }} Versions\n  </div>\n\n  <div *ngIf=\"isLoadingList\" class=\"cqa-vh-list-skeleton\">\n    <div *ngFor=\"let i of [1,2,3,4]\" class=\"cqa-vh-list-skeleton-row\">\n      <div class=\"animated-background rounded-circle cqa-vh-list-skeleton-dot\"></div>\n      <div style=\"flex: 1;\">\n        <div class=\"animated-background\" style=\"height: 14px; width: 50%; border-radius: 4px; margin-bottom: 10px;\"></div>\n        <div class=\"animated-background\" style=\"height: 12px; width: 80%; border-radius: 4px; margin-bottom: 10px;\"></div>\n        <div class=\"animated-background\" style=\"height: 12px; width: 45%; border-radius: 4px;\"></div>\n      </div>\n    </div>\n  </div>\n\n  <ng-container *ngIf=\"!isLoadingList\">\n    <div *ngIf=\"!versions.length\" class=\"cqa-vh-list-empty\">\n      <cqa-empty-state [title]=\"emptyStateConfig?.title\" [description]=\"emptyStateConfig?.description\"\n        [imageUrl]=\"emptyStateConfig?.imageUrl\"></cqa-empty-state>\n    </div>\n    <div class=\"cqa-vh-list-body\">\n      <div\n        *ngFor=\"let v of versions\"\n        (click)=\"versionSelected.emit(v.id)\"\n        class=\"cqa-vh-list-item\"\n        [class.cqa-vh-list-item--selected]=\"v.id === selectedVersionId\">\n        <div class=\"d-flex align-items-start\" style=\"gap: 12px;\">\n          <div style=\"padding-top: 3px; flex-shrink: 0;\">\n            <span class=\"cqa-vh-list-item-radio\"\n              [class.cqa-vh-list-item-radio--selected]=\"v.id === selectedVersionId\">\n              <span *ngIf=\"v.id === selectedVersionId\" class=\"cqa-vh-list-item-radio-dot\"></span>\n            </span>\n          </div>\n          <div style=\"flex: 1; min-width: 0;\">\n            <div class=\"d-flex align-items-center justify-content-between\" style=\"margin-bottom: 4px;\">\n              <div class=\"d-flex align-items-center\" style=\"gap: 6px;\">\n                <span class=\"cqa-vh-list-item-version\"\n                  [class.cqa-vh-list-item-version--selected]=\"v.id === selectedVersionId\">\n                  v{{ v.versionNumber }}\n                </span>\n                <cqa-badge *ngIf=\"v.id === currentVersionId\" label=\"Current\" size=\"extra-small\" variant=\"info\"\n                  backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n              </div>\n              <span class=\"cqa-vh-list-item-time\">{{ getRelativeTimeFn(v.createdDate) }}</span>\n            </div>\n\n            <div *ngIf=\"v.changeSummary\" class=\"cqa-vh-list-item-summary\">\n              <ng-container *ngIf=\"getChangeSummaryBadgeFn(v) as badge\">\n                <cqa-badge\n                  [label]=\"badge.label\"\n                  size=\"extra-small\"\n                  [backgroundColor]=\"badge.backgroundColor\"\n                  [textColor]=\"badge.textColor\"\n                  [borderColor]=\"badge.borderColor\">\n                </cqa-badge>\n              </ng-container>\n            </div>\n\n            <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-top: 4px;\">\n              <span class=\"cqa-vh-list-item-avatar\">{{ getAuthorInitialsFn(v) }}</span>\n              <span class=\"cqa-vh-list-item-author\">{{ getAuthorLabelFn(v) }}</span>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div *ngIf=\"isLoadingMore\" class=\"cqa-vh-list-loading-more\">\n        Loading more...\n      </div>\n    </div>\n  </ng-container>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\n@Component({\n  selector: 'cqa-version-history-compare',\n  templateUrl: './version-history-compare.component.html',\n  styleUrls: []\n})\nexport class VersionHistoryCompareComponent implements OnChanges {\n  @Input() compareResult: any;\n  @Input() versions: any[] = [];\n  @Input() compareFromId: number | null = null;\n  @Input() compareToId: number | null = null;\n  @Input() formatValueHtmlFn: (value: any, field?: string) => string = (v) => String(v ?? '');\n  @Input() getFieldLabelFn: (field: string) => string = (f) => f || 'field';\n\n  @Output() swapVersions = new EventEmitter<void>();\n  @Output() closeComparison = new EventEmitter<void>();\n  @Output() compareFromChange = new EventEmitter<number>();\n  @Output() compareToChange = new EventEmitter<number>();\n\n  groupedStepChanges: Array<{ stepId: number | null; label: string; changes: any[] }> = [];\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['compareResult']) {\n      this.groupedStepChanges = this.buildGroupedStepChanges();\n    }\n  }\n\n  private buildGroupedStepChanges(): Array<{ stepId: number | null; label: string; changes: any[] }> {\n    const changes: any[] = this.compareResult?.stepChanges || [];\n    if (!changes.length) { return []; }\n\n    const map = new Map<string, any[]>();\n    changes.forEach((change: any) => {\n      const key = change?.stepId != null ? String(change.stepId) : '__NO_STEP__';\n      const list = map.get(key) || [];\n      list.push(change);\n      map.set(key, list);\n    });\n\n    return Array.from(map.entries())\n      .map(([key, stepChanges]) => ({\n        stepId: key !== '__NO_STEP__' ? Number(key) : null,\n        label: key !== '__NO_STEP__' ? `Step #${key}` : 'General',\n        changes: stepChanges\n      }))\n      .sort((a, b) => {\n        if (a.stepId === null) { return 1; }\n        if (b.stepId === null) { return -1; }\n        return a.stepId - b.stepId;\n      });\n  }\n}\n","<div>\n  <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-header\">\n    <div class=\"d-flex align-items-center\" style=\"gap: 10px;\">\n      <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap versions\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M4 2L4 14M4 14L1 11M4 14L7 11M12 14L12 2M12 2L9 5M12 2L15 5\" stroke=\"#667085\" stroke-width=\"1.5\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <span class=\"cqa-vh-compare-title\">Version Comparison</span>\n      <cqa-badge *ngIf=\"compareResult\" [label]=\"compareResult.totalDifferences + ' differences'\" size=\"small\"\n        variant=\"info\" backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n    </div>\n    <cqa-button variant=\"outlined\" text=\"Close\" (clicked)=\"closeComparison.emit()\"></cqa-button>\n  </div>\n\n  <div class=\"d-flex align-items-center justify-content-between cqa-vh-compare-selectors\">\n    <div class=\"d-flex align-items-center\" style=\"gap: 8px; flex: 1; min-width: 0;\">\n      <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareFromId\" (ngModelChange)=\"compareFromChange.emit($event)\">\n        <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} · {{ v.displayDate | date:'MMM d,\n          yyyy · h:mm a' }}</option>\n      </select>\n      <span class=\"cqa-vh-compare-swap-btn\" (click)=\"swapVersions.emit()\" title=\"Swap\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <path d=\"M2 5H14M14 5L11 2M14 5L11 8M14 11H2M2 11L5 8M2 11L5 14\" stroke=\"#3f43ee\" stroke-width=\"1.5\"\n            stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n        </svg>\n      </span>\n      <select class=\"cqa-vh-compare-select\" [ngModel]=\"compareToId\" (ngModelChange)=\"compareToChange.emit($event)\">\n        <option *ngFor=\"let v of versions\" [ngValue]=\"v.id\">V{{ v.versionNumber }} · {{ v.displayDate | date:'MMM d,\n          yyyy · h:mm a' }}</option>\n      </select>\n    </div>\n  </div>\n\n  <div *ngIf=\"!compareResult\" class=\"cqa-vh-compare-loading\">\n    Loading comparison...\n  </div>\n\n  <ng-container *ngIf=\"compareResult\">\n    <div class=\"d-flex align-items-center cqa-vh-compare-summary-badges\">\n      <cqa-badge [label]=\"'+ ' + compareResult.summary.added + ' added'\" size=\"small\" backgroundColor=\"#ECFDF3\"\n        textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n      <cqa-badge [label]=\"'~ ' + compareResult.summary.modified + ' modified'\" size=\"small\" backgroundColor=\"#FFFAEB\"\n        textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n      <cqa-badge [label]=\"'- ' + compareResult.summary.removed + ' removed'\" size=\"small\" backgroundColor=\"#FEF3F2\"\n        textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n      <cqa-badge [label]=\"'= ' + compareResult.summary.unchanged + ' unchanged'\" size=\"small\" backgroundColor=\"#F2F4F7\"\n        textColor=\"#344054\" borderColor=\"#E4E7EC\"></cqa-badge>\n    </div>\n\n    <ng-container *ngIf=\"compareResult.testCaseChanges?.length || compareResult.stepChanges?.length; else noDiffs\">\n      <ng-container *ngIf=\"compareResult.testCaseChanges?.length\">\n        <div class=\"d-flex align-items-center cqa-vh-compare-section-header\">\n          <span>Test Case Changes</span>\n          <cqa-badge [label]=\"compareResult.testCaseChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n            textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n        </div>\n        <div *ngFor=\"let change of compareResult.testCaseChanges\" class=\"cqa-vh-compare-diff-row\">\n          <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div>\n          <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0;\">\n            <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n              <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n            </div>\n            <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n            <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n              <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n            </div>\n            <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n          </div>\n        </div>\n      </ng-container>\n\n      <ng-container *ngIf=\"compareResult.stepChanges?.length\">\n        <div class=\"d-flex align-items-center cqa-vh-compare-section-header\"\n          [style.margin-top.px]=\"compareResult.testCaseChanges?.length ? 20 : 0\">\n          <span>Step Changes</span>\n          <cqa-badge [label]=\"compareResult.stepChanges.length + ' diffs'\" size=\"small\" backgroundColor=\"#EFF4FF\"\n            textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n        </div>\n\n        <ng-container *ngFor=\"let stepGroup of groupedStepChanges; let sgi = index\">\n          <div class=\"d-flex gap-2\">\n            <!-- Step sub-group header -->\n            <div class=\"cqa-vh-detail-step-group-header\" [style.margin-top.px]=\"sgi > 0 ? 14 : 4\">\n              <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n              <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\" textColor=\"#636A71\"\n                borderColor=\"#DBDEE1\"></cqa-badge>\n            </div>\n\n            <!-- Changes within this step -->\n            <div class=\"cqa-vh-compare-diff-row-container\">\n              <div *ngFor=\"let change of stepGroup.changes\"\n                class=\"cqa-vh-compare-diff-row cqa-vh-compare-diff-row--indented\">\n                <!-- <div class=\"cqa-vh-compare-field-label\">{{ getFieldLabelFn(change.field) }}</div> -->\n                <div style=\"display: flex; flex: 1; gap: 12px; min-width: 0; flex-grow:1;\">\n                  <div *ngIf=\"change.fromValue != null\"\n                    class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--removed\">\n                    <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></div>\n                  </div>\n                  <div *ngIf=\"change.fromValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n                  <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-compare-diff-cell cqa-vh-compare-diff-cell--added\">\n                    <div class=\"cqa-vh-compare-diff-cell-text\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></div>\n                  </div>\n                  <div *ngIf=\"change.toValue == null\" class=\"cqa-vh-compare-diff-cell-empty\"></div>\n                </div>\n              </div>\n            </div>\n          </div>\n\n        </ng-container>\n      </ng-container>\n    </ng-container>\n\n    <ng-template #noDiffs>\n      <div class=\"cqa-vh-compare-empty\">\n        <cqa-empty-state title=\"No differences\" description=\"No differences between these versions.\"></cqa-empty-state>\n      </div>\n    </ng-template>\n  </ng-container>\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'cqa-version-history-detail',\n  templateUrl: './version-history-detail.component.html',\n  styleUrls: []\n})\nexport class VersionHistoryDetailComponent {\n  @Input() selectedVersion: any;\n  @Input() selectedIsCurrent = false;\n  @Input() selectedVersionGroupedChanges: Array<{\n    category: string;\n    label: string;\n    changes: any[];\n    stepGroups?: Array<{ stepId: number | null; label: string; changes: any[] }>;\n  }> = [];\n  @Input() isRestoring = false;\n\n  @Input() getAuthorLabelFn: (version: any) => string = () => '';\n  @Input() getOpBadgeFn: (op: string) => { label: string; backgroundColor: string; textColor: string; borderColor: string } =\n    () => ({ label: '', backgroundColor: '#F2F4F7', textColor: '#344054', borderColor: '#E4E7EC' });\n  @Input() getChangeHeadlineFn: (change: any) => string = () => '';\n  @Input() formatValueHtmlFn: (value: any, field?: string) => string = (v) => String(v ?? '');\n  @Input() trackByGroupCategoryFn: (index: number, group: { category: string }) => string = (_, g) => g.category;\n  @Input() trackByChangeFn: (index: number, change: any) => string = (i) => String(i);\n\n  @Output() compare = new EventEmitter<void>();\n  @Output() restore = new EventEmitter<void>();\n}\n","<ng-container *ngIf=\"selectedVersion; else noSelection\">\n  <div class=\"d-flex align-items-start justify-content-between cqa-vh-detail-header\">\n    <div>\n      <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n        <h3 class=\"cqa-vh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n        <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n          textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n      </div>\n      <div class=\"cqa-vh-detail-meta\">\n        {{ getAuthorLabelFn(selectedVersion) }} · {{ selectedVersion.displayDate | date:'MMM d, yyyy · h:mm a' }}\n      </div>\n      <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-vh-detail-summary\">\n        {{ selectedVersion.changeSummary }}\n      </div>\n    </div>\n    <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-vh-detail-actions\">\n      <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button>\n      <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n        [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n    </div>\n  </div>\n\n  <ng-container *ngFor=\"let group of selectedVersionGroupedChanges; let gi = index; trackBy: trackByGroupCategoryFn\">\n\n    <!-- Category header -->\n    <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 10px;\"\n      [style.margin-top.px]=\"gi > 0 ? 20 : 0\">\n      <span class=\"cqa-vh-detail-group-label\">{{ group.label }}</span>\n      <cqa-badge [label]=\"'' + group.changes.length\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n        textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n    </div>\n\n    <!-- STEP category: second-level grouping by stepId -->\n    <ng-container *ngIf=\"group.category === 'STEP' && group.stepGroups?.length; else flatChanges\">\n      <ng-container *ngFor=\"let stepGroup of group.stepGroups; let si = index\">\n        <div class=\"d-flex gap-2\">\n          <!-- Step sub-group header -->\n          <div class=\"\" [style.margin-top.px]=\"si > 0 ? 12 : 0\">\n            <!-- <span class=\"cqa-vh-detail-step-group-label\">{{ stepGroup.label }}</span> -->\n            <cqa-badge [label]=\"stepGroup.label\" size=\"small\" backgroundColor=\"#EDF1F3\"\n              textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n          </div>\n          <!-- Changes within this step — no Step badge (step is already in the sub-header) -->\n           <div class=\"cqa-vh-detail-change-row-container\">\n            <div *ngFor=\"let change of stepGroup.changes; trackBy: trackByChangeFn\"\n              class=\"cqa-vh-detail-change-row cqa-vh-detail-change-row--indented\">\n              <div>\n                <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n                  <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n                    [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n                    [textColor]=\"getOpBadgeFn(change.op).textColor\"\n                    [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n                  <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n                </div>\n\n                <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n                  <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n                    [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n                  <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n                </div>\n\n                <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n                  <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n                    [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n                  <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n\n\n\n\n      </ng-container>\n    </ng-container>\n\n    <!-- All other categories: flat list (also fallback for STEP if no stepGroups) -->\n    <ng-template #flatChanges>\n      <div *ngFor=\"let change of group.changes; trackBy: trackByChangeFn\" class=\"cqa-vh-detail-change-row\">\n        <div *ngIf=\"change.stepId != null\" class=\"cqa-vh-detail-change-step-col\">\n          <cqa-badge [label]=\"'Step #' + change.stepId\" size=\"small\" [backgroundColor]=\"'#EDF1F3'\"\n            [textColor]=\"'#636A71'\" [borderColor]=\"'#DBDEE1'\"></cqa-badge>\n        </div>\n        <div>\n          <div class=\"d-flex align-items-center my-4\" style=\"gap: 8px; flex-wrap: wrap;\">\n            <cqa-badge [label]=\"getOpBadgeFn(change.op).label\" size=\"small\"\n              [backgroundColor]=\"getOpBadgeFn(change.op).backgroundColor\"\n              [textColor]=\"getOpBadgeFn(change.op).textColor\"\n              [borderColor]=\"getOpBadgeFn(change.op).borderColor\"></cqa-badge>\n            <span class=\"cqa-vh-detail-change-headline\">{{ getChangeHeadlineFn(change) }}</span>\n          </div>\n\n          <div *ngIf=\"change.fromValue != null\" class=\"cqa-vh-detail-change-value\">\n            <cqa-badge [label]=\"'Before'\" size=\"small\" [backgroundColor]=\"'#FEF2F2'\" [textColor]=\"'#FB2C36'\"\n              [borderColor]=\"'#FFE2E2'\"></cqa-badge>\n            <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.fromValue, change.field)\"></span>\n          </div>\n\n          <div *ngIf=\"change.toValue != null\" class=\"cqa-vh-detail-change-value\">\n            <cqa-badge [label]=\"'After'\" size=\"small\" [backgroundColor]=\"'#ECFDF5'\" [textColor]=\"'#009966'\"\n              [borderColor]=\"'#D0FAE5'\"></cqa-badge>\n            <span class=\"pl-4\" [innerHTML]=\"formatValueHtmlFn(change.toValue, change.field)\"></span>\n          </div>\n        </div>\n      </div>\n    </ng-template>\n\n  </ng-container>\n\n  <div *ngIf=\"!selectedVersion.changes?.length\" class=\"cqa-vh-detail-empty\">\n    <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n  </div>\n</ng-container>\n\n<ng-template #noSelection>\n  <div class=\"cqa-vh-detail-no-selection\">\n    Select a version to view details.\n  </div>\n</ng-template>","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'cqa-version-history-restore-confirm',\n  templateUrl: './version-history-restore-confirm.component.html',\n  styleUrls: []\n})\nexport class VersionHistoryRestoreConfirmComponent {\n  @Input() restoringToVersion: any;\n  @Input() currentVersionNumber: number = 0;\n  @Input() newVersionNumber: number = 0;\n  @Input() authorName: string = '';\n  @Input() getChangeHeadlineFn: ((change: any) => string) | null = null;\n\n  get settingsChanges(): any[] {\n    return (this.restoringToVersion?.changes || []).filter((c: any) => c.category === 'settings');\n  }\n\n  get stepChanges(): any[] {\n    return (this.restoringToVersion?.changes || []).filter((c: any) => c.category !== 'settings');\n  }\n\n  getRestoreToLabel(): string {\n    if (!this.restoringToVersion) { return ''; }\n    const date = this.restoringToVersion.displayDate\n      ? this.formatDate(this.restoringToVersion.displayDate)\n      : '';\n    return 'v' + this.restoringToVersion.versionNumber + (date ? ' — ' + date : '');\n  }\n\n  formatDate(date: Date): string {\n    const d = date instanceof Date ? date : new Date(date);\n    return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric' }) + ', ' +\n      d.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit' });\n  }\n\n}\n","<div class=\"cqa-vh-restore-confirm\">\n\n  <!-- Info grid -->\n  <div class=\"cqa-vh-restore-info-grid\">\n    <div class=\"cqa-vh-restore-info-row\">\n      <span class=\"cqa-vh-restore-info-label\">Restoring to</span>\n      <span class=\"cqa-vh-restore-info-value\">{{ getRestoreToLabel() }}</span>\n    </div>\n    <div class=\"cqa-vh-restore-info-row\">\n      <span class=\"cqa-vh-restore-info-label\">New version created</span>\n      <span class=\"cqa-vh-restore-info-value\">v{{ newVersionNumber }} (auto-incremented)</span>\n    </div>\n    <div class=\"cqa-vh-restore-info-row\">\n      <span class=\"cqa-vh-restore-info-label\">Current version</span>\n      <span class=\"cqa-vh-restore-info-value\">v{{ currentVersionNumber }} — preserved in history</span>\n    </div>\n    <div class=\"cqa-vh-restore-info-row\">\n      <span class=\"cqa-vh-restore-info-label\">Author</span>\n      <span class=\"cqa-vh-restore-info-value\">{{ authorName }}</span>\n    </div>\n  </div>\n\n  <!-- Changes that will be reverted -->\n  <div *ngIf=\"restoringToVersion?.changes?.length\">\n    <div class=\"cqa-vh-restore-changes-title\">Changes that will be reverted</div>\n\n    <!-- Settings changes -->\n    <ng-container *ngIf=\"settingsChanges.length\">\n      <div class=\"cqa-vh-restore-changes-subheader\">\n        <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">settings</span>\n        Test Case Settings\n      </div>\n      <div class=\"cqa-vh-restore-changes-list\">\n        <div *ngFor=\"let change of settingsChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n          <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n          <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Step changes -->\n    <ng-container *ngIf=\"stepChanges.length\">\n      <div class=\"cqa-vh-restore-changes-subheader\" [style.marginTop]=\"settingsChanges.length ? '12px' : '0'\">\n        <span class=\"material-symbols-outlined cqa-vh-restore-subheader-icon\">list_alt</span>\n        Step Changes\n      </div>\n      <div class=\"cqa-vh-restore-changes-list\">\n        <div *ngFor=\"let change of stepChanges; let i = index\" class=\"cqa-vh-restore-change-item\">\n          <div class=\"cqa-vh-restore-change-index\">{{ i + 1 }}</div>\n          <span class=\"cqa-vh-restore-change-sentence\">{{ getChangeHeadlineFn ? getChangeHeadlineFn(change) : change?.sentence || '' }}</span>\n        </div>\n      </div>\n    </ng-container>\n  </div>\n\n  <!-- Preservation note -->\n  <div class=\"cqa-vh-restore-note\">\n    <span class=\"material-symbols-outlined cqa-vh-restore-note-icon\">info</span>\n    <span class=\"cqa-vh-restore-note-text\">\n      All version history will be fully preserved. This restore action will itself appear as a new version entry in the timeline.\n    </span>\n  </div>\n\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n  selector: 'cqa-new-version-history-detail',\n  templateUrl: './new-version-history-detail.component.html',\n  styleUrls: []\n})\nexport class NewVersionHistoryDetailComponent {\n  private readonly prioritizedFields: string[] = ['action'];\n\n  @Input() selectedVersion: any;\n  @Input() selectedIsCurrent = false;\n  @Input() isRestoring = false;\n\n  @Input() getAuthorLabelFn: (version: any) => string = () => '';\n  @Input() getFieldLabelFn: (field: string) => string = (field) => field;\n  @Input() getStepPrefixFn: (step: any) => string = () => 'Step';\n  @Input() getCategoryLabelFn: (category: string) => string = (cat) => (cat || 'Other') + ' Changes';\n  @Input() formatDisplayValueFn: (value: any, field?: string, stepData?: any) => string = (v) => v == null ? '-' : String(v);\n  @Input() getStepActionHtmlFn: (step: any) => string = () => '';\n  @Input() hiddenFields: string[] = [];\n  @Input() parseFieldAsTableFn: (field: string, value: any, stepData?: any) => Record<string, any> | null = () => null;\n  /** Return a badge config to render before the value text, or null for no badge. */\n  @Input() getValueBadgeConfigFn: (value: any, field: string, stepData?: any) => { label: string; backgroundColor: string; textColor: string; borderColor: string } | null = () => null;\n  /** Return { oldHtml, newHtml } with inline diff markup, or null to use plain text rendering. */\n  @Input() getInlineDiffFn: (oldValue: any, newValue: any, field: string, oldStepData?: any, newStepData?: any) => { oldHtml: string; newHtml: string } | null = () => null;\n\n  @Output() compare = new EventEmitter<void>();\n  @Output() restore = new EventEmitter<void>();\n\n  get hasTestCaseChanges(): boolean {\n    return this.selectedVersion?.testCase?.hasChanges === true;\n  }\n\n  get testCaseChangedFields(): string[] {\n    return this.visibleFields(this.selectedVersion?.testCase?.changedFields || []);\n  }\n\n  visibleFields(fields: string[]): string[] {\n    const visible = this.hiddenFields?.length\n      ? fields.filter(f => !this.hiddenFields.includes(f))\n      : [...fields];\n    return this.prioritizeFields(visible);\n  }\n\n  visibleChangedFields(step: any): string[] {\n    return this.visibleFields(step?.changedFields || []);\n  }\n\n  get stepsAdded(): any[] {\n    return this.selectedVersion?.steps?.added || [];\n  }\n\n  get stepsDeleted(): any[] {\n    return this.selectedVersion?.steps?.deleted || [];\n  }\n\n  get stepsUpdated(): any[] {\n    return this.selectedVersion?.steps?.updated || [];\n  }\n\n  get stepsSummary(): any {\n    return this.selectedVersion?.steps?.summary;\n  }\n\n  get hasAnyChanges(): boolean {\n    return this.hasTestCaseChanges\n      || this.stepsAdded.length > 0\n      || this.stepsDeleted.length > 0\n      || this.stepsUpdated.length > 0;\n  }\n\n  /**\n   * Tries to parse the value as a plain object (or a JSON string that is an object).\n   * Returns the parsed object, or null if the value is not an object/JSON-object.\n   */\n  parseObjectValue(value: any): Record<string, any> | null {\n    if (value == null) { return null; }\n    if (typeof value === 'object' && !Array.isArray(value)) { return value; }\n    if (typeof value === 'string') {\n      const trimmed = value.trim();\n      if (trimmed.startsWith('{')) {\n        try {\n          const parsed = JSON.parse(trimmed);\n          if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n            return parsed;\n          }\n        } catch { /* not valid JSON */ }\n      }\n    }\n    return null;\n  }\n\n  /** Returns only the keys where old and new values differ. */\n  objectKeys(oldObj: Record<string, any> | null, newObj: Record<string, any> | null): string[] {\n    const allKeys = new Set([\n      ...Object.keys(oldObj || {}),\n      ...Object.keys(newObj || {})\n    ]);\n    const changed = Array.from(allKeys).filter(key =>\n      JSON.stringify((oldObj || {})[key]) !== JSON.stringify((newObj || {})[key])\n    );\n    return this.prioritizeFields(changed);\n  }\n\n  /** True when the value for a key differs between old and new. */\n  isKeyChanged(oldObj: Record<string, any> | null, newObj: Record<string, any> | null, key: string): boolean {\n    return JSON.stringify((oldObj || {})[key]) !== JSON.stringify((newObj || {})[key]);\n  }\n\n  formatPrimitiveValue(value: any): string {\n    if (value == null) { return '-'; }\n    if (typeof value === 'boolean') { return value ? 'true' : 'false'; }\n    if (Array.isArray(value)) {\n      if (value.length === 0) { return '-'; }\n      return value.map((item, i) =>\n        `${i + 1}. ${typeof item === 'object' ? JSON.stringify(item) : String(item)}`\n      ).join('\\n');\n    }\n    if (typeof value === 'object') { return JSON.stringify(value); }\n    return String(value);\n  }\n\n  trackByKey(_index: number, key: string): string {\n    return key;\n  }\n\n  trackByField(_index: number, field: string): string {\n    return field;\n  }\n\n  trackByStepId(_index: number, step: any): number {\n    return step.stepId ?? step.old?.id ?? step.new?.id ?? _index;\n  }\n\n  private prioritizeFields(fields: string[]): string[] {\n    if (!fields?.length) {\n      return fields;\n    }\n\n    const prioritized = this.prioritizedFields.filter(field => fields.includes(field));\n    if (!prioritized.length) {\n      return fields;\n    }\n\n    const prioritizedSet = new Set(prioritized);\n    const remaining = fields.filter(field => !prioritizedSet.has(field));\n    return [...prioritized, ...remaining];\n  }\n}\n","<ng-container *ngIf=\"selectedVersion; else noSelection\">\n  <!-- ========== Header (same as old component) ========== -->\n  <div class=\"d-flex align-items-start justify-content-between cqa-nvh-detail-header\">\n    <div>\n      <div class=\"d-flex align-items-center\" style=\"gap: 8px; margin-bottom: 6px;\">\n        <h3 class=\"cqa-nvh-detail-version-number\">Version {{ selectedVersion.versionNumber }}</h3>\n        <cqa-badge *ngIf=\"selectedIsCurrent\" label=\"Current\" size=\"small\" variant=\"info\" backgroundColor=\"#EFF4FF\"\n          textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n      </div>\n      <div class=\"cqa-nvh-detail-meta\">\n        {{ getAuthorLabelFn(selectedVersion) }} · {{ selectedVersion.createdDate | date:'MMM d, yyyy · h:mm a' }}\n      </div>\n      <div *ngIf=\"selectedVersion.changeSummary\" class=\"cqa-nvh-detail-summary\">\n        {{ selectedVersion.changeSummary }}\n      </div>\n    </div>\n    <div *ngIf=\"!selectedIsCurrent\" class=\"cqa-nvh-detail-actions\">\n      <!-- <cqa-button variant=\"outlined\" text=\"Compare with Current\" (clicked)=\"compare.emit()\"></cqa-button> -->\n      <cqa-button variant=\"filled\" icon=\"refresh\" [text]=\"isRestoring ? 'Restoring...' : 'Restore this Version'\"\n        [disabled]=\"isRestoring\" (clicked)=\"restore.emit()\"></cqa-button>\n    </div>\n  </div>\n\n  <!-- ========== Summary bar ========== -->\n  <!-- <div *ngIf=\"stepsSummary\" class=\"cqa-nvh-detail-summary-bar\">\n    <span *ngIf=\"stepsSummary.added\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--added\">+{{ stepsSummary.added }} added</span>\n    <span *ngIf=\"stepsSummary.modified\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--modified\">{{ stepsSummary.modified }} modified</span>\n    <span *ngIf=\"stepsSummary.removed\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--removed\">{{ stepsSummary.removed }} removed</span>\n    <span *ngIf=\"stepsSummary.unchanged\" class=\"cqa-nvh-summary-chip cqa-nvh-summary-chip--unchanged\">{{ stepsSummary.unchanged }} unchanged</span>\n  </div> -->\n\n  <!-- ========== Test Case Changes ========== -->\n  <ng-container *ngIf=\"hasTestCaseChanges\">\n    <div class=\"cqa-nvh-section-header\">\n      <span class=\"cqa-nvh-section-label\">Test Case Changes</span>\n      <cqa-badge [label]=\"'' + testCaseChangedFields.length\" size=\"small\" variant=\"info\"\n        backgroundColor=\"#EFF4FF\" textColor=\"#3f43ee\" borderColor=\"#C7D7FE\"></cqa-badge>\n    </div>\n\n    <div class=\"cqa-nvh-changes-list\">\n      <div *ngFor=\"let field of testCaseChangedFields; trackBy: trackByField\" class=\"cqa-nvh-change-card\">\n        <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n        <ng-container\n          *ngTemplateOutlet=\"beforeAfterBlock; context: {\n            oldValue: selectedVersion.testCase.old?.[field],\n            newValue: selectedVersion.testCase.new?.[field],\n            field: field,\n            oldStepData: selectedVersion.testCase.old,\n            newStepData: selectedVersion.testCase.new\n          }\">\n        </ng-container>\n      </div>\n    </div>\n  </ng-container>\n\n  <!-- ========== Steps Added ========== -->\n  <ng-container *ngIf=\"stepsAdded.length\">\n    <div class=\"cqa-nvh-section-header\">\n      <span class=\"cqa-nvh-section-label\">Steps Added</span>\n      <cqa-badge [label]=\"'' + stepsAdded.length\" size=\"small\" backgroundColor=\"#ECFDF3\"\n        textColor=\"#027A48\" borderColor=\"#A7F3D0\"></cqa-badge>\n    </div>\n\n    <div class=\"cqa-nvh-changes-list\">\n      <div *ngFor=\"let step of stepsAdded; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--added\">\n        <div class=\"cqa-nvh-step-header\">\n          <cqa-badge label=\"Added\" size=\"small\" backgroundColor=\"#ECFDF3\" textColor=\"#027A48\"\n            borderColor=\"#A7F3D0\"></cqa-badge>\n          <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n          <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n\n  <!-- ========== Steps Deleted ========== -->\n  <ng-container *ngIf=\"stepsDeleted.length\">\n    <div class=\"cqa-nvh-section-header\">\n      <span class=\"cqa-nvh-section-label\">Steps Removed</span>\n      <cqa-badge [label]=\"'' + stepsDeleted.length\" size=\"small\" backgroundColor=\"#FEF3F2\"\n        textColor=\"#B42318\" borderColor=\"#FECDCA\"></cqa-badge>\n    </div>\n\n    <div class=\"cqa-nvh-changes-list\">\n      <div *ngFor=\"let step of stepsDeleted; trackBy: trackByStepId\" class=\"cqa-nvh-change-card cqa-nvh-change-card--removed\">\n        <div class=\"cqa-nvh-step-header\">\n          <cqa-badge label=\"Removed\" size=\"small\" backgroundColor=\"#FEF3F2\" textColor=\"#B42318\"\n            borderColor=\"#FECDCA\"></cqa-badge>\n          <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n          <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n        </div>\n      </div>\n    </div>\n  </ng-container>\n\n  <!-- ========== Steps Updated ========== -->\n  <ng-container *ngIf=\"stepsUpdated.length\">\n    <div class=\"cqa-nvh-section-header\">\n      <span class=\"cqa-nvh-section-label\">Steps Modified</span>\n      <cqa-badge [label]=\"'' + stepsUpdated.length\" size=\"small\" backgroundColor=\"#FFFAEB\"\n        textColor=\"#B54708\" borderColor=\"#FEDF89\"></cqa-badge>\n    </div>\n\n    <div class=\"cqa-nvh-changes-list\">\n      <div *ngFor=\"let step of stepsUpdated; trackBy: trackByStepId\" class=\"cqa-nvh-change-card\">\n        <!-- Step header with category badge -->\n        <div class=\"cqa-nvh-step-header\">\n          <cqa-badge [label]=\"getCategoryLabelFn(step.category)\" size=\"small\" backgroundColor=\"#EDF1F3\"\n            textColor=\"#636A71\" borderColor=\"#DBDEE1\"></cqa-badge>\n          <span class=\"cqa-nvh-step-prefix\">{{ getStepPrefixFn(step) }}</span>\n          <span class=\"cqa-nvh-step-action cqa-action-format\" [innerHTML]=\"getStepActionHtmlFn(step)\"></span>\n        </div>\n\n        <!-- Changed fields with before/after -->\n        <ng-container *ngIf=\"visibleChangedFields(step).length; else internalOnlyChanges\">\n          <div *ngFor=\"let field of visibleChangedFields(step); trackBy: trackByField\" class=\"cqa-nvh-field-diff\">\n            <div class=\"cqa-nvh-change-field-label\">{{ getFieldLabelFn(field) }}</div>\n            <ng-container\n              *ngTemplateOutlet=\"beforeAfterBlock; context: {\n                oldValue: step.old?.[field],\n                newValue: step.new?.[field],\n                field: field,\n                oldStepData: step.old,\n                newStepData: step.new\n              }\">\n            </ng-container>\n          </div>\n        </ng-container>\n        <ng-template #internalOnlyChanges>\n          <div class=\"cqa-nvh-internal-change-msg\">\n            Some internal properties of this step were changed.\n          </div>\n        </ng-template>\n      </div>\n    </div>\n  </ng-container>\n\n  <!-- ========== Empty state ========== -->\n  <div *ngIf=\"!hasAnyChanges\" class=\"cqa-nvh-detail-empty\">\n    <cqa-empty-state title=\"No changes\" description=\"No changes recorded for this version.\"></cqa-empty-state>\n  </div>\n</ng-container>\n\n<ng-template #noSelection>\n  <div class=\"cqa-nvh-detail-no-selection\">\n    Select a version to view details.\n  </div>\n</ng-template>\n\n<!-- ===== Reusable before/after block ===== -->\n<ng-template #beforeAfterBlock let-oldValue=\"oldValue\" let-newValue=\"newValue\" let-field=\"field\" let-oldStepData=\"oldStepData\" let-newStepData=\"newStepData\">\n  <!-- 1. Custom table via parseFieldAsTableFn (e.g. testDataList) -->\n  <ng-container *ngIf=\"parseFieldAsTableFn(field, oldValue, oldStepData) || parseFieldAsTableFn(field, newValue, newStepData); else nativeObjectCheck\">\n    <ng-container\n      *ngTemplateOutlet=\"objTable; context: {\n        oldObj: parseFieldAsTableFn(field, oldValue, oldStepData),\n        newObj: parseFieldAsTableFn(field, newValue, newStepData)\n      }\">\n    </ng-container>\n  </ng-container>\n\n  <!-- 2. Native object / JSON string -->\n  <ng-template #nativeObjectCheck>\n    <ng-container *ngIf=\"parseObjectValue(oldValue) || parseObjectValue(newValue); else simpleValue\">\n      <ng-container\n        *ngTemplateOutlet=\"objTable; context: {\n          oldObj: parseObjectValue(oldValue),\n          newObj: parseObjectValue(newValue)\n        }\">\n      </ng-container>\n    </ng-container>\n  </ng-template>\n\n  <!-- 3. Primitive fallback -->\n  <ng-template #simpleValue>\n    <ng-container *ngIf=\"getInlineDiffFn(oldValue, newValue, field, oldStepData, newStepData) as diff; else plainBeforeAfter\">\n      <!-- Inline diff view: no --before/--after color modifiers; diff HTML owns all token colors -->\n      <div class=\"cqa-nvh-before-after\">\n        <div class=\"cqa-nvh-value-row\">\n          <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n            borderColor=\"#FFE2E2\"></cqa-badge>\n          <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n            <cqa-badge [label]=\"badge.label\" size=\"small\"\n              [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n              [borderColor]=\"badge.borderColor\"></cqa-badge>\n          </ng-container>\n          <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.oldHtml\"></span>\n        </div>\n        <div class=\"cqa-nvh-value-row\">\n          <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n            borderColor=\"#D0FAE5\"></cqa-badge>\n          <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n            <cqa-badge [label]=\"badge.label\" size=\"small\"\n              [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n              [borderColor]=\"badge.borderColor\"></cqa-badge>\n          </ng-container>\n          <span class=\"cqa-nvh-value-text\" [innerHTML]=\"diff.newHtml\"></span>\n        </div>\n      </div>\n    </ng-container>\n\n    <!-- Plain text fallback (no diff) -->\n    <ng-template #plainBeforeAfter>\n      <div class=\"cqa-nvh-before-after\">\n        <div class=\"cqa-nvh-value-row cqa-nvh-value-row--before\">\n          <cqa-badge label=\"Before\" size=\"small\" backgroundColor=\"#FEF2F2\" textColor=\"#FB2C36\"\n            borderColor=\"#FFE2E2\"></cqa-badge>\n          <ng-container *ngIf=\"getValueBadgeConfigFn(oldValue, field, oldStepData) as badge\">\n            <cqa-badge [label]=\"badge.label\" size=\"small\"\n              [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n              [borderColor]=\"badge.borderColor\"></cqa-badge>\n          </ng-container>\n          <span class=\"cqa-nvh-value-text\" [innerHTML]=\"formatDisplayValueFn(oldValue, field, oldStepData)\"></span>\n        </div>\n        <div class=\"cqa-nvh-value-row cqa-nvh-value-row--after\">\n          <cqa-badge label=\"After\" size=\"small\" backgroundColor=\"#ECFDF5\" textColor=\"#009966\"\n            borderColor=\"#D0FAE5\"></cqa-badge>\n          <ng-container *ngIf=\"getValueBadgeConfigFn(newValue, field, newStepData) as badge\">\n            <cqa-badge [label]=\"badge.label\" size=\"small\"\n              [backgroundColor]=\"badge.backgroundColor\" [textColor]=\"badge.textColor\"\n              [borderColor]=\"badge.borderColor\"></cqa-badge>\n          </ng-container>\n          <span class=\"cqa-nvh-value-text\" [innerHTML]=\"formatDisplayValueFn(newValue, field, newStepData)\"></span>\n        </div>\n      </div>\n    </ng-template>\n  </ng-template>\n</ng-template>\n\n<!-- ===== Shared object table ===== -->\n<ng-template #objTable let-oldObj=\"oldObj\" let-newObj=\"newObj\">\n  <div class=\"cqa-nvh-obj-table\" *ngIf=\"objectKeys(oldObj, newObj).length > 0\">\n    <div class=\"cqa-nvh-obj-header\">\n      <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-key-header\"></span>\n      <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--before\">Before</span>\n      <span class=\"cqa-nvh-obj-col-label cqa-nvh-obj-col-label--after\">After</span>\n    </div>\n    <div\n      *ngFor=\"let key of objectKeys(oldObj, newObj); trackBy: trackByKey\"\n      class=\"cqa-nvh-obj-row\"\n      [class.cqa-nvh-obj-row--changed]=\"formatPrimitiveValue(oldObj?.[key]) !== formatPrimitiveValue(newObj?.[key])\">\n      <span class=\"cqa-nvh-obj-key\">{{ getFieldLabelFn(key) }}</span>\n      <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--before\">\n        {{ formatPrimitiveValue(oldObj?.[key]) }}\n      </span>\n      <span class=\"cqa-nvh-obj-val cqa-nvh-obj-val--after\">\n        {{ formatPrimitiveValue(newObj?.[key]) }}\n      </span>\n    </div>\n  </div>\n</ng-template>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\n\nexport interface StepperStep {\n  label: string;\n  value?: string;\n  disabled?: boolean;\n  icon?: string;\n}\n\nexport type StepperStatus = 'upcoming' | 'active' | 'completed';\n\n@Component({\n  selector: 'cqa-stepper',\n  templateUrl: './stepper.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root' },\n})\nexport class StepperComponent implements OnChanges {\n  @Input() steps: StepperStep[] = [];\n  @Input() currentStep = 0;\n  @Input() linear = true;\n\n  @Output() stepChange = new EventEmitter<number>();\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['currentStep']) {\n      this.currentStep = Math.max(0, Math.min(this.currentStep, this.steps.length - 1));\n    }\n  }\n\n  getStatus(index: number): StepperStatus {\n    if (index < this.currentStep) return 'completed';\n    if (index === this.currentStep) return 'active';\n    return 'upcoming';\n  }\n\n  getCircleStyles(index: number): Record<string, string> {\n    const base: Record<string, string> = {\n      width: '32px',\n      height: '32px',\n      'border-radius': '9999px',\n      display: 'flex',\n      'align-items': 'center',\n      'justify-content': 'center',\n      'font-family': \"'Inter', sans-serif\",\n      'font-size': '12px',\n      transition: 'all 0.2s ease',\n    };\n\n    const status = this.getStatus(index);\n\n    if (status === 'active') {\n      return {\n        ...base,\n        background: '#3f43ee',\n        color: '#fff',\n        'font-weight': '500',\n        border: 'none',\n        'box-shadow': '0 0 0 0 rgba(63, 67, 238, 0.2)',\n      };\n    }\n\n    if (status === 'completed') {\n      return {\n        ...base,\n        background: '#3f43ee',\n        color: '#fff',\n        'font-weight': '400',\n        border: 'none',\n      };\n    }\n\n    return {\n      ...base,\n      background: '#fff',\n      color: '#d1d5db',\n      'font-weight': '400',\n      border: '2px solid #e5e7eb',\n    };\n  }\n\n  getLabelStyles(index: number): Record<string, string> {\n    const base: Record<string, string> = {\n      'font-family': \"'Inter', sans-serif\",\n      'font-size': '12px',\n      'line-height': '16px',\n      'white-space': 'nowrap',\n    };\n\n    const status = this.getStatus(index);\n\n    if (status === 'active' || status === 'completed') {\n      return { ...base, color: '#101828', 'font-weight': '500' };\n    }\n\n    return { ...base, color: '#6b7280', 'font-weight': '400' };\n  }\n\n  onStepClick(index: number): void {\n    const step = this.steps[index];\n    if (step?.disabled) return;\n    if (this.linear && index > this.currentStep) return;\n    this.stepChange.emit(index);\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n}\n","<div class=\"cqa-ui-root\">\n  <div class=\"cqa-relative cqa-flex cqa-items-start cqa-justify-between cqa-w-full\">\n\n    <!-- Horizontal connector line -->\n    <div class=\"cqa-absolute cqa-left-0 cqa-right-0 cqa-z-0\"\n         style=\"top: 16px; height: 2px; background: #f3f4f6;\"></div>\n\n    <!-- Steps -->\n    <div\n      *ngFor=\"let step of steps; let i = index; trackBy: trackByIndex\"\n      class=\"cqa-relative cqa-z-[1] cqa-flex cqa-flex-col cqa-items-center cqa-shrink-0\"\n      style=\"gap: 8px; padding: 0 8px; background: #fff;\"\n      [ngClass]=\"{\n        'cqa-cursor-pointer': !step.disabled && (!linear || i <= currentStep),\n        'cqa-cursor-default': step.disabled || (linear && i > currentStep)\n      }\"\n      (click)=\"onStepClick(i)\"\n      [attr.aria-current]=\"getStatus(i) === 'active' ? 'step' : null\"\n      role=\"listitem\"\n    >\n      <!-- Circle -->\n      <div\n        class=\"cqa-flex cqa-items-center cqa-justify-center\"\n        [ngStyle]=\"getCircleStyles(i)\"\n      >\n        <mat-icon\n          *ngIf=\"getStatus(i) === 'completed'\"\n          style=\"font-size: 16px; width: 16px; height: 16px; color: inherit;\"\n        >check</mat-icon>\n        <span *ngIf=\"getStatus(i) !== 'completed'\">{{ i + 1 }}</span>\n      </div>\n\n      <!-- Label -->\n      <span [ngStyle]=\"getLabelStyles(i)\">{{ step.label }}</span>\n    </div>\n\n  </div>\n</div>\n","import { Component, EventEmitter, forwardRef, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormControl,\n  FormGroup,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\nimport { DynamicSelectFieldConfig, SelectOption } from '../dynamic-select/dynamic-select-field.component';\nimport { RadioCardOption } from '../radio-card-group/radio-card-option.model';\n\nexport type ViewportSelectionMode = 'desktop' | 'laptop' | 'mobile' | 'custom';\n\nexport interface ViewportSelectorValue {\n  mode: ViewportSelectionMode;\n  device?: string | null;\n  customValue?: string | null;\n}\n\nconst DEFAULT_DESKTOP_MODE: ViewportSelectionMode = 'desktop';\n\n@Component({\n  selector: 'cqa-viewport-selector',\n  templateUrl: './viewport-selector.component.html',\n  styleUrls: [],\n  host: { class: 'cqa-ui-root cqa-block' },\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ViewportSelectorComponent),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => ViewportSelectorComponent),\n      multi: true,\n    },\n  ],\n})\nexport class ViewportSelectorComponent implements ControlValueAccessor, Validator, OnChanges {\n  @Input() label = 'Viewport';\n  @Input() required = false;\n  @Input() disabled = false;\n  @Input() desktopLabel = 'Desktop';\n  @Input() laptopLabel = 'Laptop';\n  @Input() mobileLabel = 'Mobile';\n  @Input() customLabel = 'Custom';\n\n  @Input() desktopDeviceLabel = 'Resolution';\n  @Input() desktopDevicePlaceholder = 'Select resolution';\n  @Input() desktopDeviceOptions: SelectOption[] = [];\n\n  @Input() laptopDeviceLabel = 'Resolution';\n  @Input() laptopDevicePlaceholder = 'Select resolution';\n  @Input() laptopDeviceOptions: SelectOption[] = [];\n\n  @Input() mobileDeviceLabel = 'Device';\n  @Input() mobileDevicePlaceholder = 'Select device';\n  @Input() mobileDeviceOptions: SelectOption[] = [];\n\n  @Input() customValueLabel = 'Custom viewport';\n  @Input() customValuePlaceholder = 'Enter viewport value';\n  @Input() customValueHint = 'Press Enter to add a viewport value like 1280x720';\n\n  @Output() valueChange = new EventEmitter<ViewportSelectorValue>();\n\n  readonly modeOptions: RadioCardOption[] = [\n    { value: 'desktop', label: 'Desktop', icon: 'desktop_windows' },\n    { value: 'laptop', label: 'Laptop', icon: 'laptop_windows' },\n    { value: 'mobile', label: 'Mobile', icon: 'smartphone' },\n    { value: 'custom', label: 'Custom', icon: 'tune' },\n  ];\n\n  readonly desktopDeviceForm: FormGroup = new FormGroup({\n    device: new FormControl(null),\n  });\n\n  readonly laptopDeviceForm: FormGroup = new FormGroup({\n    device: new FormControl(null),\n  });\n\n  readonly mobileDeviceForm: FormGroup = new FormGroup({\n    device: new FormControl(null),\n  });\n\n  desktopDeviceConfig: DynamicSelectFieldConfig = {\n    key: 'device',\n    label: '',\n    placeholder: 'Select resolution',\n    disabled: false,\n    multiple: false,\n    searchable: true,\n    serverSearch: false,\n    options: [],\n  };\n\n  laptopDeviceConfig: DynamicSelectFieldConfig = {\n    key: 'device',\n    label: '',\n    placeholder: 'Select resolution',\n    disabled: false,\n    multiple: false,\n    searchable: true,\n    serverSearch: false,\n    options: [],\n  };\n\n  mobileDeviceConfig: DynamicSelectFieldConfig = {\n    key: 'device',\n    label: '',\n    placeholder: 'Select device',\n    disabled: false,\n    multiple: false,\n    searchable: true,\n    serverSearch: false,\n    options: [],\n  };\n\n  customInputValue = '';\n  internalValue: ViewportSelectorValue = {\n    mode: DEFAULT_DESKTOP_MODE,\n    device: null,\n    customValue: null,\n  };\n\n  private onChange: (value: ViewportSelectorValue) => void = () => {};\n  private onTouched: () => void = () => {};\n  private onValidatorChange: () => void = () => {};\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['desktopDeviceOptions']) {\n      this.desktopDeviceConfig = { ...this.desktopDeviceConfig, options: this.desktopDeviceOptions || [] };\n    }\n    if (changes['laptopDeviceOptions']) {\n      this.laptopDeviceConfig = { ...this.laptopDeviceConfig, options: this.laptopDeviceOptions || [] };\n    }\n    if (changes['mobileDeviceOptions']) {\n      this.mobileDeviceConfig = { ...this.mobileDeviceConfig, options: this.mobileDeviceOptions || [] };\n    }\n\n    if (changes['desktopLabel'] || changes['laptopLabel'] || changes['mobileLabel'] || changes['customLabel']) {\n      this.modeOptions[0].label = this.desktopLabel;\n      this.modeOptions[1].label = this.laptopLabel;\n      this.modeOptions[2].label = this.mobileLabel;\n      this.modeOptions[3].label = this.customLabel;\n    }\n\n    if (changes['desktopDevicePlaceholder']) {\n      this.desktopDeviceConfig = { ...this.desktopDeviceConfig, placeholder: this.desktopDevicePlaceholder };\n    }\n    if (changes['laptopDevicePlaceholder']) {\n      this.laptopDeviceConfig = { ...this.laptopDeviceConfig, placeholder: this.laptopDevicePlaceholder };\n    }\n    if (changes['mobileDevicePlaceholder']) {\n      this.mobileDeviceConfig = { ...this.mobileDeviceConfig, placeholder: this.mobileDevicePlaceholder };\n    }\n\n    if (changes['disabled']) {\n      this.setDisabledState(this.disabled);\n    }\n  }\n\n  writeValue(value: ViewportSelectorValue | null | undefined): void {\n    this.internalValue = this.normalizeValue(value);\n    const device = this.internalValue.device ?? null;\n    const mode = this.internalValue.mode;\n    this.desktopDeviceForm.get('device')?.setValue(mode === 'desktop' ? device : null, { emitEvent: false });\n    this.laptopDeviceForm.get('device')?.setValue(mode === 'laptop' ? device : null, { emitEvent: false });\n    this.mobileDeviceForm.get('device')?.setValue(mode === 'mobile' ? device : null, { emitEvent: false });\n    this.customInputValue = '';\n  }\n\n  registerOnChange(fn: (value: ViewportSelectorValue) => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n    const config = { disabled: isDisabled };\n    this.desktopDeviceConfig = { ...this.desktopDeviceConfig, ...config };\n    this.laptopDeviceConfig = { ...this.laptopDeviceConfig, ...config };\n    this.mobileDeviceConfig = { ...this.mobileDeviceConfig, ...config };\n\n    if (isDisabled) {\n      this.desktopDeviceForm.disable({ emitEvent: false });\n      this.laptopDeviceForm.disable({ emitEvent: false });\n      this.mobileDeviceForm.disable({ emitEvent: false });\n    } else {\n      this.desktopDeviceForm.enable({ emitEvent: false });\n      this.laptopDeviceForm.enable({ emitEvent: false });\n      this.mobileDeviceForm.enable({ emitEvent: false });\n    }\n  }\n\n  validate(_control: AbstractControl): ValidationErrors | null {\n    if (this.internalValue.mode === 'mobile' && !this.internalValue.device) {\n      return { viewportSelection: { requiredDevice: true } };\n    }\n\n    if (this.internalValue.mode === 'custom' && !this.internalValue.customValue) {\n      return { viewportSelection: { requiredCustomValue: true } };\n    }\n\n    return null;\n  }\n\n  get isDesktopMode(): boolean {\n    return this.internalValue.mode === 'desktop';\n  }\n\n  get isLaptopMode(): boolean {\n    return this.internalValue.mode === 'laptop';\n  }\n\n  get isMobileMode(): boolean {\n    return this.internalValue.mode === 'mobile';\n  }\n\n  get isCustomMode(): boolean {\n    return this.internalValue.mode === 'custom';\n  }\n\n  onModeChange(mode: string | null): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const nextMode = this.isValidMode(mode) ? mode : DEFAULT_DESKTOP_MODE;\n    const currentDevice = this.internalValue.device;\n    this.internalValue = {\n      mode: nextMode,\n      device: (nextMode === 'desktop' || nextMode === 'laptop' || nextMode === 'mobile') ? (currentDevice ?? null) : null,\n      customValue: nextMode === 'custom' ? (this.internalValue.customValue ?? null) : null,\n    };\n\n    // Reset device forms; only populate the matching mode's form\n    const deviceValue = this.internalValue.device ?? null;\n    this.desktopDeviceForm.get('device')?.setValue(nextMode === 'desktop' ? deviceValue : null, { emitEvent: false });\n    this.laptopDeviceForm.get('device')?.setValue(nextMode === 'laptop' ? deviceValue : null, { emitEvent: false });\n    this.mobileDeviceForm.get('device')?.setValue(nextMode === 'mobile' ? deviceValue : null, { emitEvent: false });\n    this.emitValue();\n  }\n\n  onDesktopSelectionChange(selection: { value: any }): void {\n    if (this.disabled) return;\n    this.internalValue = {\n      ...this.internalValue,\n      mode: 'desktop',\n      device: selection?.value != null && selection.value !== '' ? String(selection.value) : null,\n      customValue: null,\n    };\n    this.emitValue();\n  }\n\n  onLaptopSelectionChange(selection: { value: any }): void {\n    if (this.disabled) return;\n    this.internalValue = {\n      ...this.internalValue,\n      mode: 'laptop',\n      device: selection?.value != null && selection.value !== '' ? String(selection.value) : null,\n      customValue: null,\n    };\n    this.emitValue();\n  }\n\n  onMobileSelectionChange(selection: { value: any }): void {\n    if (this.disabled) {\n      return;\n    }\n\n    this.internalValue = {\n      ...this.internalValue,\n      mode: 'mobile',\n      device: selection?.value != null && selection.value !== '' ? String(selection.value) : null,\n      customValue: null,\n    };\n    this.emitValue();\n  }\n\n  addCustomValue(rawValue?: string): void {\n    if (this.disabled) {\n      return;\n    }\n\n    const nextValue = this.normalizeCustomValue(rawValue ?? this.customInputValue);\n    if (!nextValue) {\n      return;\n    }\n\n    this.internalValue = {\n      ...this.internalValue,\n      mode: 'custom',\n      device: null,\n      customValue: nextValue,\n    };\n    this.customInputValue = '';\n    this.emitValue();\n  }\n\n  clearCustomValue(): void {\n    if (this.disabled) {\n      return;\n    }\n\n    this.internalValue = {\n      ...this.internalValue,\n      customValue: null,\n    };\n    this.emitValue();\n  }\n\n  private emitValue(): void {\n    const normalized = this.normalizeValue(this.internalValue);\n    this.internalValue = normalized;\n    this.onTouched();\n    this.onChange(normalized);\n    this.onValidatorChange();\n    this.valueChange.emit(normalized);\n  }\n\n  private normalizeValue(value: ViewportSelectorValue | null | undefined): ViewportSelectorValue {\n    const mode = this.isValidMode(value?.mode) ? value!.mode : DEFAULT_DESKTOP_MODE;\n    const device = value?.device != null && String(value.device).trim() !== '' ? String(value.device).trim() : null;\n    const customValue = this.normalizeCustomValue(value?.customValue ?? null);\n\n    return {\n      mode,\n      device: (mode === 'desktop' || mode === 'laptop' || mode === 'mobile') ? device : null,\n      customValue: mode === 'custom' ? customValue : null,\n    };\n  }\n\n  private normalizeCustomValue(value: string | null): string | null {\n    if (value == null) {\n      return null;\n    }\n\n    const normalized = String(value).trim();\n    return normalized ? normalized : null;\n  }\n\n  private isValidMode(mode: string | null | undefined): mode is ViewportSelectionMode {\n    return mode === 'desktop' || mode === 'laptop' || mode === 'mobile' || mode === 'custom';\n  }\n}\n","<div id=\"cqa-ui-root\" [style.display]=\"'block'\" [style.width]=\"'100%'\">\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-w-full\">\n    <label\n      *ngIf=\"label\"\n      class=\"cqa-text-sm cqa-font-medium cqa-text-[#374151]\">\n      {{ label }}\n      <span *ngIf=\"required\" class=\"cqa-text-[#EF4444]\">*</span>\n    </label>\n\n    <cqa-radio-card-group\n      [options]=\"modeOptions\"\n      [disabled]=\"disabled\"\n      [ngModel]=\"internalValue.mode\"\n      (ngModelChange)=\"onModeChange($event)\">\n    </cqa-radio-card-group>\n\n    <div *ngIf=\"isDesktopMode\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-w-full\">\n      <span class=\"cqa-text-xs cqa-font-medium cqa-text-[#6B7280]\">{{ desktopDeviceLabel }}</span>\n      <cqa-dynamic-select\n        class=\"cqa-w-full\"\n        [form]=\"desktopDeviceForm\"\n        [config]=\"desktopDeviceConfig\"\n        (selectionChange)=\"onDesktopSelectionChange($event)\">\n      </cqa-dynamic-select>\n    </div>\n\n    <div *ngIf=\"isLaptopMode\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-w-full\">\n      <span class=\"cqa-text-xs cqa-font-medium cqa-text-[#6B7280]\">{{ laptopDeviceLabel }}</span>\n      <cqa-dynamic-select\n        class=\"cqa-w-full\"\n        [form]=\"laptopDeviceForm\"\n        [config]=\"laptopDeviceConfig\"\n        (selectionChange)=\"onLaptopSelectionChange($event)\">\n      </cqa-dynamic-select>\n    </div>\n\n    <div *ngIf=\"isMobileMode\" class=\"cqa-flex cqa-flex-col cqa-gap-1.5 cqa-w-full\">\n      <span class=\"cqa-text-xs cqa-font-medium cqa-text-[#6B7280]\">{{ mobileDeviceLabel }}</span>\n      <cqa-dynamic-select\n        class=\"cqa-w-full\"\n        [form]=\"mobileDeviceForm\"\n        [config]=\"mobileDeviceConfig\"\n        (selectionChange)=\"onMobileSelectionChange($event)\">\n      </cqa-dynamic-select>\n    </div>\n\n    <div *ngIf=\"isCustomMode\" class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-w-full\">\n      <span class=\"cqa-text-xs cqa-font-medium cqa-text-[#6B7280]\">{{ customValueLabel }}</span>\n\n      <div class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-w-full\">\n        <cqa-custom-input\n          class=\"cqa-flex-1\"\n          [fullWidth]=\"true\"\n          [placeholder]=\"customValuePlaceholder\"\n          [value]=\"customInputValue\"\n          [disabled]=\"disabled\"\n          (valueChange)=\"customInputValue = $event\"\n          (enterPressed)=\"addCustomValue($event)\">\n        </cqa-custom-input>\n\n        <button\n          type=\"button\"\n          class=\"cqa-h-[42px] cqa-rounded-md cqa-border cqa-border-solid cqa-border-[#D1D5DB] cqa-bg-white cqa-px-3 cqa-text-sm cqa-font-medium cqa-text-[#111827] hover:cqa-bg-[#F9FAFB] disabled:cqa-cursor-not-allowed disabled:cqa-opacity-60\"\n          [disabled]=\"disabled || !customInputValue.trim()\"\n          (click)=\"addCustomValue()\">\n          Add\n        </button>\n      </div>\n\n      <span class=\"cqa-text-xs cqa-text-[#6B7280]\">{{ customValueHint }}</span>\n\n      <div *ngIf=\"internalValue.customValue\" class=\"cqa-flex cqa-flex-wrap cqa-gap-2\">\n        <span class=\"cqa-inline-flex cqa-items-center cqa-gap-2 cqa-rounded-full cqa-bg-[#EEF2FF] cqa-px-3 cqa-py-1 cqa-text-sm cqa-font-medium cqa-text-[#3730A3]\">\n          {{ internalValue.customValue }}\n          <button\n            type=\"button\"\n            class=\"cqa-inline-flex cqa-h-4 cqa-w-4 cqa-items-center cqa-justify-center cqa-rounded-full cqa-text-xs cqa-text-[#3730A3] hover:cqa-bg-[#E0E7FF]\"\n            [disabled]=\"disabled\"\n            (click)=\"clearCustomValue()\">\n            x\n          </button>\n        </span>\n      </div>\n    </div>\n  </div>\n</div>\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n} from '@angular/core';\nimport { MatRadioChange } from '@angular/material/radio';\nimport { ButtonVariant } from '../button/button.component';\n\nexport type SubStepsOptionVariant = 'default' | 'danger';\n\nexport interface SubStepsConfirmationOption {\n  /** Unique identifier for the option (emitted via `selectionChange` / `confirm`). */\n  value: string;\n  /** Bold title shown on the card. */\n  title: string;\n  /** Paragraph shown under the title. */\n  description: string;\n  /** `danger` renders the title in red to indicate a destructive choice. */\n  variant?: SubStepsOptionVariant;\n  /** Label for the primary CTA when this option is selected. */\n  buttonLabel: string;\n  /** Variant for the primary CTA when this option is selected. Defaults to `filled`. */\n  buttonVariant?: ButtonVariant;\n}\n\n/** Single row rendered in the optional preview list above the radio group. */\nexport interface SubStepsConfirmationPreviewItem {\n  /** Bold primary text (e.g. action name). */\n  primary: string;\n  /** Optional secondary text appended after an em-dash (e.g. element label). */\n  secondary?: string;\n}\n\n/**\n * Full configuration payload for the sub-steps confirmation dialog. Pass a new\n * object reference whenever the content should change — the component uses\n * `OnPush` change detection and only reacts to reference changes.\n */\nexport interface SubStepsConfirmationDialogConfig {\n  title?: string;\n  description?: string;\n  /** Optional subtitle shown under the title (e.g. action type / parent context). */\n  subtitle?: string;\n  options: SubStepsConfirmationOption[];\n  selectedValue?: string;\n  cancelLabel?: string;\n  disableBackdropClose?: boolean;\n  /** Hide the top-right close (X) button. */\n  hideCloseButton?: boolean;\n  /** Hide the Cancel button in the footer. CTA expands to full width when true. */\n  hideCancel?: boolean;\n  /** Amber warnings list rendered above the radio group. */\n  warnings?: string[];\n  /** Optional numbered preview list rendered between description and radio group. */\n  previewItems?: SubStepsConfirmationPreviewItem[];\n  /** If >0, render a \"+ N more\" row after the preview list. */\n  previewOverflowCount?: number;\n  /**\n   * If >0, show an `M:SS` countdown in the header. `timeoutExpired` fires once\n   * when the countdown reaches 0. Countdown restarts whenever `isOpen` flips\n   * to true or a new config reference is passed with a different `timeoutSeconds`.\n   */\n  timeoutSeconds?: number;\n}\n\n/**\n * Confirmation dialog shown before editing an AI-Agent step whose execution has\n * already generated sub-steps (CON-926). Also used by CON-1166 to review\n * AI-generated steps before persisting.\n *\n * The caller supplies the whole payload via the `config` input (one object, one\n * reference change = one re-render). `isOpen` stays separate so open/close\n * transitions don't force callers to rebuild the payload.\n */\n@Component({\n  selector: 'cqa-sub-steps-confirmation-dialog',\n  templateUrl: './sub-steps-confirmation-dialog.component.html',\n  styleUrls: [],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SubStepsConfirmationDialogComponent implements OnChanges, OnDestroy {\n  @Input() isOpen = false;\n  @Input() config: SubStepsConfirmationDialogConfig = { options: [] };\n\n  @Output() selectionChange = new EventEmitter<string>();\n  @Output() confirm = new EventEmitter<string>();\n  @Output() closeModal = new EventEmitter<void>();\n  @Output() timeoutExpired = new EventEmitter<void>();\n\n  /** Local selection state. Seeded from `config.selectedValue` and user-driven thereafter. */\n  selectedValue?: string;\n  remainingSeconds = 0;\n\n  private _tickIntervalId: ReturnType<typeof setInterval> | null = null;\n  private _timeoutEmitted = false;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['config'] || changes['isOpen']) {\n      const options = this.config?.options ?? [];\n      const incoming = this.config?.selectedValue;\n      const stillValid = options.some(o => o.value === this.selectedValue);\n      if (incoming != null && options.some(o => o.value === incoming)) {\n        this.selectedValue = incoming;\n      } else if (!stillValid) {\n        this.selectedValue = options.length ? options[0].value : undefined;\n      }\n    }\n\n    if (changes['isOpen'] || changes['config']) {\n      const timeoutSeconds = this.config?.timeoutSeconds;\n      if (this.isOpen && typeof timeoutSeconds === 'number' && timeoutSeconds > 0) {\n        const prevTimeout = changes['config']\n          ? (changes['config'].previousValue as SubStepsConfirmationDialogConfig | undefined)?.timeoutSeconds\n          : undefined;\n        const opening = !!changes['isOpen'] && this.isOpen;\n        if (opening || timeoutSeconds !== prevTimeout || this._tickIntervalId == null) {\n          this._startCountdown(timeoutSeconds);\n        }\n      } else {\n        this._stopCountdown();\n      }\n    }\n  }\n\n  ngOnDestroy(): void {\n    this._stopCountdown();\n  }\n\n  get title(): string { return this.config?.title ?? 'This step has generated sub-steps'; }\n  get description(): string { return this.config?.description ?? ''; }\n  get subtitle(): string | undefined { return this.config?.subtitle; }\n  get options(): SubStepsConfirmationOption[] { return this.config?.options ?? []; }\n  get cancelLabel(): string { return this.config?.cancelLabel ?? 'Cancel'; }\n  get disableBackdropClose(): boolean { return !!this.config?.disableBackdropClose; }\n  get hideCloseButton(): boolean { return !!this.config?.hideCloseButton; }\n  get hideCancel(): boolean { return !!this.config?.hideCancel; }\n  get warnings(): string[] { return this.config?.warnings ?? []; }\n  get previewItems(): SubStepsConfirmationPreviewItem[] { return this.config?.previewItems ?? []; }\n  get previewOverflowCount(): number { return this.config?.previewOverflowCount ?? 0; }\n\n  get currentOption(): SubStepsConfirmationOption | undefined {\n    return this.options.find(o => o.value === this.selectedValue);\n  }\n\n  get showCountdown(): boolean {\n    const t = this.config?.timeoutSeconds;\n    return typeof t === 'number' && t > 0;\n  }\n\n  get countdownLabel(): string {\n    const total = Math.max(0, this.remainingSeconds);\n    const m = Math.floor(total / 60);\n    const s = total % 60;\n    return `${m}:${s.toString().padStart(2, '0')}`;\n  }\n\n  isSelected(option: SubStepsConfirmationOption): boolean {\n    return option.value === this.selectedValue;\n  }\n\n  onSelect(option: SubStepsConfirmationOption): void {\n    if (option.value === this.selectedValue) return;\n    this.selectedValue = option.value;\n    this.selectionChange.emit(option.value);\n  }\n\n  onRadioChange(event: MatRadioChange): void {\n    const option = this.options.find(o => o.value === event.value);\n    if (option) this.onSelect(option);\n  }\n\n  onBackdropClick(event: MouseEvent): void {\n    if (this.disableBackdropClose) return;\n    const target = event.target as HTMLElement;\n    const currentTarget = event.currentTarget as HTMLElement;\n    if (target === currentTarget || target.classList.contains('modal-backdrop')) {\n      this.closeModal.emit();\n    }\n  }\n\n  onClose(): void {\n    this.closeModal.emit();\n  }\n\n  onConfirm(): void {\n    if (!this.selectedValue) return;\n    this.confirm.emit(this.selectedValue);\n  }\n\n  private _startCountdown(seconds: number): void {\n    this._stopCountdown();\n    this.remainingSeconds = seconds;\n    this._timeoutEmitted = false;\n    this._tickIntervalId = setInterval(() => {\n      if (this.remainingSeconds > 0) {\n        this.remainingSeconds--;\n        this.cdr.markForCheck();\n        if (this.remainingSeconds === 0 && !this._timeoutEmitted) {\n          this._timeoutEmitted = true;\n          this.timeoutExpired.emit();\n          this._stopCountdown();\n        }\n      }\n    }, 1000);\n  }\n\n  private _stopCountdown(): void {\n    if (this._tickIntervalId) {\n      clearInterval(this._tickIntervalId);\n      this._tickIntervalId = null;\n    }\n  }\n}\n","<div *ngIf=\"isOpen\" class=\"cqa-ui-root\"\n  style=\"position: fixed; inset: 0; z-index: 9999;\">\n  <div\n    class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n    (click)=\"onBackdropClick($event)\">\n    <div\n      class=\"cqa-rounded-[12px] cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[560px] cqa-overflow-hidden cqa-flex cqa-flex-col cqa-max-h-[85vh] cqa-font-inter\"\n      style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n    <!-- Header -->\n    <div class=\"cqa-flex cqa-items-start cqa-justify-between cqa-px-6 cqa-py-4\" style=\"border-bottom: 1px solid #E5E5E5;\">\n      <div class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-min-w-0\">\n        <h2 class=\"cqa-text-[16px] cqa-font-semibold cqa-text-[#111827] cqa-m-0\">\n          {{ title }}\n        </h2>\n        <span *ngIf=\"subtitle\"\n          class=\"cqa-text-[12px] cqa-text-[#4A5565] cqa-m-0\">\n          {{ subtitle }}\n        </span>\n      </div>\n      <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-shrink-0\">\n        <span *ngIf=\"showCountdown\"\n          class=\"cqa-text-[12px] cqa-font-medium cqa-text-[#4A5565] cqa-rounded cqa-px-2 cqa-py-0.5\"\n          style=\"background: #F3F4F6;\"\n          [title]=\"'Auto-discards when timer reaches 0'\">\n          {{ countdownLabel }}\n        </span>\n        <button *ngIf=\"!hideCloseButton\" type=\"button\"\n          class=\"cqa-flex cqa-items-center cqa-justify-center cqa-h-6 cqa-w-6 cqa-rounded cqa-text-[#4A5565] hover:cqa-text-[#111827] cqa-bg-transparent cqa-border-0 cqa-cursor-pointer\"\n          (click)=\"onClose()\"\n          aria-label=\"Close\">\n          <mat-icon class=\"cqa-h-5 cqa-w-5 cqa-text-[20px] cqa-leading-5\">close</mat-icon>\n        </button>\n      </div>\n    </div>\n\n    <!-- Body -->\n    <div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-px-6 cqa-py-3 cqa-overflow-y-auto\">\n      <p *ngIf=\"description\"\n        class=\"cqa-text-[12px] cqa-text-[#101828] cqa-m-0\">\n        {{ description }}\n      </p>\n\n      <!-- Warnings (amber) -->\n      <div *ngIf=\"warnings?.length\"\n        class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-rounded-[8px] cqa-px-3 cqa-py-2\"\n        style=\"background: #FEF3C7; border: 1px solid #FDE68A;\">\n        <div *ngFor=\"let warn of warnings\"\n          class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-text-[12px] cqa-text-[#92400E]\">\n          <span aria-hidden=\"true\">⚠</span>\n          <span>{{ warn }}</span>\n        </div>\n      </div>\n\n      <!-- Preview list (optional) -->\n      <div *ngIf=\"previewItems?.length\"\n        class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-rounded-[8px] cqa-border cqa-border-solid cqa-border-[#E5E7EB] cqa-px-3 cqa-py-2 cqa-max-h-[100px] cqa-overflow-y-auto\">\n        <div *ngFor=\"let item of previewItems; let i = index\"\n          class=\"cqa-flex cqa-items-baseline cqa-gap-2 cqa-text-[12px] cqa-text-[#101828]\">\n          <span class=\"cqa-text-[#4A5565] cqa-flex-shrink-0\">{{ i + 1 }}.</span>\n          <span class=\"cqa-font-semibold cqa-text-[#111827]\">{{ item.primary }}</span>\n          <span *ngIf=\"item.secondary\" class=\"cqa-text-[#4A5565]\">—&nbsp;&nbsp;{{ item.secondary }}</span>\n        </div>\n        <div *ngIf=\"previewOverflowCount > 0\"\n          class=\"cqa-text-[12px] cqa-text-[#4A5565] cqa-italic cqa-mt-1\">\n          + {{ previewOverflowCount }} more step<span *ngIf=\"previewOverflowCount !== 1\">s</span>\n        </div>\n      </div>\n\n      <mat-radio-group\n        class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-radio-group\"\n        [value]=\"selectedValue\"\n        (change)=\"onRadioChange($event)\">\n        <label\n          *ngFor=\"let option of options\"\n          class=\"cqa-radio-card-option qqa-m-0 cqa-flex cqa-items-start cqa-gap-1 cqa-cursor-pointer cqa-rounded-[10px] cqa-border cqa-border-solid cqa-p-4 cqa-transition-colors\"\n          [ngClass]=\"isSelected(option)\n            ? 'cqa-border-[#B1B2F8] cqa-bg-[#D8D9FC4D]'\n            : 'cqa-border-[#E5E7EB] cqa-bg-white hover:cqa-border-[#6366f1]'\">\n          <mat-radio-button [value]=\"option.value\" class=\"!cqa-pr-0 cqa-mt-[-2px]\"></mat-radio-button>\n          <div class=\"cqa-flex cqa-flex-col cqa-gap-1\">\n            <span\n              class=\"cqa-text-[12px] cqa-font-bold\"\n              [ngClass]=\"option.variant === 'danger' ? 'cqa-text-[#EE3F3F]' : 'cqa-text-[#364153]'\">\n              {{ option.title }}\n            </span>\n            <span class=\"cqa-text-[12px] cqa-text-[#101828]\">\n              {{ option.description }}\n            </span>\n          </div>\n        </label>\n      </mat-radio-group>\n    </div>\n\n    <!-- Footer -->\n    <div class=\"cqa-flex cqa-items-center cqa-px-6 cqa-py-4 cqa-bg-white\" style=\"gap: 24px;\">\n      <div *ngIf=\"!hideCancel\" class=\"cqa-flex-1\" style=\"width: 50%;\">\n        <cqa-button\n          variant=\"outlined\"\n          btnSize=\"lg\"\n          [fullWidth]=\"true\"\n          [text]=\"cancelLabel\"\n          (clicked)=\"onClose()\">\n        </cqa-button>\n      </div>\n      <div class=\"cqa-flex-1\" [style.width]=\"hideCancel ? '100%' : '50%'\">\n        <cqa-button\n          *ngIf=\"currentOption\"\n          [variant]=\"currentOption.buttonVariant || 'filled'\"\n          btnSize=\"lg\"\n          [fullWidth]=\"true\"\n          [text]=\"currentOption.buttonLabel\"\n          (clicked)=\"onConfirm()\">\n        </cqa-button>\n      </div>\n    </div>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\nexport type PermissionToggleValue = 'RO' | 'RW';\n\n@Component({\n  selector: 'cqa-permission-toggle',\n  template: `\n    <div class=\"cqa-ui-root\" style=\"display:inline-flex;\">\n      <div class=\"cqa-permission-toggle\" [class.cqa-permission-toggle--disabled]=\"disabled\">\n        <button\n          type=\"button\"\n          class=\"cqa-perm-pill cqa-perm-pill--ro\"\n          [class.active]=\"value === 'RO'\"\n          [disabled]=\"disabled\"\n          [title]=\"roTooltip\"\n          (click)=\"onClick('RO', $event)\">\n          <mat-icon class=\"cqa-perm-icon\">lock</mat-icon>RO\n        </button>\n        <button\n          type=\"button\"\n          class=\"cqa-perm-pill cqa-perm-pill--rw\"\n          [class.active]=\"value === 'RW'\"\n          [disabled]=\"disabled\"\n          [title]=\"rwTooltip\"\n          (click)=\"onClick('RW', $event)\">\n          <mat-icon class=\"cqa-perm-icon\">edit</mat-icon>RW\n        </button>\n      </div>\n    </div>\n  `,\n})\nexport class PermissionToggleComponent {\n  @Input() value: PermissionToggleValue = 'RW';\n  @Input() disabled = false;\n  @Input() roTooltip = 'Read only — click to allow writes';\n  @Input() rwTooltip = 'Read / write — click to lock';\n\n  @Output() valueChange = new EventEmitter<PermissionToggleValue>();\n\n  onClick(next: PermissionToggleValue, event: MouseEvent): void {\n    event.stopPropagation();\n    if (this.disabled || next === this.value) { return; }\n    this.value = next;\n    this.valueChange.emit(next);\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport {\n  GlobalVariableDialogValue,\n  GlobalVariableUIPermission,\n  GlobalVariableUIType,\n} from './new-global-variable-dialog.models';\n\n@Component({\n  selector: 'cqa-new-global-variable-dialog',\n  templateUrl: './new-global-variable-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class NewGlobalVariableDialogComponent implements OnInit {\n  @Input() mode: 'create' | 'edit' = 'create';\n  @Input() initialValue?: Partial<GlobalVariableDialogValue>;\n  @Input() existingNames: string[] = [];\n\n  readonly typeOptions: GlobalVariableUIType[] = ['String', 'Number', 'Boolean', 'Password'];\n\n  readonly typeDropdownOptions: { label: string; value: GlobalVariableUIType }[] = [\n    { label: 'String', value: 'String' },\n    { label: 'Number', value: 'Number' },\n    { label: 'Boolean', value: 'Boolean' },\n    { label: 'Password', value: 'Password' },\n  ];\n\n  readonly permissionSegments = [\n    { label: 'RO', value: 'RO' as GlobalVariableUIPermission, icon: 'lock' },\n    { label: 'RW', value: 'RW' as GlobalVariableUIPermission, icon: 'edit' },\n  ];\n\n  name = '';\n  type: GlobalVariableUIType = 'String';\n  value = '';\n  readWriteMode: GlobalVariableUIPermission = 'RW';\n  description = '';\n  passwordTouched = false;\n\n  nameError: string | null = null;\n  valueError: string | null = null;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.name = this.initialValue.name ?? '';\n      this.type = this.initialValue.type ?? 'String';\n      this.value = this.initialValue.value ?? '';\n      this.readWriteMode = this.initialValue.readWriteMode ?? 'RW';\n      this.description = this.initialValue.description ?? '';\n    }\n    if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {\n      this.value = 'false';\n    }\n    if (this.mode === 'edit' && this.type === 'Password') {\n      this.value = '';\n    }\n  }\n\n  get title(): string {\n    return this.mode === 'edit' ? 'Edit global variable' : 'New global variable';\n  }\n\n  get subtitle(): string {\n    return 'Workspace-wide — accessible from any test case, any environment.';\n  }\n\n  get primaryButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save changes' : 'Create variable';\n  }\n\n  get isBoolean(): boolean {\n    return this.type === 'Boolean';\n  }\n\n  get isPassword(): boolean {\n    return this.type === 'Password';\n  }\n\n  get isNumber(): boolean {\n    return this.type === 'Number';\n  }\n\n  get valuePlaceholder(): string {\n    if (this.isPassword && this.mode === 'edit') {\n      return '•••••• (leave blank to keep existing)';\n    }\n    return '';\n  }\n\n  get nameHelperText(): string {\n    if (this.nameError) {\n      return this.nameError;\n    }\n    return 'Names must be unique across the entire workspace (primary key — no duplicates).';\n  }\n\n  get nameErrorsArray(): string[] {\n    return this.nameError ? [this.nameError] : [];\n  }\n\n  get valueErrorsArray(): string[] {\n    return this.valueError ? [this.valueError] : [];\n  }\n\n  get booleanOptions(): { label: string; value: string }[] {\n    return [\n      { label: 'true', value: 'true' },\n      { label: 'false', value: 'false' },\n    ];\n  }\n\n  get booleanDropdownOptions(): { label: string; value: string }[] {\n    return this.booleanOptions;\n  }\n\n  onNameChange(next: string): void {\n    this.name = next;\n    this.nameError = null;\n    this.cdr.markForCheck();\n  }\n\n  onTypeChange(next: GlobalVariableUIType): void {\n    if (!next) { return; }\n    this.type = next;\n    if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {\n      this.value = 'false';\n    }\n    if (this.type === 'Password') {\n      this.passwordTouched = false;\n      if (this.mode === 'edit') {\n        this.value = '';\n      }\n    }\n    this.valueError = null;\n    this.cdr.markForCheck();\n  }\n\n  onPermissionChange(next: string): void {\n    this.readWriteMode = next === 'RO' ? 'RO' : 'RW';\n    this.cdr.markForCheck();\n  }\n\n  onValueChange(next: string): void {\n    this.value = next;\n    if (this.isPassword) {\n      this.passwordTouched = true;\n    }\n    this.valueError = null;\n    this.cdr.markForCheck();\n  }\n\n  onBooleanValueChange(next: string): void {\n    this.value = next;\n    this.cdr.markForCheck();\n  }\n\n  onDescriptionChange(next: string): void {\n    this.description = next;\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Called by the host (via DialogRef.getComponentInstance()) when the primary\n   * button is clicked. Returns the captured value when valid, or null when the\n   * form has errors — in which case the host should leave the dialog open.\n   */\n  getValue(): GlobalVariableDialogValue | null {\n    const trimmedName = this.name.trim();\n\n    if (!trimmedName) {\n      this.nameError = 'Name is required.';\n    } else if (this.isDuplicateName(trimmedName)) {\n      this.nameError = 'A global variable with this name already exists — names must be unique.';\n    } else {\n      this.nameError = null;\n    }\n\n    if (this.isNumber && this.value && !this.isValidNumber(this.value)) {\n      this.valueError = 'Value must be a number.';\n    } else {\n      this.valueError = null;\n    }\n\n    if (this.nameError || this.valueError) {\n      this.cdr.markForCheck();\n      return null;\n    }\n\n    const omitPasswordValue = this.isPassword && this.mode === 'edit' && !this.passwordTouched;\n\n    return {\n      name: trimmedName,\n      type: this.type,\n      value: omitPasswordValue ? null : this.serializeValue(),\n      readWriteMode: this.readWriteMode,\n      description: this.description ? this.description : null,\n    };\n  }\n\n  private serializeValue(): string | null {\n    if (this.isBoolean) {\n      return this.value === 'true' ? 'true' : 'false';\n    }\n    return this.value ?? '';\n  }\n\n  private isDuplicateName(candidate: string): boolean {\n    const existing = (this.existingNames ?? []).map(n => (n ?? '').trim());\n    if (this.mode === 'edit') {\n      const original = (this.initialValue?.name ?? '').trim();\n      return candidate !== original && existing.includes(candidate);\n    }\n    return existing.includes(candidate);\n  }\n\n  private isValidNumber(raw: string): boolean {\n    const trimmed = raw.trim();\n    if (!trimmed) { return true; }\n    return !Number.isNaN(Number(trimmed));\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Name -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Name\"\n      placeholder=\"e.g. ihg_api_key\"\n      type=\"text\"\n      [value]=\"name\"\n      [required]=\"true\"\n      [fullWidth]=\"true\"\n      [errors]=\"nameErrorsArray\"\n      inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n      (valueChange)=\"onNameChange($event)\">\n    </cqa-custom-input>\n    <span *ngIf=\"!nameError\"\n      class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n      Names must be unique across the entire workspace (primary key — no duplicates).\n    </span>\n  </div>\n\n  <!-- Type + Permission row -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n      <cqa-dropdown-button\n        [options]=\"typeDropdownOptions\"\n        [selectedValue]=\"type\"\n        (selectionChange)=\"onTypeChange($event)\">\n      </cqa-dropdown-button>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n      <div class=\"cqa-pt-0.5\">\n        <cqa-permission-toggle\n          [value]=\"readWriteMode\"\n          (valueChange)=\"onPermissionChange($event)\">\n        </cqa-permission-toggle>\n      </div>\n    </div>\n  </div>\n\n  <!-- Value -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n      <cqa-dropdown-button\n        [options]=\"booleanDropdownOptions\"\n        [selectedValue]=\"value\"\n        (selectionChange)=\"onBooleanValueChange($event)\">\n      </cqa-dropdown-button>\n    </ng-container>\n    <ng-template #nonBooleanValue>\n      <cqa-custom-input\n        label=\"Value\"\n        [type]=\"isPassword ? 'password' : 'text'\"\n        [value]=\"value\"\n        [placeholder]=\"valuePlaceholder\"\n        [fullWidth]=\"true\"\n        [errors]=\"valueErrorsArray\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onValueChange($event)\">\n      </cqa-custom-input>\n    </ng-template>\n  </div>\n\n  <!-- Description -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-textarea\n      label=\"Description\"\n      placeholder=\"What is this variable used for?\"\n      [value]=\"description\"\n      [rows]=\"2\"\n      [fullWidth]=\"true\"\n      (valueChange)=\"onDescriptionChange($event)\">\n    </cqa-custom-textarea>\n  </div>\n\n</div>\n","export interface EnvironmentDialogValue {\n  name: string;\n  description: string | null;\n  color: string;\n  isDefault: boolean;\n}\n\nexport interface NewEnvironmentDialogInputs {\n  mode?: 'create' | 'edit';\n  initialValue?: Partial<EnvironmentDialogValue>;\n  existingNames?: string[];\n  allowDefaultToggle?: boolean;\n  defaultAlreadySet?: boolean;\n}\n\nexport const ENVIRONMENT_ACCENT_COLORS: readonly string[] = [\n  '#3F43EE',\n  '#A855F7',\n  '#00A63E',\n  '#F59E0B',\n  '#0EA5E9',\n  '#EC4899',\n];\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport {\n  ENVIRONMENT_ACCENT_COLORS,\n  EnvironmentDialogValue,\n} from './new-environment-dialog.models';\n\n@Component({\n  selector: 'cqa-new-environment-dialog',\n  templateUrl: './new-environment-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class NewEnvironmentDialogComponent implements OnInit {\n  @Input() mode: 'create' | 'edit' = 'create';\n  @Input() initialValue?: Partial<EnvironmentDialogValue>;\n  @Input() existingNames: string[] = [];\n  @Input() allowDefaultToggle: boolean = true;\n  @Input() defaultAlreadySet: boolean = false;\n\n  readonly colors: readonly string[] = ENVIRONMENT_ACCENT_COLORS;\n\n  name = '';\n  description = '';\n  color: string = ENVIRONMENT_ACCENT_COLORS[0];\n  isDefault = false;\n\n  nameError: string | null = null;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.name = this.initialValue.name ?? '';\n      this.description = this.initialValue.description ?? '';\n      this.color = this.initialValue.color || ENVIRONMENT_ACCENT_COLORS[0];\n      this.isDefault = this.initialValue.isDefault ?? false;\n    }\n  }\n\n  get title(): string {\n    return this.mode === 'edit' ? 'Edit environment' : 'New environment';\n  }\n\n  get subtitle(): string {\n    return 'Create an environment to scope variables, DB configs, and data profiles.';\n  }\n\n  get primaryButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save changes' : 'Create environment';\n  }\n\n  get nameErrorsArray(): string[] {\n    return this.nameError ? [this.nameError] : [];\n  }\n\n  get defaultHelperText(): string {\n    if (!this.allowDefaultToggle) {\n      return 'Default promotion is handled from the environment detail page.';\n    }\n    if (this.defaultAlreadySet && !this.isDefault) {\n      return 'Another environment is currently the default. Toggling this on will demote it.';\n    }\n    return 'Test cases without an explicit env selected will resolve against this one.';\n  }\n\n  onNameChange(next: string): void {\n    this.name = next;\n    this.nameError = null;\n    this.cdr.markForCheck();\n  }\n\n  onDescriptionChange(next: string): void {\n    this.description = next;\n    this.cdr.markForCheck();\n  }\n\n  onColorSelect(next: string): void {\n    this.color = next;\n    this.cdr.markForCheck();\n  }\n\n  onDefaultChange(next: boolean): void {\n    this.isDefault = next;\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Called by the host (via DialogRef.getComponentInstance()) when the primary\n   * button is clicked. Returns the captured value when valid, or null when the\n   * form has errors — host should leave the dialog open.\n   */\n  getValue(): EnvironmentDialogValue | null {\n    const trimmedName = this.name.trim();\n\n    if (!trimmedName) {\n      this.nameError = 'Name is required.';\n    } else if (trimmedName.length < 2) {\n      this.nameError = 'Name must be at least 2 characters.';\n    } else if (this.isDuplicateName(trimmedName)) {\n      this.nameError = 'An environment with this name already exists — names must be unique.';\n    } else {\n      this.nameError = null;\n    }\n\n    if (this.nameError) {\n      this.cdr.markForCheck();\n      return null;\n    }\n\n    return {\n      name: trimmedName,\n      description: this.description ? this.description.trim() : null,\n      color: this.color,\n      isDefault: this.allowDefaultToggle ? this.isDefault : false,\n    };\n  }\n\n  private isDuplicateName(candidate: string): boolean {\n    const existing = (this.existingNames ?? []).map(n => (n ?? '').trim().toLowerCase());\n    const lowered = candidate.toLowerCase();\n    if (this.mode === 'edit') {\n      const original = (this.initialValue?.name ?? '').trim().toLowerCase();\n      return lowered !== original && existing.includes(lowered);\n    }\n    return existing.includes(lowered);\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Name -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Environment name\"\n      placeholder=\"e.g. QA, SIT, UAT, Prod, Demo\"\n      type=\"text\"\n      [value]=\"name\"\n      [required]=\"true\"\n      [fullWidth]=\"true\"\n      [errors]=\"nameErrorsArray\"\n      (valueChange)=\"onNameChange($event)\">\n    </cqa-custom-input>\n    <span *ngIf=\"!nameError\"\n      class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n      Names are user-defined. Be concise — you'll see this on every test run.\n    </span>\n  </div>\n\n  <!-- Description -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Description\"\n      placeholder=\"What is this environment for?\"\n      type=\"text\"\n      [value]=\"description\"\n      [fullWidth]=\"true\"\n      (valueChange)=\"onDescriptionChange($event)\">\n    </cqa-custom-input>\n  </div>\n\n  <!-- Accent color -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <label class=\"cqa-text-sm cqa-mb-2 cqa-font-medium cqa-text-gray-700\">Accent color</label>\n    <div class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <button\n        *ngFor=\"let swatch of colors\"\n        type=\"button\"\n        class=\"cqa-w-7 cqa-h-7 cqa-rounded-lg cqa-cursor-pointer cqa-transition-all\"\n        [attr.aria-label]=\"'Select ' + swatch\"\n        [attr.aria-pressed]=\"color === swatch\"\n        [style.background]=\"swatch\"\n        [style.border]=\"color === swatch ? '2px solid #0F172A' : '2px solid transparent'\"\n        [style.boxShadow]=\"color === swatch ? '0 0 0 2px rgba(15,23,42,0.12)' : '0 0 0 1px rgba(0,0,0,0.05)'\"\n        (click)=\"onColorSelect(swatch)\">\n      </button>\n    </div>\n  </div>\n\n  <!-- Make default -->\n  <div\n    *ngIf=\"allowDefaultToggle\"\n    class=\"cqa-flex cqa-items-start cqa-gap-3 cqa-p-3 cqa-rounded-lg cqa-border cqa-border-indigo-100 cqa-bg-indigo-50\">\n    <cqa-custom-toggle\n      [checked]=\"isDefault\"\n      ariaLabel=\"Make default environment\"\n      (checkedChange)=\"onDefaultChange($event)\">\n    </cqa-custom-toggle>\n    <div class=\"cqa-flex cqa-flex-col cqa-flex-1\">\n      <span class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">\n        Make this the default environment\n      </span>\n      <span class=\"cqa-text-xs cqa-text-gray-600 cqa-mt-0.5\">\n        {{ defaultHelperText }}\n      </span>\n    </div>\n  </div>\n\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport {\n  EnvVariableDialogValue,\n  EnvVariableUIPermission,\n  EnvVariableUIType,\n} from './new-environment-variable-dialog.models';\n\n@Component({\n  selector: 'cqa-new-environment-variable-dialog',\n  templateUrl: './new-environment-variable-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class NewEnvironmentVariableDialogComponent implements OnInit {\n  @Input() mode: 'create' | 'edit' = 'create';\n  @Input() initialValue?: Partial<EnvVariableDialogValue>;\n  @Input() existingNames: string[] = [];\n  @Input() envName: string = '';\n\n  readonly typeDropdownOptions: { label: string; value: EnvVariableUIType }[] = [\n    { label: 'String', value: 'String' },\n    { label: 'Number', value: 'Number' },\n    { label: 'Boolean', value: 'Boolean' },\n    { label: 'Password', value: 'Password' },\n  ];\n\n  name = '';\n  type: EnvVariableUIType = 'String';\n  value = '';\n  readWriteMode: EnvVariableUIPermission = 'RW';\n  passwordTouched = false;\n\n  nameError: string | null = null;\n  valueError: string | null = null;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.name = this.initialValue.name ?? '';\n      this.type = this.initialValue.type ?? 'String';\n      this.value = this.initialValue.value ?? '';\n      this.readWriteMode = this.initialValue.readWriteMode ?? 'RW';\n    }\n    if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {\n      this.value = 'false';\n    }\n    if (this.mode === 'edit' && this.type === 'Password') {\n      this.value = '';\n    }\n  }\n\n  get title(): string {\n    return this.mode === 'edit' ? 'Edit variable' : 'New variable';\n  }\n\n  get subtitle(): string {\n    return this.envName ? `Scoped to the ${this.envName} environment.` : 'Scoped to this environment.';\n  }\n\n  get primaryButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save changes' : 'Add variable';\n  }\n\n  get isBoolean(): boolean { return this.type === 'Boolean'; }\n  get isPassword(): boolean { return this.type === 'Password'; }\n  get isNumber(): boolean { return this.type === 'Number'; }\n\n  get valuePlaceholder(): string {\n    if (this.isPassword && this.mode === 'edit') {\n      return '•••••• (leave blank to keep existing)';\n    }\n    if (this.readWriteMode === 'RW') {\n      return 'Leave blank to populate during test execution';\n    }\n    return 'Enter a value';\n  }\n\n  get nameHelperText(): string {\n    if (this.nameError) { return this.nameError; }\n    return 'Variable names must be unique within the environment.';\n  }\n\n  get permissionHelperText(): string {\n    return this.readWriteMode === 'RO'\n      ? 'Read only — test steps can read but not overwrite.'\n      : 'Read/write — test cases can capture values here.';\n  }\n\n  get nameErrorsArray(): string[] { return this.nameError ? [this.nameError] : []; }\n  get valueErrorsArray(): string[] { return this.valueError ? [this.valueError] : []; }\n\n  get booleanDropdownOptions(): { label: string; value: string }[] {\n    return [\n      { label: 'true', value: 'true' },\n      { label: 'false', value: 'false' },\n    ];\n  }\n\n  onNameChange(next: string): void {\n    this.name = next;\n    this.nameError = null;\n    this.cdr.markForCheck();\n  }\n\n  onTypeChange(next: EnvVariableUIType): void {\n    if (!next) { return; }\n    this.type = next;\n    if (this.type === 'Boolean' && this.value !== 'true' && this.value !== 'false') {\n      this.value = 'false';\n    }\n    if (this.type === 'Password') {\n      this.passwordTouched = false;\n      if (this.mode === 'edit') { this.value = ''; }\n    }\n    this.valueError = null;\n    this.cdr.markForCheck();\n  }\n\n  onPermissionChange(next: string): void {\n    this.readWriteMode = next === 'RO' ? 'RO' : 'RW';\n    this.cdr.markForCheck();\n  }\n\n  onValueChange(next: string): void {\n    this.value = next;\n    if (this.isPassword) { this.passwordTouched = true; }\n    this.valueError = null;\n    this.cdr.markForCheck();\n  }\n\n  onBooleanValueChange(next: string): void {\n    this.value = next;\n    this.cdr.markForCheck();\n  }\n\n  /**\n   * Host reads via DialogRef.getComponentInstance(). Returns null on validation\n   * failure — host keeps the dialog open and surfaces the inline error already\n   * written onto nameError / valueError.\n   */\n  getValue(): EnvVariableDialogValue | null {\n    const trimmedName = this.name.trim();\n\n    if (!trimmedName) {\n      this.nameError = 'Name is required.';\n    } else if (this.isDuplicateName(trimmedName)) {\n      this.nameError = 'A variable with this name already exists in this environment.';\n    } else {\n      this.nameError = null;\n    }\n\n    if (this.isNumber && this.value && !this.isValidNumber(this.value)) {\n      this.valueError = 'Value must be a number.';\n    } else {\n      this.valueError = null;\n    }\n\n    if (this.nameError || this.valueError) {\n      this.cdr.markForCheck();\n      return null;\n    }\n\n    const omitPasswordValue = this.isPassword && this.mode === 'edit' && !this.passwordTouched;\n\n    return {\n      name: trimmedName,\n      type: this.type,\n      value: omitPasswordValue ? null : this.serializeValue(),\n      readWriteMode: this.readWriteMode,\n    };\n  }\n\n  private serializeValue(): string | null {\n    if (this.isBoolean) {\n      return this.value === 'true' ? 'true' : 'false';\n    }\n    return this.value ?? '';\n  }\n\n  private isDuplicateName(candidate: string): boolean {\n    const existing = (this.existingNames ?? []).map(n => (n ?? '').trim().toLowerCase());\n    const lowered = candidate.toLowerCase();\n    if (this.mode === 'edit') {\n      const original = (this.initialValue?.name ?? '').trim().toLowerCase();\n      return lowered !== original && existing.includes(lowered);\n    }\n    return existing.includes(lowered);\n  }\n\n  private isValidNumber(raw: string): boolean {\n    const trimmed = raw.trim();\n    if (!trimmed) { return true; }\n    return !Number.isNaN(Number(trimmed));\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Name -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Name\"\n      placeholder=\"e.g. order_id\"\n      type=\"text\"\n      [value]=\"name\"\n      [required]=\"true\"\n      [fullWidth]=\"true\"\n      [errors]=\"nameErrorsArray\"\n      inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n      (valueChange)=\"onNameChange($event)\">\n    </cqa-custom-input>\n    <span *ngIf=\"!nameError\"\n      class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">\n      {{ nameHelperText }}\n    </span>\n  </div>\n\n  <!-- Type + Permission -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Type</label>\n      <cqa-dropdown-button\n        [options]=\"typeDropdownOptions\"\n        [selectedValue]=\"type\"\n        (selectionChange)=\"onTypeChange($event)\">\n      </cqa-dropdown-button>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n      <div class=\"cqa-pt-0.5\">\n        <cqa-permission-toggle\n          [value]=\"readWriteMode\"\n          (valueChange)=\"onPermissionChange($event)\">\n        </cqa-permission-toggle>\n      </div>\n      <span class=\"cqa-text-xs cqa-text-gray-500 cqa-mt-1\">{{ permissionHelperText }}</span>\n    </div>\n  </div>\n\n  <!-- Value -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <ng-container *ngIf=\"isBoolean; else nonBooleanValue\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Value</label>\n      <cqa-dropdown-button\n        [options]=\"booleanDropdownOptions\"\n        [selectedValue]=\"value\"\n        (selectionChange)=\"onBooleanValueChange($event)\">\n      </cqa-dropdown-button>\n    </ng-container>\n    <ng-template #nonBooleanValue>\n      <cqa-custom-input\n        label=\"Value\"\n        [type]=\"isPassword ? 'password' : 'text'\"\n        [value]=\"value\"\n        [placeholder]=\"valuePlaceholder\"\n        [fullWidth]=\"true\"\n        [errors]=\"valueErrorsArray\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onValueChange($event)\">\n      </cqa-custom-input>\n    </ng-template>\n  </div>\n\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport {\n  DbConfigDialogValue,\n  DbConfigTestResult,\n  DbDriver,\n} from './new-db-config-dialog.models';\n\n@Component({\n  selector: 'cqa-new-db-config-dialog',\n  templateUrl: './new-db-config-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class NewDbConfigDialogComponent implements OnInit, OnDestroy {\n  @Input() mode: 'create' | 'edit' = 'create';\n  @Input() initialValue?: Partial<DbConfigDialogValue>;\n  @Input() existingNames: string[] = [];\n  @Input() envName: string = '';\n  @Input() testFn?: (value: DbConfigDialogValue) => Observable<DbConfigTestResult>;\n\n  readonly driverOptions: { label: string; value: DbDriver }[] = [\n    { label: 'MySQL',      value: 'MySQL' },\n    { label: 'Oracle',     value: 'Oracle' },\n    { label: 'SQL Server', value: 'SQLServer' },\n    { label: 'Postgres',   value: 'Postgres' },\n  ];\n\n  connectionName = '';\n  driver: DbDriver = 'MySQL';\n  host = '';\n  port: number | null = 3306;\n  database = '';\n  username = '';\n  password = '';\n\n  connectionNameError: string | null = null;\n  hostError: string | null = null;\n  portError: string | null = null;\n  databaseError: string | null = null;\n\n  isTesting = false;\n  testResult: DbConfigTestResult | null = null;\n\n  private readonly destroy$ = new Subject<void>();\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.connectionName = this.initialValue.connectionName ?? '';\n      if (this.initialValue.driver) { this.driver = this.initialValue.driver; }\n      this.host = this.initialValue.host ?? '';\n      const initialPort = this.initialValue.port;\n      this.port = initialPort != null && !Number.isNaN(initialPort)\n        ? Number(initialPort)\n        : this.defaultPortForDriver(this.driver);\n      this.database = this.initialValue.database ?? '';\n      this.username = this.initialValue.username ?? '';\n      this.password = '';\n    } else {\n      this.port = this.defaultPortForDriver(this.driver);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  // -------- Computed strings --------\n\n  get title(): string {\n    return this.mode === 'edit' ? 'Edit DB configuration' : 'New database configuration';\n  }\n\n  get subtitle(): string {\n    return this.envName\n      ? `Scoped to the ${this.envName} environment. Multiple configs can live in the same environment.`\n      : 'Multiple configs can live in the same environment.';\n  }\n\n  get primaryButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save changes' : 'Add DB config';\n  }\n\n  get passwordPlaceholder(): string {\n    return this.mode === 'edit' ? '•••••• (leave blank to keep existing)' : 'Enter password';\n  }\n\n  get connectionNameErrorsArray(): string[] {\n    return this.connectionNameError ? [this.connectionNameError] : [];\n  }\n  get hostErrorsArray(): string[] {\n    return this.hostError ? [this.hostError] : [];\n  }\n  get portErrorsArray(): string[] {\n    return this.portError ? [this.portError] : [];\n  }\n  get databaseErrorsArray(): string[] {\n    return this.databaseError ? [this.databaseError] : [];\n  }\n\n  get canTest(): boolean {\n    return !!this.testFn && !this.isTesting;\n  }\n\n  // -------- Form handlers --------\n\n  onConnectionNameChange(value: string): void {\n    this.connectionName = value;\n    this.connectionNameError = null;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onDriverChange(value: any): void {\n    const next = (value as DbDriver) ?? 'MySQL';\n    const previousDefault = this.defaultPortForDriver(this.driver);\n    this.driver = next;\n    if (this.port == null || this.port === previousDefault) {\n      this.port = this.defaultPortForDriver(next);\n    }\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onHostChange(value: string): void {\n    this.host = value;\n    this.hostError = null;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onPortChange(value: string): void {\n    if (value === '' || value == null) {\n      this.port = null;\n    } else {\n      const n = Number(value);\n      this.port = Number.isFinite(n) ? n : null;\n    }\n    this.portError = null;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onDatabaseChange(value: string): void {\n    this.database = value;\n    this.databaseError = null;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onUsernameChange(value: string): void {\n    this.username = value;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  onPasswordChange(value: string): void {\n    this.password = value;\n    this.testResult = null;\n    this.cdr.markForCheck();\n  }\n\n  // -------- Test connection --------\n\n  onTestClick(): void {\n    if (!this.testFn) { return; }\n    const value = this.captureForm();\n    if (!value) { return; }\n    this.isTesting = true;\n    this.testResult = null;\n    this.cdr.markForCheck();\n    this.testFn(value).pipe(takeUntil(this.destroy$)).subscribe({\n      next: (result) => {\n        this.isTesting = false;\n        this.testResult = result || { status: 'failure', message: 'Connection test failed' };\n        this.cdr.markForCheck();\n      },\n      error: (err) => {\n        this.isTesting = false;\n        const message = err?.error?.message || err?.message || 'Connection test failed';\n        this.testResult = { status: 'failure', message };\n        this.cdr.markForCheck();\n      },\n    });\n  }\n\n  // -------- Save (called by host dialog) --------\n\n  /**\n   * Returns the validated form value, or null if validation fails (inline\n   * errors are populated and the dialog stays open).\n   */\n  getValue(): DbConfigDialogValue | null {\n    return this.captureForm();\n  }\n\n  // -------- Internals --------\n\n  private captureForm(): DbConfigDialogValue | null {\n    let hasError = false;\n\n    const trimmedName = this.connectionName.trim();\n    if (!trimmedName) {\n      this.connectionNameError = 'Connection name is required.';\n      hasError = true;\n    } else if (this.isDuplicateName(trimmedName)) {\n      this.connectionNameError = 'A connection with this name already exists in this environment.';\n      hasError = true;\n    } else {\n      this.connectionNameError = null;\n    }\n\n    const trimmedHost = this.host.trim();\n    if (!trimmedHost) {\n      this.hostError = 'Host is required.';\n      hasError = true;\n    } else {\n      this.hostError = null;\n    }\n\n    if (this.port == null || !Number.isFinite(this.port) || this.port <= 0 || this.port > 65535) {\n      this.portError = 'Port must be a number between 1 and 65535.';\n      hasError = true;\n    } else {\n      this.portError = null;\n    }\n\n    const trimmedDatabase = this.database.trim();\n    if (!trimmedDatabase) {\n      this.databaseError = 'Database name is required.';\n      hasError = true;\n    } else {\n      this.databaseError = null;\n    }\n\n    if (hasError) {\n      this.cdr.markForCheck();\n      return null;\n    }\n\n    return {\n      connectionName: trimmedName,\n      driver: this.driver,\n      host: trimmedHost,\n      port: this.port as number,\n      database: trimmedDatabase,\n      username: this.username,\n      password: this.password,\n    };\n  }\n\n  private isDuplicateName(name: string): boolean {\n    const lower = name.toLowerCase();\n    let pool = (this.existingNames || []).map(n => String(n || '').trim().toLowerCase());\n    if (this.mode === 'edit' && this.initialValue?.connectionName) {\n      const original = this.initialValue.connectionName.trim().toLowerCase();\n      pool = pool.filter(n => n !== original);\n    }\n    return pool.includes(lower);\n  }\n\n  private defaultPortForDriver(driver: DbDriver): number {\n    switch (driver) {\n      case 'Postgres':  return 5432;\n      case 'Oracle':    return 1521;\n      case 'SQLServer':\n      case 'MSSQL':     return 1433;\n      case 'MySQL':\n      default:          return 3306;\n    }\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Row: Connection name + Driver -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col\">\n      <cqa-custom-input\n        label=\"Connection name\"\n        placeholder=\"e.g. Primary (bookings)\"\n        type=\"text\"\n        [value]=\"connectionName\"\n        [required]=\"true\"\n        [fullWidth]=\"true\"\n        [errors]=\"connectionNameErrorsArray\"\n        (valueChange)=\"onConnectionNameChange($event)\">\n      </cqa-custom-input>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Driver</label>\n      <cqa-dropdown-button\n        [options]=\"driverOptions\"\n        [selectedValue]=\"driver\"\n        (selectionChange)=\"onDriverChange($event)\">\n      </cqa-dropdown-button>\n    </div>\n  </div>\n\n  <!-- Row: Host + Port -->\n  <div class=\"cqa-grid cqa-grid-cols-4 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col cqa-col-span-3\">\n      <cqa-custom-input\n        label=\"Host\"\n        placeholder=\"db.example.com\"\n        type=\"text\"\n        [value]=\"host\"\n        [required]=\"true\"\n        [fullWidth]=\"true\"\n        [errors]=\"hostErrorsArray\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onHostChange($event)\">\n      </cqa-custom-input>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col cqa-col-span-1\">\n      <cqa-custom-input\n        label=\"Port\"\n        type=\"number\"\n        [value]=\"port != null ? port.toString() : ''\"\n        [required]=\"true\"\n        [fullWidth]=\"true\"\n        [errors]=\"portErrorsArray\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onPortChange($event)\">\n      </cqa-custom-input>\n    </div>\n  </div>\n\n  <!-- Database -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Database\"\n      placeholder=\"bookings_qa\"\n      type=\"text\"\n      [value]=\"database\"\n      [required]=\"true\"\n      [fullWidth]=\"true\"\n      [errors]=\"databaseErrorsArray\"\n      inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n      (valueChange)=\"onDatabaseChange($event)\">\n    </cqa-custom-input>\n  </div>\n\n  <!-- Row: Username + Password -->\n  <div class=\"cqa-grid cqa-grid-cols-2 cqa-gap-4\">\n    <div class=\"cqa-flex cqa-flex-col\">\n      <cqa-custom-input\n        label=\"Username\"\n        type=\"text\"\n        [value]=\"username\"\n        [fullWidth]=\"true\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onUsernameChange($event)\">\n      </cqa-custom-input>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col\">\n      <cqa-custom-input\n        label=\"Password\"\n        type=\"password\"\n        [value]=\"password\"\n        [placeholder]=\"passwordPlaceholder\"\n        [fullWidth]=\"true\"\n        (valueChange)=\"onPasswordChange($event)\">\n      </cqa-custom-input>\n    </div>\n  </div>\n\n  <!-- Test connection action + result -->\n  <div *ngIf=\"testFn\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <div class=\"cqa-flex cqa-items-center cqa-justify-between cqa-gap-3\">\n      <span class=\"cqa-text-xs cqa-text-gray-600\">\n        Validate the connection without saving. The credentials are sent over the wire only for this check.\n      </span>\n      <cqa-button\n        variant=\"outlined\"\n        btnSize=\"md\"\n        icon=\"bolt\"\n        text=\"Test connection\"\n        [loading]=\"isTesting\"\n        [disabled]=\"!canTest\"\n        (clicked)=\"onTestClick()\">\n      </cqa-button>\n    </div>\n\n    <div *ngIf=\"testResult\"\n      class=\"cqa-flex cqa-items-start cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-text-sm\"\n      [ngClass]=\"testResult.status === 'success'\n        ? 'cqa-bg-[#ECFDF5] cqa-text-[#065F46] cqa-border cqa-border-[#A7F3D0]'\n        : 'cqa-bg-[#FEF2F2] cqa-text-[#991B1B] cqa-border cqa-border-[#FECACA]'\">\n      <mat-icon class=\"!cqa-w-[18px] !cqa-h-[18px] !cqa-text-[18px]\">\n        {{ testResult.status === 'success' ? 'check_circle' : 'error' }}\n      </mat-icon>\n      <span>{{ testResult.message }}</span>\n    </div>\n  </div>\n\n  <!-- Encryption notice -->\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-[#EEF2FF] cqa-border cqa-border-[#C7D2FE] cqa-text-xs cqa-text-[#3730A3]\">\n    <mat-icon class=\"!cqa-w-[16px] !cqa-h-[16px] !cqa-text-[16px]\">lock</mat-icon>\n    <span>Credentials are encrypted at rest and masked in the audit log.</span>\n  </div>\n\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\n\nimport {\n  DynamicSelectFieldConfig,\n  SelectOption,\n} from '../dynamic-select/dynamic-select-field.component';\nimport {\n  TdpDialogPermission,\n  TdpDialogValue,\n  TdpEnvironmentOption,\n} from './new-test-data-profile-dialog.models';\n\n@Component({\n  selector: 'cqa-new-test-data-profile-dialog',\n  templateUrl: './new-test-data-profile-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class NewTestDataProfileDialogComponent implements OnInit {\n  @Input() mode: 'create' | 'edit' = 'create';\n  @Input() initialValue?: Partial<TdpDialogValue>;\n  @Input() existingNames: string[] = [];\n  @Input() environments: TdpEnvironmentOption[] = [];\n  @Input() lockedColumns: string[] = [];\n\n  public name = '';\n  public description = '';\n  public readWriteMode: TdpDialogPermission = 'RW';\n  public columns: string[] = ['col_1'];\n\n  public readonly envForm = new FormGroup({\n    environmentIds: new FormControl([]),\n  });\n  public envConfig: DynamicSelectFieldConfig = this.buildEnvConfig([]);\n\n  public nameError: string | null = null;\n  public columnsError: string | null = null;\n  public envsError: string | null = null;\n\n  public trackByIndex = (_: number, __: string): number => _;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    if (this.initialValue) {\n      this.name = this.initialValue.name ?? '';\n      this.description = this.initialValue.description ?? '';\n      this.readWriteMode = this.initialValue.readWriteMode ?? 'RW';\n      this.columns = (this.initialValue.columns && this.initialValue.columns.length)\n        ? [...this.initialValue.columns]\n        : ['col_1'];\n      const ids = this.initialValue.environmentIds ?? [];\n      this.envForm.get('environmentIds')!.setValue(ids);\n    }\n    this.envConfig = this.buildEnvConfig(this.environments ?? []);\n\n    // Clear envs error as soon as the user picks something.\n    this.envForm.get('environmentIds')!.valueChanges.subscribe(() => {\n      if (this.envsError) {\n        this.envsError = null;\n        this.cdr.markForCheck();\n      }\n    });\n  }\n\n  public get title(): string {\n    return this.mode === 'edit' ? 'Edit test data profile' : 'New test data profile';\n  }\n\n  public get subtitle(): string {\n    return 'Define columns; data values can be added per environment after creation.';\n  }\n\n  public get primaryButtonLabel(): string {\n    return this.mode === 'edit' ? 'Save changes' : 'Create profile';\n  }\n\n  public get nameErrorsArray(): string[] { return this.nameError ? [this.nameError] : []; }\n\n  public get canAddColumn(): boolean { return true; }\n\n  public get selectedEnvIds(): number[] {\n    const val = this.envForm.get('environmentIds')!.value ?? [];\n    return Array.isArray(val) ? val : [];\n  }\n\n  public onNameChange(next: string): void {\n    this.name = next;\n    this.nameError = null;\n    this.cdr.markForCheck();\n  }\n\n  public onDescriptionChange(next: string): void {\n    this.description = next;\n    this.cdr.markForCheck();\n  }\n\n  public onPermissionChange(next: string): void {\n    this.readWriteMode = next === 'RO' ? 'RO' : 'RW';\n    this.cdr.markForCheck();\n  }\n\n  public onColumnChange(index: number, value: string): void {\n    const next = [...this.columns];\n    next[index] = value;\n    this.columns = next;\n    this.columnsError = null;\n    this.cdr.markForCheck();\n  }\n\n  public onAddColumn(): void {\n    this.columns = [...this.columns, `col_${this.columns.length + 1}`];\n    this.cdr.markForCheck();\n  }\n\n  public onRemoveColumn(index: number): void {\n    if (this.columns.length <= 1) { return; }\n    const target = this.columns[index];\n    if (this.lockedColumns && this.lockedColumns.indexOf(target) !== -1) { return; }\n    this.columns = this.columns.filter((_, i) => i !== index);\n    this.cdr.markForCheck();\n  }\n\n  public isColumnLocked(col: string): boolean {\n    return !!(this.lockedColumns && this.lockedColumns.indexOf(col) !== -1);\n  }\n\n  public getValue(): TdpDialogValue | null {\n    const trimmedName = this.name.trim();\n    if (!trimmedName) {\n      this.nameError = 'Name is required.';\n    } else if (this.isDuplicateName(trimmedName)) {\n      this.nameError = 'A profile with this name already exists.';\n    } else {\n      this.nameError = null;\n    }\n\n    const trimmedCols = this.columns.map(c => (c ?? '').trim()).filter(c => c.length > 0);\n    const unique = new Set(trimmedCols);\n    if (trimmedCols.length === 0) {\n      this.columnsError = 'At least one column is required.';\n    } else if (unique.size !== trimmedCols.length) {\n      this.columnsError = 'Column names must be unique.';\n    } else {\n      this.columnsError = null;\n    }\n\n    const envIds = this.selectedEnvIds;\n    if (!envIds || envIds.length === 0) {\n      this.envsError = 'Select at least one environment to assign this profile to.';\n    } else {\n      this.envsError = null;\n    }\n\n    if (this.nameError || this.columnsError || this.envsError) {\n      this.cdr.markForCheck();\n      return null;\n    }\n\n    return {\n      name: trimmedName,\n      description: this.description.trim() || null,\n      readWriteMode: this.readWriteMode,\n      columns: trimmedCols,\n      environmentIds: this.selectedEnvIds,\n    };\n  }\n\n  private buildEnvConfig(envs: TdpEnvironmentOption[]): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (envs || []).map(e => ({\n      id: e.id,\n      value: e.id,\n      name: e.name,\n      label: e.name,\n      statusColor: e.color,\n    }));\n    return {\n      key: 'environmentIds',\n      label: '',\n      placeholder: 'Select environments…',\n      multiple: true,\n      searchable: true,\n      optionStyle: 'checkbox',\n      showSelectAll: false,\n      options,\n    };\n  }\n\n  private isDuplicateName(candidate: string): boolean {\n    const existing = (this.existingNames ?? []).map(n => (n ?? '').trim().toLowerCase());\n    const lowered = candidate.toLowerCase();\n    if (this.mode === 'edit') {\n      const original = (this.initialValue?.name ?? '').trim().toLowerCase();\n      return lowered !== original && existing.includes(lowered);\n    }\n    return existing.includes(lowered);\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Name + Permission -->\n  <div class=\"cqa-grid cqa-grid-cols-[1fr_auto] cqa-gap-4 cqa-items-start\">\n    <div class=\"cqa-flex cqa-flex-col\">\n      <cqa-custom-input\n        label=\"Profile name\"\n        placeholder=\"e.g. Guest Personas\"\n        type=\"text\"\n        [value]=\"name\"\n        [required]=\"true\"\n        [fullWidth]=\"true\"\n        [errors]=\"nameErrorsArray\"\n        (valueChange)=\"onNameChange($event)\">\n      </cqa-custom-input>\n    </div>\n    <div class=\"cqa-flex cqa-flex-col\">\n      <label class=\"cqa-text-sm cqa-mb-1.5 cqa-font-medium cqa-text-gray-700\">Permission</label>\n      <cqa-permission-toggle\n        [value]=\"readWriteMode\"\n        (valueChange)=\"onPermissionChange($event)\">\n      </cqa-permission-toggle>\n    </div>\n  </div>\n\n  <!-- Description -->\n  <div class=\"cqa-flex cqa-flex-col\">\n    <cqa-custom-input\n      label=\"Description\"\n      placeholder=\"What data is this profile for?\"\n      type=\"text\"\n      [value]=\"description\"\n      [fullWidth]=\"true\"\n      (valueChange)=\"onDescriptionChange($event)\">\n    </cqa-custom-input>\n  </div>\n\n  <!-- Columns -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">Columns</label>\n    <div *ngFor=\"let col of columns; let i = index; trackBy: trackByIndex\"\n         class=\"cqa-flex cqa-items-center cqa-gap-2\">\n      <cqa-custom-input\n        [value]=\"col\"\n        [placeholder]=\"'column_' + (i + 1)\"\n        [fullWidth]=\"true\"\n        [disabled]=\"isColumnLocked(col)\"\n        inputInlineStyle=\"font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onColumnChange(i, $event)\">\n      </cqa-custom-input>\n      <cqa-button\n        variant=\"text\"\n        btnSize=\"sm\"\n        icon=\"delete\"\n        tooltip=\"Remove column\"\n        [disabled]=\"columns.length <= 1 || isColumnLocked(col)\"\n        (clicked)=\"onRemoveColumn(i)\">\n      </cqa-button>\n    </div>\n    <div>\n      <cqa-button\n        variant=\"text\"\n        btnSize=\"sm\"\n        icon=\"add\"\n        text=\"Add column\"\n        (clicked)=\"onAddColumn()\">\n      </cqa-button>\n    </div>\n    <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n  </div>\n\n  <!-- Assign to environments -->\n  <div class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">\n      Assign to environments <span class=\"cqa-text-red-600\">*</span>\n    </label>\n    <cqa-dynamic-select\n      [form]=\"envForm\"\n      [config]=\"envConfig\">\n    </cqa-dynamic-select>\n    <span *ngIf=\"envsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ envsError }}</span>\n    <span *ngIf=\"!envsError\" class=\"cqa-text-xs cqa-text-gray-500\">\n      Each environment gets an independent copy of the data (same columns, separate rows).\n    </span>\n  </div>\n\n</div>\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DndDropEvent } from 'ngx-drag-drop';\n\nimport {\n  ManageColumnsDialogColumn,\n  ManageColumnsDialogValue,\n} from './manage-columns-dialog.models';\n\ninterface ManageColumnsItem {\n  uid: number;\n  originalName: string | null;\n  name: string;\n}\n\n@Component({\n  selector: 'cqa-manage-columns-dialog',\n  templateUrl: './manage-columns-dialog.component.html',\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class ManageColumnsDialogComponent implements OnInit {\n  @Input() columns: string[] = [];\n  @Input() lockedColumns: string[] = [];\n\n  public items: ManageColumnsItem[] = [];\n  public newColName = '';\n  public columnsError: string | null = null;\n\n  public trackByUid = (_: number, item: ManageColumnsItem): number => item.uid;\n\n  private nextUid = 1;\n\n  ngOnInit(): void {\n    const initial = Array.isArray(this.columns) ? this.columns : [];\n    this.items = initial.map(name => ({\n      uid: this.nextUid++,\n      originalName: name,\n      name,\n    }));\n  }\n\n  public isLocked(item: ManageColumnsItem): boolean {\n    if (!this.lockedColumns || this.lockedColumns.length === 0) { return false; }\n    if (item.originalName != null && this.lockedColumns.indexOf(item.originalName) !== -1) {\n      return true;\n    }\n    return this.lockedColumns.indexOf(item.name) !== -1;\n  }\n\n  public onDndDrop(event: DndDropEvent): void {\n    const dragged = event.data as ManageColumnsItem | null;\n    if (!dragged || event.index == null) { return; }\n    const from = this.items.findIndex(it => it.uid === dragged.uid);\n    if (from < 0) { return; }\n    const next = this.items.slice();\n    next.splice(from, 1);\n    const to = event.index > from ? event.index - 1 : event.index;\n    next.splice(to, 0, dragged);\n    this.items = next;\n  }\n\n  public onMove(index: number, dir: -1 | 1): void {\n    const target = index + dir;\n    if (target < 0 || target >= this.items.length) { return; }\n    const next = this.items.slice();\n    [next[index], next[target]] = [next[target], next[index]];\n    this.items = next;\n  }\n\n  public onRename(index: number, value: string): void {\n    if (!this.items[index]) { return; }\n    this.items = this.items.map((it, i) => i === index ? { ...it, name: value } : it);\n    this.columnsError = null;\n  }\n\n  public onRemove(index: number): void {\n    const item = this.items[index];\n    if (!item || this.isLocked(item)) { return; }\n    this.items = this.items.filter((_, i) => i !== index);\n    this.columnsError = null;\n  }\n\n  public onNewColNameChange(value: string): void {\n    this.newColName = value;\n  }\n\n  public onAdd(): void {\n    const trimmed = (this.newColName || '').trim();\n    if (!trimmed || this.itemsHasName(trimmed)) { return; }\n    this.items = [...this.items, {\n      uid: this.nextUid++,\n      originalName: null,\n      name: trimmed,\n    }];\n    this.newColName = '';\n    this.columnsError = null;\n  }\n\n  public get canAdd(): boolean {\n    const trimmed = (this.newColName || '').trim();\n    if (!trimmed) { return false; }\n    return !this.itemsHasName(trimmed);\n  }\n\n  public getValue(): ManageColumnsDialogValue | null {\n    const trimmed: ManageColumnsDialogColumn[] = this.items.map(it => ({\n      originalName: it.originalName,\n      name: (it.name || '').trim(),\n    }));\n\n    if (trimmed.length === 0) {\n      this.columnsError = 'At least one column is required.';\n      return null;\n    }\n    if (trimmed.some(c => c.name.length === 0)) {\n      this.columnsError = 'Column names cannot be empty.';\n      return null;\n    }\n    const lowered = trimmed.map(c => c.name.toLowerCase());\n    if (new Set(lowered).size !== trimmed.length) {\n      this.columnsError = 'Column names must be unique.';\n      return null;\n    }\n\n    this.columnsError = null;\n    return { columns: trimmed };\n  }\n\n  private itemsHasName(candidate: string): boolean {\n    const lowered = candidate.toLowerCase();\n    return this.items.some(it => (it.name || '').trim().toLowerCase() === lowered);\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-3 cqa-w-full\">\n\n  <div class=\"manage-cols-drop-list cqa-flex cqa-flex-col cqa-gap-2\"\n       [dndDropzone]=\"['col']\"\n       dndEffectAllowed=\"move\"\n       dndDragoverClass=\"dndDragover\"\n       (dndDrop)=\"onDndDrop($event)\">\n    <div dndPlaceholderRef class=\"manage-cols-placeholder\">Drop here</div>\n    <div *ngFor=\"let item of items; let i = index; trackBy: trackByUid\"\n         class=\"manage-cols-row cqa-flex cqa-items-center cqa-gap-2 cqa-px-2 cqa-py-1.5 cqa-rounded-md cqa-border cqa-border-gray-200 cqa-bg-gray-50\">\n      <span class=\"manage-cols-handle cqa-flex cqa-items-center cqa-justify-center cqa-text-gray-400\"\n            [dndDraggable]=\"item\"\n            [dndDisableIf]=\"isLocked(item)\"\n            dndType=\"col\"\n            dndEffectAllowed=\"move\">\n        <mat-icon style=\"font-size:18px;width:18px;height:18px;line-height:18px;\">drag_indicator</mat-icon>\n      </span>\n      <cqa-custom-input\n        class=\"cqa-flex-1\"\n        [value]=\"item.name\"\n        [fullWidth]=\"true\"\n        [disabled]=\"isLocked(item)\"\n        inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n        (valueChange)=\"onRename(i, $event)\">\n      </cqa-custom-input>\n      <button type=\"button\" class=\"manage-cols-icon-btn\"\n              title=\"Move up\"\n              [disabled]=\"i === 0\"\n              (click)=\"onMove(i, -1)\">\n        <mat-icon>arrow_upward</mat-icon>\n      </button>\n      <button type=\"button\" class=\"manage-cols-icon-btn\"\n              title=\"Move down\"\n              [disabled]=\"i === items.length - 1\"\n              (click)=\"onMove(i, 1)\">\n        <mat-icon>arrow_downward</mat-icon>\n      </button>\n      <button type=\"button\" class=\"manage-cols-icon-btn manage-cols-icon-btn-danger\"\n              title=\"Delete column\"\n              [disabled]=\"isLocked(item)\"\n              (click)=\"onRemove(i)\">\n        <mat-icon>delete</mat-icon>\n      </button>\n    </div>\n  </div>\n\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-pt-3 cqa-mt-1 cqa-border-t cqa-border-dashed cqa-border-gray-200\">\n    <cqa-custom-input\n      class=\"cqa-flex-1\"\n      [value]=\"newColName\"\n      [fullWidth]=\"true\"\n      placeholder=\"New column name (e.g. currency)\"\n      inputInlineStyle=\"font-family: 'Inter', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', monospace;\"\n      (valueChange)=\"onNewColNameChange($event)\"\n      (enterPressed)=\"onAdd()\">\n    </cqa-custom-input>\n    <cqa-button\n      variant=\"outlined\"\n      btnSize=\"sm\"\n      icon=\"add\"\n      text=\"Add column\"\n      [disabled]=\"!canAdd\"\n      (clicked)=\"onAdd()\">\n    </cqa-button>\n  </div>\n\n  <span *ngIf=\"columnsError\" class=\"cqa-text-xs cqa-text-red-600\">{{ columnsError }}</span>\n\n  <div class=\"cqa-px-3 cqa-py-2 cqa-rounded-md cqa-bg-primary-surface cqa-border cqa-border-success-100 cqa-text-xs cqa-text-gray-700\">\n    <strong class=\"cqa-text-gray-900\">Heads up:</strong>\n    Deleting a column removes its data from every environment. Renaming keeps the data in place.\n  </div>\n\n</div>\n","import { Observable, Subject } from 'rxjs';\n\nexport type AuditEntityType = 'Environment Variable' | 'Test Data Profile' | 'Global Data';\nexport type AuditDateRange = '24h' | '7d' | '30d' | 'all';\n\nexport interface AuditEntry {\n  id: string;\n  ts: string;\n  user: string;\n  entityType: AuditEntityType;\n  entityName: string;\n  change: string;\n  before?: string | null;\n  after?: string | null;\n}\n\nexport interface AuditFilterOption {\n  value: string;\n  label: string;\n}\n\nexport interface AuditLogDrawerInputs {\n  entries: AuditEntry[];\n  entityTypeOptions?: AuditFilterOption[];\n  envOptions?: AuditFilterOption[];\n  userOptions?: AuditFilterOption[];\n  defaultRange?: AuditDateRange;\n  isLoading?: boolean;\n}\n\nexport interface AuditLogFilterState {\n  entityType: string;\n  env: string;\n  user: string;\n  range: AuditDateRange;\n}\n\nexport interface AuditLogDrawerRef {\n  filterChange$: Observable<AuditLogFilterState>;\n  afterClosed$: Observable<void>;\n  close(): void;\n  updateEntries(entries: AuditEntry[]): void;\n  updateLoading(isLoading: boolean): void;\n}\n\nexport const ALL_FILTER_VALUE = '__all__';\n\nexport interface AuditLogDrawerInternalRef extends AuditLogDrawerRef {\n  readonly filterChange: Subject<AuditLogFilterState>;\n  readonly afterClosed: Subject<void>;\n}\n","import { Component, Input } from '@angular/core';\nimport { AuditEntry } from './audit-log-drawer.models';\n\n@Component({\n  selector: 'cqa-audit-log-entry-card',\n  templateUrl: './audit-log-entry-card.component.html',\n  host: { class: 'cqa-ui-root cqa-audit-log-row' },\n})\nexport class AuditLogEntryCardComponent {\n  @Input() entry!: AuditEntry;\n\n  public get userShortName(): string {\n    const u = this.entry?.user || '';\n    const idx = u.indexOf('@');\n    return idx > 0 ? u.substring(0, idx) : u;\n  }\n\n  public get etypeClass(): string {\n    switch (this.entry?.entityType) {\n      case 'Environment Variable': return 'cqa-audit-log-etype-ev';\n      case 'Test Data Profile':    return 'cqa-audit-log-etype-tdp';\n      case 'Global Data':          return 'cqa-audit-log-etype-gd';\n      default:                     return '';\n    }\n  }\n\n  public get hasDiff(): boolean {\n    return this.entry?.before != null || this.entry?.after != null;\n  }\n}\n","<div class=\"cqa-audit-log-meta cqa-font-inter\">\n  <div class=\"cqa-audit-log-ts\">{{ entry?.ts }}</div>\n  <div class=\"cqa-audit-log-user\">{{ userShortName }}</div>\n</div>\n<div class=\"cqa-min-w-0\">\n  <div class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-flex-wrap cqa-mb-1\">\n    <span class=\"cqa-audit-log-etype\" [ngClass]=\"etypeClass\">{{ entry?.entityType }}</span>\n    <span class=\"cqa-text-[13px] cqa-font-medium cqa-text-[#0F172A]\">{{ entry?.entityName }}</span>\n  </div>\n  <div class=\"cqa-text-xs cqa-text-[#64748B]\">{{ entry?.change }}</div>\n  <div *ngIf=\"hasDiff\" class=\"cqa-audit-log-diff\">\n    <span class=\"cqa-audit-log-before\">{{ entry?.before || '—' }}</span>\n    <span class=\"cqa-audit-log-arrow\">→</span>\n    <span class=\"cqa-audit-log-after\">{{ entry?.after || '—' }}</span>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { DynamicSelectFieldConfig, SelectOption } from '../dynamic-select/dynamic-select-field.component';\nimport {\n  ALL_FILTER_VALUE,\n  AuditDateRange,\n  AuditEntry,\n  AuditFilterOption,\n  AuditLogFilterState,\n} from './audit-log-drawer.models';\n\n@Component({\n  selector: 'cqa-audit-log-drawer',\n  templateUrl: './audit-log-drawer.component.html',\n  host: {\n    class: 'cqa-ui-root',\n    style: 'display:flex;flex-direction:column;height:100%;width:560px;max-width:100vw;background:#fff;box-shadow:-8px 0 32px rgba(15,23,42,.12);',\n  },\n})\nexport class AuditLogDrawerComponent implements OnInit, OnDestroy {\n  @Input() entries: AuditEntry[] = [];\n  @Input() entityTypeOptions: AuditFilterOption[] = [];\n  @Input() envOptions: AuditFilterOption[] = [];\n  @Input() userOptions: AuditFilterOption[] = [];\n  @Input() defaultRange: AuditDateRange = '7d';\n  @Input() isLoading = false;\n\n  @Output() filterChange = new EventEmitter<AuditLogFilterState>();\n  @Output() close = new EventEmitter<void>();\n\n  public readonly ALL = ALL_FILTER_VALUE;\n\n  public readonly filtersForm = new FormGroup({\n    entityType: new FormControl(ALL_FILTER_VALUE),\n    env:        new FormControl(ALL_FILTER_VALUE),\n    user:       new FormControl(ALL_FILTER_VALUE),\n    range:      new FormControl('7d' as AuditDateRange),\n  });\n\n  public entityConfig!: DynamicSelectFieldConfig;\n  public envConfig!: DynamicSelectFieldConfig;\n  public userConfig!: DynamicSelectFieldConfig;\n  public rangeConfig!: DynamicSelectFieldConfig;\n\n  public trackById = (_: number, e: AuditEntry): string => e.id;\n\n  private readonly destroy$ = new Subject<void>();\n  private readonly rangeMs: Record<AuditDateRange, number> = {\n    '24h': 24 * 60 * 60 * 1000,\n    '7d':  7  * 24 * 60 * 60 * 1000,\n    '30d': 30 * 24 * 60 * 60 * 1000,\n    'all': Number.POSITIVE_INFINITY,\n  };\n\n  ngOnInit(): void {\n    this.filtersForm.patchValue({ range: this.defaultRange });\n\n    this.entityConfig = this.buildSelectConfig('entityType', 'All entity types', this.entityTypeOptions);\n    this.envConfig    = this.buildSelectConfig('env',        'All environments', this.envOptions);\n    this.userConfig   = this.buildSelectConfig('user',       'All users',        this.userOptions);\n    this.rangeConfig  = this.buildSelectConfig('range', 'Last 7 days', [\n      { value: '24h', label: 'Last 24h' },\n      { value: '7d',  label: 'Last 7 days' },\n      { value: '30d', label: 'Last 30 days' },\n      { value: 'all', label: 'All time' },\n    ], false);\n\n    this.filtersForm.valueChanges\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.filterChange.emit(this.currentFilterState()));\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  public get filteredEntries(): AuditEntry[] {\n    const f = this.currentFilterState();\n    const cutoff = this.rangeMs[f.range];\n    const now = Date.now();\n    return (this.entries || []).filter(e => {\n      if (f.entityType !== ALL_FILTER_VALUE && e.entityType !== f.entityType) { return false; }\n      if (f.env !== ALL_FILTER_VALUE && !this.entryMatchesEnv(e, f.env)) { return false; }\n      if (f.user !== ALL_FILTER_VALUE && e.user !== f.user) { return false; }\n      if (cutoff !== Number.POSITIVE_INFINITY) {\n        const ts = this.parseTs(e.ts);\n        if (ts != null && now - ts > cutoff) { return false; }\n      }\n      return true;\n    });\n  }\n\n  public onClose(): void {\n    this.close.emit();\n  }\n\n  private entryMatchesEnv(entry: AuditEntry, env: string): boolean {\n    return (entry.entityName || '').toLowerCase().includes(env.toLowerCase());\n  }\n\n  private parseTs(ts: string): number | null {\n    if (!ts) { return null; }\n    const t = Date.parse(ts);\n    return Number.isNaN(t) ? null : t;\n  }\n\n  private currentFilterState(): AuditLogFilterState {\n    const v = this.filtersForm.value;\n    return {\n      entityType: v.entityType ?? ALL_FILTER_VALUE,\n      env:        v.env        ?? ALL_FILTER_VALUE,\n      user:       v.user       ?? ALL_FILTER_VALUE,\n      range:      (v.range as AuditDateRange) ?? '7d',\n    };\n  }\n\n  private buildSelectConfig(\n    key: string,\n    placeholder: string,\n    items: AuditFilterOption[],\n    includeAll: boolean = true,\n  ): DynamicSelectFieldConfig {\n    const options: SelectOption[] = [];\n    if (includeAll) {\n      options.push({ id: ALL_FILTER_VALUE, value: ALL_FILTER_VALUE, name: placeholder, label: placeholder });\n    }\n    for (const it of items) {\n      options.push({ id: it.value, value: it.value, name: it.label, label: it.label });\n    }\n    return {\n      key,\n      label: '',\n      placeholder,\n      multiple: false,\n      searchable: false,\n      options,\n    };\n  }\n}\n","<header class=\"cqa-flex cqa-items-start cqa-justify-between cqa-gap-3 cqa-px-[22px] cqa-py-[18px] cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0 cqa-font-inter\">\n  <div class=\"cqa-min-w-0\">\n    <h3 class=\"cqa-flex cqa-items-center cqa-gap-2 cqa-m-0 cqa-text-[15px] cqa-font-semibold cqa-text-[#0F172A]\">\n      <mat-icon class=\"cqa-text-primary\" style=\"font-size:18px;width:18px;height:18px;line-height:18px;color:#3F43EE;\">history</mat-icon>\n      Audit log\n    </h3>\n    <p class=\"cqa-text-xs cqa-text-[#64748B] cqa-mt-0.5 cqa-mb-0\">\n      All changes across environments, profiles, and globals. Read-only, append-only.\n    </p>\n  </div>\n  <button type=\"button\" class=\"cqa-audit-log-close-btn\" (click)=\"onClose()\" aria-label=\"Close audit log\">\n    <mat-icon>close</mat-icon>\n  </button>\n</header>\n\n<section class=\"cqa-grid cqa-gap-2 cqa-px-[22px] cqa-py-3 cqa-border-b cqa-border-[#E5E7EB] cqa-flex-shrink-0\"\n         style=\"grid-template-columns: repeat(4, minmax(0, 1fr)); background:#FAFBFC;\">\n  <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"entityConfig\"></cqa-dynamic-select>\n  <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"envConfig\"></cqa-dynamic-select>\n  <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"userConfig\"></cqa-dynamic-select>\n  <cqa-dynamic-select [form]=\"filtersForm\" [config]=\"rangeConfig\"></cqa-dynamic-select>\n</section>\n\n<div class=\"cqa-flex-1 cqa-overflow-y-auto\">\n  <cqa-full-table-loader *ngIf=\"isLoading\"></cqa-full-table-loader>\n  <ng-container *ngIf=\"!isLoading\">\n    <cqa-empty-state\n      *ngIf=\"filteredEntries.length === 0; else listTpl\"\n      title=\"No entries match your filters\"\n      description=\"Adjust the filters above to widen the search.\">\n    </cqa-empty-state>\n    <ng-template #listTpl>\n      <cqa-audit-log-entry-card\n        *ngFor=\"let e of filteredEntries; trackBy: trackById\"\n        [entry]=\"e\">\n      </cqa-audit-log-entry-card>\n    </ng-template>\n  </ng-container>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\n\nimport {\n  DynamicSelectFieldConfig,\n  SelectOption,\n} from '../dynamic-select/dynamic-select-field.component';\nimport {\n  AssignEnvironmentOption,\n  AssignEnvironmentsDialogValue,\n  AssignEnvironmentsMode,\n} from './assign-environments-dialog.models';\n\n@Component({\n  selector: 'cqa-assign-environments-dialog',\n  templateUrl: './assign-environments-dialog.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: { class: 'cqa-ui-root', style: 'display:block;width:100%;' },\n})\nexport class AssignEnvironmentsDialogComponent implements OnInit {\n  @Input() mode: AssignEnvironmentsMode = 'assign';\n  @Input() profileName: string = '';\n  @Input() environments: AssignEnvironmentOption[] = [];\n  @Input() assignedEnvironments: AssignEnvironmentOption[] = [];\n  @Input() defaultSourceEnvId?: number;\n\n  public readonly selected = new Set<number>();\n\n  public readonly sourceForm = new FormGroup({\n    sourceEnvId: new FormControl(null),\n  });\n  public sourceConfig: DynamicSelectFieldConfig = this.buildSourceConfig([]);\n\n  public sourceError: string | null = null;\n\n  constructor(private readonly cdr: ChangeDetectorRef) {}\n\n  ngOnInit(): void {\n    // Source picker appears in both modes when there are already-attached envs\n    // to copy from. In clone mode it's required; in assign mode it's optional\n    // (falling back to the base profile rows when no source is picked).\n    if (this.showSourcePicker) {\n      const initial = this.defaultSourceEnvId != null\n        ? this.defaultSourceEnvId\n        : (this.mode === 'clone' && this.assignedEnvironments && this.assignedEnvironments.length\n          ? this.assignedEnvironments[0].id\n          : null);\n      this.sourceForm.get('sourceEnvId')!.setValue(initial);\n      this.sourceConfig = this.buildSourceConfig(this.assignedEnvironments ?? []);\n    }\n  }\n\n  public get showSourcePicker(): boolean {\n    return (this.assignedEnvironments && this.assignedEnvironments.length > 0);\n  }\n\n  public get sourceLabel(): string {\n    return this.mode === 'clone' ? 'Copy from which environment' : 'Copy rows from (optional)';\n  }\n\n  public get sourceHelper(): string {\n    if (this.sourceError) { return this.sourceError; }\n    return this.mode === 'clone'\n      ? \"The selected environment's rows will be copied into each target environment below.\"\n      : 'Pick an environment to copy its rows into the new ones. Leave blank to seed with the base profile rows.';\n  }\n\n  public get title(): string {\n    return this.mode === 'clone' ? 'Clone to other environments' : 'Assign to environments';\n  }\n\n  public get subtitle(): string {\n    const name = this.profileName ? `\"${this.profileName}\"` : 'this profile';\n    return this.mode === 'clone'\n      ? `Duplicate ${name} into other environments. Column structure is shared; row values are independent per environment.`\n      : `Make ${name} available in the selected environments. Columns are shared — each environment gets an independent row set.`;\n  }\n\n  public get primaryButtonLabel(): string {\n    const count = this.selected.size;\n    const verb = this.mode === 'clone' ? 'Clone to' : 'Assign to';\n    return `${verb} ${count} environment${count === 1 ? '' : 's'}`;\n  }\n\n  public get primaryDisabled(): boolean {\n    if (this.selected.size === 0) { return true; }\n    if (this.mode === 'clone' && this.sourceForm.get('sourceEnvId')!.value == null) { return true; }\n    return false;\n  }\n\n  public get selectableEnvironments(): AssignEnvironmentOption[] {\n    return this.environments ?? [];\n  }\n\n  public get hasAnySelectable(): boolean {\n    return (this.environments ?? []).some(e => !e.alreadyAssigned);\n  }\n\n  public get sourceValue(): number | null {\n    return this.sourceForm.get('sourceEnvId')!.value ?? null;\n  }\n\n  public isSelected(id: number): boolean {\n    return this.selected.has(id);\n  }\n\n  public toggle(env: AssignEnvironmentOption): void {\n    if (env.alreadyAssigned) { return; }\n    if (this.selected.has(env.id)) {\n      this.selected.delete(env.id);\n    } else {\n      this.selected.add(env.id);\n    }\n    this.cdr.markForCheck();\n  }\n\n  public helperFor(env: AssignEnvironmentOption): string {\n    if (env.alreadyAssigned) { return 'Already assigned to this environment'; }\n    return env.description || '';\n  }\n\n  public getValue(): AssignEnvironmentsDialogValue | null {\n    if (this.selected.size === 0) { return null; }\n    const src = this.sourceValue;\n    if (this.mode === 'clone') {\n      if (src == null) {\n        this.sourceError = 'Pick the environment whose rows should be copied.';\n        this.cdr.markForCheck();\n        return null;\n      }\n      this.sourceError = null;\n      return { selectedIds: Array.from(this.selected), sourceEnvId: Number(src) };\n    }\n    // Assign mode: source is optional — include it when the user picked one.\n    this.sourceError = null;\n    return src != null\n      ? { selectedIds: Array.from(this.selected), sourceEnvId: Number(src) }\n      : { selectedIds: Array.from(this.selected) };\n  }\n\n  private buildSourceConfig(envs: AssignEnvironmentOption[]): DynamicSelectFieldConfig {\n    const options: SelectOption[] = (envs || []).map(e => ({\n      id: e.id,\n      value: e.id,\n      name: e.name,\n      label: e.name,\n      statusColor: e.color,\n    }));\n    return {\n      key: 'sourceEnvId',\n      label: '',\n      placeholder: 'Select source environment…',\n      multiple: false,\n      searchable: true,\n      options,\n    };\n  }\n}\n","<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-w-full\">\n\n  <!-- Source env picker: required in clone mode, optional in assign mode -->\n  <div *ngIf=\"showSourcePicker\" class=\"cqa-flex cqa-flex-col cqa-gap-2\">\n    <label class=\"cqa-text-sm cqa-font-medium cqa-text-gray-700\">{{ sourceLabel }}</label>\n    <cqa-dynamic-select\n      [form]=\"sourceForm\"\n      [config]=\"sourceConfig\">\n    </cqa-dynamic-select>\n    <span [class.cqa-text-red-600]=\"sourceError\" [class.cqa-text-gray-500]=\"!sourceError\" class=\"cqa-text-xs\">\n      {{ sourceHelper }}\n    </span>\n  </div>\n\n  <!-- Selectable envs -->\n  <div\n    *ngIf=\"hasAnySelectable || (environments?.length || 0) > 0\"\n    class=\"cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[340px] cqa-overflow-y-auto\">\n    <label\n      *ngFor=\"let env of selectableEnvironments\"\n      class=\"cqa-flex cqa-items-center cqa-gap-3 cqa-px-3 cqa-py-2.5 cqa-border cqa-rounded-[10px] cqa-bg-white cqa-transition-colors\"\n      [class.cqa-border-gray-200]=\"!isSelected(env.id) && !env.alreadyAssigned\"\n      [class.hover:cqa-border-indigo-200]=\"!env.alreadyAssigned && !isSelected(env.id)\"\n      [class.cqa-border-indigo-400]=\"isSelected(env.id)\"\n      [class.cqa-bg-indigo-50]=\"isSelected(env.id)\"\n      [class.cqa-opacity-50]=\"env.alreadyAssigned\"\n      [class.cqa-cursor-pointer]=\"!env.alreadyAssigned\"\n      [class.cqa-cursor-not-allowed]=\"env.alreadyAssigned\"\n      (click)=\"toggle(env)\">\n      <input\n        type=\"checkbox\"\n        class=\"cqa-w-4 cqa-h-4 cqa-cursor-pointer\"\n        [checked]=\"isSelected(env.id)\"\n        [disabled]=\"!!env.alreadyAssigned\"\n        (click)=\"$event.stopPropagation()\"\n        (change)=\"toggle(env)\" />\n\n      <span\n        class=\"cqa-inline-block cqa-w-2 cqa-h-2 cqa-rounded-full cqa-flex-none\"\n        [style.background]=\"env.color || '#3F43EE'\"></span>\n\n      <div class=\"cqa-flex cqa-flex-col cqa-min-w-0 cqa-flex-1\">\n        <div class=\"cqa-text-sm cqa-font-medium cqa-text-gray-900\">{{ env.name }}</div>\n        <div *ngIf=\"helperFor(env)\" class=\"cqa-text-xs cqa-text-gray-500 cqa-leading-[1.4]\">{{ helperFor(env) }}</div>\n      </div>\n    </label>\n  </div>\n\n  <div\n    *ngIf=\"(environments?.length || 0) === 0\"\n    class=\"cqa-py-8 cqa-px-4 cqa-text-center cqa-text-sm cqa-text-gray-500\">\n    All environments are already assigned to this profile.\n  </div>\n</div>\n","import { NgModule, forwardRef, Type, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NoopAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatNativeDateModule } from '@angular/material/core';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatInputModule } from '@angular/material/input';\nimport { OverlayModule, OverlayContainer } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NgxTypedJsModule } from 'ngx-typed-js';\nimport { ButtonComponent } from './button/button.component';\nimport { SearchBarComponent } from './search-bar/search-bar.component';\nimport { AutocompleteComponent } from './autocomplete/autocomplete.component';\nimport { SegmentControlComponent } from './segment-control/segment-control.component';\nimport { DialogComponent } from './dialog/dialog.component';\nimport { DynamicTableComponent } from './table/dynamic-table/dynamic-table.component';\nimport { DynamicCellTemplateDirective, DynamicHeaderTemplateDirective } from './table/dynamic-table/dynamic-cell.directive';\nimport { DynamicCellContainerDirective } from './table/dynamic-table/dynamic-cell-container.directive';\nimport { PaginationComponent } from './pagination/pagination.component';\nimport { ActionMenuButtonComponent } from './action-menu/action-menu.component';\nimport { OtherButtonComponent } from './other-button/other-button.component';\nimport { DynamicFilterComponent } from './filters/dynamic-filter/dynamic-filter.component';\nimport { DaterangepickerDirective } from './filters/daterangepicker/daterangepicker.directive';\nimport { DaterangepickerComponent } from './filters/daterangepicker/daterangepicker.component';\nimport { ColumnVisibilityComponent } from './column-visibility/column-visibility.component';\nimport { TableActionToolbarComponent } from './table-action-toolbar/table-action-toolbar.component';\nimport { MetricsCardComponent } from './dashboards/metrics-card/metrics-card.component';\nimport { MetricsBlockComponent } from './dashboards/metrics-card/metrics-block.component';\nimport { ChartCardComponent } from './dashboards/chart-card/chart-card.component';\nimport { ProgressTextCardComponent } from './dashboards/progress-text-card/progress-text-card.component';\nimport { DashboardHeaderComponent } from './dashboards/dashboard-header/dashboard-header.component';\nimport { WorkspaceSelectorComponent } from './dashboards/workspace-selector/workspace-selector.component';\nimport { CoverageModuleCardComponent } from './dashboards/coverage-module-card/coverage-module-card.component';\nimport { TestDistributionCardComponent } from './dashboards/test-distribution-card/test-distribution-card.component';\nimport { FailedTestCasesCardComponent } from './dashboards/failed-test-cases-card/failed-test-cases-card.component';\nimport { DynamicSelectFieldComponent } from './dynamic-select/dynamic-select-field.component';\nimport { AddPrerequisiteCasesSectionComponent } from './add-prerequisite-cases-section/add-prerequisite-cases-section.component';\nimport { SelectedFiltersComponent } from './selected-filters/selected-filters.component';\nimport { InsightCardComponent } from './dashboards/insight-card/insight-card.component';\nimport { BadgeComponent } from './badge/badge.component';\nimport { DropdownButtonComponent } from './dropdown-button/dropdown-button.component';\nimport { HeatErrorMapCellComponent } from './dashboards/heat-error-map-cell/heat-error-map-cell.component';\nimport { EmptyStateComponent } from './empty-state/empty-state.component';\nimport { TableTemplateComponent } from './templates/table-template.component';\nimport { ModularTableTemplateComponent } from './templates/modular-table-template/modular-table-template.component';\nimport { FolderSidebarComponent } from './templates/modular-table-template/folder-sidebar/folder-sidebar.component';\nimport { MoveToFolderDialogComponent } from './templates/modular-table-template/dialogs/move-to-folder-dialog.component';\nimport { MoveTestSuiteDialogComponent } from './test-suite/move-test-suite-dialog/move-test-suite-dialog.component';\nimport { NewFolderDialogComponent } from './templates/modular-table-template/dialogs/new-folder-dialog.component';\nimport { NamePromptModalComponent } from './dialogs/name-prompt-modal.component';\nimport { DeleteFolderDialogComponent } from './templates/modular-table-template/dialogs/delete-folder-dialog.component';\nimport { RowDragDirective } from './templates/modular-table-template/directives/row-drag.directive';\nimport { FolderDropDirective } from './templates/modular-table-template/directives/folder-drop.directive';\nimport { FolderDragDirective } from './templates/modular-table-template/directives/folder-drag.directive';\nimport { TailwindOverlayContainer } from './utils/tw-overlay-container';\nimport { FullTableLoaderComponent } from './full-table-loader/full-table-loader.component';\nimport { TableDataLoaderComponent } from './table-data-loader/table-data-loader.component';\nimport { SidebarComponent } from './sidebar/sidebar.component';\nimport { NavMenuComponent } from './sidebar/nav-menu.component';\nimport { NavItemComponent } from './sidebar/nav-item.component';\nimport { NavSubItemComponent } from './sidebar/nav-sub-item.component';\nimport { ProfileMenuComponent } from './sidebar/profile-menu/profile-menu.component';\nimport { WorkspaceMenuComponent } from './sidebar/workspace-menu/workspace-menu.component';\nimport { STEP_COMPONENT_MAP } from './execution-screen/step-registry.token';\nimport { BasicStepComponent } from './execution-screen/basic-step/basic-step.component';\nimport { StepRendererComponent } from './execution-screen/step-renderer/step-renderer.component';\nimport { StepGroupComponent } from './execution-screen/step-group/step-group.component';\nimport { LoopStepComponent } from './execution-screen/loop-step/loop-step.component';\nimport { ConditionStepComponent } from './execution-screen/condition-step/condition-step.component';\nimport { FailedStepComponent } from './execution-screen/failed-step/failed-step.component';\nimport { UpdatedFailedStepComponent } from './execution-screen/updated-failed-step/updated-failed-step.component';\nimport { ViewMoreFailedStepButtonComponent } from './execution-screen/view-more-failed-step-button/view-more-failed-step-button.component';\nimport { SelfHealAnalysisComponent } from './execution-screen/self-heal-analysis/self-heal-analysis.component';\nimport { AIAgentStepComponent } from './execution-screen/ai-agent-step/ai-agent-step.component';\nimport { AIActionStepComponent } from './execution-screen/ai-action-step/ai-action-step.component';\nimport { ApiStepComponent } from './execution-screen/api-step/api-step.component';\nimport { FileDownloadStepComponent } from './execution-screen/file-download-step/file-download-step.component';\nimport { DocumentVerificationStepComponent } from './execution-screen/document-verification-step/document-verification-step.component';\nimport { LiveExecutionStepComponent } from './execution-screen/live-execution-step/live-execution-step.component';\nimport { AiLogsWithReasoningComponent } from './execution-screen/ai-logs-with-reasoning/ai-logs-with-reasoning.component';\nimport { JumpToStepModalComponent } from './execution-screen/jump-to-step-modal/jump-to-step-modal.component';\nimport { BreakpointsModalComponent } from './execution-screen/breakpoints-modal/breakpoints-modal.component';\nimport { RecordingBannerComponent } from './execution-screen/recording-banner/recording-banner.component';\nimport { ReviewRecordedStepsModalComponent } from './execution-screen/review-recorded-steps-modal/review-recorded-steps-modal.component';\nimport { MainStepCollapseComponent } from './execution-screen/main-step-collapse/main-step-collapse.component';\nimport { VisualComparisonComponent } from './execution-screen/visual-comparison/visual-comparison.component';\nimport { SimulatorComponent } from './simulator/simulator.component';\nimport { ConsoleAlertComponent } from './console-alert/console-alert.component';\nimport { AiDebugAlertComponent } from './ai-debug-alert/ai-debug-alert.component';\nimport { NetworkRequestComponent } from './network-request/network-request.component';\nimport { RunHistoryCardComponent } from './run-history-card/run-history-card.component';\nimport { AiPromptCardComponent } from './ai-prompt-card/ai-prompt-card.component';\nimport { VisualDifferenceModalComponent } from './visual-difference-modal/visual-difference-modal.component';\nimport { ConfigurationCardComponent } from './configuration-card/configuration-card.component';\nimport { CompareRunsComponent } from './compare-runs/compare-runs.component';\nimport { ViewCompareButtonComponent } from './compare-runs/view-compare-button.component';\nimport { TestCaseLinkCellComponent } from './compare-runs/test-case-link-cell.component';\nimport { IterationsLoopComponent } from './iterations-loop/iterations-loop.component';\nimport { FailedStepCardComponent } from './failed-step-card/failed-step-card.component';\nimport { CustomInputComponent } from './custom-input/custom-input.component';\nimport { MixedVariableInputComponent } from './mixed-variable-input/mixed-variable-input.component';\nimport { CustomTextareaComponent } from './custom-textarea/custom-textarea.component';\nimport { CodeEditorComponent } from './code-editor/code-editor.component';\nimport { MonacoEditorModule } from 'ngx-monaco-editor';\nimport { CustomToggleComponent } from './custom-toggle/custom-toggle.component';\nimport { FileUploadComponent } from './file-upload/file-upload.component';\nimport { AiReasoningComponent } from './ai-reasoning/ai-reasoning.component';\nimport { ExecutionResultModalComponent } from './execution-result-modal/execution-result-modal.component';\nimport { SessionChangesModalComponent } from './execution-screen/session-changes-modal/session-changes-modal.component';\nimport { ErrorModalComponent } from './error-modal/error-modal.component';\nimport { SessionRestorationDialogComponent } from './session-restoration-dialog/session-restoration-dialog.component';\nimport { CaptureVideoDialogComponent } from './capture-video-dialog/capture-video-dialog.component';\nimport { ExportCodeModalComponent } from './export-code-modal/export-code-modal.component';\nimport { ProgressIndicatorComponent } from './progress-indicator/progress-indicator.component';\nimport { StepProgressCardComponent } from './step-progress-card/step-progress-card.component';\nimport { StepStatusCardComponent } from './step-status-card/step-status-card.component';\nimport { DbVerificationStepComponent } from './execution-screen/db-verification-step/db-verification-step.component';\nimport { DbQueryExecutionItemComponent } from './execution-screen/db-query-execution-item/db-query-execution-item.component';\nimport { TestCaseNormalStepComponent } from './test-case-details/normal-step/normal-step.component';\nimport { TestCaseLoopStepComponent } from './test-case-details/loop-step/loop-step.component';\nimport { TestCaseConditionStepComponent } from './test-case-details/condition-step/condition-step.component';\nimport { TestCaseStepGroupComponent } from './test-case-details/step-group/step-group.component';\nimport { TestCaseDetailsRendererComponent } from './test-case-details/test-case-details-renderer/test-case-details-renderer.component';\nimport { TestCaseApiStepComponent } from './test-case-details/api-step/api-step.component';\nimport { TestCaseDatabaseStepComponent } from './test-case-details/database-step/database-step.component';\nimport { TestCaseAiAgentStepComponent } from './test-case-details/ai-agent-step/ai-agent-step.component';\nimport { TestCaseAiVerifyStepComponent } from './test-case-details/ai-verify-step/ai-verify-step.component';\nimport { TestCaseUploadStepComponent } from './test-case-details/upload-step/upload-step.component';\nimport { TestCaseScreenshotStepComponent } from './test-case-details/screenshot-step/screenshot-step.component';\nimport { TestCaseScrollStepComponent } from './test-case-details/scroll-step/scroll-step.component';\nimport { TestCaseVerifyUrlStepComponent } from './test-case-details/verify-url-step/verify-url-step.component';\nimport { TestCaseRestoreSessionStepComponent } from './test-case-details/restore-session-step/restore-session-step.component';\nimport { TestCaseCustomCodeStepComponent } from './test-case-details/custom-code-step/custom-code-step.component';\nimport { CustomEditStepComponent } from './test-case-details/custom-edit-step/custom-edit-step.component';\nimport { ItemListComponent } from './item-list/item-list.component';\nimport { TestDataModalComponent } from './test-case-details/test-data-modal/test-data-modal.component';\nimport { CreateStepGroupComponent } from './test-case-details/create-step-group/create-step-group.component';\nimport { DeleteStepsComponent } from './test-case-details/delete-steps/delete-steps.component';\nimport { RunExecutionAlertComponent } from './test-case-details/run-execution-alert/run-execution-alert.component';\nimport { ApiEditStepComponent } from './test-case-details/api-edit-step/api-edit-step.component';\nimport { TEST_CASE_STEP_COMPONENT_MAP } from './test-case-details/test-case-step-components.token';\nimport { LiveConversationComponent } from './live-conversation/live-conversation.component';\nimport { DndModule } from 'ngx-drag-drop';\nimport { StepBuilderActionComponent } from './step-builder/step-builder-action/step-builder-action.component';\nimport { StepBuilderLoopComponent } from './step-builder/step-builder-loop/step-builder-loop.component';\nimport { ElementPopupComponent } from './test-case-details/element-popup/element-popup.component';\nimport { ElementFormComponent } from './test-case-details/element-popup/element-form/element-form.component';\nimport { StepBuilderConditionComponent } from './step-builder/step-builder-condition/step-builder-condition.component';\nimport { StepBuilderDatabaseComponent } from './step-builder/step-builder-database/step-builder-database.component';\nimport { StepBuilderAiAgentComponent } from './step-builder/step-builder-ai-agent/step-builder-ai-agent.component';\nimport { StepBuilderCustomCodeComponent } from './step-builder/step-builder-custom-code/step-builder-custom-code.component';\nimport { StepBuilderRecordStepComponent } from './step-builder/step-builder-record-step/step-builder-record-step.component';\nimport { StepBuilderDocumentGenerationTemplateStepComponent } from './step-builder/step-builder-document-generation-template-step/step-builder-document-generation-template-step.component';\nimport { ElementListComponent } from './test-case-details/element-list/element-list.component';\nimport { StepBuilderDocumentComponent } from './step-builder/step-builder-document/step-builder-document.component';\nimport { DetailSidePanelComponent } from './detail-side-panel/detail-side-panel.component';\nimport { DetailDrawerComponent } from './detail-drawer/detail-drawer.component';\nimport { DetailDrawerTabComponent } from './detail-drawer/detail-drawer-tab/detail-drawer-tab.component';\nimport { DetailDrawerTabContentDirective } from './detail-drawer/detail-drawer-tab-content.directive';\nimport { TestCaseDetailsComponent } from './test-case-details/test-case-details.component';\nimport { TestCaseDetailsEditComponent } from './test-case-details/test-case-details-edit/test-case-details-edit.component';\nimport { ApiMockingCardComponent } from './test-case-details/api-mocking-card/api-mocking-card.component';\nimport { StepBuilderGroupComponent } from './step-builder/step-builder-group/step-builder-group.component';\nimport { StepDetailsDrawerComponent } from './test-case-details/step-details-drawer/step-details-drawer.component';\nimport { TemplateVariablesFormComponent } from './step-builder/template-variables-form/template-variables-form.component';\nimport { AdvancedVariablesFormComponent } from './step-builder/advanced-variables-form/advanced-variables-form.component';\nimport { StepDetailsModalComponent } from './test-case-details/step-details-modal/step-details-modal.component';\nimport { SafeHtmlPipe } from './pipes/safe-html.pipe';\nimport { CamelToTitlePipe } from './pipes/camel-to-title.pipe';\nimport { ConditionDebugStepComponent } from './execution-screen/condition-debug-step/condition-debug-step.component';\nimport { ConditionBranchEditorComponent } from './execution-screen/condition-debug-step/condition-branch-editor.component';\nimport { QuestionnaireListComponent } from './questionnaire-list/questionnaire-list.component';\nimport { ChangeHistoryComponent } from './change-history/change-history.component';\nimport { VersionHistoryListComponent } from './version-history/version-history-list/version-history-list.component';\nimport { VersionHistoryCompareComponent } from './version-history/version-history-compare/version-history-compare.component';\nimport { VersionHistoryDetailComponent } from './version-history/version-history-detail/version-history-detail.component';\nimport { VersionHistoryRestoreConfirmComponent } from './version-history/version-history-restore-confirm/version-history-restore-confirm.component';\nimport { NewVersionHistoryDetailComponent } from './version-history/new-version-history-detail/new-version-history-detail.component';\nimport { StepperComponent } from './stepper/stepper.component';\nimport { RadioCardGroupComponent } from './radio-card-group/radio-card-group.component';\nimport { ViewportSelectorComponent } from './viewport-selector/viewport-selector.component';\nimport { SubStepsConfirmationDialogComponent } from './sub-steps-confirmation-dialog/sub-steps-confirmation-dialog.component';\nimport { NewGlobalVariableDialogComponent } from './new-global-variable-dialog/new-global-variable-dialog.component';\nimport { NewEnvironmentDialogComponent } from './new-environment-dialog/new-environment-dialog.component';\nimport { NewEnvironmentVariableDialogComponent } from './new-environment-variable-dialog/new-environment-variable-dialog.component';\nimport { NewDbConfigDialogComponent } from './new-db-config-dialog/new-db-config-dialog.component';\nimport { NewTestDataProfileDialogComponent } from './new-test-data-profile-dialog/new-test-data-profile-dialog.component';\nimport { ManageColumnsDialogComponent } from './manage-columns-dialog/manage-columns-dialog.component';\nimport { AuditLogDrawerComponent } from './audit-log-drawer/audit-log-drawer.component';\nimport { AuditLogEntryCardComponent } from './audit-log-drawer/audit-log-entry-card.component';\nimport { AssignEnvironmentsDialogComponent } from './assign-environments-dialog/assign-environments-dialog.component';\nimport { PermissionToggleComponent } from './permission-toggle/permission-toggle.component';\n\n@NgModule({\n  declarations: [\n    ButtonComponent,\n    SearchBarComponent,\n    AutocompleteComponent,\n    SegmentControlComponent,\n    StepperComponent,\n    RadioCardGroupComponent,\n    ViewportSelectorComponent,\n    DialogComponent,\n    DynamicTableComponent,\n    DynamicCellTemplateDirective,\n    DynamicHeaderTemplateDirective,\n    DynamicCellContainerDirective,\n    PaginationComponent,\n    ActionMenuButtonComponent,\n    OtherButtonComponent,\n    DynamicFilterComponent,\n    DaterangepickerDirective,\n    DaterangepickerComponent,\n    ColumnVisibilityComponent,\n    TableActionToolbarComponent,\n    MetricsCardComponent,\n    MetricsBlockComponent,\n    ChartCardComponent,\n    ProgressTextCardComponent,\n    DashboardHeaderComponent,\n    WorkspaceSelectorComponent,\n    CoverageModuleCardComponent,\n    TestDistributionCardComponent,\n    FailedTestCasesCardComponent,\n    DynamicSelectFieldComponent,\n    AddPrerequisiteCasesSectionComponent,\n    SelectedFiltersComponent,\n    InsightCardComponent,\n    BadgeComponent,\n    DropdownButtonComponent,\n    HeatErrorMapCellComponent,\n    EmptyStateComponent,\n    TableTemplateComponent,\n    ModularTableTemplateComponent,\n    SidebarComponent,\n    NavMenuComponent,\n    NavItemComponent,\n    NavSubItemComponent,\n    ProfileMenuComponent,\n    WorkspaceMenuComponent,\n    FolderSidebarComponent,\n    MoveToFolderDialogComponent,\n    MoveTestSuiteDialogComponent,\n    NewFolderDialogComponent,\n    DeleteFolderDialogComponent,\n    RowDragDirective,\n    FolderDropDirective,\n    FolderDragDirective,\n    NamePromptModalComponent,\n    FullTableLoaderComponent,\n    TableDataLoaderComponent,\n    BasicStepComponent,\n    StepRendererComponent,\n    StepGroupComponent,\n    LoopStepComponent,\n    ConditionStepComponent,\n    ConditionDebugStepComponent,\n    ConditionBranchEditorComponent,\n    FailedStepComponent,\n    UpdatedFailedStepComponent,\n    ViewMoreFailedStepButtonComponent,\n    SelfHealAnalysisComponent,\n    AIAgentStepComponent,\n    AIActionStepComponent,\n    ApiStepComponent,\n    FileDownloadStepComponent,\n    DocumentVerificationStepComponent,\n    LiveExecutionStepComponent,\n    AiLogsWithReasoningComponent,\n    JumpToStepModalComponent,\n    BreakpointsModalComponent,\n    RecordingBannerComponent,\n    ReviewRecordedStepsModalComponent,\n    MainStepCollapseComponent,\n    VisualComparisonComponent,\n    SimulatorComponent,\n    ConsoleAlertComponent,\n    AiDebugAlertComponent,\n    NetworkRequestComponent,\n    RunHistoryCardComponent,\n    AiPromptCardComponent,\n    VisualDifferenceModalComponent,\n    ConfigurationCardComponent,\n    CompareRunsComponent,\n    ViewCompareButtonComponent,\n    TestCaseLinkCellComponent,\n    IterationsLoopComponent,\n    FailedStepCardComponent,\n    CustomInputComponent,\n    MixedVariableInputComponent,\n    CustomTextareaComponent,\n    CodeEditorComponent,\n    CustomToggleComponent,\n    FileUploadComponent,\n    AiReasoningComponent,\n    ExecutionResultModalComponent,\n    SessionChangesModalComponent,\n    ErrorModalComponent,\n    SessionRestorationDialogComponent,\n    CaptureVideoDialogComponent,\n    SubStepsConfirmationDialogComponent,\n    NewGlobalVariableDialogComponent,\n    NewEnvironmentDialogComponent,\n    NewEnvironmentVariableDialogComponent,\n    NewDbConfigDialogComponent,\n    NewTestDataProfileDialogComponent,\n    ManageColumnsDialogComponent,\n    AuditLogDrawerComponent,\n    AuditLogEntryCardComponent,\n    AssignEnvironmentsDialogComponent,\n    PermissionToggleComponent,\n    ExportCodeModalComponent,\n    ProgressIndicatorComponent,\n    StepProgressCardComponent,\n    StepStatusCardComponent,\n    DbVerificationStepComponent,\n    DbQueryExecutionItemComponent,\n    TestCaseNormalStepComponent,\n    TestCaseLoopStepComponent,\n    TestCaseConditionStepComponent,\n    TestCaseStepGroupComponent,\n    TestCaseDetailsRendererComponent,\n    TestCaseApiStepComponent,\n    TestCaseDatabaseStepComponent,\n    TestCaseAiAgentStepComponent,\n    TestCaseAiVerifyStepComponent,\n    TestCaseUploadStepComponent,\n    TestCaseScreenshotStepComponent,\n    TestCaseScrollStepComponent,\n    TestCaseVerifyUrlStepComponent,\n    TestCaseRestoreSessionStepComponent,\n    TestCaseCustomCodeStepComponent,\n    CustomEditStepComponent,\n    ItemListComponent,\n    TestDataModalComponent,\n    CreateStepGroupComponent,\n    DeleteStepsComponent,\n    RunExecutionAlertComponent,\n    ApiEditStepComponent,\n    LiveConversationComponent,\n    StepBuilderActionComponent,\n    StepBuilderLoopComponent,\n    ElementPopupComponent,\n    ElementFormComponent,\n    StepBuilderConditionComponent,\n    StepBuilderDatabaseComponent,\n    StepBuilderAiAgentComponent,\n    CodeEditorComponent,\n    StepBuilderCustomCodeComponent,\n    StepBuilderRecordStepComponent,\n    StepBuilderDocumentGenerationTemplateStepComponent,\n    ElementListComponent,\n    StepBuilderDocumentComponent,\n    DetailSidePanelComponent,\n    DetailDrawerComponent,\n    DetailDrawerTabComponent,\n    DetailDrawerTabContentDirective,\n    TestCaseDetailsComponent,\n    TestCaseDetailsEditComponent,\n    ApiMockingCardComponent,\n    StepBuilderGroupComponent,\n    StepDetailsDrawerComponent,\n    TemplateVariablesFormComponent,\n    AdvancedVariablesFormComponent,\n    StepDetailsModalComponent,\n    SafeHtmlPipe,\n    QuestionnaireListComponent,\n    ChangeHistoryComponent,\n    CamelToTitlePipe,\n    VersionHistoryListComponent,\n    VersionHistoryCompareComponent,\n    VersionHistoryDetailComponent,\n    VersionHistoryRestoreConfirmComponent,\n    NewVersionHistoryDetailComponent,\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule,\n    NoopAnimationsModule,\n    MatIconModule,\n    MatMenuModule,\n    MatButtonModule,\n    MatFormFieldModule,\n    MatSelectModule,\n    MatOptionModule,\n    MatCheckboxModule,\n    MatRadioModule,\n    MatSlideToggleModule,\n    MatDatepickerModule,\n    MatNativeDateModule,\n    MatProgressSpinnerModule,\n    MatTooltipModule,\n    MatDialogModule,\n    MatTableModule,\n    MatInputModule,\n    OverlayModule,\n    PortalModule,\n    ScrollingModule,\n    NgxTypedJsModule,\n    DndModule,\n    MonacoEditorModule\n  ],\n  exports: [\n    ButtonComponent,\n    SearchBarComponent,\n    AutocompleteComponent,\n    SegmentControlComponent,\n    StepperComponent,\n    RadioCardGroupComponent,\n    ViewportSelectorComponent,\n    DialogComponent,\n    DynamicTableComponent,\n    DynamicCellTemplateDirective,\n    DynamicHeaderTemplateDirective,\n    DynamicCellContainerDirective,\n    PaginationComponent,\n    ActionMenuButtonComponent,\n    OtherButtonComponent,\n    DynamicFilterComponent,\n    DaterangepickerDirective,\n    DaterangepickerComponent,\n    ColumnVisibilityComponent,\n    TableActionToolbarComponent,\n    MetricsCardComponent,\n    ChartCardComponent,\n    ProgressTextCardComponent,\n    DashboardHeaderComponent,\n    WorkspaceSelectorComponent,\n    CoverageModuleCardComponent,\n    TestDistributionCardComponent,\n    FailedTestCasesCardComponent,\n    DynamicSelectFieldComponent,\n    AddPrerequisiteCasesSectionComponent,\n    SelectedFiltersComponent,\n    InsightCardComponent,\n    BadgeComponent,\n    DropdownButtonComponent,\n    HeatErrorMapCellComponent,\n    EmptyStateComponent,\n    TableTemplateComponent,\n    ModularTableTemplateComponent,\n    SidebarComponent,\n    NavMenuComponent,\n    NavItemComponent,\n    NavSubItemComponent,\n    ProfileMenuComponent,\n    WorkspaceMenuComponent,\n    FolderSidebarComponent,\n    NewFolderDialogComponent,\n    DeleteFolderDialogComponent,\n    MoveToFolderDialogComponent,\n    MoveTestSuiteDialogComponent,\n    RowDragDirective,\n    FolderDropDirective,\n    FolderDragDirective,\n    NamePromptModalComponent,\n    FullTableLoaderComponent,\n    TableDataLoaderComponent,\n    BasicStepComponent,\n    StepRendererComponent,\n    StepGroupComponent,\n    LoopStepComponent,\n    ConditionStepComponent,\n    ConditionDebugStepComponent,\n    ConditionBranchEditorComponent,\n    FailedStepComponent,\n    ConditionDebugStepComponent,\n    UpdatedFailedStepComponent,\n    ViewMoreFailedStepButtonComponent,\n    SelfHealAnalysisComponent,\n    AIAgentStepComponent,\n    AIActionStepComponent,\n    ApiStepComponent,\n    FileDownloadStepComponent,\n    DocumentVerificationStepComponent,\n    LiveExecutionStepComponent,\n    AiLogsWithReasoningComponent,\n    JumpToStepModalComponent,\n    BreakpointsModalComponent,\n    RecordingBannerComponent,\n    ReviewRecordedStepsModalComponent,\n    MainStepCollapseComponent,\n    VisualComparisonComponent,\n    SimulatorComponent,\n    ConsoleAlertComponent,\n    AiDebugAlertComponent,\n    NetworkRequestComponent,\n    RunHistoryCardComponent,\n    AiPromptCardComponent,\n    VisualDifferenceModalComponent,\n    ConfigurationCardComponent,\n    CompareRunsComponent,\n    ViewCompareButtonComponent,\n    TestCaseLinkCellComponent,\n    IterationsLoopComponent,\n    FailedStepCardComponent,\n    CustomInputComponent,\n    MixedVariableInputComponent,\n    CustomTextareaComponent,\n    CodeEditorComponent,\n    CustomToggleComponent,\n    FileUploadComponent,\n    AiReasoningComponent,\n    ExecutionResultModalComponent,\n    SessionChangesModalComponent,\n    ErrorModalComponent,\n    SessionRestorationDialogComponent,\n    CaptureVideoDialogComponent,\n    SubStepsConfirmationDialogComponent,\n    NewGlobalVariableDialogComponent,\n    NewEnvironmentDialogComponent,\n    NewEnvironmentVariableDialogComponent,\n    NewDbConfigDialogComponent,\n    NewTestDataProfileDialogComponent,\n    ManageColumnsDialogComponent,\n    AuditLogDrawerComponent,\n    AuditLogEntryCardComponent,\n    AssignEnvironmentsDialogComponent,\n    PermissionToggleComponent,\n    ExportCodeModalComponent,\n    ProgressIndicatorComponent,\n    StepProgressCardComponent,\n    StepStatusCardComponent,\n    DbVerificationStepComponent,\n    DbQueryExecutionItemComponent,\n    TestCaseNormalStepComponent,\n    TestCaseLoopStepComponent,\n    TestCaseConditionStepComponent,\n    TestCaseStepGroupComponent,\n    TestCaseDetailsRendererComponent,\n    TestCaseApiStepComponent,\n    TestCaseDatabaseStepComponent,\n    TestCaseAiAgentStepComponent,\n    TestCaseUploadStepComponent,\n    TestCaseScreenshotStepComponent,\n    TestCaseScrollStepComponent,\n    TestCaseVerifyUrlStepComponent,\n    TestCaseRestoreSessionStepComponent,\n    TestCaseCustomCodeStepComponent,\n    CustomEditStepComponent,\n    ItemListComponent,\n    TestDataModalComponent,\n    CreateStepGroupComponent,\n    DeleteStepsComponent,\n    RunExecutionAlertComponent,\n    ApiEditStepComponent,\n    LiveConversationComponent,\n    StepBuilderActionComponent,\n    StepBuilderLoopComponent,\n    ElementPopupComponent,\n    ElementFormComponent,\n    StepBuilderConditionComponent,\n    StepBuilderDatabaseComponent,\n    StepBuilderAiAgentComponent,\n    CodeEditorComponent,\n    StepBuilderCustomCodeComponent,\n    StepBuilderRecordStepComponent,\n    StepBuilderDocumentGenerationTemplateStepComponent,\n    ElementListComponent,\n    StepBuilderDocumentComponent,\n    DetailSidePanelComponent,\n    DetailDrawerComponent,\n    DetailDrawerTabComponent,\n    DetailDrawerTabContentDirective,\n    TestCaseDetailsComponent,\n    TestCaseDetailsEditComponent,\n    ApiMockingCardComponent,\n    StepBuilderGroupComponent,\n    StepDetailsDrawerComponent,\n    TemplateVariablesFormComponent,\n    AdvancedVariablesFormComponent,\n    QuestionnaireListComponent,\n    ChangeHistoryComponent,\n    VersionHistoryListComponent,\n    VersionHistoryCompareComponent,\n    VersionHistoryDetailComponent,\n    VersionHistoryRestoreConfirmComponent,\n    NewVersionHistoryDetailComponent,\n  ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  providers: [\n    { provide: OverlayContainer, useClass: TailwindOverlayContainer },\n    {\n      provide: TEST_CASE_STEP_COMPONENT_MAP,\n      useValue: {\n        stepGroup: TestCaseStepGroupComponent,\n        conditionStep: TestCaseConditionStepComponent,\n        conditionDebugStep: ConditionDebugStepComponent,\n        loopStep: TestCaseLoopStepComponent,\n        normalStep: TestCaseNormalStepComponent,\n        apiStep: TestCaseApiStepComponent,\n        databaseStep: TestCaseDatabaseStepComponent,\n        aiAgentStep: TestCaseAiAgentStepComponent,\n        aiVerifyStep: TestCaseAiVerifyStepComponent,\n        uploadStep: TestCaseUploadStepComponent,\n        screenshotStep: TestCaseScreenshotStepComponent,\n        scrollStep: TestCaseScrollStepComponent,\n        verifyUrlStep: TestCaseVerifyUrlStepComponent,\n        restoreSessionStep: TestCaseRestoreSessionStepComponent,\n        customCodeStep: TestCaseCustomCodeStepComponent,\n      },\n    },\n    {\n      provide: STEP_COMPONENT_MAP,\n      useValue: new Map<string, Type<any>>([\n        ['basic', BasicStepComponent],\n        ['step-group', StepGroupComponent],\n        ['loop', LoopStepComponent],\n        ['condition', ConditionStepComponent],\n        ['condition-debug', ConditionDebugStepComponent],\n        ['failed', FailedStepComponent],\n        ['updated-failed', UpdatedFailedStepComponent],\n        ['ai-agent', AIAgentStepComponent],\n        ['ai-action', AIActionStepComponent],\n        ['api', ApiStepComponent],\n        ['file-download', FileDownloadStepComponent],\n        ['document-verification', DocumentVerificationStepComponent],\n        ['live-execution', LiveExecutionStepComponent],\n        ['db-verification', DbVerificationStepComponent],\n      ])\n    }\n  ]\n})\nexport class UiKitModule {\n  constructor(iconRegistry: MatIconRegistry) {\n    iconRegistry.registerFontClassAlias('material-symbols-outlined', 'material-symbols-outlined');\n  }\n}\n\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\nimport { AuditLogDrawerComponent } from './audit-log-drawer.component';\nimport {\n  AuditLogDrawerInputs,\n  AuditLogDrawerRef,\n  AuditLogFilterState,\n} from './audit-log-drawer.models';\n\n@Injectable({ providedIn: 'root' })\nexport class AuditLogDrawerService {\n  private currentOverlayRef: OverlayRef | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  public open(inputs: AuditLogDrawerInputs): AuditLogDrawerRef {\n    if (this.currentOverlayRef) {\n      this.currentOverlayRef.dispose();\n      this.currentOverlayRef = null;\n    }\n\n    const positionStrategy = this.overlay.position()\n      .global()\n      .right('0')\n      .top('0')\n      .bottom('0');\n\n    const overlayRef = this.overlay.create(new OverlayConfig({\n      hasBackdrop: true,\n      backdropClass: ['cqa-audit-log-drawer-backdrop'],\n      scrollStrategy: this.overlay.scrollStrategies.block(),\n      positionStrategy,\n      panelClass: ['cqa-audit-log-drawer-panel', 'cqa-ui-root'],\n      maxWidth: '100vw',\n      height: '100%',\n    }));\n\n    const portal = new ComponentPortal(AuditLogDrawerComponent, null, this.injector);\n    const componentRef = overlayRef.attach(portal);\n    const instance = componentRef.instance;\n\n    instance.entries = inputs.entries ?? [];\n    instance.entityTypeOptions = inputs.entityTypeOptions ?? [];\n    instance.envOptions = inputs.envOptions ?? [];\n    instance.userOptions = inputs.userOptions ?? [];\n    instance.defaultRange = inputs.defaultRange ?? '7d';\n    instance.isLoading = !!inputs.isLoading;\n    componentRef.changeDetectorRef.markForCheck();\n\n    const filterChange = new Subject<AuditLogFilterState>();\n    const afterClosed = new Subject<void>();\n\n    instance.filterChange.subscribe((s: AuditLogFilterState) => filterChange.next(s));\n\n    const closeAll = () => {\n      if (!this.currentOverlayRef) { return; }\n      overlayRef.dispose();\n      this.currentOverlayRef = null;\n      afterClosed.next();\n      afterClosed.complete();\n      filterChange.complete();\n    };\n\n    instance.close.subscribe(() => closeAll());\n    overlayRef.backdropClick().subscribe(() => closeAll());\n    overlayRef.keydownEvents()\n      .pipe(filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc'))\n      .subscribe(() => closeAll());\n\n    this.currentOverlayRef = overlayRef;\n\n    return {\n      filterChange$: filterChange.asObservable(),\n      afterClosed$: afterClosed.asObservable(),\n      close: () => closeAll(),\n      updateEntries: (entries) => {\n        instance.entries = entries ?? [];\n        componentRef.changeDetectorRef.markForCheck();\n      },\n      updateLoading: (isLoading) => {\n        instance.isLoading = !!isLoading;\n        componentRef.changeDetectorRef.markForCheck();\n      },\n    };\n  }\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { TestCaseStepConfig } from '../test-case-step.models';\nimport { StepDetailsDrawerComponent } from './step-details-drawer.component';\nimport { StepDetailsDrawerRef } from './step-details-drawer-ref';\nimport { STEP_DETAILS_DRAWER_REF } from './step-details-drawer-ref';\nimport { STEP_DETAILS_DRAWER_DATA, StepDetailsDrawerData } from './step-details-drawer-data';\n\nexport interface StepDetailsDrawerResult {\n  action: 'saveChanges' | 'saveAsTemplate' | 'cancel';\n  step?: TestCaseStepConfig;\n}\n\n/**\n * Opens the Step Details Drawer (Edit In Depth) as a right-side drawer overlay.\n * Matches the behavior of Element popup - opens as a right-side drawer panel.\n */\n@Injectable({ providedIn: 'root' })\nexport class StepDetailsDrawerService {\n  private currentRef: StepDetailsDrawerRef<StepDetailsDrawerResult> | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  /**\n   * Opens the Step Details Drawer as a right-side drawer overlay.\n   * @param data Step details drawer data\n   */\n  open(\n    data: StepDetailsDrawerData\n  ): StepDetailsDrawerRef<StepDetailsDrawerResult> {\n    if (this.currentRef) return this.currentRef;\n\n    // const drawerWidth = 480;\n\n    // Always use right-side drawer positioning (same as Element popup)\n    const positionStrategy = this.overlay\n      .position()\n      .global()\n      .right('0')\n      .top('0')\n      .bottom('0')\n      // .width(`${drawerWidth}px`);\n\n    const overlayRef = this.overlay.create(\n      new OverlayConfig({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.block(),\n        positionStrategy,\n        panelClass: ['cqa-step-details-drawer-panel', 'cqa-ui-root'],\n        // width: `${drawerWidth}px`,\n        maxWidth: '100vw',\n        height: '100%',\n      })\n    );\n\n    const drawerRef = new StepDetailsDrawerRef<StepDetailsDrawerResult>(overlayRef);\n    const injector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: STEP_DETAILS_DRAWER_REF, useValue: drawerRef },\n        { provide: STEP_DETAILS_DRAWER_DATA, useValue: data },\n      ],\n    });\n\n    const portal = new ComponentPortal(StepDetailsDrawerComponent, undefined, injector);\n    overlayRef.attach(portal);\n\n    this.currentRef = drawerRef;\n    drawerRef.afterClosed().subscribe(() => { this.currentRef = null; });\n    overlayRef.backdropClick().subscribe(() => drawerRef.close({ action: 'cancel' }));\n    overlayRef\n      .keydownEvents()\n      .pipe(filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc'))\n      .subscribe(() => drawerRef.close({ action: 'cancel' }));\n\n    return drawerRef;\n  }\n}\n","/**\n * Configuration for Step Details Drawer (Edit In Depth).\n * Form is fully dynamic by Step Type – no hardcoded field lists.\n */\n\nimport type { DynamicFieldConfig } from './step-details-drawer-data';\nimport {\n  TestCaseStepConfig,\n  NormalStepConfig,\n  ApiStepConfig,\n  AiAgentStepConfig,\n  isNormalStepConfig,\n  isApiStepConfig,\n  isAiAgentStepConfig,\n} from '../test-case-step.models';\n\n/** Field keys used for configuration-based rendering. */\nexport type StepDetailsFieldKey =\n  | 'description'\n  | 'metadata'\n  | 'retryCount'\n  | 'advanced'\n  | 'method'\n  | 'url'\n  | 'headers'\n  | 'body'\n  | 'saveOutputAsVariable'\n  | 'agentTask'\n  | 'type'\n  | 'environment'\n  | 'maxRetries'\n  | 'onlyUseAttachedContext'\n  | 'takeScreenshotsWhenVerifying'\n  | 'iframeLocator'\n  | 'otherLocators'\n  | 'continueOnError'\n  | 'disabled';\n\n/** Step type for the drawer (drives which fields are shown). */\nexport type StepDetailsStepType = 'custom' | 'api' | 'aiAgent';\n\n/**\n * Resolves drawer step type from a test case step config.\n */\nexport function getStepDetailsStepType(step: TestCaseStepConfig | null | undefined): StepDetailsStepType | null {\n  if (!step) return null;\n  if (isApiStepConfig(step)) return 'api';\n  if (isAiAgentStepConfig(step)) return 'aiAgent';\n  if (isNormalStepConfig(step) && (step as NormalStepConfig).eventType === 'custom') return 'custom';\n  return null;\n}\n\n/**\n * Fields shown per step type (configuration-based).\n * Custom: Description, Metadata, Retry Count (if configured), Advanced (if configured).\n * API: Method, URL, Headers, Body, Save Output as Variable, Advanced (if configured).\n * AI Agent: Agent Task, Type, Metadata, Environment, Description, Constraints (toggles + Max Retries), Advanced (toggles + Retry Count, Iframe locator, Other Locators).\n */\nexport const STEP_DETAILS_FIELDS_BY_TYPE: Record<StepDetailsStepType, StepDetailsFieldKey[]> = {\n  custom: ['description', 'metadata', 'retryCount', 'advanced'],\n  api: ['method', 'url', 'headers', 'body', 'saveOutputAsVariable', 'advanced'],\n  aiAgent: [\n    'agentTask',\n    'type',\n    'metadata',\n    'environment',\n    'description',\n    'onlyUseAttachedContext',\n    'takeScreenshotsWhenVerifying',\n    'maxRetries',\n    'advanced',\n    'retryCount',\n    'iframeLocator',\n    'otherLocators',\n  ],\n};\n\n/** Section for grouping fields (main form, constraints, or inside advanced). */\nexport type StepDetailsFieldSection = 'main' | 'constraints' | 'advanced';\n\n/** Option for dropdown fields (value/label). */\nexport interface StepDetailsSelectOption {\n  value: string;\n  label: string;\n}\n\n/** Metadata per field (label, placeholder, control type, visibility). */\nexport interface StepDetailsFieldMeta {\n  key: StepDetailsFieldKey;\n  label: string;\n  placeholder?: string;\n  controlType: 'text' | 'textarea' | 'dropdown' | 'code' | 'toggleGroup' | 'toggle';\n  /** Section for grouping; used for conditional headings (e.g. \"Constraints\"). */\n  section?: StepDetailsFieldSection;\n  /** Dropdown options (for controlType === 'dropdown'). */\n  options?: StepDetailsSelectOption[];\n  /** Whether the field is required (e.g. show Required pill). */\n  required?: boolean;\n  /** Textarea rows. */\n  rows?: number;\n  /** Helper text or tip below the field. */\n  tip?: string;\n  /** Sub-label or description for toggles (e.g. \"Only use elements from the attached context\"). */\n  subLabel?: string;\n}\n\nexport const STEP_DETAILS_FIELD_META: Record<StepDetailsFieldKey, StepDetailsFieldMeta> = {\n  description: { key: 'description', label: 'Description', placeholder: 'Text Input', controlType: 'text', section: 'main' },\n  metadata: { key: 'metadata', label: 'Metadata', placeholder: 'Text Input', controlType: 'text', section: 'main' },\n  retryCount: {\n    key: 'retryCount',\n    label: 'Retry Count',\n    placeholder: 'Dynamic search selector from library or manual',\n    controlType: 'dropdown',\n    section: 'advanced',\n    options: [\n      { value: '0', label: '0' },\n      { value: '1', label: '1' },\n      { value: '2', label: '2' },\n      { value: '3', label: '3' },\n    ],\n  },\n  advanced: { key: 'advanced', label: 'Advanced', controlType: 'toggleGroup' },\n  method: {\n    key: 'method',\n    label: 'Method',\n    placeholder: 'Method',\n    controlType: 'dropdown',\n    section: 'main',\n    options: [\n      { value: 'GET', label: 'GET' },\n      { value: 'POST', label: 'POST' },\n      { value: 'PUT', label: 'PUT' },\n      { value: 'DELETE', label: 'DELETE' },\n      { value: 'PATCH', label: 'PATCH' },\n    ],\n  },\n  url: { key: 'url', label: 'URL', placeholder: 'URL', controlType: 'text', section: 'main' },\n  headers: { key: 'headers', label: 'Headers', controlType: 'text', section: 'main' },\n  body: { key: 'body', label: 'Body', placeholder: 'Request body', controlType: 'code', section: 'main' },\n  saveOutputAsVariable: {\n    key: 'saveOutputAsVariable',\n    label: 'Save Output as Variable',\n    placeholder: 'Variable name',\n    controlType: 'text',\n    section: 'main',\n  },\n  agentTask: {\n    key: 'agentTask',\n    label: 'Agent Task',\n    placeholder: 'What should the agent achieve?',\n    controlType: 'textarea',\n    section: 'main',\n    required: true,\n    rows: 4,\n    tip: 'Tip: Use numbered steps or bullet points for complex tasks.',\n  },\n  type: {\n    key: 'type',\n    label: 'Type',\n    placeholder: 'Type',\n    controlType: 'dropdown',\n    section: 'main',\n    options: [\n      { value: 'default', label: 'Default' },\n      { value: 'browser', label: 'Browser' },\n    ],\n  },\n  environment: {\n    key: 'environment',\n    label: 'Environment',\n    placeholder: 'Environment',\n    controlType: 'dropdown',\n    section: 'main',\n    options: [\n      { value: 'default', label: 'Default' },\n      { value: 'staging', label: 'Staging' },\n      { value: 'prod', label: 'Production' },\n    ],\n  },\n  maxRetries: {\n    key: 'maxRetries',\n    label: 'Max Retries',\n    placeholder: '3 retries (recommended)',\n    controlType: 'dropdown',\n    section: 'constraints',\n    options: [\n      { value: '0', label: '0' },\n      { value: '1', label: '1' },\n      { value: '2', label: '2' },\n      { value: '3', label: '3 retries (recommended)' },\n    ],\n  },\n  onlyUseAttachedContext: {\n    key: 'onlyUseAttachedContext',\n    label: 'Use existing elements only',\n    subLabel: 'Only use elements from the attached context',\n    controlType: 'toggle',\n    section: 'constraints',\n  },\n  takeScreenshotsWhenVerifying: {\n    key: 'takeScreenshotsWhenVerifying',\n    label: 'Capture evidence',\n    subLabel: 'Take screenshots when verifying conditions',\n    controlType: 'toggle',\n    section: 'constraints',\n  },\n  iframeLocator: {\n    key: 'iframeLocator',\n    label: 'Iframe locator',\n    placeholder: 'Dynamic search selector from library or manual',\n    controlType: 'dropdown',\n    section: 'advanced',\n    options: [\n      { value: 'manual', label: 'Dynamic search selector from library or manual' },\n    ],\n  },\n  otherLocators: {\n    key: 'otherLocators',\n    label: 'Other Locators',\n    placeholder: 'Dynamic search selector from library or manual',\n    controlType: 'dropdown',\n    section: 'advanced',\n    options: [\n      { value: 'manual', label: 'Dynamic search selector from library or manual' },\n    ],\n  },\n  continueOnError: {\n    key: 'continueOnError',\n    label: 'Continue on Error',\n    subLabel: \"Don't fail the test if this step fails.\",\n    controlType: 'toggle',\n    section: 'advanced',\n  },\n  disabled: {\n    key: 'disabled',\n    label: 'Disabled',\n    subLabel: 'Skip this step during execution.',\n    controlType: 'toggle',\n    section: 'advanced',\n  },\n};\n\n/** Toggle fields always shown inside the Advanced section. */\nexport const ADVANCED_TOGGLE_KEYS: StepDetailsFieldKey[] = ['continueOnError', 'disabled'];\n\n/** Field keys shown inside Advanced (per step type), in addition to ADVANCED_TOGGLE_KEYS. */\nexport const ADVANCED_SUBFIELDS_BY_TYPE: Record<StepDetailsStepType, StepDetailsFieldKey[]> = {\n  custom: [],\n  api: [],\n  aiAgent: ['retryCount', 'iframeLocator', 'otherLocators'],\n};\n\n/**\n * Converts legacy step-type config to DynamicFieldConfig[] for backward compatibility.\n * Use when opening the drawer without API-provided dynamic fields (e.g. Storybook, migration).\n */\nexport function getDynamicFieldsFromLegacyConfig(\n  step: TestCaseStepConfig | null | undefined\n): DynamicFieldConfig[] {\n  const type = getStepDetailsStepType(step);\n  if (!type) return [];\n\n  const keys = STEP_DETAILS_FIELDS_BY_TYPE[type].filter((k) => k !== 'advanced');\n  const result: DynamicFieldConfig[] = [];\n\n  for (const key of keys) {\n    const meta = STEP_DETAILS_FIELD_META[key];\n    if (!meta) continue;\n\n    const typeMap = {\n      text: 'string' as const,\n      textarea: 'textarea' as const,\n      code: 'code' as const,\n      dropdown: 'dropdown' as const,\n      toggle: 'boolean' as const,\n      toggleGroup: undefined,\n    };\n    const fieldType = meta.controlType === 'toggleGroup' ? undefined : typeMap[meta.controlType];\n\n    result.push({\n      key: meta.key,\n      label: meta.label,\n      type: fieldType ?? 'string',\n      section: meta.section ?? 'main',\n      options: meta.options?.map((o) => ({ label: o.label, value: o.value })),\n      placeholder: meta.placeholder,\n      required: meta.required,\n      rows: meta.rows,\n      subLabel: meta.subLabel,\n      tip: meta.tip,\n    });\n  }\n\n  const advancedKeys = [...ADVANCED_TOGGLE_KEYS, ...ADVANCED_SUBFIELDS_BY_TYPE[type]];\n  for (const key of advancedKeys) {\n    const meta = STEP_DETAILS_FIELD_META[key];\n    if (!meta || result.some((f) => f.key === key)) continue;\n    const typeMap = {\n      text: 'string' as const,\n      textarea: 'textarea' as const,\n      code: 'code' as const,\n      dropdown: 'dropdown' as const,\n      toggle: 'boolean' as const,\n      toggleGroup: undefined,\n    };\n    const fieldType = meta.controlType === 'toggleGroup' ? undefined : typeMap[meta.controlType];\n    result.push({\n      key: meta.key,\n      label: meta.label,\n      type: fieldType ?? 'string',\n      section: 'advanced',\n      options: meta.options?.map((o) => ({ label: o.label, value: o.value })),\n      placeholder: meta.placeholder,\n      required: meta.required,\n      rows: meta.rows,\n      subLabel: meta.subLabel,\n      tip: meta.tip,\n    });\n  }\n\n  return result;\n}\n","import { ElementRef, Injectable, Injector } from '@angular/core';\nimport { Overlay, OverlayConfig } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { filter } from 'rxjs/operators';\nimport { StepDetailsModalComponent } from './step-details-modal.component';\nimport { StepDetailsModalRef } from './step-details-modal-ref';\nimport {\n  STEP_DETAILS_MODAL_DATA,\n  StepDetailsModalData,\n} from './step-details-modal-data';\nimport { STEP_DETAILS_MODAL_REF } from './step-details-modal-ref';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class StepDetailsModalService {\n  /** Currently open Step Details overlay ref; only one panel is allowed at a time. */\n  private currentRef: StepDetailsModalRef<void> | null = null;\n\n  constructor(private readonly overlay: Overlay, private readonly injector: Injector) {}\n\n  /**\n   * Opens the Step Details modal positioned just below the given origin element.\n   * If a panel is already open, returns the existing ref and does not open a duplicate.\n   * @param origin Element (e.g. \"View Details\" link) to position below\n   * @param data Title and description to display\n   * @returns Ref with afterClosed() and close()\n   */\n  open(\n    origin: ElementRef<HTMLElement>,\n    data: StepDetailsModalData\n  ): StepDetailsModalRef<void> {\n    if (this.currentRef) {\n      return this.currentRef;\n    }\n    const originEl = origin.nativeElement;\n    const gap = 8;\n    const modalWidth = 500;\n    const margin = 8;\n\n    originEl.scrollIntoView({ block: 'nearest', behavior: 'auto' });\n\n    const positionStrategy = this.overlay.position().global();\n\n    const overlayRef = this.overlay.create(\n      new OverlayConfig({\n        hasBackdrop: true,\n        backdropClass: 'cdk-overlay-transparent-backdrop',\n        scrollStrategy: this.overlay.scrollStrategies.reposition(),\n        positionStrategy,\n        panelClass: ['cqa-step-details-modal-panel', 'cqa-ui-root'],\n        width: 'min(560px, 90vw)',\n      })\n    );\n\n    const updatePosition = (): void => {\n      const rect = originEl.getBoundingClientRect();\n      const viewportWidth = window.innerWidth;\n      let top = rect.bottom + gap;\n      let left = rect.left;\n      if (left + modalWidth > viewportWidth - margin) {\n        left = viewportWidth - modalWidth - margin;\n      }\n      if (left < margin) {\n        left = margin;\n      }\n      if (top < margin) {\n        top = margin;\n      }\n      positionStrategy.top(`${top}px`).left(`${left}px`);\n      overlayRef.updatePosition();\n    };\n\n    const modalRef = new StepDetailsModalRef<void>(overlayRef);\n\n    const injector = Injector.create({\n      parent: this.injector,\n      providers: [\n        { provide: STEP_DETAILS_MODAL_REF, useValue: modalRef },\n        { provide: STEP_DETAILS_MODAL_DATA, useValue: data },\n      ],\n    });\n\n    updatePosition();\n\n    const portal = new ComponentPortal(StepDetailsModalComponent, undefined, injector);\n    overlayRef.attach(portal);\n\n    requestAnimationFrame(() => updatePosition());\n\n    const scrollListener = (): void => updatePosition();\n    window.addEventListener('scroll', scrollListener, true);\n    window.addEventListener('resize', scrollListener);\n    this.currentRef = modalRef;\n    modalRef.afterClosed().subscribe(() => {\n      this.currentRef = null;\n      window.removeEventListener('scroll', scrollListener, true);\n      window.removeEventListener('resize', scrollListener);\n    });\n\n    overlayRef.backdropClick().subscribe(() => modalRef.close());\n    overlayRef\n      .keydownEvents()\n      .pipe(\n        filter((e: KeyboardEvent) => e.key === 'Escape' || e.key === 'Esc')\n      )\n      .subscribe(() => modalRef.close());\n\n    return modalRef;\n  }\n}\n","import * as momentImport from 'moment';\nimport { ConfigurationItem } from '../configuration-card/configuration-card.component';\n\nconst moment = (momentImport as any).default || (momentImport as any);\n\nexport interface TestCaseDetailsConfigSection {\n  title: string;\n  icon?: string;\n  items: ConfigurationItem[];\n}\n\nexport type StatusDotColor = 'yellow' | 'red' | 'green' | 'gray';\n\nexport interface TestCaseDetailsMetadataItem {\n  label: string;\n  value: string;\n  icon?: string;\n  iconLibrary?: 'mat' | 'fa';\n  link?: string;\n  statusColor?: StatusDotColor;\n}\n\n/** Maps status/priority value (lowercase) to dot color. Override to customize. */\nexport type StatusColorConfig = Partial<Record<string, StatusDotColor>>;\n\n/** Default status value -> dot color. Override via BuildTestCaseDetailsOptions. */\nexport const DEFAULT_STATUS_COLOR_CONFIG: Record<string, StatusDotColor> = {\n  active: 'green',\n  inactive: 'gray',\n  pending: 'yellow',\n  completed: 'green',\n  'in review': 'yellow',\n  draft: 'gray',\n  approved: 'green',\n  rejected: 'red',\n  blocked: 'red',\n  'in progress': 'yellow',\n  done: 'green',\n};\n\n/** Default priority value -> dot color. Override via BuildTestCaseDetailsOptions. */\nexport const DEFAULT_PRIORITY_COLOR_CONFIG: Record<string, StatusDotColor> = {\n  critical: 'red',\n  major: 'red',\n  high: 'red',\n  medium: 'yellow',\n  low: 'green',\n  minor: 'green',\n  'not set': 'gray',\n  p0: 'red',\n  p1: 'yellow',\n  p2: 'green',\n  p3: 'gray',\n};\n\n/**\n * API field names for mapping test case data to cqa-test-case-details.\n * Use these when building metadataItems and configSections from your API response.\n */\nexport const TEST_CASE_DETAILS_FIELD_MAP = {\n  /** Metadata (description section) */\n  metadata: {\n    createdOn: 'createdOn',\n    status: 'status',\n    priority: 'priority',\n    environment: 'environment',\n    version: 'version',\n    platform: 'platform',\n    labels: 'labels',\n  },\n  /** Execution config */\n  execution: {\n    prerequisiteCase: 'prerequisiteCase',\n    defaultBrowser: 'defaultBrowser',\n    videoRecording: 'videoRecording',\n    testCaseTimeout: 'testCaseTimeout',\n    waitTimeoutForLocators: 'waitTimeoutForLocators',\n    webBrowser: 'webBrowser',\n    viewport: 'viewport',\n  },\n  /** AI Configuration */\n  aiConfig: {\n    enableAiSmartness: 'enableAiSmartness',\n    defaultAiAction: 'defaultAiAction',\n    knowledgeBaseDefaultTestCase: 'knowledgeBaseDefaultTestCase',\n    useAiMetadata: 'useAiMetadata',\n  },\n  /** Waits & Retries */\n  waitsRetries: {\n    autoWait: 'autoWait',\n    retryFailedSteps: 'retryFailedSteps',\n  },\n  /** Device */\n  device: {\n    platform: 'platform',\n    deviceType: 'deviceType',\n    deviceOS: 'deviceOS',\n    defaultBrowser: 'defaultBrowser',\n    defaultViewport: 'defaultViewport',\n    viewport: 'viewport',\n  },\n} as const;\n\n/** API response shape for test case details. Map your API fields to this structure. */\nexport interface TestCaseDetailsApiData {\n  createdOn?: string | Date;\n  status?: string;\n  priority?: string;\n  type?: string;\n  typeId?: number | string;\n  environment?: string;\n  version?: string;\n  testPlanName?: string;\n  testPlanRedirectUrl?: string;\n  labels?: string[];\n  prerequisiteCase?: string | null;\n  testDataProfile?: string | null;\n  testDataProfileId?: number | string | null;\n  testDataSet?: string | null;\n  testDataSetIndex?: number | null;\n  defaultBrowser?: string;\n  videoRecording?: boolean | string;\n  testCaseTimeout?: string;\n  waitTimeoutForLocators?: string;\n  webBrowser?: string;\n  viewport?: string;\n  enableAiSmartness?: string;\n  defaultAiAction?: string;\n  knowledgeBaseDefaultTestCase?: string | null;\n  useAiMetadata?: string;\n  autoWait?: string;\n  autoWaitEnabled?: boolean;\n  retryFailedSteps?: string;\n  platform?: 'web' | 'mobile';\n  deviceType?: string;\n  deviceOS?: string;\n  defaultViewport?: string;\n  /** Key Flags */\n  mobileTesting?: string | boolean;\n  extensionUse?: string | boolean;\n  dataDriven?: string | boolean;\n}\n\n/** Options for buildTestCaseDetailsFromApi */\nexport interface BuildTestCaseDetailsOptions {\n  /** Override status value -> dot color. Merged with defaults. */\n  statusColorConfig?: StatusColorConfig;\n  /** Override priority value -> dot color. Merged with defaults. */\n  priorityColorConfig?: StatusColorConfig;\n  /** When true, include Device Setting section for mobile test cases (default: false = hidden for mobile). */\n  showDeviceSettingForMobile?: boolean;\n}\n\n/**\n * Build metadataItems and configSections from API data for cqa-test-case-details.\n * Use in ts-portal when mapping test case API response to component inputs.\n */\nexport function buildTestCaseDetailsFromApi(\n  data: TestCaseDetailsApiData,\n  options?: BuildTestCaseDetailsOptions\n): {\n  metadataItems: TestCaseDetailsMetadataItem[];\n  labels: string[];\n  configSections: TestCaseDetailsConfigSection[];\n  configSectionsRow2: TestCaseDetailsConfigSection[];\n} {\n  const formatDate = (v: string | Date | undefined): string => {\n    if (!v) return '';\n    const m = moment(v);\n    return m.isValid() ? m.format('MMM D, YYYY h:mm A') : String(v);\n  };\n\n  const statusConfig = { ...DEFAULT_STATUS_COLOR_CONFIG, ...options?.statusColorConfig };\n  const priorityConfig = { ...DEFAULT_PRIORITY_COLOR_CONFIG, ...options?.priorityColorConfig };\n  const resolveColor = (value: string, config: Partial<Record<string, StatusDotColor>>): StatusDotColor =>\n    config[value.toLowerCase().trim()] ?? 'gray';\n\n  const metadataItems: TestCaseDetailsMetadataItem[] = [];\n  if (data.createdOn != null)\n    metadataItems.push({ label: 'Created on', value: formatDate(data.createdOn), icon: 'calendar_today' });\n  if (data.status != null)\n    metadataItems.push({ label: 'Status', value: data.status, statusColor: resolveColor(data.status, statusConfig) });\n  if (data.priority != null)\n    metadataItems.push({ label: 'Priority', value: data.priority, statusColor: resolveColor(data.priority, priorityConfig) });\n  if (data.environment != null)\n    metadataItems.push({ label: 'Environment', value: data.environment, icon: 'storage' });\n  if (data.version != null)\n    metadataItems.push({ label: 'Version', value: data.version, icon: 'label' });\n  if (data.platform != null) {\n    const platformVal = String(data.platform).trim();\n    const displayPlatform =\n      platformVal === 'web' || platformVal === 'mobile'\n        ? platformVal\n        : /^(android|ios|mobile\\s*app|devices)$/i.test(platformVal)\n          ? 'mobile'\n          : 'web';\n    metadataItems.push({\n      label: 'Platform',\n      value: displayPlatform,\n      icon: 'devices',\n    });\n  }\n\n  const configSections: TestCaseDetailsConfigSection[] = [\n    {\n      title: 'Execution',\n      icon: 'play_circle',\n      items: [\n        { label: 'Type', value: data.type ?? data.typeId ?? null },\n        { label: 'Test Data Profile', value: data.testDataProfile ?? data.testDataProfileId ?? null },\n        { label: 'Test Data Set', value: data.testDataSet ?? data.testDataSetIndex ?? null },\n        // { label: 'Video Recording', value: data.videoRecording ?? '' },\n      ],\n    },\n    {\n      title: 'AI Configuration',\n      icon: 'smart_toy',\n      items: [\n        { label: 'Enable AI Smartness', value: data.enableAiSmartness ?? '' },\n        { label: 'Default AI Action', value: data.defaultAiAction ?? '' },\n        { label: 'Knowledge Base Default Test Case', value: data.knowledgeBaseDefaultTestCase ?? null },\n        { label: 'Enable AI metadata collection', value: data.useAiMetadata ?? '' },\n      ],\n    },\n  ];\n\n  const configSectionsRow2: TestCaseDetailsConfigSection[] = [\n    {\n      title: 'Wait and retries',\n      icon: 'timer',\n      items: [\n        { label: 'Enable Avoid Auto wait for steps', value: data.autoWaitEnabled ?? false },\n        { label: 'Retry Failed Steps', value: data.retryFailedSteps ?? '' },\n        { label: 'Test Case Timeout (minutes)', value: data.testCaseTimeout ?? '' },\n        { label: 'Wait Timeout for Locators (secs)', value: data.waitTimeoutForLocators ?? '' },\n      ],\n    },\n    {\n      title: 'Device Setting',\n      icon: 'devices',\n      items: (() => {\n        const platform = data.platform ?? 'web';\n        if (platform === 'web') {\n          return [\n            { label: 'Default Browser', value: data.defaultBrowser ?? data.webBrowser ?? '' },\n            { label: 'Default Viewport', value: data.defaultViewport ?? data.viewport ?? '' },\n          ];\n        }\n        return [\n          { label: 'Default OS', value: data.deviceOS ?? '' },\n          { label: 'Default Phone', value: data.deviceType ?? '' },\n        ];\n      })(),\n    },\n    {\n      title: 'Key Flags',\n      icon: 'flag',\n      items: [\n        { label: 'Mobile Testing', value: data.mobileTesting ?? '' },\n        { label: 'Extension Use', value: data.extensionUse ?? '' },\n        { label: 'Data Driven', value: data.dataDriven ?? '' },\n      ],\n    },\n  ];\n\n  // Hide Device Setting for mobile unless showDeviceSettingForMobile is true\n  const isMobile = data.platform === 'mobile' || data.mobileTesting === true;\n  const hideDeviceSettingForMobile = isMobile && !options?.showDeviceSettingForMobile;\n  const filteredConfigSectionsRow2 = hideDeviceSettingForMobile\n    ? configSectionsRow2.filter((s) => s.title !== 'Device Setting')\n    : configSectionsRow2;\n\n  return {\n    metadataItems,\n    labels: data.labels ?? [],\n    configSections,\n    configSectionsRow2: filteredConfigSectionsRow2,\n  };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i1.ButtonComponent","i2.FullTableLoaderComponent","i3.TableDataLoaderComponent","i6.DynamicCellContainerDirective","i5","moment","i2.DaterangepickerDirective","i2.DynamicSelectFieldComponent","i3.DaterangepickerComponent","i4.ButtonComponent","i6","i1.MetricsBlockComponent","i2.EmptyStateComponent","i2.WorkspaceSelectorComponent","getMetadataColorStyle","i1.BadgeComponent","i3.ButtonComponent","i2.ButtonComponent","i3.CustomInputComponent","i1.SearchBarComponent","i3.ExportCodeModalComponent","i4.ColumnVisibilityComponent","i5.SegmentControlComponent","i6.SelectedFiltersComponent","i7.DynamicFilterComponent","i8.DynamicTableComponent","i9.EmptyStateComponent","i10.PaginationComponent","i11.TableActionToolbarComponent","i12","i1.CustomInputComponent","i2.MoveToFolderDialogComponent","i2.SearchBarComponent","i4.FolderDropDirective","i5.FolderDragDirective","i7","i1.DialogService","i4.ExportCodeModalComponent","i5.ColumnVisibilityComponent","i6.SegmentControlComponent","i7.SelectedFiltersComponent","i8.DynamicFilterComponent","i9.FolderSidebarComponent","i10","i11.DynamicTableComponent","i12.EmptyStateComponent","i13.PaginationComponent","i14.TableActionToolbarComponent","i15","i16.FolderDropDirective","i2.CustomInputComponent","i1.NavItemComponent","i2.NavSubItemComponent","i3.SafeHtmlPipe","i2.NavMenuComponent","i3.ProfileMenuComponent","i4.WorkspaceMenuComponent","i1.VisualComparisonComponent","i5.AiLogsWithReasoningComponent","i6.StepRendererComponent","i7.SelfHealAnalysisComponent","i8.ViewMoreFailedStepButtonComponent","i9.UpdatedFailedStepComponent","i11","i4.StepRendererComponent","i4.AiLogsWithReasoningComponent","i5.StepRendererComponent","i6.SelfHealAnalysisComponent","i7.ViewMoreFailedStepButtonComponent","i8.UpdatedFailedStepComponent","i9","i5.SelfHealAnalysisComponent","i6.ViewMoreFailedStepButtonComponent","i7.UpdatedFailedStepComponent","i8","i3.VisualComparisonComponent","i4.SelfHealAnalysisComponent","i5.ViewMoreFailedStepButtonComponent","i6.UpdatedFailedStepComponent","i3.SegmentControlComponent","i5.BadgeComponent","i6.ButtonComponent","i2.BadgeComponent","i5.TableTemplateComponent","i1.TableTemplateComponent","i2.TableTemplateComponent","i5.DbQueryExecutionItemComponent","i7.TableTemplateComponent","i8.SelfHealAnalysisComponent","i9.ViewMoreFailedStepButtonComponent","i10.UpdatedFailedStepComponent","i2.CustomTextareaComponent","i5.ButtonComponent","i2.ElementFormComponent","i3.BadgeComponent","i4.SearchBarComponent","i5.ElementListComponent","i1.CustomEditStepService","i2.ElementPopupService","i3.TestDataModalService","i3.AutocompleteComponent","i5.TestCaseDetailsRendererComponent","i2.AutocompleteComponent","i4.DynamicSelectFieldComponent","i5.CustomInputComponent","i7.TestCaseDetailsRendererComponent","i10.SafeHtmlPipe","i1.TestCaseDetailsRendererComponent","i1.DynamicSelectFieldComponent","i5.AutocompleteComponent","i6.BadgeComponent","i7.CustomTextareaComponent","i8.SegmentControlComponent","i10.AdvancedVariablesFormComponent","i3.DynamicSelectFieldComponent","i4.MixedVariableInputComponent","i5.ElementFormComponent","i7.CamelToTitlePipe","i3.SearchBarComponent","i4.TemplateVariablesFormComponent","i6.AdvancedVariablesFormComponent","i7.BadgeComponent","i4.CustomInputComponent","i7.StepBuilderActionComponent","i8.BadgeComponent","i4.BadgeComponent","i5.CustomTextareaComponent","i6.CustomInputComponent","i13.AdvancedVariablesFormComponent","i14","i16","i7.ButtonComponent","i3.CodeEditorComponent","i7.AdvancedVariablesFormComponent","i8.ButtonComponent","i9.BadgeComponent","i4.SegmentControlComponent","i5.FileUploadComponent","i1.CustomToggleComponent","i5.CustomToggleComponent","i7.DropdownButtonComponent","i8.RadioCardGroupComponent","i9.ApiMockingCardComponent","i10.ButtonComponent","i1.TestCaseDetailsEditComponent","i4.ConfigurationCardComponent","i5.ApiMockingCardComponent","i4.CustomTextareaComponent","i3.TemplateVariablesFormComponent","i5.AdvancedVariablesFormComponent","i1.EmptyStateComponent","i3.EmptyStateComponent","i1.RadioCardGroupComponent","i2.DropdownButtonComponent","i3.PermissionToggleComponent","i2.CustomToggleComponent","i2.PermissionToggleComponent","i3.FullTableLoaderComponent","i4.EmptyStateComponent","i5.AuditLogEntryCardComponent"],"mappings":"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"}